Помогите не могу правильно передать параметры в функцию iCustom, чтобы получить значение индикатора Symphonie_Trendline_Indicator_v3.0.mq4
пишу вот так:
но z почему то всегда = 0. думаю что то с параметрами, подскажите что не так? вот код Symphonie_Trendline_Indicator_v3.0.mq4:
double TrendUp=iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0",63,18,0,1); double TrendDown=iCustom(NULL,0,"Symphonie_Trendline_Indicator_v3.0",63,18,1,1); Comment("\n"," TrendUp = ",TrendUp, "\n"," TrendDown = ",TrendDown);
попробовал, пишет что они оба = 0 постоянно =(
попробовал, пишет что они оба = 0 постоянно =(
Ваш инструмент падает. Надо продавать, а не покупать. Особого отличия от индикатора Supertrend не заметил. Хотя, могут быть добавлены ошибки.
//+------------------------------------------------------------------+ //| Supertrend.mq4 | //| Copyright © 2005, Jason Robinson (jnrtrading). | //| http://www.jnrtrading.co.uk | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Jason Robinson (jnrtrading)." #property link "http://www.jnrtrading.co.uk" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red #property indicator_width1 2 #property indicator_width2 2 extern int CCIPeriod = 36; extern int ATRPeriod = 4; double TrendUp[]; double TrendDown[]; double st = 0.0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0, TrendUp); SetIndexBuffer(1, TrendDown); IndicatorDigits( Digits); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i; double cciTrendNow, cciTrendPrevious, rATR; double spread = MarketInfo( Symbol(), MODE_SPREAD); double lotsize = MarketInfo( Symbol(), MODE_TICKVALUE); Comment( "Spread ", spread, " Tickvalue ", lotsize); int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit=Bars-counted_bars; cciTrendPrevious = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, limit+1); for(i = limit; i >= 0; i--) { cciTrendNow = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i); rATR = iATR(NULL, 0, ATRPeriod, i); if (cciTrendNow >= st) { if (cciTrendPrevious < st) TrendUp[i+1] = TrendDown[i+1]; TrendUp[i] = MathMax( TrendUp[i+1], Low[i] - rATR); TrendDown[i] = EMPTY_VALUE; } if (cciTrendNow <= st) { if ( cciTrendPrevious > st) TrendDown[i+1] = TrendUp[i+1]; TrendDown[i] = MathMin( TrendDown[i+1], High[i] + rATR); TrendUp[i] = EMPTY_VALUE; } cciTrendPrevious = cciTrendNow; } //---- return(0); } //+------------------------------------------------------------------+
Ваш инструмент падает. Надо продавать, а не покупать. Особого отличия от индикатора Supertrend не заметил. Хотя, могут быть добавлены ошибки.
В этом коде есть стратегический момент:
cciTrendPrevious = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, limit+1); for(i = limit; i >= 0; i--) { cciTrendNow = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i); rATR = iATR(NULL, 0, ATRPeriod, i); }
выделенная строка вынесена за пределы цикла (по сравнению с индикатором от ТС).
Помогите не могу правильно передать параметры в функцию iCustom, чтобы получить значение индикатора Symphonie_Trendline_Indicator_v3.0.mq4
пишу вот так:
но z почему то всегда = 0. думаю что то с параметрами, подскажите что не так? вот код Symphonie_Trendline_Indicator_v3.0.mq4:
Вызов индикатора осуществляете правильно, ошибку ищите в другом месте. Выложенный индикатор делает лишние расчёты, убрал не нужный код:
//+------------------------------------------------------------------------+ //| Symphonie_Trendline_Indicator_v3.0.mq4 | //|Based on basic Trendline by MetaTrader_Experts_and_Indicators | //+------------------------------------------------------------------------+ #property copyright "Symphonie Trader System" #property link "MetaTrader_Experts_and_Indicators" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 DodgerBlue #property indicator_color2 Red extern int CCIPeriod = 63; extern int ATRPeriod = 18; double TrendUp[], TrendDown[]; int st = 0; //+------------------------------------------------------------------+ //| Custom indicator initialization function| //+------------------------------------------------------------------+ int init() { string short_name = StringConcatenate ("STI: (", CCIPeriod, "/", ATRPeriod, ")"); //---- indicators SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); SetIndexBuffer (0, TrendUp); SetIndexLabel (0, "STI | UP"); SetIndexStyle (1, DRAW_LINE, STYLE_SOLID, 2); SetIndexBuffer (1, TrendDown); SetIndexLabel (1, "STI | DOWN"); //---- IndicatorDigits (Digits); IndicatorBuffers (2); IndicatorShortName (short_name); //---- return (0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function| //+------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function| //+------------------------------------------------------------------+ int start() { int limit, counted_bars = IndicatorCounted(); double lda_CCI[2], ld_ATR; //---- //---- check for possible errors if (counted_bars < 0) return (-1); limit = Bars - counted_bars - 1; for (int i = limit; i >= 0; i--) { for (int li_IND = 0; li_IND < 2; li_IND++) {lda_CCI[li_IND] = iCCI (NULL, 0, CCIPeriod, PRICE_TYPICAL, i + li_IND);} if (lda_CCI[0] >= st) if (lda_CCI[1] < st) {TrendUp[i+1] = TrendDown[i+1];} if (lda_CCI[0] <= st) if (lda_CCI[1] > st) {TrendDown[i+1] = TrendUp[i+1];} ld_ATR = iATR (NULL, 0, ATRPeriod, i); if (lda_CCI[0] >= st) { TrendUp[i] = Low[i] - ld_ATR; if (TrendUp[i] < TrendUp[i+1]) {TrendUp[i] = TrendUp[i+1];} } else if (lda_CCI[0] < st) { TrendDown[i] = High[i] + ld_ATR; if (TrendDown[i] > TrendDown[i+1]) {TrendDown[i] = TrendDown[i+1];} } } //---- return (0); } //+------------------------------------------------------------------+
...и для начала загляните в лог.
мб по теме что-нибудь?
Однажды столкнулся с подобной проблемой. Оказалось, при сохранении индикатора после имени пробел остался, а вызывать пытался имя без пробела. Попробуйте проверить точное соответствие имён.
Однажды столкнулся с подобной проблемой. Оказалось, при сохранении индикатора после имени пробел остался, а вызывать пытался имя без пробела. Попробуйте проверить точное соответствие имён.
Это одна из ОЧЕНЬ возможных причин.
to CeBePHb1Y: А для простоты переименуйте это "поэтическое" имя, например, аббревиатурой "STI" и поменяйте в коде советника вызов.
Это одна из ОЧЕНЬ возможных причин.
to CeBePHb1Y: А для простоты переименуйте это "поэтическое" имя, например, аббревиатурой "STI" и поменяйте в коде советника вызов.
теперь все показывает)) спасибо!
все равно ничего не понятно... в общем конкретнее опишу что я хочу. вот этот вот индикатор Symphonie_Trendline_Indicator_v3.0.mq4 (код которого выше) рисует трендовую линию и в зависимости от того, какой тренд, цвет этой линии меняется (красный - тренд в ни3, сини - тренд вверх). вот я через iCustom хочу узнавать какой сейчас тренд (ну или куакой цвет линии). вот как это сделать? а то iCustom возвращает мне одно и то же число постоянно 2147483647... ни чего не понятно...
Это число означает EMPTY_VALUE. В одном буфере будет ПУСТО, а второй буфер будет иметь НЕПУСТО. Где НЕПУСТО, там и тренд. ;)
P.S. А вообще, если глянуть в код этого "поэтического" индюка, то определение тренда сводится к положениию CCI относительно 0: выше -> вверх (UP), ниже -> вниз (DW). И индюка можно заменить такой строчкой:
double ld_CCI = iCCI (NULL, 0, CCI_Period, PRICE_TYPICAL, Bar); int li_Signal = -1; if (ld_CCI > 0.) li_Signal = OP_BUY; else if ((ld_CCI < 0.) li_Signal = OP_SELL;- вот такая "поэзия"... :)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите не могу правильно передать параметры в функцию iCustom, чтобы получить значение индикатора Symphonie_Trendline_Indicator_v3.0.mq4
пишу вот так:
но z почему то всегда = 0. думаю что то с параметрами, подскажите что не так? вот код Symphonie_Trendline_Indicator_v3.0.mq4: