using QuantConnect.Indicators;
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data.Market;
using QuantConnect.Util;
namespace QuantConnect.Algorithm.CSharp
{
public class ForexAlgorithm : QCAlgorithm
{
public enum Decision { Long, Short, Neutral };
public const int length = 100;
// keep 5 of the last data points, max index of 4
public RollingWindow<TradeBar> History = new RollingWindow<TradeBar>(5);
// we want 3 decisions in a row to be the same
public RollingWindow<Decision> RecentDecisions = new RollingWindow<Decision>(2);
// define some indicators
public ExponentialMovingAverage EUREMA,GBPEMA,AUDEMA;
// these will hold the history of our indicators
public RollingWindow<decimal> EURHistory = new RollingWindow<decimal>(10);
public RollingWindow<decimal> AUDHistory = new RollingWindow<decimal>(10);
public RollingWindow<decimal> GBPHistory = new RollingWindow<decimal>(10);
//Initialize the data and resolution you require for your strategy:
public override void Initialize()
{
//Start and End Date range for the backtest:
SetStartDate(2013, 1, 1);
SetEndDate(DateTime.Now.Date.AddDays(-1));
//Cash allocation
SetCash(25000);
AddSecurity(SecurityType.Forex, "EURUSD", Resolution.Daily);
AddSecurity(SecurityType.Forex, "GBPUSD", Resolution.Daily);
AddSecurity(SecurityType.Forex, "AUDUSD", Resolution.Daily);
EUREMA = EMA("EURUSD", length,Resolution.Daily);
GBPEMA = EMA("GBPUSD", length, Resolution.Daily);
AUDEMA = EMA("AUDUSD", length, Resolution.Daily);
}
//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)
{
// Add the data from this time step to our rolling windows
if(data.ContainsKey("EURUSD"))
EURHistory.Add(data["EURUSD"].Close - EUREMA.Current.Price);
if (data.ContainsKey("AUDUSD"))
AUDHistory.Add(data["AUDUSD"].Close - AUDEMA.Current.Price);
if (data.ContainsKey("GBPUSD"))
GBPHistory.Add(data["GBPUSD"].Close - GBPEMA.Current.Price);
// wait for our history to be ready
if (!History.IsReady) return;
// start our analysis
Debug("GBP is %d" + GBPHistory[1]);
}
}
}