Трендовая по ЗигЗагу

Тема в разделе "Зиг-Заг. Системы с использованием ZigZag.", создана пользователем v2812, 11 янв 2011.

  1. v2812

    v2812 Новичок

    Здравствуйте!

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

    Написал индикатор, который рисует трендовые по системе Сперандео. Загвоздка в том, что он рисует несколько трендовых, а потом перестает рисовать... или пропускает вершины без видимой причины...

    Крутил код и так и так - посоветуйте, плиз, как сделать чтобы он рисовал неограниченное количество трендовых.


    //+------------------------------------------------------------------+
    //| ZZ Dinapoli trend 2.mq4 |
    //+------------------------------------------------------------------+
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Green
    #property indicator_width1 2
    //---- input parameters
    extern int barn=500;
    extern int Length=6;
    extern color color_trend_A = LightGreen;
    extern bool ray=true;
    extern bool AlertsOn = false;
    //---- buffers
    double ExtMapBuffer1[];
    double priceT[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //---- indicators
    SetIndexEmptyValue(0,0.0);
    //SetIndexDrawBegin(0, barn);
    SetIndexStyle(0,DRAW_SECTION);
    SetIndexBuffer(0,ExtMapBuffer1);
    SetIndexBuffer(0, priceT);
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    int start()
    {
    int counted_bars=IndicatorCounted();
    int shift,Swing,Swing_n,uzl,i,zu,zd,mv;
    double LL,HH,BH,BL,NH,NL;
    double Uzel[10000][3];
    string text;
    // loop from first bar to current bar (with shift=0)
    Swing_n=0;Swing=0;uzl=0;
    BH =High[barn];BL=Low[barn];zu=barn;zd=barn;

    for (shift=barn;shift>=0;shift--) {
    LL=10000000;HH=-100000000;
    for (i=shift+Length;i>=shift+1;i--) {
    if (Low< LL) {LL=Low;}
    if (High>HH) {HH=High;}
    }


    if (Low[shift]<LL && High[shift]>HH){
    Swing=2;
    if (Swing_n==1) {zu=shift+1;}
    if (Swing_n==-1) {zd=shift+1;}
    } else {
    if (Low[shift]<LL) {Swing=-1;}
    if (High[shift]>HH) {Swing=1;}
    }

    if (Swing!=Swing_n && Swing_n!=0) {
    if (Swing==2) {
    Swing=-Swing_n;BH = High[shift];BL = Low[shift];
    }
    uzl=uzl+1;
    if (Swing==1) {
    Uzel[uzl][1]=zd;
    Uzel[uzl][2]=BL;
    }
    if (Swing==-1) {
    Uzel[uzl][1]=zu;
    Uzel[uzl][2]=BH;
    }
    BH = High[shift];
    BL = Low[shift];
    }

    if (Swing==1) {
    if (High[shift]>=BH) {BH=High[shift];zu=shift;}}
    if (Swing==-1) {
    if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;}}
    Swing_n=Swing;
    }
    for (i=1;i<=uzl;i++) {
    //text=DoubleToStr(Uzel[1],0);
    //text=;
    mv=StrToInteger(DoubleToStr(Uzel[1],0));
    ExtMapBuffer1[mv]=Uzel[2];
    }

    double uroven1=High[1];
    double uroven2=Low[1];
    double price0=GetExtremumZZPrice("",0,0);
    int bar0=GetExtremumZZBar("",0,0);
    double price1=GetExtremumZZPrice("",0,1);
    int bar1=GetExtremumZZBar("",0,1);
    double price2=GetExtremumZZPrice("",0,2);
    int bar2=GetExtremumZZBar("",0,2);
    if (
    ((price0>price2)&&(price1<uroven1)&&(price0<price1))||
    ((price0<price2)&&(price1>uroven2)&&(price0>price1))
    )
    {
    ObjectCreate("trend_A"+i,OBJ_TREND,0,iTime(NULL,0,bar2),price2,iTime(NULL,0,bar0),price0);
    ObjectSet("trend_A"+i,OBJPROP_STYLE,STYLE_SOLID);
    ObjectSet("trend_A"+i,OBJPROP_WIDTH,2);
    ObjectSet("trend_A"+i,OBJPROP_COLOR,color_trend_A);
    ObjectSet("trend_A"+i, OBJPROP_RAY, ray);
    }

    //static datetime lt=0;

    //for (i=1;i<100;i++)
    //{ if(ExtMapBuffer1!=0)
    //{ if(lt!=Time)
    //{
    //for (int k=0; k<200; k++)
    //{
    double priceT=ObjectGetValueByShift("trend_A"+i, 1);
    double b=Close[1];
    double c=Low[1];
    double d=High[1];
    if ((c<priceT)&&(b>priceT)&&(AlertsOn==true))
    {
    Alert("Пересечение трендовой вверх... Do something:)");
    return;
    }
    if ((d>priceT)&&(b<priceT)&&(AlertsOn==true))
    {
    Alert("Пересечение трендовой вниз... Do something:)");
    return;
    }
    //}
    //}
    //}
    //lt=Time;
    //}

    return(0);
    }
    //+------------------------------------------------------------------+
    //+----------------------------------------------------------------------------+
    //| Возвращает экстремум ЗигЗага по его номеру. |
    //| Параметры: |
    //| sym - наименование инструмента ("" - текущий символ) |
    //| tf - таймфрейм ( 0 - текущий ТФ) |
    //| ne - номер экстремума ( 0 - текущий) |
    //| dp - ExtDepth |
    //| dv - ExtDeviation |
    //| bc - ExtBackstep |
    //+----------------------------------------------------------------------------+
    double GetExtremumZZPrice(string sym="", int tf=0, int ne=0, int barn=500, int Length=6) {
    if (sym=="") sym=Symbol();
    double zz;
    int i, k=iBars(sym, tf), ke=0;

    for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "Dinap_tar._zig_zag", barn, Length, 0, i);
    if (zz!=0) {
    ke++;
    if (ke>ne) return(zz);
    }
    }
    Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
    return(0);
    }

    //+----------------------------------------------------------------------------+
    //| Возвращает номер бара экстремума ЗигЗага по его номеру. |
    //| Параметры: |
    //| sym - наименование инструмента ("" - текущий символ) |
    //| tf - таймфрейм ( 0 - текущий ТФ) |
    //| ne - номер экстремума ( 0 - текущий) |
    //| dp - ExtDepth |
    //| dv - ExtDeviation |
    //| bc - ExtBackstep |
    //+----------------------------------------------------------------------------+
    int GetExtremumZZBar(string sym="", int tf=0, int ne=0, int barn=500, int Length=6) {
    if (sym=="") sym=Symbol();
    double zz;
    int i, k=iBars(sym, tf), ke=0;

    for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "Dinap_tar._zig_zag", barn, Length, 0, i);
    if (zz!=0) {
    ke++;
    if (ke>ne) return(i);
    }
    }
    Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
    return(0);
    }
     
  2. v2812

    v2812 Новичок

    Неужели ни кто не поможет?! Может я не в ту ветку написал, тогда хоть скажите где нужно было писать....
    Тут же многие участвовали в обсуждении метода "Сперандео"
     

Поделиться этой страницей