程序化交易-文华财经课程安排•程序化交易概念•模型基本结构与编写•跨指标模型•跨周期模型•模型的测试与优化程序化交易概念什么是程序化交易计算机执行量化、代码化后的交易思路。程序化交易的优势基于历史数据的收益、风险评估、改进。克服心理劣势。快速计算、快速下单。量化思路代码化模型测试与优化资金管理程序化交易概念需求分析程序化交易概念指标绘图,不发出交易指令交易模型根据条件发出交易指令公式指标+交易模型计算方式每个TICK计算一次程序化交易概念均线指标MACD指标程序化交易概念MACD交易模型程序化交易概念程序化交易概念模型的加载下单价格:排队价、对价、对价连续追价、超价、停板价指标的加载主图指标、附图指标、指标叠加语法与操作符公式名汉字、字母、数字、下划线,31个字符内,不可与已存在同类(指标/模型)公式重名变量名不能相互重复、不能与函数名、参数名重复。不可汉字必须的行尾分号注释//语法与操作符常用函数CLOSE引用收盘价(在盘中指最新价),也可简写为C。HIGH引用最高价,也可简写为H。LOW引用最低价,也可简写为L。OPEN引用开盘价,也可简写为O。VOL应用成交量,也可简写为V。OPI引用持仓量。常用函数REF(X,N)引用X在N个周期前的值IFELSE(CON,A,B)如果条件C成立则返回A值,否则返回B值EVERY(CON,N)判断过去N周期内,是否一直满足条件CON。COUNT(CON,N)N个周期内满足条件CON的周期数HHV(X,N)求X在N个周期内的最大值LLV(X,N)求X在N个周期内的最小值BARSLAST(CON)求上一次CON条件成立到当前的周期数。EXIST(CON,N)判断过去N周期内,是否有满足条件CONBETWEEN(A,B,C)A是否介于B与C之间MA(X,N)求X在N周期内的简单移动平均CROSS(X,Y)X上穿YMACD交易信号要求:MACD指标,DIFF上穿DEA,显示买,下穿DEA,显示卖DIFF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIFF,9);MACD:2*(DIFF-DEA),COLORSTICK;DRAWTEXT(CROSS(DIFF,DEA),DIFF,'买');DRAWTEXT(CROSS(DEA,DIFF),DEA,'卖');MACD交易信号要求:MACD指标,DIFF大于DEA,红K线,小于DEA,绿K线DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);DRAWLINE(DIFF=DEA,H,DIFF=DEA,L,COLORRED);STICKLINE(DIFFDEA,O,C,COLORRED,0);DRAWLINE(DIFFDEA,H,DIFFDEA,L,COLORCYAN);STICKLINE(DIFFDEA,O,C,COLORCYAN,0);交易指令MACD交易模型要求:DIFF上穿DEA,平空开多;DEA上穿DIFF,平多开空;DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);CROSS(DIFF,DEA),BPK;CROSS(DEA,DIFF),SPK;均线日内交易模型均线上穿平空做多,均线下穿平多做空;细化思路:5分钟,5周期与10周期CROSS(MA5,MA10)&&TIME=0900&&TIME1450,BK;CROSS(MA10,MA5)||TIME=1450,SP;CROSS(MA10,MA5)&&TIME=0900&&TIME1450,SK;CROSS(MA5,MA10)||TIME=1450,BP;常用功能DATEREF(DATE,1);//当天第一根K线VALUEWHEN(DATEREF(DATE,1),OPEN);//当天开盘价VALUEWHEN(TIME=1030,OPEN);//10点半那根K线的开盘价CBKPRICE+50*MD;//最新价大于开仓价位的50个点HHV(H,BARSBK+1);//开仓到目前为止最高价BARSLAST(DATEREF(DATE,1))+1;//今天开盘到目前为止的周期数HHV(H,N);//开盘到目前为止的最高价REF(HHV(H,N),N)//前某阶段的最高价最大值跨指标模型多个指标同时应用在交易模型上DIFF上穿DEA并且收盘价大于5周期均线,买开;DIFF下穿DEA并且收盘价小于5周期均线,卖开;收盘价小于5周期均线,平多;收盘价大于5周期均线,平空;DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,7);MACD:=2*(DIFF-DEA);MA5:=MA(C,N);CROSS(DIFF,DEA)&&CMA5,BK;CROSS(DEA,DIFF)&&CMA5,SK;CMA5,SP;CMA5,BP;跨周期模型函数介绍跨周期函数引用某品种在某周期上加载了某指标的数据。用法:#IMPORT[CODE,PERIOD,FORMULA]ASVAR引用CODE所对应的合约PERIOD周期下指标FORMULA的数据。CODE:文华码PERIOD:周期FORMULA:引用指标名,VAR:定义变量名跨周期模型编写规则1、只能引用指标2、引用周期:MIN1MIN3MIN5MIN15MIN30HOUR1DAYWEEKMONTH3、只能短周期引用长周期4、被引用的指标中不能存在引用5、如果不写文华码,默认引用当前合约,也可以直接写合约代码如:rb12016、FORMULA引用指标名,只能引用除数字、汉字、或者数字开头的名称之外的名称。跨周期模型相同合约不同周期调用要求:日周期均线多头排列时,5分钟KD线金叉,做多。日周期均线空头排列时,5分钟KD线死叉,做空。均线多头排列:5周期均线10周期均线30周期均线跨周期模型先新建一个指标,名称为AAAMA5:=MA(C,5);MA10:=MA(C,10);MA30:=MA(C,30);在建立你的模型#IMPORT[,DAY,AAA]ASVARDM5:=VAR.MA5;DM10:=VAR.MA10;DM30:=VAR.MA30;RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;K:=SMA(RSV,3,1);D:=SMA(K,3,1);J:=3*K-2*D;DM5DM10&&DM10DM30&&CROSS(K,D),BPK;DM5DM10&&DM10DM30&&CROSS(D,K),SPK;跨周期模型相同合约不同周期调用要求:30分钟周期上,前一个MA5大于MA10,并且5分钟周期上,MA5上穿MA10,做多。30分钟周期上,前一个MA5大于MA10,并且5分钟周期上,MA5下穿MA10,做空。尾盘平仓。考点:引用大周期的前期数据怎么表达跨周期模型先建立一个指标,名称AAARMA5:=REF(MA(C,5),1);RMA10:=REF(MA(C,10),1);再建立你的模型#IMPORT[,MIN30,AAA]ASVARDM5:=VAR.RMA5;DM10:=VAR.RMA10;MA5:=MA(C,5);MA10:=MA(C,10);DM5DM10&&CROSS(MA5,MA10)&&TIME1455,BK(DM5DM10&&CROSS(MA10,MA5))||TIME=1455,SP;DM5DM10&&CROSS(MA10,MA5)&&TIME1455,SK;(DM5DM10&&CROSS(MA5,MA10))||TIME=1455,BP;跨周期模型不同合约的数据调用要求:沪胶指数价格破20日新高,橡胶1205的MA5MA10,做多。沪胶指数价格破20日新低,橡胶1205的MA5MA10,做空。跨周期模型先建立一个指标,名称AAAH20:=HHV(H,20);L20:=LLV(L,20);A:=CREF(H20,1);B:=CREF(L20,1);在建立你的模型#IMPORT[2300,DAY,AAA]ASVARDH20:=VAR.A;DL20:=VAR.B;MA5:=MA(C,5);MA10:=MA(C,10);DH20&&MA5MA10,BPK;DL20&&MA5MA10,SPK;止损止盈函数介绍BARSBK:上一次买开信号位置上一次买开仓距离当前k线的k线数BARSSK:上一次卖开信号位置上一次卖开仓距离当前k线的k线数BKPRICE:最近一次模型买开位置的买开信号价位(效果测试为收盘价)SKPRICE:最近一次模型卖开位置的卖开信号价位(效果测试为收盘价)止损止盈限价止损止盈A:=多头开仓条件;B:=空头开仓条件;E:=多头平仓条件;F:=空头平仓条件;A,BK;E||C=BKPRICE-100||C=BKPRICE+150,SP;B,SK;F||C=SKPRICE+100||C=SKPRICE-150,BP;止损止盈回撤固定止损止盈要求:收盘价大于5周期均线,买开仓。收盘价小于5周期均线,平多仓。收盘价从高点回调30%,止盈。N:=0.3;//定义回撤幅度MA1:=MA(C,5);//5周期均线HH:=HHV(H,BARSBK+1);//取自开仓K线到现在的最高价CMA1,BK;(CMA1)||(C=BKPRICE&&C=HH-N*(HH-BKPRICE)),SP;止损止盈全程跟踪止损止损止盈JW:=5;//定义最小价位ZS:=10;//定义止损为10个最小价位BC:=5;//定义步长为5个最小价位MA1:=MA(C,5);//5周期均线H1:=HHV(H,BARSBK+1);//取自开仓K线到现在的最高价CMA1,BK;//收盘价大于5周期均线,开仓CMA1||(C=(BKPRICE-(ZS*JW))+(BC*JW)*FLOOR((H1-BKPRICE)/(BC*JW))),SP;//收盘价小于5周期均线,或者满足追踪止损条件,平仓止损止盈豆粕1209合约:低于买开仓价10个点差,多头止损;高于买开仓价20个点差,多头止赢;高于卖开仓价10个点差,空头止损;低于卖开仓价20个点差,空头止赢;多头开仓条件,BK;(C=BKPRICE-SL*A||C=BKPRICE+TP*A)&&BKPRICE0,SP;空头开仓条件,SK;(C=SKPRICE+SL*A||C=SKPRICE-TP*A)&&SKPRICE0,BP;模型的效果测试参数设置价位选择滑点误差模型的效果测试•总收益率•胜率•最大亏损额•最大亏损周期•最大连续亏损次数•最大连续亏损•空仓时间/总时间效果测试指标解读模型的效果测试详细测试结果资金曲线模型的优化•详细测试的结果分析哪些亏损是可以避免的•哪些参数可以优化(减少交易次数)•哪些优化最有效参数优化模型的优化基本思路:IF当月,5周期、10周期均线多头与空头排列优化:1、依次剔除最大亏损2、实体过大的K线不开仓3、阳线开多、阴线开空模型的优化模型有风险优化需谨慎