| Overall Statistics |
|
Total Trades 1662 Average Win 0.82% Average Loss -0.70% Compounding Annual Return -26.383% Drawdown 87.000% Expectancy -0.236 Net Profit -78.432% Sharpe Ratio -0.654 Probabilistic Sharpe Ratio 0.000% Loss Rate 65% Win Rate 35% Profit-Loss Ratio 1.18 Alpha -0.165 Beta -0.226 Annual Standard Deviation 0.257 Annual Variance 0.066 Information Ratio -0.677 Tracking Error 0.267 Treynor Ratio 0.745 Total Fees $0.00 Estimated Strategy Capacity $1700000.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);
}
}
}
}
}