using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators; namespace WealthLab.Strategies { public class MyStrategy : WealthScript { //StrategyParameter Stop; StrategyParameter Step; StrategyParameter PeakRange; StrategyParameter DeltaStop; StrategyParameter Mode; public MyStrategy() { //Stop = CreateParameter("Stop", 3000, 1000, 5000, 200); Step = CreateParameter("Step", 3000, 500, 4000, 100); DeltaStop = CreateParameter("DeltaStop", 0, 20, 700, 10); PeakRange = CreateParameter("PeakRange", 2700, 500, 4000, 100); Mode = CreateParameter("Mode", 0, -1, 1, 1); } protected override void Execute() { //double stoploss = Stop.Value; double stoploss = Step.Value + DeltaStop.Value; double StopPrice = 0; double TakePrice = 0; double price,LowestLow,HighestHigh; double delta; DataSeries Peaks = Peak.Series( High, PeakRange.ValueInt, PeakTroughMode.Value); DataSeries Troughs = Trough.Series( Low, PeakRange.ValueInt, PeakTroughMode.Value); //DataSeries HighestSeries = Highest.Series(High,Period.ValueInt); //DataSeries LowestSeries = Lowest.Series(Low,Period.ValueInt); double LastPeakSignalPrice = 0; double WorkingPeak = 0; double WorkingHigh = 0; double PeakSignalPrice = 0; bool SetShortOrderMode = false; double LastTroughSignalPrice = 0; double WorkingTrough = 0; double WorkingLow = 0; double TroughSignalPrice = 0; bool SetBuyOrderMode = false; double trailingStop; DataSeries PeakSignalPriceSeries = new DataSeries(Bars,"PeakSignalPriceSeries"); DataSeries TroughSignalPriceSeries = new DataSeries(Bars,"PeakSignalPriceSeries"); for(int bar = 20; bar < Bars.Count; bar++) { PeakSignalPriceSeries[bar] = Close[bar]; TroughSignalPriceSeries[bar] = Close[bar]; foreach( Position p in Positions ) { if ( p.Active ) { if (p.PositionType == PositionType.Short) { trailingStop = p.TrailingStop; if (Peaks[bar]!= WorkingPeak) if (p.TrailingStop > Peaks[bar]) trailingStop = Peaks[bar]; if (!Bars.IsLastBarOfDay(bar)) ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop"); } if (p.PositionType == PositionType.Long) { trailingStop = p.TrailingStop; if (Troughs[bar]!= WorkingTrough) if (p.TrailingStop < Troughs[bar]) trailingStop = Troughs[bar]; if (!Bars.IsLastBarOfDay(bar)) ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop"); } } } if (Mode.Value != 1) if (High[bar-1]>Peaks[bar-1]) { WorkingPeak = Peaks[bar-1]; if (WorkingHighLow[bar-1]) WorkingLow=Low[bar-1]; TroughSignalPrice = WorkingTrough + Step.Value; SetBuyOrderMode = true; } if ((SetBuyOrderMode)&&(LastTroughSignalPrice != TroughSignalPrice)) { Position p = null; if (!Bars.IsLastBarOfDay(bar-1)) { p = BuyAtStop(bar, TroughSignalPrice); TroughSignalPriceSeries[bar] = TroughSignalPrice; } if (p != null) { SetBuyOrderMode = false; LastTroughSignalPrice = TroughSignalPrice; trailingStop = p.EntryPrice - stoploss; ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop"); } } }//for PlotSeries( PricePane, Peaks, Color.Green, LineStyle.Dots, 3 ); PlotSeries( PricePane, Troughs, Color.Red, LineStyle.Dots, 3 ); PlotSeries( PricePane, PeakSignalPriceSeries, Color.Green, LineStyle.Solid, 1 ); PlotSeries( PricePane, TroughSignalPriceSeries, Color.Red, LineStyle.Solid, 1 ); } } }