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

 
41ckm39fi:
Я убрал все что связано с PrevSignal но сообщение не выдается.

слона-то я и не заметил..

сделай инициализацию буферов раз это индикатор..

#property indicator_chart_window

int init(){

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

}

убери вызов ArraySetAsSeries.. и в

DeMarker_buffer0[i]=iDeMarker(NULL,0,14,1);

поставь последним параметром вмеcто 1 i

 
keekkenen:

слона-то я и не заметил..

сделай инициализацию буферов раз это индикатор..

#property indicator_chart_window

int init(){

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

}

убери вызов ArraySetAsSeries.. и в

поставь последним параметром вмеcто 1 i


Вот что получилось:

#property  indicator_level1 0.3
#property  indicator_level2 0.7
#property indicator_chart_window
//---- 
extern int        period_MA            = 5,
                  period_DeMarker      = 14;
//---- 
double            DeMarker_buffer0[],
                  MA_buffer1[],
                  Signal_Buffer2[];       
#define SIGNAL_BAR 1
 //+------------------------------------------------------------------+
int init()
{

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

return(0);
  }
  //+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|   
//+------------------------------------------------------------------+
int start()
  {
  int    i,limit=ArraySize(DeMarker_buffer0);
        
  int    counted_bars=IndicatorCounted();
//----
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
  for(i=limit; i>=0; i--)
  DeMarker_buffer0[i]=iDeMarker(NULL,0,14,i);
//---- 
  for(i=limit; i>=0; i--)
  
  MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,limit,5,0,MODE_LWMA,i);
//----  
                if(MA_buffer1[SIGNAL_BAR] - 0.3 > 0 && 0.3 - MA_buffer1[SIGNAL_BAR+1] >= 0)  
//---- 
                                Alert( "sMA(", Symbol(), ", ", Period(), ")  -  BUY!!!" );
//----
                if(0.7 - MA_buffer1[SIGNAL_BAR] > 0 && MA_buffer1[SIGNAL_BAR+1] - 0.7 >= 0)
//----               
                                Alert("sMA(", Symbol(), ", ", Period(), ")  -  SELL!!!");
                        
   return(0);
  }

Но меня смущает эта строка

MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,limit,5,0,MODE_LWMA,i);

В других сочиненных индикаторах вместо limit прописывают Bars.

 
41ckm39fi:


Вот что получилось:

Но меня смущает эта строка

В других сочиненных индикаторах вместо limit прописывают Bars.




меня тоже смущает.. эта функция iMAOnArray(), я не уверен что она может нормально рассчитывать усреднение, если второй параметр отличен от 0, т.е. расчет по всему массиву DeMarker_buffer0, лучше поставь 0..
 
keekkenen:
меня тоже смущает.. эта функция iMAOnArray(), я не уверен что она может нормально рассчитывать усреднение, если второй параметр отличен от 0, т.е. расчет по всему массиву DeMarker_buffer0, лучше поставь 0..
Я прописал Bars вместо limit и программа стала выдавать сообщения!!! Вроде все работает так как я хотел. Только сообщения идут много раз пока не закроется сигнальный бар.
 
Добрый день. Скачал советник, сохранил, скомпилировал, перезагрузил терминал. Подскажите, почему добавленный в MT4 советник не присоединяется к графику. Что-то не так сделал?
 
41ckm39fi:

Я прописал Bars вместо ...

Только сообщения идут много раз пока не закроется сигнальный бар.

0 все же правильнее..

и верните назад контроль времени..

static int PrevTime = Time[0];
//---- 
if(PrevTime >= Time[0] ) return(0);
//---- 
PrevTime = Time[0];

// а здесь проверяйте условия на алерт
 

Забыл упомянуть что строку

int    i,limit=ArraySize(DeMarker_buffer0);

я заменил на

int    i,limit;

и limit заменил на Bars в строке

MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,Bars,5,0,MODE_LWMA,i);

Сейчас попробую сделать так как Вы говорите вернуть PrevTime и заменить второй параметр Bars на 0.

 

К примеру работает у меня эксперт на mql4.

при запуске через extern переменные я задаю какие-то значения.

 

Вопрос: можно ли изменить в произвольный момент времени

 некоторые переменные эксперта во время его работы (например с клавиатуры) и чтобы при этом не произошел перезапуск эксперта?

 
Jazzz:

К примеру работает у меня эксперт на mql4.

при запуске через extern переменные я задаю какие-то значения.

 

Вопрос: можно ли изменить в произвольный момент времени

 некоторые переменные эксперта во время его работы (например с клавиатуры) и чтобы при этом не произошел перезапуск эксперта?


  Можно, еслли использовать переменные глобального уровня. Чтоб менять их значения с клавы, не вырубая при этом советника, нужно нажать F3 в терминале.
 
благодарю!
Причина обращения: