Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 235

 

Et bien sûr, lorsque nous ouvrons le prochain achat, nous effectuons immédiatement un roll over(StopLoss égal à notre prix moyen + 50 pips) sur toutes les positions .

C'est le vaurien qui, parfois, ne prend pas la dernière position. Nous avions 3 postes, mais 4 d'entre eux ont été ouverts. J'ai oublié de mettre le StopLoss sur la quatrième position.

DedZone devrait être tenue :

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Le calcul de la DedZone se fait dans l'initialisation de l'Expert Advisor.

 
Limita:

Et bien sûr, lorsque nous ouvrons le prochain achat, nous effectuons immédiatement un roll over(StopLoss égal à notre prix moyen + 50 pips) sur toutes les positions .

C'est le vaurien qui, parfois, ne prend pas la dernière position. Nous avions 3 postes, mais 4 d'entre eux ont été ouverts. J'ai oublié de mettre le StopLoss sur la quatrième position.

DedZone devrait être tenue :

DedZone est dans l'initialisation de l'Expert Advisor.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Lorsque les deux sont égaux à zéro, que se passe-t-il alors ? Alpari utilise le spread*2 dans un tel cas.

Et vous n'avez pas répondu à ma question sur la logique de ces lignes.

 
ALXIMIKS:

il est préférable de procéder de cette façon (quelqu'un a écrit qu'il avait des problèmes avec votre façon de procéder lors de la modification ou de la suppression d'ordres) :

Et pourquoi l'huile et le beurre ? (laisser quelque chose tranquille).


Merci !

Il semble être d'accord avec l'expert :)))

 
artmedia70:

Et vous n'avez pas répondu à ma question sur la logique de ces lignes.


artmedia70:

Toute la logique du comportement d'un EA peut être divisée en blocs logiques qui, en fonction des conditions, sont exécutés ou non.

Pour vos propres besoins, vous pouvez voir que ce bloc peut être un certain nombre de chaînes de caractères entre accolades :

Si (condition) {si la condition est vraie, le bloc entouré de ces accolades est exécuté}.

Sinon {si la condition ci-dessus n'est pas vraie, le bloc entouré de ces accolades est exécuté}.

S'il n'y a pas de crochets après la condition, le bloc exécuté lorsque la condition est vraie est une seule ligne immédiatement après la condition :

Si (condition) Cette ligne est exécutée

Sinon, cette ligne est exécutée.

Dans mes exemples, If correspond à if et Otherwise à else.

Pris ici

 
artmedia70:

Et quand les deux sont à zéro, alors quoi ? Alpari utilise le spread*2 dans ce cas.

Et vous n'avez pas répondu à ma question sur la logique de ces chaînes.



Merci pour les informations concernant Alpari.

Quant à la logique de ligne, ALXIMIKS y a répondu.

Je dois ajouter pour ma part que la modification ne doit être effectuée que si toutes les conditions sont réunies. Si au moins l'un d'entre eux échoue, nous continuons.

 
Limita:


Merci pour les informations concernant Alpari.

En ce qui concerne String Logic, ALXIMIKS a répondu.

Je devrais ajouter que dans ce cas, la modification ne devrait avoir lieu que si toutes les conditions sont vraies. Si au moins l'un d'entre eux échoue, nous passons à autre chose.

Il m'a montré pour une raison quelconque mes propres mots écrits une fois à quelqu'un.

Je voulais obtenir une réponse à ma question sur la logique. Tous les ifs () dans ce bloc de code vont les uns après les autres. Cela signifie que si la première condition est vraie, la deuxième le sera aussi, si la deuxième est vraie, la troisième le sera et ainsi de suite, mais... Si la première condition n'est pas vraie, la deuxième ne sera pas exécutée, mais la troisième sera à nouveau vérifiée.

Peut-être que c'est comme ça que ça devrait être, après tout :

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Ce n'est qu'une supposition, car je n'ai absolument aucune idée de la logique que vous avez en tête et je ne sais pas ce que certaines variables et fonctions font et contiennent/renvoient.

 
artmedia70:

1) Il m'a montré pour une raison quelconque mes propres mots écrits à quelqu'un.

2) C'est ce que je voulais que vous disiez à propos de la logique. Vous avez tous les if () de ce bloc de code qui se suivent. Ce qui signifie que si la première condition est vraie, la deuxième condition sera aussi vraie, si la deuxième condition est vraie, la troisième condition sera aussi vraie, etc... mais... Si la première condition n'est pas vraie, la deuxième ne sera pas exécutée, mais la troisième sera à nouveau vérifiée.

1) Eh bien, c'était pour tout le monde, pas seulement pour vous.

2) vous avez déjà fait cette déclaration une fois, il y a quelques jours, seulement pour ma part j'ai oublié de revérifier cette information alors.

Maintenant j'ai fait un script simple :

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Et il s'est avéré que vous aviez tort : PAS D'ALERTE ! !!

 
ALXIMIKS:

1) Eh bien, c'était pour tout le monde, pas seulement pour vous.

2) Vous avez déjà fait cette déclaration une fois, il y a quelques jours, mais j'ai oublié de vérifier l'information à ce moment-là.

Maintenant j'ai fait un script simple :

Et il s'est avéré que vous aviez tort : PAS D'ALERTE ! !!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Je suis d'accord. Dans ce cas, j'ai été un peu hâtif lorsque j'ai écrit plus tôt ce que et comment les conditions imbriquées seraient appliquées sans accolades. Vous avez raison dans cette situation. Vous savez pourquoi ?

Essayez de faire exécuter else dans votre code.

 
artmedia70:

Je suis d'accord. Dans ce cas, j'ai été un peu hâtif lorsque j'ai écrit plus tôt ce que et comment les conditions imbriquées seraient appliquées sans accolades. Vous avez raison dans cette situation. Vous savez pourquoi ?

Essayez de faire exécuter else dans votre code.


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

Pas d'alerte de ce script. Else se réfère à la condition " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAA") ; a=5;} "

Remerciements :

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

avoir une Alerte : "a=0".

Résultat - le traitement des échecs de condition n'est possible que pour la dernière condition lorsque les accolades "{" ne sont pas utilisées pendant l'énumération d'une certaine série de conditions.

 
ALXIMIKS:

pas d'alerte de ce script. Else se réfère à la condition " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAA") ; a=5;} "

Remerciements :

avoir une Alerte : "a=0".

Le résultat est que le traitement des non-conditions n'est possible que pour la dernière condition, lorsque les accolades "{" ne sont pas utilisées pendant l'énumération d'une certaine série de conditions.


C'est-à-dire que les parenthèses sont nécessaires pour organiser les branches logiques. Sans eux, la première condition est primordiale. Si elle n'est pas vraie, les autres conditions ne seront pas exécutées.

Essayez de vous en sortir :

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

Et après ça, trouvez à quoi d'autre il fait référence :

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");