TASC 2007-11 | Short-Term Volume And Price Oscillator (SVAPO) (Vervoort)

Modified on 2016/06/29 15:59 by Eugene — Categorized as: TASC Traders Tips

Traders' Tip text

We've added Sylvain Vervoort's SVAPO indicator to the Wealth-Lab TASCIndicators library for easy reference in any strategy. Since Vervoot promises to discuss the use of SVAPO in a trading strategy with price targets in a follow-up article, for now we'll simply provide an example of WealthScript C# code that accesses the SVAPO indicator, which we use to calculate the upper and lower standard deviation bands per the article (Figure 1).

Image

Figure 1: SVAPO's "buy" signal for BA in March 2004 was timely indeed to catch the beginning of a significant move higher.

Strategy:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using TASCIndicators;

namespace WealthLab.Strategies { public class TASC200711 : WealthScript { private StrategyParameter paramPeriod; private StrategyParameter paramCutoff;

public TASC200711() { paramPeriod = CreateParameter("Period", 8, 1, 100, 1); paramCutoff = CreateParameter("Cutoff", 1, 0.1, 10, 0.1); } protected override void Execute() { int period = paramPeriod.ValueInt; double cutoff = paramCutoff.Value; double devH = 1.5; double devL = 1.3; int sdPeriod = 100; var svapo = SVAPO.Series( Bars, period, cutoff ); var sdUpper = StdDev.Series( svapo, sdPeriod, StdDevCalculation.Sample ) * devH; var sdLower = StdDev.Series( svapo, sdPeriod, StdDevCalculation.Sample ) * -devL; sdUpper.Description = "SVAPO Upper Band"; sdLower.Description = "SVAPO Lower Band"; HideVolume(); var SvapoPane = CreatePane( 35, false, false ); PlotSeries( SvapoPane, svapo, Color.Blue, LineStyle.Solid, 2 ); PlotSeriesFillBand(SvapoPane, sdUpper, sdLower, Color.Silver, Color.Transparent, LineStyle.Dotted, 2); DrawHorzLine( SvapoPane, 0, Color.Gray, LineStyle.Dotted, 2 ); for(int bar = GetTradingLoopStartBar(1); bar < Bars.Count; bar++) { if (IsLastPositionActive) { Position p = LastPosition; if ( CrossUnder( bar, svapo, sdUpper ) ) SellAtMarket( bar+1, p ); } else { if ( CrossOver( bar, svapo, sdLower ) ) BuyAtMarket( bar+1 ); } }

} } }

Robert Sucher
Re-created in C# by Eugene
Wealth-Lab team
www.wealth-lab.com