文华财经研究部1•程序化交易概念及应用指南2•模型基本结构和编写要点3•如何编写带有资金管理和止损的策略模型4•如何进行多维的模型评估5•如何编写基于Tick逐笔数据的日内高频模型6•如何编写下单组件对下单过程进行精细控制什么是程序化交易?程序化是一个交易的概念,用户可以把平时的交易思想,写成交易策略模型,让电脑去执行这些交易思想,自动下单。利用电脑的计算能力和铁面无私,提高下单的速度和效率,避免交易收到情绪的影响,理性交易。程序化也是一个研究的概念,程序化平台都提供丰富历史数据和收益、风险等多角度的模型评估算法的,用户可以在电脑的仿真交易环境下,去测试、改进策略模型,这样交易思想就可以快速成熟了,不再需要动辄几个月甚至几年的实盘验证了。利用电脑的历史数据存储能力,能节省时间,节省金钱。程序化交易应用指南不同用户群体对程序化的需求也不尽相同,我们把程序化应用,从初级应用到高级应用,分成6个级别向大家介绍。信号预警盒子公式条件单趋势跟踪策略(过滤模型)加仓资金管理策略(非过滤模型)模型组合高频交易一级:信号预警盒子信号预警盒子是一种为程序化半自动下单的用户提供的功能,客户可以在信号预警盒子自己设定预警的模型,在条件满足的时候,系统能够会弹出弹出预警窗口,确认就可以直接下单了。这个功能类似以前版本的半自动,但是增加了显示加载模型运行情况的列表,我们叫做盒子。盒子还可以后台运行,加载了信号预警以后,可以做看盘等其他操作,不影响模型出信号的。信号预警盒子的主要功能:1、点击盒子列表中的一行,可以打开k线图上查看设定预警模型的信号。2、支持设置信号持续时间和信号消失确认时间二级:公式条件单公式条件单是为只按照某种特定条件进行交易的用户,提供的一种灵活的程序化执行方式。公式条件单让条件单不再停留在简单的价格条件和时间条件上,可以利用文华麦语言编写出思路更广的条件。客户可以在组群中加载条件单模组,系统根据写入的条件进行自动交易。公式条件单的主要功能:1、只写开仓条件,按照条件自动开仓;2、只写平仓条件,将初始化带入模组的持仓自动平掉;3、信号独立,没有过滤机制。4、可以随意进行主观干预。5、可以后台运行。三级:趋势跟踪策略(过滤模型)为有完整交易策略的投资者提供的全自动程序化交易。交易策略中一开一平,且交易手数开平对应,不会出现锁仓和加仓的情况。客户自己在组群中加载模组后,出现信号按照信号执行方式确认后自动下单交易。不加仓模型的主要功能:1、可以通过麦语言,编写各类技术分析指标、形态、止损止盈等策略;2、模型中必须加入AUTOFILTER函数以实现交易指令的开平对应;3、可以主观干预。4、可以后台运行。四级:加仓资金管理策略(非过滤模型)为资金量较大,且交易周期跨度较大的投资者提供的全自动程序化交易。在制定交易策略的时候,可以对资金进行合理规划,确定首次开仓手数和后续加仓手数,在策略中实现更灵活资金管理。客户自己在组群中加载模组后,出现信号按照信号执行方式确认后自动下单交易。加仓模型的主要功能:1、除不加仓模型可以实现的策略外,还可以实现带有资金管理的策略。2、编写时可以利用头寸函数进行过滤,避免锁仓;3、可以主观干预;4、可以后台运行。五级:模型组合程序化交易是一项系统工程,工程就是要通过各个环节的配合,达到结果的最优。程序化交易想实现稳定盈利,就需要模型组合,可以把各种不同策略类型的模型,合理分配每一个模型的资金量,行情不好的时候模型之间盈亏互抵,行情好的时候共同盈利,即可以平滑资金曲线,又可以达得稳定盈利的效果。Wh8的模组,为用户提供一个合约上加载多个模型,每一个模型分配不同的资金,每一个模型在分配的资金内运行的功能。WH8也提供组合测试功能,可以将一篮子模型组合到一起测试,查看模型组合的测试结果。确定好模型组合后,可以将这些组合加载到模组中一起运行,达到组合交易的目的。其中任何模型出现信号都会按照信号执行方式确认后自动下单。模组组合的主要功能:1、组合测试可以提供组合内各模型的资金曲线和组合后的总资金曲线2、组合测试可以提供组合后的详细测试数据,如:总的盈亏、总的最大回撤、总的胜率等3、组合测试可以提供组合后的阶段总结,可以按年或者按月统计盈利率、胜率等。4、模型组合在模组中运行时,相互独立,互不干扰。5、模型组合的模组,可以后台运行。六级:高频交易日内高频是为以研究市场微观结构为主要交易基础的投资者提供的全自动程序化交易。在日内高频平台中,客户可以使用日内高频函数,取得盘口的多档挂单,及逐笔成交数据,编写资金流或者其他市场微观结构策略的交易模型,一些国内的炒单思路,也可以编写成高频模型。客户可以自己将高频模型加载在某一合约上,出现信号按照信号执行方式确认后自动下单。此外,客户还可以使用下单组件编写日内高频模型,利用下单组件独立运行的方式实现高频交易。日内高频的主要功能:1、可以切换到各级秒周期;2、可以进行高频模型的TICK逐笔回放测试;3、具有独特的量能周期功能,更好的实现价量策略;4、可以自己定义大单,将成交数据按类取出大单数据,如取主动买大单成交次数。3、可以后台运行。课程内容一、模型的基本结构和跨指标模型的编写二、跨周期模型的编写MY语言的编写基于文华财经wh3平台中。通过本节课的学习,了解文华公式编写平台的基本函数与语法,设计自己的指标和程序化交易策略模型,实现全自动的委托发单交易。指标指能够绘出图线但不发交易指令的公式。指标是一个技术分析范畴的概念。交易模型:指能够发出BK、SP等交易指令,模型还包含下单方向,交易手数,止盈止损等与交易、资金使用相关的参数设置。交易模型是一个交易范畴的概念。交易指令:指交易模型自动发出的下单委托指令,可以不经过投资者确认直接下单,也可以等待投资者回车确认再下单。交易指令在K线图上以不同颜色和形状的箭头来代表。交易指令是一个程序化交易范畴的概念。理解一下名词:RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;K:SMA(RSV,M1,1);D:SMA(K,M2,1);J:3*K-2*D;用指标监测行情:K线上穿D线RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;K:SMA(RSV,M1,1);D:SMA(K,M2,1);J:3*K-2*D;//以下是加入的交易指令CROSS(K,D),BK;//K向上穿越D,发出买开交易指令CROSS(J,100),SP;//J向上穿越100,发出卖平交易指令CROSS(D,K),SK;//K向下穿越D,发出卖开交易指令CROSS(0,J),BP;//J向下穿越0,发出买平交易指令AUTOFILTER;MYlanguage编写语法MYlanguage操作符1、定义变量名称变量名称不能相互重复;不能与参数名重复;不能与函数名重复;2、半角输入法的大写状态;3、每个语句应该以分号结束;命名参数A:(O+C)/2;B:CO;//判断是否收阳;满足条件返回1,否则返回0D:TIME=0900&&CO;//用于多条件逻辑关系SETTLE引用结算价REF(X,N)引用X在N个周期前的值MA(X,N)求X在N周期内的简单移动平均。定义变量:当根K线最高价;结算价:15周期收盘价均线(显示定义);REF(HH,1);REF(MA15,1);HH:=H;S:=SETTLE;MA15:MA(C,15);衍生:当前K线的前一个周期最高价;当前K线的前一个周期15均线;在编写前,需要将交易思想清晰量化后,通过语言函数编写完成交易模型基本结构1.定义需要的每个变量2.交易条件+交易指令MA5:=MA(C,5);MA10:=MA(C,10);CROSS(MA5,MA10),BK;CROSS(MA10,MA5),SP;CROSS(MA10,MA5),SK;CROSS(MA5,MA10),BP;定义思路中涉及到的变量交易条件,写入交易指令关键字:反手指令均线上穿平空做多,均线下穿平多做空;CROSS(MA5,MA10),BPK;CROSS(MA10,MA5),SPK;具体细化思路:5日均线上穿10日均线,平空做多;5日均线下穿10日均线,平多做空;关键词:多个交易条件1:以均线结合KD交叉指标为例:2:练习编写:MACD、KDJ指标模型。MA5:=MA(C,5);MA10:=MA(C,10);MA5MA10,BK;//5日均线大于10日均线买入。MA5MA10,SP;//10日均线大于5日均线卖出。AUTOFILTER;——》模型中加入KD指标思路:均线模型RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;K:SMA(RSV,M1,1);D:SMA(K,M2,1);CROSS(K,D),BK;//K,D金叉,买入。CROSS(D,K),SP;//K,D死叉,卖出AUTOFILTER;MA5:=MA(C,5);MA10:=MA(C,10);RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;K:SMA(RSV,M1,1);D:SMA(K,M2,1);MA5MA10&&CROSS(K,D),BK;//5日均线大于10日均线并且KD金叉买入MA5MA10&&CROSS(D,K),SP;//10日均线大于5日均线并且KD死叉卖出AUTOFILTER;DIFF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);DEA:=EMA(DIFF,N);MACD:=2*(DIFF-DEA);RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;K:=SMA(RSV,M1,1);D:=SMA(K,M1,1);J:=3*K-2*D;(CROSS(K,D)&&J30)||(CROSS(DIFF,DEA)&&MACD1),BK;(CROSS(D,K)&&REF(J,1)70)||(CROSS(DEA,DIFF)&&MACD-1),SP;(CROSS(D,K)&&J70)||(CROSS(DEA,DIFF)&&MACD-1),SK;(CROSS(K,D)&&REF(J,1)30)||(CROSS(DIFF,DEA)&&MACD1),BP;AUTOFILTER;总结:多条件下用“()”明确逻辑关系关键字:画线函数——趋势线以突破趋势线为进场、出场点具体细化思路:要求:1.突破5周期均线与30周期均线金叉k线最高点和20周期均线与60周期均线金叉k线最高点直接的连线,平空做多。2.突破5周期均线与30周期均线死叉k线最低点和20周期均线与60周期均线死叉k线最低点直接的连线,平多做空。实例源码:MA5:=MA(C,5);MA20:=MA(C,20);MA30:=MA(C,30);MA60:=MA(C,60);TMP1:=TRENDLINES(CROSS(MA5,MA30),H,CROSS(MA20,MA60),H);TMP2:=TRENDLINES(CROSS(MA30,MA5),L,CROSS(MA60,MA20),L);HTMP1&&CMA30,BPK;LTMP2&&CMA30,SPK;AUTOFILTER;二、跨周期模型的编写跨周期函数介绍引用某品种在某个周期上加载了某个指标的数据。用法:#IMPORT[CODE,PERIOD,FORMULA]ASVAR引用CODE所对应的合约PERIOD周期下指标FORMULA的数据。CODE文华码,PERIOD周期,FORMULA引用指标名,VAR定义变量名跨周期跨合约模型的编写规则1.只能引用如下周期:MIN1MIN3MIN5MIN10MIN15MIN30HOUR1DAYWEEKMONTH2.只能短周期引用长周期3.被引用的指标中不能存在引用4.如果不写文华码,默认引用当前合约,也可以直接写合约代码如:rb12015.FORMUL