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

 
Elena56:

В процессе проведения оптимизации отмечаю пункт визуализация и нажимаю старт, после этого тестор стратегий блекнет исчезает отметка об визуализации и тестирование проходит в очень медленном темпе. Что это значит? загрузку котировок и обновление проводила. (МТ4)

это оптимизация, а не тестирование.
 

господа, помогите плз. У меня проблема - не хочет писать текст на закрытии ордера, подскажите почему плз

   OrderSelect(otbH,SELECT_BY_TICKET);
   if(OrderSelect(otbH,SELECT_BY_TICKET)==true)
   { 
      Print("1");
      if(OrderCloseTime()>0)
      {
         Print("2");
         ObjectCreate("ndp"+OrderTicket(),OBJ_TEXT,0,0,0);
         ObjectSet("ndp"+OrderTicket(),OBJPROP_TIME1,TimeCurrent());
         ObjectSet("ndp"+OrderTicket(),OBJPROP_PRICE1,OrderClosePrice());
         ObjectSetText("ndp"+OrderTicket(),OrderProfit(),5,"Arial",Aqua);
      } 
   }    
   
   

otbH - это номер тикета. Самое интересное, что цифру "1" он печатает, а вот цифру "2" отказывается... причину понять не могу... ведь ордер-то он выбирает... обхъясните плз

 
CLAIN:

господа, помогите плз. У меня проблема - не хочет писать текст на закрытии ордера, подскажите почему плз

otbH - это номер тикета. Самое интересное, что цифру "1" он печатает, а вот цифру "2" отказывается... причину понять не могу... ведь ордер-то он выбирает... обхъясните плз


Ордер закрыт или нет?
 

Ордер сначала открывается, потом закрывается.

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

сначала выбираю ордер по тикету - OrderSelect(otbH,SELECT_BY_TICKET); - он его выберет, где бы тот ни находился, верно?

а потом он должен определять, закрыт тот или открыт... но почему-то этого не происходит...

 
CLAIN:

Ордер сначала открывается, потом закрывается.

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

сначала выбираю ордер по тикету - OrderSelect(otbH,SELECT_BY_TICKET); - он его выберет, где бы тот ни находился, верно?

а потом он должен определять, закрыт тот или открыт... но почему-то этого не происходит...


Попробуйте выбрать закрытый ордер
 
подскажите как плз, не умею
 
CLAIN:
подскажите как плз, не умею

   int total=OrdersHistoryTotal();
   for (int i=total-1;i>=0;i--) 
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==MagicNumber )
            {
               // Ваши действия с ордером
            }
         }
      }
   }
 

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

 
DOCTORS:

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

Странно почему это в тестере всё ОК - в тестере тоже нулевой бар не сформированный и так же будут ложные пересечения.

Ищите пересечения на 1-м и 2-м барах. Если на втором МА1 <= МА2, а на первом МА1 > МА2, значит МА1 пересекла МА2 снизу-вверх. Для сверху-вниз - наоборот.

Только сравнение делайте вычитанием:

   double MA1=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,1);
   double MA2=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,2);
   if (NormalizeDouble(MA1-MA2,Digits)<=0)
   if (NormalizeDouble(MA1-MA2,Digits)>0) {
      // MA1 пересекла MA2 снизу-вверх
      }

Для сверху-вниз - наоборот.

Сравнивать можно не с нулём, а с каким-либо минимальным значением, например 0.1*Point

 
artmedia70:

Странно почему это в тестере всё ОК - в тестере тоже нулевой бар не сформированный и так же будут ложные пересечения.

Ищите пересечения на 1-м и 2-м барах. Если на втором МА1 <= МА2, а на первом МА1 > МА2, значит МА1 пересекла МА2 снизу-вверх. Для сверху-вниз - наоборот.

Только сравнение делайте вычитанием:

Для сверху-вниз - наоборот.

Сравнивать можно не с нулём, а с каким-либо минимальным значением, например 0.1*Point


Спасибо огромное!