Overall Statistics
Total Trades
352
Average Win
0.38%
Average Loss
-0.29%
Compounding Annual Return
-0.284%
Drawdown
7.200%
Expectancy
-0.012
Net Profit
-0.805%
Sharpe Ratio
-0.038
Loss Rate
57%
Win Rate
43%
Profit-Loss Ratio
1.29
Alpha
0.012
Beta
-0.947
Annual Standard Deviation
0.035
Annual Variance
0.001
Information Ratio
-0.429
Tracking Error
0.035
Treynor Ratio
0.001
Total Fees
$14.08
from NodaTime import DateTimeZone
from datetime import datetime
import decimal as d
import pandas as pd

class ForexVolumeAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetCash(2000)
        self.SetStartDate(2015,1,01)
        self.SetEndDate(2017,11,01)
 
        self.syl = self.AddForex("EURUSD", Resolution.Hour, Market.FXCM).Symbol
        self.Securities[self.syl].FeeModel = FxcmTransactionModel()
        self.SetTimeZone(DateTimeZone.Utc)
        self.vol_syl = self.AddData[FxcmVolume]("EURUSD_Vol", Resolution.Hour).Symbol
 
        self.macd = self.MACD(self.syl, 12, 26, 9, MovingAverageType.Exponential, Resolution.Hour)
        self.vol_bb = self.BB(self.vol_syl, 30, 2, MovingAverageType.Exponential, Resolution.Hour)
        

    def OnData(self, data):
        if self.macd.IsReady and self.vol_bb.IsReady:
            if not self.vol_syl in data: return
      
            volume = data[self.vol_syl].Volume
            
            if not self.Portfolio.Invested:
                if self.macd.Current.Value > self.macd.Signal.Current.Value and volume > self.vol_bb.UpperBand.Current.Value:  
                    self.Buy(self.syl, 1000)
            if self.Portfolio.Invested:
                if self.macd.Current.Value < self.macd.Signal.Current.Value and volume > self.vol_bb.UpperBand.Current.Value: 
                    self.Liquidate()