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

 
как сделать чтобы в тестере, учитывались индикаторы с разных тайм фреймов, и возможно ли это вообще?
 
vilard:
как сделать чтобы в тестере, учитывались индикаторы с разных тайм фреймов, и возможно ли это вообще?
Что значит в тестере учитывать индикатор? (1) Может чтобы при визуализации отображался индикатор другого таймфрейма или (2) в коде советника, в функции индикатора надо рассчитать значение для другого таймфрейма?
 
vilard:
как сделать чтобы в тестере, учитывались индикаторы с разных тайм фреймов, и возможно ли это вообще?

возможно: https://docs.mql4.com/ru/indicators/icustom

https://docs.mql4.com/ru/constants/timeframes

 

Советник расчитан на то, что бы генерировать сигналы по барам с индексом 1 и 2 (т.е. открывать и закрывать ордера при открытии нового бара).

В тестере поочередно выдает ошибки 138 и 4051 (в роде бы ругается на ticket) для OrderClose.

Помогите разрешить эту проблему, пожалуйста.

   if(Mas_Ord_New[0][0]!=0)
    {
     if(Signal==2)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];
           Ans=OrderClose(ticket,lts,Bid,5);
           if(Ans==false) 
           Alert("Закрыть BUY ",ticket, " не удалось. Ошибка: ", GetLastError());
         }
      }
     if(Signal==3)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];            
           Ans=OrderClose(ticket,lts,Ask,5);
           if(Ans==false) 
            Alert("Закрыть SELL ",ticket, " не удалось. Ошибка: ", GetLastError());
         }       
      }
    }

 // Функция из учебника

int Terminal()
 {
   int Qnt=0;
   
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New); // Сохранение информации
   Qnt=0; // Обнуление счетчика
   ArrayInitialize(Mas_Ord_New,0);  // Обнуление массива
   ArrayInitialize(Mas_Tip,0);  // Обнуление массива
   
   for (int n=0; n<=OrdersTotal(); n++)
    {
      if ((OrderSelect(n,SELECT_BY_POS)==true) &&
          (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))
       {
         Qnt++;
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();
         Mas_Ord_New[Qnt][2]=OrderStopLoss();
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();
         Mas_Ord_New[Qnt][4]=OrderTicket();
         Mas_Ord_New[Qnt][5]=OrderLots();
         Mas_Tip[OrderType()]++;
         Mas_Ord_New[Qnt][6]=OrderType();
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;
         else
            Mas_Ord_New[Qnt][8]=1;
       }
    }
   Mas_Ord_New[0][0]=Qnt;
   return;
 }
 
silhouette:

Советник расчитан на то, что бы генерировать сигналы по барам с индексом 1 и 2 (т.е. открывать и закрывать ордера при открытии нового бара).

В тестере поочередно выдает ошибки 138 и 4051 (в роде бы ругается на ticket) для OrderClose.

Помогите разрешить эту проблему, пожалуйста.

Для закрытия позиции попробуйте такую конструкцию:

int err;
// ---
if (...) // условие закрытия позиции
{  if (OrdersTotal()>0)
   {  for (int i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  // фильтрация позиции по текущему символу:
            if (OrderSymbol()!=Symbol()) continue;
            // фильтрация позиции по магик-номеру:
            if (OrderMagicNumber()!=MagNum) continue;
            // ... можно и другие фильтры поставить.
            // --- закрытие позиции Buy.
            if (OrderType()==OP_BUY)
            // перед открытием или закрытием позиции
            // обновляйте котировки с помощью RefreshRates()
            // дабы избежать устаревание запрошенной цены,
            // возможной причины ошибки 138
            {  RefreshRates(); 
               OrderClose(OrderTicket(),OrderLots(),Bid,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Buy (",err,").");
               if (err==0) Alert("Позиция Buy закрыта успешно.");
               err=0; return(0);
            }
            // --- закрытие позиции Sell.
      else  if (OrderType()==OP_SELL)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Ask,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Sell (",err,").");
               if (err==0) Alert("Позиция Sell закрыта успешно.");
               err=0; return(0);
            }
   }  }  }
}
 
chief2000:
USDJPY


спасибо
 
Roman.:


0,01 - центовый счёт NDD. ТР и SL = 0.

Везде всё одинаково.

На 4ю - на валютных парах - без вопросов всё тестируется согласно алгоритма.

На Альпах - золото - тестируется согласно алгоритма.

Хотелось бы металлы добавить к своему ГРААЛЮ, который работает в 4ю, пока только на валютах.


То есть с валютами проблем нет?
 
Vinin:

То есть с валютами проблем нет?


Да. Вопросов нет.

Виктор Иванович, от души благодарю Вас, по Вашим наводящим вопросам сам разобрался.

В 4ю на центовом NDD нет металлов, только валюты, поэтому при тестировании выбрасывает ошибку № 131 - не правильный объём. Я об этом не знал.

По золоту и серебру уже начал оптимизировать параметры в Альпах.

 
paladin80:

Для закрытия позиции попробуйте такую конструкцию:


Спасибо, заработало!
 

Скажите, пожалуйста, как вставляется HTML код, например, баннера?

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