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

 

Est-il possible de passer des paramètres d'entrée dynamiques à l'indicateur via iCustom ? Lorsque j'essaie de le faire, une nouvelle fenêtre d'indicateur s'ouvre, pour chaque nouveau paramètre d'entrée dynamique.

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
Et cette question, y a-t-il un moyen de savoir si, par exemple, il reste 1 barre ou 3 minutes sur le graphique de test ?
 
Artyom Trishkin:

Dans ce fil de discussion, je veux commencer à aider ceux qui veulent vraiment comprendre et apprendre la programmation dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce sera un bon endroit pour discuter des tâches, des algorithmes pour les résoudre, et de toute autre question, de toute façon, liée à la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous et que le fil de discussion sera intéressant pour tous.


Artyom Trishkin:

Dans cette branche, je voudrais commencer à aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce sera un bon endroit pour discuter des problèmes, des algorithmes et de toute autre question concernant la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous pour résoudre les problèmes et que le fil de discussion sera intéressant pour tous.


Artyom Trishkin:

Dans cette branche, je voudrais commencer à aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce sera un bon endroit pour discuter des problèmes, des algorithmes et de toute autre question concernant la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous et que ce sujet sera intéressant pour tous.


Artyom Trishkin:

Dans cette branche, je voudrais commencer à aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce sera un bon endroit pour discuter des problèmes, des algorithmes et de toute autre question concernant la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous et que ce sujet sera intéressant pour tous.


Artyom Trishkin:

Dans cette branche, je voudrais commencer à aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce sera un bon endroit pour discuter des tâches, des algorithmes de leur solution et de toute autre question, d'une manière ou d'une autre, liée à la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous et que ce sujet sera intéressant pour tous.


Artyom

Artyom Trishkin:

Je veux commencer ce chapitre pour aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Il s'agit d'un endroit pour discuter des tâches, des algorithmes pour les résoudre et de toute autre question liée d'une manière ou d'une autre à la programmation MT.

J'espère que d'autres membres expérimentés de notre forum se joindront à nous pour résoudre les problèmes et que le fil de discussion sera intéressant pour tous.


Aidez-moi, j'ai ajouté la fonction trailing stop à mon Expert Advisor, je l'ai testé et il me donne deux erreurs. - Je ne sais pas comment les réparer. Cependant, les transactions sont fermées selon l'ancienne stratégie après que le prix ait touché la limite supérieure du canal et la limite inférieure, respectivement. Je suppose que quelque chose doit être changé ici aussi. - Rappelez les gars de l'armée du dnr.

#property copyright "Copyright 2017, MetaQuotes Software Corp.

#lien de propriété "https://www.mql5.com"

#propriété version "1.00"

#propriété stricte


//---------------------------------------------------------

extern double Lots = 0.01 ;

extern int TakeProfit = 600 ;

extern int StopLoss = 25 ;

extern int Magic = 0001 ;

extern int Slippage = 3 ;

extern int TralType = 0 ; // 0-SAR, 1-ATR, 2-HMA.

extern double SAR_Step = 0.02 ;

extern double SAR_Max = 0.2 ;

extern int ATR_Period = 14 ;

extern double ATR_K = 2.0 ;

extern inttern HMA_Period = 16 ;

extern intern HMA_Method = 3 ;

extern inttern HMA_Shift = 0 ;

datetime LBT ;

//---------------------------------------------------------

extern string TMA = "Paramètres de l'indicateur TMA" ;

extern string TimeFrame = "cadre temporel actuel" ;

extern int HalfLength = 56 ;

extern int Price = "PRICE_CLOSE ;

extern double ATRMultiplier = 2.0 ;

extern inttern ATRPeriod = 100 ;

extern bool Interpolate = true ;

//---------------------------------------------------------

double PriceHigh, PriceLow, SL, TP ;

int ticket ;


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

//| Fonction d'initialisation de l'expert |

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

int OnInit()

{

si (Chiffres == 3 || Chiffres == 5)

{

TakeProfit *= 10 ;

StopLoss *= 10 ;

Dérapage *= 10 ;

}

return(INIT_SUCCEEDED) ;

}

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

//| Fonction de désinitialisation experte |

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

void OnDeinit(const int reason)

{


}

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

//| fonction tick expert |

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

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0) ;

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0) ;

si(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red) ;

si (ticket > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits) ;

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits) ;

if (OrderSelect(ticket, SELECT_BY_TICKET))

si (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Erreur de modification de commande !")

}

}

si (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue) ;

si (ticket > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits) ;

SL = NormalizeDouble(Ask - StopLoss*Point, Digits) ;

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Erreur lors de la modification de l'ordre d'achat !")

} else Print("Erreur lors de l'ouverture de l'ordre d'achat") ;

}

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

//| Fonction d'initialisation de l'expert |

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

int init()

{

//--------


//--------

retour (0) ;

}

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

//| fonction tick expert |

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

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0) ;

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0) ;

si(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red) ;

si (ticket > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits) ;

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits) ;

if (OrderSelect(ticket, SELECT_BY_TICKET))

si (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Erreur de modification de l'ordre de vente !")

} else Print("Erreur d'ouverture de l'ordre de vente !")

}

si (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue) ;

si (ticket > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits) ;

SL = NormalizeDouble(Ask - StopLoss*Point, Digits) ;

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Erreur lors de la modification de l'ordre d'achat !")

} else Print("Erreur lors de l'ouverture de l'ordre d'achat") ;

}

