Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши программы на заказ. Зарабатывай с помощью сервиса Фриланс!
Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 12:02 

Доброго всем дня!

Как всегда, ниоткуда возникла проблема. При установке отложенного ордера, на мой взгляд корректно установлено значение экспирации, т.е. времени, по истечение которого отложенный ордер должен быть удален. Но, в тестере стратегий он не удаляется! Брокер - Альпари. Если просто ставить ручной отложенный ордер - дата экспирации возможна, она устанавливается и никаких ошибок и запретов на это нет. В тестере - она просто не работает. В чем может быть причина? Прилагаю код:

Внешняя переменная:

extern int LifeTimeMinutes= 20; // время жизни в минутах

После функции start():

datetime expiration = TimeCurrent() + 60*LifeTimeMinutes; // в expiration будет время удаления ордера.

После условий на открытие ордера:

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots, pricesell,slippage,0,0,name,magic,expiration,Red);

Vitalie Postolache
10989
Vitalie Postolache 2013.11.19 12:14  

А в журнале тестера ошибок нет?

TimeCurrent() некорректно работает в тестере когда рынок закрыт, лучше использовать Time[0] или iTime(Symbol(),PERIOD_M1,0):

datetime expiration = iTime(Symbol(),PERIOD_M1,0) + 60*LifeTimeMinutes;
Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 12:23  
evillive:

А в журнале тестера ошибок нет?

TimeCurrent() некорректно работает в тестере когда рынок закрыт, лучше использовать Time[0] или iTime(Symbol(),PERIOD_M1,0).


Вообще никаких ошибок. Вес прекрасно работает - ордера открываются, модифицируются. Никаких ЧП в журнале нет.

Да и рынок не закрыт сегодня...

Спасибо, сейчас попробую

Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 12:27  
evillive:

А в журнале тестера ошибок нет?

TimeCurrent() некорректно работает в тестере когда рынок закрыт, лучше использовать Time[0] или iTime(Symbol(),PERIOD_M1,0):


Странно. И Ваш код не работает(

Может эту

datetime expiration = iTime(Symbol(),PERIOD_M1,0) + 60*LifeTimeMinutes;

не вставлять после start() а куда нибудь в другое место? МОжет она с каждым тиком отодвигает время экспирации?

Vitalie Postolache
10989
Vitalie Postolache 2013.11.19 12:39  
remon:

Странно. И Ваш код не работает(

Может эту

не вставлять после start() а куда нибудь в другое место? МОжет она с каждым тиком отодвигает время экспирации?

Отодвигает, только не с каждым тиком а поминутно, да и отодвигает только до выставления отложки, саму отложку эта переменная ведь не трогает. Использовать можно внутри функции Start() или в любой пользовательской функции вызваемой оттуда на каждом тике. А вот почему не работает сказать не могу без исходников.

Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 12:47  
Ну чтож, придется прибегнуть к сторонней функции удаления отложенных ордеров, раз экспирация не работает
Vitalie Postolache
10989
Vitalie Postolache 2013.11.19 13:08  

Может это фишка альпарёв? У меня на f4u работает, выставляет корректно как в тестере, так и в реальном времени.


Хотя может и в коде где-то ошибка затаилась.

Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 13:34  
evillive:

Может это фишка альпарёв? У меня на f4u работает, выставляет корректно как в тестере, так и в реальном времени.


Хотя может и в коде где-то ошибка затаилась.


У меня вот сейчас если ставлю больше суток значение - все работает. Если меньше - как то через раз, то работает то нет. Странно как-то.

И еще - если сработала экспирация, значит на этом ордере не было модификации. Например - ставю маленький стоп-лосс, который не разрешен, то модификация выдает ошибку 130 и тогда работает экспирация. Если модификация прошла - экспирация не работает. Она как сбрасывается. Надо в этом направлении покопать!

Evgeniy Zhdan
4605
Evgeniy Zhdan 2013.11.19 13:42  
remon:


У меня вот сейчас если ставлю больше суток значение - все работает. Если меньше - как то через раз, то работает то нет. Странно как-то.

И еще - если сработала экспирация, значит на этом ордере не было модификации. Например - ставю маленький стоп-лосс, который не разрешен, то модификация выдает ошибку 130 и тогда работает экспирация. Если модификация прошла - экспирация не работает. Она как сбрасывается. Надо в этом направлении покопать!


ДОШЛО!!!! Я вставлял экспирация в ордерсенд а потом модифицировал без нее!!! Изордер-сенда ее убрал и поставил в OrderModify - ВСЕ ПРЕКРАСНО РАБОТАЕТ!

evillive: Спасибо что составил компанию для рассуждений! Сам бы я наверное долго еще додумывался!

Vitalie Postolache
10989
Vitalie Postolache 2013.11.19 13:47  

Встроил в MACD Sample код с временем, у меня всё работает в таком виде...

remon:


ДОШЛО!!!! Я вставлял экспирация в ордерсенд а потом модифицировал без нее!!! Изордер-сенда ее убрал и поставил в OrderModify - ВСЕ ПРЕКРАСНО РАБОТАЕТ!

evillive: Спасибо что составил компанию для рассуждений! Сам бы я наверное долго еще додумывался!

P.S.: А, ну тогда понятно, не в эспирации всё-таки дело было ;)

Файлы:
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий