V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
datayes2015
V2EX  ›  Python

[期货回测] 海龟交易×商品期货

  •  
  •   datayes2015 · 2016-11-03 13:43:07 +08:00 · 6606 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前言

    虽为期货小白,本萌也忍不住来感受下 T+0 和做空的感觉~

    之前有写过股票海龟交易系统的帖子——海龟交易系统的实现,获得了广大 V 友的好评和收藏 https://uqer.io/community/share/57bd5864228e5b79a575a9b2
    关于海龟交易的详细介绍可参见该帖。所以我再接再厉,将海龟交易系统套用在期货回测商品上。本帖主要是体验期货回测及将海龟交易移植到期货平台看看效果~

    一、海龟交易步骤回顾:详细交易步骤: https://uqer.io/community/share/5812b3e5228e5b43f85c2252

    唐奇安通道捕捉突破。对于唐安奇通道的天数 N 设置,之前设置为 20 天。但个人觉得在期货日线中这个天数还是略久,反应比较慢。因此觉得 N 设为 5 或 10 较好;当然分钟线的话得另行讨论

    计算平均真实波幅 ATR

    计算每次加仓 1unit ,购买的手数

    捕捉突破,判断开仓方向

    判断是否加仓、是否止损

    若止损了回到 4 ,未止损回到 5

    二、需要用到的计算、判断函数

    具体代码见下个 cell

    IN_OR_OUT 用来判断唐奇安通道的突破(上轨突破或下轨突破),从而判断多开还是空开

    CalcATR 用来计算 ATR

    Add_OR_Stop 用来判断加仓还是止损

    CheckPosition 用来检查当前持仓状态

    CalcUnit 用来计算买入 1unit 对应的手数

    三、回测: https://uqer.io/community/share/5812b3e5228e5b43f85c2252

    3.1 对于回测的一些说明

    3.1.1 initialize(futures_account)的说明:
    futures_account.last_deal_prcie 为上一次交易的价格

    futures_account.limit_unit 为持有最多 unit 的个数

    futures_account.unit 为 1 个 unit 的手数

    futures_account.add_time 为加仓次数(不超过 futures_account.limit_unit )

    futures_account.position_state 用来记录持仓状态: 0 为未持仓, 1 位持多,-1 为持空

    futures_account.last_main_symbol 用来记录主力合约,在主力合约忽然变化的时候进行相关处理

    3.1.2 主力合约变化的情况

    期货回测平台目前没考虑主力合约更换的情况。一般有两种处理:

    持有原合约,出现主力合约变更时,对原合约平仓,并买入更换的主力合约

    持有原合约,出现主力合约变更时,对原合约平仓,但是不一定买入新合约,而是根据策略逻辑判断是否买入

    本策略采用第二种方式处理

    3.2 日线螺纹钢测试:

    策略设定:

    唐奇安通道 N 设定为 5

    最大持有 unit 数为 4 (最多加 3 次仓)




    分析:

    收益曲线挺像阶梯上行,说明较好的实现了海龟交易的理念

    从策略表现来看,年化收益 126%,夏普比率 3.76 ,表现不错;最大回撤 12.2%,还不错,本身海龟策略的动态 ATR 止损,而且仓位控的好,回撤应该不大,但由于日线原因,有些时候无法及时触发止损,因此回撤也不是特别小。

    观察收益曲线发现,回撤较大的地方往往是一波涨势之后,回想 ATR 止损,是在最后一次买入价格 last_deal_price 的基础上减去 2ATR 作为止损点的,当盈利很大之后,止损点就显得有点“跟不上”了,因此,这是个可以改进的点。不过就像上面说的,日线的话很可能不能及时触发止损,因此这里止损点改进的问题暂不讨论。

    再看看 ATR 、价格的曲线及仓位变化情况:




    可以看出,当价格波动幅度变大时, ATR 变大。在趋势反转区域,出现了较大波动,由于 ATR 计算平均真实波幅,在反转之后才到达高点,这就使得处于趋势反转时,止损点反而下移了,因此止损有一定“延迟”。

    观察仓位发现,最多仓位没超过 60%,大部分情况轻仓操作,仓位在 30%左右。不过风险厌恶程度不高的话,可以适当提高 unit 的最大值,以博取更高收益。

    3.3 不同商品,在唐奇安通道 N 分别为 5 , 10 , 20 时的策略表现: https://uqer.io/community/share/5812b3e5228e5b43f85c2252

    选取品种为: 螺纹钢、焦炭、铅、焦煤、锌、铜




    分析:

    从表现来看,焦炭的收益最高,达年化 153.3%,螺纹钢次之,接着是焦煤。 铅则为小亏,锌是雪崩了啊。。。

    对于各个品种,除了焦炭和锌,其余品种 唐奇安通道 N 值为 5 的时候表现最好,与预期相同。

    从回撤看,除了锌比较特殊之外,大部分情况回撤都小于 20%,说明海龟策略对回撤的控制还是不错的,加上上面对止损提出的改进思路,应该还能做的更好。

    小结: https://uqer.io/community/share/5812b3e5228e5b43f85c2252

    从回测来看,海龟交易策略还是挺适合部分商品期货的,但是对于不同的品种,由于其自身特性不同,对于参数的设定还值得推敲,例如最大 unit 数,这个对于不同品种仓位控制效果需求可能不同;再如唐奇安通道的 N 值,在分钟线如何设定值得研究

    这里没有设定止盈,我个人的理念是不设止盈,控制好止损,让利润奔跑。文中止损点还有优化的空间,在盈利充分的时候,应当上移止损点锁住更多利润

    对于分钟线回测,目前回测框架似乎不完善, 1 分钟线回测收益高的离谱。。有兴趣的矿友可以试试。期待下个版本~

    小伙伴们,期货回测该玩起来辣
    15 条回复    2017-07-14 18:45:56 +08:00
    newworld
        1
    newworld  
       2016-11-03 13:50:32 +08:00 via iPhone
    可以不可以带新人进来玩
    datayes2015
        2
    datayes2015  
    OP
       2016-11-03 13:58:55 +08:00
    @newworld 当然可以啦:)
    bigtan
        3
    bigtan  
       2016-11-03 14:03:29 +08:00
    一分钟好得离谱是只设置了手续费,没有设置滑点吧
    bigtan
        4
    bigtan  
       2016-11-03 14:04:10 +08:00
    @datayes2015 商品的 ticksize 非常的大,滑点控制不好
    datayes2015
        5
    datayes2015  
    OP
       2016-11-03 14:12:49 +08:00
    @bigtan 恩,有道理,这里我再多思考思考,把模型设置的更精准:)蟹蟹提出哈
    612
        6
    612  
       2016-11-03 18:33:52 +08:00 via Android   ❤️ 1
    yjxjn
        7
    yjxjn  
       2016-11-04 11:00:24 +08:00
    螺纹钢收益大也是由于今年‘去产能’去的好吧。。。。。但是我就是想做 K 线的趋势交易,不单单限于创业板指数, ETF ,股票 K 线,这个也能实现么?》
    erbajie
        8
    erbajie  
       2016-11-07 10:09:51 +08:00
    grindsgears
        9
    grindsgears  
       2016-11-24 22:24:14 +08:00   ❤️ 1
    哎,,,又来一个
    早点放弃吧。不好意思,说的比较直接。。 希望不要介意
    我看过 n 多,用这么海龟,什么之类的,上个世纪的东西,希望能在交易市场赚钱。
    成功的几率应该和买彩票中大奖差不多

    有太多人加入进来,做这种所谓的“回测”。。。 如果你练练代码,玩下可以,,指望挖出策略赚钱,,可以醒醒了!!

    实质的建议
    目前能够稍微试试的就那么几种
    1. 基于 order book 的 market making ,。 就是真正的 HFT , 门槛很高,,现在基本都是在拼硬件了
    2. 基于 spread 和 assert class 的 spread 动态套利,,比如期货不同月份合约, 还有那种 lme 铜期货和上交所 cu 铜期货直接的动态套利,现在空间也越来越小
    3. relative value , 比如在美国股票的同一个板块,买最强的那只,空最弱的,同时用 option 来避免波动
    4. globe macro ,,, 比如,, 美国大选后,, 去买多 russell 2000 然后去 short 新兴市场。 宏观对冲

    你跑出来的曲线,,和实际几乎一点关系都没有
    1. 数据进度, 最多就是 tick+ last price , bid ask order book , market depth 完全没有。 简单的说,你的订单根本无法成交,或者 spread 太大
    2. 你没有考虑资金,, 交易手续费随时调整, 保证金随时调整。 可能中途就挂的没钱
    3. 一个动态的市场,每次逻辑都不一样, 你要用固定的方法,, 基本就会挂, 什么海龟,本质就是 trend following ,说白了就是追踪趋势,, 拜托,,,,如果你要知道有趋势,或者趋势什么时候反转,你用什么都一样,, 那么用个均线,,收益不会和你的这个差太多。。。 海龟这种 trend following ,在市场 chop ,就是震荡的时候,会被杀的裤子都没有,,, 不信你试试看跑下今年的 pta , c 之类或者 2012~2014 的 a 股。。。你再试试,用简单的两条均线 sma200+sma5 去跑焦炭,,赚的绝对不会比你这个复杂的差
    4. 1 分钟,,, lmaoooooooooooo 。。。 来实盘,我等你。 哈哈哈

    准备研究这个,或者几个什么指标组合, k 线形态之类不具备专业知识。。。 最好建议你们不要实盘,,当成好玩的不错,,来实盘,钱早晚被我赚走,, lol


    PS: 中国期货好像做的最好的都是对产业很了解的,不管是现货还是期货。而且,虽然你看他们在 RB 上的仓位很大,其实早些时候,他们都是同时去 short i ,空铁矿石,,用此来做空钢厂利润.。
    a 股,,今年的主流策略都是, 网下打新+ alpha + 底仓 T+0 。 所以现在的日均波动越来越小。
    grindsgears
        10
    grindsgears  
       2016-11-24 22:32:38 +08:00
    祝你好运
    wynemo
        11
    wynemo  
       2016-11-25 14:29:57 +08:00
    r#9 @grindsgears 老司机阿
    datayes2015
        12
    datayes2015  
    OP
       2016-11-25 15:03:50 +08:00
    @grindsgears 感谢指点,能抓老鼠就是好猫,及时做韭菜也要做一颗茁壮成长的韭菜:)
    a930329019
        13
    a930329019  
       2016-11-25 15:28:48 +08:00 via iPhone
    多少倍杠杆?
    qdwang
        14
    qdwang  
       2017-07-14 18:40:49 +08:00 via iPhone
    @grindsgears 哈哈太直白了 不过一般不撞南墙不回头
    qdwang
        15
    qdwang  
       2017-07-14 18:45:56 +08:00 via iPhone
    lz 快点实仓操作起来 这东西和游泳一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5292 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:27 · PVG 16:27 · LAX 00:27 · JFK 03:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.