Советник закрывает сделки, когда он увеличит Эквити на n долларов. Как реализовать, если в соседнем окне работает другой советник. Советник должен учитывать только свое увеличение эквити. - страница 3

 
Ihor Herasko:

Речь ведь шла только о смене таймфрейма.

И я о том-же. Надо проверять поведение при смене ТФ учитывая что при применении шаблона, несмотря на то, что есть в перечислении причин, функция возвращает не то что хотелось увидеть. В OnDeinit() получаем смену шаблона, а в OnInit() новую загрузку индикатора. Как будет при смене ТФ и\или в советнике, надо проверять. Если уже проверено, снимаю шляпу и не спорю...

 
Ihor Herasko:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Советник закрывает сделки, когда он увеличит Эквити на n долларов. Как реализовать, если в соседнем окне работает другой советник. Советник должен учитывать только свое увеличение эквити.

Ihor Herasko, 2018.01.12 14:55


Это можно сделать самому:

int OnInit()
{
   if (UninitializeReason() == REASON_CHARTCHANGE)
      return INIT_SUCCEDED;

   ...
   код функции
   ...
   return INIT_SUCCEEDED;
}

void OnDeinit(const int reason)
{
   if (reason == REASON_CHARTCHANGE)
      return;

   ...
   код функции
   ...
}

В советнике больше ничего и не нужно. А вот в индикаторе потребуется еще сохранение значений всех глобальных переменных индикатора, включая prev_calculated и rates_total, используемых в OnCalculate().


Прикольное решение. Ihor Herasko - гений программирования.)
 
Ihor Herasko:

Но #property not_pereinitialization_change_timefrime все равно лучше)))

 

В советнике, или в функции OrderSend(). или в циклах не указаны магик-номера ордеров и он закрывает все подряд, то есть, все какие будут находиться в терминале. Может я ошибаюсь, но вам надо обратиться к программисту и он посмотрит код и устранит этот недостаток, а если в другом окне, с другой валютной парой работает тот-же советник, то обращаться ни куда не надо; программисты умные люди; Вам в настройках, прежде чем ставить надо на каждой паре куда будете ставить советника - менять магик-номер, что бы один работал только со своими ордерами, а тот-же самый советник, но на другой валютной паре - работал уже со своими магик-ордерами. И все. Как-то так?!

 

Или сделать условия и указать где идет увеличение if(... ... ... && OrderMagicNumber()==Magic) и все, он будет работать только с этим магическим номером. Как-то так?!

 

И где функция OrderClose() перед ней в цикле, выше нее надо в условиях прописать и указать магик-номер и он будет закрывать ордера только с этим магиком.

 

Вы новерно не понимаете зачем нужен магик-номер?! Укажите его в условиях и все. К примеру: if(Ask>ma && OrderMagicNumber()==Magic_1){ticket=0} if(Ask<ma && OrderMagicNumber()==Magic_2){ticket=1} if(OrderSelect(OrderTicket(),SELECT_BU_TICKET)){if(ticket==1){OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);}} Я даже ордер магик не указал, так как я его ранее в условиях указал и закроется ордер где тикет будет равен единице, то есть, ордер с Magic_2, а тот так и будет висеть.

 

Извините конечно, но у Вас нарушена логика в мышлении. Это сложно. Вы сами себе закручиваете гайки. Программирование - все на много проще. Поймите одно, если Вы не будете разбираться в основах, то и дальше лесть не стоит, закапаетесь и утонете совсем. К примеру: попробуйте написать условие исключающее "или" и обосновать его логически и это побитовая история, значит тут надо еще знать сколько те, или иные переменные вмещают в себе бит. Можете написать и скомпилировать, но это условие у Вас не будет работать. Значит, прежде чем лесть в дебри, разберитесь хотя бы с этим. Удачи.

 
Юра куксов:

Извините конечно, но у Вас нарушена логика в мышлении. Это сложно. Вы сами себе закручиваете гайки. Программирование - все на много проще. Поймите одно, если Вы не будете разбираться в основах, то и дальше лесть не стоит, закапаетесь и утонете совсем. К примеру: попробуйте написать условие исключающее "или" и обосновать его логически и это побитовая история, значит тут надо еще знать сколько те, или иные переменные вмещают в себе бит. Можете написать и скомпилировать, но это условие у Вас не будет работать. Значит, прежде чем лесть в дебри, разберитесь хотя бы с этим. Удачи.

так меня еще никто не попускал )))
 

Да проконает, извени, я до конца только что прочитал. Укажешь магик и проконает. У меня есть советник который работает с тремя магиками и ордера и все что происходит, для каждого магика все отдельно. Лебеди в одну сторону, утки в другую, а коты сами по себе. Извини.

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