как написать советника на базе индикатора iFractals

 

Друзья индикатор iFractals исполльзует массивы, как можно сделать сравнение в массивах UP и DN можно ли это сделать?

//+------------------------------------------------------------------+
//|                                                    iFractals.mq4 |
//|                              Copyright © 2006, SOK.LiteForEx.Net |
//|                                         http://sok.liteforex.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, SOK.LiteForEx.Net"
#property link      "http://sok.liteforex.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0,217);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexEmptyValue(0, 0.0);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 218);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexEmptyValue(1, 0.0);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("iFractals");
   SetIndexLabel(0, "iFractalsUp");
   SetIndexLabel(1, "iFractalsDn");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
//----
     int limit;
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars > 0) 
         counted_bars--;
     limit = Bars - counted_bars;
  //---- основной цикл
     for(int i = 2; i < limit; i++)
       {
         ExtMapBuffer1[i] = iFractals(NULL, 0, MODE_UPPER, i);
         ExtMapBuffer2[i] = iFractals(NULL, 0, MODE_LOWER, i);
       }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
какое сравнение, для чего? код выше некорректный. Напиши конкретную цель(условия) для советника. По правильному направлению отправим
 

Цель сравнить последний up фрактал и предыдущий up фрактал и сравнить последний dn фрактал и предыдущий

Условие если lastUpFractal > UpFractal && lastLowFractal > lowFractal то buy

если lastUpFractal > UpFractal && lastLowFractal < lowFractal то перенос sl всех buy ордеров под последний LowFractal

 
запускаешь цикл и перебираешь все элементы верхнего и нижнего буфера фракталов, как найдешь первую пару не нулевых значений с обеих сторон, сравниваешь.
 
Друзья Посмотрите пожалуйста
expert3.mq4 |
//|                                            Copyright © 2010. |
//|                                                http://www.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link      "http://www.ru"
#include <MyLib.mqh>
extern int  MaxRisk=2;
extern int  TakeProfit=30;
extern int  StopLoss=100;
datetime Today=0;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int start()
{if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем
 if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят
//…проверим открытие новой свечи
 if(Time[0]==Today) return(0);
 Today=Time[0];
//…получим значение массивов
double ExtMapBuffer1[];
double ExtMapBuffer2[];
{
   int counted_bars = IndicatorCounted();
//----
     int limit;
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars > 0) 
         counted_bars--;
     limit = Bars - counted_bars;
  //---- основной цикл
     for(int i = 2; i < limit; i++)
       {
         ExtMapBuffer1[i] = iFractals(NULL, 0, MODE_UPPER, i);
         ExtMapBuffer2[i] = iFractals(NULL, 0, MODE_LOWER, i);
       }
//----
   return(0);
  }
 // В переменную IZZ записываем значение индикатора Зиг заг на предыдущей свечке.  
//…подсчитаем количество ордеров и перенесем стоплосс
 int oBuy=0,oSell=0;
 for(int Or=OrdersTotal()-1;i>=0;i--)// Цикл в котором перебираем все открытые сделки.
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Выбираем сделку с которой собираемся работать
     {if(OrderType()==OP_BUY)// Если эта сделка Бай, для неё следующие две строчки кода.
        {double f1=NormalizeDouble(iFractals(NULL,0,MODE_LOWER,3),Digits);
        /*в переменную f1 записываем значение нижнего фрактала. 
        И это значение округляем до определенного числа после запятой. 
        (цисло знаков после запятой в константе Digits)*/
         if(f1>0 && OrderStopLoss()<f1 && f1<Bid) EditOrder(OrderTicket(),f1);}/*Если переменная f1 < больше нуля и 
      Стоп Лос выбранного ордера меньше f1 и f1 меньше цены бид, 
      тогда наверное выставляем стоп лос на уровень ф1*/
      if(OrderType()==OP_SELL)// аналогично для сделки Селл
        {double f2=NormalizeDouble(iFractals(NULL,0,MODE_UPPER,3),Digits);
         if(f2>0 && OrderStopLoss()>f2 && f2>Ask) EditOrder(OrderTicket(),f2);}
      /*Здесь и строчкой ниже идет подсчет, мколько открыто сделок на Бай, сколько на Селл. 
      И количество записывается в переменные oBuy и oSell*/
      if(OrderType()==OP_BUY) oBuy++;
      if(OrderType()==OP_SELL) oSell++;}
//…откроем ордер по показанию fractals при отсутствии открытых
 if(oBuy+oSell==0)
   {
    while(iFractals(NULL,0,MODE_UPPER,i)==0&&iFractals(NULL,0,MODE_UPPER,i)==0) i++;
    double upF=iFractals(NULL,0,MODE_UPPER,i);
    double dnF=iFractals(NULL,0,MODE_LOWER,i);

    double Lot=GetLot(MaxRisk);
    if(Lot==0) {Alert("Недостаточно средств!");return(0);}
    double tp=0;
    double sl=0;
    if(ExtMapBuffer1[0]>ExtMapBuffer1[1])
      {sl=NormalizeDouble(upF+StopLoss*Point,Digits);
       if(TakeProfit>0) tp=NormalizeDouble(Bid-(sl-Bid)*TakeProfit,Digits);
       NewOrder(OP_BUY,Lot,0,tp,sl);}
    if(ExtMapBuffer2[0]<ExtMapBuffer2[1])
      {sl=NormalizeDouble(dnF+StopLoss*Point,Digits);
       if(TakeProfit>0) tp=NormalizeDouble(Bid-(sl-Bid)*TakeProfit,Digits);
       NewOrder(OP_BUY,Lot,0,tp,sl);}}
       return(0);}
       
//+------------------------------------------------------------------+
код что-то не так
 
amirs >>:
Друзья Посмотрите пожалуйста код что-то не так
Зачем мучаться? Есть готовые функции по фракталам у КimIV
Причина обращения: