Подскажите, пожалуйста, как вывести через функцию iCustom() необходимые мне параметры из индикатора в советник, для проведения
дальнейшей оптимизации советником.
В одной из веток данного форума приводился индикатор Supertrend.
В данном коде я только вынес нужные мне параметры во внешние
переменные и убрал работу на нулевом баре, все остальное без
изменения.
Вот эти параметры я хотел бы перенести в советник через iCustom()
.
extern int CCIperiod=50; extern int ATRperiod=5; extern int applied_price=4; extern int TimeFrame =60;
Статьи по переносу кода в советник читал, разбирался, но не уверен
в том, что все выполнил правильно, поэтому необходима практическая
помощь.
Индикатор прилагается.
С уважением, Вячеслав.
А, что касаемо SuperTrend и иже с ним, то на истории не видно, сколько раз он меняет свои же показания. Это еще один индюк - обманщик, т.е. он затирает свои же ложные срабатывания на предыдущем баре. А посему такая красивая картинка на истории.
Перевожу вопрос в практическую плоскость.
Вот часть кода советника.
//+------------------------------------------------------------------+ //| Supertrend.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" extern int CCIperiod=50; extern int ATRperiod=5; extern int applied_price=4; extern int TimeFrame =60; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- STh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1); STl=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1); if((STh-STl)>0) Signal=true; else Signal=false; //---- return(0); } //+------------------------------------------------------------------+Правильно ли я ввел необходимые мне параметры из кода индикатора через iCustom()?
Смогу ли я оптимизировать данные параметры в советнике?
С уважением, Вячеслав.
STh=iCustom(NULL, 0, "Supertrend_I", CCIperiod,ATRperiod, applied_price, TimeFrame, 0, 1); STl=iCustom(NULL, 0, "Supertrend_I", CCIperiod,ATRperiod, applied_price, TimeFrame, 1, 1);если расчет индикатора идет на текущем графике (см. справку по iCustom). Кроме того, есть еще подводный камень: при передаче значения из буфера индикатора в эксперт надо быть уверенным, что оно там есть. А вообще-то прав Решетов...
Но в данном коде перерисовка шла на нулевом баре, но я его убрал из рассчетов.
for(i = limit; i >= 1; i--) {Цикл начинается от первой закрытой свечи. Так что линии не перерисовываются в этом коде.
Что же касается справки и примера, то я не совсем понял о какой справке идет речь.
Об этой что ли?
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) double val=iCustom(NULL, 0, "SampleInd",13,1,0);Да, только сейчас увидел в предыдущем коде, что не туда поставил переменную таймфрейма.
В данной функции принтанул все параметры, все нормально, но вот как снять показания с буфера?
double SThigh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1); double STlow= iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1); Print("Значение__",applied_price);
А вот как проверить предпоследню в коде "0" и "1" ?
Хотя можно попробовать принтануть через разность величин?
double Signal; if((SThigh - STlow)> 0 ) Signal=1;else Signal=-1; Print("Значение__ ",Signal);Кто еще что скажет по этому вопросу?
extern int CCIperiod=50; extern int ATRperiod=5; extern int applied_price=4; extern int TimeFrame =1440; if((SThigh - STlow)< 0 ) Signal=1;else Signal=-1; Print("Значение__ ",Signal);График взял дневной и установил на него индикатор.
Начиная от черной линии вправо на графике идет красная линия с 16 февраля.
И это же подтверждается на тесте советника.
Как раз таким способом я и определил, что у меня были перепутаны сигналы на бай и селл.
Я не знаю что еще добавить, но вот на тесте все результаты графика и советника совпадают.
Что еще сделать не знаю?
cciTrendCurrent = iCCI(NULL,TimeFrame, CCIperiod, applied_price, i); cciTrendPrevious = iCCI(NULL,TimeFrame, CCIperiod, applied_price, i+1); if (cciTrendCurrent >= 0 && cciTrendPrevious < 0) { TrendUp[i+1] = TrendDown[i+1];Смотрите, cciTrendCurrent - рассчитывается для i-го бара. После чего на основании этого расчета принимается решение о значении индикатора TrendUp[i+1] для i+1-го бара, т.е. более раннего. Налицо передергивание значения индикатора на один бар в прошлое. Помогает выдавать хорошую картинку.
Но хуже того, не всё золото, что блестит. Не все что называется Супертрендом, супертрендом является. Бросьте на график МА(50). Посмотрите в каких местах закрытие бара пересекает МА (50). Сравните с Супертрендом.
На мой вгляд, приведенный вами Супертренд - это хороший индикатор тренда. Настолько хороший, насколько хорошим индикатором тренда является 50-ти периодная скользящая средняя. Не более.
Я это понимаю, но еще раз посмотрите код индикатора, я же изменил его и цикл начинается при i >=1; а не i>=0;
for(i = limit; i >= 1; i--) { cciTrendCurrent = iCCI(NULL,TimeFrame, CCIperiod, applied_price, i); cciTrendPrevious = iCCI(NULL,TimeFrame, CCIperiod, applied_price, i+1); if (cciTrendCurrent >= 0 && cciTrendPrevious < 0) { TrendUp[i+1] = TrendDown[i+1]; }
Во-вторых, разговор о золоте не идет. Индикатор мне просто попался на глаза.
Я его слегка подправил и все.
Но вопрос то у меня не по чудо-индикатру, меня интерисует, как правильно вывести то, что в буфере индикатора и дополнительно те внешние переменные, о которых я веду речь.
С уважением, Вячеслав.
а в чем сложность то?
внешние переменные в индикаторе MACD
extern int FastEMA=12; extern int SlowEMA=26; extern int SignalSMA=9;Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
вставляем в советник
iCustom(NULL, 0, "MACD",FastEMA,SlowEMA,SignalSMA,0,0);
Спасибо.
Сложности большой нет, просто был вопрос, на который я хотел
получить подтверждение.
extern int TimeFrame =1440; extern int CCIperiod=50; extern int ATRperiod=5; extern int applied_price=4; double SThigh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1); double STlow= iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1); if((SThigh - STlow)> 0 ) SIGNAL_BUY=true; else SIGNAL_BUY=false; if((SThigh - STlow)<=0 ) SIGNAL_SELL=true; else SIGNAL_SELL=false;
Вопрос был в том что правильно ли я перенес внешние переменные
пользовательского индикатора в функцию iCustom().
Спасибо, всем участникам, что откликнулись помочь.
С уважением, Вячеслав.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, пожалуйста, как вывести через функцию iCustom() необходимые мне параметры из индикатора в советник, для проведения дальнейшей оптимизации советником.
В одной из веток данного форума приводился индикатор Supertrend.
В данном коде я только вынес нужные мне параметры во внешние переменные и убрал работу на нулевом баре, все остальное без изменения.
Вот эти параметры я хотел бы перенести в советник через iCustom() .
Статьи по переносу кода в советник читал, разбирался, но не уверен в том, что все выполнил правильно, поэтому необходима практическая помощь.
Код индикатора.
С уважением, Вячеслав.