Грамотный советчик

 

Здравствуйте!

Решил создать себе маленький советчик, который бы при активации покупал некую валютную пару (ВП) таким образом:

s_buy = Buy; // Цена открытия ордера

SL = s_buy - 50; // Стоп Лосс

TP=0; // Тейк Профит

Если текущая цена Buy >= s_buy + (50 * Point), то Стоп Лосс (SL) устанавливается в позицию:

SL = s_buy + (30 * Point); // Ставим Стоп Лосс на 30 пунктов выше

s_buy = SL; // Ставим s_buy в новоутворенную позицию SL

Иными словами, хочу сделать торговлю на Стоп Лосс. Вот сделал и все отлично работает, но когда я перезагружаю терминал - открывается новый ордер! Что сделать для того, чтобы новый ордер не открывался, а выполнялась процедура OrderModify над открытым раньше ордером?

 
Нужно пересчитать ордера. Если по данной валютной паре ордера есть, то запрещаем установку ордера.
 

Нужно проверить ситуацию на наличие открытых позиций.
В простейшем случае, - используйте ф-ю

int total=OrdersTotal();

//------------------------------
if (total<1) //если нет открытых позиций, открываем
{ ......


//---------------------------------

if (total>0) // если есть позиции, - модифицируем
{ .....

 

О... Действительно! Спасибо drknn и leonid553!

Я что-то не подумал о том, что при инициализации можно проверить существующее ордера. Извините за нубовский вопрос! :)

 
vah-smile:

О... Действительно! Спасибо drknn и leonid553!

Я что-то не подумал о том, что при инициализации можно проверить существующее ордера. Извините за нубовский вопрос! :)


Нет - не при инициализации - в старте советника. Нужно объявить флаг, разрешающий торги. Перед проверкой количества открытых ордеров его нужно сбросить. Если счётчик ордеров равен нулю, то флаг нужно установить. Далее в коде нужно проверить, если флаг установлен, то ставим ордер. Если снят, то ордеров не ставим.

Если же проверку проводить при инициализации и не делать этого в старте, то на втором тике советник выставит ненужный ордер.

Причина обращения: