SF34 | 股指日内交易策略(开发贴)
大家好,我是乌克兰剑圣。
这一期我们开发一个股指的日内策略,为了多平台源码适应,我们基于收盘价机制编写。收盘价模型有利也有弊,如果你的周期比较大,比如在15分钟以上,日线级这种的出入场信号会有比较大的滞后。但是,对于5分钟级别以下,短线的交易模型滞后性不明显,且可以过滤一些毛刺大针。
特征一:
股指一天交易4个小时且没有夜盘,交易时间短,手续费昂贵,频繁的进出场不一定有好的收益结果。最重要的是抓住日内的一个波段,也就是最肥最美的鱼身行情。
特征二:
连续性差,股指跳空是经常发生的事情。过大的跳空缺口基本消化了市场预期,全天的走势大概率横盘或反抽。大跳空之后立即进场不是明智的选择,相反会承担较大的风险。
简介:
适用周期:3分钟
适用品种:IF888,IH888,IC888
手续费滑跳:默认实盘手续费,双向各1滑
说明:策略原生品种是IF,其他俩个股指建议自己重新调整参数
原理:
针对上述特征制定交易条件:
收盘清仓
VWAP日内成交量均线
跨周期判断大级别趋势
强弱过滤
5.出场条件
6.跳空行情过滤
VWAP日内成交量均线
我们知道VWAP的使用分别是微观与宏观俩个层面,本期我们以微观层面的算法来帮助我们实现策略,也就是以下这个公式来计算:
成交量加权均价,上述公式即 N周期内每笔成交量*每笔成交价格的乘积之和/N周期内成交量之和。
简单算术平均线(MA),指数移动平均值(EMA),加权算术移动平均线(SMA),这些均线的计算方式各有不同,也有不同的平滑效果,但都只是价格和时间的二维构成,本质上并无区别。成交量加权均价(VWAP)就不一样了,它把计算成本价最重要的因子成交量考虑进来,得到的成本价格相对于其他均线更具有说服力。
如图所示,日内成交量均线就OK了,这个主要是帮助判断日内趋势。
跨周期判断大级别趋势
TB论坛以前有一个代码实现跨周期的案例,我们可以直接使用:
Mtsummation
Params
Series<Numeric> Price(1);
Series<Numeric> BarCnt(0);
Numeric Length(10);
Vars
Series<Numeric> SumValue(0);
Numeric i;
Numeric j(0);
Begin
SumValue = 0;
For i = 1 to Length
{
If (Price[j] <> InvalidNumeric)
{
SumValue = SumValue + Price[j];
j = j + BarCnt[j];
}
else Break;
}
Return SumValue;
End
Mtbar(跨周期Bar线)
Params
Numeric TimeFrame(1440);
// 目标时间周期:月线=40320,周线=10080,日线=1440,4小时线=240
// 其他1小时内的周期等于相应的分钟数,如:1小时=60, 30分钟=30。。。
// 支持不规则分钟数,如3分钟,8分钟,之类都行
Numeric BarsBack(1);
// 目标时间周期BAR偏移:
// 1--表示将目标时间周期下的前1根K线数据作为与当前Bar对应的目标时间周期下的K线数据
// 0--表示将目标时间周期下的截止到目前为止的数据转换为与当前BAR对应的目标时间周期下K线数据
NumericRef oCurBar; // 目标时间周期下的Bar索引
NumericRef oOPenHT; // 目标时间周期下的开盘价
NumericRef oHighHT; // 目标时间周期下的最高价
NumericRef oLowHT; // 目标时间周期下的最低价
NumericRef oCloseHT; // 目标时间周期下的收盘价
NumericRef oVolHT; // 目标时间周期下的成交量
NumericRef oOpenIntHT; // 目标时间周期下的持仓量
Vars
Series<Numeric> barCnt;
Series<Numeric> CurBar;
Series<Numeric> barCntSum;
Series<Numeric> OpenHT;
Series<Numeric> HighHT;
Series<Numeric> LowHT;
Series<Numeric> CloseHT;
Series<Numeric> VolHT;
Series<Numeric> OpenIntHT;
Numeric CurTime;
Numeric PreTime;
bool condition(false);
Numeric i;
Begin
If (TimeFrame == 40320) // 月线
{
CurTime = Month;
PreTime = Month[1];
}
Else If (TimeFrame == 10080) // 周线
{
CurTime = IntPart(DateDiff(19700105,Date)/7);
PreTime = IntPart(DateDiff(19700105,Date[1])/7);
}
Else // 其他时间周期
{
CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
}
condition = CurTime != PreTime;
If (CurrentBar==0) // 如果是第一根Bar, CurBar=0
{
barCnt = 0;
CurBar = 0;
OpenHT = Open;
HighHT = High;
LowHT = Low;
CloseHT = Close;
VolHT = Vol;
OpenIntHT = OpenInt;
}
Else
{
If(Condition)
// 如果在目标周期下,属于另一根K线,则CurBar加1
{
barCnt = 1;
CurBar = CurBar[1] + 1;
OpenHT = Open;
HighHT = High;
LowHT = Low;
VolHT = Vol;
}Else
// 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
{
barCnt = barCnt[1] + 1;
CurBar = CurBar[1];
OpenHT = OpenHT[1];
HighHT = Max(HighHT[1],High);
LowHT = Min(LowHT[1],Low);
VolHT = VolHT[1] + Vol;
}
// 收盘价和持仓量总是取最新值
CloseHT = Close;
OpenIntHT = OpenInt;
}
// 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
// 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
barCntSum = barCnt ;
If(BarsBack == 0)
// 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
{
barCntSum = 0 ;
}Else If(BarsBack == 1)
// 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
{
barCntSum = barCnt ;
}Else
// 如果BAR偏移参数为其他,则取大时间周期的指定偏移后的那根K线的BAR数据
{
For i = 2 To BarsBack
{
barCntSum = barCntSum + barCnt[barCntSum];
}
}
// 最后将相应的K线数据作为引用参数返回
oCurBar = CurBar;
oOpenHT = OpenHT[barCntSum];
oHighHT = HighHT[barCntSum];
oLowHT = LowHT[barCntSum];
oCloseHT = CloseHT[barCntSum];
oVolHT = VolHT[barCntSum];
oOpenIntHT = OpenIntHT[barCntSum];
Return barCnt;
End
Mtma(跨周期均线)
Params
Numeric TimeFrame(1440); // 目标时间周期参数,参数说明参见MtBar
Numeric BarsBack(1); // 目标时间周期BAR偏移参数,说明见MtBar函数
Numeric Length(10); // 均线周期
NumericRef oMA; // 以目标时间周期下的K线数据计算出的移动平均线
Vars
Series<Numeric> mtBarCnt;
Series<Numeric> mtClose;
Numeric refCurBar;
Numeric refOpen;
Numeric refHigh;
Numeric refLow;
Numeric refClose;
Numeric refVol;
Numeric refOpenInt;
Numeric SumValue(0);
Numeric i;
Numeric j(0);
Begin
mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
mtClose = refClose;
SumValue = MtSummation(mtClose,mtBarCnt,Length);
oMA = SumValue/Length;
Return mtBarCnt;
End
黄色线就是跨周期均线,判断大级别趋势很有必要,日内也要顺势而为。
强弱判断,跨周期获得强弱指标变化值
跳空过滤
虽然整体重心是下移的,但是日内交易并不好做,跳空以后横盘,再跳空反抽。这种情况常见,但是不好统计特征,暂且设置为不做。
移动出场:
震荡过滤:
绩效测试
TBquant平台(2019年至今,平台限制5Wbar,10年测试请看WH8):
文华8平台(2010年至2021年):
总结
模型下单是K线走完下单,收盘价模型的通用性很好,SF34的TB和文华平台的源码绩效测试很接近。股指日内模型还可以继续优化,为了减少震荡行情的交易次数,条件设置的过于严苛,有可能会错过一些行情。建议作为辅助策略配合趋势策略组合使用,有问题或者改进思路,我们在社群里交流吧。
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。
SF34 | 股指日内交易策略(开发贴)相关推荐
- SF25 | 日内交易策略开发(一)黄金日内交易模型
致力于分享量化策略,培训视频,Python,算法研究等相关内容. 这一期SF策略我们来开发一个日内模型,交易品种为黄金: 手续费滑跳设定为实盘标准: 步骤一:波动率过滤 我们发现黄金在2019年以前的 ...
- 5种经典程序化日内交易策略
日内交易一般有手工和程序化两种,收益来说手工收益要大于程序化. 国内程序化交易还处于起步阶段,本文摘取了海外比较公开的日内交易策略思想给予大家一些分享. 在做程序化交易的过程中,首先要碰到的问题是如何 ...
- 史上五种经典程序化日内交易策略
1. 菲阿里四价 昨天高点.昨天低点.昨日收盘价.今天开盘价,可并称为菲阿里四价.它由日本期货冠军菲阿里实盘采用的主要突破交易参照系. 主要特点: 日内交易策略,收盘平仓: 菲阿里四价指昨日高点.昨日 ...
- 一个短线日内交易策略 ——R-Breaker
R-Breaker是一种短线日内交易策略,该策略已经在市场上存活了二十年之久,尤其当指数波动较大时,该策略表现越好,根据S&P至2011年底的统计,R-Break也多次名列前十,由于进入榜单的 ...
- AJPFX平台:01.14日内交易策略
AJPFX分析恒指: 恒指从周线上看,恒指经过近五周的短线下行后收取启明之星形态,上周恒指收取光头光脚大阳线,后市有望打破宽幅整理区间,大趋势上看多头占优,低位支撑看26230.26000两个关键位置 ...
- AJPFX平台:01.11日内交易策略
AJPFX分析恒指: 恒指昨日收阴,日线上呈现较长下影线的小阴线,表示日线多头有减弱迹象,由于昨日晚间的大幅上行,今日早盘预计低开或伴随有回调修复走势,昨日最高触及26675位置,大趋势多头较强,上方 ...
- 最赚钱的日内交易策略_百万美金交易员分享:我认为这是世界上最简单的外汇交易策略...
有人说,"如果拉长时间周期来看,在外汇交易里,各种交易策略更像是一种安慰剂及心理暗示,而没有实质的作用,对于许多外汇交易者来说,交易策略更像是一种手段,让自己能够继续理智判断下去的交易手段. ...
- 网格交易模型 股票网格交易 期货网格交易 策略开发
网格交易模型 主要逻辑: 包括两个类: 1.new_block创建新的网格,其中有网格中线值(start)参数,(add)按绝对值创建网格,(times)按小数比例创建网格,(quantity)网格中 ...
- vnpy框架的策略开发和回测逻辑详解---以螺纹钢主力合约的R-breaker日内策略为例
笔者之前写过一篇关于vnpy的简单介绍和安装方法,本篇文章的目的是简单介绍vnpy的框架,然后详细介绍一下如何用vnpy开发自己的量化策略以及整个的回测逻辑是怎么样的.只有我们真的搞清楚了框架结构和相 ...
最新文章
- 前端学习笔记(五)-JavaScript语法基本概念
- python之commands模块
- pycharm使用github
- Spring 学习二-----AOP的原理与简单实践
- Lucene入门与使用(一) [转]
- .Net Core中对FluentEmail.Smtp进行封装使用
- 连接spark集群Windows环境搭建
- 《博弈圣经》创业就是文化实践 创业人应具备博弈占优特征
- tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
- DevOps-SRE岗位到底是什么?
- django jwt token 令牌
- 南通大学计算机专业校区,南通大学计算机科学与技术专业
- 代写硕士论文 计算机 代码,天大、厦大两硕士代写买卖论文被撤销学位
- 想看懂资管行业?不清楚有哪些资管产品怎么行!
- VBS奇葩操作 “我是猪”
- 基于Python实现的全球新冠病毒数据分析
- Java中获取日期和时间
- [开关电源]浪涌电流有点高?我来给你支支招
- 信息学奥赛一本通C++语言——1139:整理药名
- Pedersen承诺
热门文章
- Oracle数据库多表连接查询操作以及查询操作的补充
- nett服务器接收消息的方法,C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用...
- 关于汽车诊断OBD的理解(ISO15031-5)(转发)
- 项目一:瑞吉点餐中遇到的问题集
- FileUriExposedException: file:///storage/emulated/0/Android/data/com.skyrin.bingo/cache/app/app.apk
- JavaScript.笔记
- 展讯平台初步调试笔记
- 牛客网在线编程专题《剑指offer-面试题15》链表中倒数第k个节点
- Java是什么?为什么要学习Java?Java有哪些特点?
- 调度——特殊生产线介绍