Из двух и более торговых символов

 

Понадобился индикатор который из мат.операций с двумя символами выводил на график результат.

И слегка доработав один из попавшихся сделал, однако радовался линии на графике рано...

#property indicator_chart_window 
#property indicator_buffers 1 
#property indicator_color1 Indigo 

double ExtMapBuffer1[]; 
//+------------------------------------------------------------------+ 
int init()
{  SetIndexStyle(0,DRAW_LINE); 
   SetIndexBuffer(0,ExtMapBuffer1); 
   return(0);   } 
//+------------------------------------------------------------------+ 
int deinit() 
  { return(0); } 
//+------------------------------------------------------------------+ 
int start() 
{ 
   int limit;
   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; 
   for(int i=0; i<limit; i++) 
ExtMapBuffer1[i]=iMA("EURLFX",0,1,0,0,0,i)/iMA("USDLFX",0,1,0,0,0,i);
return(0); 
} 
//+------------------------------------------------------------------+ 

В общем так, заглянув в журнал:

2007.10.22 11:20:59 MASymbol-222 EURUSD,H4: Error = 4013

и далее с каждым тиком:

2007.10.22 11:21:03 MASymbol-222 EURUSD,H4: Error = 0

 

Как бы это победить зеро девайс ?

 
Надо проверять количество баров по каждому инструменту. Может так оказаться, что просто данных нету. Тогда iMa возвращает 0, что есть деление на ноль. Я бы вставил проверку каждого значения , и делимого, и делителя вначале на ноль. Потому как второе ноль, то и делить нельзя. Если первое, то на выходе просто ноль будет.
 

А я бы к этому еще сделал проверку на соответствие времени баров с разных графиков(символов). А то может получиться так ( и наверняка получиться), что будут возвращаться разные (по времени открытия) бары и получите картинку неизвесто чего.

 

Рисует можно сказать то что надо...

По этой формуле получается курс eurusd с небольшой и допустимой разницей.

Впрочем вот картинка:

А вот длина истории символов... скорее всего и разная...

Но с толку сбивает что рисует таки же !

ЗЫ: мож в начале обсчёта ошибка?

Из-за того что индикатор на графике eurusd а на символах нет цен. ..

 
непонимаю для чего это нужно тебе, эти индексы по евро и доллару взяты из пары eurusd, а ты не хитрыми вычислениями это назад привел
 

1. Для контроля... ;)

2. Для учёбы в программировании, ибо чайник я ещё тот... :)))

Ведь строка:

ExtMapBuffer1[i]=iMA("EURLFX",0,1,0,0,0,i)/iMA("USDLFX",0,1,0,0,0,i);

точнее: ExtMapBuffer1[i]= А что-то там с Б;

вполне может пригодится...

Кстати...

Если убрать деление то скачет только ошибка = 0

Тут вообще пас... :(( и как с ней биться...

 
Данных просто нет. Закачай историю котировок.
 

Мда...

1. Файлов истории действительно не было.

Ибо переключился с реала на демку, а в этом ДЦ на демо бываю раз в год...

2. Перезагрузил для верности терминал, файлы есть пуск!

и ничего... всё тоже самое...

3. Менял символ на другие, думал что из-за индексов, пофиг.

Спасибо за помощь!

мож кто сталкивался увидит, прочтёт, напишет...

ЗЫ: а проверки совет выше, увы, пока не в силах без примеров.

 
а историю то ты по нужным таймфреймам подгружал?
и кстати действительно тут нужна проверка на количество баров на тайфреймах "чужих" символов. Возможно что 0 и выскакивает именно из-за того, что история по ним оказывается короче чем по основному символу. Поэтому надо либо проверять количество баров, либо просто проверять значения на 0 (но это менее рационально)
 

Можно ограничить отрисовку счетным числом баров например 500, что бы не проверять всю историю...

Причина обращения: