文华财经谷学友课程内容一、模型的基本结构和跨指标模型的编写二、跨周期模型的编写三、资金管理和止损模型的编写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、命名部分:支持汉字、字母、数字、划线格式命名,长度控制在31字符内;命名不能和已存在的公式名称重复。2、定义变量名称变量名称不能相互重复;不能与参数名重复;不能与函数名重复。3、半角输入法的大写状态。4、每个语句应该以分号结束。5、参数部分:可以设置六个参数;首先是参数名称,然后是参数的最小值,最大值,最后是参数的默认值;在定义参数时要注意的是参数名称不可以重复,12个字符内。6、注释或者舍去想要在编写后,加入自己的语言注释,在结尾处用“//”表示;或者想舍去某段,在某段在最前端加入“//”;命名参数模型源码A:(O+C)/2;B:CO;//判断是否收阳;满足条件返回1,否则返回0D:TIME=0900&&CO;//用于多条件逻辑关系在编写前,需要将交易思想清晰量化后,通过语言函数编写完成交易模型基本结构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;定义思路中涉及到的变量交易条件,写入交易指令关键词:多个交易条件1:以均线结合KD交叉指标为例:2:练习编写:MACD、KDJ指标模型。MA5:=MA(C,5);MA10:=MA(C,10);MA5MA10,BK;//5日均线大于10日均线买入。MA5MA10,SP;//10日均线大于5日均线卖出。——》模型中加入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),BUY;//K,D金叉,买入。CROSS(D,K),SELL;//K,D死叉,卖出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;总结:多条件下用“()”明确逻辑关系二、跨周期模型的编写跨周期函数介绍引用某品种在某个周期上加载了某个指标的数据。用法:#IMPORT[CODE,PERIOD,FORMULA]ASVAR引用CODE所对应的合约PERIOD周期下指标FORMULA的数据。CODE文华码,PERIOD周期,FORMULA引用指标名,VAR定义变量名跨周期跨合约模型的编写规则1.只能引用如下周期:MIN1MIN3MIN5MIN10MIN15MIN30HOUR1DAYWEEKMONTH2.只能短周期引用长周期3.被引用的指标中不能存在引用4.如果不写文华码,默认引用当前合约,也可以直接写合约代码如:rb12015.FORMULA引用指标名,只能引用除数字、或者数字开头的名称之外的名称。例同一合约不同周期的数据调用要求当日均线出现多头排列时,5分钟KD线金叉,做多。当日均线出现空头排列时,5分钟KD线死叉,做空。三、资金管理和止损模型的编写课程内容1、头寸函数介绍2、资金管理,止盈止损模型的编写思路及案例1、常用头寸函数介绍ISLASTBK判断上一个交易信号是否是BK。用法:ISLASTBK如果上一个交易信号是BK则返回1否则返回0ISLASTSK判断上一个交易信号是否是SK。用法:ISLASTSK如果上一个交易信号是SK则返回1,否则返回0BARSBK上一次买开信号位置用法:BARSBK返回上一次买开仓距离当前k线的k线数。BARSBK上一次买开信号位置用法:BARSBK返回上一次买开仓距离当前k线的k线数。BKPRICE买开信号位置的买开信号价位。用法:BKPRICE返回最近一次模型买开位置的买开信号价位。例如:BKPRICE-CLOSE60,SP;//如果买开价位比当前价位高出60,且买开价位存在,卖平仓请注意当模型存在连续多个开仓信号(加仓)的情况下,该函数返回的是最后一次开仓信号的价格,而不是开仓均价。注:BKPRICE只在加载之后的K线上才返回信号价位。效果测试中该函数返回信号位置的收盘价SKPRICE卖开信号位置的卖开信号价位用法:SKPRICE返回最近一次模型卖开位置的卖开信号价位。例如:CLOSE-SKPRICE60&&SKPRICE0,BP;//如果当前价位高出卖开价位60,且卖开价位存在,买平仓请注意当模型存在连续多个开仓信号(加仓)的情况下,该函数返回的是最后一次开仓信号的价格,而不是开仓均价。注:SKPRICE只在加载之后的K线上才返回信号价位。效果测试中该函数返回信号位置的收盘价MONEY虚拟资金余额用法:MONEY返回虚拟资金余额。注意与未来函数同时使用ISLASTBAR,EMA2,ZIGZAG,BACKSET,PEAK,PEAKBARS,TROUGH,TROUGHBARS,REFX等可能会导致误差。MARGIN合约保证金用法:MARGIN返回当前合约的保证金比率(用户启动模组时设置的)。注意与未来函数同时使用ISLASTBAR,EMA2,ZIGZAG,BACKSET,PEAK,PEAKBARS,TROUGH,TROUGHBARS,REFX等可能会导致误差。PROFIT虚拟逐笔浮盈用法:PROFIT返回当前的虚拟逐笔浮动盈亏。注意与未来函数同时使用ISLASTBAR,EMA2,ZIGZAG,BACKSET,PEAK,PEAKBARS,TROUGH,TROUGHBARS,REFX等可能会导致误差。SETDEALPERCENT设置下单的虚拟资金使用比例用法:SETDEALPERCENT(fPercent)表示每次按资金的fPercent(范围1~100)下单。例子:SETDEALPERCENT(20);//每次按资金比例的%20下单注:应该与AUTOFILTER函数同时使用BUYVOL模型虚拟多头持仓用法:BUYVOL返回模型虚拟多头持仓。注意与未来函数同时使用ISLASTBAR,EMA2,ZIGZAG,BACKSET,PEAK,PEAKBARS,TROUGH,TROUGHBARS,REFX等可能会导致误差。SELLVOL模型虚拟空头持仓用法:SELLVOL返回模型虚拟空头持仓。注意与未来函数同时使用ISLASTBAR,EMA2,ZIGZAG,BACKSET,PEAK,PEAKBARS,TROUGH,TROUGHBARS,REFX等可能会导致误差。2、资金管理模型的编写思路及案例利用头寸函数实现对仓位的加减。例1加仓模型A:=多头开仓条件;A1:=多头加仓条件;B:=空头交易条件;B1:=空头加仓条件;D:=多头平仓条件;E:=空头平仓条件;A&&NOT(ISLASTSK||ISLASTBK),BK(2);B&&NOT(ISLASTBK||ISLASTSK),SK(2);BUYVOL2&&A1&&ISLASTBK,BK(1);SELLVOL2&&B1&&ISLASTSK,SK(1);D&&ISLASTBK,SP(BUYVOL);E&&ISLASTSK,BP(SELLVOL);注意,交易时要考虑前一信号方向防止锁仓。例2:对交易资金的管理//过滤模型每次下单使用当时资金的20%SETDEALPERCENT(20);DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);DIFF0&&DEA0&&CROSS(DEA,DIFF),SK;DIFF0&&DEA0&&CROSS(DIFF,DEA),BP;DIFF0&&DEA0&&CROSS(DIFF,DEA),BK;DIFF0&&DEA0&&CROSS(DEA,DIFF),SP;AUTOFILTER;10日均线之上开多仓(开仓资金可用资金20%),价格每上涨10%止盈平仓50%仓位,上涨20%止盈全部仓位。跌破5日线止损。N为合约单位MA10:=MA(C,10);MA5:=MA(C,5);CROSS(C,MA10),BK(MONEY*0.2/(N*C*MARGIN));CROSS(C,BKPRICE*1.1),SP(BUYVOL*0.5);CROSS(C,BKPRICE*1.2),SP(BUYVOL);CROSS(MA5,C),SP(BUYVOL);//非过滤模型二、止盈止损模型的编写思路及案例例1:限价止损、限价止盈模型A:=多头交易条件;B:=空头交易条件;E:=多头平仓条件;F:=空头平仓条件;A,BK;E||C=BKPRICE-100||C=BKPRICE+150,SP;B,SK;F||C=SKPRICE+100||C=SKPRICE-150,BP;AUTOFILTER;收盘价大于5周期均线,买开仓。收盘价小于5周期均线,平多仓。收盘价从高点回调30%,止盈。N:=0.3;//定义回撤幅度MA1:=MA(C,5);//5周期均线HH:=HHV(H,BARSBK+1);//取自开仓K线到现在的最高价CMA1,BK;(CMA1