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

 
Galim_V:

La tâche consiste à trouver la barre avec la fermeture minimale

for(int x=0 ; x<=xBars -1 ; x++)

{

contre++ ;

// Print(Close[x],",",counter) ;

int h = ArrayMinimum(Close[x]) ;

if(counter > 20) break ;

}

Le compilateur jure sur Close

Ecrire les prix de clôture dans un tableau séparé et ensuite en dehors de l'ArrauMinimum chick
 
Alekseu Fedotov:
Ecrire les prix de clôture dans un tableau séparé et ensuite en dehors de l'ArrauMinimum chick
Merci !
 
Galim_V:

La tâche consiste à trouver la barre avec la fermeture minimale.

il y a des fonctions iHighest et iLowest (maintenant aussi dans MT5)

 
Taras Slobodyanik:

il y a des fonctions iHighest et iLowest (maintenant aussi dans MT5)

Merci !
 
Galim_V:

La tâche consiste à trouver la barre avec la fermeture minimale

for(int x=0 ; x<=xBars -1 ; x++)

{

contre++ ;

// Print(Close[x],",",counter) ;

int h = ArrayMinimum(Close[x]) ;

if(counter > 20) break ;

}

Le compilateur jure sur Close

La tâche de recherche du prix minimum/maximum dans MQL4 est résolue par une seule ligne :

double fMinClose = iClose(NULL, 0, iLowest(NULL, 0, MODE_CLOSE, <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik:

vous pouvez, mais ce ne sera pas exactement une minuterie.

Merci.

Comment calculer le volume du lot par incréments ? Si le dépôt =1000, lot = 0,1, le dépôt est devenu 2000, lot = 0,2. C'est-à-dire que si le dépôt est de 1500 ou 1700, le lot n'est pas incrémenté.

 
PolarSeaman:

Merci.

Comment calculer le volume du lot par incréments ? Si le dépôt =1000, lot = 0,1, le dépôt est devenu 2000, lot = 0,2. C'est-à-dire que si le dépôt est de 1500 ou 1700, le lot n'augmente pas.

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

D'une certaine façon...

 
Konstantin Nikitin:

Comme ça...

Non, non, avec un dépôt de 1100, le lot sera de 0,11, et j'ai besoin que le lot n'augmente pas jusqu'à 2000. Comment puis-je définir le pas =1000 dans les paramètres ?

 
Bonjour, pourriez-vous me dire s'il est possible d'ajouter les coordonnées de l'indexeur à la souris si vous le pouvez, veuillez m'envoyer un courriel à ereminmikola@yandex.ru.
 

Bonjour les programmeurs. Pourriez-vous me donner un conseil sur la façon d'aborder correctement la condition suivante :

1. Le Conseiller Expert ouvre 2 ordres de marché (achat et vente) avec le même lot spécifié dans les paramètres. - L'ordre est exécuté sans aucun problème

La suivante présente un problème, le prix peut se déplacer à la fois vers la direction VENDRE et vers la direction ACHETER. Comment pouvons-nous arranger le code de sorte que lorsque n points ont été passés, l'Expert Advisor analyse la rentabilité de ces deux transactions en LIVE et ferme l'ordre qui a un solde négatif après n points ? Si vous avez d'autres idées sur la manière de procéder, veuillez m'en faire part.

Je vous donne le code - brouillon, seul le premier point est exécuté, et 2 trades sont ouverts avec TP et SL

2. Lorsque le prix atteint le nombre de pips spécifié, je ferme l'ordre avec un solde négatif et j'ouvre deux autres ordres (achat et vente) avec le même lot,

Les stops sont fixés au prix d'ouverture du premier ordre, c'est-à-dire que si la tendance s'inverse, les 3 ordres doivent se fermer simultanément.


extern int    _ms = 1000;  
extern double _lots = 0.01;
extern double _TP = 80;
extern double _SL = 35;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 
   pt = Point;
   if (Digits==3||Digits==5) {pt*=10;} else pt = Point;
   _mn = MagicNumberGenerator(_ms);
   Print("The magic number is ",_mn);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (IsNewCandle())
    {
      if (TotalOpenOrders(_mn)==0)
      {
        EnterTrade(OP_BUY);
        EnterTrade(OP_SELL);
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade(int type)
{
   double price = 0; double sl = 0; double tp = 0; double lot = _lots;
   
   if      (type == OP_BUY)  price = Ask;
   else if (type == OP_SELL) price = Bid;
   
   int err = 0;
   int ticket = OrderSend(_Symbol, type, lot, price, 30, 0, 0, NULL, _mn, 0, clrGreen);
   if (ticket == -1)
   {
     err = GetLastError();
     Print("Could not place the order due to error ",err," ",ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED) Alert("You need to enable you autotrade button");
   }
   else 
   {
     if(!OrderSelect(ticket,SELECT_BY_TICKET))
     {
       err = GetLastError();
       Print("Could not select the order due to error ",err," ",ErrorDescription(err));
     }
     else 
     {
       if (OrderType()==OP_SELL)
       {
         sl = OrderOpenPrice()+(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()-(_TP*pt);
       }  
       else if (OrderType()==OP_BUY)
       {
         sl = OrderOpenPrice()-(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()+(_TP*pt);
       }
       if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0, clrNONE))
       err = GetLastError();
       Print("Could not modify the order due to error ",err," ",ErrorDescription(err));
     }
   }
}