Страница 1 из 1
Отложенные ордера
Добавлено: Чт апр 05, 2007 5:25 pm
Mike
Ситуация такая:
По некоторому условию выставляем ордера, все работает, т.е. они выставляются со всеми тейками и лоссами.
После этого нужно:
1.Удалить ордер, если он не открылся на момент заданного времени.
2.Закрыть ордер, если он не закрылся на момент заданного времени.
В данном коде, у меня все работает, кроме удаления второго ордера. Т.е. ордер селл удаляется как надо, а бай не удаляется плюсом переносится на следующий день.
Как сделать так чтобы оба ордера удалялись если не сработали на конкретный момент времени?
Код: Выделить всё
begin
SendPendingOrder(Symbol, op_BuyStop, 0.1, h - StopLoss * point, h + TakeProfit * point,
h + 5*point, OrderHandle);
SendPendingOrder(Symbol, op_SellStop, 0.1, l + StopLoss * point, l - TakeProfit * point,
l - 5*point, OrderHandle);
end;
if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) then
if (HourOf(Time(0)) = 15) and (MinuteOf(CurrTime) = 55) then
DeleteOrder(OrderHandle);
if OrderClosed(OrderHandle) and (HourOf(Time(0)) = 15) and
(MinuteOf(CurrTime) = 55) then
CloseOrder(OrderHandle);
end;
end;
За особую неграмотность кода не ругаться, написал настолько-насколько мозгов хватило.
Спасибо.
Re: Отложенные ордера
Добавлено: Вт апр 10, 2007 9:47 pm
Terranin
Mike писал(а):Ситуация такая:
По некоторому условию выставляем ордера, все работает, т.е. они выставляются со всеми тейками и лоссами.
После этого нужно:
1.Удалить ордер, если он не открылся на момент заданного времени.
2.Закрыть ордер, если он не закрылся на момент заданного времени.
В данном коде, у меня все работает, кроме удаления второго ордера. Т.е. ордер селл удаляется как надо, а бай не удаляется плюсом переносится на следующий день. Как сделать так чтобы оба ордера удалялись если не сработали на конкретный момент времени?
Код: Выделить всё
// для каждого ордера
if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) then
begin
// проверка на тип ордера
if (OrderType = tp_Sell) or (OrderType = tp_Buy) then
begin
// сработавший
if (время больше заданного) then
CloseOrder(OrderHandle);
end
else
begin
// отложенный
if (время больше заданного) then
DeleteOrder(OrderHandle);
end;
end;
Добавлено: Ср апр 18, 2007 11:10 pm
Mike
Тупо загоняю:
Код: Выделить всё
begin
SendPendingOrder(Symbol, op_BuyStop, 0.1, h - ((StopLoss-5) * point), 0, h + 5*point, OrderHandle);
SendPendingOrder(Symbol, op_SellStop, 0.1, l + ((StopLoss-5) * point), 0, l - 5*point, OrderHandle);
end;
// end;
if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) then
begin
// проверка на тип ордера
if (OrderType = tp_Sell) or (OrderType = tp_Buy) then
begin
// сработавший
if (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
CloseOrder(OrderHandle);
end
else
begin
// отложенный
if (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
DeleteOrder(OrderHandle);
end;
end;
а удаляется только один ордер, причем именно второй в коде, в данном случае селл удалился а бай остался. Тут то что не так??
Спасибо
Добавлено: Ср апр 18, 2007 11:28 pm
Terranin
Ясное дело не так. 2 ордера подряд открывались и их тикет заносился в одну и туже переменную, второй раз затер предыдущее значение.
Добавлено: Ср апр 18, 2007 11:48 pm
Mike
Но мне и надо их подряд открывать в 9 утра!
Добавлено: Чт апр 19, 2007 12:40 am
Terranin
Mike писал(а):Но мне и надо их подряд открывать в 9 утра!
Но тикеты то надо заносить в разные переменные! Например в OrderHandle1 и OrderHandle2 и потом соответственно закрывать.
Добавлено: Чт апр 19, 2007 10:06 am
Mike
Terranin писал(а):Mike писал(а):Но мне и надо их подряд открывать в 9 утра!
Но тикеты то надо заносить в разные переменные! Например в OrderHandle1 и OrderHandle2 и потом соответственно закрывать.
Тогда так??
Код: Выделить всё
begin
SendPendingOrder(Symbol, op_BuyStop, 0.1, h - ((StopLoss-5) * point), 0, h + 5*point, OrderHandle1);
SendPendingOrder(Symbol, op_SellStop, 0.1, l + ((StopLoss-5) * point), 0, l - 5*point, OrderHandle2);
Добавлено: Чт апр 19, 2007 11:01 am
Mike
Mike писал(а):Terranin писал(а):Mike писал(а):Но мне и надо их подряд открывать в 9 утра!
Но тикеты то надо заносить в разные переменные! Например в OrderHandle1 и OrderHandle2 и потом соответственно закрывать.
Тогда так??
Код: Выделить всё
begin
SendPendingOrder(Symbol, op_BuyStop, 0.1, h - ((StopLoss-5) * point), 0, h + 5*point, OrderHandle1);
SendPendingOrder(Symbol, op_SellStop, 0.1, l + ((StopLoss-5) * point), 0, l - 5*point, OrderHandle2);
Вообщем додумал так пока:
Код: Выделить всё
SendPendingOrder(Symbol, op_BuyStop, 0.1, h - ((StopLoss-5) * point), 0, h + 5*point, OrderHandle1);
SendPendingOrder(Symbol, op_SellStop, 0.1, l + ((StopLoss-5) * point), 0, l - 5*point, OrderHandle2);
if (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
DeleteOrder(OrderHandle1);
if (OrderTicket <> SavedHandle) or (OrderTicket <> Handle)
and (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
CloseOrder(OrderHandle1);
if (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
DeleteOrder(OrderHandle2);
if (OrderTicket <> SavedHandle) or (OrderTicket <> Handle)
and (HourOf(Time(0)) >= 15) and (MinuteOf(CurrTime) >= 55) then
CloseOrder(OrderHandle2);
Все работает, удаляет как и надо. Правда теперь трейлинг стоп отвалился и еще одна фича. Будем разбираться дальше....