Как писать iCustom() я знаю, мне нужно добавить буфер переменных dn и up.
Здравствуйте.
У меня не получается добавить буфер к индикатору, постоянно выдает число 2147483647, а должен или 1 или 0.
Кто помогите, помогите.
Не могли бы уточнить проблему ( у меня ваш код работает нормально)
Я правда изменил Range = AvgRange / 10; на Range = AvgRange * 0.1; но это скорее по привычке заменять где можно / на *
эта замена роли не играет потому что 0/10 в MQL спокойно проходит а вот наоборот 10/0 какраз может выдать 2147483647 но у вас в коде
n/0 я не нашел поэтому не пойму проблему?
Не могли бы уточнить проблему ( у меня ваш код работает нормально)
Я правда изменил Range = AvgRange / 10; на Range = AvgRange * 0.1; но это скорее по привычке заменять где можно / на *
эта замена роли не играет потому что 0/10 в MQL спокойно проходит а вот наоборот 10/0 какраз может выдать 2147483647 но у вас в коде
n/0 я не нашел поэтому не пойму проблему?
В индикаторе есть два буфера val1buffer[] и val2buffer[]. Up и dn в индикаторе простые переменные. Нужно сделать из низ тритий и четверты буфер - up[] и dn[].
з.ы. нумерация начиная с нуля :)
з.з.ы. код не мой :)
rensbit писал(а) >>
Держи (Я оставил вывод в файл, для проверки если не нужно убери, буфера bool, но можно и int )
//+------------------------------------------------------------------+ //| ASC Trend.mq4 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, PIPS 2009" //---- #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Green #property indicator_color2 Red //---- extern int RISK = 4; extern int AllBars = 250; //---- double val1buffer[]; double val2buffer[]; bool up[], dn[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() {up[0]=0; dn[0]=0; //---- indicators SetIndexStyle(0, DRAW_ARROW, EMPTY); SetIndexArrow(0, 108); SetIndexBuffer(0, val1buffer); //---- SetIndexStyle(1, DRAW_ARROW, EMPTY); SetIndexArrow(1, 108); SetIndexBuffer(1, val2buffer); SetIndexBuffer(2, dn); SetIndexBuffer(3, up); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { ArrayResize(dn,Bars-1);ArrayResize(up,Bars-1); //ArrayInitialize(dn,0);ArrayInitialize(up,0); double value2; double value3; double value10 = 10; double value11; double x1 = 70; double x2 = 30; int TrueCount; int counter; int MRO1; int MRO2; int i1; double Range; double AvgRange; double val1; double val2; double Table_value2[500][2]; int counted_bars = IndicatorCounted(); value10 = 3 + RISK*2; x1 = 67 + RISK; x2 = 33 - RISK; value11 = value10; //---- if(counted_bars < 0) return (-1); //---- if(counted_bars > 0) counted_bars--; //last bar recounted int i; int shift = Bars - counted_bars - 1; if(shift > AllBars) shift = AllBars; for(i = shift; i > 0; i--) { counter = i; Range = 0; AvgRange = 0; //---- for(counter = i; counter <= i + 9; counter++) AvgRange = AvgRange + MathAbs(High[counter] - Low[counter]); Range = AvgRange * 0.1; counter = i; TrueCount = 0; //---- while(counter < i + 9 && TrueCount < 1) { if(MathAbs(Open[counter] - Close[counter+1]) >= Range*2.0) TrueCount++; counter++; } //---- if(TrueCount >= 1) MRO1 = counter ; else MRO1 = -1; counter = i; TrueCount = 0; //---- while(counter < i + 6 && TrueCount < 1) { if(MathAbs(Close[counter+3] - Close[counter]) >= Range*4.6) { TrueCount++; } counter++; } //---- if(TrueCount >= 1) MRO2 = counter; else MRO2 = -1; //---- if(MRO1 > -1) value11 = 3; else value11 = value10; //---- if(MRO2 > -1) value11 = 4; else value11 = value10; value2 = 100 - MathAbs(iWPR(NULL, 0, value11, i)); Table_value2[i][0] = i; Table_value2[i][1] = value2; val1 = 0; val2 = 0; value3 = 0; //---- if(value2 < x2 ) // x2 = 30 { i1 = 1; //---- while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1) i1++; //---- if(Table_value2[i+i1][1] > x1) { value3 = High[i] + Range*0.5; val1 = value3; } } //---- if(value2>x1) // x1 = 70 { i1 = 1; //---- while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1) { i1++; } //---- if(Table_value2[i+i1][1] < x2) { value3 = Low[i]-Range*0.5; val2 = value3; } } //---- if(val2 != 0 && up[i] == 0) { val1buffer[i] = val2 - 1*Point; up[i] = 1; dn[i] = 0; //---- if(shift <= 2) Alert(Symbol(), " ", Period(), "M Asctrend BUY "); } //---- if(val1 !=0 && dn[i] == 0) { val2buffer[i] = val1 + 1*Point; dn[i] = 1; up[i] = 0; //---- if(shift <= 2) Alert(Symbol(), " ", Period(), "M Asctrend SELL "); } } Prints("ASC Trend"); return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void Prints(string files) { int han = FileOpen(files+".txt", FILE_WRITE," "); if(han>0){//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, FileWrite(han," "); for(int i=0;i<1000;i++) {FileWrite(han,i," ",dn[i]," ",up[i]); } FileClose(han); } return; }//============================================================
прости выкладую сюда нет времени WinRar устанавливать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
У меня не получается добавить буфер к индикатору, постоянно выдает число 2147483647, а должен или 1 или 0.
Кто помогите, помогите.