Conversión indicador Total Power Indicator

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #117635 quote
    cjr30
    Participant
    Master

    Buenas tardes,

    Llevo bastante tiempo intentando convertir este indicador a Prorealtime. Lo tengo tanto en mql4 como en Tradingview, pero soy incapaz, no salen los mismos resultados.

    El indicador Total Power se basa en dos indicadores estándar: Bears Power y Bulls Power.

    El indicador calcula el número de barras de tendencia alcista y bajista dentro de un cierto periodo de tiempo y luego determina una relación proporcional entre los osos, toros y el total de la barra actual (la relación total se calcula como la diferencia entre los toros y los osos).

    Por lo tanto, obtenemos las líneas continuas de la potencia media relativa alcista y bajista para un determinado periodo de tiempo sin el mayor inconveniente que los indicadores originales – la ausencia de perspectiva a largo plazo. El indicador Total Power fue creado por Daniel Fernandez .

    Parámetros de entrada:

    • LookbackPeriod (por defecto= 45) –  Determina el número de barras para el cálculo de prevalencia alcista/bajista.
    • PowerPeriod (por defecto = 10) – Bears Power y Bulls Power periodo original del indicador

    El indicador se presenta en dos versiones.

    Existen varias formas diferentes de utilizar este indicador:

    1. El método más fiable (aunque también el más lento) es esperar mientras las líneas alcistas (o bajistas en caso de venta) y Total Power indican 100 y luego abran una posición larga (o una corta si son la líneas bajistas).
    2. Trazos bajistas y alcistas pueden utilizarse también para el trading. En el caso de que la línea alcista se encuentre por encima una bajista después del cruce, entonces es momento de comprar, en caso de una situación inversa, se debe abrir una posición corta.
    3. Cruce de líneas alcista y bajista con una Total Power puede utilizarse tanto para el mercado de entrada como el de salida. Si la línea alcista cruza una Total desde abajo, es hora de abrir una posición larga, si la línea bajista cruza una Total desde abajo, se debe abrir una posición corta. Si las líneas cruzan una Total desde arriba, es el momento de cerrar la posición apropiada.
    4. La alternativa es utilizar algunos niveles definidos del indicador en lugar de los cruces de líneas. Por ejemplo, se puede abrir una posición en largo/corto, si la línea alcista/bajista se mueve por encima del nivel 66.

    Un saludo

    Adjunto tanto código de tradingview como mql4 y captura de imagen

    //@version=3
    // Copyright (c) 2018-present, Alex Orekhov (everget)
    // Total Power Indicator script may be freely distributed under the MIT license.
    study("Total Power Indicator", shorttitle="TPI")
    
    length = input(title="Length", type=integer, defval=45)
    powersLength = input(title="Elder Powers Length", type=integer, defval=10)
    adjustableLevel = input(title="Adjustable Entry Level", type=integer, defval=75)
    applyFilling = input(title="Apply Powers Filling ?", type=bool, defval=false)
    
    elderBullPower = high - ema(close, powersLength)
    elderBearPower = low - ema(close, powersLength)
    
    adjust(value) => 100 * value / length
    
    bullCount = sum(elderBullPower > 0 ? 1 : 0, length)
    bearCount = sum(elderBearPower < 0 ? 1 : 0, length)
    total = adjust(abs(bullCount - bearCount))
    bull = adjust(bullCount)
    bear = adjust(bearCount)
    
    bullPlot = plot(bull, title="Bull", linewidth=2, color=#0ebb23, transp=0)
    bearPlot = plot(bear, title="Bear", linewidth=2, color=red, transp=0)
    plot(total, title="Total", linewidth=2, color=#3c78d8, transp=0)
    
    fillColor = applyFilling ? (bull > bear ? #0ebb23 : red) : color(white, 100) 
    fill(bullPlot, bearPlot, color=fillColor, transp=80)
    
    hline(adjustableLevel, title="Adjustable Entry Level", linestyle=dotted)
    hline(50, title="Middle Level", linestyle=dotted, color=#f49517)
    
    #property indicator_separate_window
    #property indicator_minimum -20
    #property indicator_maximum 120
    #property indicator_buffers 3
    #property indicator_color1 LightSeaGreen
    #property indicator_color2 Crimson
    #property indicator_color3 DarkGreen
    
    extern int lookback_period = 45;
    extern int power_period = 10 ;
    
    //---- buffers
    double power[];
    double bearbuffer[];
    double bullbuffer[];
    
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- 2 additional buffers are used for counting.
       IndicatorBuffers(3);
    //---- indicator lines
       SetIndexStyle(0,DRAW_LINE, 1, 2);
       SetIndexBuffer(0, power);
       SetIndexStyle(1,DRAW_LINE, 1, 2);
       SetIndexBuffer(1, bearbuffer);
       SetIndexStyle(2,DRAW_LINE, 1, 2);
       SetIndexBuffer(2, bullbuffer);
       SetLevelValue (0, 0);  
       SetLevelValue (1, 50);  
       SetLevelValue (2, 100);  
    
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Net Power                                                      |
    //+------------------------------------------------------------------+
    int start()
      {
       int    i,k;
       
       int counted_bars=IndicatorCounted();
    //----
       if(Bars<= power_period) return(0);
    //---- initial zero
       if(counted_bars<1)
          for(i=1;i<=power_period;i++) power[Bars-i]=0.0;
    //----
       i=Bars-counted_bars-1;
     
     while (i >= 0) 
     
     {
     
     Comment("Implemented by Daniel Fernandez, Asirikuy.com 2011");
     
       int bearcount = 0 ;
    	int bullcount = 0 ;
    	
    	k = 0 ;
    	
    	while (k <= lookback_period - 1 ){
    	
    	double bear = iBearsPower(NULL,0,power_period, PRICE_CLOSE, k+i) ;
    	double bull = iBullsPower(NULL,0,power_period, PRICE_CLOSE, k+i) ;
    	
    	if (bear < 0 )
    	bearcount++ ;
    	
    	if (bull > 0 )
    	bullcount++ ;
    	
    	k++ ;
    	
    	}
    	
    	power[i] = MathAbs(bullcount-bearcount)*100/lookback_period  ;
    	bearbuffer[i] = bearcount*100/lookback_period  ;
    	bullbuffer[i] = bullcount*100/lookback_period  ;
       
     i-- ;
     
     }
     
       return(0);
    }
    #117713 quote
    Nicolas
    Keymaster
    Master

    Gracias por la publicación bien formateada sobre una traducción de código, agradezco el esfuerzo realizado 🙂 ¡Siempre es agradable encontrar personas que respetan reglas simples! Aquí está el código traducido para ser utilizado en ProRealTime:

    lookbackperiod = 45
    powerperiod = 10
    
    ema = exponentialaverage[powerperiod](close)
    BullPower = high - ema
    BearPower = low - ema
    
    bearcount = summation[lookbackperiod](bearpower<0)
    bullcount = summation[lookbackperiod](bullpower>0)
    
    power = Abs(bullcount-bearcount)*100/lookbackperiod
    bearbuffer = bearcount*100/lookbackperiod
    bullbuffer = bullcount*100/lookbackperiod
    
    return power coloured(32,178,170), bearbuffer coloured(220,20,60), bullbuffer coloured(0,100,0)
    #117720 quote
    cjr30
    Participant
    Master

    Muchísimas gracias Nicolas
    Tanto por tú amabilidad como por tú rapidez.

    Un saludo

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

Conversión indicador Total Power Indicator


ProBuilder: Indicadores y Herramientas

New Reply
Author
author-avatar
cjr30 @cjr30 Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by cjr30
6 years ago.

Topic Details
Forum: ProBuilder: Indicadores y Herramientas
Language: Spanish
Started: 01/23/2020
Status: Active
Attachments: 2 files
Logo Logo
Loading...