Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поиск в документации доступен через MetaTrader 5. Ищи и изучай!
stawros25
44
stawros25 2011.12.07 13:36 
Возникла мыслишка автоматизировать торговлю по индикатору ZigZag(стандартный из МТ4).Идея простая и в ручную торгуется успешно.Как только линия индикатора прерывается и в течении нескольких баров отсутствует( 1-3 в зависимости от таймфрейма)позиция переворачивается на противоположную.Но как получить значение индикатора для советника или просто факт наличия или отсутсвия его линии на данном баре?Его линии - это не объекты,индикатор имеет 3 буфера,но значения их массивов,получаемые например с помощьф ф-ции iCustom(), вовсе не соответствуют наличию или отсутствию линии индикатора на данном баре.Подскажите пожалуйста.Не может быть чтобы эту информацию невозможно было выжать из индикатора.
Leonid Borsky
2374
Leonid Borsky 2011.12.07 14:03  

==========

Пример моего давнего, первого советника по зиг-загу. Задавал эту часть кода вот так:

int start()
  {

//============ блок зигзага =======================
 double // экстремумы Зиг-Зага (ценовые  значения)
  y3=0, //предпоследнего экстремума
   y2=0,//значение последего экстремума
    y1=0,//тек. цена
     y0,//кончик посл. луча  
     zz;    //кончик 3-го экстр 
 int    x3, x2, x1, sh=ShiftBars;// номера баров с экстремумами 
 
    y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;
 
 //----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";
on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    
//-----------------------------------------------                
            
      } // while (y3==0)       
//=============== конец   блока зигзага =================================

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

if (y2<y1 && x2>x1) && ... //если последний экстремум - это максимум (или минимум)....

и т.д., и т.п.

stawros25
44
stawros25 2011.12.07 19:20  
leonid553:

==========

Пример моего давнего, первого советника по зиг-загу. Задавал эту часть кода вот так:

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

if (y2<y1 && x2>x1) && ... //если последний экстремум - это максимум (или минимум)....

и т.д., и т.п.


Спасибо,разобрался.В буферах оказывается номера баров экстремумов на которых оканчивается луч индикатора.Дальше, как говорится, дело техники.
stawros25
44
stawros25 2011.12.13 16:44  
Уважаемый leonid553,С Вашей помощью написал советник на основе ZigZaga и двух МАшек.Работает неплохо.но поздновато срабатывает после трендов высотой 80-100 пунктов.Из-за этого теряется приличная часть прибыли.Это слабая сторона всех советников на МАшках.Надо бы его дополнить критерием выхода RSI из зон перекупленности и перепроданности,но при высоте ветви ZigZaga не менее 80 пунктов.Измерить высоту ветви ZigZaga,по экстремумам,возникшим уже после включения советника нет проблем.С помщью ф-ции iCustom() получаем из буферов ZigZaga сведения о наличии на последнем баре минимума или максимума, отмеченных ZigZagом(кстати не совсем понятно почему в буферах ZigZaga для разных валютных пар экстремумы отмечаются : для EURUSD,GBPUSD значением 1,для EURJPY значением 102,дляGBPJPY значением 121.т.е. целой частью котировки), и определяем значения Low и High на этих барах. Однако для корректной работы необходимо,чтобы советник измерял и высоту последней ветви ZigZaga,возникшей перед включением советника.
Есть такая ф-ция ArrayBsearch(),возвращающая индекс первого найденного элемента в массиве,но непонятно как указать советнику массив какого индикатора мы имеем в виду.А если внести изменения в код индикатора и там определять индекс бара экстремума с помощью ф-ции ArrayBsearch(),то как потом получить этот индекс бара в советник?
Подскажите пожалуйста.
Leonid Borsky
2374
Leonid Borsky 2011.12.13 19:43  

По поводу массива я сказать затрудняюсь. Я не проф. программист и знаком только с основами MQL/

Не совсем понято отображение экстремумов в целых цифрах от котировки. Я сейчас поставил отображение в советник - и в комменте все норм. отображается.

stawros25
44
stawros25 2011.12.13 23:19  

Я уже во всем рзобрался.Спасибо за помощь.Можно вообще удалить тему,господа модераторы.

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