Вопрос по мультивалютному советнику - страница 7

 
Ок! Сейчас буду разбираться. Но тестер то не знает, - к какому инструменту прикреплен советник.
 

datetime iTime( string symbol, int timeframe, int shift)

Возвращает значение времени открытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). В случае ошибки функция возвращает 0. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Для текущего графика информация о времени открытия каждого бара находится в предопределенном массиве Time[]. Параметры: symbol - Символьное имя инструмента. NULL означает текущий символ. timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика. shift - Индекс получаемого значения из таймсерии (сдвиг относительно текущего бара на указанное количество периодов назад).

---------------------------------------------------------------------------------------------------------------------

насколько я понял, тут нужно сначала, например, задать:

static int prevtimeEURUSD = 0;

потом уже вставить в код нужной нам пары

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT
 
rid:

...

насколько я понял, тут нужно сначала, например, задать:

static int prevtimeEURUSD = 0;

потом уже вставить в код нужной нам пары

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT

Да. Посмотрите как сделано в ProtoType (Rosh). Пытался вставить ссылку, что-то не прошло (найдёте по поиску в CodeBase). В функции isNewBar() для этого создан двумерный массив - порядок большая сила!
 
,благодарю! У меня есть этот эксперт. Сейч. гляну.
 
Уважаемый, Klerk!
Я хочу сделать мультивалютный индикатор, например, две пары. Сначала котировки этих пар нужно привести к единому виду( например, перевести их в процентное изменение, т.е. (Close[i]-Close[i+1])/100% - так правильно будет?), а потом, если я хочу видеть динамику разности между ними, ввести их в индикатор. Как это сделать???
 

если нужна динамика разности, то переводить в проценты необязательно, можно сделать например так:

int start(){
 
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
     Comment("MACD "+MacdBuffer[0]);         
 
return(0);
}
 
Огромное спасибо, Xeon!!!! Попробую!
 
Xeon! Если не трудно сбрось то, что нужно сверху от start... А то, я чайник еще!!!
 
nido:
Xeon! Если не трудно сбрось то, что нужно сверху от start... А то, я чайник еще!!!


Вообще то это было написано за пару минут в тестовом скрипте (для проверки блоков кода)

пришлось для вас набросать индикатор :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

Надеюсь разберетесь

p.s. имейте в виду что индикатор будет работать только в онлайне, на истории потребуется создавать цикл

 
xeon:
nido:
Xeon! Если не трудно сбрось то, что нужно сверху от start... А то, я чайник еще!!!


Вообще то это было написано за пару минут в тестовом скрипте (для проверки блоков кода)

пришлось для вас набросать индикатор :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

Надеюсь разберетесь

p.s. имейте в виду что индикатор будет работать только в онлайне, на истории потребуется создавать цикл

СПАСИБО, Xeon!!! Могу я написать Вам в личку относительно идеи советника? Мой E-mail: ni_do@mail.ru