我们发现,量化投资最重要的还是择时,就是判断当前市场是熊市还是牛市还是猴市。区班主这篇来讨论一下择时策略怎么做。
择时有很多种做法,均线判断、布林线、成交量和周期高低点。
均线判断就是通过均线的倾角,判断当前市场是上升还是下降。通过判断是否站上5日均线判断是否小牛,判断是否跌破120日均线判断是否进入熊市。几个因素综合起来决定当前市场强弱。
布林线是一个很好的判断方式,根据布林线中线的倾角,判断市场是上升还是下降。根据布林线的高点和低点来高抛低吸,是猴市里很好的做法。布林线如果开口加大,则是市场波动的前兆。
成交量一般是个辅助手段,一般底部和顶部都会放量。数字货币有一个好处就是,交易深度很容易获得。通过分析挂单情况,结合成交量,也能判断当前市场热度。
以上策略实现起来有一些难度,而且需要慢慢调优。周期高低点是本文讨论的重点策略,具有实现简单,效果直接的优点。周期高低点的思路很简单,就是结合短周期高低点和长周期高低点,判断当前市场是大牛,小牛还是大熊,小熊还是猴市。有了这个择时判断,我们在市场转向时,可以配合一定的策略。比如从小牛到大牛,可以加仓。大牛到猴市,可以平仓。猴市到小熊,可以初步建立空仓。进入大熊,则做空。
我们先贴部分代码,主要思想都在注释里了,有缘人自然可以看懂。长周期选择日线,5日为周期。短周期选30分钟线,10个为周期,即5小时。可以结合相关数字货币的波动率和仓位调整参数。
我们再贴一下执行结果。可见9月24日-9月25日的小熊转大熊,9月26日到10月7日的震荡猴市加小熊,以及10月9日出现小牛信号,都有正确提示。可见周期高低点策略,简约不简单。
结合数字货币选型策略和对冲策略,还可以有更多玩法。如果把前20名市值的数字货币牛熊态排列出来,每次挑选2个数字货币大熊和大牛做对冲,基本可以做到低风险套利,这将是后面可以完善的策略。
感兴趣的朋友也可以在币乎找到我。币乎是一个写文章可以赚到数字货币的地方。 ![
/*backtest start: 2019-01-01 00:00:00 end: 2019-10-10 00:00:00 period: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] */ //通过快慢周期的高低点判断当前处于什么市场 //注册币乎后https://m.bihu.com/signup?i=1ewtKO&s=4&c=4 //搜索 物联网区块链 可以联系到作者区班主 function main() { var dhigh; var dlow; var mhigh; var mlow; var status_name=["猴市","大牛","小牛","大熊","小熊"]; //定义并赋值 var before_status=0; var now_status=0; while (true) { var drecords = exchange.GetRecords(PERIOD_D1); var mrecords = exchange.GetRecords(PERIOD_M30); //日线5天内的高低点(不包含当前Bar) dhigh=TA.Highest(drecords, dnum, 'High'); dlow=TA.Lowest(drecords, dnum, 'Low'); //30分钟线10个周期内的高低点(不包含当前Bar) mhigh=TA.Highest(mrecords, mnum, 'High'); mlow=TA.Lowest(mrecords, mnum, 'Low'); if(mlow>dhigh){ //分钟低点突破日高点,大牛开始 now_status=1; //Log("大牛"); }else if(mhigh>dhigh&&mlow<=dhigh){ //分钟高点突破日高点,但是分钟低点还没突破日高点,小牛开始 now_status=2; //Log("小牛"); }else if(mhigh<dlow){ //分钟低点跌破日低点,大熊开始 now_status=3; //Log("大熊"); }else if(mlow<dlow&&mhigh>dlow){ //分钟低点跌破日低点,但是分钟高点还没跌破日低点,小熊开始 now_status=4; //Log("小熊"); }else{ //没有方向,猴市 now_status=0; //Log("猴市"); } if(now_status!=before_status){ Log("日线高点",dhigh," 日线低点",dlow,"30分钟线高点",mhigh," 30分钟线低点",mlow); Log(status_name[before_status],"转",status_name[now_status]); before_status=now_status; } Sleep(Interval*1000); } }template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6