Помогите написать индюк - страница 2

 

Пишу индикатор и есть вопрос

Как можно вывести среднее значение баров за определённый период.

Вот код.

Я не умею делать запрос истории и работать с буфером.

Помогите пожалуйста.


#property indicator_chart_window

extern int TekstSize = 15 ;
extern int MomPeriod=1;
double MomBuffer[];
int init()
{



return(0);
}

int deinit()
{
ObjectDelete("FreMargin");


ObjectDelete("Tip");
return(0);
}

int start()
{

int i;

string Market_Price0 = DoubleToStr((((High[MomPeriod])-Low[MomPeriod]))*10000,0); //макс бар//
ObjectCreate("FreMargin", OBJ_LABEL, 0, 0, 0);
ObjectSetText("FreMargin", Market_Price0+" Свободно средств", TekstSize, "Arial Bold", Red);
ObjectSet("FreMargin", OBJPROP_CORNER, 2);
ObjectSet("FreMargin", OBJPROP_XDISTANCE, 2);
ObjectSet("FreMargin", OBJPROP_YDISTANCE, 460);


return(0);
}
 

Работа с буфером. Покажу на примере:

#property indicator_separate_window // Прорисовка индикатора в отдельном окне
//#property indicator_chart_window  // Прорисовка индикатора в окне с графиком

#property indicator_buffers 2       // Общее количество буферов для расчета индикаторов
#property indicator_color1 Red      // Первый индикатор: Цвет индикатора
#property  indicator_width1 1       // Первый индикатор: Толщина линии индикатора
#property  indicator_style1 0       // Первый индикатор: Стиль линии

#property indicator_color2 Green    // Второй индикатор: Цвет индикатора
#property  indicator_width2 1       // Второй индикатор: Толщина линии индикатора
#property  indicator_style2 0       // Второй индикатор: Стиль линии

Здесь инициализация индикаторов. Их два.

Затем инициализируешь буфер. У тебя это double MomBuffer[];

Т.к. у тебя будет использоваться только один индикатор (одна линия на графике), то второй индикатор тебе не нужен.

Далее секция init:

int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,indicator_style1,indicator_width1,indicator_color1);
   SetIndexBuffer(0,MomBuffer);
//----
   return(0);
  }

Всё. С начальным определением закончили.

Теперь сама обработка с прорисовкой. Приведу примитив, т.к. не знаю, какие именно данные ты будешь брать и за какой период.

int start()
  {
   int    counted_bars=IndicatorCounted();
//----

   for (int i=0; i<Bars; i++)
   {
     MA1 = iMA(NULL, PERIOD_H1,  2, 0, MODE_SMA, PRICE_OPEN, i);
     MA2 = iMA(NULL, PERIOD_H1, 24, 0, MODE_SMA, PRICE_OPEN, i); 
     
     MomBuffer[i] = (MA1 + MA2)/2;  // Здесь будет твоя формула ... Я привёл формулу средней между двумя МА на каждом баре
   }
   
//----
   return(0);
  }

Заметь, если будешь использовать, например, значения МА1 из предыдущей свечи, то т.к. цикл идёт в сторону увеличения, переменная i в формуле iMA должна быть i+1.

Если используешь две линии на графике, то надо проинициализировать вторую переменную-буфер.

Всё. Удачи.

Если что - пиши!

 
EVgEN_SA:

Пожалуйста, помогите мне понять, как рисовать правильно линии с помощью индикатора.

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

Мне надо понять, как будет устроен данный код.

Везде рыл, но такого не нашёл - даже приблизительно.


Если не сможешь скопировать прикрепленный учебник по языку mql4, то найди в инете . В нем найди раздел -Создание пользовательских индикаторов. Там товарищ все хорошо разжевывает, то бишь объясняет что к чему. Успехов
 
alexgen:
Если не сможешь скопировать прикрепленный учебник по языку mql4, то найди в инете . В нем найди раздел -Создание пользовательских индикаторов. Там товарищ все хорошо разжевывает, то бишь объясняет что к чему. Успехов

Некромант?