帮我在酒吧的末端关闭秩序!

 

我需要一些帮助来制定一个代码,该代码将准确地在柱子结束时关闭订单。这是一个特殊的剥头皮的EA,所以它需要精确的精度。



现在想象一下,如果我有任何指标,让我在标有X 的蜡烛开盘时进行多头交易,那么它就会上升,然后是一根看跌的蜡烛,低点非常低,但这并不重要,重要的是根据我的计算,这里的最佳出口将是标有 1 的条形收盘点。

我现在能想到的最好的解决方案是这样的(就这个假想的买入交易而言)。


/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

这段代码是在开盘价[0]处关闭买入交易,但不是在收盘价[1]处。你看,因为如果你看图片并查看标有2 的条形图,你可以看到条形图2 并没有像前一个条形图那样以该价格打开,而是以稍微不同的价格打开。



所以经验告诉我们。

Close[1] !=Open[0](收盘价)。

在非常罕见的情况下是这样的。所以这就是为什么我需要订单在Close[1]时就被关闭。

一个可行的解决方案是通过计算时间,例如这是M1和M15图表,计算M1的60秒或M15的900秒,在59秒或599秒关闭订单。

因此,让我们回顾一下我的问题,是否可以像我上面描述的那样计算时间,如果可以,那么如何避免滑点和刻度滞后问题?

或者,如果你想出其他的解决方案,如何在Close[1]而不是Open[0]时关闭订单,我愿意接受。请帮助我,这是我的EA的一个非常重要的问题

 
Proximus:

我需要一些帮助来制定一个代码,以便在小节结束时准确关闭订单。

没有一种情况可以告诉你最后的刻度是在当前条形的最后刻度之前的一个刻度。
 

模数,当没有余数时,要检查一下。 好运

if( !MathMod( TimeCurrent(), PERIOD_M5 * 60 ) ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );
 
trevone:

模数,当没有余数时,要检查一下。 好运

那是行不通的 ......它要么在柱状体结束之前,要么在之后 ......永远不会在柱状体结束时。 正如deVries 所说,我们不可能检测到当前条形的结束,但我们可以检测到下一个条形的开始 ......
 
RaptorUK:
这是不可能的......它要么是在条形图结束前,要么是在条形图结束后......绝不会在条形图结束时。 正如deVries 所说,我们不可能检测到当前条形的结束,但我们可以检测到下一个条形的开始 ......


如果每次都在收盘前,但尽可能接近收盘,那么我也会接受这个方案,但如果只是在收盘后1次,那么它并不比我想到的方案好,因此不能接受。但到底为什么要在当前tick后收盘?


那么另一种解决方案呢,即在收盘前1秒取值?

就像在M1的情况下这样

if( Time[0]>=OrderOpenTime()+59  ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );

在这种情况下,如果有嘀嗒声的问题,如何解决?

 
Proximus:

如果每次都在收盘前,但尽可能接近收盘,那么我也会接受这个方案,但如果只是在收盘后1次,那么它并不比我想到的方案好,因此不能接受。但到底为什么要在当前tick后收盘?


那么另一种解决方案呢,即在收盘前1秒取值?

就像在M1的情况下这样

在这种情况下, 如果有的话,如何解决tick的问题?




如果没有,这将使你多等一分钟,而且在这种情况下,如果有任何....
 
Proximus:

如果每次都在收盘前,但尽可能接近收盘,那么我也会接受这个解决方案,但如果只有一次是在收盘后,那么它并不比我想到的好,因此不能接受。但到底为什么要在当前的刻度线后收盘?

在EA(和指标)中,只有在有刻度的时候才会发生事情,你没有办法知道一个条形图的最后一个刻度是什么时候,直到你有下一个条形图的第一个刻度。

普罗米修斯

那么另一种解决方案呢,即在收盘前1秒的时间段内,如何处理?

就像M1的情况下这样

在这种情况下,如果有刻度线问题,如何解决?

.......而且你不能等待条形的最后一秒,因为条形的最后5秒可能没有刻度,所以在这种情况下,你永远不会 "看到 "条形的最后一秒。

 
RaptorUK:

在EA(和指标)中,只有在有刻度的时候才会发生事情,你没有办法知道一个条形的最后一个刻度是什么时候,直到你有下一个条形的第一个刻度 ......即使是在H1条形的59分59秒的刻度,在这一秒中仍然可能有另一个刻度 ......

.......而且你不能等待条形的最后一秒,因为条形的最后5秒可能没有刻度,所以在这种情况下,你永远不会 "看到 "条形的最后一秒。

所以我应该理解,如果银行间汇率在某段时间内没有变化,经纪人就不会调用新的价格数据?

我认为,MT4中的tick意味着它总是在X秒后刷新价格,无论价格或交易量是多少。


在这种情况下,我是否可以使用。

RefreshRates();   

在58秒时叫停最后一笔交易,在59秒时退出?

 
Proximus:

所以我应该明白,如果银行间汇率在某段时间内没有变化,经纪人就不会调用新的价格数据?

我认为MT4中的tick意味着它总是在X秒后刷新价格,无论价格或交易量是多少。因此,假设刷新率为3秒,那么你就会知道在M1上你必须在57秒或之前关闭交易。

如果经纪人的价格没有变化,买入和卖出,就没有新的刻度线 ......在格林尼治标准时间午夜前后 一些交易量较小的货币对可能在一分钟或更长时间内没有刻度线......新的刻度线不是在预设时间后产生的,它发生在价格、买入或卖出变化时(也许在其他情况下,其他符号参数 的变化)。

Proximus:

鉴于这种情况,我是否可以使用。

在58秒时调低最后一个刻度,在59秒时退出?

如果没有刻度线,RefreshRates()将如何被调用?
 

谢谢你对MT4中刻度线工作原理的说明。

RaptorUK:

如果经纪商的价格没有变化,买入和卖出,就没有新的刻度线 . . . 在格林威治时间午夜前后,在一些交易量较小的货币对上,可能一分钟或更长时间都没有刻度 线 . . . 新的刻度线不是在预设时间后产生的,它发生在价格变化,买入或卖出(也许在一些其他情况下,其他符号参数的变化) .

如果没有tick,RefreshRates()将如何被调用?

我以为 RefreshRates()会迫使经纪人从他的流动性提供者那里调用一组新的饲料,但我想它不是。


无论如何,如果有人能找到比这更好的解决方案,那么请与我分享,这非常重要!提前感谢!

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}
 
Proximus:

谢谢你对MT4中刻度线工作原理的说明。

RaptorUK:

如果经纪人的价格没有变化,买入和卖出,就没有新的tick ......在格林威治时间午夜前后 一些交易量较小的货币对可能在一分钟或更长时间内没有tick......新的tick不是在预设时间后产生的,它发生在价格变化,买入或卖出(也许在其他情况下,其他符号参数的变化) ......

如果没有tick,RefreshRates()将如何被调用?

我以为 RefreshRates()会迫使经纪商从他的流动性供应商那里调用一组新的饲料,但我猜不是这样。


总之,如果有人能找到比这更好的解决方案,那么请与我分享,这非常重要!提前感谢!。


你能做的最好的事情是使用条形图最后一个刻度后的下一个刻度,换句话说就是下一个条形图的第一个刻度。