Questions des débutants MQL5 MT5 MetaTrader 5 - page 225

 

Bonsoir !

J'utilise depuis longtemps le système avec commentaires pour distinguer si j'ai modifié une position plus tôt ou non...

Comment puis-je distinguer correctement, par exemple, le fait qu'après avoir placé un ordre d'achat, j'ai changé de SL et de TP dans la position ? Y a-t-il des domaines ou des fonctions spécifiques au poste ?

 
websafe25:

Bonsoir !

J'utilise depuis longtemps le système avec commentaires pour distinguer si j'ai modifié une position plus tôt ou non...

Comment puis-je distinguer correctement, par exemple, le fait qu'après avoir placé un ordre d'achat, j'ai changé de SL et de TP dans la position ? Existe-t-il des domaines ou des fonctions spécifiques au poste ?

C'est peu probable.

À mon avis, nous ne devrions pas nous fier à l'état actuel de la position ou des ordres. Il est beaucoup plus fiable lorsque, après le redémarrage, le système forme l'état qui doit être dans la situation actuelle du marché. Et après cela, il ajustera la position et le placement des commandes.

 
pronych:

C'est peu probable.

A mon avis, nous ne devrions pas nous fier à l'état actuel d'une position ou d'un ordre. Il est beaucoup plus sûr qu'après le redémarrage, le système prenne l'état qu'il devrait avoir dans la situation actuelle du marché. Et ensuite, il ajustera la position et le tableau des commandes.

Merci de votre réponse.

Je vais maintenant décrire ma propre situation.

Lorsque la position atteint, disons, un profit de 10 pips, je veux la transférer vers une position sans perte, c'est-à-dire que je déplace mes stops vers le prix d'ouverture + 3 pips, par exemple.

La situation suivante se produit en ce moment même.

if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        if(Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits)))
          {

Si le profit sur une transaction est supérieur ou égal à 10 pips, je change les stops. Leprofit augmente, et la modification se produit encore et encore, constamment. Je dois déplacer une transaction vers le no-loss une fois, et ensuite la sauter par ......

Comment puis-je m'en débarrasser ? Ou bien il serait préférable d'écrire non pas <= mais = ? Est-il possible que lorsque l'EA atteint cette opération et commence à comparer le profit sur un trade, celui-ci ne soit pas égal à 10 pips, et que le profit soit plus important, alors il ne fermera pas sans perte ?

P.S.> Je pense que lorsqu'on prend une position, il suffit de regarder à quel niveau du prix se trouve le SL, s'il est au-dessus du prix alors il est déjà modifié....

J'ai décidé de cette façon :

if(PositionInfo.Select(_Symbol))
{
   if(PositionInfo.PositionType()==POSITION_TYPE_BUY)
     {
     if(PositionInfo.StopLoss() > PositionInfo.PriceOpen())
       {
         if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_BUY,Lot,PositionInfo.PriceOpen(),NormalizeDouble(SymbolInfo.Ask()+ModifyPips*_Point,_Digits)) >= PositionInfo.Profit())
          {
             Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()+ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()+TP*_Point,_Digits));
          }
       }
     }
   if(PositionInfo.PositionType()==POSITION_TYPE_SELL)
     {
     if(PositionInfo.StopLoss() < PositionInfo.PriceOpen())
       {
      if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits));
        }
       }
     }
}
 
websafe25:

P.S> Je pense que lorsqu'on prend une position, il suffit de regarder à quel niveau du prix se trouve le SL, s'il est au-dessus du prix alors il est déjà modifié....

J'ai décidé de cette façon :

Ce que vous avez écrit après P.S. est tout à fait évident. (si vous en avez besoin de manière très précise, jusqu'à trouver le niveau des barres hautes/basses depuis la dernière mesure)) mais c'est peu probable))

Seulement, il serait souhaitable de se détacher du concept de "profit" et de se tourner vers le concept de "point".

