Questions des débutants MQL4 MT4 MetaTrader 4 - page 226

 

Alexey, merci pour vos réponses et votre aide.

Nouvelle question, est-il possible de dupliquer les onglets des graphiques dans MT4 ? C'est-à-dire qu'il ne s'agit pas d'un modèle pour définir les paramètres du graphique à chaque fois, mais d'une copie complète de l'onglet avec la devise, l'horizon temporel et les paramètres du graphique sélectionnés. Cela existe-t-il ou non ?

 
Rustam Bikbulatov:

Essayer)

Se battre, chercher, trouver et re-cacher !


ElenkaVladi:

Nouvelle question.

Oui, de rien.

Le plus simple est le motif. Pourquoi ne l'aimez-vous pas ? Vous avez défini le cadre temporel, l'échelle, la couleur de fond, la couleur des chandeliers, vous avez défini les indicateurs requis et vous l'avez enregistré sous le nom de default.tpl. Maintenant, lorsque vous ouvrez un nouveau graphique, tout est prêt pour vous.

 
Aleksei Stepanenko:


La chose la plus simple est le modèle. Pourquoi ne l'aimez-vous pas ? Définissez le cadre temporel, l'échelle, la couleur d'arrière-plan, la couleur des chandeliers, dessinez les indicateurs nécessaires et enregistrez le tout sous le nom de default.tpl. Désormais, lorsque vous ouvrez un nouveau graphique, tout est prêt pour vous.

Non, la question semble être différente. Lorsqu'un utilisateur ouvre un graphique et installe un indicateur, il ne connaît ni TF ni symbole. Le script doit sélectionner le symbole et le TF. (Et l'indicateur peut être chargé en même temps, ou un modèle peut être sélectionné).

 
Aleksei Stepanenko:

Combattez, cherchez, trouvez et cachez à nouveau !


Oui, de rien.

La chose la plus simple est le motif. Pourquoi ne l'aimez-vous pas ? Vous définissez le cadre temporel, l'échelle, la couleur d'arrière-plan, la couleur des chandeliers, vous définissez les indicateurs requis et vous l'enregistrez sous le nom de default.tpl. Maintenant, lorsque vous ouvrez un nouveau graphique, tout est prêt pour vous.

Ah, c'est comme ça que ça marche, je n'ai pas pensé à default.tpl. :))
 

@makssub en PM demandant le code MQL4, puis ce code

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   while(!IsStopped())
   {
      int ticket = -1;
      string ord_sym = "";
      int max_pips = INT_MIN;
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) || OrderType() > OP_SELL) continue;
         string _sym      = OrderSymbol();
         double sym_point = SymbolInfoDouble(_sym, SYMBOL_POINT);
         double sym_price = OrderType() == OP_BUY ? SymbolInfoDouble(_sym, SYMBOL_BID) : SymbolInfoDouble(_sym, SYMBOL_ASK);
         int ord_pips     = fabs(PriceToInteger(OrderOpenPrice(), sym_point) - PriceToInteger(sym_price, sym_point));
         if(max_pips < ord_pips)
         {
            max_pips = ord_pips;
            ticket = OrderTicket();
            ord_sym = _sym;
         }
      }
      if(ticket < 0) Comment("");
      else Comment("Max pips in order = ", max_pips, " , Symbol = ", ord_sym, " , ticket = ", ticket);
      Sleep(123);
      RefreshRates();
   }
   Comment("");
}
//+------------------------------------------------------------------+
int PriceToInteger( const double Price, const double point )
{
   return((int)(Price / point + 0.1));
}
//+------------------------------------------------------------------+


comment fermer une commande de billets ici chercher: https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Alexey Viktorov:

Eh bien, en termes simples, c'est comme ça :

Nous créons une variable de type datetime et y enregistrons l'heure de la bougie D1 actuelle lorsque nous clôturons l'ordre avec un profit. Et avant d'ouvrir un autre ordre, nous vérifions la valeur de cette variable avec le temps de la bougie D1 actuelle. Par conséquent, si l'heure actuelle est plus élevée, nous pouvons ouvrir. Sinon, on fume, on fume.

Pouvez-vous me montrer un exemple, je n'ai pas assez d'expérience pour mettre en œuvre ce que vous avez dit ?
 
Bonjour à tous ! Veuillez me conseiller un tutoriel MQL4, à jour.
 
Nikolay Grigoryev:
Bonjour à tous ! Veuillez me conseiller un tutoriel MQL4 pertinent pour aujourd'hui.

il n'y a qu'un seul manuel, le vieux manuel de Kovalev. C'était jusqu'en 2016 environ. Ensuite, beaucoup de choses de 5 ont été transférées à 4. Dieu merci, le système de commande a été conservé. Il n'y a plus de manuels (je n'en ai pas trouvé, et d'autres non plus). Seulement des articles ici et des recherches sur internet.

 
Valeriy Yastremskiy:

il n'y a qu'un seul manuel, le vieux manuel de Kovalev. C'était jusqu'en 2016 environ. Ensuite, beaucoup de choses de 5 ont été transférées à 4. Dieu merci, le système de commande a été conservé. Il n'y a plus de manuels (je n'en ai pas trouvé, et d'autres non plus). Seulement des articles ici et une recherche sur internet.

Merci !

 

J'ai écrit un indicateur simple. En passant par zéro, il ne trace pas la ligne, même si les tampons ont des valeurs. Pourriez-vous me dire où je me suis trompé ?

#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int    FastEMA=12;  
extern int    SlowEMA=26;  
extern int    Signal=9;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int    draw_begin=MathMax(FastEMA,SlowEMA);
   string short_name="MACD Stephen";
   //---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DiffBuffer_up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DiffBuffer_dn);
   short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
   IndicatorShortName(short_name);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   IndicatorDigits(6);
   SetLevelValue(0,0);
   
   TimeFrame=GetTF();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  int limit, iChart, iTF, delta=0;
  datetime TimeArray[];
  //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
  int counted_bars=IndicatorCounted();
  //---- check for possible errors
  if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  limit=Bars-counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  ArraySetAsSeries(MainBuffer,true);
  ArraySetAsSeries(SignalBuffer,true);
  ArrayResize(MainBuffer,  100000);
  ArrayResize(SignalBuffer,100000);
  
  iTF=0;
  for(iChart=0; iChart<limit; iChart++)
  {
      while(Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]=EMPTY_VALUE;
      SignalBuffer[iChart]=EMPTY_VALUE;
      MainBuffer[iChart]  =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
      SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
      double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      
      if (diff>0) {
         DiffBuffer_up[iChart]=diff;
         DiffBuffer_dn[iChart]=EMPTY_VALUE;
      }
      else {
         DiffBuffer_dn[iChart]=diff;
         DiffBuffer_up[iChart]=EMPTY_VALUE;
      }
  }
  return(0);
}

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

//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES GetTF() {

   switch (Period()) {
      case PERIOD_M1:  return PERIOD_M5;
      case PERIOD_M5:  return PERIOD_M15;
      case PERIOD_M15: return PERIOD_M30;
      case PERIOD_M30: return PERIOD_H1;
      case PERIOD_H1:  return PERIOD_H4;
      case PERIOD_H4:  return PERIOD_D1;
      case PERIOD_D1:  return PERIOD_W1;
      case PERIOD_W1:  return PERIOD_MN1;
   }
   
   return (ENUM_TIMEFRAMES)Period();

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

Raison: