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

 
barabashkakvn:
Regardez dans le code de l'indicateur, la fonction OnCalculate().

Faire ce qui suit :

int limit=rates_total-prev_calculated;
   double pr=close[0];
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=ma1Val[0]-pr;
     }
Rien ne fonctionne. Tout est clair dans MQL4. Je ne connais pas très bien MQL5. Je suppose que certaines fonctions doivent être appelées pour obtenir le prix ?
 
forexman77:

Je fais ce qui suit :

Rien ne fonctionne. Tout est clair dans MQL4. Je ne connais pas très bien MQL5. Peut-être faut-il appeler certaines fonctions pour obtenir le prix ?

Écrire dans OnInit :

//--- установим индексацию для буфера как в таймсерии 
ArraySetAsSeries(ma1Val,true); 
 
forexman77:

Je fais ce qui suit :

Rien ne fonctionne. Tout est clair dans MQL4. Je ne connais pas très bien MQL5. Peut-être que certaines fonctions doivent être appelées afin d'obtenir le prix ?

Vous pouvez utiliser CopyRates (similaire à CopyBuffer) pour accéder à l'historique des prix.

Les prix actuels Ask, Bid peuvent être obtenus en utilisant SymbolInfoTick ou SymbolInfoDouble (comme dans l'indicateur Spread).

 
barabashkakvn:

Écrire dans OnInit :

Négociation automatisée:
Vous pouvez utiliser CopyRates (similaire à CopyBuffer) pour accéder à l'historique des prix. Les valeurs actuelles des prix Ask, Bid peuvent être obtenues en utilisant SymbolInfoTick.

Rien ne fonctionne. Voici tout le code :

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  "BUY TP"
input int Period_=34;
int ma1Handle;
double ma1Val[1];
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,Period_);
   ArraySetAsSeries(ExtMapBuffer1,true);
   ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int limit=rates_total-prev_calculated;
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
       MqlTick latest_price;       // Будет использоваться для текущих котировок
      if(!SymbolInfoTick(_Symbol,latest_price))
          {
          Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");return(0);
          }
      double iclose=latest_price.bid;
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=iclose - ma1Val[0];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
forexman77:

Rien ne fonctionne. Voici tout le code :

Pourquoi pas ? Ça marche pour moi :

L'indicateur fonctionne, n'est-ce pas !

Dossiers :
test.mq5  3 kb
 
Вbarabashkakvn:

Je ne vois pas pourquoi pas. Ça marche pour moi :

Visuellement, à première vue, cela semble correct. Mais lorsque je recalcule la différence entre le prix et la moyenne mobile, j'obtiens un chiffre complètement différent.

J'ai vérifié sur EURUSD/1.36421-1.36168=0.00253, et l'indicateur montre 0.00157.

 

Bon après-midi.

Existe-t-il des codes de fonction prêts à l'emploi dans le langage MQL5, comme ceux que KimIV avait dans MQL4 http://forum.mql4.com/ru/38949 ?

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
forexman77:

Visuellement, à première vue, cela semble correct. Mais, après avoir recalculé la différence entre le prix et la moyenne mobile, nous obtenons un chiffre complètement différent.

J'ai vérifié sur EURUSD/1.36421-1.36168=0.00253, et l'indicateur montre 0.00157 Capture d'écran jointe.

Ah, eh bien, vous devez être plus précis dans vos demandes. Maintenant, il compte correctement.
Dossiers :
test.mq5  3 kb
 
abeiks:

Bon après-midi.

Existe-t-il des codes de fonction prêts à l'emploi dans le langage MQL5, comme ceux que KimIV avait dans MQL4 http://forum.mql4.com/ru/38949 ?

Dans mql5, ce ne sont pas des codes de fonction qui sont utilisés, mais des bibliothèques d'objets. Les fonctions sont difficiles à connecter, dans la POO, c'est plus facile : connecter la bibliothèque requise, créer un objet et obtenir les méthodes nécessaires dans celui-ci - analogues aux fonctions dans les langages algorithmiques.
 
Je me suis inscrit pour un signal, pouvez-vous me dire si j'ai besoin que le terminal soit en marche et que le compte soit ouvert ?
Raison: