内嵌统计对象的波段交易模版代码 本代码可以用来实现动态仓位的波段交易策略,与老模板不同的是,本模板是依照仓位来实现委托(老的是依照买卖信号),也就是你只需要计算你的策略应当有多少仓单即可,其他过程全有内嵌统计对象完成.无论是单独的策略统计,还是实盘交易,内嵌统计对象都会记录你的委托命令,你可以随时随地的检查你的统计信息和资金曲线 var m_sys_mode=m_sys_exec_mode;//系统运行模式 dobj.textcolor=0xffffff;//对象前景颜色 dobj.execstep=2000;//程序执行速度参数 var m_path=GetExecPath();//安装文件路径 var m_target_name.strVal=ThisDocName;//当前画面文件名 var m_start_flug=0;//自动交易启动标记 var m_mpu_change_flug=0;//画面动态保存标记 // var m_tab_str=appstr_tab();//制表符 var m_return_str=appstr_enter();//回车换行 // var m_pz_name="M1101"; var m_xd_size=1; var m_ttno=0; var m_tmode=1; //查交易品种序号 var m_pz_no=my_getno(m_pz_name); var m_pz_type=GetPzType(m_pz_no);//获得品种类型 //显示,增加m_last_dsp,m_last_color两变量是为了减少无效的显示刷新 var m_last_dsp=m_pz_name+"单腿自动交易"; var m_last_color=0xffffff; dobj.text=m_last_dsp; dobj.textcolor=m_last_color; //定义变量 var m_pz_def=1.0;//品种报价最小单位 var m_trade_enable=1;//交易允许 var m_exec_dsize=0;//多单实时仓位 var m_exec_ksize=0;//多单实时仓位 var m_last_cal_at=-1;//上一计算位置 // var m_test_tick=0;//测试用定时器 //建立系统循环 while(TRUE) { var m_return=Wait(0x80|0x10|0x20|0x40,10,0);//等待各种希望捕捉的事件 //事件处理 if((m_return&0x10)==0x10) { //有鼠标双击事件 if(m_start_flug>0) { SetAskItem="询问:"; SetAskText="关闭自动交易?"; if(QueryMessage==1) { SetAskText="自动交易可能未能完成,请自行处理遗留仓位"; if(QueryMessage==1) { } m_last_dsp=m_pz_name+"单腿自动交易"; m_last_color=0xffffff; dobj.text=m_last_dsp; dobj.textcolor=m_last_color; m_start_flug=0; } else { SetAskItem="询问:"; SetAskText="显示当前策略统计对象信息?"; if(QueryMessage==1) { var m_log_out=TradeTj_DspTjInfo(0,0,0,0.9,200000,10);//显示统计信息 SaveStrToFile(m_log_out,"message\"+m_pz_name+"交易记录.txt"); m_log_out=""; } } } else { SetAskItem="询问:"; SetAskText="真的打开自动交易?"; if(QueryMessage==1) { TradeTj_Open(0,m_pz_name,m_pz_type,m_ttno,m_tmode,0) ;//创建交易统计对象 TradeTj_SetCCProcFlag(0,0);//清隔夜仓已处理标记 TradeTj_CC_Have(0,0);//推隔夜仓处理对话框 while(TradeTj_GetCCProcFlag(0)==0) { Sleep(10);//等待持仓返回 } if(TradeTj_GetCCProcFlag(0)!=1) TradeTj_SetCCProcFlag(0,0);//不正常 else { TradeTj_Dctj00(0) ;//多单统计 TradeTj_Kctj00(0) ;//空单统计 m_exec_dsize=TradeTj_GetTargetDcSize(0);//当前多单仓位初始化 m_exec_ksize=TradeTj_GetTargetKcSize(0);//当前空单仓位初始化 m_start_flug=1;//置启动标记 m_last_dsp=m_pz_name+"单腿自动交易启动..."; m_last_color=0x2099e0;//启动后改变文字颜色 dobj.text=m_last_dsp; dobj.textcolor=m_last_color; } } else { SetAskItem="询问:"; SetAskText="进行策略统计?"; if(QueryMessage==1) { m_start_flug=2;//置启动标记 m_last_dsp=m_pz_name+"策略统计开始..."; m_last_color=0x2099e0;//启动后改变文字颜色 dobj.text=m_last_dsp; dobj.textcolor=m_last_color; // TradeTj_Open(0,m_pz_name,m_pz_type,m_ttno,m_tmode,1) ;//创建交易统计对象 TradeTj_Reset00(0) ;//重新初始化交易统计变量 TradeTj_Reset01(0) ;//重新初始化交易控制变量 TradeTj_Reset02(0) ;//重新初始化交易记录动态数组 m_exec_dsize=0; m_exec_ksize=0; } else { SetAskItem="询问:"; SetAskText="显示当前策略统计对象信息?"; if(QueryMessage==1) { var m_log_out=TradeTj_DspTjInfo(0,0,0,0.9,200000,10);//显示统计信息 SaveStrToFile(m_log_out,"message\"+m_pz_name+"交易记录.txt"); m_log_out=""; } } // } } } if((m_return&0x20)==0x20) { //有鼠标移入事件 if(m_start_flug==0) { m_last_color=0x2099e0; dobj.textcolor=m_last_color; } } if((m_return&0x40)==0x40) { //有鼠标移出事件 if(m_start_flug==0) { m_last_color=0xffffff; dobj.textcolor=m_last_color; } } if((m_return&0x80)==0x80) { //有其他对象发来的消息,则处理 //有其他对象发来的消息,则处理 var m_msg_size=GetReceiveMsgSize(); for(var i=0;i<m_msg_size;i++) { if(GetReceiveMsgToBuf()==0) break; var m_msg_name=GetReceiveMsgName(); if(m_msg_name=="exec pcmd") { m_trade_enable=0; } else if(m_msg_name=="exec kdcmd") { m_trade_enable=1; } } } if(m_start_flug>0) { if(m_pz_no<0) { m_start_flug=0;//无该品种则清启动标记 continue; } // var m_dtb_jg=GetPzBuyPrice_Min(m_pz_no);//跌停板 var m_ztb_jg=GetPzSelPrice_Max(m_pz_no);//涨停板 //这里编制策略程序 var m_pz_starttime=GetPzStartTime_ForLsLib(m_pz_no);//获得品种起点时间 OpenLsLib(m_pz_name,m_pz_type,0,m_pz_starttime);//十五分钟线 // var m_data_size=GetLsLibDataSize();//获取一分钟线总数 var m_end_dir=m_data_size-1;//最后读取指针 if(m_start_flug==2) m_end_dir=35;//是统计则从该点开始运算 // while(m_end_dir<=(m_data_size-1)) { var m_nth00.lVal=GetLsLibData(0,m_end_dir);//获得最新交易时间 TradeTj_Dctj00(0) ;//多单统计 TradeTj_Kctj00(0) ;//空单统计 var m_sdsize=TradeTj_GetTargetDcSize(0);//当前多单仓位 var m_sksize=TradeTj_GetTargetKcSize(0);//当前空单仓位 // if(m_last_cal_at==m_end_dir) break; m_last_cal_at=m_end_dir; //判别价格 var m_end_jg=GetLsLibData(4,m_end_dir); var m_exec_sjg=0.0; var m_exec_bjg=0.0; if(m_start_flug==1) { m_exec_sjg=GetPzSelPrice(m_pz_no); m_exec_bjg=GetPzBuyPrice(m_pz_no); } else { m_exec_sjg=m_end_jg+m_pz_def; m_exec_bjg=m_end_jg-m_pz_def;//执行报价 } //指标计算:下面代码是每来一根k线,就交换一下仓位方向,用户可以改为自己的策略算法 //******************************* if((m_exec_dsize==0)&&(m_exec_ksize==0)) { m_exec_dsize=2; } else if((m_exec_dsize!=0)&&(m_exec_ksize==0)) { m_exec_dsize=0; m_exec_ksize=2; } else if((m_exec_dsize==0)&&(m_exec_ksize!=0)) { m_exec_dsize=2; m_exec_ksize=0; } //*****************************88 //执行 if(m_exec_dsize>m_exec_ksize) { TradeTj_KcExecWt(0,m_exec_ksize,m_exec_bjg,m_exec_sjg,m_nth00,"",10000) ;//空单执行处理 TradeTj_DcExecWt(0,m_exec_dsize,m_exec_bjg,m_exec_sjg,m_nth00,"",10000) ;//多单执行处理 } else { TradeTj_DcExecWt(0,m_exec_dsize,m_exec_bjg,m_exec_sjg,m_nth00,"",10000) ;//多单执行处理 TradeTj_KcExecWt(0,m_exec_ksize,m_exec_bjg,m_exec_sjg,m_nth00,"",10000) ;//空单执行处理 } // m_end_dir++; }//计算循环 // if(m_start_flug==2) { var m_log_out=TradeTj_DspTjInfo(0,0,0,0.9,200000,10);//显示统计信息 SaveStrToFile(m_log_out,"message\"+m_pz_name+"交易记录.txt"); m_log_out=""; m_last_dsp=m_pz_name+"单腿自动交易"; m_last_color=0xffffff; dobj.text=m_last_dsp; dobj.textcolor=m_last_color; m_start_flug=0; } // } } // function my_getno(var name_str) { var no=-1; var m_str0000=name_str; m_str0000=TrimLeftStr(m_str0000); m_str0000=TrimRightStr(m_str0000); m_str0000=MakeLowerStr(m_str0000); for(var kk=0;kk<24;kk++) { if(m_str0000==GetPzName(kk)) { no=kk; break; } } return no; }
本类函数用于波段交易策略的编程设计 1.TradeTj_Open(obj_index,pzname,type,tdno,trade_mode,tjmode) ;//创建交易统计对象 功能:创建交易统计对象 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 pzname:品种代码 type:品种类型 tdno:交易通道 trade_mode:交易方法 tjmode:统计方法,0--实盘记录,1--统计记录 2.TradeTj_Init00(obj_index) ;//初始化 功能:初始化 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 3.TradeTj_Reset00(obj_index) ;//重新初始化交易统计变量 功能:重新初始化交易统计变量 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 4.TradeTj_Reset01(obj_index) ;//重新初始化交易控制变量 功能:重新初始化交易控制变量 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 5.TradeTj_Reset02(obj_index) ;//重新初始化交易记录动态数 功能:重新初始化交易记录动态数 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 6.TradeTj_Dctj00(obj_index) ;//多单统计 功能:实盘多单统计 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 7.TradeTj_Kctj00(obj_index) ;//空单统计 功能:实盘空单统计 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 8.TradeTj_ProDcExecWt(obj_index,size) ;//多单执行预处理 9.TradeTj_ProKcExecWt(obj_index,size) ;//空单执行预处理 功能:多单(空单)执行预处理,本函数由TradeTj_DcExecWt/TradeTj_KDcExecWt 在执行委托前调用,用户假如需要自己实现委托过程,可以通过本函数获得下一步执行的细节 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 size:要实现的最终仓单总数 函数返回:预期执行动作细节,为正是增仓数,为负是:-(平仓数*100000+平今数) 10.TradeTj_DcExecWt(obj_index,size,bjg,sjg,time,readme,cmptick) ;//多单执行处理 11.TradeTj_KcExecWt(obj_index,size,bjg,sjg,time,readme,cmptick) ;//空单执行处理 功能:多单(空单)执行, 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 size:要实现的最终仓单总数 bjg:卖出价格 sjg:买入价格 time:时间 readme:说明字串 cmptick:多少毫秒后撤单重挂 函数返回:执行动作细节,为正是增仓数,为负是:-(平仓数*100000+平今数) 12.TradeTj_CC_Have(obj_index,flag) ;//推持仓私有化对话框 功能:推持仓私有化对话框,按确定返回会自动执行持仓私有化命令并设置隔夜仓处理标记,假如用户自己实现自动隔夜仓处理,可以不使用本函数.但处理结束后必须设置隔夜仓处理标记,以便对象进行实盘交易 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 flag:保留参数 13.TradeTj_GetCCProcFlag(obj_index) ;//获取隔夜仓处理标记 功能:获取隔夜仓处理标记,该标记为一时,对象才会真正检查实盘委托和进行实盘交易.为2,3是隔夜仓处理对话框非正常返回 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 14.TradeTj_SetCCProcFlag(obj_index,flag) ;//设置隔夜仓处理标记 功能:设置隔夜仓处理标记夜仓处理标记,该标记为一时,对象才会真正检查实盘委托和进行实盘交易.为2,3是隔夜仓处理对话框非正常返回 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 flag:标志值 15.TradeTj_GetTjInfo(obj_index,tjtype,fl,fd) ;//获取统计信息 功能:获取统计信息 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 tjtype:保留参数 fl:佣金比例系数(为0,则使用fd计算) fd:佣金绝对值 返回:文本统计信息 16.TradeTj_DspTjInfo(obj_index,tjtype,fl,fd,zj,zs) ;//显示统计信息 功能:显示统计信息 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 tjtype:保留参数 fl:佣金比例系数(为0,则使用fd计算) fd:佣金绝对值 zj:统计初始资金 zs:盈亏乘数(盈亏统计是以价格单位来计算,需要用zs来折算到资金上来,一般来讲,就是期货合约的吨数) 返回:文本统计信息
TradeTj_GetChkFDcSize(obj_index) ;//获取多现有持仓 TradeTj_GetChkDcAllSize(obj_index) ;//获取多持仓总和 TradeTj_GetChkDcSize(obj_index) ;//获取多全部成交 TradeTj_GetChkKdcSize(obj_index) ;//获取开多全部成交 TradeTj_GetChkPdcSize(obj_index) ;//获取平多全部成交 TradeTj_GetChkPcdcSize(obj_index) ;//获取平仓多全部成交 TradeTj_GetChkKdcWaitSize(obj_index) ;//获取多开等待成交 TradeTj_GetChkPdcWaitSize(obj_index) ;//获取多平等待成交 TradeTj_GetChkFKcSize(obj_index) ;//获取空现有持仓 TradeTj_GetChkKcAllSize(obj_index) ;//获取空持仓总和 TradeTj_GetChkKcSize(obj_index) ;//获取空全部成交 TradeTj_GetChkKkcSize(obj_index) ;//获取开空全部成交 TradeTj_GetChkPkcSize(obj_index) ;//获取平空全部成交 TradeTj_GetChkPckcSize(obj_index) ;//获取平仓空全部成交 TradeTj_GetChkKkcWaitSize(obj_index) ;//获取空开等待成交 TradeTj_GetChkPkcWaitSize(obj_index) ;//获取空平等待成交 TradeTj_GetChkKdcJg(obj_index) ;//获取多最后开仓价 TradeTj_GetChkPdcJg(obj_index) ;//获取多最后平仓价 TradeTj_GetChkKkcJg(obj_index) ;//获取空最后开仓价 TradeTj_GetChkPkcJg(obj_index) ;//获取空最后平仓价 功能: 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象
TradeTj_GetTargetDcSize(obj_index) ;//获取当前正确的多单仓位 TradeTj_GetTargetDcJg(obj_index) ;//获取当前正确的多单仓位价格 TradeTj_GetTargetDcSize_yt(obj_index) ;//获取当前正确的多单隔夜仓位 TradeTj_GetTargetDcSize_t(obj_index) ;//获取当前正确的多单当日仓位 TradeTj_GetTargetKcSize(obj_index) ;//获取当前正确的空单仓位 TradeTj_GetTargetKcJg(obj_index) ;//获取当前正确的空单仓位价格 TradeTj_GetTargetKcSize_yt(obj_index) ;//获取当前正确的空单隔夜仓位 TradeTj_GetTargetKcSize_t(obj_index) ;//获取当前正确的空单当日仓位 TradeTj_GetDcExecError(obj_index) ;//获取多单亏损记数 TradeTj_GetKcExecError(obj_index) ;//获取空单亏损记数 TradeTj_GetDcExecStep(obj_index) ;//获取多单执行步骤 TradeTj_GetDcExecSubStep(obj_index) ;//获取多单执行子步骤 TradeTj_GetKcExecStep(obj_index) ;//获取空单执行步骤 TradeTj_GetKcExecSubStep(obj_index) ;//获取空单执行子步骤 TradeTj_SetTargetDcSize(obj_index,val) ;//设置当前正确的多单仓位 TradeTj_SetTargetDcJg(obj_index,val) ;//设置当前正确的多单仓位价格 TradeTj_SetTargetDcSize_yt(obj_index,val) ;//设置当前正确的多单隔夜仓位 TradeTj_SetTargetDcSize_t(obj_index,val) ;//设置当前正确的多单当日仓位 TradeTj_SetTargetKcJg(obj_index,val) ;//设置当前正确的空单仓位价格 TradeTj_SetTargetKcSize_yt(obj_index,val) ;//设置当前正确的空单隔夜仓位 TradeTj_SetTargetKcSize_t(obj_index,val) ;//设置当前正确的空单当日仓位 TradeTj_SetDcExecError(obj_index,val) ;//设置多单亏损记数 TradeTj_SetKcExecError(obj_index,val) ;//设置空单亏损记数 TradeTj_SetDcExecStep(obj_index,val) ;//设置多单执行步骤 TradeTj_SetDcExecSubStep(obj_index,val) ;//设置多单执行子步骤 TradeTj_SetKcExecStep(obj_index,val) ;//设置空单执行步骤 TradeTj_SetKcExecSubStep(obj_index,val) ;//设置空单执行子步骤 功能: 参数说明: obj_index:0--15,一个策略对象可以创建事六个不同的交易统计对象 val:设置值
TradeTj_GetExIntData(obj_index,index) ;//获取int数据缓冲区(64个外存)数据 TradeTj_GetExDblData(obj_index,index) ;//获取dbl数据缓冲区(64个外存)数据 TradeTj_SetExIntData(obj_index,index,val) ;//设置空int数据缓冲区(64个外存)数据 TradeTj_SetExDblData(obj_index,index,val) ;//设置空dbl数据缓冲区(64个外存)数据 TradeTj_GetZbDblDataWrDir(obj_index,no) ;//获取指标用的dbl数据缓冲区(10*2400非外存)写入指针 TradeTj_GetZbDblData(obj_index,no,index) ;//获取指标用的dbl数据缓冲区(10*2400非外存)数据 TradeTj_SetZbDblData(obj_index,no,index,val) ;//设置指标用的dbl数据缓冲区(10*2400非外存)数据 功能:外存数据缓冲区,指的是他们会保存到文件,可以用来做策略参数保存 参数说明: obj_index:0--15,一个策略对象可以创建16个不同的交易统计对象 val:设置值 no:0--9,指标用的dbl数据缓冲区索引 index:数据索引,数据缓冲区是0--63,指标用的dbl数据缓冲区是0--2399