[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 486

 
abolk:

montrer comment lire la variable global_trailing_SP


Actuellement, pour la position principale, la valeur de suivi est calculée par ATR comme ceci :

void Trailing_Stop_by_ATR_SP(int Timeframe,int Period_ATR_SP,double Multiply_SP,int digits_symbol,int Magic)
{  
   double High_1     = NormalizeDouble(iHigh(Symbol(),Timeframe,1),Digits);
   double Low_1      = NormalizeDouble(iLow(Symbol(),Timeframe,1),Digits);
   double atr        = iATR(Symbol(),Timeframe,Period_ATR_SP,1);
   double new_trail  = Low_1 + NormalizeDouble(((Multiply_SP*atr)*digits_symbol)*Point,Digits);
    
   for(int count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
      
         if (OrderType() == OP_SELL && OrderMagicNumber() == Magic)
            {  double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
               double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
               
               if (new_trail < Stp_Loss && new_trail > High_1)
                  {  
                     OrderModify(OrderTicket(),Op_Price,new_trail,0,0,White);
                  }
            }
      }
}
Mais il n'y a pas de problème à ce niveau, car la position principale suit sans erreur. Le problème est d'attribuer la même valeur à un ou plusieurs autres postes.
 
FOReignEXchange:

Donc je ne comprends pas. L'ordre en attente existe-t-il au moment de la modification de l'ordre principal ?

S'il existe, alors la modification de l'ordre principal et la modification de l'ordre en attente sont dans le même bloc. Et si l'ordre principal est modifié, l'ordre en attente devrait faire de même, si telle est votre idée.

Une autre chose est que notre idée ne fonctionne pas. Cela signifie une erreur dans la condition. Essayez de tout faire de la même manière que dans la condition de modification de l'ordre principal, comme je l'ai montré ci-dessus. Il me semble que l'erreur est dans la logique. Je ne suis pas surpris. Tout est très compliqué ici. Cela devrait être plus simple.


Il est tout à fait possible que vous deviez faire plus simple. C'est de l'inexpérience).

Pour l'instant, c'est comme ça, pour la position principale qui suit dans une fonction séparée. Ensuite, s'il existe des ordres en attente ou d'autres positions avec d'autres majors, leurs valeurs sont comparées au stop de la position principale. Et s'ils sont différents, on prend la valeur du principal.

 
FOReignEXchange:

Je ne suis pas surpris. C'est un peu compliqué pour toi. Vous devez rester simple.

Je l'ai gardé simple. Le problème semble avoir disparu jusqu'à présent. J'ai combiné le trailing pour toutes les positions. Je ferai la modification des ordres en attente dans une fonction séparée. Merci.))))
 
tol64:
Je l'ai simplifié. Le problème semble avoir disparu jusqu'à présent. Merci.)))


Quoi, la pause a été modifiée ou quoi ? :)

L'écriture doit changer. Plus l'écriture est claire, moins il y a d'erreurs. Essayez de ne pas tout entasser, de réduire au maximum les variables et autres éléments inutiles. Commencez toujours les accolades sur une nouvelle ligne pour que les blocs soient bien visibles.

 
FOReignEXchange:

Quoi, le trailing stop a été modifié ou quelque chose comme ça ?


Oui, dans la fonction ci-dessus, ATR trailing, j'ai exclu le Magic check et ajouté une pause :

if (OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) 
 
FOReignEXchange:


L'écriture doit être modifiée. Plus l'écriture est claire, moins il y a d'erreurs. Essayez de ne pas tout entasser dans une seule pile, avec le moins de variables et de choses inutiles possible. Il faut toujours écrire les accolades sur une nouvelle ligne pour que les blocs soient bien visibles.

Merci pour les conseils. Je grave les meilleurs d'entre eux dans mes neurones.))
 
tol64:


Oui, dans la fonction ci-dessus, ATR trailing, j'ai exclu le Magic check et ajouté les pauses :


Oui. C'est vrai, j'étais sur le point de dire Magik. Vous voyez. Pas besoin de variables inutiles. Je te verrai plus tard.
 
FOReignEXchange:

Oui. C'est vrai, j'allais dire Magik. Vous voyez. Pas besoin de variables inutiles. Je te verrai plus tard.


C'est une idée judicieuse. "Pas besoin de variables inutiles."
Pas besoin d'un magik... pourquoi vérifier l'ordre pour un magik ?
Si vous modifiez un ordre provenant d'un autre EA, tout se passera bien.
Vous devriez exclure le magicien en tant que classe en général - ses développeurs ont perdu leur temps - et nous avons subi un lavage de cerveau par toutes sortes de magiciens.

p.s. Et pour la danseuse, il vaut mieux couper ce qui gêne.

 
abolk:


idée judicieuse - "pas besoin de variables supplémentaires"
et "pas besoin de magicien" - pourquoi vérifier la commande d'un magicien ?
modifier une commande d'un autre conseiller - pas de problème.
exclure le magicien comme classe du tout


)))) Non, je pense qu'il serait mieux de laisser le magicien. Vous devriez juste laisser les ordres en attente.

Pour être plus exact, nous devrions laisser les magiciens qui sont nécessaires. Si nous utilisons plusieurs Expert Advisors sur différents graphiques, nous devons également inclure les symboles dans la vérification. Mais je ne suis pas encore arrivé à ce point. ))

 

Je n'utilise jamais de magiciens. Bien que parfois il y ait quelques articles à la fois. J'utilise des tickets. Il est beaucoup plus facile de vérifier via OrderSelect. Et la fonction OrderSend devient plus claire. Eh bien, chacun est le maître de sa propre écriture. Personnellement, je n'ai jamais eu de problèmes sans magiciens.

Le ticket ne va jamais nulle part. C'est pratique avec ça.

Raison: