Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1594

 
законопослушный гражданин:

merci

Mais dans cette fonction : double GetProfitFromStart()

yellow est juste le nom de la fonction, n'est-ce pas ?

et en principe, ça peut être n'importe quoi ?

Oui, je l'ai appelé comme ça pour que ce soit clair Get Profit FromStart
 
MakarFX:
Oui, je l'ai appelé comme ça pour que ce soit clair Get Profit FromStart

Merci.

Dans la fonction tick d'Expert

void OnTick() - il s'avère que la ligne de code : if(CountOrders()==0&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE)) n'est pas seulement le déclencheur du premier ordre lors du démarrage initial de l'EA

mais aussi chaque exécution après la clôture de l'ordre selon une condition :

if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      if (IsTesting())
        {
         CloseOrder(); ObjectSetInteger(0,"lab_Button",OBJPROP_STATE,false);
        }
      else
        {
         CloseOrder();
}
}

Est-ce que je comprends bien ?

 
MakarFX:

le montant de la perte sur tous les ordres perdants

J'ai encore dû mal comprendre.

ou le montant de la perte sur chaque ordre perdant

ou la perte cumulée de tous les ordres perdants...


Si vous n'avez besoin que d'une seule impression, il est préférable de le faire sous forme de script.

Vous n'êtes pas obligé, vous pouvez le faire comme ça.

Votre code m'a aidé, maintenant les mêmes messages ne sont pas affichés 100 fois mais seulement 4-10 fois. Il faudrait peut-être ajouter l'opérateur else.
 
Petronet:
Votre code m'a aidé, maintenant les mêmes messages ne sont pas affichés 100 fois mais seulement 4-10 fois. Il faut peut-être ajouter l'opérateur else.
Comment et où le code est-il écrit ?
 
законопослушный гражданин:

Merci.

Dans la fonction tick d'Expert

void OnTick() - il s'avère que la ligne de code : if(CountOrders()==0&ObjectGetInteger (0, "lab_Button",OBJPROP_STATE)) n'est pas seulement le déclencheur du premier ordre lors du démarrage initial de l'EA

mais aussi chaque exécution après la clôture de l'ordre selon une condition :

Est-ce que je comprends bien ?

Ce sont les conditions pour exécuter l'EA, si( si) (CountOrders()==0( pas d'ordre )&&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE))( et que le bouton est pressé), alors nous pouvons trader

 
MakarFX:
Comment et où le code est-il écrit ?
Le code est inséré dans le corps de la fonction int start() de l'EA. J'ai ajouté l'opérateur else, qui fait sauter une variable vide, la duplication des données s'est arrêtée, mais lorsque deux bénéfices négatifs consécutifs, la duplication des données se produit sur 10 et 2-3 fois. J'ai commenté ma boucle originale, qui donnait la même information 100 fois. Celui qui travaille.
int start()
  {
  
  //for (int trade = OrdersHistoryTotal() - 1; trade >= 0; trade--) 
  //{
     //if ( OrderSelect(trade, SELECT_BY_POS,MODE_HISTORY)) 
     //{
         //old_order_type = OrderType();
         //if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         //{
                //Print("Закрылись с минусом:", OrderProfit());
                //break; //прекращаем поиск
         //}
         
     //}
     //break;
  //}
  
  for(int pos=0; pos<OrdersHistoryTotal(); pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderCloseTime()>=TimeStart)
              {
               if(OrderProfit()<0) {cnt=OrderProfit();
               Print("ордера с минусом", cnt); TimeStart=TimeCurrent(); cnt=0;}
               else gg=gg+1;
              }
           }
        }
     }
 
Petronet:
Le code est inséré dans le corps de la fonction int start() de l'EA. J'ai ajouté l'opérateur else, qui bousille une variable vide, la duplication des données a cessé, mais lors de deux pertes de bénéfices consécutives, la duplication des données se produit 10 et 2-3 fois. J'ai commenté ma boucle originale, qui donnait la même information 100 fois. Celui qui travaille.
// это в глобальные переменные
datetime TimeStart; 

// это в init()

TimeStart=Time[0];

S'imprime une fois lorsqu'une transaction non rentable apparaît.

 
Bonjour à tous, J'ai inséré une fonction pour fermer les positions le vendredi à 20h30.

Mais le conseiller ne voit pas que c'est vendredi et ferme des positions tous les jours.

cela ressemble à ceci

input bool     UseTimeLimitClose           = true;     // -- Funktion ein/ausschalten --
enum daysOfWeek 
   { 
     Monday = 1, 
     Tuesday = 2, 
     Wednesday = 3, 
     Thursday = 4, 
     Friday = 5
   };
input  daysOfWeek closday          =    5;            // -- Handel bis Tag --
input int    Close_Hour            =   20;            // -- Handel bis Uhrzeit Std.--
input int    Close_min             =   30;



void OnTick() 

 if(UseTimeLimitClose)
     {
      MqlDateTime TimeNow;
      TimeToStruct(TimeCurrent(),TimeNow);
      if  ( TimeNow.day_of_week >= closday  && TimeNow.hour >= Close_Hour && TimeNow.min >= Close_min  ) 
       {
          CloseAllPositions();
       }     

 
Eugen8519:
Bonjour à tous, J'ai inséré une fonction pour fermer les positions le vendredi à 20h30.

Mais le conseiller ne voit pas que c'est vendredi et ferme des positions tous les jours.

se tient comme ceci

void OnTick() 

 if(UseTimeLimitClose)
     {
      if  (TimeDayOfWeek(TimeCurrent())==closday  && TimeHour(TimeCurrent())>= Close_Hour && TimeMinute(TimeCurrent()) >= Close_min  ) 
       {
          CloseAllPositions();
       }     
 

S'il vous plaît, dites-moi comment sortir ceci vers une variable externe.

double levelss[7] = {0,0.236,0.382,0.5,0.618,1,1.618}; // Уровни Fibo