Percentage Price Oscillator (PPO)

Percentage Price Oscillator (PPO)

The percentage price oscillator (PPO) is a technical momentum indicator that shows the relationship between two moving averages. To calculate the PPO, subtract the 26-period exponential moving average (EMA) from the 12-period EMA, and then divide this difference by the 26-period EMA. The result is then multiplied by 100. The indicator tells the trader where the short-term average is relative to the longer-term average.


I am also attaching the MACD type version (it is very similar):

Share this

Risk disclosure:

No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.

ProRealTime ITF files and other attachments : How to import ITF files into ProRealTime platform?

New! PRC is also now on YouTube, subscribe to our channel for exclusive content and tutorials

  1. juanj • 195 days ago #

    Haven’t been on this forum for ages! Just logged in to see what is happening and since this caught my eye I decided to quickly write it into a strategy 🙂

    For some reason, the Add PRT Code doesn’t work so here is the unformatted code:

    //EURUSD 1Hr

    Defparam cumulateorders = False

    possize = 1
    SlowP = 26 //Periods of Slow Average
    FastP = 12 //Periods of Fast Average
    AvgType = 1 //Average Type (0=sma, 1=ema, 2=wma,…)
    Percentage = 1 //1=calculate Percentage 0=no percentage
    SignalP = 9 //Periods of Signal Average
    SlowP = max(1,min(999,SlowP)) //1 – 999
    FastP = max(1,min(999,FastP)) //1 – 999
    AvgType = max(0,min(6,AvgType)) //0 – 6
    Percentage = max(0,min(1,Percentage)) //1=Percentage 0=NO Percentage
    SignalP = max(1,min(999,FastP)) //1 – 999
    SlowAvg = Average[SlowP,AvgType](close)
    FastAvg = Average[FastP,AvgType](close)
    ppo = FastAvg – SlowAvg
    IF Percentage THEN
    ppo = (ppo / SlowAvg) * 100
    SignalLine = Average[SignalP,AvgType](ppo)
    Histo = Ppo – SignalLine

    If longonmarket and histo < 0 or ppo 0 or ppo > SignalLine Then
    Exitshort at market

    If ppo > 0 and signalLine SignalLine Then
    If shortonmarket Then
    Exitshort at market
    Buy possize contract at market
    ElsIf ppo 0 and ppo < SignalLine Then
    If longonmarket Then
    Sell at market
    Sellshort possize contract at market

  2. robertogozzi • 195 days ago #

    Welcome back Juanji, why don’t you post your strategy in the ProOrder support, it’s a better place to talk about strategies and improve them.
    Thank you.

Register or


avatar avatar avatar avatar avatar
Related users ' posts
1 month ago
4 months ago
robertogozzi Sorry for my late reply. I’ll make it and open a new topic quite soon.
swapping ah ah ! je n'avais pas vue celui-ci, excellent robert ;)
robertogozzi Thank you swapping.
Didouqc Bonjour Nicolas, Merci pour cet indicateur, encore génial! Je souhaite faire une suggest...
Tony87 on 200k test in the red untill 2017 then strong green
LancerX Please indicate the trade stat to show ave gain against average lost..
Jan Wind Thanks for sharing the strategy !. Did you do an Out of Sample run when testing on the 100k...
David Somogyi Hi, One year trades since Alpha running. Hopefully it w...
Nicolas Thanks for the update David!
sublime06 quelle parametre utilisé vous pour obtenir ces resultat ? merci
MaoRai54 Hi, first of all Happy New Year. Well, I've inserted your indicator in DAX 1h but I cann...
Vinks_o_7 Hi Mao Happy New Year ! This is just an improved RSI where you plot a standard price momen...
Nicolas Formule de l'indicateur Momentum: Le Momentum se calcule avec une simple soustraction pour ...
Roberto1 Hi, can this code be converted for the Nanotrader Platform or for the MT4 Platform?
Nicolas This website is dedicated for PRT programming, but you can still ask for private coding with...
Rafa when y try to code a simple screener let´s say signal cross over PMO, is not working and thi...
Rafa Hi Nicolas, Do you have any solution for this problem?
Nicolas Please add a request in proscreener section, much better to explain and understand your prob...
gabri Grazie, con ETF to consiglio anche uno screener basato su questa strategia https://www.pror...
Alex975 Grazie della dritta.. testerò il tutto.
guillermus69 is this " a= log(close/close[1])" better than a = ((close/close[1]) -1) *100 . I ...
haseluis Hello, who can help me why the screener does not work // Der folgende Code bezieht sich auf...
Nicolas Hello, please ask your question with a new forum topic, this is not the place to ask for sup...
Lotech123 Thanks for this indicator. Working on a 3 M timeframe with the DJI, it can produce some inte...
JSTAR PRODUCTIONS Hi there, I downloaded the Indicator but the indicator does not show up on my charts. Am...
JSTAR PRODUCTIONS Hi, Worked it out. Thanks
Jean-Pierre Poulain When I buy and when I sell ?
Nicolas The featured image of the post do not deserve the indicator you are right, I attached other ...
Nicolas It is described in the post already :) The BUY/SELL signals are quite similar of what you ca...
Marcot18 Save Nicolas, non ci riesco puoi postarmelo grazie.
Sumihiko Tachibana I need help to write this script on TD Ameritrade thinkorswim (TOS). How to make it work on...
Nicolas We do not offer free assistance for TOS. However, you can send demand for private paid codin...
finplus Thanks for the job. Which variables do you suggest for timeframe 1 hour? 
Maz Depends massively on your market and the volatility. I suggest using the variable optimizer ...
theproday @nicolas: Fantastic post thank you I was hoping you could also create the waves to be used...
Nicolas Please open a new topic in the ProBuilder forum and ask about it. Please provide as much det...
2 years ago
gatarayihajp Hi swingforfortune, Thanks a lot about your interesting posting. Let ask you to explain mor...
Swingforfortune Hello. Basically they are a twist of the MACD histogram and can be used as such. They visua...
gatarayihajp Hi again Thanks for the explanation. Have a good day
Nicolas All conditions under parenthesis for the c1 to c4 conditions should be inverted. 
tomus Can you give an example of the overbought codes please? Thanks.
ams123 Frank Merci Nicholas -:)
Wilko  Nice method of making linked AND-statements more readable!
Wilko And not only readable.... makes it much easier to iterate different entry/exit-conditions, d...
IGOSNELL Hi Interesting strategy, when I used $ M-R Dif EURUSD M15 Long if does not enter any positi...