| 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 |
from System import *
from QuantConnect import *
from QuantConnect.Data import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from QuantConnect.Data.Consolidators import *
from datetime import datetime
import decimal as d
import numpy as np
class CVTap(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017,11,1) #Set Start Date
self.SetEndDate(2017,11,14) #Set End Date
self.SetCash(10000) #Set Strategy Cash
self.fxPair = "EURUSD"
# Add EURUSD
self.AddForex(self.fxPair, Resolution.Minute)
# Create consolidator for 30 minutes
consThirtyMin = QuoteBarConsolidator(30)
consThirtyMin.DataConsolidated += self.ThirtyMinHandler
self.SubscriptionManager.AddConsolidator(self.fxPair, consThirtyMin)
# Create consolidator for 60 minutes
cons60Min = QuoteBarConsolidator(60)
cons60Min.DataConsolidated += self.SixtyMinHandler
self.SubscriptionManager.AddConsolidator(self.fxPair, cons60Min)
self.bb30 = BollingerBands("30minBB", 20,2,MovingAverageType.Simple)
self.bb60 = BollingerBands("60minBB", 20,2,MovingAverageType.Simple)
self.current_price_30 = 0
self.current_price_60 = 0
# Inititalize rolling window which stores to store upper bollinger band indicator values
self.bbUpperRollingWindow = RollingWindow[float](3)
self.bbUpperRollingWindow_60 = RollingWindow[float](3)
def ThirtyMinHandler(self, sender, bar):
# Update bb30 indicator
self.bb30.Update(bar.EndTime, bar.Close)
# Add to rolling window
self.bbUpperRollingWindow.Add(self.bb30.Current.Value)
# Update 30min current price
self.current_price_30 = bar.Close
def SixtyMinHandler(self, sender, bar):
# Update bb60 indicator
self.bb60.Update(bar.EndTime, bar.Close)
# Add to rolling window
self.bbUpperRollingWindow_60.Add(self.bb60.Current.Value)
# Update 60min current price
self.current_price_60 = bar.Close
def OnData(self, data):
# Return if rolling window is not ready
if not (self.bbUpperRollingWindow.IsReady and self.bbUpperRollingWindow_60.IsReady):
return
self.Log("upper rolling window : " + str(self.bbUpperRollingWindow[0]))
bb30cv = self.bbUpperRollingWindow[0]
bb60cv = self.bbUpperRollingWindow_60[0]
cv_30 = self.current_price_30
cv_60 = self.current_price_60
holdings = self.Portfolio[self.fxPair].Quantity
stop_price_ = self.Securities[self.fxPair].Price * 0.97
stop_price = self.Securities[self.fxPair].Price * 1.05
if not self.Portfolio[self.fxPair].Invested:
if cv_30 > bb30cv:
return
def OnOrderEvent(self, orderEvent):
order = self.Transactions.GetOrderById(orderEvent.OrderId)
if order.Status == OrderStatus.Filled:
if order.Type == OrderType.Limit or order.Type == OrderType.StopMarket:
self.Transactions.CancelOpenOrders(order.Symbol)
if order.Status == OrderStatus.Canceled:
self.Log(str(orderEvent))