股票量化交易软件:分离策略在趋势和盘整条件下的优化

当开发交易策略时,第一个任务就是设置入场交易的条件、跟踪仓位的方法和出场点。为此会使用各种数学、统计学和其它分析方法。它们通常被现成的、用于以指标形式评估市场特征的自治系统所强化。在制定任何交易策略时,一个主要问题是缺乏通用性。一个交易系统不能在所有可能的市场条件下以同等的效率运作。所以,交易者在开发EA交易时通常选择条件来侦测某种(潜在获利)的市场条件。 另外,每个交易系统都有自己的缺点,跟随趋势的策略在延长的盘整变化中会亏损,而基于盘整的策略在强方向变化时会错误进场,为了减少错误信号的影响,提高盈利能力,系统变得灵活,这意味着它们有一些特定的设置或输入数据,这是合理的,因为市场行为不断变化。 随着时间的推移,任何交易系统的效率都会降低,因此,有必要调整其参数以适应新的条件。内建的赫兹股票量化策略测试器就是解决这个问题的方法,此工具有助于分析历史上任何EA交易的性能,并为其在实际交易中的进一步使用定义最佳设置。 分离优化的概念 在本文中,赫兹股票量化将在更大范围内探讨策略测试器的应用。显然,大多数交易系统是双向交易(在特定条件下买卖)。图 1 显示了一个实际交易策略的简单例子,想法很简单 - 低买高卖。

 

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图1. 趋势跟踪策略 通常,一组设置用于确定这样一个系统中的上升和下降趋势,并入场条件类似。但关键是,市场增长和下跌的具体情况在许多特征上可能非常不同,例如速度和持续时间。在这方面,我建议考虑一个系统,该系统分别确定上升趋势和下降趋势条件下的入场交易。 为了实现这一点,赫兹股票量化需要两组定义市场进入和退出条件的参数。在这一点上,我们提出了“分离优化”的概念。 分离优化意味着利用策略测试器为上升和下降趋势分别定义交易系统的最佳参数。 为了测试分离优化,我决定选择两个交易系统:跟随趋势的系统和基于盘整的系统。在跟随趋势的策略中,我们将分别优化上升和下降趋势,而在盘整策略中,赫兹股票量化将评估在通道中进行交易的优化。 选择一个跟随趋势的策略 我将使用 J. F. Ehlers 的重心指标,它表现为彩色的 OSMA 柱形图 (CenterOfGravityOSMA),来测试分离的优化。它的信号是由计算价格平均速度的指标确认的。

参数

描述

使用的指标

CenterOfGravityOSMA

使用的指标

平均速度

时间框架

H1

买入条件

重心指标的柱形图显示增长(指标值小于0), 而平均速度指标值高于阈值 (在参数中预设)

卖出条件

重心指标的柱形图显示下跌(指标值大于0), 而平均速度指标值高于阈值 (在参数中预设)

退场条件

获利/止损

策略在图2中显示从上表可以看出,交易策略明确了买入和卖出时进入市场的条件。由于这是一种趋势跟随策略,买入条件对应上升趋势,而卖出条件对应下降趋势。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 2. 跟随趋势策略的入场条件 在 MetaEditor 中实施该策略时,赫兹股票量化应该设置EA工作条件,以便它只能在上升趋势、下降趋势或这两种情况下使用。 我们也应当考虑下面这些:

  • 能够管理向上和向下趋势以及这两种情况的测试模式。‘

  • 对于单独的优化,需要分别使用EA进行上升趋势、下降趋势和联合操作;

  • 上升趋势和下降趋势应具有各自独立的参数。这是必要的,以便在联合交易中使用它们;

