最新股票全自动交易系统模板代码

Discussion in '强者博弈证券期货自动交易系统' started by yzwyq, Jun 10, 2008.

  1. 最新股票全自动交易系统模板代码

    var m_sys_mode = m_sys_exec_mode; //系统运行模式
    dobj.textcolor = 0xffffff; //对象前景颜色
    dobj.execstep = 1000; //程序执行速度参数
    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 = "600100"; //交易品种名称
    var m_pz_no = -1; //交易品种序号
    var m_str0000 = m_pz_name;
    //查交易品种序号
    m_str0000 = MakeLowerStr(m_str0000); //字串变为小写
    m_str0000 = TrimLeftStr(m_str0000); //字串左边去空
    m_str0000 = TrimRightStr(m_str0000); //字串右边去空
    for (var kk = 0;kk < 24;kk++)
    {
    if (m_str0000 == GetPzName(kk))
    {
    m_pz_no = kk;
    break;
    }
    }
    var m_pz_type = GetPzType(m_pz_no) ; //获得品种类型
    //交易品种序号为-1,表示无该品种
    dobj.text = m_pz_name + "自动交易系统";
    dobj.textcolor = 0xffffff;
    //系统变量定义区
    var m_sys_time = 0;
    var m_pc_str = "平仓"; //当日平今,隔日平仓
    var m_xd_size = 2500; //下单手数
    var m_buy_flag = 0; //多标记
    var m_buy_kdelay = 0; //开多等待时间
    var m_buy_pdelay = 0; //平多等待时间
    var m_sell_flag = 0; //卖标记
    var m_sell_kdelay = 0; //开空等待时间
    var m_sell_pdelay = 0; //平空等待时间
    var m_tick_cmp = 20000; //正常20秒
    if (m_sys_mode == 0) m_tick_cmp = 10000; //模拟时10秒
    var m_xd_js = 0; //下单记数
    var m_log_str = ""; //用于记录交易情况
    var m_log_js = 0; //log记数
    //系统变量定义区
    var m_last_cal = 0; //最后计算位置
    var m_macd00=0.0;//当前MACD值
    var m_dif00=0.0;
    var m_dea00=0.0;
    var m_last_macd00=0.0;//上次MACD值
    var m_last_dif00=0.0;
    var m_last_dea00=0.0;
    //建立系统循环
    while (TRUE)
    {
    var m_return = Wait(0x80 | 0x10 | 0x20 | 0x40, 100, 0); //等待各种希望捕捉的事件
    //事件处理
    if ((m_return&0x10) == 0x10)
    {
    //有鼠标双击事件
    if (m_start_flug == 1)
    {
    SetAskItem = "询问:";
    SetAskText = "自动交易过程可能未能完成,如关请仔细检查,
    真的关闭自动交易?";
    if (QueryMessage == 1)
    {
    m_start_flug = 0; //置启动标记
    dobj.text = m_pz_name + "自动交易系统";
    dobj.textcolor = 0xffffff;
    }
    }
    else
    {
    SetAskItem = "询问:";
    SetAskText = "真的打开自动交易?";
    if (QueryMessage == 1)
    {
    m_start_flug = 1; //置启动标记
    dobj.text = m_pz_name + "自动交易系统启动";
    dobj.textcolor = 0x2099e0; //启动后改变文字颜色
    SetAutoExecFlug = 1; //置自动交易标记,当用户关闭该画面时将出现提示对话框
    }
    }
    }
    if ((m_return&0x20) == 0x20)
    {
    //有鼠标移入事件
    if (m_start_flug == 0)
    dobj.textcolor = 0x2099e0;
    }
    if ((m_return&0x40) == 0x40)
    {
    //有鼠标移出事件
    if (m_start_flug == 0)
    dobj.textcolor = 0xffffff;
    }
    if ((m_return&0x80) == 0x80)
    {
    //有其他对象发来的消息,则处理
    }
    if (m_start_flug == 1)
    {
    if (m_pz_no < 0)
    {
    m_start_flug = 0; //无该品种则清启动标记
    continue;
    }
    //自动交易已经启动
    //这里编制策略程序
    var m_new_jg = GetPzNew(m_pz_no); //最新价;
    if ((m_new_jg > 0) && (m_xd_js < 60))
    {
    //判买卖条件
    //m_buy_flag==1---开多平空 ==2只平空
    //m_sell_flag==1---开空平多 ==2只平多
    //
    var m_cyear = GetYear(); //年
    var m_ctime0 = GetMonth() * 100 + GetDay(); //月日
    if (m_sys_time == 0) m_sys_time = m_sys_exec_data_time;
    if (m_sys_mode == 0)
    {
    if (m_sys_time == 0) continue;
    //模拟运行时
    m_cyear.lVal = m_sys_time / 10000; //年
    m_ctime0.lVal = m_sys_time % 10000; //月日
    }
    //
    //执行买卖
    //可平持仓
    var m_pz_dsize1=CheckWtCmd(m_pz_no,"多仓","全部成交",0)+CheckWtCmd(m_pz_no,"多仓","现有持仓",0);
    var m_pz_ksize1=CheckWtCmd(m_pz_no,"空仓","全部成交",0)+CheckWtCmd(m_pz_no,"空仓","现有持仓",0);
    //总持仓
    var m_pz_dsize1_a=m_pz_dsize1;
    var m_pz_ksize1_a=m_pz_ksize1;
    //检查成交回报,T+1交易用现有持仓查隔夜仓,根据代码的前两位判别是不是权证
    var m_pz_name0000=GetSubStr(m_pz_name,0,2);
    if((m_pz_name0000!="58")&&(m_pz_name0000!="03"))
    {
    //不是权证交易
    m_pz_dsize1=CheckWtCmd(m_pz_no, "多仓", "现有持仓", 0)+CheckWtCmd(m_pz_no,"多仓","平全部成交",0);
    m_pz_ksize1=CheckWtCmd(m_pz_no, "空仓", "现有持仓", 0)+CheckWtCmd(m_pz_no,"空仓","平全部成交",0);
    }
    if (m_sys_mode == 0)
    {
    //复盘模拟时
    m_pz_dsize1 = CheckWtCmd(m_pz_no, "多仓", "全部成交", 0);
    m_pz_ksize1 = CheckWtCmd(m_pz_no, "空仓", "全部成交", 0);
    }
    var m_pz_dsize21 = CheckWtCmd(m_pz_no, "多仓", "开等待成交", 0);
    var m_pz_dsize22 = CheckWtCmd(m_pz_no, "多仓", "平等待成交", 0);
    var m_pz_ksize21 = CheckWtCmd(m_pz_no, "空仓", "开等待成交", 0);
    var m_pz_ksize22 = CheckWtCmd(m_pz_no, "空仓", "平等待成交", 0);
    //打开期货当日数据接口,下面的参数值0表示是一分钟线
    //改为1表示是日线
    //改为4表示是5分钟线
    //改为5表示是30分钟线
    //改为6表示是60分钟线
    //改为7表示是3分钟线
    //具体用法查函数说明
    OpenLsLib(m_pz_name, m_pz_type, 0, m_ctime0*10000); //一分钟线
    //
    var m_data_size = GetLsLibDataSize(); //获取一分钟线总数
    var m_end_dir = m_data_size - 1; //最后读取指针
    if (m_end_dir < 12) continue; //不足12点则结束本次运算
    var m_nth00.lVal = GetLsLibData(0, m_end_dir); //获得最新交易时间
    m_nth00 = m_nth00 % 10000; //分时
    if ((m_nth00 >= 901) && (m_nth00 <= 1501))
    {
    if (m_last_cal != m_end_dir)
    {
    m_last_cal = m_end_dir;
    //求MACD值
    //当前m_end_dir位置上的MACD值还未固定,只能用前一点
    m_last_macd00=m_macd00;//上次MACD值
    m_last_dif00=m_dif00;
    m_last_dea00=m_dea00;
    var m_macd_str=GetLsLibEXMACD(m_end_dir - 1,12,26,5);
    m_macd00.dblVal=GetSubStr(m_macd_str,0,16);
    m_dif00.dblVal=GetSubStr(m_macd_str,17,33);
    m_dea00.dblVal=GetSubStr(m_macd_str,34,50);
    if((m_last_macd00<0)&&(m_macd00>0))
    {
    //买入
    m_buy_flag = 1;
    m_sell_flag = 0;
    }
    else if((m_last_macd00>0)&&(m_macd00<0))
    {
    //平仓
    m_buy_flag = 0;
    m_sell_flag = 2;
    }
    //
    dobj.text = m_pz_name + "自动交易系统启动...." + m_macd00; //显示m_macd00值,这里可按需修改
    dobj.textcolor = 0x2099e0; //启动后改变文字颜色
    }
    }
    //中午或下午收市平仓,可按需修改
    if ((m_nth00 > 1126) && (m_nth00 < 1135) || (m_nth00 > 1456))
    {
    m_buy_flag = 2;
    m_sell_flag = 2;
    }
    if (m_buy_flag >= 1)
    {
    //是买
    var m_bjg = GetPzSelPrice(m_pz_no); //卖出报价
    if (m_bjg == 0) m_bjg = m_new_jg;
    //
    if(TRUE)
    {
    var m_int00.lVal=m_bjg*1000;
    if((m_int00%10)==9) m_bjg=m_int00/1000+0.001;
    else m_bjg=m_int00/1000;
    }
    //
    if (m_pz_ksize1 > 0)
    {
    var m_pktick = GetTimeTick(m_sell_pdelay); //毫秒级计时
    if ((m_pz_ksize22 == 0) && ((m_sell_pdelay == 0) || (m_pktick > m_tick_cmp / 3)))
    {
    //平空单
    SetWtCmd(m_pz_no, m_pc_str, "买入", m_pz_ksize1, m_bjg, 0); //1是数量
    m_sell_pdelay = GetTimeTick(0);
    if (m_sell_pdelay == 0) m_sell_pdelay = 1;
    m_log_str = m_log_str + "开空" + m_tab_str + m_bjg + m_return_str;
    m_xd_js++;
    }
    else if ((m_pz_ksize22 > 0) && (m_pktick > m_tick_cmp))
    {
    //超时撤平空
    SetWtCmd(m_pz_no, "撤平单", "买入", 0, 0, 0);
    m_sell_pdelay = GetTimeTick(0);
    if (m_sell_pdelay == 0) m_sell_pdelay = 1;
    }
    }
    else if (m_pz_dsize1_a == 0)
    {
    m_sell_pdelay = 0;
    var m_kdtick = GetTimeTick(m_buy_kdelay); //毫秒级计时
    if ((m_pz_dsize21 == 0) && ((m_buy_kdelay == 0) || (m_kdtick > m_tick_cmp / 3)))
    {
    if (m_buy_flag == 1)
    {
    //开多
    SetWtCmd(m_pz_no, "开仓", "买入", m_xd_size, m_bjg, 0);
    m_buy_kdelay = GetTimeTick(0);
    if (m_buy_kdelay == 0) m_buy_kdelay = 1;
    m_log_str = m_log_str + "开多" + m_tab_str + m_bjg + m_return_str;
    m_xd_js++;
    }
    }
    else if ((m_pz_dsize21 > 0) && (m_kdtick > m_tick_cmp))
    {
    //超时撤开多
    SetWtCmd(m_pz_no, "撤开单", "买入", 0, 0, 0);
    m_buy_kdelay = GetTimeTick(0);
    if (m_buy_kdelay == 0) m_buy_kdelay = 1;
    }
    }
    else m_buy_kdelay = 0;
    }
    if (m_sell_flag >= 1)
    {
    //是卖
    var m_sjg = GetPzBuyPrice(m_pz_no); //卖出报价
    if (m_sjg == 0) m_sjg = m_new_jg;
    if(TRUE)
    {
    var m_int00.lVal=m_sjg*1000;
    if((m_int00%10)==9) m_sjg=m_int00/1000+0.001;
    else m_sjg=m_int00/1000;
    }
    if (m_pz_dsize1 > 0)
    {
    var m_pdtick = GetTimeTick(m_buy_pdelay); //毫秒级计时
    if ((m_pz_dsize22 == 0) && ((m_buy_pdelay == 0) || (m_pdtick > m_tick_cmp / 3)))
    {
    //平多单
    SetWtCmd(m_pz_no, m_pc_str, "卖出", m_pz_dsize1, m_sjg, 0); //1是数量
    m_buy_pdelay = GetTimeTick(0);
    if (m_buy_pdelay == 0) m_buy_pdelay = 1;
    m_log_str = m_log_str + "平多" + m_tab_str + m_sjg + m_return_str;
    m_xd_js++;
    }
    else if ((m_pz_dsize22 > 0) && (m_pdtick > m_tick_cmp))
    {
    //超时撤平多
    SetWtCmd(m_pz_no, "撤平单", "卖出", 0, 0, 0);
    m_buy_pdelay = GetTimeTick(0);
    if (m_buy_pdelay == 0) m_buy_pdelay = 1;
    }
    }
    else if (m_pz_ksize1_a == 0)
    {
    m_buy_pdelay = 0;
    var m_kktick = GetTimeTick(m_sell_kdelay); //毫秒级计时
    if ((m_pz_ksize21 == 0) && ((m_sell_kdelay == 0) || (m_kktick > m_tick_cmp / 3)))
    {
    if (m_sell_flag == 1)
    {
    //开空
    SetWtCmd(m_pz_no, "开仓", "卖出", m_xd_size, m_sjg, 0);
    m_sell_kdelay = GetTimeTick(0);
    if (m_sell_kdelay == 0) m_sell_kdelay = 1;
    m_log_str = m_log_str + "开空" + m_tab_str + m_sjg + m_return_str;
    m_xd_js++;
    }
    }
    else if ((m_pz_ksize21 > 0) && (m_kktick > m_tick_cmp))
    {
    //超时撤开空
    SetWtCmd(m_pz_no, "撤开单", "卖出", 0, 0, 0);
    m_sell_kdelay = GetTimeTick(0);
    if (m_sell_kdelay == 0) m_sell_kdelay = 1;
    }
    }
    else m_sell_kdelay = 0;
    }
    }
    //这里编制策略程序
    }
    else
    {
    //交易停止后清除全局变量
    m_sys_time = 0;
    m_buy_flag = 0;
    m_buy_kdelay = 0;
    m_buy_pdelay = 0;
    m_sell_flag = 0;
    m_sell_kdelay = 0;
    m_sell_pdelay = 0;
    CloseLsLib(); //关闭历史数据库
    }
    //添加进记录文件
    if (m_log_str != "")
    {
    m_log_js++;
    if (m_log_js > 50)
    {
    AddStrToFile(m_log_str, "message\交易记录.txt");
    m_log_str = "";
    m_log_js = 0;
    }
    }
    //程序有没有被动态修改,有则保存
    if (m_mpu_change_flug == 1)
    {
    SaveDocToFile = 1; //保存当前画面
    m_mpu_change_flug = 0;
    }
    }
     
  2. 好东西,请问怎么配合你的软件使用?
     
  3. 可以把代码放到画面上任何文字对象上,用鼠标点击对应文字对象就可启动策略运行.

    假如你想使用自己的交易方法,只需改变中间策略部分即可.

    外部行情与委托的设置,比较简单,在界面上多操作几次即可.
     


  4. 把代码放到画面上任何文字对象上

    怎么放啊?
    怎么试用?说详细一点好吗?
     
  5. 安装软件,查看帮助文件.
     
  6. 没找到,5555555555

    给个下载链接好吗!谢谢了!:)
     
  7. 用百度搜到了,学习中!
     
  8. 我发誓要把师傅发到网上我能找到的贴子都读N遍,先来报个到!呵呵
     
  9. 学习