趋势震荡策略修改笔记
1. accord
accord的判断
之前的固定比例来加仓的方式,实测来看无法应对大波动行情,遂思考使用指标的方式来作为加仓的依据,
思来想去,决定使用1H,4H,1D的K线趋势,来判断短期中期长期的趋势方向。
1 | def update_direction_1d(self,side): |
数据依次更新,accord的判断在最后的1H数据更新时判断。
拿到accord数据后,就可以在之前的基础上更新优化了。
以acccord作为趋势的判断条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15def update_price(self, price):
"""
更新价格,1秒间隔
根据价格和最新的策略方向,作用于止盈/止损/加仓
参数:
- price: 价格
"""
if self.running_mode != 2:
self.timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if self.accord == True:
self.strategy_direction = self.strategy_direction_1d
else :
if self.direction == 'none' :
self.strategy_direction = 'none'在acccrd为true时,更新仓位为acccrd方向,以备下一步开仓。
在有仓位的情况下,acccrd为false时,把趋势更新为无趋势,以备下一步调整。以accord作为开仓辅助条件
1
2
3
4...
if self.strategy_direction != 'none' and self.accord:
self.open_position(self.strategy_direction,True)
...以acccord作为加仓条件
1
2
3
4...
elif self.accord == True: #未满仓并且方向一致,走加仓逻辑
self.check_additional_entry()
...以accord作为辅助止盈条件
1
2
3
4
5
6
7...
if self.accord and self.strategy_direction == self.strategy_direction_1d == 'buy':
self.logger.info('\n{} ->(9)止盈保留首单:'.format(self.timestamp))
self.open_position('buy',False)
else:
self.logger.info('\n{} ->(9)止盈清仓:'.format(self.timestamp))
...以accord作为辅助止损条件
1
2
3
4
5
6
7...
if self.accord and self.strategy_direction == self.strategy_direction_1d:
self.open_position('buy',False)
self.logger.info('\n{} ->(11)止损并保留首单'.format(self.timestamp))
else:
self.logger.info('\n{} ->(11)止损清仓'.format(self.timestamp))
...
2. forced_closing
不按固定的比例加仓,自然就无法确定止损位了,遂增加引入了自定义的强制止损比例,作为最后的护城河。
1 | ... |
3. max_sl
本次也引入一个重要的运行参数,最大浮亏比例max_sl
1 | ... |
4. 最后来看看最优的一个回测参数吧
(2023/09/12-2024年/04/20)
2.1总利润102%
2.1最大回撤7.1%