[关闭]
@Channelchan 2018-11-28T17:52:06.000000Z 字数 3267 阅读 63371

止盈止损-固定价位止损止盈

1、 固定点数(Point)
2、 固定百分比(Percentage)
3、 固定平保(Protect)

固定点数(Point)

1、 设置止损止盈的点数
2、 成交时需要记录成交价格
3、 检查当前是持有多头还是空头
4、设置当前价格触发成交价‘加减’固定点数的止损止盈时执行平仓
5、平仓的数量为当前所有多头或空头的持仓数量

  1. # 设置参数
  2. stopLossPoint = 0.1 #1毛
  3. takeProfitPoint = 0.3 #3毛
  4. # 计算止损止盈价位
  5. longStop = self.transactionPrice*(1-self.stopLossPct)
  6. longProfit = self.transactionPrice*(1+self.takeProfitPct)
  7. shortStop = self.transactionPrice*(1-self.stopLossPct)
  8. shortProfit = self.transactionPrice*(1+self.takeProfitPct)
  9. # 持有多头
  10. if (self.posDict[symbol+'_LONG'] > 0):
  11. if (bar.close<=longStop) or (bar.close>=longProfit):
  12. self.sell(symbol,bar.close*0.98, self.posDict[symbol+'_LONG'])
  13. # 持有空头
  14. elif (self.posDict[symbol+'_SHORT'] > 0):
  15. if (bar.close>shortStop) or (bar.close<takeProfitPoint):
  16. self.cover(symbol,bar.close*1.02, self.posDict[symbol+'_SHORT'])

固定百分比(Percentage)

  1. 设置止损止盈的百分比
  2. 成交时需要记录成交价格
  3. 检查当前是持有多头还是空头
  4. 设置当前价格触发成交价‘乘以’固定百分比的止损止盈时执行平仓
  5. 平仓的数量为当前所有多头或空头的持仓数量
  1. # 设置参数
  2. stopLossPct = 0.01 #百分之一
  3. takeProfitPct = 0.03 #百分之三
  4. # 计算止损止盈价位
  5. longStop = self.transactionPrice*(1-self.stopLossPct)
  6. longProfit = self.transactionPrice*(1+self.takeProfitPct)
  7. shortStop = self.transactionPrice*(1-self.stopLossPct)
  8. shortProfit = self.transactionPrice*(1+self.takeProfitPct)
  9. # 持有多头
  10. if (self.posDict[symbol+'_LONG'] > 0):
  11. if (bar.close<= longStop) or (bar.close>=longProfit):
  12. self.sell(symbol,bar.close*0.98, self.posDict[symbol+'_LONG'])
  13. # 持有空头
  14. elif (self.posDict[symbol+'_SHORT'] > 0):
  15. if (bar.close>shortStop) or (bar.close<shortProfit):
  16. self.cover(symbol,bar.close*1.02, self.posDict[symbol+'_SHORT'])

固定平保(Protect)

有三种出场可能,止损,平保,止盈。(其中止损和平保互斥)

  1. 设置止损止盈的百分比,并且设置平保的百分比
  2. 成交时需要记录成交价格
  3. 检查当前是持有多头还是空头
  4. 设置平保变量,满足条件时设置为1,若没满足平保条件则按正常止损比例止损
  5. 设置止盈出场的比例与满足条件,满足下离场
  6. 平仓的数量为当前所有多头或空头的持仓数量
  1. # 设置参数
  2. stopLossPct = 0.01; takeProfitPct=0.3; protectPct=0.1
  3. # 计算止损止盈价位
  4. buyTakeProfitPrice = self.transactionPrice[symbol] * (1 + self.takeProfitPct)
  5. sellTakeProfitPrice = self.transactionPrice[symbol] * (1 - self.takeProfitPct)
  6. buyStopLossPrice = self.transactionPrice[symbol] * (1 - self.stopLossPct)
  7. sellStopLossPrice = self.transactionPrice[symbol] * (1 + self.stopLossPct)
  8. buyProtectStopPrice = self.transactionPrice[symbol]*(1+self.protectPct)
  9. sellProtectStopPrice = self.transactionPrice[symbol]*(1-self.protectPct)
  10. if (self.posDict[symbol + '_LONG'] > 0):
  11. #启动平保
  12. if (bar.close )>= buyProtectStopPrice:
  13. self.stopProtect[symbol] = 1
  14. #满足平保条件
  15. if self.stopProtect[symbol] == 1:
  16. if bar.close <= (1.002 * self.transactionPrice[symbol]):
  17. self.sell(symbol, bar.close * 0.98, self.posDict[symbol + '_LONG'])
  18. self.stopProtect[symbol] = 0
  19. #满足止损条件
  20. elif (self.stopProtect[symbol] == 0) and (bar.close <= buyStopLossPrice):
  21. self.sell(symbol, bar.close * 0.98, self.posDict[symbol + '_LONG'])
  22. #满足止盈条件
  23. if (bar.close >= buyTakeProfitPrice):
  24. self.sell(symbol, bar.close * 0.98, self.posDict[symbol + '_LONG'])
  25. self.stopProtect[symbol] = 0
  26. elif (self.posDict[symbol + '_SHORT'] > 0):
  27. #启动平保
  28. if bar.close <= sellProtectStopPrice:
  29. self.stopProtect[symbol] = -1
  30. #满足平保条件
  31. if (self.stopProtect[symbol] == -1) and (bar.close >= (0.998 * self.transactionPrice[symbol])):
  32. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + '_SHORT'])
  33. self.stopProtect[symbol] = 0
  34. #满足止损条件
  35. elif (self.stopProtect[symbol] == 0) and (bar.close >= sellStopLossPrice):
  36. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + '_SHORT'])
  37. #满足止盈条件
  38. if (bar.close <= sellTakeProfitPrice):
  39. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + '_SHORT'])
  40. self.stopProtect[symbol] = 0
  41. #空仓时将平保条件还原为0
  42. elif (self.posDict[symbol + '_LONG'] == 0) and (self.posDict[symbol + '_SHORT'] == 0):
  43. self.stopProtect[symbol] = 0
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注