0基础开始Pine量化 止盈改进策略(附代码)

0基础开始Pine量化 止盈改进策略(附代码)

可以先看前面文章里涉及到的策略
https://www.cnblogs.com/Mephostopheles/p/18406658

什么是止盈

止盈的核心思想:
当市场价格达到设定的目标后,投资者会卖出资产,防止市场波动将已经取得的利润变为损失。
通过止盈,投资者在确保一定盈利的情况下退出市场,而不是继续持有以追求更高的收益,从而避免市场行情逆转带来的风险。

止盈的常见方式:

固定价格止盈:设定一个具体的价格作为目标,一旦价格触及该水平就卖出资产。例如,某只股票买入价是 100,当价格上涨到 120 时卖出,锁定 20% 的利润。

百分比止盈:设定一个百分比目标,当资产价格上涨到预期百分比时卖出。例如,设定止盈目标为 10%,当资产价格涨幅达到 10% 时卖出。

技术指标止盈:使用技术分析工具(如移动平均线、相对强弱指数 RSI、布林带等)来判断市场趋势的变化,从而选择合适的时机卖出。例如,当 RSI 显示超买信号时,选择止盈。

动态止盈(追踪止盈):设定一个价格回撤的比例或金额,随着价格上涨,止盈价格也同步上移。当价格从高点回落到设定的比例时触发卖出。例如,设定 5% 的回撤止盈,当价格从最高点下跌 5% 时卖出。

改进前

定义了三个 EMA,分别为 9、26 和 55 周期的指数移动平均线,三种不同的 Supertrend,分别基于 7、14 和 21 个周期(length1, length2, length3)和不同的乘数(factor1, factor2, factor3)。

策略结果如下

改进后

首先把7和21个周期的Supertrend删去,然后加入止盈,这里止盈的百分比默认为 3.0%,例如,如果入场价是 100,止盈百分比为 3%,那么止盈价格就是 100 * 1.03 = 103。

改进原因

减少因为多信号导致的反应迟缓,3.0%的止盈可以防止在强趋势出现反转之前利润被侵蚀

结果如下图,可以看到各项指数均得到一定幅度的优化

源代码

/*backtest
start: 2023-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*///@version=5
strategy("Simplified Golden Crossover with Supertrend and Take Profit", overlay=true)// Define EMA lengths
ema9_length = 9
ema26_length = 26
ema55_length = 55// Input parameters for different timeframes
timeFrame9 = input.timeframe('', 'Time Frame - EMA 9')
timeFrame26 = input.timeframe('', 'Time Frame - EMA 26')
timeFrame55 = input.timeframe('', 'Time Frame - EMA 55')// Request EMA data from specified time frames
ema9 = request.security(syminfo.tickerid, timeFrame9, ta.ema(close, ema9_length))
ema26 = request.security(syminfo.tickerid, timeFrame26, ta.ema(close, ema26_length))
ema55 = request.security(syminfo.tickerid, timeFrame55, ta.ema(close, ema55_length))// Supertrend function (single Supertrend)
supertrend(length, factor) =>[superTrend, direction] = ta.supertrend(factor, length)superTrend// Supertrend parameters (only one Supertrend for simplicity)
length_supertrend = 14
factor_supertrend = 2// Supertrend calculation
superTrend = supertrend(length_supertrend, factor_supertrend)// Plot EMAs on the chart
plot(ema9, color=color.black, title="EMA 9")
plot(ema26, color=color.green, title="EMA 26")
plot(ema55, color=color.red, title="EMA 55")// Plot Supertrend line on the chart
plot(superTrend, color=color.blue, title="Supertrend")// Define buy and sell conditions combining EMA crossover and Supertrend
buy_condition_ema = ta.crossover(ema9, ema26) and ema26 > ema55
sell_condition_ema = ta.crossunder(ema9, ema26) and ema26 < ema55buy_condition_supertrend = close > superTrend
sell_condition_supertrend = close < superTrend// Combine the conditions (one Supertrend + EMA crossover)
buy_condition = buy_condition_ema and buy_condition_supertrend
sell_condition = sell_condition_ema or sell_condition_supertrend// Input for Take Profit percentage
take_profit_percent = input.float(3.0, title="Take Profit %", minval=0.1) / 100// Calculate Take Profit level based on the entry price
take_profit_level = strategy.position_avg_price * (1 + take_profit_percent)// Execute buy and sell orders
if (buy_condition)strategy.entry("Buy", strategy.long)// Close position with Take Profit and normal exit conditions
strategy.exit("Take Profit", "Buy", limit=take_profit_level)// Sell condition to close the order
if (sell_condition)strategy.close("Buy")// Plot buy and sell signals on the chart
plotshape(series=buy_condition, location=location.belowbar, color=color.green, style=shape.arrowup, title="Buy Signal")
plotshape(series=sell_condition, location=location.abovebar, color=color.red, style=shape.arrowdown, title="Sell Signal")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795617.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

