Люди, я тут уже спрашивал про то как сделать так чтобы ордер открывался только при появлении новой свечки. ТФ D1 использую.
Решил ставить отложки на определенных уровнях (buystop_lvl и sellstop_lvl), исходя из анализа предыдущих свечек.
Так вот, нужно чтобы в начале дня они поставились, а если наступает новая свечка то удалить их, и пофиг активировались отложки или нет, если сработали то рыночные ордера также закрыть надо. Максимум 2 ордера, buystop и sellstop.
Вот что я написал:
1. Вначале проверяю есть ли отложки или рыночные ордера, если есть то удаляю\закрываю их.
int total=OrdersTotal();
if (total!=0 && NewBar()==true){
for (int i=0; i<total; i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,10);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,10);
if(OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
Блин, всё равно не понимаю как это сделать. Нужно чтобы код с удалением и закрытием ордеров сработал только на следующей свечке. Но на ней же еще и открыться другие должны будут. Значит прога опять залезет в удаление. Какой-то флаг нужен, но уже мозги вспотели чтобы понять как это соорудить :)
И вообще выкидываете NewBar нафиг, смотрите время открытия последнего ордера и сравниваете с Time[0]. Если больше -- значит ваш случай, можно все удалять.
trend_lab: И вообще выкидываете NewBar нафиг, смотрите время открытия последнего ордера и сравниваете с Time[0]. Если больше -- значит ваш случай, можно все удалять.
Да, видимо так и придется сделать. Спасибо и на этом :)
Noterday: Блин, всё равно не понимаю как это сделать. Нужно чтобы код с удалением и закрытием ордеров сработал только на следующей свечке. Но на ней же еще и открыться другие должны будут. Значит прога опять залезет в удаление. Какой-то флаг нужен, но уже мозги вспотели чтобы понять как это соорудить :)
Почитайте внимательно про функцию OrderSend(). Для отложенных ордеров в ней имеется параметр:
expiration - Срок истечения отложенного ордера.
Открывая отложенный ордер в начале текущих суток = iTime (Symbol(), PERIOD_D1, 0), добавляете к этому времени ещё одни сутки - 1440 * 60. И не сработавшие отложенные ордера сами удалятся в начале следующих суток.
P.S. Окончание текущего бара можно ещё контролировать через функцию iBarShift():
if (iBarShift (Symbol(), PERIOD_D1, OrderOpenTime()) == 0) return(0);
или по этому условию какие-то другие "телодвижения", отследив OrderTicket() последнего ордера.
Почитайте внимательно про функцию OrderSend(). Для отложенных ордеров в ней имеется параметр:
Открывая отложенный ордер в начале текущих суток = iTime (Symbol(), PERIOD_D1, 0), добавляете к этому времени ещё одни сутки - 1440 * 60. И не сработавшие отложенные ордера сами удалятся в начале следующих суток.
Ну видимо да, а может просто косяк какой-то с терминалом с моим. Я тут в соседней ветке уже говорил что у меня и отчеты из вкладки ИСТОРИЯ СЧЕТА не сохраняются...
Noterday: Ну видимо да, а может просто косяк какой-то с терминалом с моим. Я тут в соседней ветке уже говорил что у меня и отчеты из вкладки ИСТОРИЯ СЧЕТА не сохраняются...
Как ни странно - у меня тоже, правда, билд у меня 416. Правда, к процессу удаления не сработавшегно отложенного ордера по его истечении, терминал НИКАКОГО отношения не имеет - это компетенция сервера ДЦ.
Люди, я тут уже спрашивал про то как сделать так чтобы ордер открывался только при появлении новой свечки. ТФ D1 использую.
Решил ставить отложки на определенных уровнях (buystop_lvl и sellstop_lvl), исходя из анализа предыдущих свечек.
Так вот, нужно чтобы в начале дня они поставились, а если наступает новая свечка то удалить их, и пофиг активировались отложки или нет, если сработали то рыночные ордера также закрыть надо. Максимум 2 ордера, buystop и sellstop.
Вот что я написал:
1. Вначале проверяю есть ли отложки или рыночные ордера, если есть то удаляю\закрываю их.
2. Потом ставлю отложки по рассчитанным уровням:
3. Функция нового бара (NewBar), которую мне тут подсказали:
В итоге имею то что с открытием свечки ордера выставляются и сразу удаляются. И так постоянно.
Когда закомментировал код из пункта (1), то вообще пипец, в тестере цена подходила к отложкам но они не открывались, т.е. не становились рыночными.
Вот, подскажите в чем дело может быть?
Эту функцию NewBar() нельзя использовать два раза подряд
Лучше что-нибудь так:
bool newBar = NewBar();
// и дальше по тексту заменяя NewBar() на newBar
И вообще выкидываете NewBar нафиг, смотрите время открытия последнего ордера и сравниваете с Time[0]. Если больше -- значит ваш случай, можно все удалять.
Да, видимо так и придется сделать. Спасибо и на этом :)
Блин, всё равно не понимаю как это сделать. Нужно чтобы код с удалением и закрытием ордеров сработал только на следующей свечке. Но на ней же еще и открыться другие должны будут. Значит прога опять залезет в удаление. Какой-то флаг нужен, но уже мозги вспотели чтобы понять как это соорудить :)
Почитайте внимательно про функцию OrderSend(). Для отложенных ордеров в ней имеется параметр:
Открывая отложенный ордер в начале текущих суток = iTime (Symbol(), PERIOD_D1, 0), добавляете к этому времени ещё одни сутки - 1440 * 60. И не сработавшие отложенные ордера сами удалятся в начале следующих суток.
P.S. Окончание текущего бара можно ещё контролировать через функцию iBarShift():
или по этому условию какие-то другие "телодвижения", отследив OrderTicket() последнего ордера.
Почитайте внимательно про функцию OrderSend(). Для отложенных ордеров в ней имеется параметр:
Открывая отложенный ордер в начале текущих суток = iTime (Symbol(), PERIOD_D1, 0), добавляете к этому времени ещё одни сутки - 1440 * 60. И не сработавшие отложенные ордера сами удалятся в начале следующих суток.
Читал, ДЦ походу не поддерживает.
Читал, ДЦ походу не поддерживает.
Ну видимо да, а может просто косяк какой-то с терминалом с моим. Я тут в соседней ветке уже говорил что у меня и отчеты из вкладки ИСТОРИЯ СЧЕТА не сохраняются...