Traduzione codice TMA+CG mladen NRP.mq4

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #248224 quote
    effegieffegi
    Participant
    Senior

    Salve, volevo chiedere la traduzione di questo codice di MT4.

    Mi interessava solo l’indicatore, senza la parte per il multitimeframe o gli alert

    File allegato, grazie in anticipo 🙂

    //+——————————————————————+
    //| TMA+CG.mq4 |
    //| mladen |
    //| arrowse coded acording to idea presented by rajiv |
    //+——————————————————————+
    #property copyright “rajivxxx”
    #property link “rajivxxx@gmail.com”

    #property description “edited by eevviill”
    #property description “no repaint”

    #property indicator_chart_window
    #property indicator_buffers 5
    #property indicator_color1 DimGray
    #property indicator_color2 Maroon
    #property indicator_color3 DarkBlue
    #property indicator_color4 Red
    #property indicator_color5 Blue
    #property indicator_style1 STYLE_DOT

    //

    extern string TimeFrame = “current time frame”;
    extern int HalfLength = 56;
    extern int Price = PRICE_WEIGHTED;
    extern double BandsDeviations = 1.618;
    extern bool Interpolate = true;
    extern bool alertsOn = false;
    extern bool alertsOnCurrent = false;
    extern bool alertsOnHighLow = false;
    bool alertsMessage = false;
    bool alertsSound = false;
    bool alertsEmail = false;

    //

    double tmBuffer[];
    double upBuffer[];
    double dnBuffer[];
    double wuBuffer[];
    double wdBuffer[];
    double upArrow[];
    double dnArrow[];

    //

    string IndicatorFileName;
    bool calculatingTma = false;
    bool returningBars = false;
    int timeFrame;

    //+——————————————————————+
    //| |
    //+——————————————————————+
    //

    int init()
    {
    timeFrame = stringToTimeFrame(TimeFrame);
    HalfLength = MathMax(HalfLength,1);
    IndicatorBuffers(7);
    SetIndexBuffer(0,tmBuffer); SetIndexDrawBegin(0,HalfLength);
    SetIndexBuffer(1,upBuffer); SetIndexDrawBegin(1,HalfLength);
    SetIndexBuffer(2,dnBuffer); SetIndexDrawBegin(2,HalfLength);
    SetIndexBuffer(3,dnArrow); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(5,242);
    SetIndexBuffer(4,upArrow); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(6,241);
    SetIndexBuffer(5,wuBuffer);
    SetIndexBuffer(6,wdBuffer);

    if (TimeFrame==”calculateTma”) { calculatingTma=true; return(0); }
    if (TimeFrame==”returnBars”) { returningBars=true; return(0); }

    IndicatorFileName = WindowExpertName();
    return(0);
    }
    int deinit() { return(0); }

    //+——————————————————————+
    //| |
    //+——————————————————————+
    //

    int start()
    {
    int counted_bars=IndicatorCounted();
    int i,limit;

    if(counted_bars<0) return(-1);
    if(counted_bars>0) counted_bars–;
    limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);

    if (returningBars) { tmBuffer[0] = limit; return(0); }
    if (calculatingTma) { calculateTma(limit); return(0); }
    if (timeFrame > Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,IndicatorFileName,”returnBars”,0,0)*timeFrame/Period()));

    //
    if(limit<Bars-20) limit=1;
    for(i = limit; i >= 0; i–)
    {

    int shift1 = iBarShift(NULL,timeFrame,Time[i]);
    datetime time1 = iTime (NULL,timeFrame,shift1);

    //

    tmBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,”calculateTma”,HalfLength,Price,BandsDeviations,0,shift1);
    upBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,”calculateTma”,HalfLength,Price,BandsDeviations,1,shift1);
    dnBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,”calculateTma”,HalfLength,Price,BandsDeviations,2,shift1);

    upArrow[i] = EMPTY_VALUE;
    dnArrow[i] = EMPTY_VALUE;
    if (High[i+1]>upBuffer[i+1] && Close[i+1]>Open[i+1] && Close[i]<Open[i]) upArrow[i] = High[i]+iATR(NULL,0,20,i);
    if ( Low[i+1]<dnBuffer[i+1] && Close[i+1]<Open[i+1] && Close[i]>Open[i]) dnArrow[i] = High[i]-iATR(NULL,0,20,i);

    if (timeFrame <= Period() || shift1==iBarShift(NULL,timeFrame,Time[i-1])) continue;
    if (!Interpolate) continue;

    //

    for(int n = 1; i+n < Bars && Time[i+n] >= time1; n++) continue;
    double factor = 1.0 / n;
    for(int k = 1; k < n; k++)
    {
    tmBuffer[i+k] = k*factor*tmBuffer[i+n] + (1.0-k*factor)*tmBuffer[i];
    upBuffer[i+k] = k*factor*upBuffer[i+n] + (1.0-k*factor)*upBuffer[i];
    dnBuffer[i+k] = k*factor*dnBuffer[i+n] + (1.0-k*factor)*dnBuffer[i];
    }
    }

    //

    if (alertsOn)
    {
    if (alertsOnCurrent)
    int forBar = 0;
    else forBar = 1;
    if (alertsOnHighLow)
    {
    if (High[forBar] > upBuffer[forBar] && High[forBar+1] < upBuffer[forBar+1]) doAlert(“high penetrated upper bar”);
    if (Low[forBar] < dnBuffer[forBar] && Low[forBar+1] > dnBuffer[forBar+1]) doAlert(“low penetrated lower bar”);
    }
    else
    {
    if (Close[forBar] > upBuffer[forBar] && Close[forBar+1] < upBuffer[forBar+1]) doAlert(“close penetrated upper bar”);
    if (Close[forBar] < dnBuffer[forBar] && Close[forBar+1] > dnBuffer[forBar+1]) doAlert(“close penetrated lower bar”);
    }
    }

    return(0);
    }

    //+——————————————————————+
    //| |
    //+——————————————————————+
    //

    void calculateTma(int limit)
    {
    int i,j,k;
    double FullLength = 2.0*HalfLength+1.0;

    //

    for (i=limit; i>=0; i–)
    {
    double sum = (HalfLength+1)*iMA(NULL,0,1,0,MODE_SMA,Price,i);
    double sumw = (HalfLength+1);
    for(j=1, k=HalfLength; j<=HalfLength; j++, k–)
    {
    sum += k*iMA(NULL,0,1,0,MODE_SMA,Price,i+j);
    sumw += k;

    if (j<=i)
    {
    sum += k*iMA(NULL,0,1,0,MODE_SMA,Price,i-j);
    sumw += k;
    }
    }
    tmBuffer[i] = sum/sumw;

    //

    double diff = iMA(NULL,0,1,0,MODE_SMA,Price,i)-tmBuffer[i];
    if (i> (Bars-HalfLength-1)) continue;
    if (i==(Bars-HalfLength-1))
    {
    upBuffer[i] = tmBuffer[i];
    dnBuffer[i] = tmBuffer[i];
    if (diff>=0)
    {
    wuBuffer[i] = MathPow(diff,2);
    wdBuffer[i] = 0;
    }
    else
    {
    wdBuffer[i] = MathPow(diff,2);
    wuBuffer[i] = 0;
    }
    continue;
    }

    //

    if(diff>=0)
    {
    wuBuffer[i] = (wuBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
    wdBuffer[i] = wdBuffer[i+1]*(FullLength-1)/FullLength;
    }
    else
    {
    wdBuffer[i] = (wdBuffer[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength;
    wuBuffer[i] = wuBuffer[i+1]*(FullLength-1)/FullLength;
    }
    upBuffer[i] = tmBuffer[i] + BandsDeviations*MathSqrt(wuBuffer[i]);
    dnBuffer[i] = tmBuffer[i] – BandsDeviations*MathSqrt(wdBuffer[i]);
    }
    }

    //+——————————————————————+
    //| |
    //+——————————————————————+
    //

    void doAlert(string doWhat)
    {
    static string previousAlert=””;
    static datetime previousTime;
    string message;

    //

    if (previousAlert!=doWhat || previousTime!=Time[0])
    {
    previousAlert = doWhat;
    previousTime = Time[0];

    message= StringConcatenate(Symbol(),” at “,TimeToStr(TimeLocal(),TIME_SECONDS),” THA : “,doWhat);
    if (alertsMessage) Alert(message);
    if (alertsEmail) SendMail(StringConcatenate(Symbol(),”TMA “),message);
    if (alertsSound) PlaySound(“alert2.wav”);
    }
    }

    //

    int stringToTimeFrame(string tfs)
    {
    for(int l = StringLen(tfs)-1; l >= 0; l–)
    {
    int tchar = StringGetChar(tfs,l);
    if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))
    tfs = StringSetChar(tfs, 1, tchar – 32);
    else
    if(tchar > -33 && tchar < 0)
    tfs = StringSetChar(tfs, 1, tchar + 224);
    }
    int tf=0;
    if (tfs==”M1″ || tfs==”1″) tf=PERIOD_M1;
    if (tfs==”M5″ || tfs==”5″) tf=PERIOD_M5;
    if (tfs==”M15″|| tfs==”15″) tf=PERIOD_M15;
    if (tfs==”M30″|| tfs==”30″) tf=PERIOD_M30;
    if (tfs==”H1″ || tfs==”60″) tf=PERIOD_H1;
    if (tfs==”H4″ || tfs==”240″) tf=PERIOD_H4;
    if (tfs==”D1″ || tfs==”1440″) tf=PERIOD_D1;
    if (tfs==”W1″ || tfs==”10080″) tf=PERIOD_W1;
    if (tfs==”MN” || tfs==”43200″) tf=PERIOD_MN1;
    if (tf==0 || tf<Period()) tf=Period();
    return(tf);
    }

    TMACG-mladen-NRP.mq4
    #248362 quote
    Iván GonzálezIván González
    Moderator
    Legend

    ecco qui:

    //--------------------------------------------//
    // PRC_TMA+CG
    // Version = 0
    // 18.06.2025
    // Translated by Iván González @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //--------------------------------------------//
    // Inputs
    //--------------------------------------------//
    halflength=56
    bandsDeviations=1.618
    src=WeightedClose
    //--------------------------------------------//
    // TMA and Bands Calculation
    //--------------------------------------------//
    fullLength=halflength*2+1
    
    if barindex<=halflength then
    tma=undefined
    upperband=undefined
    lowerband=undefined
    else
    
    tma=TriangularAverage[halflength](src)
    diff=src-tma
    
    if diff>=0 then
    wu=(wu[1]*(fullLength-1)+pow(diff,2))/fullLength
    wd=(wd[1]*(fullLength-1))/fullLength
    else
    wu=(wu[1]*(fullLength-1))/fullLength
    wd=(wd[1]*(fullLength-1)+pow(diff,2))/fullLength
    endif
    
    upperband=tma+bandsDeviations*sqrt(wu)
    lowerband=tma-bandsDeviations*sqrt(wd)
    endif
    //--------------------------------------------//
    return tma as "TMA"coloured(105,105,105)style(line,2), upperband as "Upperband" coloured(128,0,0)style(line), lowerband as "Lowerband" coloured(0,0,139)style(line)
    effegi thanked this post
    #248366 quote
    effegieffegi
    Participant
    Senior

    Grazie mille Ivan! Funziona perfettamente 🙂

Viewing 3 posts - 1 through 3 (of 3 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

Traduzione codice TMA+CG mladen NRP.mq4


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
effegi @effegi Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by effegieffegi
1 year, 3 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 06/12/2025
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...