si (Ask <= PriceLow && CountSell() > 0)

{

for (int i = OrdersTotal() -1 ; i>0 ; i--)

{

si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Print("Erreur de fermeture de l'ordre de vente !")

}

}

}

si (Bid >= PriceHigh && CountBuy() > 0)

{

for (int i = OrdersTotal() -1 ; i>0 ; i--)

{

si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Print("Erreur d'achat de OrderClose !")

}

}

}

}

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

int CountSell()

{

int count = 0 ;

for (int trade = OrdersTotal()-1 ; trade>=0 ; trade--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

compte++ ;

}

}

return(count) ;

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0 ;

for (int trade = OrdersTotal()-1 ; trade>=0 ; trade--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

compte++ ;

}

}

return(count) ;

}

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

//| Fonction de désinitialisation experte |

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

int deinit()

{

//+-------


//+-------

retour (0)

}

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

//| fonction de démarrage de l'expert |

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

int Start()

{

//-----

bool error = fals ;

if (LBT!=Time[0]) {

si (OrdersTotal()!=0) {

for (int i=0 ; i<OrdersTotal() ; i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

double SL = OrderStopLoss() ;

si OrderType()==0) {

switch (TralType) {

cas 0 : SL = iSAR(NULL,0,SAR_Step,SAR_Max,0) ;

pause ;

cas 1 : SL = High[1] - iATR(NULL,0,ATR,Period,1)*ATR_K ;

pause ;

cas 2 : SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0) ;

pause ;

}

si (SL<OrderStopLoss())

SL = OrderStopLoss() ;

}

if (OrderType()==1) {

switch (TralType) {

cas 0 : SL = iSAR(NULL,0,SAR_Step,SAR_Max,0) ;

pause ;

cas 1 : SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K ;

pause ;

cas 2 : SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0) ;

pause ;

}

si (SL>OrderStopLoss())

SL = OrderStopLoss() ;

}

si (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

erreur = vrai ;

}

}

}

}

si (!error)

LBT = Time[0] ;

}

retour (0) ;

}

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

 
vkravtzov:

Apprenez à insérer du code! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!


Apprenez à insérer du code ! !!

 
vkravtzov: Aidez-moi à comprendre, j'ai ajouté la fonction trailing stop à Expert Advisor, je l'ai testé et il me donne deux erreurs. - Je me suis cassé le cerveau, je n'arrive pas à trouver comment le réparer. Cependant, les transactions sont fermées selon l'ancienne stratégie après que le prix ait touché la limite supérieure du canal et la limite inférieure, respectivement. Je suppose que quelque chose doit être changé ici aussi. - Rappelez les gars de l'armée du dnr.

J'ai décidé d'aider. Mais j'ai des questions pour l'auteur - vous avez ces deux fonctions d'initialisation - à quoi servent-elles ?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

Il existe deuxfonctions OnTick().... et une troisième fonction int Start() - toutes sont exécutées à l'arrivée du tick. Et dans quel ordre le terminal les fera-t-il démarrer ?

Erreur : il manque une accolade fermante à la fin de la fonction OnTick().

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
     if (ticket > 0)
     {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на продажу!");
     }
  }
  if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
     if (ticket > 0)
     {
        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Maintenant le compilateur a détecté 8 erreurs. J'ai supprimé .

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Il y a maintenant 7 erreurs.

J'ai remplacé if(OrderType()==0) par une parenthèse après if : if(OrderType()==0) - 8 erreurs se sont produites

iATR(NULL,0,ATR,Period,1) - nous avons besoin de iATR(NULL,0,ATR_Period,1) - 2 erreurs se sont produites

bool error = fals ; nous avons besoin de bool error = false ; - les erreurs sont devenues 3

Où peut-on obtenir l'indicateur VininI_HMAsound&amp ? Quels sont les paramètres ? = l'erreur serait toujours de 1

Et pourquoi poser une question à trois endroits ?

 

Aide au téléchargement et à l'installation d'EAs et de signaux gratuits sur mt4 pas comme neemogu trouver le téléchargement vide seulement comment installer, mais pas de téléchargement. Dites-moi où chercher

 
vovik36 Степанов:

Aide au téléchargement et à l'installation d'EAs et de signaux gratuits sur mt4 pas comme neemogu trouver le téléchargement vide seulement comment installer, mais pas de téléchargement. Veuillez m'indiquer où chercher.

D'abord être diplômé, puis venir.

 
Artyom Trishkin:

Que dites-vous de ça ?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Salut. Pouvez-vous me dire pourquoi il ne voit pasima=iMA(Symbol(),1,60,0,1,0,k). Le commentaire indique une cote beaucoup plus élevée que la ligne elle-même. C'est la raison pour laquelle les valeurs minimales et maximales ne sont pas calculées correctement.

 
Rustam Bikbulatov:

Salut. Pouvez-vous me dire pourquoi il ne voit pasima=iMA(NULL,60,24,0,1,0,k). Le commentaire indique une cote beaucoup plus élevée que la ligne elle-même. C'est la raison pour laquelle les valeurs minimales et maximales ne sont pas calculées correctement.

iMA numérote comme dans les séries chronologiques, 0 est le numéro le plus pertinent. C'est peut-être l'inverse dans votre cas
 
Maxim Kuznetsov:
iMA numérote comme dans les séries chronologiques, 0 est le numéro le plus pertinent. Et vous l'avez probablement dans l'autre sens.

C'est un pari involontaire. Ça ne change rien. Le fait est qu'il s'affiche incorrectement avec k !

Raison: