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

 

Je suis en train de devenir une mère devant mes yeux ! (c'est-à-dire devenir une matriarche !) :))

Voilà l'autre chose.

Si je modifiais une commande, la fenêtre de notification apparaissait ensuite pour m'informer que la commande avait été modifiée avec succès. Si je clique sur OK dans cette fenêtre, c'est dommage. De plus, si je désactive l'EA après l'apparition de cette fenêtre, alors après avoir appuyé sur OK dans la fenêtre de message, l'EA va TOUJOURS RÉPARER ses actions (fermeture d'une position, dans ce cas). Chose intéressante - l'EA a disparu, mais ses commandes sont toujours exécutées !

J'ai dû réfléchir un peu et retirer la ligne

message=message+"Erreur de modification de commande #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n"

Après cela, tout s'est passé comme il se doit. Pas de fenêtres... tout s'ouvre et se ferme... s'ouvre et se ferme... s'ouvre et se ferme...

:))))))))))))

P.S.

mais si vous supprimez

OrderPrint(); 

continuer;

il n'y a pas de changement ... même chose avec la ligne

if(ret==IDOK) return(0) ;

qu'il soit là ou non - pas de changement !

pourquoi en est-il ainsi ?

 
lottamer:


Pourquoi ?

si la commande n'est pas ouverte - que modifiez-vous ?

lottamer:

Est-il possible de vérifier si My_buy (variable non booléenne) est VRAI ou FAUX ?

alors, QUI EST LE PRAGRAMME BOLÉEN ici ? ! on peut toujours faire un booléen à partir d'un "non-booléen" ! !!

lottamer:

la modification est inconditionnelle - l'ordre est ouvert - vous devez fixer les stops...

c'est à cela que sert la vérification du fait que la commande est OUVERTE.

Vous avez courageusement franchi l'étape suivante dans votre connaissance de la langue - vous vous êtes familiarisé avec le fonctionnement des bibliothèques :

#include <WinUser32.mqh>

Il s'agit de la bibliothèque - la bibliothèque standard de la livraison MetaTrader. Les gens écrivent leurs propres bibliothèques (personnalisées). Un exemple de bibliothèque contenant des fonctions d'ordre de bourse. Ces fonctions sont écrites une fois, puis utilisées dans leurs codes selon les besoins.

 
sergeev:
Alors pourquoi l'avoir mis entre parenthèses { } si (moyennes croisées par exemple) ?


pour qu'il soit là.

Où pensez-vous qu'il puisse être inséré ? seulement immédiatement après l'ouverture d'une commande.

 
lottamer:

Je suis en train de devenir une mère devant mes yeux ! (c'est-à-dire devenir une matriarche !) :))

Pourquoi ?

Je dois juste chercher "Qu'est-ce que MessageBox()?" - via Ctrl+F1 dans MetaEditor.
 
TarasBY:

si l'ordre ne s'ouvrait pas - que modifieriez-vous ?

alors QUI EST LE PRAGRAMME BOOLÉEN ici ? ! on peut toujours faire un booléen à partir d'un "non-booléen" ! !!

c'est à ça que sert la vérification du mandat OPEN.

Vous avez courageusement franchi l'étape suivante dans l'apprentissage de la langue : vous vous êtes familiarisé avec le fonctionnement des bibliothèques :

Il s'agit de la bibliothèque - la bibliothèque standard de la livraison MetaTrader. Les gens écrivent leurs propres bibliothèques (personnalisées). Un exemple de bibliothèque contenant des fonctions d'ordre de bourse. Ces fonctions sont écrites une fois et utilisées ensuite dans vos codes selon les besoins.


Si l'ordre n'a pas été ouvert, il ne peut pas être modifié, car il n'y a rien à modifier. Je n'ai pas encore fini d'écrire toute l'EA, je l'écris par blocs et je la vérifie immédiatement, puis je la termine et la vérifie à nouveau. Mais je ne pense pas que si une transaction ne s'ouvre pas, alors EA sera complètement désactivé, car il ne saura pas quoi faire - il y a un ordre à modifier et il n'y a pas de position ouverte. :)))) s'ouvrira sur les prochains ticks...et ensuite il se modifiera

2)BOH ici vous êtes unique, car moi, un pécheur, ne comprend même pas comment si booléen-innon-booléen.... c'est-à-dire qu'il existe une fonction utilisable et disons qu'elle a été exécutée, c'est-à-dire que la pose s'est ouverte. Donc maintenant la machine comprendra que ma fonction utilisable est maintenant VRAIE, car elle a été exécutée ? ..... désolé de ne pas connaître la question

3) voir 1

4)#include est un sujet sur lequel je suis trop gêné pour poser des questions !

je comprends bien que théoriquement, disons, à partir de mes scripts CLOSE_ALL et MODIFY, vous pouvez faire un#include au lieu d'une fonction personnalisée et y faire référence.

mais comment insérer ce#include My_buy après la condition if ?

 
TarasBY:
Il suffit de chercher "Qu'est-ce que MessageBox() ?". - via Ctrl+F1 dans MetaEditor.

c'est une nuance...et je voudrais terminer le Conseiller Expert maintenant... :))
 

Quelqu'un sait-il ce qu'il en est du retournement ?

Lorsque les ordres sont réouverts avec reconduction, peut-il y avoir des dérapages pour les valeurs de stop et de takeout ? Et comment le stop sera-t-il fixé si, après la reconduction, la différence entre le prix ouvert et le stop est inférieure au niveleur de stop ?

Ma tâche est la suivante. Si j'ai un ordre ouvert sur le marché, je dois vérifier s'il a été ouvert avec un roulement et si c'est le cas, je dois obtenir le ticket de l'ordre précédent, qui a été fermé. Peut-être que quelqu'un pourra me dire quel est l'algorithme de recherche ? Je fais actuellement ce qui suit :

1. Je sélectionne le premier ordre ouvert.
2. Si elle a été ouverte de 23:40 à 00:20, alors je continue à vérifier cet ordre plus avant (la fenêtre de 40 minutes est prise au cas où, bien qu'en théorie vous pourriez prendre de 23:50 à 23:59)
3. Je me souviens du ticket, du stop et du prix de prise
4.Je vérifie tous les ordres fermés sur l'historique, et les commentaires contiennent le mot "swap" et les paires de devises correspondent.

5. Je compare les données sur les arrêts et les reprises, si elles correspondent, ici c'est la paire d'ordre requise, sinon - je retourne à l'étape 1

 

S'il vous plaît, dites-moi ce que cela signifie

while(true)

dans le script de modification que j'ai collé dans l'EA ?

et quelle est cette étrange vérification pour

if(cmd==OP_BUY || cmd==OP_SELL) ?

Ne serait-il pas préférable de vérifier simplement la présence d'un poste ouvert?

int My_modify ()
 {
//      bool   result;
//      double stop_loss,take_profit,point,bid,ask, lotsize;
//      int    cmd, total, error, spread;
//      string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        //message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        if(ret==IDOK) return(0);
//----
   return(0);
  }
 
lottamer:

C'est une nuance ... et maintenant je voudrais finir le conseiller ... :))

Vous voulez "déplacer le chariot" pour "le nez de Kucher". Avec un faible niveau de compétences linguistiques, vous devez commencer à pratiquer avec :

Prenez un conseiller expert prêt à l'emploi, qui est proche de votre stratégie, et modernisez-le en fonction de vos besoins - il sera ainsi plus rapide de comprendre et d'appréhender vos actions (en l'absence évidente du désir de lire "l'abécédaire").

Bonne chance !

P.S. AXIOMA: "Les cochers ne montent pas sur les charrettes ! !!"

 
TarasBY:

Vous voulez "déplacer le chariot" pour "le nez de Kucher". Avec un faible niveau de compétences linguistiques, vous devez commencer à pratiquer avec :

Prenez un conseiller expert prêt à l'emploi, qui est proche de votre stratégie, et mettez-le à niveau pour l'adapter à vos besoins - de cette façon, vous comprendrez et appréhenderez vos actions plus rapidement.

Bonne chance !

P.S. AXIOMA: "Les cochers ne conduisent pas les charrettes ! !!"


Je le fais pratiquement... Je regarde les autres EA, les scripts... et je construis ce dont j'ai besoin :))