You are on page 1of 2

// OneNight w Moving Percentile, Setup and Ranking

using System;
using System.Collections.Generic;

using WealthLab.Core;
using WealthLab.Backtest;
using WealthLab.Indicators;

using finantic.Indicators;

namespace WealthScript2
{
public class MyStrategy : UserStrategyBase
{
public override void Initialize(BarHistory bars)
{
TR tr = new TR(bars);
movingPercentile = new MP(tr, lookback: 100, percentile:75);
cmf = new CMF(bars, 5);
}

public override void PreExecute(DateTime dt, List<BarHistory>


participants)
{
this.InitCandidates();
fillProbability = this.EstimateFillProbability(dt,
numOrdersIssued);
}

public override void Execute(BarHistory bars, int idx)


{
// Exit
foreach (var pos in OpenPositions) ClosePosition(pos,
OrderType.Market);
// Setup
if(cmf[idx] > -0.2) return;
// Ranking
double rank = -cmf[idx];
// Entry
double limit = bars.Close[idx] - movingPercentile[idx] * 0.7;
this.AddCandidate(rank, bars, TransactionType.Buy,
OrderType.Limit, limit);
}

public override void PostExecute(DateTime dt, List<BarHistory>


participants)
{
const int maxOpenPositions = 5; // 20% per Position
const int maxNumOrders = 30;
numOrdersIssued = this.PlaceCandidates(maxOpenPositions,
maxNumOrders,
numOpenPositions: 0, fillProbability);
}

// private variables
MP movingPercentile;
CMF cmf;

static int numOrdersIssued = 0;


static double fillProbability;
}
}

You might also like