if (Close(0) > sl) then DeleteOrder(OrderHandle);
выполняет только
(OpenTime <> Time(0))
и то выставляет иногда 2 абсолютно одинаковых ордера.
привожу код для закрытия/удаления позиции и ее открытия (в обе стороны код аналогичный)
Код: Выделить всё
// if SELL order exists
// then close order
if (OrderHandle <> -1) and (OrderStyle = tp_Sell) then
begin
if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) = true then
if GetOrderInfo(OrderHandle, info) then
sl := OrderStopLoss;
if (Close(0) > sl) then
DeleteOrder(OrderHandle);
if OrderClosed(OrderHandle) = true then
OrderHandle := -1;
end;
// if there is no order
// then open SELL order
begin
SetCurrencyAndTimeframe(Symbol, TimeFrame2);
if (Close(0) < sma22) and (Close(0) < sma11) then
begin
SetCurrencyAndTimeframe(Symbol, TimeFrame1);
if (OrderHandle = -1) and (OpenTime <> Time(0))
and (sma2 < sma3) and (sma2 > Close(0))
and (Close(0) > (sma1 + sma2)/2) then
begin
SendPendingOrder(Symbol, op_SellStop, LotSize, sl,
tp_s , ep, '', 0, OrderHandle);
if SendPendingOrder(Symbol, op_SellStop, LotSize, sl,
tp_s , ep, '', 0, OrderHandle)= true
then
begin
if OrderSelect(0, SELECT_BY_POS, MODE_TRADES) then
OrderStyle := tp_Sell;
OpenTime := Time(0);
end;
end;
end;
end;