| Overall Statistics |
|
Total Trades 1831 Average Win 0.76% Average Loss -0.65% Compounding Annual Return -29.606% Drawdown 88.800% Expectancy -0.263 Net Profit -82.764% Sharpe Ratio -0.782 Probabilistic Sharpe Ratio 0.000% Loss Rate 66% Win Rate 34% Profit-Loss Ratio 1.17 Alpha -0.197 Beta -0.137 Annual Standard Deviation 0.278 Annual Variance 0.077 Information Ratio -1.094 Tracking Error 0.337 Treynor Ratio 1.582 Total Fees $0.00 Estimated Strategy Capacity $1300000.00 Lowest Capacity Asset AUDJPY 5O |
namespace QuantConnect
{
public class BootCampTask : QCAlgorithm
{
int period = 125;
int totalPairsToHold = 6; //Must be an even number, half will be held long, half short.
Dictionary<string, MomentumPercent> indicators = new Dictionary<string, MomentumPercent>();
decimal leverage = 5m;
public override void Initialize()
{
SetStartDate(2016, 6, 1);
SetEndDate(2021, 6, 1);
SetCash(100000);
string[] tickers = new string [18] { "USDCAD","EURJPY","EURUSD","EURCHF","USDCHF","EURGBP",
"GBPUSD","AUDCAD","NZDUSD","GBPCHF","AUDUSD","GBPJPY",
"USDJPY","CHFJPY","EURCAD","AUDJPY","EURAUD","AUDNZD" };
//SetBrokerageModel(BrokerageName.FxcmBrokerage);
foreach (string ticker in tickers)
{
AddForex(ticker, Resolution.Daily, Market.FXCM);
indicators.Add(ticker, MOMP(ticker, period, Resolution.Daily));
Securities[ticker].FeeModel = new ConstantFeeModel(0);
}
SetWarmup(period);
}
public override void OnData(Slice data)
{
if (IsWarmingUp) return;
List<string> gainers = indicators.Keys.OrderByDescending(x => indicators[x]).Take(totalPairsToHold / 2).ToList();
List<string> losers = indicators.Keys.OrderBy(x => indicators[x]).Take(totalPairsToHold / 2).ToList();
foreach (string ticker in indicators.Keys)
{
if (!gainers.Contains(ticker) && !losers.Contains(ticker))
{
if (Portfolio[ticker].Invested)
{
Liquidate(ticker);
}
}
}
foreach (string ticker in gainers)
{
if (!Portfolio[ticker].Invested)
{
SetHoldings(ticker, leverage / (decimal)totalPairsToHold);
}
}
foreach (string ticker in losers)
{
if (!Portfolio[ticker].Invested)
{
SetHoldings(ticker, -leverage / (decimal)totalPairsToHold);
}
}
}
}
}