Скачать MetaTrader 5

Помогите пожалуйста написать индикатор

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Они уже зарабатывают на своих сигналах. Опубликуй и ты свой!
Forex Trader
114255
Forex Trader 2010.06.03 04:54 
Здравствуйте, сколько не пытался так ничего и не получается, а задача заключается в следующем, не могу построить на окне графика график следующего типа: он должен строиться из цен закрытия, причем по их максимумам с определенным шагом. к примеру есть цены закрытия z= 4 3 2 1 6 8 3 9 1 3, и с заданным шагом к примеру 4, т.е. первые три цифры оставляем без изменений, а делаее выбираем максимальный из 4-ех, в данном случае 4, следующее окно из 4-ех цифр уже без первой цифры данной выборки z, числа " 3 2 1 6" максимум 6, и так делее, искомый результат z'=4 3 2 4 6 8 8 9 9 9. Весь код не прошу, хотя бы кусочек где это программно реализуется. Заранее спасибо!
Forex Trader
114255
Forex Trader 2010.06.09 00:28  

Я сам новичок в MQL (на моем счету пока единственный индикатор), но исходя из опыта програмирования в других языках, думаю, можно сделать так. Поксольку MathMax имеет только 2 параметра, а нам надо сравнить 4 значения, придется делать вложенные MathMax'ы: MathMax(a1,MathMax(a2,MathMax(a3,a4))). Таким образом, последний, третий, MathMax дает максимум из а4 и а3, второй - из значения третьего и а2, и первый - из значения второго и а1. Если нужно сравнить больше значений, всего-навсего возрастает глубина вложения MathMax'ов.


Не вполне ясно, нужно ли тебе для каждого значения индикатора выбрать максимум из 4 значений вперед или назад относительно текущей точки индикатора; если назад:


for(int i=3; i<Bars; i++)
       return (MathMax(Close[i],MathMax(Close[i-1],MathMax(Close[i-2],Close[i-3]))));

Ну, а если вперед, то:


for(int i=0; i<Bars-3; i++)
       return (MathMax(Close[i],MathMax(Close[i+1],MathMax(Close[i+2],Close[i+3]))));


Пожалуйста, сообщи, помогло ли.

Forex Trader
114255
Forex Trader 2010.06.13 22:01  

спасибо большое, что откликнулся на просьбу, потому что я впервые обратился за помощью на форуме, долго не получал ответ, если чесна совсем отчаялся в итоге сделал всё сам, нужно выбирать максимум вперед, я это реализовал следующим образом:

HighBuffer[i]=High[Highest(NULL,0,PRICE_CLOSE, HighPeriod,i)];

однако результат меня не совсем удовлетворил, потому что я сначал енто реализовал на программе которую нам преподают в универе

Forex Trader
114255
Forex Trader 2010.06.15 00:41  

Слушай, я тебе неправильно написал. Свеча с индексом [0] - это последняя (текущая) свеча, [1] - предпоследняя, и т. д. Я сейчас для пробы написал индикатор с максимумом назад (так проще). Вот его сорец:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
double Buf_0[];

int init()
  {
   SetIndexBuffer(0,Buf_0);
   SetIndexStyle (0,DRAW_LINE,STYLE_DOT,2);
   return;
  }

int deinit()
  {
//----
  
//----
   return(0);
  }

int start()
  {
   int i,
       Counted_bars;
   Сounted_bars=IndicatorCounted();
   i=Bars-Counted_bars-1;
   while(i>=0)
     {
      Buf_0[i]=(MathMax(Close[i],MathMax(Close[i+1],MathMax(Close[i+2],Close[i+3]))));
      i--;
     }
   return;
  }

Вроде работает. Для того, чтобы индикатор считал максимумы вперед, надо либо заканчивать его тремя свечами раньше (просто, но неполезно), либо начиная от третьей назад свечи считать максимумы сперва от трех свечей, потом от двух, и, на текущей свече, только от себя самой (поскольку иначе, как легко догадаться, нам будут нужны цены закрытия еще не существующих свечей). Ну, тут уж сам сообразишь, раз программируешь.


Для чего понадобилось

Сounted_bars=IndicatorCounted();

и все остальное, что с этим связано? Для оптимизации вычислений, чтобы с каждым тиком пересчитывать не весь график, а только если появилась новая свеча, и только для последних 4 свечей.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий