初学者的问题 MQL5 MT5 MetaTrader 5 - 页 970

 
朋友。我们一起合作,编写了我心目中的专家顾问算法。
并非常感谢你。你可以说我们都做到了)
它是有效的,结果是预期的,我们可以继续前进。
---
关于在OHLC M1模式下测试的问题。
对专家顾问进行编程,使OHLC M1的测试结果接近于 "所有点 " 的测试结果,这是否现实
我搜索了整个论坛,有明确的解释,为什么4个参考点生成的OHLC M1模式不重合?
与基于tick的模式。

但我没有找到任何建议,例如如何将这一条件编程为类似于OHLC M1的条件,这是否可能?

我喜欢OHLC M1模式,完全是因为计算的速度。
EA的具体内容。(如果它是重要的)
设置具有固定SL和TP的止损订单,很多时候它在新的价格水平上修改订单,等待触发。
没有指标,只有价格计数器。
如果不可能模拟 "OHLC M1 "模式,也许使用 "按开盘价"模式会更好?
最后,我想了解使用什么模式才是合理的,这样计算起来就会很快,而且会很容易。
我想了解我应该用什么来使计算快速进行,并尽量减少全技术模式之间的分歧。

到目前为止,我在同一类型的设置上得到了以下分歧。

"OHLC M1;8年;1681次交易。(最初我用的是这种方法)

OHLC M1

"开盘价";8年;1655次交易。

仅限开盘价

"所有蜱虫 "8年;1676次交易。

所有抽搐

该算法似乎很稳健,我甚至可能能够分别改进每种方法的结果。

但它会失去多功能性,显得多余。




 
vladzeit:


简而言之,举个例子,如果你的TP买入头寸设置在1.16000,那么 "所有点数 "将在这个价格左右关闭。OHLC将在1.16000以上的价格收盘,这可能是一个相当大的差异,所以总是OHLC会显示出更好的结果。与 "按开盘价"的情况相同。

 
Nauris Zukas:

简而言之,举个例子,如果TP买入头寸设置在1.16000,那么 "所有点位 "将在大约这个价格上关闭。OHLC将以高于1.16000的价格收盘,这可能是一个相当大的差异,所以总是OHLC将显示更好的结果。与 "按开盘价"的情况相同。

诺里斯,谢谢你。我理解(我可以猜测)为什么不同的方法会有不同的结果。但我想了解的是,这一点。

如果测试者模拟了 "OHLC M1 "方法,那么如何在专家顾问中以编程方式重复同样的方法。

测试人员以某种方式再现了它...

 
vladzeit:

诺里斯,谢谢你。我理解(我可以猜测)为什么不同的方法会有不同的结果。但我想了解的是,这一点。

如果测试者模拟了 "OHLC M1 "方法,那么如何在专家顾问中以编程方式重复同样的方法。

测试人员不知何故重现了它...

相信我,你不需要这样的精度,优化结果并在所有刻度上运行,最好的选择 ...

如果你没有3-4个点的距离,即使收盘时多两个点或少两个点也不会有太大区别......

在专家顾问中回放一些东西不会使你的时间变快,相反,它会使你的时间变慢......

 
xxz:

相信我,你不需要这样的精度,优化结果并在所有刻度上运行,最好的选择是......

如果你没有3-4个点的差距,那么,如果你以多两个点或少两个点收盘,也没有什么大的区别......

在专家顾问中回放一些东西并不会加快时间,相反,它会减慢时间...

谢谢你。如果没有人继续实施"OHLC M1 " 方法,那么我就只能听从你的建议了))

 
vladzeit:

谢谢你。如果没有人继续使用"OHLC M1 " 的方法,我将被谴责使用你的建议))))

如果你没有想到一个特别高明的想法,那么区别就在于刻度线的方向,在真正的交易中,在刻度线上,蜡烛可能会开盘、见底、见顶、收盘,如果蜡烛很大,你可以在底部买入,在收盘时获利,在模拟交易中,蜡烛形成开盘、见顶、见底、收盘,比方说开盘和见顶与见底和收盘也重合,那么在这样一个蜡烛上,你可以买入,但不能获利,如果市场已经下跌,那么这里你有一个挂损单 ...

...因此出现分歧...

 
vladzeit:

谢谢你。如果没有人继续讨论如何实现"OHLC M1 " 方法,我就只能接受你的建议了)))。

该方法不言而喻。在你的EA中只使用包含在当前条形中的所有分钟条形的OHLC价格。
 
vladzeit:

谢谢你。如果没有人继续讨论如何实施"OHLC M1 " 方法,我就只能接受你的建议了)))。

专家顾问中的开仓/平仓不是按价格水平而是按开仓。有一个开仓/平仓信号,等待下一个1M蜡烛并开仓/平仓。

 
Artyom Trishkin:
该方法不言而喻。在你的EA中只使用当前条形图中包括的所有分钟条形图的OHLC价格。

Artyom,我已经试过了。在所有的条件下,开仓和修改订单,我都通过布尔函数isNewBar()设置了一个条件 "在新条的诞生"。

像这样。

if (Buys==true )
   {
   int count_buy_stops=0;   int count_pos_buy=0;
   CalOrders_Buy(count_buy_stops);   CalPosition_Buy(count_pos_buy);
   if(count_buy_stops==0 && count_pos_buy==0) && isNewBar())
   {
   BuyStop();
   }
   }

isNewBar() 函数本身来自例子和code.base文章

bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
   if(last_time==0)//--- если это первый вызов функции
   {
   last_time=lastbar_time;    //--- установим время и выйдем 
   return(false);
   }
   if(last_time!=lastbar_time)//--- если время отличается
   {
   last_time=lastbar_time;    //--- запомним время и вернем true
   return(true);
   }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }

它似乎在工作,并且只在一个新的酒吧下单和修改,但由于某些原因,有一个差异。

我在没有isNewBar() 情况下应用M1上的OHLC 和使用isNewBar() 函数的 "所有ticks " 之间存在差异。

我期望通过对 "所有点 " 应用isNewBar() 我将得到 当前价格 上的OHLC相同的结果

因此,我不明白我是否一定是把代码弄错了,或者是我没有正确理解OHLC 模式,并期望它不可能

我不知道该去哪里挖。

阿尔乔姆,如果不难的话,多告诉我一些。

订单可以在新的条形图上设置和修改,但SL和TP(在测试器中)无论如何都会在旧的条形图中工作?

 
尝试将固定手数转换为百分比手数,但失败了。谁能告诉我完整的代码?
附加的文件:
Experiment.mq5  38 kb