首页 > 其他分享 >0基础学Pine量化 动态EMA改进

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

时间:2024-09-15 09:36:01浏览次数:7  
标签:EMA title color 30 Pine strategy ATR 量化 ta

改进前

源策略是基于唐奇安上下轨,先看看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)

标签:EMA,title,color,30,Pine,strategy,ATR,量化,ta
From: https://www.cnblogs.com/Mephostopheles/p/18414552

相关文章

  • 最新! Sagemath Windows 平台最新安装教程 2024
    SageMath安装指南:Windows平台最新安装方法(Sage版本为最新10.4)本文虽然为AI写的(还只有文字),但是截止发文的日期,本人并未在中文互联网上搜索到如何安装sagemath的最新版10.4。所有的方法中,需要Cygwin的exe直装的Sagemath9.3版的;而ubuntu直接apt安装的Sagemath版本为9.5(如果是20.......
  • MAST20018 – Discrete Mathematics and Operations Research
    MAST20018 – Discrete Mathematics and Operations ResearchAssignment 3Upload to Gradescope by 5pm Wed 18th September 2024Question 1In assignment 1, you considered the following project with 8 activities, labelled A to H:......
  • MAST20029 Engineering Mathematics
    MAST20029EngineeringMathematics,Semester22024Assignment2SubmitasinglepdffileofyourassignmentontheMAST20029websitebefore9amonMonday16thSeptember.•Thisassignmentisworth5%ofyourfinalMAST20029mark.•Assignmentsmustbenea......
  • 二、神经网络基础(逻辑回归和向量化)
    1、二分类  logistic回归是一个用于二分类(BinaryClassification)的算法。二分类就是输出结果y只有0和1两个标签(也有-1和1的情况)。以一个图像识别为例,例如识别猫,1代表猫,0代表不是猫。用y表示输出的结果标签。  在二分类问题中,目标是训练一个分类器,它以图片的特征向量x为输入,......
  • 股票api接口程序化报备,程序化交易监管对个人量化交易者有何影响
    炒股自动化:申请官方API接口,散户也可以python炒股自动化(0),申请券商API接口python炒股自动化(1),量化交易接口区别Python炒股自动化(2):获取股票实时数据和历史数据Python炒股自动化(3):分析取回的实时数据和历史数据Python炒股自动化(4):通过接口向交易所发送订单Python炒股自动化(5):......
  • java中的Map系列的集合HashMap、HashTable、TreeMap以及Collections和Collection的区
    1.Map的特性特性:key键-value值身份证号--->人可以通过key获取到valueMap它的key是唯一的,Map中的key是无序的而且是不重复的value是可以重复的。Map集合的基本方法:Vput(Kkey,Vvalue)添加元素如果put的key存在那么会用新的value的值替换掉原有的value值key......
  • PbootCMS生成的sitemap.xml中增加tag标签链接
    打开/apps/home/model/SitemapModel.php,在78行后面增加个指定分类标签调用代码//指定分类标签调用publicfunctiongetSortTags($scode){$join=array(array('ay_content_sortb','a.scode=b.scode','LEFT'......
  • 解决Go程序可执行文件在alpine容器中无法运行
    Go可执行程序在alpine容器中无法运行的问题解决今天遇到一个问题,我把我的go应用编译好之后,在Dockerfile里指定它到容器中启动,但是启动不起来,我通过测试,发现了这个现象:我的程序是在容器里的,但是我要运行时,它缺提示notfound原因notfound不是说找不到这个程序,而是找不到需要的......
  • Pinely Round 2 (Div. 1 + Div. 2)
    A.Channel题意:最开始网上有\(a\)个人,共\(q\)次改变,每一次有一个人加入或离开。总共\(n\)个人,求这\(n\)个人是否都上过网,有没上过网的,都有可能。思路:贪心地每次选取尽可能多和少的人即可。提交记录B.SplitSort题意:给定一个排列,每次可以选取一个数\(x\),将排列划......
  • YOLOv8改进 | 模块缝合 | C2f 融合RVB + EMA注意力机制【二次融合 + 结构图】
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......