【发布时间】:2019-10-05 22:24:54
【问题描述】:
我有一个 Deal 类,它有几个状态:New、Bought、Finished、趋势和交叉属性。交易实例可以随时改变趋势和交叉 - 取决于市场状况。
取决于当前的“趋势”、“交叉”和其他条件,交易可以以不同的方式处理
我尝试了战略和责任链模式,但我的知识和经验不足以正确地做到这一点。而且我不确定是否做出了正确的决定。
现在它可以工作了,但它是一个地狱
async def check_deal(deal):
if deal.is_new():
if deal.current_trend == UP_TREND and CROSSED_TOP_GREEN in deal.crossing:
return await deal.create_order(CROSSED_TOP_GREEN)
if deal.current_trend == FLAT_TREND and CROSSED_BOTTOM_ORANGE in deal.crossing:
return await deal.create_order(CROSSED_BOTTOM_ORANGE)
if deal.current_trend == DOWN_TREND and CROSSED_BOTTOM in deal.crossing:
return await deal.create_order(CROSSED_BOTTOM)
if deal.is_bought() and not deal.candle_has_order:
if deal.current_trend == UP_TREND and CROSSED_BOTTOM_GREEN in deal.crossing:
return await deal.create_order(CROSSED_BOTTOM_GREEN)
else:
return await deal.update_deal()
if deal.current_trend == DOWN_TREND and CROSSED_BOTTOM in deal.crossing:
return await deal.create_order(CROSSED_BOTTOM)
else:
return await deal.update_deal()
else:
return await deal.update_deal()
if deal.is_profitable() and len(deal.orders) == 1 :
if deal.current_trend == UP_TREND and CROSSED_TOP in deal.crossing:
return await deal.trailing_enable(CROSSED_TOP)
if deal.current_trend == FLAT_TREND and CROSSED_TOP_GREEN in deal.crossing:
return await deal.trailing_enable(CROSSED_TOP_GREEN)
if deal.current_trend == DOWN_TREND and CROSSED_BASIS in deal.crossing:
return await deal.trailing_enable(CROSSED_BASIS)
if deal.is_profitable() and len(deal.orders) > 1:
if deal.current_trend == UP_TREND and CROSSED_BASIS in deal.crossing:
return await deal.trailing_enable(CROSSED_BASIS)
if deal.current_trend == DOWN_TREND and CROSSED_BOTTOM_GREEN in deal.crossing:
return await deal.trailing_enable(CROSSED_BOTTOM_GREEN)
规则
当前的交叉点是一个变量,可以随时不同 当前趋势是一个变量,随时可能不同
我们在其中一种情况下开始交易:
- Deal.is_new()(交易未保存到数据库)且当前趋势为 UP,当前交叉点位于 deal.crossing 中
- Deal.is_new() 并且当前趋势是 FLAT 并且当前交叉点在 deal.crossing 中
- Deal.is_new() 且当前趋势为 DOWN,当前交叉点在 deal.crossing 中
我们在其中一种情况下为当前交易增加资金:
- Deal.is_bought()(交易在数据库中)并且当前趋势为 UP,当前交叉点在 deal.crossing 中
- Deal.is_bought()(交易在数据库中)并且当前趋势是DOWN并且当前交叉在deal.crossing中
我们在其中一种情况下从交易中获利:
- 交易有利可图,交易只有 1 个订单,当前趋势为 UP,当前交叉点在 deal.crossing 中
- 交易有利可图,交易只有 1 个订单,当前趋势为 FLAT,当前交叉点在 deal.crossing 中
- 交易有利可图,交易只有 1 个订单,当前趋势为 DOWN,当前交叉点在 deal.crossing 中
- 交易有利可图且交易有超过 1 个订单且当前趋势为 UP 且当前交叉处于 deal.crossing 中
- 交易有利可图且交易有超过 1 个订单且当前趋势为持平且当前交叉处于 deal.crossing 中
- 交易有利可图且交易有超过 1 个订单且当前趋势为 DOWN 且当前交叉点在 deal.crossing 中
如果没有达到 deal.is_bought() 和任何其他条件,我们只会更新交易
【问题讨论】:
标签: python python-3.x oop design-patterns