内嵌统计对象的波段交易模版代码

Discussion in '强者博弈证券期货自动交易系统' started by yzwyq, Jul 15, 2010.

  1. 内嵌统计对象的波段交易模版代码

    本代码可以用来实现动态仓位的波段交易策略,与老模板不同的是,本模板是依照仓位来实现委托(老的是依照买卖信号),也就是你只需要计算你的策略应当有多少仓单即可,其他过程全有内嵌统计对象完成.无论是单独的策略统计,还是实盘交易,内嵌统计对象都会记录你的委托命令,你可以随时随地的检查你的统计信息和资金曲线

    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;
    }
     
  2. 本类函数用于波段交易策略的编程设计

    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来折算到资金上来,一般来讲,就是期货合约的吨数)


    返回:文本统计信息
     
    Last edited by a moderator: Jul 15, 2010
  3. 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个不同的交易统计对象
     
    Last edited by a moderator: Jul 15, 2010
  4. 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:设置值
     
  5. 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
     
    Last edited by a moderator: Jul 15, 2010
  6. 有什么不懂的地方,可以跟贴