if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
{
if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
{
CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
{
CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
{
// order currently selected is ??if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
{
CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
{
CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
最后一个问题,价格翻倍的正常化是否真的那么关键......我不明白它的目的是什么...?
是的,这可能是双倍数的问题,OrderTakeProfit()OrderStopLoss()OrderLots(),特别是如果你对它们进行计算。这影响了我的一个EA,当时我正在做类似于你的部分订单关闭的事情。请看这个主题https://www.mql5.com/en/forum/141034
我试着绞尽脑汁,但我无法通过 "OP_BUY "触发时的OrderTicket()来实现这一逻辑,并在一半的仓位被平仓后通过OrderTicket()号来实现。
一旦OP_BUY在OrderClose()中被减半,剩下的头寸就会有一个不同的票据号码......谁能告诉我如何比较这两者,以便在OrderClose()做了一次后告诉它停止?
我已经准备好了,只是不明白我上面写的那些东西的比较逻辑。
我打算在我完成这项工作后,做一个主题来帮助其他人--这才是公平的!
我已经告诉你怎么做了,获取你要关闭的票据的OrderOpenTime()。在你关闭部分订单后,再做一次OrderSelect(),无论哪张票有相同的OrderOpenTime(),都是部分关闭订单的剩余部分。
啊,对不起,一定是第一次错过了!我刚刚坐下来思考了一下,我发现很难理解其中的逻辑。
我刚刚坐下来思考了一下,我发现很难理解其中的逻辑?你能给我一个指针吗?
目前,我在 "int Start() "部分有这个问题。
显然,我需要删除"OrderOpenPrice() > OrderStopLoss() "部分,但我要用什么来替代它,以便 "CloseHalfOrder(); "不会被持续调用?我不能把逻辑搞清楚(今天有点慢!)我是在与历史上的交易关闭进行比较吗?
啊,对不起,我一定是第一次错过了!我刚刚坐下来研究了一下。
我刚刚坐下来思考了一下,我发现很难理解其中的逻辑?你能给我一个提示吗?
目前,我在 "int Start() "部分有这个问题。
显然,我需要删除 "OrderOpenPrice() > OrderStopLoss() "部分,但我用什么来替代它,以便 "CloseHalfOrder(); "不会被持续调用?我不能把逻辑写下来(今天有点慢!)我是在与历史上的交易关闭进行比较吗?
在我在你的代码中标记的地方,你选择了什么订单?
如果是正确的订单,那是偶然的还是设计的?
我想不出如何利用OrderOpenTime()对我有利,并停止每次都调用CloseHalfOrder......
我也是这么想的--它说我在使用OrderType之前需要OrderSelect(),但它是有效的?我在任何时候都只有一个订单...。