0基础学Pine量化 动态EMA改进

news/2024/11/17 10:28:51/文章来源:https://www.cnblogs.com/Mephostopheles/p/18414552

改进前

源策略是基于唐奇安上下轨,先看看15mink线USDT的2023.7.30-2024.7.30的结果

下面是2022-7-30到2023-7-30

下面是2021-7-30到2022-7-30

改进后

加入动态EMA和止盈止损

15mink线USDT的2023.8.30-2024.8.30的结果

下面是2022-7-30到2023-7-30

下面是2021-7-30到2022-7-30

改进点

主要缓和了21-22年亏损巨大,动态EMA可以根据市场状况(如ATR)自动调整,使得它能够适应不同的市场环境,从而减少对市场的滞后反应或过度敏感的问题。

源代码

//@version=5
strategy("Improved Strategy with Proportional Dynamic EMA", overlay=true)// Define variables
var float SWH = na  // 多头趋势转换点
var float SWL = na  // 空头趋势转换点
var int Qushi = -1  // 趋势状态 -1: 空头, 1: 多头
var int SW = 0  // 状态开关,标记趋势的转换
var float atrValue = na  // 固定的ATR值// 定义基础的EMA周期
basePeriod1 = input.int(1,title="ema1")
basePeriod2 = input.int(70,title="ema2")
basePeriod3 = input.int(260,title="ema3")// 定义比例因子,用于根据某些条件调整周期 (这里我们用 ATR 作为调整因子)
atr50 = 10 * ta.atr(50)  // 计算50周期ATR
proportionFactor = 1 + (atr50 / close)  // ATR 与当前价格的比值作为调整比例// 动态调整后的EMA周期,按比例缩放
dynamicPeriod1 = basePeriod1 * proportionFactor
dynamicPeriod2 = basePeriod2 * proportionFactor
dynamicPeriod3 = basePeriod3 * proportionFactor// Moving averages with dynamic periods
ma1 = ta.ema(close, int(dynamicPeriod1))  // 动态调整的EMA5
ma2 = ta.ema(close, int(dynamicPeriod2))  // 动态调整的EMA47
ma3 = ta.ema(close, int(dynamicPeriod3))  // 动态调整的EMA54// Donchian Channel (唐奇安通道上下轨)
HH = ta.highest(high, 20)
LL = ta.lowest(low, 20)// Calculate ATR for the first 100 bars and fix it
if (na(atrValue))  // 如果 ATR 尚未设置atrValue := ta.atr(100)  // 在前 100 根 K 线后,计算 ATR 并固定它// Trend detection based on MA crosses
if (ta.crossover(ma1, ma2) and ma2 > ma3)SW := 1  // 触发多头趋势开关SWH := HH  // 记录唐奇安上轨if (ta.crossunder(ma1, ma2) and ma2 < ma3)SW := -1  // 触发空头趋势开关SWL := LL  // 记录唐奇安下轨// Trend confirmation using fixed ATR and Donchian breakout
if (Qushi == -1 and SW == 1 and high > SWH + 4 * atrValue)Qushi := 1  // 转多头趋势label.new(bar_index, low, "多", color=color.red)if (Qushi == 1 and SW == -1 and low < SWL - 4 * atrValue)Qushi := -1  // 转空头趋势label.new(bar_index, high, "空", color=color.yellow)// Entry conditions for long position
if (strategy.position_size == 0 and Qushi == 1)strategy.entry("Long", strategy.long)label.new(bar_index, low, "开多", color=color.green)// Exit conditions for long position
if (strategy.position_size > 0 and Qushi == -1)strategy.close("Long")label.new(bar_index, high, "平多", color=color.orange)// --- Add Trailing Stop Loss and Take Profit ---// Calculate dynamic ATR for stop loss and take profit
dynamicATR = ta.atr(14)  // 这里的ATR是动态变化的// Add floating stop loss (Trailing Stop)
strategy.exit("Exit Long", from_entry="Long", trail_offset=3 * dynamicATR, comment="浮动止损")// Add fixed take profit (止盈目标)
takeProfitPrice = strategy.position_avg_price + 5 * dynamicATR  // 设置止盈目标为5倍ATR
strategy.exit("Take Profit", from_entry="Long", limit=takeProfitPrice, comment="浮动止盈")// Plot the moving averages and indicators on the chart
plot(ma1, color=color.red, title="Dynamic EMA5")
plot(ma2, color=color.black, title="Proportional Dynamic EMA47")
plot(ma3, color=color.purple, title="Proportional Dynamic EMA54")
plot(LL - 4*atrValue, color=color.blue, title="Donchian Low")
plot(HH + 4*atrValue, color=color.green, title="Donchian High")// 绘制比例因子
plot(proportionFactor, title="Proportion Factor", color=color.blue)

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

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

相关文章

决策论——决策模型三要素精解

运筹学中的决策论主要针对不确定环境下的决策问题,提供数学化和系统化的工具,帮助决策者在复杂情境中选择最优方案。相比一般的决策分析,运筹学更注重定量分析,借助模型、损益表等工具,将不确定性和风险因素纳入考虑。决策模式可以分为确定性、风险性和不确定性三种,每种…

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览Cisco Modeling Labs (CML) 2.7.2 - 网络仿真工具 思科建模实验室 (CML) 请访问原文链接:https://sysin.org/blog/cisco-modeling-labs-2/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgCisco Modelin…

读构建可扩展分布式系统:方法与实践04应用服务

应用服务1. 应用服务 1.1. 任何系统的核心都在于实现应用需求的特定业务逻辑 1.2. 服务是可扩展软件系统的核心1.2.1. 它们将契约定义为一个API,向客户端声明它们的能力1.3. 应用服务器高度依赖于编程语言,但通常都会提供多线程编程模型,允许服务同时处理许多请求 1.4. 多服…

【极速下载】Vmware17.5.2官方最新版本2024网盘下载

Mware简介VMware 是一款强大的虚拟化软件。它能在一台物理机上同时运行多个操作系统,实现资源高效利用。可用于服务器虚拟化、桌面虚拟化等。提高系统可靠性、可扩展性与安全性,降低成本和管理复杂度。VMware广泛应用于企业数据中心和云计算领域,是 IT 重要工具。 VMware最…

Junior.Crypt.2024 CTF - Forensics

补充学习了有关evtx以及注册表的知识Junior.Crypt.2024 CTF - Forensics 部分题目复现参考: https://blog.jacki.cn/2024/07/05/Junior_Crypt_2024_CTF/#SAMBO-wrestler https://yocchin.hatenablog.com/entry/2024/07/08/124230 标注“#”表示未复现,日后有机会补上吧 题目地…

全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数

在 Python 中,函数和方法都是代码的基本单元,用于封装和执行特定的任务。它们之间有一些重要的区别,而 lambda 匿名函数则是 Python 提供的一种简洁定义小型函数的方法。全网最适合入门的面向对象编程教程:49 Python 函数方法与接口-函数与方法的区别和 lamda 匿名函数摘要…

基于 CrewAI 多智能体框架,手把手构建一个自动化写作应用实战

利用 CrewAI 多智能体框架,我们可以更细粒度的控制智能体和任务,通过不同的流程组织协同多智能体共同完成工作……明月皓皓,星河灿烂,中秋佳节,团圆美满。祝大家中秋节快乐!听说台风要来了,也不知道还能不能吃着月饼赏个月?老牛同学在上文(Agent(智能体)和 MetaGPT,一…

【推荐 - 源码安装】nginx - 安装

准备查看操作系统的版本信息[root@lab10 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)查看操作系统的网卡地址[root@lab10 ~]# ip address show ens32 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group de…