Сложно ли написать эксперта без ошибок? - страница 3

 
bvn >>:

void OpenOrder(int Cmd) {

// тут наверное избыточность, но я решил обе проверки вставить в свой код... главное работает :)

if (Wait > TimeCurrent() || !IsTradeAllowed() || IsTradeContextBusy()) return;

Код предполагает, что сигнал устойчивый и после определенной паузы, заданной в переменной Wait попытка открыть ордер повториться.

Выделил то, что не нравится. Все нижесказанное ИМХО и можно не принимать во внимание.


IsTradeAllowed -- всегда ставлю в самом начале функции старт. Зачем напрягать проц если все равно торговать нельзя?

IsTradeContextBusy -- это проблема терминала, причем всегда недолгосрочная. Есть смысл подождать. У себя пользую такую простецкую функцию:

void WaitForContext()
{
   while(IsTradeContextBusy())
   {
      Sleep(100);
   }
}
Работает на ура.
 

всегда использую подобные конструкции при работе с торговыми функциями

   while (try != 0){
      while (IsTradeContextBusy() || !IsTradeAllowed()) {Comment("Торговый поток занят...");Sleep(tradeSleep);}        
      RefreshRates();    
      // переопределение торговых параметров  
      // ...
      res = торговаяФункция(...);
      if (res){    
         PlaySound("alert.wav");    
         try = 0;                          
         Comment("Ордер открыт !");        
      }else{
         ErrorBlock(showErrors, err, msg);
         if (err > 1) try = 0;
         Comment("Ошибка - ", msg);          
      }             
   }  
 
keekkenen >>:

всегда использую подобные конструкции при работе с торговыми функциями

Хорошая функция, взял на заметку. По сути тоже самое что и у меня, только цикл бесконечный. И звука у меня на компе нет, только наушники :-)


А почему вы советуете убрать функцию IsNewBar()? Ведь по сути каждый тик новой свечки будет запускать кучу проверок, и занимать вычислительную мощность компьютера. А если торговцев несколько? За 15минутную свечку тиков приходит несколько десятков, но мне кажется логичным использовать только завершенные свечи для анализа, закрылась последняя - открылась новая, проверили сигнал - есть - сделали ставку, нет - не сделали, ждем когда закроется новая. А так получится 100 тиков пришло - и мы 99 раз проверили зачем-то тоже самое что выяснили и в 1 раз.

 

я это решил из вашего кода.. т.к. есть условия разворота - сигнал в buy, то нужно закрыть sell, если он есть, и наоборот..

исходя из этого я понял, что сигнал на открытие ордера является приоритетным по отношению ко времени, когда его открывать..

может я, конечно, неправильно понял, и открытия ордеров должно быть только в начальный момент после формирования бара ?..

 

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