Psychological Index: Indicator Documentation
Syntax
DataSeries PsychIndex(Bars bars, int period)
Parameter Description
bars |
A Bars object |
period |
Lookback period |
Description
The Psychological Index is an overbought/oversold indicator described in the June 2000 Futures Magazine. The article described the standard lookback period as 12 bars with a level of 75% or higher being an indication of an overbought market and 25% or lower being an oversold market.
Example
A system in this example is always in the market. It goes long and short by the Psychological Index's readings:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using Community.Indicators;
namespace WealthLab.Strategies
{
// Psychological Index
public class PsychIndex : WealthScript
{
private StrategyParameter paramLookback;
private StrategyParameter paramUpper;
private StrategyParameter paramLower;
public PsychIndex()
{
paramLookback = CreateParameter( "Lookback", 12, 3, 30, 1 );
paramUpper = CreateParameter( "Upper", 75, 0, 100, 1 );
paramLower = CreateParameter( "Lower", 25, 0, 100, 1 );
}
protected override void Execute()
{
int Lookback = paramLookback.ValueInt;
int Upper = paramUpper.ValueInt;
int Lower = paramLower.ValueInt;
PsychologicalIndex pi = PsychologicalIndex.Series( Bars, Lookback );
pi.Description = "Psychological Index";
ChartPane PsychIndexPane = CreatePane( 25, true, true );
PlotSeries( PsychIndexPane, pi, Color.Green, LineStyle.Solid, 2 );
DrawHorzLine( PsychIndexPane, Upper, Color.Blue, LineStyle.Solid, 2 );
DrawHorzLine( PsychIndexPane, Lower, Color.Red, LineStyle.Solid, 2 );
for(int bar = Lookback; bar < Bars.Count; bar++)
{
if ( Positions.Count == 0 )
{
if ( pibar <= Lower )
BuyAtMarket( bar+1 ); else
if( pibar >= Upper )
ShortAtMarket( bar+1 );
}
else
{
Position p = LastPosition;
if( p.PositionType == PositionType.Long )
{
if( pibar >= Upper )
{
SellAtMarket( bar+1, p );
ShortAtMarket( bar+1 );
}
} else
if ( pibar <= Lower )
{
CoverAtMarket( bar+1, p );
BuyAtMarket( bar+1 );
}
}
}
}
}
}