Une question pour les connaisseurs de MQL - page 10

 
Rita:

Oh, je réfléchissais encore :)

Si

if (NumberOfPositions(NULL, OP_BUY,Magic)>=2 && NumberOfPositions(NULL,OP_SELL,Magic)>=2) {
 for{
// а сюда счетчик, по которому 2 раза пройдет
                    ClosePosFirstProfit(NULL,OP_BUY, Magic);
                    ClosePosFirstProfit(NULL,OP_SELL, Magic);
}
}
Nah ?

 
Merci Abzasc, je vais faire un essai.
 
Bonjour, je viens de commencer à apprendre à écrire en MQL4 et je ne comprends pas comment (avec quelle commande) on peut connecter non pas un indicateur intégré, mais un indicateur pris dans la Code Base ? Pouvez-vous me le dire s'il vous plaît !
 
savage_pinguin:
Bonjour, je viens de commencer à apprendre à écrire en MQL4 et je ne comprends pas comment (avec quelle commande) on peut connecter non pas un indicateur intégré, mais un indicateur pris dans la Code Base à un Expert Advisor ? Pouvez-vous me le dire s'il vous plaît !

iCustom() pour aider
 

Après-midi.

 if  ( Accumulation2MA_1<=MA_1  &&    Accumulation2MA_0>MA_0 )   {
// если линии пересеклись - открываем позицию
   ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,
                                             "Хи-Хи",MagicNum,0,CLR_NONE);
     if(ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); 
               Sleep(10000);   return (0); }
   }

Le Conseiller Expert utilise un indicateur personnalisé Accumulation2MA, sur lequel l'indicateur MA est attaché en mode iMAOnArray.

Les signaux d'entrée/sortie sont des franchissements de ligne !

Je ne comprends pas ce qui se passe. Mais la moitié des signaux d'entrée/sortie sont ignorés de manière " flagrante " ! Sans raison !

La même chose à la fermeture :

 for (int v=0; v<OrdersTotal(); v++)                             {//сортируем       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))               {//перебираем           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum)   {//выбираем 
//-----------------------------------------------------                  
if (OrderType() == OP_SELL) {//если линии пересеклись, то закрываем: 
      if( Accumulation2MA_1<=MA_1  &&    Accumulation2MA_0>MA_0 )   {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                 return(0); // выходим
                }   
......

Près de la moitié des transactions sont manquées de cette manière. Pouvez-vous me dire ce qui ne va pas ?

Les conditions sont les plus simples ! Les lignes sont clairement en mouvement ! Mais les postes ne sont pas toujours ouverts/fermés ! Le journal est "silencieux".

Je les ai montrés avec des flèches.

//------заполняем массив значениями Accumulation2MA -----------------
double Accumulation2MA[50];
int    i=0;  while (i<50)  {
Accumulation2MA[i]= iCustom(NULL, 0,"Accumulation2MA_v03",SMA,FMA,0, i);
                  i++;     }
//------Вешаем на Accumulation2MA - линию МА ---------------
ArraySetAsSeries(Accumulation2MA,true);
double MA_0 = iMAOnArray(Accumulation2MA,0,MA_Period,0,MODE_SMA,0);
double MA_1 = iMAOnArray(Accumulation2MA,0,MA_Period,0,MODE_SMA,1);
double Accumulation2MA_0=iCustom(NULL, 0,"Accumulation2MA_v03",SMA,FMA,0,0);
double Accumulation2MA_1=iCustom(NULL, 0,"Accumulation2MA_v03",SMA,FMA,0,1);
 
Rita:

Après-midi.

Le Conseiller Expert utilise un indicateur personnalisé Accumulation2MA, sur lequel l'indicateur MA est attaché en mode iMAOnArray.

Les signaux d'entrée/sortie sont des franchissements de ligne !

Je ne comprends pas ce qui se passe. Mais la moitié des signaux d'entrée/sortie sont ignorés de façon "flagrante" ! Sans raison !

La même chose à la fermeture :

Près de la moitié des transactions sont manquées de cette manière. Pouvez-vous me dire ce qui ne va pas ?

Les conditions sont les plus simples ! Les lignes sont clairement en mouvement ! Mais les postes ne sont pas toujours ouverts/fermés ! Le journal est "silencieux".

Je les ai montrés avec des flèches.

Cela peut se produire lorsque l'on saute des ticks. C'est-à-dire que pendant l'exécution de Start(), un nouveau tick arrive (dans lequel les conditions seraient remplies), mais il est ignoré pendant l'exécution de Start().

Dans le tic-tac suivant, les conditions ne sont pas remplies - elles ont disparu.

En fait, le croisement des lignes de l'indicateur est un signal très inconfortable, je ne l'ai pas utilisé depuis longtemps. Il est préférable de soustraire un indicateur à un autre et de tracer le passage par zéro. Cependant, c'est une question de goût.

 
Rita:

Après-midi.

Le Conseiller Expert utilise un indicateur personnalisé Accumulation2MA, sur lequel l'indicateur MA est attaché en mode iMAOnArray.

Les signaux d'entrée/sortie sont des franchissements de ligne !

Je ne comprends pas ce qui se passe. Mais la moitié des signaux d'entrée/sortie sont ignorés de façon "flagrante" ! Sans raison !

La même chose à la fermeture :

Près de la moitié des transactions sont manquées de cette manière. Pouvez-vous me dire ce qui ne va pas ?

Les conditions sont les plus simples ! Les lignes sont clairement en mouvement ! Mais les postes ne sont pas toujours ouverts/fermés ! Le journal est "silencieux".

Il est peut-être plus facile de calculer la deuxième ligne de l'indicateur. Alors les problèmes devraient disparaître

 
MetaDriver:

Cela peut probablement se produire lorsque des ticks sont sautés. C'est-à-dire que pendant l'exécution de Start(), un nouveau tick arrive (dans lequel les conditions auraient été remplies), mais il est ignoré pendant l'exécution de Start().

Au tick suivant, les conditions ne sont pas remplies - c'est fait.

En fait, le croisement des lignes de l'indicateur est un signal très inconfortable, je ne l'ai pas utilisé depuis longtemps. Il est préférable de soustraire un indicateur à un autre et de surveiller le passage par zéro. C'est une question de goût.

La soustraction et le traçage du passage à zéro ne sont-ils pas pratiquement les mêmes que dans l'exemple ci-dessus ?

//если линии пересеклись, то закрываем: 
      if( Accumulation2MA_1<=MA_1  &&    Accumulation2MA_0>MA_0 )   {

À première vue, cela semble être une gifle !

Qu'est-ce qui vous fait penser que le "zero crossing" fonctionnera mieux ?

 
VINAR:

Il peut être plus facile de calculer la deuxième ligne de l'indicateur. Alors les problèmes devraient disparaître

Je ne comprends pas bien ce que vous entendez par "calculer la deuxième ligne de l'indicateur" ? Pouvez-vous expliquer ?

============================

Je teste à nouveau le conseiller expert (d'ailleurs, il fonctionne en ouvrant les prix) et je suis étonné de voir qu'il fonctionne parfaitement en ce moment ! Le saut de signal a presque disparu !

Et hier, il a manqué la moitié des signaux dans le même mt4 ! Une sorte de miracle....

 
Rita:

Soustraire et tracer un passage à zéro n'est-il pas pratiquement la même chose que

Au premier coup d'œil, c'est aussi bien de face que de face !

Qu'est-ce qui vous fait penser que le "passage à zéro" fonctionnerait mieux ?

En théorie, peu importe. En pratique :

1) nous pouvons facilement vérifier la différence entre la position de marché recommandée par l'indicateur et la position réelle dans les ordres. C'est-à-dire que l'indicateur résultant montrera une courbe toute faite qui peut être interprétée comme "positif/négatif"=="monter/descendre". C'est très pratique pour les systèmes d'inversion.

2) Il existe une possibilité de raffinement pratique du signal (multiplication par des coefficients, croisements avec d'autres lignes de critères, etc.)

Donc, comme je l'ai dit, c'est une question de goût. :)