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_buffers1#property indicator_plots1//--- plot iATR#property indicator_label1"iATR"#property indicator_type1DRAW_LINE#property indicator_color1clrLightSeaGreen#property indicator_style1STYLE_SOLID#property indicator_width11//--- входные параметрыinputint atr_period=14; // период для вычисленияinputstring symbol=" "; // символinputENUM_TIMEFRAMES period=PERIOD_CURRENT; // таймфрейм//--- индикаторный буферdouble iATRBuffer[];
//--- переменная для хранения хэндла индикатора iACint handle;
//--- переменная для храненияstring name=symbol;
//--- имя индикатора на графикеstring short_name;
//--- будем хранить количество значений в индикаторе Average True Rangeint bars_calculated=0;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- привязка массива к индикаторному буферу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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &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 callreturn(rates_total);
}
//+------------------------------------------------------------------+
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. )))
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
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]Ein Array-Element wird mit '[]' referenziert.
Zum Beispiel ein Verweis auf ein Nullelement:
Vladimir Danke! Erledigt!
Vladimir Danke! Erledigt!Ich wollte herausfinden, worauf Sie hinauswollen, aber ich bin nur bis hierher gekommen und habe es nicht verstanden.
Ich ändere MarketInfo in SymbolInfoInteger und erhalte - so:
und ich erhalte Fehler.
möglicher Datenverlust aufgrund von Typumwandlung
';' - offene KlammererwartetBitte helfen Sie mir und sagen Sie mir, wie es funktionieren soll.
Hallo!
Ich ändere MarketInfo in SymbolInfoInteger und erhalte - so:
und ich erhalte Fehler.
möglicher Datenverlust aufgrund von Typumwandlung
';' - offene KlammererwartetBitte helfen Sie und schreiben Sie, wie es tatsächlich sein sollte.
Oder besser so
Oder noch besser
Jetzt kann ich nicht herausfinden, warum das so ist:
möglicher Datenverlust aufgrund von Typumwandlung
Was ist daran falsch?
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.
Long oder Bull Nicht Int.
Jetzt ist nicht klar, was hier falsch ist:
Fehler: implizite Umwandlung von 'Zahl' in 'String'
Stimmt etwas nicht mit den Pluszeichen?
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. )))