| Overall Statistics |
|
Total Trades 582 Average Win 7.59% Average Loss -6.26% Compounding Annual Return 180.022% Drawdown 51.100% Expectancy 0.216 Net Profit 1987.013% Sharpe Ratio 1.307 Loss Rate 45% Win Rate 55% Profit-Loss Ratio 1.21 Alpha 1.014 Beta -0.101 Annual Standard Deviation 0.772 Annual Variance 0.596 Information Ratio 1.221 Tracking Error 0.782 Treynor Ratio -9.943 Total Fees $73443.36 |
using MathNet.Numerics;
namespace QuantConnect
{
public class BasicTemplateAlgorithm : QCAlgorithm
{
public string pair1 = "GBPUSD";
RollingWindow<TradeBar> window;
const int WL = 10;
double entryPrice = 0;
int holdHours = 0;
bool Long = false;
bool hasTraded = false;
BollingerBands bb;
public override void Initialize()
{
SetStartDate(2014,01,01);
SetEndDate(2016, 12, 12);
SetBrokerageModel(BrokerageName.FxcmBrokerage);
//SetBrokerageModel(BrokerageName.OandaBrokerage);
SetCash(10000);
window = new RollingWindow<TradeBar>(WL);
//AddForex(pair1, Resolution.Minute, Market.Oanda);
AddForex(pair1, Resolution.Hour, Market.FXCM);
bb = BB(pair1, WL, 2.2M, MovingAverageType.Simple, Resolution.Hour);
}
public void OnData(TradeBars data) {
window.Add(data[pair1]);
if(!window.IsReady) return;
if(data[pair1].Time.Hour == 1){
hasTraded = false;
}
var close = (double)data[pair1].Close;
// Entry
if(data[pair1].Time.Hour > 4 && data[pair1].Time.Hour <= 10
&& !Portfolio.Invested && !hasTraded){
if(close > bb.UpperBand){
SetHoldings(pair1, 50);
holdHours = 0;
Long = true;
hasTraded = true;
entryPrice = close;
}
if(close < bb.LowerBand){
SetHoldings(pair1, -50);
holdHours = 0;
Long = false;
hasTraded = true;
entryPrice = close;
}
}
// Exit
if(Portfolio.Invested){
// Take profit
if(Long && close > entryPrice +0.00080)
Liquidate();
if(!Long && close < entryPrice -0.00080)
Liquidate();
// Stop loss
if(Long && close < entryPrice - 0.00180)
Liquidate();
if(!Long && close > entryPrice + 0.00180)
Liquidate();
// Timed exit
holdHours++;
if(holdHours > 5)
Liquidate();
}
}
}
}