| Overall Statistics |
|
Total Trades 120 Average Win 0.18% Average Loss -0.04% Compounding Annual Return 6.262% Drawdown 8.700% Expectancy 2.301 Net Profit 35.548% Sharpe Ratio 0.841 Probabilistic Sharpe Ratio 31.147% Loss Rate 44% Win Rate 56% Profit-Loss Ratio 4.87 Alpha 0.045 Beta -0.003 Annual Standard Deviation 0.053 Annual Variance 0.003 Information Ratio -0.509 Tracking Error 0.165 Treynor Ratio -13.904 Total Fees $0.00 Estimated Strategy Capacity $1900000.00 Lowest Capacity Asset USDTRY 8G |
using System.Linq;
using NodaTime;
namespace QuantConnect
{
public class BootCampTask : QCAlgorithm
{
Dictionary<Symbol, string> symbols = new Dictionary<Symbol, string>();
string[] rateSymbols;
public override void Initialize()
{
SetStartDate(2016, 6, 1);
SetEndDate(2021, 6, 1);
SetCash(100000);
string[] tickers = {"USDEUR", "USDZAR", "USDAUD",
"USDJPY", "USDTRY", "USDINR",
"USDCNY", "USDMXN", "USDCAD"};
rateSymbols = new string[9] {"BCB/17900", // Euro Area
"BCB/17906", // South Africa
"BCB/17880", // Australia
"BCB/17903", // Japan
"BCB/17907", // Turkey
"BCB/17901", // India
"BCB/17899", // China
"BCB/17904", // Mexico
"BCB/17881"}; // Canada
for (int i = 0; i < tickers.Length; i++)
{
Symbol symbol = AddForex(tickers[i], Resolution.Daily, Market.Oanda).Symbol;
AddData<QuandlRate>(rateSymbols[i], Resolution.Daily, DateTimeZone.Utc, true);
symbols.Add(symbol, rateSymbols[i]);
}
Schedule.On(DateRules.MonthStart("USDEUR"), TimeRules.AfterMarketOpen("USDEUR"), Rebalance);
}
public void Rebalance()
{
List<Symbol> sortedSymbols = symbols.Keys.OrderBy(x => Securities[symbols[x]].Price).ToList();
if (Securities[sortedSymbols.First()].Price != 0 && Securities[sortedSymbols.Last()].Price != 0)
{
SetHoldings(sortedSymbols.First(), -0.5);
SetHoldings(sortedSymbols.Last(), 0.5);
}
}
public override void OnData(Slice data)
{
}
public class QuandlRate : Quandl
{
public QuandlRate() : base(valueColumnName: "Value")
{
}
}
}
}