海龟交易双周期策略代码实现

参考文档

聚宽文章:https://www.joinquant.com/post/27584
标题:【策略】海龟交易法则
作者:梨花香恶魔
聚宽文章:https://www.joinquant.com/post/1401
标题:【量化课堂】海龟策略
作者:JoinQuant量化课堂
聚宽文章:https://www.joinquant.com/post/17113
标题:海龟交易体系(股票版)
作者:BAFE
标题:用Python量化海龟交易法则
作者:moonshining
聚宽文章:https://www.joinquant.com/post/cbf539f28976537d3376565b1bd1d625

首先向前面四位作者致敬,感谢他们的分享。

海龟交易法则简介

海龟交易法则是一个完整的交易系统,具备一个完整的交易系统所应有的所有成分,包括市场、入市、头寸规模、止损/止盈、退出、买卖策略等:

  • 市场:买卖什么?
    我选择了沪深300指数对应的ETF指数基金:510300.XSHG

  • 头寸规模:买卖多少?
    第一次买入时,持仓的大小根据持仓股票的波动率N(标的交易价格平均浮动)确定,保证因为标的波动造成的损失不超过1%,计算g.unit

    g.unit = math.floor(value * 0.01 / current_N / 100)*100

    加仓时,最大为也是1 unit。当前价格比突破价格超过0.5N时加仓。
    current_price >= break_price + 0.5 * current_N

  • 入市:什么时候买卖?
    current_price > max(price['close']),当前价格突破20天(sys1)或者55天(sys2)收盘价时。

  • 止损:什么时候卖出一个不再上升的头寸?
    current_price <last_buy_price - 2 * g.current_N 当前价格跌破前一次买入价的2N时。

  • 离市:什么时候退出一个盈利的头寸?
    current_price <min(price['low']),当前价格跌破10天(sys1)最低价或者20天(sys2)最低价

  • 策略:如何买卖?
    见代码和下面的简单解释

我主要做的工作

  • 代码实战:修改后的代码在Python3和Python2都可以运行。更进一步,可以在一创聚宽平台上实盘运行。

  • 双周期策略系统:策略一(sys1)入市时间为20天,止盈时间为10天;策略二(sys2)入市时间为55天,止盈时间为20天。

g.in_day1 = 20
g.in_day2 = 55
g.out_day1 = 10
g.out_day2 = 20

资金分成两个部分,策略一的占比为0.8
用g.sys1和g.sys2分别记录两个策略的持仓量,
用g.ratio记录sys1所配的现金
g.ratio = 0.8

  • 波动率N的初始计算在初始化时完成
  price = attribute_history(g.security, g.N.maxlen+1,   '1d', ('high', 'low', 'close'))
  print('g.N.maxlen+1=%d\n' %(g.N.maxlen+1))
  print('g.N.maxlen*2+1=%d\n' %(g.N.maxlen*2+1))
  for i in range(g.N.maxlen+1, g.N.maxlen*2+1):
          li = []
          for j in range(i-19,i+1):
              a = price['high'][j]-price['low'][j]
              b = abs(price['high'][j]-price['close[j-1])
              c = abs(price['low'][j]-price['close[j-1])
              li.append(max(a,b,c))
          current_N = np.array(li).mean()
          g.N.append(current_N)
  print('g.N={0}' .format(g.N))
  • 波动率N之每天更新在每天开盘前完成

    def before_trading_start(context):
        log.info("g.security: %s",g.security)
        g.current_N = cal_N()
        log.info("a new day is    comming--------------------\n")
        log.info('当前持仓:%s',context.portfolipositions.keys  ())
        print("总权益:{0:.2f}万".format(context.  portfolitotal_value/10000))
        return
    
  • 每天14:30根据当前价格判断无持仓时是否需要开始买入?如果有持仓,则按顺序判断是否需要止盈、止损、加仓?

    current_data = get_current_data()
    current_price = current_data[g.security].last_price 
    value = context.portfolio.total_value
    cash = context.portfolio.available_cash
    if g.sys1 == 0:
          buy(current_price, g.ratio*cash, g.in_day1)
    else:
          if sell(current_price,g.out_day1):
              return
          if stop_loss(current_price,g.last_buy_price1):
              return
          addin(current_price, g.ratio*cash, g.last_buy_price1)
    
  • 每天14:55检查交易情况

    def check_trade(context):
        current_returns = 100 * context.portfolio.returns
        log.info("当前收益:%.2f%%,当前持仓: %s",    current_returns, list(context.portfolipositions.keys  ()))
    
  • 整个代码比较紧凑,运行时打印的信息比较多,方便每天掌握持仓和浮盈


    logoutput.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容