codage cycle identifier

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #213344 quote
    ARLEQUIN49ARLEQUIN49
    Participant
    Veteran

    Bonjour,

    j’aurais besoin d’aide pour transcrire le code de cet indicateur CYCLE IDENTIFIER qui identifie précocement les retournements existant sur Metatrader 4.

    voici le code:

    //+——————————————————————+
    //| CycleIdentifier.mq4 |
    // |
    //+——————————————————————+
    #property copyright “”
    #property link “”

    #property indicator_separate_window
    #property indicator_buffers 6
    #property indicator_color1 DarkGray

    #property indicator_color2 Lime
    #property indicator_color3 Red
    #property indicator_color4 DarkGreen
    #property indicator_color5 Brown

    #property indicator_minimum -1.2
    #property indicator_maximum 1.2

    extern int PriceActionFilter=1;
    extern int Length=3;
    extern int MajorCycleStrength=4;
    extern bool UseCycleFilter=false;
    extern int UseFilterSMAorRSI=1;
    extern int FilterStrengthSMA=12;
    extern int FilterStrengthRSI=21;

    double LineBuffer[];
    double MajorCycleBuy[];
    double MajorCycleSell[];
    double MinorCycleBuy[];
    double MinorCycleSell[];
    double ZL1[];

    double CyclePrice = 0.0, Strength =0.0, SweepA = 0.0, SweepB = 0.0;
    int Switch = 0, Switch2 = 0, SwitchA = 0, SwitchB = 0, SwitchC = 0, SwitchD = 0, SwitchE = 0, SwitchAA = 0, SwitchBB = 0;
    double Price1BuyA = 0.0, Price2BuyA = 0.0;
    int Price1BuyB = 1.0, Price2BuyB = 1.0;
    double Price1SellA = 0.0, Price2SellA = 0.0;
    int Price1SellB = 0.0, Price2SellB = 0.0;
    bool ActiveSwitch = True, BuySwitchA = FALSE, BuySwitchB = FALSE, SellSwitchA = FALSE, SellSwitchB = FALSE;
    int BuySellFac = 01;
    bool Condition1, Condition2, Condition3, Condition6;

    int init() {
    SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
    SetIndexBuffer(0,LineBuffer);

    SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
    SetIndexBuffer(1,MajorCycleBuy);

    SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
    SetIndexBuffer(2,MajorCycleSell);

    SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
    SetIndexBuffer(3,MinorCycleBuy);

    SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
    SetIndexBuffer(4,MinorCycleSell);

    SetIndexStyle(5,DRAW_NONE);
    SetIndexBuffer(5,ZL1);

    SetIndexEmptyValue(1,0.0);
    SetIndexEmptyValue(2,0.0);
    SetIndexEmptyValue(3,0.0);
    SetIndexEmptyValue(4,0.0);
    SetIndexEmptyValue(5,0.0);
    return(0);
    }

    int deinit() {return(0);}

    int start() {
    int counted_bars=IndicatorCounted();
    if(counted_bars<0) return(-1);
    // if(counted_bars>0) counted_bars–;
    // int position=Bars-1;
    int position=Bars-counted_bars;
    if (position<0) position=0;

    int rnglength = 250;
    double range = 0.0, srange = 0.0;
    for (int pos = position; pos >=0; pos–)
    {
    srange = 0.0;
    int j = 0;
    for (int i=0;i<rnglength;i++)
    {
    j++;
    int posr = pos + i;
    if (posr >= Bars)
    break;

    srange = srange + (High[posr] – Low[posr]);
    }
    range = srange / j * Length;
    int BarNumber = Bars-pos; //??????????
    if (BarNumber < 0)
    BarNumber = 0;

    CyclePrice = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);

    if (UseFilterSMAorRSI == 1)
    ZL1[pos] = ZeroLag(CyclePrice,FilterStrengthSMA, pos);
    if (UseFilterSMAorRSI == 2)
    ZL1[pos] = ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);

    if (ZL1[pos] > ZL1[pos+1])
    SwitchC = 1;
    if (ZL1[pos] < ZL1[pos+1])
    SwitchC = 2;

    if (BarNumber <= 1)
    {
    if (Strength == 0)
    SweepA = range;
    else
    SweepA = Strength;
    Price1BuyA = CyclePrice;
    Price1SellA = CyclePrice;
    }

    /* ***************************************************************** */

    if (BarNumber > 1)
    {
    if (Switch > -1)
    {
    if (CyclePrice < Price1BuyA)
    {

    if (UseCycleFilter && (SwitchC == 2) && BuySwitchA )
    {
    MinorCycleBuy[pos + BarNumber – Price1BuyB] = 0; //MinorBuySell
    LineBuffer[pos + BarNumber – Price1BuyB ] = 0; //line
    }

    if (!UseCycleFilter && BuySwitchA)
    {
    MinorCycleBuy[pos +BarNumber – Price1BuyB] = 0;
    LineBuffer[pos +BarNumber – Price1BuyB] = 0;
    }
    Price1BuyA = CyclePrice;
    Price1BuyB = BarNumber;
    BuySwitchA = TRUE;
    }
    else if (CyclePrice > Price1BuyA)
    {

    SwitchA = BarNumber – Price1BuyB;

    if (!UseCycleFilter)
    {
    MinorCycleBuy[pos +SwitchA] = -1;//MinorBuySell – DarkGreen
    LineBuffer[pos +SwitchA] = -1;//line
    }

    if (UseCycleFilter && SwitchC == 1)
    {
    MinorCycleBuy[pos +SwitchA] = -1; //MinorBuySell
    LineBuffer[pos +SwitchA] = -1; //line
    SwitchD = 1;
    }
    else
    {
    SwitchD = 0;
    }

    BuySwitchA = TRUE;

    double cyclePrice1 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
    if (ActiveSwitch)
    {
    Condition1 = CyclePrice – cyclePrice1 >= SweepA;
    }
    else
    {
    Condition1 = CyclePrice >= cyclePrice1 * (1 + SweepA / 1000);
    }
    if (Condition1 && SwitchA >= BuySellFac)
    {
    Switch = – 1;
    Price1SellA = CyclePrice;
    Price1SellB = BarNumber;
    SellSwitchA = FALSE;
    BuySwitchA = FALSE;
    }
    }
    }
    if(Switch < 1)
    {
    if (CyclePrice > Price1SellA)
    {
    if (UseCycleFilter && SwitchC == 1 && SellSwitchA )
    {
    MinorCycleSell[pos +BarNumber – Price1SellB] = 0; //MinorBuySell
    LineBuffer[pos +BarNumber – Price1SellB ] = 0; //line
    }
    if (!UseCycleFilter && SellSwitchA )
    {
    MinorCycleSell[pos +BarNumber – Price1SellB] = 0;//MinorBuySell
    LineBuffer[pos +BarNumber – Price1SellB] = 0;//line
    }
    Price1SellA = CyclePrice;
    Price1SellB = BarNumber;
    SellSwitchA = TRUE;
    }
    else if (CyclePrice < Price1SellA)
    {
    SwitchA = BarNumber – Price1SellB;
    if (!UseCycleFilter)
    {
    MinorCycleSell[pos +SwitchA] = 1; // MinorBuySell darkRed
    LineBuffer[pos +SwitchA] = 1; //”CycleLine”
    }
    if (UseCycleFilter && (SwitchC == 2))
    {
    MinorCycleSell[pos +SwitchA] = 1;//MinorBuySell darkRed
    LineBuffer[pos +SwitchA] = 1;//CycleLine
    SwitchD = 2;
    }
    else
    SwitchD = 0;

    SellSwitchA = TRUE;
    double cyclePrice2 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);

    if (ActiveSwitch)
    Condition1 = (cyclePrice2 – CyclePrice) >= SweepA;
    else
    Condition1 = CyclePrice <= (cyclePrice2 * (1 – SweepA / 1000));

    if (Condition1 && SwitchA >= BuySellFac)
    {
    Switch = 1;
    Price1BuyA = CyclePrice;
    Price1BuyB = BarNumber;
    SellSwitchA = FALSE;
    BuySwitchA = FALSE;
    }
    }
    }
    }

    LineBuffer[pos] = 0;
    MinorCycleBuy[pos] = 0;
    MinorCycleSell[pos] = 0;

    if (BarNumber == 1)
    {
    if (Strength == 0)
    SweepB = range * MajorCycleStrength;
    else
    SweepB = Strength * MajorCycleStrength;

    Price2BuyA = CyclePrice;
    Price2SellA = CyclePrice;
    }

    if (BarNumber > 1)
    {
    if (Switch2 > – 1)
    {
    if (CyclePrice < Price2BuyA)
    {
    if (UseCycleFilter && SwitchC == 2 && BuySwitchB )
    {
    MajorCycleBuy [pos +BarNumber – Price2BuyB] = 0; //MajorBuySell,green
    // LineBuffer[pos + BarNumber – Price2BuyB ] = 0; //line —–
    }
    if (!UseCycleFilter && BuySwitchB )
    {
    MajorCycleBuy [pos +BarNumber – Price2BuyB] = 0;//MajorBuySell,green
    // LineBuffer[pos + BarNumber – Price2BuyB ] = 0; //line———–
    }
    Price2BuyA = CyclePrice;
    Price2BuyB = BarNumber;
    BuySwitchB = TRUE;
    }
    else if (CyclePrice > Price2BuyA)
    {
    SwitchB = BarNumber – Price2BuyB;

    if (!UseCycleFilter)
    {
    MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
    // LineBuffer[pos + SwitchB] = -1; //line————–
    }
    if (UseCycleFilter && SwitchC == 1)
    {
    MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
    // LineBuffer[pos + SwitchB] = -1; //line—————–
    SwitchE = 1;
    }
    else
    SwitchE = 0;

    BuySwitchB = TRUE;
    double cyclePrice3 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
    if (ActiveSwitch)
    Condition6 = CyclePrice – cyclePrice3 >= SweepB;
    else
    Condition6 = CyclePrice >= cyclePrice3 * (1 + SweepB / 1000);

    if (Condition6 && SwitchB >= BuySellFac)
    {
    Switch2 = – 1;
    Price2SellA = CyclePrice;
    Price2SellB = BarNumber;
    SellSwitchB = FALSE;
    BuySwitchB = FALSE;
    }
    }
    }

    if (Switch2 < 1)
    {
    if (CyclePrice > Price2SellA )
    {
    if (UseCycleFilter && SwitchC == 1 && SellSwitchB )
    {
    MajorCycleSell [pos +BarNumber – Price2SellB] = 0; //”MajorBuySell”,red
    // LineBuffer[pos + BarNumber – Price2SellB ] = 0; //line —–
    }
    if (!UseCycleFilter && SellSwitchB )
    {
    MajorCycleSell [pos +BarNumber – Price2SellB] = 0;//”MajorBuySell”,red
    // LineBuffer[pos + BarNumber – Price2SellB ] = 0; //line —–
    }
    Price2SellA = CyclePrice;
    Price2SellB = BarNumber;
    SellSwitchB = TRUE;
    }
    else if (CyclePrice < Price2SellA)
    {
    SwitchB = BarNumber – Price2SellB ;

    if (!UseCycleFilter)
    {
    MajorCycleSell[pos + SwitchB] = 1; //”MajorBuySell”,red
    // LineBuffer[pos + SwitchB ] = 1; //line —–
    }
    if (UseCycleFilter && SwitchC == 2)
    {
    MajorCycleSell [pos + SwitchB] = 1; //”MajorBuySell”,red
    // LineBuffer[pos + SwitchB ] = 1; //line —–
    SwitchE = 2;
    }
    else
    SwitchE = 0;

    SellSwitchB = TRUE;
    double cyclePrice4 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
    if (ActiveSwitch)
    Condition6 = cyclePrice4 – CyclePrice >= SweepB;
    else
    Condition6 = CyclePrice <= cyclePrice4 * (1.0 – SweepB / 1000.0);

    if (Condition6 && SwitchB >= BuySellFac)
    {
    Switch2 = 1;
    Price2BuyA = CyclePrice;
    Price2BuyB = BarNumber;
    SellSwitchB = FALSE;
    BuySwitchB = FALSE;
    }
    }
    }
    }
    LineBuffer[pos] = 0;
    MajorCycleSell[pos] = 0;
    MajorCycleBuy[pos] = 0;
    }
    return(0);
    }

    double ZeroLag(double price, int length, int pos)
    {
    if (length < 3)
    {
    return(price);
    }
    double aa = MathExp(-1.414*3.14159 / length);
    double bb = 2*aa*MathCos(1.414*180 / length);
    double CB = bb;
    double CC = -aa*aa;
    double CA = 1 – CB – CC;
    double CD = CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
    return(CD);
    }

    CYCLE-IDENTIFIER.jpg CYCLE-IDENTIFIER.jpg
    #213390 quote
    NicolasNicolas
    Keymaster
    Legend

    Cet indicateur est connu pour repeindre le passé, donc les signaux de l’historique ne sont pas ceux obtenus en réel. Je suis désolé.

Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

codage cycle identifier


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
ARLEQUIN49 @arlequin49 Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by NicolasNicolas
3 years, 5 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 04/16/2023
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...