[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 54

 
vovan-gogan:

N'est-ce pas la même chose dans mon exemple ? En quoi est-ce différent ? Sauf que je n'ai pas ajouté de fonction de démarrage.


Mieux encore, c'est comme ça.

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan:

Mais je ne vois pas la différence pour essayer. S'il vous plaît, dites-moi ce que j'ai fait de mal.

Vous essayez et écrivez le résultat. L'ordre peut ne pas être fixé en fonction de votre situation, faute de vérifications nécessaires lors de sa fixation. En outre, cela ne ferait pas de mal d'ajouter un gestionnaire d'erreurs lorsqu'il n'est pas installé pour une raison ou une autre, le glissement fait > 0 - c'est la première chose qui apparaît immédiatement.
 
Faites-vous référence au slippage sur un ordre en attente?
 
vovan-gogan:
Voulez-vous dire le slippage sur un ordre en attente ?


Ne vous en prenez pas au texte - il suffit de le fixer et c'est tout... Vérifiez-le.

Au moins dans le testeur, tout devrait fonctionner - si vous ne passez pas un ordre en raison d'une courte distance, il sera passé la prochaine fois - votre question portait sur autre chose - ensuite vous terminerez tout le reste - vérifiez comme c'est dans le testeur.

 
Roman.:


Ne vous en prenez pas au texte - définissez-le et c'est tout... Vérifiez-le.

Au moins dans le testeur, tout devrait fonctionner - si vous ne passez pas un ordre à cause d'une petite distance, il sera passé la prochaine fois - votre question portait sur autre chose - ensuite vous terminerez tout le reste - vérifiez tel quel, dans le testeur.


Je vous remercie de vouloir m'aider, mais dans cette situation particulière, j'aimerais que vous m'aidiez d'abord à comprendre mon erreur. Si j'utilise constamment des solutions développées par d'autres et que je ne réalise pas mes erreurs, j'ai peu de chances de progresser en tant que programmeur. J'espère que vous êtes d'accord avec cela
 
vovan-gogan:

N'est-ce pas la même chose dans mon exemple ? En quoi est-ce différent ? Sauf que je n'ai pas ajouté la fonction de démarrage.


Relisez le concept de variables locales et globales. En outre, en raison de cette construction

 if (OrdersTotal()>= 1) return(0);  

si une position est ouverte manuellement ou par un autre EA sur le même compte de trading, l'EA n'établira pas d'ordre en attente lorsque la condition de transaction déclenche l'établissement d'un ordre en attente, cela fonctionnera très bien pour un testeur de stratégie.

Dans le cas général, vous devez organiser une boucle par les ordres ouverts ou fixés par ce même Expert Advisor, selon la logique de votre algorithme, en l'absence d'ordres en attente, le fixer et augmenter le compteur d'ordres et imprimer l'information.

 
vovan-gogan:

Je vous remercie de votre volonté d'aider, mais dans cette situation particulière, je voudrais que vous m'aidiez tout d'abord à comprendre mon erreur. Si j'utilise constamment des solutions écrites par d'autres et que je ne réalise pas mes erreurs, je ne pourrai guère évoluer en tant que programmeur. J'espère que vous êtes d'accord avec cela


D'accord. Relisez le concept de variables locales et globales dans le terminal client.



int start()                            // Спец. функция start
  {
    int Orders=0;    
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
         
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
vovan-gogan:

Je vous remercie de votre volonté d'aider, mais dans cette situation particulière, j'aimerais que vous m'aidiez d'abord à comprendre mon erreur.


Posez déjà la question... :-Р

Essayez la variante de mon post précédent.

Lisez le tutoriel et la documentation ici - je n'ai pas encore vu de viande hachée plus détaillée nulle part.

 
Merci pour l'astuce concernant les variables globales et locales) Je vais lire davantage)
 
Alexandr24:
Dites-moi pourquoi lorsque j'ouvre un graphique (en temps réel) avec Cadre temporel M30 et appliquer l'indicateur avec le paramètre int shift=iBarShift(NULL,PERIOD_M5,some_time) ; le décalage sera comme il devrait être, mais quand j'exécute le même indicateur par le testeur avec la période M30 le décalage n'est pas calculé ?

Qui sait comment résoudre ce problème ?
Raison: