public MSR(Bars bars, int period1, int period2, string description) public static MSRSeries(Bars bars, int period1, int period2,)
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators; using Community.Indicators;namespace WealthLab.Strategies { public class MSRStrategy : WealthScript { private StrategyParameter paramPer1; private StrategyParameter paramPer2; public MSRStrategy() { paramPer1 = CreateParameter("Period 1", 10, 2, 300, 1); paramPer2 = CreateParameter("Period 2", 20, 3, 300, 1); } protected override void Execute() { //MSR= (10-day median of (H, L, C) – 20-day MAX (H, L, C))/(20-day MAX (H, L, C)) //then take the 252-day percentrank of MSR or percentile ranking int per1 = paramPer1.ValueInt; int per2 = paramPer2.ValueInt; MSR msr = MSR.Series( Bars,per1,per2 ); ChartPane msrp = CreatePane( 30,true,true ); HideVolume(); PlotSeries( msrp, msr, Color.Blue, LineStyle.Solid, 2 ); PercentRank pr = PercentRank.Series(msr,252); PrcRank pc = PrcRank.Series(msr,252); ChartPane p = CreatePane( 30,true,true ); PlotSeries( p, pr, Color.Red, LineStyle.Solid, 2 ); PlotSeries( p, pc, Color.Blue, LineStyle.Solid, 2 ); DrawHorzLine( p, 0.5, Color.Red, LineStyle.Dashed, 1 ); for(int bar = 252; bar < Bars.Count; bar++) { if (IsLastPositionActive) { if( CrossUnder( bar, pr, 0.5d ) ) SellAtMarket( bar+1, LastPosition ); } else { if( CrossOver( bar, pr, 0.5d ) ) BuyAtMarket( bar+1 ); } } } } }