//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
有时在init()中会有复杂的计算或加载历史记录,或者有大量的指标和专家顾问挂在终端或...
但如果终端在初始化过程中中断了代码,日志中会出现以下错误:"....超时在专家...."
如果日志显示终端没有错误,说明初始化成功了。 start()函数本身很容易检查--在第一行写start(): Print("new tick")。
我是这样做的()。
是的,我在摇晃着很多信息,计算也是,实验也是用蜱虫......。
计算需要2-3分钟,MT "不挂起",一切工作都很典型,显示来自Print() 和Alert的信息,然后就是一切))
看了MT的所有信息,我找不到任何错误......。
请协助。
计算需要2-3分钟,MT没有 "挂起",一切工作都很典型,显示Print()和Alert信息,然后就一切正常))
如果Print()被打印出来,start()肯定能工作,但我对你说的计算需要2-3分钟感到困惑--在终端上有这样的负载,你需要用sleep() 函数中断计算,否则终端肯定会挂掉。
由于MT4没有调试器,在有问题的代码部分插入Print(),并捕捉失败或没有失败的代码部分和条件。
如何检查订单是否被止盈或止损所触发?谢谢你的答复
Sayod ,你在什么时间段进行过交易,用什么参数?
有什么区别,或者你把它反过来了,想测试一下?
默认在h1上交易。
琵琶步 - 30
LotExpo - 1.59
我认为,如果这个想法已经实现,参数并不重要,我认为专家顾问在任何参数下都会很好,IMHO。
我需要提交由TakeProfit或StopLoss触发的未结订单的事实。我对TakeProfit和StopLoss的实际值不感兴趣。 。
如果你只想登记订单被触发的事实,那么你可以记住前一个tick上的订单数量,并与下一个tick上的订单数量进行比较--如果订单数量发生了变化,这意味着....
终端关闭了亏损的订单,注释为 "所以:19.5%/28.4/145.8"。这意味着什么呢?
如果Print()打印出来,那么你肯定有start()工作,但我对你说的计算需要2-3分钟感到困惑--在终端的这种负载下,你需要用sleep()函数中断计算,否则终端肯定会挂起。
由于MT4没有调试器,在有疑问的代码部分插入Print(),并捕捉失败或没有失败的代码部分和条件。
对不起,我弄错了,打印 只在init中有效。我无法进入启动))。
是的,在每个函数的末尾,我都打印了一个相关的信息,以检查是否一切正常。 所有的信息(所有的函数)都100%地工作,直到init的末尾,我不能去启动!"。
预先感谢您的回答!
熟悉这两个函数的代码,并将它们合并为一个,以优化执行速度和你的具体任务......
对不起,我说错了,打印只适用于inite。我无法进入启动))。
是的,在每个函数的末尾,我都插入一个打印的信息,以检查是否一切正常。 所有的信息(所有的函数)都是100%的工作,直到init的结束,我不能去启动!我的意思是说,我不能去启动。
预先感谢您的回答!
因此,坦率地说,你在终端没有打勾。也就是说,要么没有连接,要么你在离线图表上工作,或者在init中检查IsExpertEnabled(),如果不允许,那就启用EA。