来源:掘金量化myquant.cn, 作者:胡琛 (南京师范大学理论物理博士),转载请注明出处!
凯利公式指导投资示例
引言
在上一次我们提到了凯利公式,很多人可能会想去套用凯利公式到我们的投资策略里面去,但是实际操作中,我们会发现,很多量化平台,回测数据并不够,譬如说,掘金量化平台,它提供了胜率,收益情况等,但是并没有赔率的结果,那么,我们是不是就不能去进行相应的凯利公式计算了呢?
凯利公式的套用
其实换一种思路,我们完全自己在策略中进行运算,笔者这里简单起见,对沪深300指数进行买入和平仓操作,交易策略用的是双均线策略,为了看出策略在交易标的上的胜率与赔率表现,笔者每次都是满仓买入满仓卖出,同时,简单起见同时为了看到足够多的交易,这里用了 1分钟数据择时,不再加入 T+1 限制。 策略代码如下所示:
-
# coding=utf-8
-
-
"""
-
双均线策略
-
"""
-
from gm.api
import *
-
from datetime
import datetime
-
from datetime
import date
-
from datetime
import timedelta
-
from collections
import deque
-
import numpy
as np
-
import talib
-
-
# 常用常量设置
-
DATE_STR =
"%Y-%m-%d"
-
TIME_STR =
"%Y-%m-%d %H:%M:%S"
-
HIST_WINDOW =
50
-
LIMIT_LISTED_MONTH =
2
-
SHORT_PERIOD =
5
-
LONG_PERIOD =
10
-
-
def init(context):
-
stock =
'SHSE.000300'
-
context.stock_prices = deque(maxlen=HIST_WINDOW)
-
context.risk_ratio =
1.0
-
context.entry_price =
0.
-
context.profit =
0.
-
context.loss =
0.
-
context.win_counter =
0
-
context.loss_counter =
0
-
start_today = datetime.strftime(date.today()-timedelta(days=
1), DATE_STR)
-
-
history_bars = history_n(symbol=stock,
-
frequency=
'60s',
-
count=HIST_WINDOW,
-
end_time=start_today,
-
adjust=ADJUST_PREV,
-
adjust_end_time=context.backtest_end_time)
-
for bar
in history_bars:
-
context.stock_prices.append(bar.close)
-
-
subscribe(stock,
'60s')
-
-
def on_bar(context, bars):
-
-
# ----------------------- 策略执行 -----------------------------------------
-
# 数据不足数据滑窗要求,返回
-
if len(context.stock_prices) < HIST_WINDOW:
-
return
-
-
pos = context.account().position(symbol=bars[
0].symbol, side=PositionSide_Long)
-
open_vol = int(context.account().cash.available * context.risk_ratio /bars[
0].close/
100)*
100
-