python - 如何避免在可以做多和做空的交易策略中重复代码
问题描述
我有多种策略可以做多或做空赚钱。目前,我将长边与短边分开编码,但它们是彼此的镜子。一个基本示例可能是收盘价超出前一根蜡烛的高点/低点并朝该方向交易:
direction = 'none'
if last_candle['close'] > previous_candle['high']:
direction = 'long'
if last_candle['close'] < previous_candle['low']:
direction = 'short'
trade(direction)
你怎么能这样写,这样你就只写一次逻辑?
解决方案
有一个内置的库来做代码:
from bisect import bisect
def foo(close):
previous_candle = {}
previous_candle['high'] = 100
previous_candle['low'] = 0
choices = ["short","none","long"]
breakpoints = [previous_candle['low'],previous_candle['high']]
return choices[bisect(breakpoints,close)]
#return ["short","none","long"][bisect([previous_candle['low'],previous_candle['high']],close)] if you prefer oneliner
print(foo(-50))
print(foo(50))
print(foo(150))
结果:
short
none
long
推荐阅读
- javascript - 折线图 - mysql php 和 .js
- php - 如何减少为此工作所需的 SQL 查询数量?
- javascript - 如何使用来自我的服务器的数据在我的 Web 应用程序中使用 JS Excel API
- javascript - ./src/main.js 中的错误模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):SyntaxError: : Unexpected reserved word 'let' (12:4)
- java - 无法使用 SqlServer 在 PCF 中使用 Spring Cloud 连接器设置 connectionProperties
- javascript - 检查数据属性等于值的元素是否存在
- database - Ecto 查询分组
- typescript - 您如何模拟 Apollo Server RESTDataSource 以使用 Jest 进行单元测试?
- html - 包装器 div 旁边的 div 之前的额外空间
- excel - NetSuite - 使用 SuiteScript 2.0 生成 Excel 在打开时不断损坏