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
using NodaTime;

namespace QuantConnect
{
	
	
    /// <summary>
    /// Daily Fx demonstration to call on and use the FXCM Calendar API
    /// </summary>
    public class FxDaily : QCAlgorithm
    {
    	Dictionary<Symbol, StandardDeviation> Vol= new Dictionary<Symbol, StandardDeviation>() ;
        string[] _tickers = { "EURUSD", "USDJPY", "USDCHF", "GBPUSD",  "USDCAD", "AUDUSD"};
        List<Symbol> _symbols = new List<Symbol>();
        public int signal = 0;



        /// <summary>
        /// Add the Daily FX type to our algorithm and use its events.
        /// </summary>
        public override void Initialize()
        {
            SetStartDate(2016, 1, 1);  //Set Start Date
            SetEndDate(2017, 3, 30);    //Set End Date
            SetCash(100000);             //Set Strategy Cash
            
            AddData<DailyFx>("DFX", Resolution.Minute, DateTimeZone.Utc);
            
            foreach (var ticker in _tickers)
            {
                _symbols.Add(AddForex(ticker, market: Market.Oanda).Symbol);
                var symbol = _symbols.Last();
                Vol[symbol]= STD(symbol, 24, Resolution.Hour);
            }
            
            SetBrokerageModel(BrokerageName.OandaBrokerage);
            
        }

        public override void OnData(Slice slice)
        {
            // RiskManager.UpdateTrailingStopOrders();
        }

        /// <summary>
        /// Trigger an event on a complete calendar event which has an actual value.
        /// </summary>
        public void OnData(DailyFx calendar)
        {
        	// We only want to trade the news of all others currencies against USD. 
        	if (calendar.Currency.ToUpper() == "USD") return;
            // The algorithm only uses meaningful and important news/announcements.
            if (calendar.Importance == FxDailyImportance.High
                && calendar.Meaning != FxDailyMeaning.None)
            {
                foreach (var symbol in _symbols)
                {
                    var fxPair = (Forex)Securities[symbol];
                    // Check if the new/announcement affects the Base or the Quote of the actual pair.
                    var isBaseCurrency = fxPair.BaseCurrencySymbol == calendar.Currency.ToUpper();
                    var isQuoteCurrency = fxPair.QuoteCurrency.Symbol == calendar.Currency.ToUpper();
                    
                    if (calendar.Meaning == FxDailyMeaning.Better && isBaseCurrency
                        || calendar.Meaning == FxDailyMeaning.Worse && isQuoteCurrency)
                    {
                        var date = Time ;
                        signal += 1; 
                        Log(signal.ToString()+ "\n" + date.ToString() + "\n" + symbol.ToString() + "\n" + calendar.Meaning.ToString());
                        Log(Vol[symbol].ToString());
                    }

                    if (calendar.Meaning == FxDailyMeaning.Worse && isBaseCurrency
                        || calendar.Meaning == FxDailyMeaning.Better && isQuoteCurrency)
                    {	
                        var date = Time ;
                        signal += 1;
                        Log(signal.ToString()+ "\n" + date.ToString() + "\n" + symbol.ToString() + "\n" + calendar.Meaning.ToString());
                        Log(Vol[symbol].ToString());
                    }
             
                    }
                }
            }
        }
	}