来自一个 "傻瓜 "的问题 - 页 56

 
Interesting:

与tick处理程序不同的是,定时器将在一定时间后执行,由周期设置。

在繁重的定时器处理中,当然最好是通过滑移或第一次打勾来禁用它(有很多变体),但如果定时器处理不是很繁重,而且周期足够长,可以禁用定时器。

另外,在定时器处理中,你可以提供一个检查是否是工作日的方法。

如果有必要,你可以把繁重的计算安排在周末(例如,自动优化EA),并从定时器上运行这个过程。在计算结束时(或在计算开始时),可以正确地禁用定时器。

至于在测试器中使用多货币EA的OnTimer()函数进行测试。假设定时器的设置间隔为10秒。它在测试期间的所有周末都会滴答作响吗?我想这就是弗拉基米尔的意思。因此,如果我们向计时器表明周六和周日被跳过,测试就会快很多。
 
tol64:
至于在测试器中通过多货币专家顾问的OnTimer()函数 进行测试。假设定时器被设定为10秒的间隔。在测试期间,它是否会在整个周末滴答作响?我想这就是弗拉基米尔的意思。因此,如果我们向计时器表明周六和周日被跳过,测试就会快很多。

1.我试着在周末计算不是很复杂的时候把计时器关掉,我没有感觉到太大的差别(当然也有差别),现在我决定暂时不把计时器关掉。

2.是的,如果设置了定时器,在测试器中没有区别,或者在正常模式下触发会发生,直到定时器关闭。如果我们谈论的是测试仪,那么在10秒的间隔内,它将在整个测试期间跳闸--每10秒一次。

在周末停止定时器时,有几种解决办法。

а.关闭定时器,将状态写入一个变量。在主工具第一次打勾时(或通过一个 "间谍 "信号),计时器可以再次启动。这种方法有缺点,因为在流动性差的市场上很可能出现跳票或滞后的情况。跳票也可能是由于缺乏与交易服务器的连接造成的。

б.滑动的刹车,在一定的时间内。好处是可以精确地指定周期,坏处是在这种方法中,不仅是计时器,而且整个专家顾问将在X小时前不活动。

虽然,所有头寸和订单都将在测试器中处理。

в.可以通过增加定时器的周期来实现暂停。事先知道定时器必须 "唤醒 "的时间是很方便的,专家的工作就不会停止。不舒服的是,你必须在工作状态或待机模式下跟踪定时器。

в.将定时器的填充物分为两组,第一组一直执行(例如,确定连接状态),第二组根据条件(工作日,有连接,允许交易等)。

 
Interesting:


如果有必要,可以将繁重的计算安排在周末进行(例如EA的 自动优化),并从定时器中运行这个过程。在计算结束时(或在计算开始时),可以正确地禁用定时器。

你好!我昨天得到了一个类似的想法,但没有时间写一个关于它的问题的帖子。

1.有可能做到这一点吗? 这在代码中可能看起来如何,特别是打开和关闭交易.或者只是他们的位置和计算-计算.即在周末的计时器上进入一个定义的函数,它周期性地倒退历史,并确定最佳参数.对于这个在线蜱不需要,函数将只是在循环中旋转...

2.在任何一个分支中,是否有任何地方可以让我读到这方面的内容?

3.如果申请到了冠军,会不会被装到车上?这可能是一个给组织者的问题。

 
MetaDriver:
然后在一个合适的时间框架上计算专家顾问的一切,并在OnTester()中打印结果。你不一定要做交易。你有什么问题吗?

非常感谢

我还有一个问题,如果价格没有达到止盈或止损,我如何按时间平仓

我读了似乎有库,用于处理订单的库...我把它接上了...该计划发誓说它没有这样的程序...

因此,我的问题是,为了在一定时间后关闭订单(例如1天),应该使用什么样的代码

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

这就是我必须检查交易是否开放的方法...

OrdersTotal()!=0不工作 )))) 非常有趣的小问题 )

 
papaklass:
有一个PosirionTotal()用于职位。OrdersTotal()仅适用于挂起的订单。

如果 (PositionsTotal()== 1 )

同样的事情...无反应

// 正常打开

如果 ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep ( 600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep ( 600000); }

}

//不能在采取或停止之前关闭

如果 ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep ( 600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep ( 600000); }

}

}

 
BaTTLeBLooM:

非常感谢

那么问题来了,应该用什么代码,在一定时间后关闭订单(例如1天)

请。

大约是这样的:你节省了在一个变量中打开的时间。立即加上所需的时间段(例如,1天=60*60*24)

然后在每个刻度(或时间),监测当前时间 是否比控制时间长。 如果是--你就关闭它// 如果(TimeCurrent() > MyControlTime) CloseMyPosition()

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

如果 ( PositionsTotal() == 1 )

同样的事情...无反应

// 正常打开

如果 ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep ( 600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep ( 600000); }

}

//不能在采取或停止之前关闭

如果 ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep ( 600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep ( 600000); }

}

}

实际上,不清楚你在这里写了什么,但PositionTotal()显然与此无关。

Print() 放在检查之前,=1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

康斯坦丁-格鲁兹德夫在他的文章中提出了一个有趣的方法,即用 "间谍 "和 "特工"。))但他的 "代理人 "exSpy控制面板MCM 不想为我工作。

我现在要看一下文章中提出的变体。到目前为止,做了几个专家的间谍,效果很好。

MetaDriver

我认为这项技术在测试器中不会起作用。

它是有效的。

 
MetaDriver:

请。

大约是这样的:你需要在一个变量中存储打开的时间。立即给它加上必要的时间间隔(例如1天=60*60*24)。

然后在每个刻度(或时间),监测当前时间 是否比控制时间长。 如果是--你就关闭它// 如果(TimeCurrent() > MyControlTime) CloseMyPosition()

进入一个变量是一个选择,但如果你需要一个更可靠的关闭,甚至在重新启动终端/顾问后,你可以使用medjic来识别订单并检查其打开的时间。

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}