| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
namespace QuantConnect
{
/*
* QuantConnect University: Full Basic Template:
*
* The underlying QCAlgorithm class is full of helper methods which enable you to use QuantConnect.
* We have explained some of these here, but the full algorithm can be found at:
* https://github.com/QuantConnect/Lean/tree/master/Algorithm
*/
public class BasicTemplateAlgorithm : QCAlgorithm
{
decimal oldMACD = 0;
bool first = true;
bool goingLong = false;
//Initialize the data and resolution you require for your strategy:
public override void Initialize()
{
//Start and End Date range for the backtest:
SetStartDate(2015, 1, 1);
SetEndDate(DateTime.Now.Date.AddDays(-1));
//Cash allocation
SetCash(25000);
MovingAverageConvergenceDivergence MACD;
//Add as many securities as you like. All the data will be passed into the event handler:
SetBrokerageModel(BrokerageName.FxcmBrokerage);
//AddForex("EURUSD", Resolution.Hour, Market.FXCM);
AddSecurity(SecurityType.Forex,"EURUSD", Resolution.Hour);
}
//Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol.
public void OnData(TradeBars data)
{
var macd = MACD("EUROUSD",12,26,9, MovingAverageType.Exponential);
// "TradeBars" object holds many "TradeBar" objects: it is a dictionary indexed by the symbol:
//
// e.g. data["MSFT"] data["GOOG"]
//(!Portfolio.HoldStock)
if (oldMACD ==0){
oldMACD = macd.Signal;
return;
}
if (first == true){
if(macd.Signal >= oldMACD){
goingLong = true;
first = false;
goLong(data);
return;
}else if(macd.Signal < oldMACD){
goingLong = false;
first = false;
goShort(data);
return;
}
}else if((macd.Signal >= oldMACD) & goingLong == false){
goingLong = true;
first = false;
goLong(data);
return;
}else if((macd.Signal < oldMACD) & goingLong == true){
goingLong = false;
first = false;
goShort(data);
return;
}
return;
}
public void goLong(TradeBars data){
Liquidate();
do
{
// nothing
} while (Portfolio.HoldStock);
MarketOrder("EUROUSD", (int)Math.Floor(Portfolio.Cash / data["EUROUSD"].Close));
}
public void goShort(TradeBars data){
Liquidate();
do
{
// nothing
} while (Portfolio.HoldStock);
MarketOrder("EUROUSD", -1*(int)Math.Floor(Portfolio.Cash / data["EUROUSD"].Close));
}
}
}