Et il serait plus beau de ne pas considérer le prix de la dernière transaction( et d'oublier généralement ce type de prix), mais de demander/enchérir dans la variante avantageuse ;))

 

Bonsoir !

Malheureusement, je n'ai pas trouvé d'instructions spécifiques sur la façon d'utiliser un module de signal, par exemple RSI. C'est-à-dire qu'il existe un enregistrement de la façon dont il est initialisé, les paramètres sont définis, mais comment vérifier simplement la condition d'achat de mon EA - non. Et ensuite ? Comment puis-je vérifier s'il existe une condition d'achat/de vente ?

/--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(100);
   signal.ThresholdClose(100);
   signal.PriceLevel(0.0);
   signal.StopLevel(SL);
   signal.TakeLevel(TP);
//--- Creating filter CSignalRSI
   CSignalRSI *filter0=new CSignalRSI;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodRSI(PeriodRSI);
   filter0.Applied(PRICE_CLOSE);
   filter0.Weight(0.8);
 
websafe25:

Bonsoir !

Malheureusement, je n'ai pas trouvé d'instructions spécifiques sur la façon d'utiliser un module de signal, par exemple RSI. C'est-à-dire qu'il existe un enregistrement de la façon dont il est initialisé, les paramètres sont définis, mais comment vérifier simplement la condition d'achat de mon EA - non. Et ensuite ? Comment puis-je vérifier s'il existe une condition d'achat/de vente ?

Le module de signaux est connecté à votre conseiller expert au stade de la conception. Chaque module de signaux organise le vote...

En général, cet article est à lire absolument :

Créez un robot de trading en 6 étapes !

Et enfin

Générateur de signaux de trading d'indicateurs personnalisés

 

Au fait, suis-je le seul à penser qu'il est incorrect de prendre la moyenne arithmétique des signaux dans le module de vote ?

double CExpertSignal::Direction(void)
  {
   long   mask;
   double direction;
   double result=m_weight*(LongCondition()-ShortCondition());
   int    number=(result==0.0)? 0 : 1;      // number of "voted"
//---
   int    total=m_filters.Total();
//--- loop by filters
   for(int i=0;i<total;i++)
     {
      //--- mask for bit maps
      mask=((long)1)<<i;
      //--- check of the flag of ignoring the signal of filter
      if((m_ignore&mask)!=0)
         continue;
      CExpertSignal *filter=m_filters.At(i);
      //--- check pointer
      if(filter==NULL)
         continue;
      direction=filter.Direction();
      //--- the "prohibition" signal
      if(direction==EMPTY_VALUE)
         return(EMPTY_VALUE);
      //--- check of flag of inverting the signal of filter
      if((m_invert&mask)!=0)
         result-=direction;
      else
         result+=direction;
// Вот тут бы       number+=filter.Weight();

      number++;
      }
//--- normalization
   if(number!=0)
      result/=number; // Вот туточки???
//--- return the result
   return(result);
  }
 
YAndrey:

Au fait, suis-je le seul à penser qu'il est incorrect de prendre la moyenne arithmétique des signaux dans le module de vote ?

Tout est logique.

Lisez la suite de l'articleMQL5 Wizard : The New Version et voici un morceau d'image tiré de l'article :

normalisation

 
barabashkakvn:

Tout a un sens.

Lisez la suite de l'articleAssistant MQL5 : la nouvelle version et voici un morceau de dessin tiré de l'article :

Est-ce vraiment logique ? Si les poids sont de 1, alors oui, c'est logique.

Imaginons que j'ai deux signaux de filtre. L'un est bon, le gros en qui j'ai confiance et pour lequel j'ai mis le poids 1. L'autre est petit, auxiliaire pour le plaisir, donc son poids = 0.1.

Le signal épais donne un signal d'achat égal à 100, et le petit donne un signal d'achat égal à 10. Quel sera le signal total ? 50.5 ??? N'est-il pas étrange que le petit sous-estime la situation ?

 
YAndrey:

Est-ce que ça a du sens ? Si les poids sont de 1 chacun, alors oui, c'est logique.

Imaginons que j'ai 2 filtres de signal. L'un d'entre eux est bon, épais, auquel je fais confiance et auquel je donne un poids de 1. Un autre est petit, auxiliaire pour le plaisir, donc son poids = 0,1.

Le signal épais donne un signal d'achat égal à 100, et le petit donne un signal d'achat égal à 10. Quel sera le signal total ? 50.5 ??? N'est-il pas étrange que le petit sous-estime autant la situation ???

1. le nombre total de votes. Sa principale caractéristique est la direction. La deuxième caractéristique est la valeur finale.
2. Si votre stratégie déclenche deux signaux : un avec une force égale à 100*1, et le second avec une force égale à 10*0.1, alors vous devez revoir votre stratégie en termes de sélection de signaux.