Ума даже не представляю как можно написать собственный индикатор без помощи других индикаторов.Тот же MACD использует 2 хэндла.
Да уж...великий и могучий MQL язык...
Всё рассчитывается. MACD - это разница двух MA. МА можно рассчитать самому по данными таймсерий. И так любой индикатор. Например, в СБ в файле MovingAverages.mqh есть все расчёты МА.
Подключайте его к вашему файлу (#include <MovingAverages.mqh>) и используйте.
Только что добавил в MACD копирование хендлов стандартных индикаторов т.е. НЕ через iCustom() - ВСЕ РАБОТАЕТ МОМЕНТАЛЬНО И БЫСТРО. В чем же все таки дело??
iCustom работает медленно. Именно это я и имел в виду, когда предлагал вынести код из индикатора-обертки. А если устраивают стандартные, так конечно надо их и использовать .
Всё рассчитывается. MACD - это разница двух MA. МА можно рассчитать самому по данными таймсерий. И так любой индикатор. Например, в СБ в файле MovingAverages.mqh есть все расчёты МА.
Подключайте его к вашему файлу (#include <MovingAverages.mqh>) и используйте.
Артем прав, в вашем случае все действительно элементарно.
Артем прав, в вашем случае все действительно элементарно.
у меня есть 6 индикаторов, по сигналам которых я хочу написать мультитаймфреймового советника (индикаторы не по пересечению МА, как MACD и др., а более сложные, МАСD был взят для простоты понимания проблемы) то мне необходимо создавать отдельный индикатор и вытягивать код и 6-ти этих же индикаторов в один свой индикатор, разбираясь в логике работы каждого индикатора? Вы это предлагаете?
у меня есть 6 индикаторов, по сигналам которых я хочу написать мультитаймфреймового советника (индикаторы не по пересечению МА, как MACD и др., а более сложные, МАСD был взят для простоты понимания проблемы) то мне необходимо создавать отдельный индикатор и вытягивать код и 6-ти этих же индикаторов в один свой индикатор, разбираясь в логике работы каждого индикатора? Вы это предлагаете?
P/S/
какие негодяи придумали тогда хэндлы))
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
А если расчётная часть зависит от предыдущего значения? А та в свою очередь зависит от своей предыдущей...
Внёс изменения в советник: теперь можно вызывать или "Examples\\MACD" или "Examples\\MACD handels".
"Examples\\MACD handels" - это стандартный MACD в котором есть этот код:
//--- MA handlesint ExtFastMaHandle;
int ExtSlowMaHandle;
//--- handlesint handle1,handle2,handle3,handle4,handle5,handle6;//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,ExtMacdBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ExtFastMaBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,ExtSlowMaBuffer,INDICATOR_CALCULATIONS);
//--- sets first bar from what index will be drawnPlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpSignalSMA-1);
//--- name for Dindicator subwindow labelIndicatorSetString(INDICATOR_SHORTNAME,"MACD("+string(InpFastEMA)+","+string(InpSlowEMA)+","+string(InpSignalSMA)+")");
//--- get MA handles
ExtFastMaHandle=iMA(NULL,0,InpFastEMA,0,MODE_EMA,InpAppliedPrice);
ExtSlowMaHandle=iMA(NULL,0,InpSlowEMA,0,MODE_EMA,InpAppliedPrice);
//---
handle1=iCustom(NULL,0,"Examples\\Alligator");
handle2=iCustom(NULL,0,"Examples\\RSI");
handle3=iCustom(NULL,0,"Examples\\Stochastic");
handle4=iCustom(NULL,0,"Examples\\Fractals");
handle5=iCustom(NULL,0,"Examples\\ATR");
handle6=iCustom(NULL,0,"Examples\\ADX");
if(handle1<0 || handle2<0 || handle3<0 || handle4<0 || handle5<0 || handle6<0)
{
Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
}//--- initialization done
}
//+------------------------------------------------------------------+//| Moving Averages Convergence/Divergence |//+------------------------------------------------------------------+
В самом советнике в OnInit() прописал "дёргать нужные символы по всем таймфреймам":
//--- дёргаем нужные символы на всех таймреймахstring array_symbols[3]={"EURUSD","GBPUSD","USDCHF"};
ENUM_TIMEFRAMES array_timiframes[21]=
{
PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,
PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,
PERIOD_M30,PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,
PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,
PERIOD_MN1
};
double array[1000];
int size_symbols=ArraySize(array_symbols);
int size_timiframes=ArraySize(array_timiframes);
for(int i=0;i<size_symbols;i++)
for(int j=0;j<size_timiframes;j++)
CopyClose(array_symbols[i],array_timiframes[j],0,1000,array);
//--- Получаем хэндл индикатора
Теперь можно быстро сравнивать быстродействие при вызове или "Examples\\MACD" или "Examples\\MACD handels".
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ума даже не представляю как можно написать собственный индикатор без помощи других индикаторов.Тот же MACD использует 2 хэндла.
Да уж...великий и могучий MQL язык...
Всё рассчитывается. MACD - это разница двух MA. МА можно рассчитать самому по данными таймсерий. И так любой индикатор. Например, в СБ в файле MovingAverages.mqh есть все расчёты МА.
Подключайте его к вашему файлу (#include <MovingAverages.mqh>) и используйте.
Только что добавил в MACD копирование хендлов стандартных индикаторов т.е. НЕ через iCustom() - ВСЕ РАБОТАЕТ МОМЕНТАЛЬНО И БЫСТРО. В чем же все таки дело??
iCustom работает медленно. Именно это я и имел в виду, когда предлагал вынести код из индикатора-обертки. А если устраивают стандартные, так конечно надо их и использовать .
Всё рассчитывается. MACD - это разница двух MA. МА можно рассчитать самому по данными таймсерий. И так любой индикатор. Например, в СБ в файле MovingAverages.mqh есть все расчёты МА.
Подключайте его к вашему файлу (#include <MovingAverages.mqh>) и используйте.
Артем прав, в вашем случае все действительно элементарно.
Артем прав, в вашем случае все действительно элементарно.
у меня есть 6 индикаторов, по сигналам которых я хочу написать мультитаймфреймового советника (индикаторы не по пересечению МА, как MACD и др., а более сложные, МАСD был взят для простоты понимания проблемы) то мне необходимо создавать отдельный индикатор и вытягивать код и 6-ти этих же индикаторов в один свой индикатор, разбираясь в логике работы каждого индикатора? Вы это предлагаете?
P/S/
какие негодяи придумали тогда хэндлы))
у меня есть 6 индикаторов, по сигналам которых я хочу написать мультитаймфреймового советника (индикаторы не по пересечению МА, как MACD и др., а более сложные, МАСD был взят для простоты понимания проблемы) то мне необходимо создавать отдельный индикатор и вытягивать код и 6-ти этих же индикаторов в один свой индикатор, разбираясь в логике работы каждого индикатора? Вы это предлагаете?
P/S/
какие негодяи придумали тогда хэндлы))
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
Спасибо за помощь!
Если стандартные работают быстро, оставьте все, как есть. Это негодяи, которые используют индикаторы для отображения на экране, а не чисто для расчетов.
Хотите быстро - приложите усилия. Я расчетные индикаторы всегда препарирую и вставляю в код только расчетную часть.
А если расчётная часть зависит от предыдущего значения? А та в свою очередь зависит от своей предыдущей...
А если расчётная часть зависит от предыдущего значения? А та в свою очередь зависит от своей предыдущей...
Значит надо это учесть и модифицировать расчеты. Простое избавление от индикаторной обертки ускоряет расчеты, которые внутри индикатора до 2-х раз.
А если расчётная часть зависит от предыдущего значения? А та в свою очередь зависит от своей предыдущей...
Расчётный буфер. В индикаторе естественно.
В функции - переменная, хранящая прошлое рассчитанное значение.
Внёс изменения в советник: теперь можно вызывать или "Examples\\MACD" или "Examples\\MACD handels".
"Examples\\MACD handels" - это стандартный MACD в котором есть этот код:
В самом советнике в OnInit() прописал "дёргать нужные символы по всем таймфреймам":
Теперь можно быстро сравнивать быстродействие при вызове или "Examples\\MACD" или "Examples\\MACD handels".