Conversion de l’indicateur “Ichimoku Oscillator” pour PRT

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #249434 quote
    Gilou34
    Participant
    New

    Bonjour,

    Je souhaite utiliser l’indicateur “Ichimoku Oscillator” de Lonesome The Blue qui est en open source.

    Serait-il possible de convertir le code en pj en langage ProBuilder pour ProRealTime.

    En vous remerciant par avance.

    Gilles

    ICHIMOKU-Oscillator.txt
    #250084 quote
    Iván González
    Moderator
    Master

    voici:

    // ---------------------------------------------//
    // PRC_Ichimoku Oscillator (BY LonesomeTheBlue)
    //version = 0
    //26.08.2025
    //Iván González @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    // ---------------------------------------------//
    // --- PARÁMETROS CONFIGURABLES ---
    conversionPeriods = 8
    basePeriods = 13
    laggingSpan2Periods = 26
    displacement = 13
    useatr = 1
    atrlen = 9
    atrmul = 2.0
    bounceoff = 1
    useema = 1
    emalen = 9
    ematkpartprft = 1
    bgcolupI = 1 // 1=Verde, 2=Rojo, 3=Azul
    bgcoldnI = 3 // 1=Verde, 2=Rojo, 3=Azul
    bgtransp = 60
    
    // --- CÁLCULOS ICHIMOKU ---
    highestConv = HIGHEST[conversionPeriods](High)
    lowestConv = LOWEST[conversionPeriods](Low)
    conversionLine = (lowestConv + highestConv) / 2
    
    highestBase = HIGHEST[basePeriods](High)
    lowestBase = LOWEST[basePeriods](Low)
    baseLine = (lowestBase + highestBase) / 2
    
    leadLine1 = (conversionLine + baseLine) / 2
    
    highestLagging = HIGHEST[laggingSpan2Periods](High)
    lowestLagging = LOWEST[laggingSpan2Periods](Low)
    
    leadLine2 = (lowestLagging + highestLagging) / 2
    
    // --- CÁLCULO DEL OSCILADOR ---
    CloudMin = MIN(leadLine1[displacement - 1], leadLine2[displacement - 1])
    CloudMax = MAX(leadLine1[displacement - 1], leadLine2[displacement - 1])
    inthecloud = (close >= CloudMin AND close <= CloudMax)
    
    IF close > CloudMax THEN
    mtrend = 1
    ELSIF close < CloudMin THEN
    mtrend = -1
    ENDIF
    
    // CAPA 1: Oscline
    IF mtrend = 1 THEN
    Oscline = (close - CloudMin)
    ELSE
    Oscline = (close - CloudMax)
    ENDIF
    
    // CAPA 2: Lagging
    laggingComponent = 0
    IF mtrend = 1 THEN
    laggingComponent = MAX(close - CloudMax[displacement - 1], 0)
    ELSE
    laggingComponent = MIN(close - CloudMin[displacement - 1], 0)
    ENDIF
    Lagging = Oscline + laggingComponent
    
    // CAPA 3: Conversion/Base
    convBaseComponent = 0
    IF mtrend = 1 THEN
    convBaseComponent = MAX((conversionLine - baseLine), 0)
    ELSE
    convBaseComponent = MIN((conversionLine - baseLine), 0)
    ENDIF
    ConvBase = Lagging + convBaseComponent
    
    // CAPA 4: Cloud
    cloudComponent = 0
    IF mtrend = 1 THEN
    cloudComponent = MAX(leadLine1 - leadLine2, 0)
    ELSE
    cloudComponent = MIN(leadLine1 - leadLine2, 0)
    ENDIF
    cloud = ConvBase + cloudComponent
    
    // --- LÓGICA DE TENDENCIA ---
    anyofthemrising = (conversionLine > conversionLine[1]) OR (baseLine > baseLine[1])
    anyofthemfalling = (conversionLine < conversionLine[1]) OR (baseLine < baseLine[1])
    convoverbase = conversionLine >= baseLine
    baseoverconv = conversionLine <= baseLine
    tole = 0
    IF useatr = 1 THEN
    tole = AverageTrueRange[atrlen] * atrmul
    ENDIF
    
    IF mtrend = 1 THEN
    IF mtrend[1] = -1 THEN
    trend = 0
    ENDIF
    IF trend < 4 AND close > CloudMax THEN
    newTrend = 1
    IF Lagging > Oscline THEN
    newTrend = newTrend + 1
    ENDIF
    IF convoverbase AND anyofthemrising THEN
    newTrend = newTrend + 1
    ENDIF
    IF leadLine1 >= leadLine2 THEN
    newTrend = newTrend + 1
    ENDIF
    trend = newTrend - 1
    ELSIF conversionLine < baseLine - tole THEN
    trend = 0
    ENDIF
    ELSIF mtrend = -1 THEN
    IF mtrend[1] = 1 THEN
    trend = 0
    ENDIF
    IF trend > -4 AND close < CloudMin THEN
    newTrend = -1
    IF Lagging < Oscline THEN
    newTrend = newTrend - 1
    ENDIF
    IF baseoverconv AND anyofthemfalling THEN
    newTrend = newTrend - 1
    ENDIF
    IF leadLine1 <= leadLine2 THEN
    newTrend = newTrend - 1
    ENDIF
    trend = newTrend + 1
    ELSIF conversionLine > baseLine + tole THEN
    trend = 0
    ENDIF
    ENDIF
    
    IF trend = 3 AND trend[1] <> 3 THEN
    entrylevel = close
    ELSIF trend = -3 AND trend[1] <> -3 THEN
    entrylevel = close
    ENDIF
    
    // --- DIBUJO DE LAS ÁREAS DEL OSCILADOR CON COLORBETWEEN ---
    // CAPA 4: Cloud
    IF mtrend = 1 THEN
    rcap4 = 0
    gcap4 = 70
    bcap4 = 0
    ELSE
    rcap4 = 70
    gcap4 = 0
    bcap4 = 0
    ENDIF
    COLORBETWEEN(0, cloud, rcap4, gcap4, bcap4, 255)
    
    // CAPA 3: ConvBase
    IF conversionLine >= baseLine THEN
    rcap3 = 0
    gcap3 = 130
    bcap3 = 0
    ELSE
    rcap3 = 130
    gcap3 = 0
    bcap3 = 0
    ENDIF
    COLORBETWEEN(0, ConvBase, rcap3, gcap3, bcap3, 255)
    
    // CAPA 2: Lagging
    acap2 = 0 // alpha a 0 por defecto (transparente)
    IF close > CloudMax THEN
    rcap2 = 0
    gcap2 = 190
    bcap2 = 0
    acap2 = 255
    ELSIF close < CloudMin THEN
    rcap2 = 190
    gcap2 = 0
    bcap2 = 0
    acap2 = 255
    ENDIF
    IF acap2 > 0 THEN // Solo dibuja si hay color que aplicar
    COLORBETWEEN(0, Lagging, rcap2, gcap2, bcap2, acap2)
    ENDIF
    
    // CAPA 1: Oscline
    IF inthecloud THEN
    rcap1 = 209
    gcap1 = 212
    bcap1 = 220
    ELSIF close > CloudMax THEN
    rcap1 = 0
    gcap1 = 250
    bcap1 = 0
    ELSE // close < CloudMin
    rcap1 = 250
    gcap1 = 0
    bcap1 = 0
    ENDIF
    COLORBETWEEN(0, Oscline, rcap1, gcap1, bcap1, 255)
    
    // --- CÁLCULO DE SEÑALES ---
    closetrade = 0
    IF (trend <> trend[1]) AND (ABS(trend[1]) = 3) THEN
    IF trend[1] > 0 THEN
    closetrade = 1
    ELSE
    closetrade = -1
    ENDIF
    ENDIF
    
    uptrendSignal = 0
    downtrendSignal = 0
    IF trend = 3 AND trend[1] <> 3 THEN
    uptrendSignal = 1
    ENDIF
    IF trend = -3 AND trend[1] <> -3 THEN
    downtrendSignal = -1
    ENDIF
    
    bouncbackup = 0
    bouncbackdn = 0
    
    IF bounceoff = 1 THEN
    IF trend = 3 AND close > CloudMax AND inthecloud[1] THEN
    bouncbackup = 1
    ENDIF
    IF trend = -3 AND close < CloudMin AND inthecloud[1] THEN
    bouncbackdn = -1
    ENDIF
    ENDIF
    
    partclose = 0
    profitable = (trend = 3 AND close > entrylevel) OR (trend = -3 AND close < entrylevel)
    
    IF profitable THEN
    emaline = ExponentialAverage[emalen](cloud)
    basecrosscons = baseLine CROSSES UNDER conversionLine
    emacrosscloud = emaline CROSSES OVER cloud
    convcrossbase = conversionLine CROSSES OVER baseLine
    cloudcrossema = cloud CROSSES OVER emaline
    IF (trend = 3 AND basecrosscons) OR (trend = 3 AND emacrosscloud AND ematkpartprft=1) THEN
    partclose = 1
    ENDIF
    IF (trend = -3 AND convcrossbase) OR (trend = -3 AND cloudcrossema AND ematkpartprft=1) THEN
    partclose = -1
    ENDIF
    ENDIF
    
    // --- COLOR DE FONDO ---
    alphaBG = 100 - bgtransp
    uptmult = 159 + POW(trend, 3)
    dntmult = 159 + POW(ABS(trend), 3)
    rup = 0
    gup = 0
    bup = 0
    rdn = 0
    gdn = 0
    bdn = 0
    IF bgcolupI = 1 THEN
    gup = uptmult
    ELSIF bgcolupI = 2 THEN
    rup = uptmult
    ELSE
    bup = uptmult
    ENDIF
    IF bgcoldnI = 1 THEN
    gdn = dntmult
    ELSIF bgcoldnI = 2 THEN
    rdn = dntmult
    ELSE
    bdn = dntmult
    ENDIF
    IF trend > 0 THEN
    BACKGROUNDCOLOR(rup, gup, bup, alphaBG)
    ELSif trend < 0 then
    BACKGROUNDCOLOR(rdn, gdn, bdn, alphaBG)
    else
    BACKGROUNDCOLOR("grey", alphaBG)
    ENDIF
    
    // --- SALIDA DE DATOS ---
    emalineFinal = UNDEFINED
    IF useema = 1 THEN
    emalineFinal = ExponentialAverage[emalen](cloud)
    ENDIF
    
    RETURN emalineFinal AS "EMA", cloud coloured(rcap4,gcap4,bcap4), ConvBase coloured(rcap3,gcap3,bcap3), lagging coloured(rcap2,gcap2,bcap2), oscline coloured(rcap1,gcap1,bcap1)style(histogram)//, uptrendSignal AS "BuySignal", downtrendSignal AS "SellSignal", bouncbackup+bouncbackdn AS "AddSignal", closetrade AS "CloseSignal", partclose AS "PartialCloseSignal"
    
    robertogozzi thanked this post
    #250161 quote
    Gilou34
    Participant
    New

    Merci beaucoup Ivan, je n’ai pas encore utilisé l’indicateur et je vous ferai un retour apres usage.

    Encore Merci. Gilles.

    #250269 quote
    Gilou34
    Participant
    New

    Bonjour,

    J’ai  utilisé lindicateur traduit en PRT et le résultat est identique à l’original, cependant les symboles d’achat et de vente (totales ou partielles)  ne sont pas visibles. Ce serait parfait si vous pouviez les faire réapparaitre.

    Comme vous pouvez le voir sur le fichier joint, sur l’indicateur original il y a des triangles jaunes et blancs ainsi que des X (petits et grands) jaunes et blancs également mais vous pouvez choisir d’autres symboles et d’autres couleurs.

    En vous remerciant par avance.

    Gilou34.

    CBK_2025-09-02_12-54-44_b97f2.png CBK_2025-09-02_12-54-44_b97f2.png
Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.

Conversion de l’indicateur “Ichimoku Oscillator” pour PRT


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Gilou34 @gilou34 Participant
Summary

This topic contains 3 replies,
has 2 voices, and was last updated by Gilou34
6 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 08/06/2025
Status: Active
Attachments: 2 files
Logo Logo
Loading...