Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1295

 
Michail_David:

Vielen Dank, Vitaly. Aber immer noch erhalte ich einen Fehler in Zeile ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); auf Element [i}.

1. Überprüfen Sie die Indizes.

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

2. Warum brauchen Sie diese 2 Puffer?

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

wenn

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

ergibt einen Fehler in der Zeile ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); bei Element [i}.

Fangen

//+------------------------------------------------------------------+
//|                                                         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);
  }
//+------------------------------------------------------------------+
 
Hallo! Es gibteinen modifizierten Indikator"iexposuregmini.mq4", der auf dem Indikator iExposure.mq4 basiert und in das Terminal integriert ist.Können Sie mir bitte sagen, wie ich die Position (das Fenster) des Informanten in die linke untere Ecke des Diagrammfensters verschieben kann? Und nach dem Löschen des Indikators aus einem Diagramm bleibt der Indikatorbalken erhalten... Wie kann das behoben werden? Ich bin Ihnen im Voraus sehr dankbar!
Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
Dateien:
 
MakarFX:

1. Prüfen Sie die Indizes

2. Warum brauchen Sie diese 2 Puffer?

Mit einem Puffer ExtTempBuffer[i]=ExtTempBuffer[i+1] hat nicht funktioniert, beschlossen, es auf diese Weise zu versuchen, aber es hat auch nicht funktioniert.

 
Michail_David:

Mit einem Puffer ExtTempBuffer[i]=ExtTempBuffer[i+1] funktionierte nicht, ich beschloss, es auf diese Weise zu versuchen, aber es funktionierte auch nicht.

Ich habe den funktionierenden Code veröffentlicht

 
MakarFX:

Fangen

Danke, Mark. Beim Testen tritt derselbe Fehler in derselben Zeile erneut auf. Es funktioniert in keiner Weise.

So sieht es aus 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: array out of range in 'MSBB.mq4' (78,20)


 
Michail_David:

Vielen Dank, Mark. Beim Testen tritt derselbe Fehler erneut in derselben Zeile auf. Es funktioniert in keiner Weise.

So sieht es aus 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: array out of range in 'MSBB.mq4' (78,20)


Ich erhalte keine Fehler, aber die Protokolle sind riesig, weil die

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

Ich erhalte keine Fehler, aber die Protokolle sind riesig wegen der

Ja, das ist dasselbe. Ich scheine nicht alle Bedingungen berücksichtigt zu haben. Vom Signalwert her sind viele riesig. Vielen Dank für Ihre Hilfe. Ich werde mich von nun an mit den Bedingungen abfinden müssen.

 
Александр:

Es lässt sich nicht öffnen, weil eine der Bedingungen nicht erfüllt ist.

Sie lautet
.

oder dies

Kommentieren Sie die beiden Blitze aus // und Sie werden sehen, welcher es ist. So werden Sie den Fehler finden.

Danke, Alexander!

 
MakarFX:

Fangen

Es kompiliert ohne Probleme

'MSBB.mq4' MSBB.mq4 1 1
'MovingAverages.mqh' MovingAverages.mqh 1 1
0 Fehler, 0 Warnungen, 187 msec verstrichen 1 1

Grund der Beschwerde: