[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 520

 
Roger:

En général, j'ai ajouté deux variables - une pour le niveau de dépôt à atteindre et la seconde pour le nombre de fichiers à supprimer. Cela ne fonctionnera qu'une seule fois, ensuite il est nécessaire de corriger le niveau pour une autre valeur ou de redémarrer le Conseiller Expert.
Merci - je vais maintenant effectuer le test. Ou bien il n'est pas adapté pour fonctionner dans le testeur ?
 
alex12:
Merci - je vais faire le test maintenant. Ou n'est-il pas adapté à l'exécution du test ?

Comment pourrais-je le tester ?
 
demlin:

Salutations à tous !

Veuillez me conseiller un indicateur normal pour déterminer un flat, merci d'avance )))).


Je suis en train de le tester moi-même.

Peut être facilement ajouté (branché) dans un Expert Advisor via iCustom().

 
Un système simple pour croiser 2 wagons.
Acheter - le rapide croise le lent à la hausse.
Vendre - le rapide croise le lent vers le bas.

Fermer - opposé au signal ou au chalut. Pouvez-vous me dire ce que je dois changer dans le code pour fixer le stop = 50 pips à chaque ouverture de position ?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


Je suis en train de le tester moi-même.

Il est facilement ajouté (connecté) à l'Expert Advisor via iCustom().

Je me demande comment définir ses valeurs extrêmes basses et hautes dans un EA ? Après tout, dans une zone locale du graphique, 0,3800 (la ligne bleue) était une valeur extrême et correspondait à une correction temporaire, tandis que dans la zone locale suivante, 0,3041 (la ligne verte) devenait sa valeur extrême et marquait un retournement...

Qu'en est-il de la valeur extrême basse 0.4596 au premier long (ligne rouge), qui n'a rien dit ?

Et comment déterminer si la valeur de l'indicateur extremum low indique une correction ou un renversement ? En fait, la valeur de 0,3800 dans le premier cas a indiqué une correction (la ligne verticale verte), et dans le second cas - la fin de la tendance (la ligne verticale rouge).

Et enfin - il y a beaucoup de ces extrêmes locaux sur le graphique. Après tout, pour une période de 3 à 5 heures, il y aura certainement la valeur la plus basse, et ce sera une valeur extrêmement basse pour cet intervalle de temps. Si nous spécifions un certain intervalle de temps pour trouver les valeurs extrêmes des indicateurs, elles seront trouvées, mais... Cependant, sur les barres suivantes, au-delà de la période spécifiée, il se peut que la valeur de l'indicateur devienne encore plus basse (plus haute) et que cette valeur soit extrêmement basse (haute) - mais que faire de celle trouvée précédemment ? D'autant plus que le conseiller expert prendra une décision sur cette base.

Cependant...


 
artmedia70:

Je me demande, comment définissez-vous les valeurs extrêmes basses et hautes dans votre conseiller expert ? Après tout, dans une zone locale du graphique, 0,3800 (la ligne bleue) était une valeur extrême et correspondait à une correction temporaire, tandis que dans la zone locale suivante, 0,3041 (la ligne verte) devenait sa valeur extrême et marquait un retournement...

Qu'en est-il de la valeur extrême basse 0.4596 au premier long (ligne rouge), qui n'a rien dit ?

Et comment déterminer si la valeur extrêmement basse de l'indicateur indique une correction ou un retournement ? En fait, la valeur de 0,3800 dans le premier cas a indiqué une correction (la ligne verticale verte), et dans le second cas - la fin de la tendance (la ligne verticale rouge).

Et enfin - il y a beaucoup de ces extrêmes locaux sur le graphique. Si nous fixons un intervalle de 3 à 5 heures, ce sera certainement la valeur la plus basse, et ce sera une valeur extrêmement basse pour cet intervalle de temps. Si nous spécifions un certain intervalle de temps pour trouver les valeurs extrêmes de l'indicateur, il sera trouvé, mais... Cependant, sur les barres suivantes, au-delà de la période spécifiée, il se peut que la valeur de l'indicateur devienne encore plus basse (plus haute) et que cette valeur soit extrêmement basse (haute) - mais que faire de celle trouvée précédemment ? D'autant plus que le Conseiller Expert prendra une décision en fonction de celle-ci...

Cependant...





Je considère cet indicateur comme un filtre pour entrer sur le marché de la stratégie de tendance ou de la stratégie plate, c'est-à-dire que l'interprétation suivante de sa lecture apparaît :

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

Une valeur de l'indicateur inférieure à 0,5 signifie que le marché est en tendance.

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

Les valeurs extrêmement basses précèdent souvent la fin (correction) de la tendance actuelle - c'est déjà sur la figure - ici le chalutage fonctionne (quand on est sur le marché).


Une valeur de l'indicateur supérieure à 0,5 signifie que le marché est plat.

iVAR_1 > 0.5 && 

La valeur extrêmement élevée précède souvent le début d'une tendance significative - voir l'interprétation précédente.

La valeur de l'indicateur autour de 0,5 signifie une situation de marché incertaine - ici, il est possible d'utiliser un certain "niveau" d'indentation (je n'exclus pas qu'il soit redondant, c'est-à-dire que l'indicateur de l'indicateur de l'indentation n'a pas été utilisé. prendre la valeur 0.5 et tout), les deux en dessous - x, et au-dessus - y valeur 0.5 (niveau de base), les entrer dans les variables externes et optimiser avec le pas 0.02, disons, le même que la variable n - start:2 step:1 stop:7 - ce n'est pas superflu, je le fais - bientôt je posterai les résultats dans la branche Avalanche (c'est un système de tendance...:-)), seulement avec MM de Martin... et tous... :-)))).

 
Roman.:


