def findopenPrice(self, candlesUpToCurrent, currentCandle, position): if position == 'long': saveIndex = -1 h = -1 for i in range(-25, 0): if h < candlesUpToCurrent[i].high: h = candlesUpToCurrent[i].high saveIndex = i backTest.addHorizontalLine(self.backtest, candlesUpToCurrent[saveIndex].datetime, "Simple Horizontal Above", pipOffset=3) return h + 0.0003 if position == 'short': saveIndex = -1 l = 100000000 for i in range(-25, 0): if l > candlesUpToCurrent[i].low: l = candlesUpToCurrent[i].low saveIndex = i backTest.addHorizontalLine(self.backtest, candlesUpToCurrent[saveIndex].datetime, "Simple Horizontal Below", pipOffset=3) return l - 0.0003
def findopenPrice(self, candlesUpToCurrent, currentCandle, position): if position == 'long': op = currentCandle.close + currentCandle.indicators['ATR(14)'] * 1.5 backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=op) return op if position == 'short': op = currentCandle.close - currentCandle.indicators['ATR(14)'] * 1.5 backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=op) return op
def setup(self, currentCandle, candlesUpToCurrent, position): print('================================================================================') self.risk = (currentCandle.indicators['ATR(14)'] * 1.5) if position == 'long': self.sl = currentCandle.close - self.risk backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.sl) self.breakEven = currentCandle.close + self.risk self.openPrice = currentCandle.close backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.breakEven) backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", "magenta", text=f"BE{round(self.breakEven,6)}\nSl{round(self.sl,6)}") elif position == 'short': self.sl = currentCandle.close + self.risk backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.sl) self.breakEven = currentCandle.close - self.risk self.openPrice = currentCandle.close backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.breakEven) backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", "magenta", text=f"BE{round(self.breakEven, 6)}\nSl{round(self.sl, 6)}")
def run(self, currentCandle, candlesUpToCurrent): from HistoryAnalysis import backTest time = currentCandle.datetime.split(':') hour = int(time[0][-2:]) min = int(time[1]) if hour == 8 and min >= 0 and self.flag: self.flag = False backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="Yellow") backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.hi) backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.lo) self.wasRanging = self.calculateTrendingIndex(self.rangingCandles) self.reset = True # Sleeping if 0 <= hour < 3: backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="White") self.updateHiLo(currentCandle) self.rangingCandles.append(currentCandle) # London elif 3 <= hour < 8: backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="Green") #return self.openPos(currentCandle) self.updateHiLo(currentCandle) self.rangingCandles.append(currentCandle) # Overlap elif 8 <= hour < 12: backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="Brown") return self.openPos(currentCandle) # United States elif 12 <= hour < 17: backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="Red") #return self.openPos(currentCandle) #self.updateHiLo(currentCandle) # Sleeping elif 17 <= hour: backTest.addMarker(self.backtest, currentCandle.datetime, "Simple Mark Above", color="White") self.updateHiLo(currentCandle) self.rangingCandles.append(currentCandle) else: print("INVALID CANDLE") # Reset Flag if hour >= 17: self.flag = True
def run(self, currentCandle, candlesUpToCurrent, position): # STATE 1 if position == 'long' and self.state == 'Part1': if currentCandle.high >= self.breakEven: self.moneyInTrade = self.getMoneyToRisk() self.updateMoney(self.breakEven, position, self.moneyInTrade, self.openPrice, self.state, currentCandle) self.state = 'Part1' self.sl = self.openPrice + 0.0001 self.openPrice = self.breakEven self.tp = self.openPrice + (2*self.risk) backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.tp) backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.sl) return True elif currentCandle.low <= self.sl: self.moneyInTrade = self.getMoneyToRisk() self.updateMoney(self.sl, position, self.moneyInTrade, self.openPrice, self.state, currentCandle) return True elif position == 'short' and self.state == 'Part1': if currentCandle.low <= self.breakEven: self.moneyInTrade = self.getMoneyToRisk() self.updateMoney(self.breakEven, position, self.moneyInTrade, self.openPrice, self.state, currentCandle) self.state = 'Part1' self.sl = self.openPrice - 0.0001 self.openPrice = self.breakEven self.tp = self.openPrice - (2*self.risk) backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.tp) backTest.addHorizontalLine(self.backtest, currentCandle.datetime, "Horizontal At Price", price=self.sl) return True elif currentCandle.high >= self.sl: self.moneyInTrade = self.getMoneyToRisk() self.updateMoney(self.sl, position, self.moneyInTrade, self.openPrice, self.state, currentCandle) return True # STATE 2 if position == 'long' and self.state == 'Part2': if currentCandle.high >= self.tp: self.updateMoney(self.tp, position, self.moneyInTrade/2, self.openPrice, self.state, currentCandle, fee=False) self.state = 'Part1' return True elif currentCandle.low <= self.sl: self.updateMoney(self.sl, position, self.moneyInTrade/2, self.openPrice, self.state, currentCandle, fee=False) self.state = 'Part1' return True elif position == 'short' and self.state == 'Part2': if currentCandle.low <= self.tp: self.updateMoney(self.tp, position, self.moneyInTrade/2, self.openPrice, self.state, currentCandle, fee=False) self.state = 'Part1' return True elif currentCandle.high >= self.sl: self.updateMoney(self.sl, position, self.moneyInTrade/2, self.openPrice, self.state, currentCandle, fee=False) self.state = 'Part1' return True