r_breaker 和 海龟 python代码

def handle_trade_R_Breaker(self):
 #logger.info('Debug by Lu: handle_trade_R_Breaker is called')
 buy_orders = []
 sell_orders = []
 # xxxx
  
 instrument = self.exchange.get_instrument()
 if self.is_newDay(): #a new day start
 self.prevClosePrice = instrument["prevClosePrice"]
 self.prevHighPrice = self.todayHighPrice
 self.prevLowPrice = self.todayLowPrice
  
 self.Pivot = (self.prevClosePrice + self.prevHighPrice + self.prevLowPrice) / 3
  
 self.buy_break = self.prevHighPrice + 2 * (self.Pivot - self.prevLowPrice)
 self.sell_setup = self.Pivot + (self.prevHighPrice - self.prevLowPrice)
 self.sell_enter = 2 * self.Pivot - self.prevLowPrice
 self.buy_enter = 2 * self.Pivot - self.prevHighPrice
 self.buy_setup = self.Pivot - (self.prevHighPrice - self.prevLowPrice)
 self.sell_break = self.prevLowPrice - 2 * (self.prevHighPrice - self.Pivot)
  
 self.todayHighPrice = instrument["highPrice"]
 self.todayLowPrice = instrument["lowPrice"]
 lastPrice = instrument["lastPrice"]
  
 position = self.exchange.get_delta()
  
 logger.info('Debug by Lu: prevClosePrice: %.2f, prevHighPrice: %.2f, prevLowPrice: %.2f' %(self.prevClosePrice, self.prevHighPrice,self.prevLowPrice))
 logger.info('Debug by Lu: buy_break: %.2f, sell_setup: %.2f, sell_enter: %.2f, buy_enter: %.2f, buy_setup: %.2f, sell_break: %.2f' %(self.buy_break, self.sell_setup, self.sell_enter, self.buy_enter, self.buy_setup, self.sell_break))
 logger.info('Debug by Lu: position = %d' % position)
  
 if position == 0:
 if lastPrice > self.buy_break:
 buyOrder = self.create_order(-self.positionSize,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: lastPrice > buy_break, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
 if lastPrice < self.sell_break:
 sellOrder = self.create_order(self.positionSize,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position > 0:
 if self.todayHighPrice > self.sell_setup and lastPrice < self.sell_enter:
 sellOrder = self.create_order(self.positionSize * 2,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: todayHighPrice > sell_setup and lastPrice < sell_enter, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position < 0:
 if self.todayLowPrice < self.buy_setup and lastPrice > self.buy_enter:
 buyOrder = self.create_order(-self.positionSize * 2,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: todayLowPrice < buy_setup and lastPrice > buy_enter, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
  
 return self.converge_orders(buy_orders, sell_orders)
  
 def settlement(self, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize): #平仓
 if self.dynamic_position > 0:
 if plastBidSize >= self.dynamic_position:
 self.endPrice_profit = plastBidPrice
 #print('lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (lastBidPrice, operateposition))
 self.benifitCaculate()
 self.dynamic_position =0
 if self.dynamic_position < 0:
 if plastAskSize >= abs(self.dynamic_position):
 self.endPrice_profit = plastAskPrice
 self.benifitCaculate()
 self.dynamic_position = 0
  
 def Zhishun(self, plastPrice, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize):
 if self.dynamic_position > 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha < -settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has decreased more than 5%, sell all")
 if self.dynamic_position < 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha > settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has increased more than 5%, buy all")
  
 def calcATR(self):
 N = settings.ATRN
 TR_List = []
 #TR_List_Str = ""
 for i in range(0,N):
 TR = self.highPriceQueue[i] - self.lowPriceQueue[i]
 if TR > 0 and TR < 1000.0:
 TR_List.append(TR)
 #print("high = %.2f, low = %.2f, TR = %.2f" % (self.highPriceQueue[i], self.lowPriceQueue[i], TR))
 #TR_List_Str += (str(round(TR,2))+" ")
 ATR = np.array(TR_List).mean()
 self.ATR = ATR
 #TR_List_Str += ("ATR = " + str(self.ATR))
 #print("ATR = %.2f" % self.ATR)
 #print(TR_List_Str)
  
  
 def CalcUnit(self, nowPrice): # 计算一个ATR单位的仓位
 if settings.IS_BACKTESTING:
 X = settings.START_BTCOIN + self.totalprofit
 else:
 X = self.current_XBT
 if self.ATR != 0:
 self.UnitPosition = int(abs(0.02 * X * nowPrice * (nowPrice + self.ATR) / self.ATR))
 print(self.todayDate + (": bitcoin = %.4f today UnitPosition = %d, nowPrice = %.2f, ATR = %d, dynamicpostion = %d" % (X, self.UnitPosition, nowPrice, self.ATR, self.dynamic_position)))
  
 def tradeTultle(self):
 sell_break = 0.0
 buy_break = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.maxPreNhighPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向上突破%.2f,建仓:%d, 建仓价为%.2f" %(self.maxPreNhighPrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.minPreNlowPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 sellbreak = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向下跌破%.2f,建仓:-%d, 建仓价为%.2f" %(self.minPreNlowPrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.minPreNlowPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破N日最低价格触发止盈, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 if self.currentPrice < sell_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破2ATR触发平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 self.updateStartPriceProfit(self.lastAskPrice, self.UnitPosition)
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.maxPreNhighPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破N日最高价格触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if self.currentPrice > buy_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.updateStartPriceProfit(self.lastBidPrice, (self.UnitPosition * (-1)))
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
  
 def tradeMovingAverage(self):
 sell_break = 0.0
 buy_break = 0.0
 traderest = 0.0
 successTrade = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.movingAveragePrice:
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.movingAveragePrice:
 nowBitcoin = settings.START_BTCOIN + self.totalprofit
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * nowBitcoin
 traderest = self.tradeTheRest(shortFirstPos)
 successTrade = shortFirstPos - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(pos * (-1)) #sell all the positions
 successTrade = pos * (-1) - traderest
 if abs(successTrade) > 0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return traderest
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return traderest
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade) > 0.00:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(abs(pos)) #平仓
 successTrade = abs(pos) - traderest
 if abs(successTrade) > 0.0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return traderest
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return traderest
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 traderest = self.tradeTheRest(self.UnitPosition*(-1))
 successTrade = self.UnitPosition * (-1) - traderest
 if abs(successTrade) > 0:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
 return traderest
  
 def tradeMovingAverage_real(self):
 sell_break = 0.0
 buy_break = 0.0
  
 if self.dynamic_position == 0:
 if self.currentPrice > self.movingAveragePrice:
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.lastAskPrice)))
 elif self.currentPrice < self.movingAveragePrice:
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * self.current_XBT * 2
 self.tradeTheRest_real(shortFirstPos)
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, shortFirstPos, self.lastBidPrice)))
 elif abs(self.dynamic_position) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + self.ATR
 if self.dynamic_position > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break:
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return 0
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.lastAskPrice)))
 elif self.dynamic_position < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break :
 pos = self.dynamic_position
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return 0
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 self.tradeTheRest_real(-self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.lastBidPrice)))
 return 0
  
 def backtest_trade_rest(self, pos,dir = "buy"): #trade in market price
 if pos > 0:
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position += self.lastAskSize
 return self.lastAskSize
 elif pos < 0:
 if self.lastBidSize >= abs(pos):
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position -= self.lastBidSize
 return (self.lastBidSize) * (-1)
 else:
 return 0
  
 def backtest_trade(self, pos, dir = "buy"): #trade in market price
 if dir == "buy":
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return True
 else:
 return False
 elif dir == "sell":
 if self.lastBidSize >= pos:
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position -=pos
 return True
 else:
 return False



def handle_trade_R_Breaker(self):
 #logger.info('Debug by Lu: handle_trade_R_Breaker is called')
 buy_orders = []
 sell_orders = []
 # xxxx
  
 instrument = self.exchange.get_instrument()
 if self.is_newDay(): #a new day start
 self.prevClosePrice = instrument["prevClosePrice"]
 self.prevHighPrice = self.todayHighPrice
 self.prevLowPrice = self.todayLowPrice
  
 self.Pivot = (self.prevClosePrice + self.prevHighPrice + self.prevLowPrice) / 3
  
 self.buy_break = self.prevHighPrice + 2 * (self.Pivot - self.prevLowPrice)
 self.sell_setup = self.Pivot + (self.prevHighPrice - self.prevLowPrice)
 self.sell_enter = 2 * self.Pivot - self.prevLowPrice
 self.buy_enter = 2 * self.Pivot - self.prevHighPrice
 self.buy_setup = self.Pivot - (self.prevHighPrice - self.prevLowPrice)
 self.sell_break = self.prevLowPrice - 2 * (self.prevHighPrice - self.Pivot)
  
 self.todayHighPrice = instrument["highPrice"]
 self.todayLowPrice = instrument["lowPrice"]
 lastPrice = instrument["lastPrice"]
  
 position = self.exchange.get_delta()
  
 logger.info('Debug by Lu: prevClosePrice: %.2f, prevHighPrice: %.2f, prevLowPrice: %.2f' %(self.prevClosePrice, self.prevHighPrice,self.prevLowPrice))
 logger.info('Debug by Lu: buy_break: %.2f, sell_setup: %.2f, sell_enter: %.2f, buy_enter: %.2f, buy_setup: %.2f, sell_break: %.2f' %(self.buy_break, self.sell_setup, self.sell_enter, self.buy_enter, self.buy_setup, self.sell_break))
 logger.info('Debug by Lu: position = %d' % position)
  
 if position == 0:
 if lastPrice > self.buy_break:
 buyOrder = self.create_order(-self.positionSize,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: lastPrice > buy_break, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
 if lastPrice < self.sell_break:
 sellOrder = self.create_order(self.positionSize,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position > 0:
 if self.todayHighPrice > self.sell_setup and lastPrice < self.sell_enter:
 sellOrder = self.create_order(self.positionSize * 2,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: todayHighPrice > sell_setup and lastPrice < sell_enter, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position < 0:
 if self.todayLowPrice < self.buy_setup and lastPrice > self.buy_enter:
 buyOrder = self.create_order(-self.positionSize * 2,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: todayLowPrice < buy_setup and lastPrice > buy_enter, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
  
 return self.converge_orders(buy_orders, sell_orders)
  
 def settlement(self, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize): #平仓
 if self.dynamic_position > 0:
 if plastBidSize >= self.dynamic_position:
 self.endPrice_profit = plastBidPrice
 #print('lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (lastBidPrice, operateposition))
 self.benifitCaculate()
 self.dynamic_position =0
 if self.dynamic_position < 0:
 if plastAskSize >= abs(self.dynamic_position):
 self.endPrice_profit = plastAskPrice
 self.benifitCaculate()
 self.dynamic_position = 0
  
 def Zhishun(self, plastPrice, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize):
 if self.dynamic_position > 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha < -settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has decreased more than 5%, sell all")
 if self.dynamic_position < 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha > settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has increased more than 5%, buy all")
  
 def calcATR(self):
 N = settings.ATRN
 TR_List = []
 #TR_List_Str = ""
 for i in range(0,N):
 TR = self.highPriceQueue[i] - self.lowPriceQueue[i]
 if TR > 0 and TR < 1000.0:
 TR_List.append(TR)
 #print("high = %.2f, low = %.2f, TR = %.2f" % (self.highPriceQueue[i], self.lowPriceQueue[i], TR))
 #TR_List_Str += (str(round(TR,2))+" ")
 ATR = np.array(TR_List).mean()
 self.ATR = ATR
 #TR_List_Str += ("ATR = " + str(self.ATR))
 #print("ATR = %.2f" % self.ATR)
 #print(TR_List_Str)
  
  
 def CalcUnit(self, nowPrice): # 计算一个ATR单位的仓位
 if settings.IS_BACKTESTING:
 X = settings.START_BTCOIN + self.totalprofit
 else:
 X = self.current_XBT
 if self.ATR != 0:
 self.UnitPosition = int(abs(0.02 * X * nowPrice * (nowPrice + self.ATR) / self.ATR))
 print(self.todayDate + (": bitcoin = %.4f today UnitPosition = %d, nowPrice = %.2f, ATR = %d, dynamicpostion = %d" % (X, self.UnitPosition, nowPrice, self.ATR, self.dynamic_position)))
  
 def tradeTultle(self):
 sell_break = 0.0
 buy_break = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.maxPreNhighPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向上突破%.2f,建仓:%d, 建仓价为%.2f" %(self.maxPreNhighPrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.minPreNlowPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 sellbreak = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向下跌破%.2f,建仓:-%d, 建仓价为%.2f" %(self.minPreNlowPrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.minPreNlowPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破N日最低价格触发止盈, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 if self.currentPrice < sell_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破2ATR触发平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 self.updateStartPriceProfit(self.lastAskPrice, self.UnitPosition)
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.maxPreNhighPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破N日最高价格触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if self.currentPrice > buy_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.updateStartPriceProfit(self.lastBidPrice, (self.UnitPosition * (-1)))
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
  
 def tradeMovingAverage(self):
 sell_break = 0.0
 buy_break = 0.0
 traderest = 0.0
 successTrade = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.movingAveragePrice:
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.movingAveragePrice:
 nowBitcoin = settings.START_BTCOIN + self.totalprofit
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * nowBitcoin
 traderest = self.tradeTheRest(shortFirstPos)
 successTrade = shortFirstPos - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(pos * (-1)) #sell all the positions
 successTrade = pos * (-1) - traderest
 if abs(successTrade) > 0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return traderest
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return traderest
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade) > 0.00:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(abs(pos)) #平仓
 successTrade = abs(pos) - traderest
 if abs(successTrade) > 0.0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return traderest
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return traderest
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 traderest = self.tradeTheRest(self.UnitPosition*(-1))
 successTrade = self.UnitPosition * (-1) - traderest
 if abs(successTrade) > 0:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
 return traderest
  
 def tradeMovingAverage_real(self):
 sell_break = 0.0
 buy_break = 0.0
  
 if self.dynamic_position == 0:
 if self.currentPrice > self.movingAveragePrice:
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.lastAskPrice)))
 elif self.currentPrice < self.movingAveragePrice:
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * self.current_XBT * 2
 self.tradeTheRest_real(shortFirstPos)
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, shortFirstPos, self.lastBidPrice)))
 elif abs(self.dynamic_position) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + self.ATR
 if self.dynamic_position > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break:
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return 0
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.lastAskPrice)))
 elif self.dynamic_position < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break :
 pos = self.dynamic_position
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return 0
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 self.tradeTheRest_real(-self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.lastBidPrice)))
 return 0
  
 def backtest_trade_rest(self, pos,dir = "buy"): #trade in market price
 if pos > 0:
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position += self.lastAskSize
 return self.lastAskSize
 elif pos < 0:
 if self.lastBidSize >= abs(pos):
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position -= self.lastBidSize
 return (self.lastBidSize) * (-1)
 else:
 return 0
  
 def backtest_trade(self, pos, dir = "buy"): #trade in market price
 if dir == "buy":
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return True
 else:
 return False
 elif dir == "sell":
 if self.lastBidSize >= pos:
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position -=pos
 return True
 else:
 return False
def handle_trade_R_Breaker(self):
 #logger.info('Debug by Lu: handle_trade_R_Breaker is called')
 buy_orders = []
 sell_orders = []
 # xxxx
  
 instrument = self.exchange.get_instrument()
 if self.is_newDay(): #a new day start
 self.prevClosePrice = instrument["prevClosePrice"]
 self.prevHighPrice = self.todayHighPrice
 self.prevLowPrice = self.todayLowPrice
  
 self.Pivot = (self.prevClosePrice + self.prevHighPrice + self.prevLowPrice) / 3
  
 self.buy_break = self.prevHighPrice + 2 * (self.Pivot - self.prevLowPrice)
 self.sell_setup = self.Pivot + (self.prevHighPrice - self.prevLowPrice)
 self.sell_enter = 2 * self.Pivot - self.prevLowPrice
 self.buy_enter = 2 * self.Pivot - self.prevHighPrice
 self.buy_setup = self.Pivot - (self.prevHighPrice - self.prevLowPrice)
 self.sell_break = self.prevLowPrice - 2 * (self.prevHighPrice - self.Pivot)
  
 self.todayHighPrice = instrument["highPrice"]
 self.todayLowPrice = instrument["lowPrice"]
 lastPrice = instrument["lastPrice"]
  
 position = self.exchange.get_delta()
  
 logger.info('Debug by Lu: prevClosePrice: %.2f, prevHighPrice: %.2f, prevLowPrice: %.2f' %(self.prevClosePrice, self.prevHighPrice,self.prevLowPrice))
 logger.info('Debug by Lu: buy_break: %.2f, sell_setup: %.2f, sell_enter: %.2f, buy_enter: %.2f, buy_setup: %.2f, sell_break: %.2f' %(self.buy_break, self.sell_setup, self.sell_enter, self.buy_enter, self.buy_setup, self.sell_break))
 logger.info('Debug by Lu: position = %d' % position)
  
 if position == 0:
 if lastPrice > self.buy_break:
 buyOrder = self.create_order(-self.positionSize,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: lastPrice > buy_break, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
 if lastPrice < self.sell_break:
 sellOrder = self.create_order(self.positionSize,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position > 0:
 if self.todayHighPrice > self.sell_setup and lastPrice < self.sell_enter:
 sellOrder = self.create_order(self.positionSize * 2,instrument)
 sell_orders.append(sellOrder)
 logger.info('Debug by Lu: todayHighPrice > sell_setup and lastPrice < sell_enter, sell triggered: price = %.2f, nummer = %d' % (sellOrder["price"], sellOrder["orderQty"]))
 elif position < 0:
 if self.todayLowPrice < self.buy_setup and lastPrice > self.buy_enter:
 buyOrder = self.create_order(-self.positionSize * 2,instrument)
 buy_orders.append(buyOrder)
 logger.info('Debug by Lu: todayLowPrice < buy_setup and lastPrice > buy_enter, buy triggered: price = %.2f, nummer = %d' % (buyOrder["price"], buyOrder["orderQty"]))
  
 return self.converge_orders(buy_orders, sell_orders)
  
 def settlement(self, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize): #平仓
 if self.dynamic_position > 0:
 if plastBidSize >= self.dynamic_position:
 self.endPrice_profit = plastBidPrice
 #print('lastPrice < sell_break, sell triggered: price = %.2f, nummer = %d' % (lastBidPrice, operateposition))
 self.benifitCaculate()
 self.dynamic_position =0
 if self.dynamic_position < 0:
 if plastAskSize >= abs(self.dynamic_position):
 self.endPrice_profit = plastAskPrice
 self.benifitCaculate()
 self.dynamic_position = 0
  
 def Zhishun(self, plastPrice, plastBidSize, plastBidPrice, plastAskPrice, plastAskSize):
 if self.dynamic_position > 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha < -settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has decreased more than 5%, sell all")
 if self.dynamic_position < 0:
 pricealpha = (plastPrice - self.startPrice_profit) / self.startPrice_profit
 if pricealpha > settings.ZHISHUN_PROZENT:
 self.settlement(plastBidSize, plastBidPrice, plastAskPrice, plastAskSize)
 if self.dynamic_position == 0:
 print("price has increased more than 5%, buy all")
  
 def calcATR(self):
 N = settings.ATRN
 TR_List = []
 #TR_List_Str = ""
 for i in range(0,N):
 TR = self.highPriceQueue[i] - self.lowPriceQueue[i]
 if TR > 0 and TR < 1000.0:
 TR_List.append(TR)
 #print("high = %.2f, low = %.2f, TR = %.2f" % (self.highPriceQueue[i], self.lowPriceQueue[i], TR))
 #TR_List_Str += (str(round(TR,2))+" ")
 ATR = np.array(TR_List).mean()
 self.ATR = ATR
 #TR_List_Str += ("ATR = " + str(self.ATR))
 #print("ATR = %.2f" % self.ATR)
 #print(TR_List_Str)
  
  
 def CalcUnit(self, nowPrice): # 计算一个ATR单位的仓位
 if settings.IS_BACKTESTING:
 X = settings.START_BTCOIN + self.totalprofit
 else:
 X = self.current_XBT
 if self.ATR != 0:
 self.UnitPosition = int(abs(0.02 * X * nowPrice * (nowPrice + self.ATR) / self.ATR))
 print(self.todayDate + (": bitcoin = %.4f today UnitPosition = %d, nowPrice = %.2f, ATR = %d, dynamicpostion = %d" % (X, self.UnitPosition, nowPrice, self.ATR, self.dynamic_position)))
  
 def tradeTultle(self):
 sell_break = 0.0
 buy_break = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.maxPreNhighPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向上突破%.2f,建仓:%d, 建仓价为%.2f" %(self.maxPreNhighPrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.minPreNlowPrice:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 sellbreak = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.startPrice_profit = self.lastAskPrice
 print(self.prevDayBacktest + (" 价格向下跌破%.2f,建仓:-%d, 建仓价为%.2f" %(self.minPreNlowPrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.minPreNlowPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破N日最低价格触发止盈, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 if self.currentPrice < sell_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "sell")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破2ATR触发平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 self.benifitCaculatePos(pos, self.lastBidPrice)
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "buy")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 self.updateStartPriceProfit(self.lastAskPrice, self.UnitPosition)
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.maxPreNhighPrice or self.unrealisedbenifit > settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破N日最高价格触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if self.currentPrice > buy_break:
 pos = self.dynamic_position
 traderesult = self.backtest_trade(abs(self.dynamic_position), "buy")
 if traderesult:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 self.benifitCaculatePos(pos, self.lastAskPrice)
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 traderesult = self.backtest_trade(self.UnitPosition, "sell")
 if traderesult:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 self.updateStartPriceProfit(self.lastBidPrice, (self.UnitPosition * (-1)))
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
  
 def tradeMovingAverage(self):
 sell_break = 0.0
 buy_break = 0.0
 traderest = 0.0
 successTrade = 0.0
 if self.TurtlePos == 0:
 if self.currentPrice > self.movingAveragePrice:
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.startPrice_profit)))
 elif self.currentPrice < self.movingAveragePrice:
 nowBitcoin = settings.START_BTCOIN + self.totalprofit
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * nowBitcoin
 traderest = self.tradeTheRest(shortFirstPos)
 successTrade = shortFirstPos - traderest
 if abs(successTrade)>0:
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition, self.startPrice_profit)))
 elif abs(self.TurtlePos) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - 2 * self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + 2 * self.ATR
 if self.TurtlePos > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(pos * (-1)) #sell all the positions
 successTrade = pos * (-1) - traderest
 if abs(successTrade) > 0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return traderest
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return traderest
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 traderest = self.tradeTheRest(self.UnitPosition)
 successTrade = self.UnitPosition - traderest
 if abs(successTrade) > 0.00:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.prevDayBacktest + (" 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.startPrice_profit)))
 elif self.TurtlePos < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break or self.unrealisedbenifit >= settings.ZHIYINGUSD:
 pos = self.dynamic_position
 traderest = self.tradeTheRest(abs(pos)) #平仓
 successTrade = abs(pos) - traderest
 if abs(successTrade) > 0.0:
 self.TurtlePos = 0
 print(self.prevDayBacktest + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return traderest
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return traderest
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return traderest
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 traderest = self.tradeTheRest(self.UnitPosition*(-1))
 successTrade = self.UnitPosition * (-1) - traderest
 if abs(successTrade) > 0:
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.prevDayBacktest + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.startPrice_profit)))
 return traderest
  
 def tradeMovingAverage_real(self):
 sell_break = 0.0
 buy_break = 0.0
  
 if self.dynamic_position == 0:
 if self.currentPrice > self.movingAveragePrice:
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[0] = self.lastAskPrice + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破均线%.2f,建仓:%d, 建仓价为%.2f" %(self.movingAveragePrice, self.UnitPosition,self.lastAskPrice)))
 elif self.currentPrice < self.movingAveragePrice:
 shortFirstPos = self.UnitPosition * (-1) - self.currentPrice * self.current_XBT * 2
 self.tradeTheRest_real(shortFirstPos)
 self.AddPrice[0] = self.lastBidPrice - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线%.2f,建仓:-%d, 建仓价为%.2f" %(self.movingAveragePrice, shortFirstPos, self.lastBidPrice)))
 elif abs(self.dynamic_position) > 0:
 sell_break = self.AddPrice[abs(self.TurtlePos) - 1] - self.ATR
 buy_break = self.AddPrice[abs(self.TurtlePos) - 1] + self.ATR
 if self.dynamic_position > 0:
 if self.currentPrice < self.movingAveragePrice or self.currentPrice < sell_break:
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (": 价格向下跌破均线/2ATR触发止盈/平仓, 平仓价为%.2f" %(self.lastBidPrice)))
 return 0
 elif abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 elif self.currentPrice > self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position >= self.UPPERLIMITPOS:
 return 0
 elif (self.dynamic_position + self.UnitPosition) > self.UPPERLIMITPOS:
 self.UnitPosition = self.UPPERLIMITPOS - self.dynamic_position
 self.tradeTheRest_real(self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] + 0.5 * self.ATR
 self.TurtlePos += 1
 print(self.todayDate + self.clockTime + (": 价格向上突破%.2f, 加仓 %d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition, self.dynamic_position, self.lastAskPrice)))
 elif self.dynamic_position < 0:
 if self.currentPrice > self.movingAveragePrice or self.currentPrice > buy_break :
 pos = self.dynamic_position
 self.sellorbuyAll()
 print(self.todayDate + self.clockTime + (" 价格向上涨破均价/2ATR触发平仓, 平仓价为%.2f" %(self.lastAskPrice)))
 return 0
 if abs(self.TurtlePos) >= settings.ADDTIME:
 return 0
 if self.currentPrice < self.AddPrice[abs(self.TurtlePos) - 1]:
 if self.dynamic_position <= self.UNTERLIMITPOS:
 return 0
 elif (self.dynamic_position - self.UnitPosition) < self.UNTERLIMITPOS:
 self.UnitPosition = self.dynamic_position - self.UNTERLIMITPOS
 self.tradeTheRest_real(-self.UnitPosition)
 self.AddPrice[abs(self.TurtlePos)] = self.AddPrice[abs(self.TurtlePos) - 1] - 0.5 * self.ATR
 self.TurtlePos -= 1
 print(self.todayDate + self.clockTime + (" 价格向下突破%.2f, 卖出加仓 -%d, 现仓位为%.d, 仓位均价%.2f" %(self.AddPrice[abs(self.TurtlePos) - 2],self.UnitPosition,self.dynamic_position, self.lastBidPrice)))
 return 0
  
 def backtest_trade_rest(self, pos,dir = "buy"): #trade in market price
 if pos > 0:
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position += self.lastAskSize
 return self.lastAskSize
 elif pos < 0:
 if self.lastBidSize >= abs(pos):
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position +=pos
 return pos
 else:
 self.dynamic_position -= self.lastBidSize
 return (self.lastBidSize) * (-1)
 else:
 return 0
  
 def backtest_trade(self, pos, dir = "buy"): #trade in market price
 if dir == "buy":
 if self.lastAskSize >= pos:
 #self.startPrice_profit = self.lastAskPrice
 self.dynamic_position +=pos
 return True
 else:
 return False
 elif dir == "sell":
 if self.lastBidSize >= pos:
 #self.startPrice_profit = self.lastBidPrice
 self.dynamic_position -=pos
 return True
 else:
 return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值