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

 
Michail_David:

Merci, Vitaly. Mais j'obtiens toujours une erreur à la ligne ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2) ; sur l'élément [i}.

1. Vérifiez les index.

   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);

2. Pourquoi avez-vous besoin de ces 2 tampons

      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);

si

 ExtPriceBuffer[i] = ExtTempBuffer[i+1]
 
Michail_David:

donne une erreur à la ligne ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2) ; sur l'élément [i}.

Attrapez

//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(3,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   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[])
  {
//------
   if((rates_total-prev_calculated-InpMSBBPeriod)<=0)return(0);
   
   for(int i=rates_total-prev_calculated-InpMSBBPeriod-1;i>=0;i--)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Bonjour ! Il y aun indicateur modifié"iexposuregmini.mq4" basé sur l'indicateur iExposure.mq4 intégré dans le terminal. Pouvez-vous m'indiquer comment déplacer la position (fenêtre) de l'informateur dans le coin inférieur gauche de la fenêtre du graphique ? Et après avoir supprimé l'indicateur d'un graphique, la barre de l'indicateur reste... Comment peut-on y remédier ? Je vous en suis très reconnaissant à l'avance !
Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
Dossiers :
 
MakarFX:

1. Vérifier les indices

2. Pourquoi avez-vous besoin de ces 2 tampons ?

Avec un seul tampon ExtTempBuffer[i]=ExtTempBuffer[i+1] n'a pas fonctionné, j'ai décidé d'essayer de cette façon, mais cela n'a pas fonctionné non plus.

 
Michail_David:

Avec un seul tampon ExtTempBuffer[i]=ExtTempBuffer[i+1] n'a pas fonctionné, j'ai décidé d'essayer de cette façon, mais cela n'a pas fonctionné non plus.

J'ai posté le code de travail

 
MakarFX:

Attrapez

Merci Mark. Même erreur à nouveau sur la même ligne lors du test. Ça ne marche pas du tout.

Voici ce que 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5 : tableau hors limites dans 'MSBB.mq4' (78,20)


 
Michail_David:

Merci, Mark. Même erreur à nouveau sur la même ligne lors du test. Ça ne marche pas du tout.

Voici ce qu'il dit 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5 : tableau hors limites dans 'MSBB.mq4' (78,20)


Je n'obtiens pas d'erreur, mais les journaux sont énormes à cause de

Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
 
MakarFX:

Je n'obtiens aucune erreur, mais les journaux sont énormes à cause de

Oui. Pareil. Je ne semble pas avoir pris en compte toutes les conditions. Sur la valeur du signal, beaucoup sont énormes. Merci pour votre aide. Je vais devoir faire avec les conditions à partir de maintenant.

 
Александр:

Il ne s'ouvre pas parce que l'une des conditions n'est pas remplie.

C'est

ou ceci

Commentez les deux flashs // et vous verrez lequel c'est. C'est ainsi que vous trouverez l'erreur.

Merci Alexander !

 
MakarFX:

Attrapez

Il compile sans aucun problème

'MSBB.mq4' MSBB.mq4 1 1
'MovingAverages.mqh' MovingAverages.mqh 1 1
0 erreurs, 0 avertissements, 187 msec écoulées 1 1

Raison: