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

 
Alexey Belyakov:
Ich habe es geändert und erhalte folgende Fehlermeldung: " 'array_atr' - invalid array access "


vielleicht hilft Ihnen etwas - Sie müssen nur einen Indikator erstellen, kein Experte sein

- Der Expert Advisor funktioniert auf die gleiche Weise, wird aber im Tester angezeigt

//+------------------------------------------------------------------+
//|                                                         тест.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot iATR
#property indicator_label1  "iATR"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrLightSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- входные параметры
input int                  atr_period=14;          // период для вычисления
input string               symbol=" ";             // символ
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;  // таймфрейм
//--- индикаторный буфер
double iATRBuffer[];
//--- переменная для хранения хэндла индикатора iAC
int    handle;
//--- переменная для хранения
string name=symbol;
//--- имя индикатора на графике
string short_name;
//--- будем хранить количество значений в индикаторе Average True Range
int    bars_calculated=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- привязка массива к индикаторному буферу
   SetIndexBuffer(0,iATRBuffer,INDICATOR_DATA);
//--- определимся с символом, на котором строится индикатор
   name=symbol;
//--- удалим пробелы слева и справа
   StringTrimRight(name);
   StringTrimLeft(name);
//--- если после этого длина строки name нулевая
   if(StringLen(name)==0)
     {
      //--- возьмем символ с графика, на котором запущен индикатор
      name=_Symbol;
     }
//--- создадим хэндл индикатора
   handle=iATR(name,period,atr_period);
   if(handle==INVALID_HANDLE)
     {
      //--- сообщим о неудаче и выведем номер ошикби
      PrintFormat("Не удалось создать хэндл индикатора iATR для пары %s/%s, код ошибки %d",
                  name,
                  EnumToString(period),
                  GetLastError());
      //--- работа индикатора завершается досрочно
      return(INIT_FAILED);
     }
//--- покажем на какой паре символ/таймфрейм рассчитан индикатор Average True Range
   short_name=StringFormat("iATR(%s/%s, period=%d)",name,EnumToString(period),atr_period);
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- нормальное выполнение инициализации индикатора
//---
   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(BarsCalculated(handle)<rates_total
      ||rates_total<0)
      return(0);
//---- объявления локальных переменных
   int to_copy,limit;
//---- расчеты необходимого количества копируемых данных и
//стартового номера limit для цикла пересчета баров
   if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
     {
      to_copy=rates_total; // расчетное количество всех баров
      limit=rates_total-1; // стартовый номер для расчета всех баров
     }
   else
     {
      to_copy=rates_total-prev_calculated+1; // расчетное количество только новых баров
      limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
     }
//---- копируем вновь появившиеся данные в массивы
   if(CopyBuffer(handle,0,0,to_copy,iATRBuffer)<=0)
      return(0);
//---- индексация элементов в массивах как в таймсериях
   ArraySetAsSeries(iATRBuffer,true);
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov:
Geändert und Fehler erhalten: " 'array_atr' - ungültiger Array-Zugriff "


Ein Array-Element wird mit '[]' referenziert.

Zum Beispiel ein Verweis auf ein Nullelement:

array_atr[0]
 
Vladimir Karputov:

Ein Array-Element wird mit '[]' referenziert.

Zum Beispiel ein Verweis auf ein Nullelement:


double array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{

CopyBuffer(ATR14,0,0,2,array_atr);

Comment(

      "ATR14==: ",DoubleToString((array_atr[1])*100000,0),"\n");

}
Vladimir Danke! Erledigt!
 
Alexey Belyakov:


Vladimir Danke! Erledigt!

Ich wollte herausfinden, worauf Sie hinauswollen, aber ich bin nur bis hierher gekommen und habe es nicht verstanden.

//+------------------------------------------------------------------+
//|                                              Alexey Belyakov.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade ExtTrade;
//---
int ATR14;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create ATR indicator and add it to collection
   ATR14=iATR(_Symbol,_Period,14);
   if(ATR14==INVALID_HANDLE)
     {
      printf("Error creating ATR indicator");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   OnATR14();
  }
//+------------------------------------------------------------------+
//| refresh indicators                                               |
//+------------------------------------------------------------------+
void OnATR14()
  {
   MqlRates rt[2];
//--- go trading only for first ticks of new bar
   if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[1].tick_volume>1)
      return;
//--- get current Moving Average
   double array_atr[1];
//--- get current ATR
   if(CopyBuffer(ATR14,0,0,1,array_atr)!=1)
     {
      Print("CopyBuffer from ATR failed, no data");
      return;
     }
   if(array_atr[0]>=0.00100 && rt[0].close>array_atr[0])
     {
      Print("ATR14==: BUY");
     }
   if(array_atr[0]<=0.00100 && rt[0].close>array_atr[0])
     {
      Print("ATR14==: SELL");
     }
  }
//+------------------------------------------------------------------+
 
Hallo!
Ich fange gerade erst an, den Code zu verstehen, also haben Sie bitte Nachsicht mit meinem Analphabetismus in Sachen Programmierung.
Ich komme mit der Übersetzung dieses Stücks in mql5 nicht zurecht:

int init() 
   {
   parus = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   if (IsTesting() == true) rf();
   if (IsTesting() == false) rm();
   return (0);
   }

Ich ändere MarketInfo in SymbolInfoInteger und erhalte - so:

int init() 
   {
   parus = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT) * Point;
   if (IsTesting() == true) rf();
   if (IsTesting() == false) rm();
   return (0);
   }

und ich erhalte Fehler.

möglicher Datenverlust aufgrund von Typumwandlung

';' - offene Klammererwartet


Bitte helfen Sie mir und sagen Sie mir, wie es funktionieren soll.





 
Sprut 185:
Hallo!
Ich fange gerade erst an, einen Code zu verstehen, und ich bitte Sie, Nachsicht mit meinem Analphabetismus in Sachen Programmierung zu haben.
Ich komme mit der Übersetzung dieses Stücks in mql5 nicht zurecht:

Ich ändere MarketInfo in SymbolInfoInteger und erhalte - so:

und ich erhalte Fehler.

möglicher Datenverlust aufgrund von Typumwandlung

';' - offene Klammererwartet


Bitte helfen Sie und schreiben Sie, wie es tatsächlich sein sollte.

   parus = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD) * Point();
   if(MQLInfoInteger(MQL_TESTER) == true) rf();
   if(MQLInfoInteger(MQL_TESTER) == false) rm();

Oder besser so

   parus = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD) * Point();
   if(MQLInfoInteger(MQL_TESTER)) rf();
    else rm();
 
Vitaly Muzichenko:

Oder noch besser

Herzlichen Dank für Ihre Hilfe!


Jetzt kann ich nicht herausfinden, warum das so ist:

int user_0 = SymbolInfoInteger(Symbol(), SYMBOL_TRADE_STOPS_LEVEL);

möglicher Datenverlust aufgrund von Typumwandlung

Was ist daran falsch?


 
Sprut 185:
Vielen Dank für Ihre Hilfe!


Jetzt kann ich nicht herausfinden, warum das so ist:

möglicher Datenverlust aufgrund von Typumwandlung

Was ist hier los?


Long oder bul Nicht int.

Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
SymbolInfoInteger - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Valeriy Yastremskiy:

Long oder Bull Nicht Int.

Danke, dass du es herausgefunden hast!!!

Jetzt ist nicht klar, was hier falsch ist:

trendstep = "Tredstep start on" +Trendstep_start+ " order";

Fehler: implizite Umwandlung von 'Zahl' in 'String'

Stimmt etwas nicht mit den Pluszeichen?


 
Sprut 185:
Danke sortiert !!!

Jetzt ist nicht klar, was hier falsch ist:

Fehler: implizite Umwandlung von 'Zahl' in 'String'

Stimmt etwas mit den Pluszeichen nicht?


NICHT eine implizite Umwandlung. Wenn Sie Strings zu Zahlen hinzufügen, werden die Zahlen in String-Variablen umgewandelt. Und Sie brauchen eine explizite. und hoffentlich hat trendstep einen String-Typ. )))

trendstep = "Tredstep start on" +(string) Trendstep_start+ " order";
Grund der Beschwerde: