[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 361

 
comment faire en sorte que les indicateurs de différents horizons temporels soient pris en compte dans le testeur, et est-ce même possible ?
 
vilard:
comment faire en sorte que les indicateurs de différents horizons temporels soient pris en compte dans le testeur, et est-ce même possible ?
Qu'est-ce que cela signifie de considérer un indicateur dans le testeur de stratégie ? (1) Peut-être que l'indicateur d'une autre période devrait être affiché pendant la visualisation, ou (2) dans le code de l'EA, dans la fonction de l'indicateur, vous devriez calculer une valeur pour une autre période ?
 
vilard:
comment faire en sorte que les indicateurs de différents horizons temporels soient pris en compte dans le testeur, et est-ce même possible ?

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

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

 

L'EA est conçu pour générer des signaux sur les barres d'indice 1 et 2 (c'est-à-dire des ordres d'ouverture et de fermeture à l'ouverture d'une nouvelle barre).

Dans le testeur, il génère alternativement les erreurs 138 et 4051 (il semble jurer sur le ticket) pour OrderClose.

Veuillez m'aider à résoudre ce problème.

   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 est conçu pour générer des signaux sur les barres d'indice 1 et 2 (c'est-à-dire des ordres d'ouverture et de fermeture à l'ouverture d'une nouvelle barre).

Dans le testeur, il génère alternativement les erreurs 138 et 4051 (il semble jurer sur le ticket) pour OrderClose.

Veuillez nous aider à résoudre ce problème.

Essayez la construction suivante pour fermer la position:

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


merci
 
Roman.:


0,01 - Compte en cents NDD. TR et SL = 0.

Tout est pareil partout.

Sur le 4ème - sur les paires de devises - sans aucun doute tout est testé selon l'algorithme.

Sur les Alpes - or - testé selon l'algorithme.

Je voudrais ajouter des métaux à mon GRAAL, qui fonctionne en 4ème, pour l'instant uniquement sur les devises.


Il n'y a donc pas de problème avec les devises ?
 
Vinin:

Il n'y a donc aucun problème avec les devises ?


Oui, il n'y a aucun problème.

Victor Ivanovich, merci du fond du coeur, j'ai compris grâce à vos questions suggestives.

Il n'y a pas de métaux, seulement des devises sur le NDD en 4, c'est pourquoi l'erreur #131 est jetée pendant les tests - mauvais volume. Je n'étais pas au courant de cela.

Pour l'or et l'argent, j'ai déjà commencé à optimiser les paramètres dans les Alpes.

 
paladin80:

Pour fermer une position, essayez cette construction :


Merci, ça marche !
 

Pouvez-vous me dire comment insérer le code HTML d'une bannière, par exemple ?