词表示与语言模型、大模型背后的范式

这张幻灯片讨论了大模型背后的范式,特别是预训练和微调的基本范式可以追溯到迁移学习。以下是主要内容:迁移学习 :预训练和微调的基本范式可以追溯到迁移学习。 人类可以应用之前学到的知识更快地处理新问题,我们希望机器也具有类似的能力。传统机器学习 vs. 迁移学习 :左…

词表示与语言模型

不积跬步,无以至千里;不积小流,无以成江海。

文件对比工具--BeyondCompare

💖简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具,由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异,并且可以合并变化、同步文件以及备份重要数据 💻环境 windows 📖版本 Beyond Compare v5.0.2 🔗地址 https://www.scootersoftwar…

基于sqli-labs Less-1的sql注入原理详细讲解

SQLi Labs 是一个专为学习和测试 SQL 注入漏洞而设计的实验室平台。它旨在帮助安全研究人员、开发者以及网络安全爱好者深入理解和实践各种 SQL 注入攻击。SQLi Labs 提供了一系列精心设计的实验室环境和挑战,模拟真实的 SQL 注入漏洞,并提供相应的解决方案。 关于sqli-labs靶…

UE4(5)逆向学习笔记(三)——UEDumper源码学习

目录0.前言1.准备2.开始阅读2.1 设置版本和Offset2.2 获取GName2.3 使用GName2.4 获取GUObjectArray2.5 使用GUObjectArray2.6 寻找dump主流程2.6.1 ObjectsManager::copyGObjectPtrs2.6.2 ObjectsManager::copyUBigObjects2.6.3 EngineCore::cacheFNames2.6.4 Engin…

k8s dashboard token 生成/获取

创建示例用户在本指南中,我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。 对于以下每个和的代码片段ServiceAccount,ClusterRoleBinding您都应该将它们复制到新的清单文件(如)中,dashboard-admin…

个人项目

这个作业属于哪个课程 计科22级12班这个作业要求在哪里 作业要求 这个作业的目标 完成个人项目,实现论文查重的功能,了解软件开发流程Github链接 一.PSP表格PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 15 20Estimate 估计这个任务…

互联网医疗|基于音视频SDK和即时通讯IM技术实现线上问诊功能

不论是科普医学知识,还是医疗行业者的专业培训、手术示教,采用远程直播培训的方式能够打破空间限制,同时也保留了课堂的互动性,大大节省了讲师和学员的成本。帮助开发者全面监测音视频服务,包括问题定位诊断、洞察质量与体验、业务经营分析、实时监控告警等,低门槛、高效…

Spring boot 2.x validator

1、使用方式 2、常用注解

DBeaver 连接 mysql 报错:Public Key Retrieval is not allowed

前言 DBeaver 连接 mysql 报错:Public Key Retrieval is not allowed 遇到 "Public Key Retrieval is not allowed" 错误时,通常意味着你正在使用的身份验证方法需要加密连接,但是没有正确地配置客户端或服务器来支持这种加密。 解决 第一种 可以在连接字符串中添…

Rest-assured框架详解

Rest-assured框架官网 官网url: https://rest-assured.io/ 一、接口测试介绍 - 什么是接口测试 本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。 - 为什么做接口测试 更早发现问题,降低研…