[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 54

 
vovan-gogan:

В моем примере разве не то же самое? В чем отличие? Разве что я функцию start не добавил.


А еще лучше так.

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan:

Но я не вижу отличи чтобы пробовать. Скажите пожалуйста что я не так сделал именно.

Вы пробуйте и напишите результат. Ордер может быть не установлен по Вашему условию, в связи с отсутствием необходимых проверок при его установке. Кроме этого не мешало бы добавить обработчика ошибок при его не установке по той или иной причине, проскальзывание сделайте > 0 - это первое, что сразу видно.
 
Вы имеете ввиду проскальзывание по отложенному ордеру?
 
vovan-gogan:
Вы имеете ввиду проскальзывание по отложенному ордеру?


Не придирайтесь к the text'у - ставьте и все...Проверяйте.

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

 
Roman.:


Не придирайтесь к the text'у - ставьте и все...Проверяйте.

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


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

В моем примере разве не то же самое? В чем отличие? Разве что я функцию start не добавил.


Перечитайте понятие локальных и глобальных переменных. Кроме этого из-за этой конструкции

 if (OrdersTotal()>= 1) return(0);  

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

В общем случае - необходимо организовывать цикл по ордерам открытым или установленным именно этим экспертом в зависимости от логики работы Вашего алгоритма - ТС, при отсутствии отложенных - устанавливать его и увеличивать счетчик ордеров, выводить инфу на печать.

 
vovan-gogan:

Спасибо Вам за желание помочь, но в данной конкретной ситуации мне бы хотелось чтобы Вы в первую очередь помогли понять мне свою ошибку. Если я буду постоянно пользоваться решениями, составленными другими, а не осознавать свои ошибки, то вряд ли я буду расти как программист. Надесь с этим вы согласны


Согласен. Перечитайте понятие локальных и глобальных переменных клиентского терминала.



int start()                            // Спец. функция start
  {
    int Orders=0;    
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
         
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
vovan-gogan:

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


Задавайте вопрос уже... :-Р

Пробуйте вариант из предыдущего моего поста.

Прочтите помимо учебника и документации, здесь - более подробного разжеванного фарша пока еще нигде не встречал.

 
Спасибо за совет насчет глобальных и локальных переменных) Щас углублюсь в чтение)
 
Alexandr24:
Скажите почему когда открываю график (реал тайм) с периодом М30 и накладываю индикатор с параметром int shift=iBarShift(NULL,PERIOD_M5,some_time); shift будет таким как надо, но когда я этот же индикатор прогоняю через тестер с периодом М30 shift не расчитывается?

Кто нить знает как решить такую проблему?