индикатор выдает неверные значения

 

  KimIV 26.09.2008 07:15
  
KONDOR писал (а) >>
как "затолкать" в индикатор более 8-ми буферов, из которых только половина должна рисоваться?
Массивы тех буферов, которые не должны рисоваться, не назначайте буферами. Пусть они остаются простыми массивами, но на себя возьмите заботу об их размерности. 

показания индикатора должны быть такими:

//+------------------------------------------------------------------+
 //| MACD_USD.mq4 |
 //| Copyright © 2004, MetaQuotes Software Corp. |
 //| http://www.metaquotes.net/ |
 //+------------------------------------------------------------------+
 #property copyright "Copyright © 2004, MetaQuotes Software Corp."
 #property link "http://www.metaquotes.net/"

 #property indicator_separate_window 
 #property indicator_buffers 1
 #property indicator_color1 Green

 //---- input parameters
 extern int Fast=1;
 extern int Slow=300;

 //---- buffers
 double USD[];
 double USD_MACD[];

 //+------------------------------------------------------------------+
 //| Custom indicator initialization function |
 //+------------------------------------------------------------------+
 int init()
   {
 IndicatorBuffers(2);
 SetIndexStyle(0,DRAW_LINE);
 SetIndexBuffer(0,USD_MACD);
 SetIndexStyle(1,DRAW_NONE);
 SetIndexBuffer(1,USD);

 IndicatorDigits(5);
    
 string short_name="MACD ("+Fast+","+Slow+","+9+")";
 IndicatorShortName(short_name);
 SetIndexLabel(0,"USD");

 //----
   return(0);
   }
    
 //+------------------------------------------------------------------+
 int start()
   {
    
   int counted_bars=IndicatorCounted();
 //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
 //----
   for( int i=0; i<limit; i++)
   USD[i]=MathPow((
   iClose("USDJPY",0,i)*
   iClose("USDCHF",0,i)*
   iClose("USDCAD",0,i)/ 
   iClose("GBPUSD",0,i)/
   iClose("EURUSD",0,i)/
   iClose("AUDUSD",0,i)/
   iClose("NZDUSD",0,i)),0.125 );
    
   for( i=0; i<limit; i++)
   USD_MACD[i]=(iMAOnArray(USD,Bars,Fast,0,MODE_EMA,i)-iMAOnArray(USD,Bars,Slow,0,MODE_EMA,i))/USD[i];

    
   return(0);  
   } 
 //+------------------------------------------------------------------+


изменил 

//---- buffers
 double USD[];      // double USD[500];  // добавил размерность
 double USD_MACD[]; // double USD_MACD[];// без изменений


 IndicatorBuffers(2);         // IndicatorBuffers(1);  
 SetIndexStyle(0,DRAW_LINE); // SetIndexStyle(0,DRAW_LINE); // без изменений
 SetIndexBuffer(0,USD_MACD); // SetIndexBuffer(0,USD_MACD); // без изменений
 SetIndexStyle(1,DRAW_NONE); // удалил
 SetIndexBuffer(1,USD);      // удалил


показания отличаются. что я делаю не так?

 

а зачем удаляете расчетный буфер?

естественно все изменица, он второй буфер хоть и не видно на графике но используеца в расчете

или как тайм-серию установить нужно массив

 
как "затолкать" в индикатор более 8-ми буферов, из которых только половина должна рисоваться?

а что вы посоветуете?

 

я задачу решал как затолкать на два порядка больше буферов..

построил трехуровневую систему через iCustom

 
sabluk >>:

я задачу решал как затолкать на два порядка больше буферов..

построил трехуровневую систему через iCustom

iCustom не подходит. в нем применяется наименование инструмента. у меня его нет, или вернее больше одного.

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

 
KONDOR >>:

iCustom не подходит. в нем применяется наименование инструмента. у меня его нет, или вернее больше одного.

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

у меня тоже его нет..

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

поэтому пофиг на каком инструменте будет выполняца iCustom и iClose

 

USD[i]=iCustom( NULL, 0, "MACD_USD.mq4", 12,26, 0, 0);   а че сдесь в конце нули делают

mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

( NULL, 0, "MACD_USD.mq4", 12,26, 0, i);

 
sabluk >>:

у меня тоже его нет..

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

поэтому пофиг на каком инструменте будет выполняца iCustom и iClose

не работает

//+------------------------------------------------------------------+
//|                                                       MASSIV.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Green

//---- buffers
double USD[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

IndicatorBuffers(1);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,USD);


IndicatorDigits(4);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
//----
  for( int i=0; i<limit; i++)
  USD[i]=iCustom(NULL, 0, "MACD_USD.mq4",  0, i);
  
  
//----
   return(0);
  }
 

"MACD_USD.mq4" зачем mq4 писать

iCustom(NULL, 0, "MACD_USD", 0, i);

 
sabluk >>:

"MACD_USD.mq4" зачем mq4 писать

iCustom(NULL, 0, "MACD_USD", 0, i);

спасибо! добили наконец, завтра буду конструировать  остальные запчасти.

 
в справочнике MQL все есть )
Причина обращения: