Syntax
public DPO(WealthLab.DataSeries source, int period, string description)
public static WealthLab.Indicators.DPO Series(WealthLab.DataSeries source, int period)
Parameter Description
source |
Data series |
period |
Simple Moving Average period |
Description
The Detrended Price Oscillator (DPO) is an indicator that attempts to eliminate the trend in prices. Detrended prices allow you to more easily identify cycles and overbought/oversold levels.
Interpretation
Analyzing the shorter-term cycles inside of the longer-term cycles can be helpful in identifying turning points in the longer term cycle. Like other oscillators, the Detrended Price Oscillator can be used in different ways.
Calculation
DPO = Close – X-period Simple Moving Average [(X/2)+1 bars ago]
To construct the Detrended Price Oscillator, you need to choose the time span for your analysis. Cycles longer than this time period will be removed from prices, leaving the shorter-term cycles.
Example
The following example buys when the DPO crosses below -5, and exits after 3 bars:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
namespace WealthLab.Strategies
{
public class DPO_Demo : WealthScript
{
private StrategyParameter paramPeriod;
public DPO_Demo()
{
paramPeriod = CreateParameter("Period", 20, 4, 40, 2);
}
protected override void Execute()
{
int period = paramPeriod.ValueInt;
DPO dpo = DPO.Series( Close,period );
for(int bar = period; bar < Bars.Count; bar++)
{
if (IsLastPositionActive)
{
/* Simple time-based exit */
Position p = LastPosition;
if ( bar+1 - p.EntryBar >= 3 )
SellAtMarket( bar+1, p, "After 3 days" );
}
else
{
if( CrossUnder( bar, dpo, -5 ) )
BuyAtMarket( bar+1 );
}
}
ChartPane dpoPane = CreatePane( 40, true, true );
PlotSeries( dpoPane, dpo, Color.Blue, LineStyle.Solid, 1 );
HideVolume();
}
}
}