Je considère cet indicateur comme un filtre pour entrer sur le marché dans le cadre d'une stratégie de tendance ou d'aplatissement, c'est-à-dire que sa lecture a l'interprétation suivante :

Une valeur d'indicateur inférieure à 0,5 indique une condition de marché tendancielle -

Les valeurs extrêmement basses précèdent souvent la fin (correction) de la tendance actuelle - cela convient déjà à la figure - ici le chalutage fonctionne (quand on est sur le marché).


Une valeur de l'indicateur supérieure à 0,5 signifie que le marché est plat.

Une valeur extrêmement élevée précède souvent le début d'une tendance significative - voir l'interprétation précédente.

La valeur de l'indicateur autour de 0,5 signifie une condition de marché incertaine - ici, il est possible d'utiliser un certain "niveau" d'indentation (je n'exclue pas qu'il soit redondant, c'est-à-dire que l'indicateur peut être utilisé pour des raisons de sécurité). prendre la valeur 0.5 et tout), les deux en dessous - x, et au-dessus - y valeur 0.5 (niveau de base), les entrer dans les variables externes et optimiser avec le pas 0.02, disons, le même que la variable n - start:2 step:1 stop:7 - ce n'est pas excessif, je le fais - bientôt je vais poster les résultats dans la branche Lavina (c'est le système de tendance...:-)), seulement avec MM par Martin... et tout... :-)))).

Je n'aime pas l'optimisation : l'essentiel est un ajustement... Et je n'optimise jamais les paramètres de mes bébés... J'essaie de choisir les paramètres nécessaires pour les différentes conditions du marché.

Merci pour la clarification, cependant... :) Honnêtement - attraper le post ci-dessus était un caillou dans la direction de la dinde... :)

 

Bonjour !

J'ai une telle question. Le conseiller expert a une fonction qui écrit les transactions dans un fichier csv, mais j'ai découvert un problème qui se produit lorsque j'active/désactive(TRUE/FALSE) l'option du système de gestion de l'argent dans les paramètres du conseiller expert. Par exemple, juste après la compilation du fichier source, tout fonctionne correctement et les transactions sont écrites dans le fichier comme prévu. La figure ci-dessous illustre des données correctement écrites :

Ensuite, dans le testeur, j'active l'option du système de gestion de l'argent dans les paramètres du conseiller expert, je lance le test, mais les données ne sont pas écrites correctement dans le fichier. La figure ci-dessous montre deux variantes à titre de comparaison. Celle de gauche est correcte (comme ci-dessus) et celle de droite ne l'est pas :

Je n'ai pas réussi à comprendre par moi-même de quoi il s'agissait, mais j'ai trouvé ce qui suit. Si j'active/désactive également l'option du système de gestion de l'argent et compile à nouveau le fichier source avant de lancer le test, tout s'écrit correctement.

Pouvez-vous me dire quel pourrait être le problème ?

 
artmedia70:

Je n'aime pas l'optimisation : l'essentiel est de s'adapter... Et je n'optimise jamais les paramètres de mes produits... J'essaie de les laisser choisir les paramètres nécessaires aux différentes conditions du marché.

Bien que, merci pour la clarification... :) Honnêtement - aller avec le post ci-dessus était un caillou dans la direction d'une dinde... :)


Je vois... Si vous êtes intéressé, voici une chose similaire (dans la bande-annonce). Voir aussi ici (fil entier) - il y aun traitement au-dessus/au-dessous de 0,6 et ici(pages sélectives).

Dossiers :
 
Roman.:


Je suis en train de le tester moi-même.

Facile à ajouter (brancher) à l'EA via iCustom().

Merci, je l'ai téléchargé, je vais le tester dans mon conseiller expert.