| Overall Statistics |
|
Total Trades 47 Average Win 0% Average Loss -27.60% Compounding Annual Return -40.146% Drawdown 31.800% Expectancy -1 Net Profit -27.557% Sharpe Ratio -1.231 Probabilistic Sharpe Ratio 1.188% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.587 Beta 1.042 Annual Standard Deviation 0.257 Annual Variance 0.066 Information Ratio -2.532 Tracking Error 0.227 Treynor Ratio -0.303 Total Fees $0.00 Estimated Strategy Capacity $370000.00 Lowest Capacity Asset AUDUSD 8G |
from AlgorithmImports import *
from System.Drawing import Color
import math
from collections import deque
class MACD(QCAlgorithm):
def Initialize(self,qb=None):
self.initialization(qb)
self.macd = self.MACD(self.pair, 12, 26, 9, MovingAverageType.Exponential, self.resolution)
self.sma = self.SMA(self.pair, 200, self.resolution)
self.SetWarmUp(200)
def OnData(self, data):
self.MACDStrategy(data)
def OnEndOfAlgorithm(self):
self.qb.Liquidate()
def initialization(self,qb):
self.initialCash = 100000
self.inc = 0.00001
self.pair = self.GetParameter("Pair")
# self.SetBenchmark("SPY")
self.resolution = Resolution.Hour
self.qb = self if qb is None else qb
self.qb.SetStartDate(2021,1,1)
self.qb.SetEndDate(2022,1,1)
self.qb.SetCash(self.initialCash)
self.qb.AddForex(self.pair, self.resolution)
self.lastValue = 1
macdPlot = Chart('MACD')
macdPlot.AddSeries(Series('macdCurrent', SeriesType.Line, "", Color.Green))
macdPlot.AddSeries(Series('macdSignal', SeriesType.Line, "", Color.Red))
macdPlot.AddSeries(
Series('Signal', SeriesType.Scatter, "", Color.Blue))
macdPlot.AddSeries(
Series('Current', SeriesType.Scatter, "", Color.Aqua))
self.qb.AddChart(macdPlot)
sma200 = Chart('SMA200')
sma200.AddSeries(Series('Price', SeriesType.Line, "", Color.Green))
sma200.AddSeries(Series('SMA200', SeriesType.Line, "", Color.Red))
self.qb.AddChart(sma200)
def MACDStrategy(self, data):
macdCurrent = self.macd.Current.Value
macdSignal = self.macd.Signal.Current.Value
macdSlow = self.macd.Slow.Current.Value
macdFast = self.macd.Fast.Current.Value
self.qb.Plot("MACD", "macdCurrent", macdCurrent);
self.qb.Plot("MACD", "macdSignal", macdSignal);
self.qb.Plot("SMA200", "Price", data[self.pair].Close);
self.qb.Plot("SMA200", "SMA200", self.sma.Current.Value);
if macdCurrent>0:
return
if(macdCurrent - macdSignal > 0 and self.lastValue<=0):
if(self.sma.Current.Value < data[self.pair].Close):
quantity = self.initialCash * 0.1 / data[self.pair].Close
takeProfit = data[self.pair].Close + 0.00150
stopPrice = data[self.pair].Close - 0.00100
self.qb.MarketOrder(self.pair,quantity)
self.qb.StopLimitOrder(self.pair,quantity,stopPrice,takeProfit)
self.lastValue = macdCurrent - macdSignal