int start()
{
if(IsNewCandle())
{
CheckForMaTrade();
if(UseCandleTrail)AdjustTrail();
}
if(OpenOrdersThisPair(Symbol())>0)
{
if(UseMoveToBreakEven)MoveToBreakEven();
if(UseTrailingStop)AdjustTrail();
if(Use_MA_Trail)MA_Trail();
CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(OrderType()==OP_BUY)
{
CloseHalfOrder();
}
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...
//+--------------------------------------------------------------------------------------------------+//| Close OP_BUY Half lots @ 1:1 Function |//+--------------------------------------------------------------------------------------------------+void CloseHalfOrder()
{
double minLot=MarketInfo(Symbol(),MODE_MINLOT);
//Print("The minimum lots are: ",DoubleToStr(minLot,Digits));double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
//Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
Print("The Lots to close is: ",DoubleToStr(half,Digits));
for(int c=OrdersTotal()-1; c>=0; c--)
{
if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
{
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ",OrderLots());
}
else
{
Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?continue;
}
double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
if(OrderMagicNumber()==MagicNumber)
if(OrderSymbol()==Symbol())
if(OrderLots()>minLot)
{
Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
int HalfCloseTicket = OrderTicket();
if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
{
Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
}
}
if(Close_Half_Order_Buy==True)
{
MoveToBreakEven(); // This is a void.
EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
}
}
}
啊,是的--知道了!我想我知道怎么做了--现在回去玩了:)
更新如下--它确实有效 :)
对不起--我应该在尝试之前停止问101个问题 :P
是的--这确实有效。我现在有了它的工作原理,只要有tick进来,并且出价>=订单关闭的价格,它就会关闭 :D
在正确的方向上迈出了很好的一大步现在要做的是,在每次价格重新回到OrderClose函数 中指定的相同价格时,阻止它不断地关闭一半的交易:)
(也摆脱了恼人的OrderModify错误1!) 嗯,我想不出在第一个目标(1:1)完成其平仓指令后等待的正确逻辑...。有什么想法吗?OrderTicket()的数字是一样的......所以不可能是这样的?我现在被卡在这部分了:) 在我有了这部分之后,它就被破解了:)
我非常感谢你的帮助!
我非常感谢你的帮助!
这是一个多么巨大的话题
关闭了一半的地段。
希望你能给别人解释一下,你知道的那一刻该怎么做
101个问题......谁想全部看完......
对于 (也摆脱了那个恼人的OrderModify错误1!)。
如果你试图用已经有的设置来修改交易,这种情况大多数时候都会发生。
一旦你想通了,就会很有成就感!显然,也要感谢你的意见!
最后一点我被卡住了,就是告诉循环在OrderClose()的出场价上停止将未平仓的订单减半,持续不断?我真的搞不清楚这个逻辑?它对什么时候和什么价格部分平仓是一清二楚的。我只需要告诉它,一旦它将订单减半就停止?
问题是,一旦OrderClose()关闭了一半的开仓,它仍然会被不断调用,因为 "int start "在每次有 "OP_BUY "开仓时都会调用 "CloseHalfOrder()"...。有什么想法吗?
难以置信 1 2 3 4 5 6 7 8 9 10 11 12
这是一个多么巨大的话题
关闭了一半的地段。
希望你能给别人解释一下,你知道的那一刻该怎么做
101个问题......谁想全部看完......
对于 (也摆脱了那个恼人的OrderModify错误1!)。
如果你试图用已经有的设置来修改交易,这种情况大多数时候都会发生。
伙计,我很乐意写一个主题,解释一个简单而有效的方法来部分关闭一个开放的订单--我被卡住了,只有最后一点,然后它就可以工作了。我将把它整理成一个简洁的主题/线程,供其他人使用?(不知道我如何去做?)
见上面的最后一个帖子--我几乎已经做到了,只是不知道告诉循环在同一个OrderClose()的退出价格上连续停止平仓的逻辑是什么?
也谢谢你关于OrderModify错误1的提示:)
伙计,我很乐意写一个主题,解释一个简单而有效的方法来部分关闭一个开放的订单--我被卡住了,只有最后一点,然后它就可以工作了!我将在一个简洁的主题/线程中整理所有内容,供其他人使用。我将把它整理成一个简洁的主题/线程,供其他人使用?(不知道我如何去做?)
见上面的最后一个帖子--我几乎已经做到了,只是不知道告诉循环在同一个OrderClose()的退出价格上连续停止平仓的逻辑是什么?
也谢谢你关于OrderModify错误1的提示:)
为什么不先把你的票移到盈亏平衡点,这是之前告诉你的,然后关闭一部分交易 .... if OrderLots() >= .......
为什么不先把你的票移到盈亏平衡点,这是之前告诉你的,然后关闭一部分交易 .... if OrderLots() >= .......
就因为这个?如果我先移动到盈亏平衡点并不重要......第一个障碍是我不能理解的这部分?即使我先移动到收支平衡,然后关闭一半,这将再次调用ANY开仓,并通过调用 "CloseHalfOrder(); "在相同的价格再次关闭OrderClose()?
就因为这个?如果我先移动到收支平衡,这并不重要...第一个障碍是我无法理解的这部分?即使我首先移动到收支平衡,然后关闭一半,这将再次调用ANY开仓,并通过调用 "CloseHalfOrder(); "在相同的价格上再次关闭订单()?