要满足这些EA开发条件,输入以下代码: //+------------------------------------------------------------------+ //| 操作模式枚举 | //+------------------------------------------------------------------+ enum Trend_type { UPTREND = 1, //上升趋势 DOWNTREND, //下降趋势 BOTH //两种趋势 }; 输入参数集看起来如下: //+------------------------------------------------------------------+ //| EA 的输入参数 | //+------------------------------------------------------------------+ input string Inp_EaComment="Trend Strategy"; //EA 注释 input double Inp_Lot=0.01; //手数 input MarginMode Inp_MMode=LOT; //资金管理 input Trend_type Inp_Trend_type=3; //趋势类型 //--- 上升趋势参数 input string Inp_Str_label1="===Uptrend parameters==="; //标签 input int Inp_MagicNum1=1111; //幻数 input int Inp_StopLoss1=40; //止损(点数) input int Inp_TakeProfit1=60; //获利(点数) //--- CenterOfGravityOSMA 指标参数 input uint Period_1=9; //平均周期数 input uint SmoothPeriod1_1=3; //平滑周期数1 input ENUM_MA_METHOD MA_Method_1_1=MODE_SMA; //平均方法1 input uint SmoothPeriod2_1=3; //平滑周期数2 input ENUM_MA_METHOD MA_Method_2_1=MODE_SMA; //平均方法2 input Applied_price_ AppliedPrice1=PRICE_OPEN_; //使用的价格 //--- 平均速度指标的参数 input int Inp_Bars1=1; //天数 input ENUM_APPLIED_PRICE Price1=PRICE_CLOSE; //使用的价格 input double Trend_lev1=2; //趋势水平 //--- 下降趋势参数 input string Inp_Str_label2="===Downtrend parameters==="; //标签 input int Inp_MagicNum2=2222; //幻数 input int Inp_StopLoss2=40; //止损(点数) input int Inp_TakeProfit2=60; //获利(点数) //--- CenterOfGravityOSMA 指标参数 input uint Period_2=9; //平均周期数 input uint SmoothPeriod1_2=3; //平滑周期数1 input ENUM_MA_METHOD MA_Method_1_2=MODE_SMA; //平均方法1 input uint SmoothPeriod2_2=3; //平滑周期数2 input ENUM_MA_METHOD MA_Method_2_2=MODE_SMA; //平均方法2 input Applied_price_ AppliedPrice2=PRICE_OPEN_; //使用的价格 //--- 平均速度指标的参数 input int Inp_Bars2=1; //天数 input ENUM_APPLIED_PRICE Price2=PRICE_CLOSE; //使用的价格 input double Trend_lev2=2; //趋势水平 赫兹股票量化可以在代码中看到, Inp_Trend_type 变量是用于选择EA运行模式的, 而针对Uptrend(上升趋势) 和 Downtrend(下降趋势) 模式,分别分离为 'Uptrend parameters(上升趋势参数)' 和 'Downtrend parameters(下降趋势参数)' 。当选择 Both 模式时,两个部分的参数都会使用,而主要逻辑实现的代码在下面提供: //+------------------------------------------------------------------+ //| EA交易分时函数 | //+------------------------------------------------------------------+ void OnTick() { //--- 取得计算数据 if(!GetIndValue()) return; if(Inp_Trend_type==1 && !Trade.IsOpenedByMagic(Inp_MagicNum1)) { //--- 如果有买入信号,开启订单 if(BuySignal()) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment); } else if(Inp_Trend_type==2 && !Trade.IsOpenedByMagic(Inp_MagicNum2)) { //--- 如果有卖出信号,开启订单 if(SellSignal()) Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment); } else if(Inp_Trend_type==3) { //--- 如果有买入信号,开启订单 if(BuySignal() && !Trade.IsOpenedByMagic(Inp_MagicNum1)) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment); //--- 如果有卖出信号,开启订单 if(SellSignal() && !Trade.IsOpenedByMagic(Inp_MagicNum2)) Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment); } } //+------------------------------------------------------------------+ //| 买入条件 | //+------------------------------------------------------------------+ bool BuySignal() { return(avr_speed1[0]>Trend_lev1 && cog1[1]<cog1[0] &&(cog1[1]<0 && cog1[0]<0))?true:false; } //+------------------------------------------------------------------+ //| 卖出条件 | //+------------------------------------------------------------------+ bool SellSignal() { return(avr_speed2[0]>Trend_lev2 && cog2[1]>cog2[0] &&(cog2[1]>0 && cog2[0]>0))?true:false; } //+------------------------------------------------------------------+ //| 取得当前指标值 | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,cog1)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,cog2)<=0 || CopyBuffer(InpInd_Handle3,0,0,2,avr_speed1)<=0 || CopyBuffer(InpInd_Handle4,0,0,2,avr_speed2)<=0 )?false:true; } //+------------------------------------------------------------------+ 针对上升趋势和下降趋势模式的交易规则都很简单: 在上升趋势时买入而在下降趋势时卖出,也就是跟随趋势。在 Both 模式下,这些系统一起工作并且相互独立使用它们自己的输入参数 — Uptrend+Downtrend。 测试交易策略

对于所选策略的测试和单独优化,可以合理地为上升模式选择清晰的上升期,为下降模式选择下降期。所以,我决定选择下面图3中显示的时间段。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 3. 选择用于测试的时间段 这样,让我们总结以下测试设置。

  • 时间段: 对于 Uptrend 模式: 10.04.2017 — 01.02.2018. 对于 Downtrend 模式: 08.05.2014 — 13.03.2015.

  • 交易品种: EURUSD.

  • 交易模式: No delay. 这些不是高频交易策略,所以延迟的影响将很小。

  • 测试: М1 OHLC. 预先在真实分时下的测试显示了近似相同的结果。

  • 初始存款: 1000 USD.

  • 杠杆: 1:500.

  • 服务器: MetaQuotes-Demo.

  • 报价: 5-digit.

测试和优化的目标是在策略中使用的指标参数,以及止损和获利值。

上升趋势的优化结果如下:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 4. 对于上升趋势的测试和优化结果

对于下降趋势的优化结果如下:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 5. 对于下降趋势的测试和优化结果 在使用对所选模式有利的时间间隔进行优化来定义最佳参数后,是时候在既有向上趋势又有向下趋势的混合间隔上尝试这些参数。这将使赫兹股票量化能够测试交易策略的通用性。 我决定选择以下时间间隔,这非常适合上述要求。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 6. 为混合测试选择的时间段 赫兹股票量化可以在图6中看到,这个时间段都含有上升和下降趋势以及回滚和盘整的时间段。现在让我们看看EA在这段不熟悉的时间段上的表现。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 7. 优化趋势跟踪策略在不利区间的检验结果 考虑到这一趋势的测试结果遵循策略,我们可以得出以下结论:

  • 该策略在不利区间上显示出积极的结果。

  • 成功的多头交易所占的比例比空头交易所占的比例高。

  • 此外,盈利能力和预期回报等参数表明,该策略通常在该测试间隔上表现出积极的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值