[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 141

 

Всё, получилось. Похоже из-за того, что задал один буфер.

#property indicator_buffers 1

 

всё вы правильно сделали. я проверил - выводит как надо (могу скрин дать).

только сверху дописал ещё

#property  indicator_separate_window
#property  indicator_buffers 2
 

Помогите, плиз!!!

double Lots_simb[3];


if((Lots_simb[0]*2)<Lots_simb[2]) // почему истина ?
{

Print("Lots_simb[0]*2=",Lots_simb[0]*2,"Lots_simb[2]=",Lots_simb[2]);
Open_Buy_otl(symb[0],(Lots_simb[2]/2-Lots_simb[0]));

return;

}

2009.07.10 06:57:09 newseason GBPJPY,M30: Lots_simb[0]*2=8.4 Lots_simb[2]=8.4
 
Господа знатоки, когда журнал в тестере пишет "Функция не разрешена в тестовом режиме" как узнать что это за функция не разрешена?
 
Dimoncheg писал(а) >>
Господа знатоки, когда журнал в тестере пишет "Функция не разрешена в тестовом режиме" как узнать что это за функция не разрешена?

'Особенности и ограничения тестирования торговых стратегий в MetaTrader 4'

 

Здравствуйте. Очень нужна помощь! Хочу сделать советника на основе индикатора. В начале, как и в любом индикаторе есть такие строчки:

SetIndexBuffer(0,ExtBullBuffer);
  SetIndexBuffer(1,ExtBull1Buffer);  
  SetIndexBuffer(2,ExtBull2Buffer); 
  SetIndexBuffer(3,ExtBull3Buffer);  
  SetIndexBuffer(4,ExtBull4Buffer);  
  SetIndexBuffer(5,ExtBull5Buffer); 
  SetIndexBuffer(6,ExtBull6Buffer);
  SetIndexBuffer(7,ExtBull7Buffer);
Далее идет само тело программы (int start()...), где идет вычисление переменных ExtBullBuffer... так как я хочу сделать советника, то мне SetIndexBuffer не нужны, но если я их удаляю, то при тестировании переменные ExtBullBuffer не вычисляются (на всем временном интервале тестирования, на всех таймфреймах выдается 0, хотя это не так)... Подскажите, что делать?? Спасибо.

 
Levchik >>:

Здравствуйте. Очень нужна помощь! Хочу сделать советника на основе индикатора. В начале, как и в любом индикаторе есть такие строчки:

SetIndexBuffer(0,ExtBullBuffer);
Далее идет само тело программы (int start()...), где идет вычисление переменных ExtBullBuffer... так как я хочу сделать советника, то мне SetIndexBuffer не нужны, но если я их удаляю, то при тестировании переменные ExtBullBuffer не вычисляются (на всем временном интервале тестирования, на всех таймфреймах выдается 0, хотя это не так)... Подскажите, что делать?? Спасибо.

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

в других программах (не индикаторах) буфера нужно инициализировать функцией                 ArrayResize(ExtBullBuffer,Bars);

(если конечно буфер не обьявлен явно        double ExtBullBuffer[1000];         )

Причём инициализацию нужно делать в функции где предпологается присваивать значения буферу. В ваше случае в int start().

 

Всем привет. Подскажите как исправить код индюка, что бы звуковой сигнал выводился не один раз, а раз 10, или как есть индюки где сигналит до тех пор пока  не появица следующая свечка. То есть сигнал идёт всё время свечи на которой он возник. А то этот индюк сигнал подаёт, но всего один раз..к сожалению ночью бывает не слышу(((( Заранее благодарен всем кто откликнеца.

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 SkyBlue
#property indicator_width2 2
#property indicator_color3 Tomato
#property indicator_width3 2

#property indicator_color4 Blue
#property indicator_color5 Red
#property indicator_width4 1
#property indicator_width5 1

//---- input parameters
extern int Price = 0; //Apply to Price(0-Close;1-Open;2-High;3-Low;4-Median price;5-Typical price;6-Weighted Close) 
extern int Length = 15; //Period of NonLagMA
extern int Displace = 0; //DispLace or Shift 
extern double PctFilter = 0; //Dynamic filter in decimal
extern string note1 ="turn on Color: ln=1 ln&dot=2; off=0";
extern int Color = 2; //Switch of Color mode (1-color)  
extern int ColorBarBack = 0; //Bar back for color mode
extern double Deviation = 0; //Up/down deviation  
extern string note2 ="turn on = 1; turn off = 0";
extern int AlertMode = 0; //box Alert switch (0-off,1-on) 
extern int WarningMode = 0; //Sound Warning switch(0-off,1-on)
extern int SendEmail = 0; 
extern string soundfile = "news.wav";
//---- indicator buffers
double MABuffer[];
double UpBuffer[];
double DnBuffer[];
double trend[];
double Del[];
double AvgDel[];
double updbuffer[];
double dndbuffer[];

double alfa[];
int i, Phase, Len,Cycle=4;
double Coeff, beta, t, Sum, Weight, g;
double pi = 3.1415926535;  
bool UpTrendAlert=false, DownTrendAlert=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
  int init()
  {
  IndicatorBuffers(8);
  SetIndexStyle(0,DRAW_LINE);
  SetIndexBuffer(0,MABuffer);
  SetIndexStyle(1,DRAW_LINE);
  SetIndexBuffer(1,UpBuffer);
  SetIndexStyle(2,DRAW_LINE);
  SetIndexBuffer(2,DnBuffer);

  SetIndexBuffer(5,trend);
  SetIndexBuffer(6,Del);
  SetIndexBuffer(7,AvgDel); 


  SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,159); SetIndexBuffer(3,updbuffer); SetIndexEmptyValue(3,EMPTY_VALUE); 
  SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,159); SetIndexBuffer(4,dndbuffer); SetIndexEmptyValue(4,EMPTY_VALUE);


  string short_name;
//---- indicator line
   
  IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
  short_name="NonLagMA("+Length+")";
  IndicatorShortName(short_name);
  SetIndexLabel(0,"NonLagMA");
  SetIndexLabel(1,"Up");
  SetIndexLabel(2,"Dn");
//----
  SetIndexShift(0,Displace);
  SetIndexShift(1,Displace);
  SetIndexShift(2,Displace);
  SetIndexShift(3,Displace);
  SetIndexShift(4,Displace);
   
  SetIndexEmptyValue(0,EMPTY_VALUE);
  SetIndexEmptyValue(1,EMPTY_VALUE);
  SetIndexEmptyValue(2,EMPTY_VALUE);
   
  SetIndexDrawBegin(0,Length*Cycle+Length+1);
  SetIndexDrawBegin(1,Length*Cycle+Length+1);
  SetIndexDrawBegin(2,Length*Cycle+Length+1);
//----
   
  Coeff = 3*pi;
  Phase = Length-1;
  Len = Length*4 + Phase;  
  ArrayResize(alfa,Len);
  Weight=0;  
   
  for (i=0;i<Len-1;i++)
  {
  if (i<=Phase-1) t = 1.0*i/(Phase-1);
  else t = 1.0 + (i-Phase+1)*(2.0*Cycle-1.0)/(Cycle*Length-1.0); 
  beta = MathCos(pi*t);
  g = 1.0/(Coeff*t+1);  
  if (t <= 0.5 ) g = 1;
  alfa[i] = g * beta;
  Weight += alfa[i];
  }
 
  return(0);
  }

//+------------------------------------------------------------------+
//| NonLagMA_v7.1 |
//+------------------------------------------------------------------+
int start()
{
  int i,shift, counted_bars=IndicatorCounted(),limit;
  double price;  
  if ( counted_bars > 0 ) limit=Bars-counted_bars;
  if ( counted_bars < 0 ) return(0);
  if ( counted_bars ==0 ) limit=Bars-Len-1; 
  if ( counted_bars < 1 ) 
   
  for(i=1;i<Length*Cycle+Length;i++) 
  {
  MABuffer[Bars-i]=0;  
  UpBuffer[Bars-i]=0;  
  DnBuffer[Bars-i]=0;  
  }
   
  for(shift=limit;shift>=0;shift--) 
  { 
  Sum = 0;
  for (i=0;i<=Len-1;i++)
  { 
  price = iMA(NULL,0,1,0,3,Price,i+shift);  
  Sum += alfa[i]*price;
   
  }
   
 if (Weight > 0) MABuffer[shift] = (1.0+Deviation/100)*Sum/Weight;
   
   
  if (PctFilter>0)
  {
  Del[shift] = MathAbs(MABuffer[shift] - MABuffer[shift+1]);
   
  double sumdel=0;
  for (i=0;i<=Length-1;i++) sumdel = sumdel+Del[shift+i];
  AvgDel[shift] = sumdel/Length;
   
  double sumpow = 0;
  for (i=0;i<=Length-1;i++) sumpow+=MathPow(Del[shift+i]-AvgDel[shift+i],2);
  double StdDev = MathSqrt(sumpow/Length); 
   
  double Filter = PctFilter * StdDev;
   
  if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter ) MABuffer[shift]=MABuffer[shift+1];
  }
  else
  Filter=0;
   
  if (Color>0)
  {
  trend[shift]=trend[shift+1];
  if (MABuffer[shift]-MABuffer[shift+1] > Filter) trend[shift]= 1; 
  if (MABuffer[shift+1]-MABuffer[shift] > Filter) trend[shift]=-1; 
   
  updbuffer[shift] = EMPTY_VALUE; dndbuffer[shift] = EMPTY_VALUE;
   
  if (trend[shift]>0)
  {  
  UpBuffer[shift] = MABuffer[shift];
  if (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
  DnBuffer[shift] = EMPTY_VALUE;
  if (trend[shift+1]<0&&Color>1) updbuffer[shift]= MABuffer[shift];  
  }
  if (trend[shift]<0) 
  {
  DnBuffer[shift] = MABuffer[shift];
  if (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
  UpBuffer[shift] = EMPTY_VALUE;
  if (trend[shift+1]>0&&Color>1) dndbuffer[shift]= MABuffer[shift]; 

  }
  }
  }
//----------  
  string Message;
   
  if ( trend[2]<0 && trend[1]>0 && Volume[0]>1 && !UpTrendAlert)
 {
 Message = " "+Symbol()+" M"+Period()+" NonLagMa Signal for BUY";
 if ( AlertMode>0 ) Alert (Message); 
 if ( WarningMode>0 ) PlaySound(soundfile);
 if ( SendEmail>0 ) SendMail("NonLagMa", "UpTrendAlert");
 UpTrendAlert=true; DownTrendAlert=false;
 } 
   
 if ( trend[2]>0 && trend[1]<0 && Volume[0]>1 && !DownTrendAlert)
 {
 Message = " "+Symbol()+" M"+Period()+" NonLagMa Signal for SELL";
 if ( AlertMode>0 ) Alert (Message); 
 if ( WarningMode>0 ) PlaySound(soundfile);
 if ( SendEmail>0 ) SendMail("NonLagMa", "DownTrendAlert");
 DownTrendAlert=true; UpTrendAlert=false;
 }  
//----
 return(0); 
}

 
E_mc2 >>:

Всем привет. Подскажите как исправить код индюка, что бы звуковой сигнал выводился не один раз, а раз 10, или как есть индюки где сигналит до тех пор пока не появица следующая свечка. То есть сигнал идёт всё время свечи на которой он возник. А то этот индюк сигнал подаёт, но всего один раз..к сожалению ночью бывает не слышу(((( Заранее благодарен всем кто откликнеца.

А вам это зачем? Раскажите подробней может решение рядом, а вы не знаете как правильно спросить чтоб люди поняли.

По тому что вы написали у меня есть два решения, вам какое, два сразу слишком долго писать :)

..

кстати такие длинные коды лучше прикреплять файлом.

Да и для кода есть специальная кнопочка SRC