搜索
瓜瓜678自助返现ECM Trading Limited

关于“Twinkle Star”在期货品种上应用的探索

时间:2019-6-2 14:59 2 80 | 复制链接 |

签到天数: 12 天

[LV.3]偶尔看看II

12

主题

198

帖子

1057

积分

积分
1057

暴发户周年纪念水鬼混世魔王

QQ
  原帖在这TwinkleStar,ea临摹习作,随机震荡+布林+均线+马丁”http://www.520fx.com/thread-53534-1-1.html?_dsign=47686312
  这个ea的核心思想是,在顺势的前提下,当KD指标出现反向交易信号,就开仓。有点在大趋势里抓取小型反弹的意思。当然这个ea对马丁格尔也进行了一些优化,包括开仓间隔、开仓条件等。最后回测结果表现还可以,但是会有爆仓的情况。
  我保留了这个策略开平仓的条件,删掉了关于马丁格尔的部分。因为国内期货一般最低交易手数是1手,最低金额也有900多元,最高的一手要3万多元,无法放心地加仓。在出场上,我还是用了传统的硬止损+跟踪止损,严格遵守不加仓的原则。代码(tradeblazer平台)如下:
  1. Params:

  2. //Numeric SlowLength(3);       
  3. //Numeric SmoothLength(3);
  4. Numeric short_length(60);
  5. Numeric long_length(240);
  6. Numeric EffRatioLength(12);         // ER系数周期,各品种不同
  7. Numeric KDJlength(9);
  8. Numeric Hlength(3);
  9. Numeric LLength(3);
  10. Numeric NATRstop(4);       
  11. Numeric StopLoss(30);
  12. Numeric TRlength(60);
  13. Numeric N(0);
  14. Numeric Lots(1);


  15. //MARTINDISTANCE(18),
  16. //MARTINFACTOR(2)

  17. Vars:
  18. Numeric FastAvgLength(3);
  19. Numeric SlowAvgLength(50);
  20. Numeric MinPoint;
  21. NumericSeries AMAValue;            // 主要AMA线
  22. BoolSeries LongEntryCondition(false);
  23. BoolSeries ShortEntryCondition(false);
  24. BoolSeries LongExitCondition(false);
  25. BoolSeries ShortExitCondition(false);
  26. NumericSeries HighestValue;                               
  27. NumericSeries LowestValue;               
  28. NumericSeries KValue;
  29. Numeric SumHLValue;
  30. Numeric SumCLValue;
  31. Numeric DValue;
  32. Numeric LENGTH_MAC(240);
  33. NumericSeries HighestAfterEntry;   // 开仓后出现的最高价
  34. NumericSeries LowestAfterEntry;    // 开仓后出现的最低价
  35. Numeric MyExitPrice;        // 硬止损出场均价,平仓价格
  36. NumericSeries ATR;                            // 本周期ATR
  37. NumericSeries ATRmean;
  38. NumericSeries ATRstand;
  39. NumericSeries StandardATR;
  40.        
  41. BoolSeries TS_Reentry_long;   // 多头TS追踪止损
  42. BoolSeries stoploss_hard_long(False);
  43. BoolSeries Normal_Trailing_long(False);
  44. BoolSeries TS_Reentry_short        ;           // 空头TS追踪止损
  45. BoolSeries stoploss_hard_short(False);
  46. BoolSeries Normal_Trailing_short(False);


  47. BEGIN
  48. // ------------------------------------------
  49. // ENTRY RULES
  50. // ------------------------------------------
  51. If(!CallAuctionFilter()) Return;

  52. If( date!=date[1] and high==low ) Return;               // 本bar价格异常

  53. AMAValue = AdaptiveMovAvg(close[1],EffRatioLength,FastAvgLength,SlowAvgLength);
  54. //PlotNumeric("AMAValue",AMAValue[60]);
  55. MinPoint = MinMove*PriceScale;
  56. ATR = AvgTrueRange(20);
  57. ATRmean = Average(ATR,TRlength);
  58. ATRstand = StandardDev(ATR,TRlength);
  59. StandardATR = (ATR[1]-ATRmean)/ATRstand;

  60. HighestValue = HighestFC(High, KDJlength);
  61. LowestValue = LowestFC(Low, KDJlength);
  62. SumHLValue = SummationFC(HighestValue-LowestValue,Hlength);
  63. SumCLValue = SummationFC(Close - LowestValue,LLength);


  64. If(SumHLValue <> 0)
  65.         {
  66.                 KValue = SumCLValue/SumHLValue*100;
  67.         }
  68. Else
  69.         {
  70.                 KValue = 0;
  71.         }
  72. DValue = AverageFC(KValue,3);


  73. LongEntryCondition=close>AMAValue[short_length] and close>AMAValue[long_length] and CrossOver(KValue,DValue) and KValue<50 and DValue<50 and StandardATR>N;
  74. ShortEntryCondition=close<AMAValue[short_length] and close<AMAValue[short_length]and CrossUnder(KValue,DValue) and KValue>50 and KValue>50 and StandardATR>N;


  75. if (CurrentBar>LENGTH_MAC)
  76. {
  77.         If (MarketPosition!=1 and LongEntryCondition[1])
  78.         {                        
  79.                 Buy(Lots,O);
  80.                 Normal_Trailing_long = False;       
  81.             stoploss_hard_long = False;
  82.         }
  83.         If (MarketPosition!=-1 and ShortEntryCondition[1])
  84.          {
  85.                 SellShort(Lots,O);
  86.                 Normal_Trailing_short = False;       
  87.             stoploss_hard_short = False;
  88.         }       
  89. }

  90. //+------------------------------------------------------------------+
  91. //| Check for close order conditions and TrailingStop                 |
  92. //+------------------------------------------------------------------+

  93.        
  94.         // ============================= 以下是跟踪止损计算 =============================

  95.         if ( BarsSinceEntry == 0 )     // 开仓后第一个bar,直接等于开仓价
  96.         {
  97.                 HighestAfterEntry = AvgEntryPrice;
  98.         }

  99.         Else If( BarsSinceEntry > 0 )   // 之后的bar,不断用最高和最低价做比对,赋值给开仓后最高最低价
  100.         {
  101.                 HighestAfterEntry = Max(HighestAfterEntry[1],high[1]);
  102.         }

  103.         Else                          // 没有仓位时,保持上次价格信息,没有其他用途
  104.         {
  105.                 HighestAfterEntry = HighestAfterEntry[1];
  106.         }       
  107.        
  108.         if ( BarsSinceEntry == 1 )     // 开仓后第一个bar,直接等于开仓价
  109.         {
  110.         HighestAfterEntry = AvgEntryPrice;
  111.         LowestAfterEntry = AvgEntryPrice;
  112.         }

  113.         Else If( BarsSinceEntry > 1 )   // 之后的bar,不断用最高和最低价做比对,赋值给开仓后最高最低价
  114.         {
  115.         HighestAfterEntry = Max(HighestAfterEntry[1],high[1]); // 初步测试,在high[1]和low[1]情况下,下bar常规回落止损最好!
  116.         LowestAfterEntry = Min(LowestAfterEntry[1],low[1]);
  117.         }

  118.         Else                          // 没有仓位时,保持上次价格信息,没有其他用途
  119.         {
  120.         HighestAfterEntry = HighestAfterEntry[1];
  121.         LowestAfterEntry = LowestAfterEntry[1];
  122.         }       



  123.         If( MarketPosition == 1 && BarsSinceEntry > 1
  124.         && HighestAfterEntry - AvgEntryPrice > 2*NATRstop*atr[1] ) // 有多仓
  125.                 {
  126.                         If(low <= HighestAfterEntry - 2*NATRstop*atr[1] )
  127.                         {
  128.                                 Sell(0,Min(Close, HighestAfterEntry - 2*NATRstop*atr[1]  ) );
  129.                                 PlotString ("TrailingStop","TrailingStop",high*1.01,White);
  130.                                 Normal_Trailing_long = True;       
  131.                                 }
  132.                         }
  133.                 //硬止损       
  134.                 If( MarketPosition == 1 && BarsSinceEntry > 0 && Low <= AvgEntryPrice - StopLoss*MinPoint )   // 多仓情况
  135.                 {
  136.                         MyExitPrice = Min (Close,AvgEntryPrice - NATRstop*atr[1]);
  137.                         Sell(0,MyExitPrice);             //多头止损平仓
  138.                         PlotString ("StopLoss","StopLoss",high*1.01,White);
  139.             stoploss_hard_long = True;                       
  140.                         }
  141.         // ============================= 以下是跟踪止损计算 =============================

  142.         if(MarketPosition == -1 && BarsSinceEntry > 1
  143.                 && AvgEntryPrice - LowestAfterEntry > 2*NATRstop*ATR[1] ) // 有空仓,加入绝对运行幅度控制
  144.                         {
  145.                                 If(high >= LowestAfterEntry + 2*NATRstop*ATR[1]  )
  146.                                 {
  147.                                 BuyToCover(0,Max(Open,LowestAfterEntry + 2*NATRstop*ATR[1] ) );
  148.                                 PlotString ("TrailingStop","TrailingStop",high*1.01,White);
  149.                                 Normal_Trailing_short = True ;
  150.                                 }
  151.                         }
  152.                        
  153.         // =======================硬止损平仓=======================
  154.                        
  155.         If( MarketPosition == -1 && BarsSinceEntry > 0 && high >= AvgEntryPrice + StopLoss*MinPoint ) // 空仓情况
  156.                 {
  157.                         MyExitPrice = Max (Open,(AvgEntryPrice + NATRstop*ATR[1] ));
  158.                         BuyToCover(0,MyExitPrice);        //空头止损平仓
  159.                         PlotString ("StopLoss","StopLoss",high*1.01,White);
  160.                     stoploss_hard_short = True ;
  161.                 }
  162. END
复制代码
绩效就不在这里粘上了,欢迎大家进行测试和改进。另外附上原版的TwinkleStar。

TwinkleStar.rar

23.06 KB, 下载次数: 1, 下载积分: 金币 -8 枚

售价: 2 枚金币  [记录]

点评

520FX有你更精彩!: 5.0
520FX有你更精彩!: 5
  发表于 2019-6-3 10:44

该用户从未签到

1

主题

72

帖子

151

积分

积分
151
13120751897 发表于 2019-6-2 22:18:57 | 显示全部楼层 | 举报
好哟干嘛
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则


在线客服
快速回复 2 返回列表 返回顶部