码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 利用资金曲线选择策略加减仓时机


     

    数量技术宅团队在CSDN学院推出了量化投资系列课程

    欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:

    量化投资速成营(入门课程)

    Python股票量化投资

    Python期货量化投资

    Python数字货币量化投资

    C++语言CTP期货交易系统开发

    数字货币JavaScript语言量化交易系统开发


    每个策略都有其相适应的行情,如果某一段行情符合策略的逻辑,那么策略就会在这段行情大赚。但是,就如同硬币有正反面,策略在不适应的行情期,也会出现亏损的情况。优秀的策略,在不适应行情期能够做到小亏或者打平,而对于不太理想的策略,在不适应行情期有可能会大亏。第二类策略,是我们在测试过程中或是实盘交易过程中需要尽可能避免的,哪怕已经实盘,也需要在大幅度亏损后的第一时间停止交易,仔细分析交易逻辑。在这篇文章中,我们重点想要讨论的是,第一类策略的仓位选择时机。

    回撤,所有策略逃不开的话题

    纵使第一类策略很优秀,也有一定的概率遇到一段较长时间的不符合行情(历史没有出现,不代表未来不会出现),即使策略在不适应行情只是小亏,但是很多次小亏累积起来,也会逐步增加账户的亏损,从而对量化策略的执行者造成很大的心理压力,容易无法坚持执行策略。下图就是一个典型的例子,特别是在两段黄色框线的区域。

    ​

    如果看到上图,你可能不会觉得黄色框线区域在执行上有多困难,但是假如策略刚开发完成时,资金曲线下图是这样的。你感觉策略很不错了,准备好资金,放上实盘开始交易。

    ​ 

    但是运气不太好,刚开始交易,就遇到了策略的困难时期,不适应的行情造成策略一直在亏损,磨损资金中,甚至破了此前策略的最大回撤(MDD),此时伴随而来的是对策略的怀疑:我是否在策略开发过程中过度拟合?是否策略已经在当前的市场失效?又是否我只是运气不好?随着回撤的时间增加、回撤的幅度增大,就越有可能在丧失信心后修改/停止策略。

    ​

    就在我们修改/停止策略后,将策略丢弃在一旁,过了一段时间又想起了测试了一把,发现策略居然又创了新高。于是,这样一个优秀的策略,不仅在实盘中没有赚到钱,反而还亏损了。

    ​ 

    如果对策略仓位进行一定程度上正确的择时加减,可以减小这种压力和停止策略的遗憾。我们知道,策略表现的好坏,最直观的反应在策略的资金曲线上。以最典型的突破型趋势策略为例,这个大类的策略,一旦遇到震荡行情,资金曲线往往都会走平或者回撤。此时,可以加入一个简单的依据资金曲线择时的逻辑,即在资金曲线走坏时对策略进行减仓,而当资金曲线上升时加仓,或是恢复原本减仓的仓位。(当然也有例外,对于一些高夏普极其稳定的高频策略,如果对自己的策略很有信心,同时也有闲置资金的前提下,可以在回撤时进一步加码。)

    资金曲线均线加减仓

    本文重点讨论的,是当策略资金曲线走坏,而执行者又没有信心的情况,该如何去做?此时,应当对策略进行减仓,建仓后最直观的好处是:资金曲线的最大回撤比率会适当降低。那么,如何来量化策略的加仓、减仓时机呢,最简单的玩法,对资金曲线再拉一条移动平均线,当策略跌破均线,进行减仓,而当策略回到新高,进行加仓。

    ​ 

    如何在程序中加入此类对策略加减仓的逻辑,我们以multicharts(mc)为例,有两种方法:

    方法一:使用entryprice,exitprice,计算出每次交易的利润,再根据利润数值计算均值,进行仓位的加减码计算。这个方法的优点是,计算出的净利润可以真实的反应策略原本固定仓位时的利润率,而不会受到仓位变动的影响,因此可以精确的计算出策略加仓、减仓的时机。而相应的缺点是,相对于原始策略逻辑,需要做较大的代码上的改动。

    方法二:使用mc内置的netprofit变量,直接做均线运算。该方法的优点是程序实现比较简单,基本上不需要改动原先的主要策略逻辑,只需要加上过滤条件即可,而缺点就与方法一的优点相对应,netprofit幅度会直接受到此前策略加减仓位的影响,造成加减仓位的时机的延迟。

    由于方法二的实现较为简便,我们使用方法二,对一个具体的策略进行加减仓,逻辑很简单:在该策略中计算netprofit变量的均线,当netprofit大于均线,仓位是2份,而当netprofit小于均线,仓位是1份。与此同时,我们还有一个对照组,即不论何时,仓位都是2份。一起来看一下两者的对比绩效。(图1减码、图2未减码)

    ​ 

    ​ 

    可以看到,两者方法的净利润相差很小,但是减仓绩效的亏大回撤,相比较不减码降低了,从原先的27万多,降低到了22万多,也证实了我们此前的猜想。

    资金曲线高低点加减仓

    除了均线加减仓法,我们还可以把资金曲线当作一个特殊的品种,同样采用顺势的操作:当资金曲线突破N周期高点时,开启策略或者对策略进行加仓;当资金曲线突破N周期低点时,关闭策略或者对策略进行减仓。当然,这个N周期的N参数不能太小,否则就会陷于不断加仓减仓,无故损耗手续费的不利境地中。

    同样举一个例子:当资金曲线跌破最近50笔交易累积利润的最小值,则停止交易,而当资金曲线回到50笔交易累积利润的最大值(即资金曲线破前高),则开启交易。先来看资金曲线的对比。

    ​ 

    ​ 

    图1是做了加减仓的资金曲线,图2是原始策略的资金曲线,图1的曲线很显著的在策略回撤期,停止了策略,并在策略利润回复时重新开启策略。

    对比策略具体绩效参数,也可以看到,与均线加减仓类似,高低点加减仓,同样能够在不显著影响策略净利润的前提下,降低策略的最大回撤值。

    ​ 

    ​ 

    写在最后

    通过资金曲线对策略进行加减仓,在大多数情况下,是需要牺牲掉一些策略本身的利润,来换取策略最大回撤的降低,因为本质上和直接应用到金融资产的趋势策略信号一样,每次的进仓、出仓,都需要在确认趋势之后才能进行,会有一定的延后性。

    在技术宅看来,尽管有减小利润的弊端,资金曲线加减仓,还是一个值得尝试的方法,因为它可以避免两种情况:

    第一,对于优秀的策略,遇到文章开头出现暂时回撤的情况,哪怕使用减仓方式停止了策略,后续策略资金曲线创了新高,也会按照同样的方式加仓回来,这样我们就不会错过真正优秀的策略。

    第二,对于回撤美如画,实盘战五渣的策略,我们也不怕,如果策略一直回撤,那我们也只会亏损开始一段的资金,随后只要策略不创新高,就不会承担后续的损失。

    一句话总结:资金曲线加减码,相当于给策略加了一道保险。

       往期干货分享推荐阅读

    数字货币中短线策略(数据+回测+实盘)

    量化投资对于数据源、回测、实盘平台的选择

    数字货币稳定币对网格做市策略

    万物皆可秒——淘宝秒杀Python脚本,扫货618,备战双11!

    数字货币资金费策略

    数字货币无风险收益率又双叒叕扩大了!

    分享一个年化15%以上的无风险套利机会

    【数量技术宅|交易系统开发系列分享】网格交易系统开发

    通过深度学习股价截面数据分析和预测股票价格

    剖析一个数字货币高频策略

    数字货币交易信号实时预警推送(含群聊)

    Omega System Trading and Development Club内部分享策略Easylanguage源码

    量化交易如何选择云服务器,如何在本地远程开发与调试云服务器程序

    一个真实数据集的完整机器学习解决方案(下)

    一个真实数据集的完整机器学习解决方案(上)

    如何使用交易开拓者(TB)开发数字货币策略

    股指期货高频数据机器学习预测

    如何使用TradingView(TV)回测数字货币交易策略

    如何投资股票型基金?什么时间买?买什么?

    【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

    AMA指标原作者Perry Kaufman 100+套交易策略源码分享

    【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

    如何获取免费的数字货币历史数据

    【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

    【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

    【数量技术宅|量化投资策略系列分享】多周期共振交易策略

    【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

      大宗商品现货数据不好拿?商品季节性难跟踪?技术宅带你Python爬虫一键解决没烦恼

    【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

    【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

    【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

     

  • 相关阅读:
    解决 Spark2.X 查询Hive分区表修改后的字段为null?
    rabbitmq3
    【LabVIEW学习】2.for,while,事件
    停止员工拖延症!工时管理系统的作用之一
    单例模式(常用)
    【springboot进阶】摆脱 if/else 的高级应用 - 策略模式
    Vite + Vue3 使用cdn引入依赖 vite cdn vue3 cdn vite引入cdn
    状态模式(状态和行为分离)
    axios 简介及在项目中的使用
    第六章 图论 16 AcWing 1558. 加油站
  • 原文地址:https://blog.csdn.net/sljsz/article/details/125898802
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号