Возможно, ошибка выхода массива за пределы диапазона, и индикатор удаляется
int limit=rates_total-prev_calculated;
for(int i=0; i<limit; i++)
iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1))
Возможно, вы получаете сообщение в журнале о сбое глобальной инициализации.
Проверьте свои журналы
Есть ошибки Я скомпилировал ваш код и протестировал его:
2014.05.22 22:39:43.936 Пользовательский индикатор Test Indicator 3 XAUUSD,M1: удален
2014.05.22 22:39:43.905 Test Indicator 3 XAUUSD,M1: global initialization failed
2014.05.22 22:39:43.905 Test Indicator 3 XAUUSD,M5: uninit reason 3 //----------------------- change chart
2014.05.22 22:39:17.323array out of range in 'Test Indicator 3.mq4' (117,32)
2014.05.22 22:39:15.591 Test Indicator 3 XAUUSD,M5: инициализирован
2014.05.22 22:39:09.570 Пользовательский индикатор Test Indicator 3 XAUUSD,M5: успешно загружен
Спасибо за ваше предложение.
Я проверил журнал, там нет никаких ошибок или предупреждений.
Я не уверен, что (i+1) вызывает проблемы, так как в одиночку (или просто удалив вторую часть), этот индикатор работает нормально.
SCFX
Тогда, вероятно, дело в следующем
roc_s[j]=Close[i+j]-Close[i+j+1];
Вы пытаетесь получить цену закрытия баров, которых не существует
При первом запуске индикатора нужно добавить строку : prev_calculated == 0,
что-то вроде этого:
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
на моем компьютере тоже нет ошибки ;-)
Здравствуйте, ffoorr,
Ваше решение действительно хорошее.
По правде говоря, вчера вечером я нанял человека, чтобы исправить это. Да, он сделал это, но код неэффективен, смотрите ниже, так как он добавил еще один for(i).
Я буду благодарен, если вы объясните, что означает это prev_calculated ==0. Я не понимаю.
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=rates_total-prev_calculated; if(limit<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Привет всем...
У меня проблема с установкой традиционного индикатора IBFX MACD и других шаблонов в MT4.
В предыдущей версии мне нужно было только скопировать и вставить свои файлы в папку "indicator", расположенную в папке "expert".
В текущей версии есть только папка "MQL4", которая состоит из папок "expert" и "indicator".
Я пробовал вставить файлы в обе папки и перезапустить платформу, но это просто не работает.
ничего не происходит.
Может ли кто-нибудь проконсультировать меня по этому вопросу? Или, возможно, есть другие способы получить традиционный индикатор MACD с 2 линиями EMA?
Спасибо
Дугласdouglas_heng: У меня проблема с установкой традиционного индикатора IBFX MACD и других шаблонов в мой MT4. | Don't Don't multiple (6) posts. Не копируйте чужие сообщения. |
Здравствуйте, ffoorr,
Ваше решение действительно хорошее.
По правде говоря, вчера вечером я нанял человека, чтобы исправить это. Да, он сделал это, но код неэффективен, смотрите ниже, так как он добавил еще один for(i).
Я буду благодарен, если вы объясните, что означает это prev_calculated ==0. Я не понимаю.
ну scfx, я не понимаю вторую часть вашего индикатора, поэтому не могу сказать.
Когда индикатор запускается в первый раз, (наносится на график) previous_calculation равен Нулю по конструкции, поэтому можно зафиксировать начальную точку, с которой индикатор начнет расчет.
if( prev_calculated == 0) limit = 100;
или
if( prev_calculated < 50) limit = 500:
или скажем
if( prev_calculated < 500) limit = 3000: (все равно, начало графика не используется).
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
очень хорошая идея это инди ......
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Я начинаю с индикатора (ПЕРВАЯ ЧАСТЬ). Он работает нормально, при смене таймфрейма.
Затем я добавляю вторую часть, которая заключается в следующем: Если Close[i]-Close[i+1] меньше медианы разницы последних 100 баров, я присваиваю значение 0 всем буферам.
Теперь комбинированный индикатор отлично работает на 1 графике, но когда я меняю таймфрейм, индикатор исчезает. Приходится заново прикреплять его к графику.
Я думаю, что проблема вызвана Array, но я не знаю, как ее решить.
Может ли кто-нибудь помочь мне с этой ошибкой?
Большое спасибо.
SCFX