Индикатору всё равно, что указан размер массива (TS[1000]), что не указан. Индикатор будет распределять буфер, равный количеству баров.
В эксперте же установлено 1000 элементов, значит будет 1000 элементов
В эксперте же установлено 1000 элементов, значит будет 1000 элементов
Индикатору всё равно, что указан размер массива (TS[1000]), что не указан. Индикатор будет распределять буфер, равный количеству баров.
В эксперте же установлено 1000 элементов, значит будет 1000 элементов
В эксперте же установлено 1000 элементов, значит будет 1000 элементов
В индикаторе пробывал и просто массив (TS[] и TS2[]), но суть проблемы не исчезла.
В индикаторных массивах бесполезно указывать размер. Индикатор сам распределит сколько надо. Я как раз об этом говорю.
В эксперте делайте
В эксперте делайте
ArrayResize(TS,Bars);
тогда Ваши расчёты дожны совпасть
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Разработчики объясните сей факт. Получается что писать эксперты даже из стандартных индикаторов нет смысла?!
Код индикатора:
#property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 LawnGreen #property indicator_color2 PaleTurquoise extern int SignalSMA=9; double TS[1000]; double TS2[1000]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init(){ IndicatorBuffers(2); IndicatorShortName("TEST"); SetIndexBuffer(0,TS); SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 0, Orange); SetIndexDrawBegin(0,0); SetIndexLabel(0,"TS"); SetIndexBuffer(1,TS2); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1, RoyalBlue); SetIndexDrawBegin(1,0); SetIndexLabel(1,"TS2"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int mode,limit=ArraySize(TS); ArraySetAsSeries(TS,true); //---- if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-1; //---- for(int i=0; i<limit; i++) TS[i]=(iMA(NULL,0,10,0,MODE_EMA,PRICE_WEIGHTED,i)+ iMA(NULL,0,20,0,MODE_EMA,PRICE_WEIGHTED,i)+ iMA(NULL,0,30,0,MODE_EMA,PRICE_WEIGHTED,i)); //---- for(i=0; i<limit; i++) TS2[i]=iMAOnArray(TS,limit,SignalSMA,0,MODE_SMA,i); //---- return(0); }Код эксперта:
//+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double TS[1000],TS2[1000]; int shift; int SignalSMA=9; int limit=ArraySize(TS); ArraySetAsSeries(TS,true); limit=Bars-1; for(int i=0; i<limit; i++) TS[i]=(iMA(NULL,0,10,0,MODE_EMA,PRICE_WEIGHTED,i)+ iMA(NULL,0,20,0,MODE_EMA,PRICE_WEIGHTED,i)+ iMA(NULL,0,30,0,MODE_EMA,PRICE_WEIGHTED,i)); for(i=0; i<limit; i++) TS2[i]=iMAOnArray(TS,limit,SignalSMA,0,MODE_SMA,i); Comment ("BUF1 = ",TS[0]," BUF2 = ",TS2[0]); return(0); }Чем выше тайм фрейм тем сильнее расхождение. Расчет для первого буфера совподает, а для второго никак не хочет. Хотя код правельный.