using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators;namespace WealthLab.Strategies { public class SecondCross : WealthScript { protected override void Execute() { int crossesThisMonth = 0; DataSeries crossNum = new DataSeries( Bars, "Crossunder count" ); SMA sma = SMA.Series( Close,50 ); PlotSeries( PricePane, sma, Color.Blue, LineStyle.Solid, 1 ); for(int bar = sma.FirstValidValue; bar < Bars.Count; bar++) { bool thisMonth = ( Date[bar].Month == Date[bar-1].Month ); if( thisMonth ) { if( CrossUnder( bar, Close, sma ) ) { SetBackgroundColor( bar, Color.FromArgb( 60, Color.Orange ) ); crossesThisMonth++; } } else crossesThisMonth = 0; crossNum[bar] = crossesThisMonth; } HideVolume(); ChartPane cPane = CreatePane( 30, true, true ); PlotSeries( cPane, crossNum, Color.Red, LineStyle.Histogram, 3 ); for(int bar = sma.FirstValidValue; bar < Bars.Count; bar++) { if (IsLastPositionActive) { //code your exit rules here CoverAtMarket( bar+1, LastPosition ); } else { if( ( crossNum[bar] == 2 ) && CrossUnder( bar, Close, sma ) ) ShortAtMarket( bar+1 ); } } } } }
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators;namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { int period = 20; DataSeries sma = SMA.Series(Close, period); DataSeries cross = new DataSeries(Bars, "Crossing=1"); for(int bar = sma.FirstValidValue; bar < Bars.Count; bar++) { if (CrossUnder(bar, Close, sma)) { cross[bar] = 1d; } } // Now here's the indicator that counts the crossings for the last rolling month (21 days of trading) DataSeries xingCount = Sum.Series(cross, 21); xingCount.Description = "CrossUnder count in last month"; // Plots the count and sma ChartPane cp = CreatePane(40, true, true); PlotSeries(cp, xingCount, Color.Blue, LineStyle.Histogram, 2); PlotSeries(PricePane, sma, Color.Green, LineStyle.Solid, 2); for(int bar = 50; bar < Bars.Count; bar++) { if (IsLastPositionActive) { /* Exit after N days */ Position p = LastPosition; if ( bar+1 - p.EntryBar >= 10 ) CoverAtMarket( bar+1, p, "Timed" ); } else { if( Close[bar] < SMA.Series( Close,50 )[bar] ) if( ( xingCount[bar] >= 2 ) && CrossUnder( bar, Close, sma ) ) ShortAtMarket( bar+1 ); } } } } }