Questions des débutants MQL5 MT5 MetaTrader 5 - page 360

 

Bon après-midi.

Pouvez-vous s'il vous plaît me conseiller comment écrire le code correctement lors de la négociation de l'EA dans MT4, je suis très nouveau à la programmation.

Je dois sélectionner le dernier ordre clôturé et comparer son profit. Je ne dois rien faire si son profit est supérieur à 0, s'il est inférieur à 0, je dois faire quelque chose.

double GetSizeLot(double lastlot=0) //Функция возвращает значение лотов 
  {
   double Lot2,MinLots,MaxLots;
   int j=OrdersHistoryTotal();
   
   MinLots=Lots;
   MaxLots=MaxLot;
   if(!DynamicLot)Lot2=Lots;
   if(lastlot<Lot2)lastlot=Lot2;
   
   if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
     {
     if(OrderProfit()<0) lastlot=lastlot*Martin;
     if(OrderProfit()>0) lastlot=Lot2;
     }
   Lot2=lastlot;
   if(Lot2 < MinLots) Lot2 = MinLots;
   if(Lot2 > MaxLots) Lot2 = MaxLots;
   return(NormalizeDouble(Lot2,2));
  }

J'ai beaucoup de respect, Alexander.

 
Menshikov:

Bon après-midi.

Pouvez-vous s'il vous plaît me conseiller comment écrire le code correctement lors de la négociation de l'EA dans MT4, je suis très nouveau à la programmation.

Je dois sélectionner le dernier ordre clôturé et comparer son profit. Je ne dois rien faire si son profit est supérieur à 0, s'il est inférieur à 0, je dois faire quelque chose.

J'ai beaucoup de respect, Alexander.

//+------------------------------------------------------------------+

datetime time=0; double profit=0,lots=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      if(OrderSymbol()==_Symbol)
         if(OrderMagicNumber()==MagicNumber || MagicNumber==-1)
            if(OrderCloseTime()>time) // находим последний в истории ордер
              {
               time=OrderCloseTime(); // запомним время
               profit=OrderProfit();  // запомним профит
               his_lt=OrderLots();    // запомним лот
              }

if(profit<0) //если профит меньше нуля
   lots=his_lt*2; // Увеличим в два раза

//+------------------------------------------------------------------+
 
Vladimir Pastushak:
Merci beaucoup.
 
Vladimir Pastushak:
Je me demande à quoi sert l'heure, pourquoi se souvenir de l'heure de fermeture, si on choisit de toute façon le dernier de la liste, et qu'en est-il du cycle ? Et pourquoi n'envisagez-vous pas l'échange et la commission ? Même si OrderProfit()>0, le bénéfice réel peut être négatif. Si vous travaillez directement avec la liste des commandes, vous ne devriez pas laisser des morceaux du code de la boucle chercher la dernière commande à fermer. Une chose est soit la fiabilité et la certitude, soit la rapidité. Et vous avez un méli-mélo.
 
Artyom Trishkin:
Je me demande à quoi sert l'heure, pourquoi se souvenir de l'heure de fermeture, si on choisit de toute façon le dernier de la liste, et qu'en est-il du cycle ? Et pourquoi n'envisagez-vous pas l'échange et la commission ? Même si OrderProfit()>0, le bénéfice réel peut être négatif. Si vous travaillez directement avec la liste des commandes, vous ne devriez pas laisser des morceaux de code de la boucle recherchant la dernière au moment de la fermeture. Une chose est soit la fiabilité et la certitude, soit la rapidité. Ce que vous avez, c'est un fouillis.

Ce que vous suggérez, c'est que

   if(OrderSelect(OrdersHistoryTotal(),SELECT_BY_POS,MODE_HISTORY))

Vous faites ça ?

La personne a seulement demandé un ordre de profit, pourquoi imposer ce que vous n'avez pas demandé ? Mais je suis d'accord avec vous ....

 

Veuillez indiquer comment fermer un ordre ouvert dans MQL4 sur MT4 après 20 barres, c'est-à-dire que lorsqu'un ordre est ouvert et que 20 nouvelles barres apparaissent, il est fermé. (une seule commande est toujours ouverte). Pour une raison quelconque, ce code ne fonctionne pas dans le testeur de stratégie, et nous avons besoin qu'il le fasse.


Le code a la signification suivante : nous vérifions si nous avons des ordres ouverts, si non, nous ouvrons un ordre et enregistrons dans la variable "z" le prix ouvert de la 1ère barre et ensuite à chaque tick nous vérifions le prix ouvert de la 20ème barre et quand la 1ère barre atteint finalement la 20ème barre, son prix sera le même que le prix enregistré dans la variable "z" et alors l'ordre sera fermé. (bien sûr pendant le processus, les prix peuvent coïncider, mais ce sera très rare, en outre, nous pouvons écrire plus de paramètres de la 1ère barre dans les variables)


double z; //объявление переменной

           //ОТКРЫТИЕ ОРДЕРА
           if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер
              {
               OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid+150*Point, Bid-10*Point);
                   z = Open[1]; // здесь переменной "z" присваивается цена открытия 1-го бара
              }
            else

           Print("ORDER NE USTANOVLEN!!!");




           //ЗАКРЫТИЕ ОРДЕРА

    if (z==Open[20])  //если цена записанная в переменную "z" равна цене 20-го бара, то закрывать ордер
        {
           

            //-----------------код закрывает все ордера--------------------
   bool   result;
   int    error;

 while (OrdersTotal()>0)
 {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {   if(OrderType()==OP_BUY)  result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
           OrderDelete(OrderTicket());
         
           if(result!=TRUE) { error=GetLastError();
              Print("LastError = ",error, " ",Symbol()); }
           else error=0; }
   else Print( "Error when order select ", GetLastError());

  }
//------------конец кода закрывающего ордер------------------
           
           
        }
      else
      Print("ORDER NE ZAKRYT!!!");
 
BEGEMOT32:

Veuillez indiquer comment fermer un ordre ouvert dans MQL4 sur MT4 après 20 barres, c'est-à-dire que lorsqu'un ordre est ouvert et que 20 nouvelles barres apparaissent, il est fermé. (une seule commande est toujours ouverte). Pour une raison quelconque, ce code ne fonctionne pas dans le testeur de stratégie, et nous avons besoin qu'il le fasse.


Le code a la signification suivante : nous vérifions si nous avons des ordres ouverts, si non, nous ouvrons un ordre et enregistrons dans la variable "z" le prix ouvert de la 1ère barre et ensuite à chaque tick nous vérifions le prix ouvert de la 20ème barre et quand la 1ère barre atteint finalement la 20ème barre, son prix sera le même que le prix enregistré dans la variable "z" et alors l'ordre sera fermé. (bien sûr pendant le processus, les prix peuvent coïncider, mais ce sera très rare, en outre, nous pouvons écrire plus de paramètres de la 1ère barre dans les variables)


C'est ça, j'ai trouvé moi-même, j'aurais dû déclarer la variable en dehors de int start() - maintenant ça marche bien.
 
BEGEMOT32:
C'est tout, j'ai trouvé moi-même, j'aurais dû déclarer une variable en dehors de int start() - maintenant ça marche bien.

J'ai simplifié un peu votre code, mais il y a encore des erreurs dans votre code

//ОТКРЫТИЕ ОРДЕРА
if(OrdersTotal()==0) // если нет открытых ордеров то открывать ордер
   if(OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+150*Point,Bid-10*Point)<0)
      Print("ORDER NE USTANOVLEN!!!");

//-----------------код закрывает все ордера--------------------
   bool   result;
   int    error;
   while(OrdersTotal()>0)
     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==20)
           {
            if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
            if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
            if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
               OrderDelete(OrderTicket());
           }
         if(result!=TRUE)
           {
            error=GetLastError();
            Print("LastError = ",error," ",Symbol());
           }
         else error=0;
        }
      else Print("Error when order select ",GetLastError());

     }
 

Je suis en train d'écrire un EA multi-devises mais je n'arrive pas à comprendre pourquoi il renvoie des prix différents au même moment si je le lie à différentes devises.

En bref, le code :

à Init

EventSetTimer(60);

dans OnTimer()

MqlTick last_tick;
if(SymbolInfoTick("EURNZD",last_tick))
{
    Print("Last Ask: ", last_tick.ask);
}

Si je teste mon EA sur l'EURNZD, par exemple

2015.05.18 00:07:00 Lat Ask : 1.5370

Si j'utilise une autre paire de devises

2015.05.18 00:07:00 Lat Ask : 1.5323

Cette valeur est totalement différente, et dans le second cas, d'après le graphique, il ne peut y avoir une telle valeur pendant au moins plusieurs heures.

Dans le testeur de stratégie, tous les ticks sont en mode commercial, j'ai l'impression que si ce n'est pas la paire principale, les valeurs dans le testeur de stratégie sont approximatives.

J'ai oublié d'ajouter que ceci est Meta Trade 5

J'ai découvert que la première fois que je le fais, le prix est faux et que la deuxième fois, le prix est normal.

 
Pouvez-vous trouver dans l'histoire combien de ticks ont été en hausse et en baisse dans le volume des ticks?

Cela fait quelques mois que j'ai supprimé autochartis, mais les messages du journal continuent de s'afficher. Le logiciel continue d'essayer d'ouvrir les fichiers.

Comment effacer complètement Autochartis ?

2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Volatility.ex4' [2]
2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Key Levels.ex4' [2]
2015.05.25 15:36:42.982 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Chart Patterns.ex4' [2]

Raison: