[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 361

 
come fare in modo che gli indicatori di diversi timeframe siano presi in considerazione nel tester, ed è possibile?
 
vilard:
come fare in modo che gli indicatori di diversi timeframe siano presi in considerazione nel tester, ed è possibile?
Cosa significa considerare un indicatore nello Strategy Tester? (1) Forse l'indicatore di un altro timeframe dovrebbe essere visualizzato durante la visualizzazione, o (2) nel codice EA, nella funzione indicatore si dovrebbe calcolare un valore per un altro timeframe?
 
vilard:
come fare in modo che gli indicatori di diversi timeframe siano presi in considerazione nel tester, ed è possibile?

possibile: https://docs.mql4.com/ru/indicators/icustom

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

 

L'EA è progettato per generare segnali su barre con indice 1 e 2 (cioè ordini di apertura e chiusura all'apertura di una nuova barra).

Nel tester, genera alternativamente gli errori 138 e 4051 (sembra bestemmiare sul biglietto) per OrderClose.

Per favore aiutatemi a risolvere questo problema.

   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:

L'EA è progettato per generare segnali su barre con indice 1 e 2 (cioè ordini di apertura e chiusura all'apertura di una nuova barra).

Nel tester, genera alternativamente gli errori 138 e 4051 (sembra bestemmiare sul biglietto) per OrderClose.

Per favore, aiutateci a risolvere questo problema.

Provate la seguente costruzione per chiudere la posizione:

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


grazie
 
Roman.:


0,01 - conto centesimi NDD. TR e SL = 0.

Tutto è uguale ovunque.

Su 4 - su coppie di valute - senza dubbio tutto è testato secondo l'algoritmo.

Su Alpi - oro - testato secondo l'algoritmo.

Vorrei aggiungere metalli al mio GRAAL, che lavora in 4a, finora solo sulle valute.


Quindi non ci sono problemi con le valute?
 
Vinin:

Quindi non ci sono problemi con le valute?


Sì, non ci sono problemi.

Victor Ivanovich, grazie dal profondo del mio cuore, l'ho capito dalle tue domande guida.

Non ci sono metalli, solo valute su NDD in 4, ecco perché l'errore #131 viene buttato fuori durante i test - volume sbagliato. Non ne ero a conoscenza.

Per l'oro e l'argento ho già iniziato a ottimizzare i parametri in Alps.

 
paladin80:

Per chiudere una posizione, provate questa costruzione:


Grazie, funziona!
 

Puoi dirmi per favore come inserire il codice HTML per un banner, per esempio?