Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1010

 

MQL5

Ich kann es nicht zum Laufen bringen. Kann jemand etwas vorschlagen?

Forum für Handel, automatisierte Handelssysteme und Strategietests

Kann mir bitte jemand einen Tipp geben.

Sergey Tabolin, 2019.03.07 08:14

Auf der Grundlage eines Indikators aus der Codebasis habe ich ein Beispiel für das geschrieben, was ich möchte. Es funktioniert. Aber beim Starten tritt ein Fehler auf:

2019.03.06 21:24:26.091 my_MA_S (GBPUSD,M15)    array out of range in 'my_MA_S.mq5' (103,59)

Können Sie mir sagen, wo der Fehler liegt?

//+------------------------------------------------------------------+
//|                                                       myMA_S.mq5 |
//|                                     Copyright 2019, Tabolin S.N. |
//|                           https://www.mql5.com/ru/users/vip.avos |
//+------------------------------------------------------------------+
#property   copyright   "Copyright 2019, Tabolin S.N."
#property   link        "https://www.mql5.com/ru/users/vip.avos"
#property   version     "1.07"
//#property   icon        "\\Images\\mi2.ico"
//----------------------------------------------------------------------------------------------
#define      GS          1.618
#define      PI          3.14159
//----------------------------------------------------------------------------------------------
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

#property indicator_label1  "myMA_S"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1 

//--- input parameters
input int      InpPeriodMA          = 45; // MA period
input int      InpShiftCorrection   = 9;  // Correction shift
//--- indicator buffers
double         Buffer1[];
int            handle_MA;                           // переменная для хранения хэндла индикатора HMA5
double         buffer_MA[];                         // массив для хранения значений индикатора HMA5
int            n=0;
int            ma_bars_calculated = 0; 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArraySetAsSeries(Buffer1,        true);
   ArraySetAsSeries(buffer_MA,      true);

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-1);

   SetIndexBuffer(0,Buffer1,INDICATOR_DATA);
//--- set shortname and change label
   string short_name="myMA_S("+
                              IntegerToString(InpPeriodMA)+","+
                              IntegerToString(InpShiftCorrection)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpPeriodMA);

   handle_MA = iMA(Symbol(),0,InpPeriodMA,0,MODE_SMA,PRICE_CLOSE);
   if(handle_MA == INVALID_HANDLE)                                       // проверяем наличие хендла индикатора
   {
      Comment("Не удалось получить хендл индикатора handle_MA");         // если хендл не получен, то выводим сообщение в лог об ошибке
      Print("Не удалось получить хендл индикатора handle_MA");
      return(INIT_FAILED);                                                 // завершаем работу с ошибкой
   }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 ma_values_to_copy; 
   int ma_calculated = BarsCalculated(handle_MA); 
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 
     
   if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_HMA5
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA");   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

   for(int i = 0; i < ma_values_to_copy; i++)
     {
      Buffer1[i]  = buffer_MA[i]+(buffer_MA[i+1]-buffer_MA[i+InpShiftCorrection])/(InpShiftCorrection/GS);//1.314;
     }
   
   return(rates_total);
  }
//+------------------------------------------------------------------+

Was war falsch?
Dateien:
my_MA_S.mq5  10 kb
 
Сергей Таболин:

MQL5

Ich kann es nicht zum Laufen bringen. Kann mir jemand einen Tipp geben?

Was ist los?
Zwei Puffer, aber #property gibt einen an
 
Artyom Trishkin:
Zwei Puffer und die #Eigenschaft gibt einen an

Danke für den Tipp...

Aber es hat sich nichts geändert. Ich bin ein totaler Minuspunkt bei den Indikatoren (((

#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1

#property indicator_label1  "myMA_S"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1 

//--- input parameters
input int      InpPeriodMA          = 45; // MA period
input int      InpShiftCorrection   = 9;  // Correction shift
//--- indicator buffers
double         Buffer1[];
int            handle_MA;                           // переменная для хранения хэндла индикатора HMA5
double         buffer_MA[];                         // массив для хранения значений индикатора HMA5
int            n=0;
int            ma_bars_calculated = 0; 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArraySetAsSeries(Buffer1,        true);
   ArraySetAsSeries(buffer_MA,      true);

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-1);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,-1);

   SetIndexBuffer(0,Buffer1,INDICATOR_DATA);
   SetIndexBuffer(1,buffer_MA,INDICATOR_CALCULATIONS);
 
Сергей Таболин:

Danke für den Tipp...

Aber es hat sich nichts geändert. Ich bin ein totaler Minuspunkt bei den Indikatoren (((

Das kann ich von einem Mobiltelefon aus nicht erkennen
 
Сергей Таболин:

Danke für den Tipp...

Aber es hat sich nichts geändert. Ich bin ein totaler Minuspunkt bei den Indikatoren ((

Ich habe mir den Code nicht genau angesehen, und es ist nicht klar, in welcher Zeile der Fehler liegt, aber als ob der Fehler nicht hier läge.

Versuchen Sie, den Grenzwert zu senken

for(int i = 0; i < ma_values_to_copy-5; i++)
 
Vitaly Muzichenko:

Ich habe mir den Code nicht genau angesehen und es ist nicht klar, in welcher Zeile der Fehler liegt, aber es ist nicht so, dass der Fehler hier liegt.

Versuchen Sie, den Grenzwert zu senken

Der Fehler liegt genau in dieser Schleife.

   for(int i = 0; i < ma_values_to_copy; i++)
     {
      Buffer1[i]  = buffer_MA[i]+(buffer_MA[i+1]-buffer_MA[i+InpShiftCorrection])/(InpShiftCorrection/GS);// ошибка тут
     }

Aber Ihr Vorschlag hat mich dazu veranlasst, eine kleine Änderung vorzunehmen:

   for(int i = 0; i < ma_values_to_copy-InpShiftCorrection; i++)
     {
      Buffer1[i]  = buffer_MA[i]+(buffer_MA[i+1]-buffer_MA[i+InpShiftCorrection])/(InpShiftCorrection/GS);//1.314;
     }

Der Fehler ist behoben. Ich danke Ihnen )))

 
Ich habe mt5 für mein Handelskonto heruntergeladen. Ich bin ein Anfänger, wohin soll ich gehen und wo soll ich für echten Handel bezahlen?
 
Раиль Алеев:
Ich habe mt5. für mein Handelskonto heruntergeladen. Können Sie mir sagen, wo und wie ich für den echten Handel bezahlen kann? Ich bin ein Neuling.

Schalten Sie den Computer ein. Starten Sie Ihren Browser. Geben Sie in der Suchleiste die Worte "MetaTrader 5 Konto eröffnen" ein.

 
Verfügt CodeBase über einen EA mit der Funktion "ein Handel pro Bar" (außer EA "bei Bar-Eröffnung")?
 

Hat das jemals funktioniert oder nicht?

Wie kann ich es so einrichten, dass wenn eine Farbe in den Eingabeparametern geändert wird, diese Farbe in"indicator_color1" erscheint? Im Moment ist es das Original, egal wie man es ändert.

#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua


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[])
  {
   Comment( indicator_color1 ); // постоянно clrAqua

   return(rates_total);
  }
Grund der Beschwerde: