if(isNewBar()==true) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic) == true) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_BUY, Magic) == False) //----------- если позиции BUY отсутствуют то
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию SELLif(Signal < clos ) { //--------------------- МА ниже цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_SELL, Magic) == true) //---------------- Если есть позиция SELL то
ClosePosWithMaxProfitInCurrency(); //---------------------закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_SELL, Magic) == False) //----------- если позиции SELL отсутствуют то
ticket=OpenPosition(NULL,OP_BUY, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию BUY
} return;
...
if(isNewBar()) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic)) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(!ExistPositions( NULL, OP_BUY, Magic))//----------- если позиции BUY отсутствуют тоsellSignal= true;
}
// и аналогично для п.4.
}
return;
...
voidOnTimer() {
if (sellSignal) {
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com); //------------ открываем позицию SELLsellSignal= false;
}
// и аналогично для buy
}
我最近写了一份警报:#18550。但它可以通过添加SendNotification来改进。
把我强调的那几行添加到源代码中,把它放到指标文件夹中,然后进行编译。这个指标可以被添加到图表中,次数不限,当不同的水平被越过时,可以收到信号。该代码在网上被最终确定。该结果没有得到核实。
关于交易、自动交易系统和策略测试的论坛
新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论
GlaVredFX, 2022.01.17 18:59
我正在寻找关闭订单 的代码,如果我没有看到任何订单,我将打开一个新的订单。
但由于某些原因,它只关闭了1个订单,并在下一个信号前停止。
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 信号1.1322 < 关闭 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 信号1.1322 > clos 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 08:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: 信号1.1325 > 关闭1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 2022.01.04 00:00:00 e: 信号1.1326 < clos 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 信号1.1328 < 收盘1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 收盘1号在1.13598买入0.01欧元兑美元,价格1.12831
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 信号1.1328>收盘1.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 E: open #4 buy 0.01 EURUSD at 1.13512 ok
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < close 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > close 1.135 ExistPosBuy 1
如果你多注意 一下你的问题和你的代码,你就会自己看到。
问题是,1个最有利可图的订单应该在1个柱形上关闭,然后我们等待新的柱形并再次关闭1个有利可图的订单。我们不应该一下子就把它们全部关闭。
这意味着我们在第一个条形图上收盘,但在下一个条形图上什么也没有发生。
那里的问题是,1个最有利可图的订单应该在1个柱状体上关闭,然后等待新的柱状体,再次关闭1个有利可图的订单。你不应该一下子关闭所有的东西。
然后你必须正确制定你的问题。你只有一个信号。在新条形图开盘时,你将只得到1个信号。如果只有一个信号,有多少订单会被关闭?而且只有当信号出现在一个新的柱子上时才会出现。而且,如果没有信号,订单将在下一个条形图上被关闭。同样,如果有信号的话。
然后你必须正确制定问题。你只能得到一个信号。而且是在一个新酒吧的开幕式上。如果只有一个信号,有多少订单会被关闭?而且只有当信号出现在一个新的柱子上时才会出现。而且,如果没有信号,订单将在下一个条形图上被关闭。再说,如果有信号的话。
在这种情况下,流程图通常有帮助。或者我们需要在一张纸上或文本文件中逐点详细描述该算法。也只有这样,你才会明白如何编写你的代码。
需要在所有可用的订单中先关闭1个订单的功能,谁能分享一下。
因此,如果你注意到了,算法是写在代码中 的。
1) 出现新栏
2)如果MA高于前一个柱状体的收盘价,进入第三步如果MA低于收盘价,进入第四步。
3)如果我们有一个买入头寸,我们以货币对的最大利润关闭一个头寸。
3.1)如果没有未平仓的买入 订单,则开立一个卖出头寸。
4) 如果我们有一个买入头寸,我们以货币对的最大利润关闭一个头寸。
4.1)如果没有未平仓的卖出 订单,我们就建立一个买入头寸。
现在我又有一个问题,上述算法的这段代码有什么问题。
这段代码包含一组命令。终端不知道你需要什么,它只知道代码中写了什么
在全局范围内写入 buySignal和sellSignal 变量。一组命令 写在代码中。终端不知道你需要什么,它只知道代码中写了什么
我删除了这条信息,因为问题在于,订单的关闭不应该是按利润而是按时间。
这是因为我们的利润并不总是,也不总是在该有的地方。
因此,我们需要"关闭所有可用仓位中最开始的一个仓位 " 的功能。
我删除了这条信息,因为问题在于,订单应该根据时间而不是利润来关闭。
因为利润并不总是在那里,也不总是在它应该在的地方。
因此,我们需要"关闭所有可用仓位中最开始的一个仓位 " 的功能。
我在上一篇文章中增加了一个在定时器中开仓的例子。这样就能保证开仓。你可以在那里替代你自己的功能。
在上一篇文章中增加了一个定时器位置开放的例子。这样,该职位就能保证开放。你可以在那里替代你自己的功能。
但不是像这样。你需要监测的结果是
或你在OnTradeTransaction中的一个新函数。而如果没有位置,它就会进入。或者在buySignal或sellSignal 中写入信号,然后在OnTimer中处理,就像我在例子中显示的那样。