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() { double Stop = 0; // Check for intraday data if ( Bars.IsIntraday ) { // Get daily bars SetScaleDaily(); Bars daily = Bars; RestoreScale(); daily = Synchronize( daily ); PlotSeries( PricePane, daily.Close, Color.Black, LineStyle.Dashed, 1 ); for(int bar = 20; bar < Bars.Count; bar++) { if( IsLastPositionActive ) { if ( Bars.IsLastBarOfDay( bar ) ) SellAtClose( bar, LastPosition, "At Close" ); else SellAtStop( bar+1, LastPosition, Stop, "Stop" ); } else { //if (Date[bar].Hour == 10) if ( Bars.IntradayBarNumber(bar) == 0 ) if (Open[bar] > daily.Close[bar-1]) if (Close[bar] > Open[bar]) if( BuyAtClose(bar) != null ) Stop = daily.Close[bar-1]; } } } else DrawLabel( PricePane, "For use on intraday data", Color.Red ); } } }
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators;namespace WealthLab.Strategies { public class SMADailyOnIntradayBasis : WealthScript { StrategyParameter _period; public SMADailyOnIntradayBasis() { _period = CreateParameter("Period", 20, 1, 100, 1); } public int FirstBarofDay(int startDay) { int cnt = 0; int firstBar = Bars.Count; for (int bar = 0; bar < Bars.Count; bar++) { if( Bars.IntradayBarNumber(bar) == 0 ) cnt++; if( cnt == startDay ) { firstBar = bar; break; } } return firstBar; } protected override void Execute() { SetScaleDaily(); DataSeries dailyCloses = Close; RestoreScale(); dailyCloses = Synchronize(dailyCloses); double daySum = 0d; int db = 0; bool isInitialized = false; int per = _period.ValueInt; // number of days for moving average // the "instantaneous" sma is the sum + Close of the current bar / period DataSeries sma = new DataSeries(Bars, "Daily SMA on Intraday Basis"); for (int bar = FirstBarofDay(per); bar < Bars.Count; bar++) { // On the first bar of the day, sum the previous per - 1 *day values* if( Bars.IntradayBarNumber(bar) == 0 ) { daySum = 0d; int stBar = bar - Bars.IntradayBarNumber(bar); // first bar of current day for (int n = 1; n < per; n++) { stBar--; // last intraday bar of a previous daySum += dailyCloses[stBar]; stBar -= Bars.IntradayBarNumber(stBar); // back to first bar of stBar day } } // Calculate the average for the contribution of the close of this bar sma[bar] = ( daySum + Close[bar] ) / per; } PlotSeries(PricePane, sma, Color.Blue, LineStyle.Solid, 2); // Compare it to the pure Daily SMA SetScaleDaily(); DataSeries smaDay = SMA.Series(Close, per); RestoreScale(); smaDay = Synchronize(smaDay); PlotSeries(PricePane, smaDay, Color.Black, LineStyle.Solid, 1); } } }
public class MyStrategy : WealthScript { public int GetTime(int bar) { return Date[bar].Hour * 100 + Date[bar].Minute; } protected override void Execute() { const int MarketClose = 1600; for(int bar = 20; bar < Bars.Count; bar++) { if (IsLastPositionActive) { Position p = LastPosition; if( bar < Bars.Count - 1 ) { if ( Bars.IsLastBarOfDay( bar+1 ) ) SellAtMarket( bar+1, p, "Mkt On Close" ); else SellAtStop( bar+1, p, p.EntryPrice * 0.97, "At stop" ); } // Is last bar of chart the second to the last bar of the day? else if (GetTime(bar) == MarketClose - Bars.BarInterval) SellAtMarket( bar+1, p, "Mkt On Close" ); } else { // Entry logic } } } }