期货全自动交易系统标准版编程指南(3)

Discussion in '强者博弈证券期货自动交易系统' started by yzwyq, Aug 11, 2006.

  1. 本节的任务是完成一个全自动的买卖系统.

    不知大家希望用哪一类的开仓条件,是均线交叉还是macd交叉,

    大家提一个熟悉的策略,不在乎能不能赚钱,只要能自动运行即可

    赚钱与否就是各位研究的问题.

    这一节明后天来做,希望大家提建议
     
  2. 就用海龟系统如何?
     
  3. 我觉得自动下单的交易系统的急所点应该在各个交易所和券商的交易客户端软件与国内的优秀分析软件例如分析家、飞狐和国外的软件如WLD、AB等的无缝对接上,其实,分析、画线、和公式,国内、国外的软件已经作的比较充分了。
     
    • cchenlongg Posted: 06-08-11 18:41 Post subject:

      --------------------------------------------------------------------------------

      我觉得自动下单的交易系统的急所点应该在各个交易所和券商的交易客户端软件与国内的优秀分析软件例如分析家、飞狐和国外的软件如WLD、AB等的无缝对接上,其实,分析、画线、和公式,国内、国外的软件已经作的比较充分了。


    ............................................

    不知道你是什么意思.你应当换个角度,象分析家这样优秀的分析软件,从外人看来,和交易所或经纪商的服务器搞无缝连接是很简单的事,而事实上,分析家这类软件是有局限性的(其基本模式一开始学的就是国外所谓的优秀软件),这些软件大都是分析类的,而真正评价这些软件的价值不是能不能画线,能不能编公式,或实现这样那样的功能,而是看这个软件有没有别人没有的东西.或能让用户赚钱的东西.在当今中国,人力资源特丰富的国家,学着编分析家这样的程序不需要花多少钞票.

    对你来讲,一个分析家+可自动交易就够了,你强调的是共性

    对我来讲,我希望能扩展,能掌握,能制订规则,能建庞大的系统,一句话,我强调的是个性.

    正如众人对C++和C##(或JAVA)谁高谁低的看法是分群体的,不能统一(当然没有人用VB或fortran等语言与C++比,在我眼里,这些公式同属此类).

    作为全球科学分析和系统模拟方面的顶级软件,matlab应当是这类软件的榜样.

    最近微软终止了一项多年研发的统一存储系统计划,这样的系统本来准备用在最新的windows系统上,主义很好,所有的资源都可以用一种方式存储,然而在存储可靠性安全性不高的今天,这种系统是注定要失败的,因为它使用户丧失了个性
     
  4. 没仔细看过和研究过你的这个系统,但从你的论述中,我的主观臆测是,你的系统是一个用程序语言C+或其他VB等可以自己编程的系统,它同时具有自动下单的功能,它的起点用户一定很高,必须会编程。通过编程确定交易下单的策略。用户群一定得专业人员。当然它可能同时具有很花俏的很普通的功能。
    但我觉得这些在其它的软件里都具备了。比国外稍差的分析家,高级用户可以加入C+语言编程,飞狐可以用VB编程,对低级普通用户,分析家和飞狐都具有简单的很全的编程函数,对于一般的策略,这些简单的函数也足够了,可以说已经作的相当完善。国内这两款软件只是没有策略条件下自动下单功能。
    其次,再看,券商现在用的最广的两款软件,通达信和核新的行情及分析软件,短小精悍,很有特点,功能其实也非常强大。再其次,大智慧排列第三,但它们都没有策略条件下自动下单功能。
    我不知道,在分析和策略上,我们的国产软件还能编出超出它们什么范畴的东西来。如果,单纯是为了学习,熟练自己的编辑股软的能力,为将来从事大型股软的开发项目奠定基础,就不说了,如果说指望你的这套系统有超出其他软件的什么过人之处,除了自动下单,别的我没看出来。对于用过多种股软,对各种软件的功能和特点深有体会的我,只是对你的全自动交易系统的题目感兴趣;如果你的题目是分析交易系统,我不会看的;如果是策略分析交易系统,我可能会感兴趣它的易于使用的汉语策略界面,也许看一看;但如果是自动下单,会非常感兴趣。
    其实,我说的就是一个软件要有自己的特点,大家已经作的很好的东西还用我们作吗?其实,自动下单这个东西最好是作成一种插件。像3D软件中专门做的渲染器一样,作成 《自动下单》1.0 for 飞狐版、for分析家版、for WLD版等等,这样,更具特点,搞个注册机,也将具有商业性。你看看核新的那个机构版和权证版的收费价码吧。
    你说的这东西简单,但是我没看见有谁搞出来或具有普及价格优势的商业性的东西,尤其是针对分析家、飞狐和国外那几个大型股软相配合的自动下单插件。
    下边就是你所说的很简单的半自动下单程序,它的价格超过了股软的价格好几倍,而且还是年费,一个飞狐最新的4.9版软件的价格才400--500元。
     
  5. 我觉得策略交给分析家、飞狐或国外的WLD、AB 、TS就足够了,真的说到策略,你的这个系统还真不一定能够准确、或者能编出来,如果复杂的算法出错,还会出大乱子。
     
  6. >

    上面老兄出发点是好的,大多是从公式一代走过来的,有好多资源不能浪费.

    俺不想就你没接触到的东西去和你讨论,本身这也是无意义的,正如你讲的一样,俺的软件对用户要求要高一点,要会编一点程序

    好吧,就依照超过前十点最高开多,低于前十点最低开空,上下午清盘纯日内交易,
    大家可以依照此程序改进吧,这应当是海归系统的第一步

    Code:
    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="cu0610";//交易品种名称
    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;
    	}
    }
    //交易品种序号为-1,表示无该品种
    //系统变量定义区
    var m_sys_time=0;
    var m_pc_str="平今";//当日平今,隔日平仓
    var m_xd_size=1;//下单手数
    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记数
    //系统变量定义区
    //建立系统循环
    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="沪铜自动交易系统";
    				dobj.textcolor=0xffffff;
    			}
    		}
    		else
    		{
    			SetAskItem="询问:";
    			SetAskText="真的打开自动交易?";
    			if(QueryMessage==1)
    			{
    				m_start_flug=1;//置启动标记
    				dobj.text="沪铜自动交易系统启动";
    				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;//月日
    			}
    			//打开期货当日数据接口
    			OpenLsLib(m_pz_name,64,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))
    			{
    				//获取前十点最高最低
    				var m_10max=0.0;
    				var m_10min=0.0;
    				for(var i=m_end_dir-1;i>=m_end_dir-10;i--)
    				{
    					if(i<0) break;
    					var m_dbl00=GetLsLibData(5,i);//最高价
    					if(m_10max==0) m_10max=m_dbl00;
    					if(m_10min==0) m_10min=m_dbl00;
    					if(m_dbl00>m_10max) m_10max=m_dbl00;
    					if(m_dbl00<m_10min) m_10min=m_dbl00;
    					m_dbl00=GetLsLibData(6,i);//最低价
    					if(m_dbl00>m_10max) m_10max=m_dbl00;
    					if(m_dbl00<m_10min) m_10min=m_dbl00;
    				}
    				if(m_new_jg>m_10max)
    				{
    					m_buy_flag=1;
    					m_sell_flag=0;
    				}
    				else if(m_new_jg<m_10min)
    				{
    					m_buy_flag=0;
    					m_sell_flag=1;
    				}
    			}	
    			if((m_nth00>1126)&&(m_nth00<1135)||(m_nth00>1456))
    			{
    				m_buy_flag=2;
    				m_sell_flag=2;
    			}
    			//执行买卖
    			//检查成交回报
    			var m_pz_dsize1=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_ksize1=CheckWtCmd(m_pz_no,"空仓","全部成交",0);
    			var m_pz_ksize21=CheckWtCmd(m_pz_no,"空仓","开等待成交",0);
    			var m_pz_ksize22=CheckWtCmd(m_pz_no,"空仓","平等待成交",0);
    			if(m_buy_flag>=1)
    			{
    				//是买
    				var m_bjg=GetPzSelPrice(m_pz_no);//卖出报价
    				if(m_bjg==0) m_bjg=m_new_jg;		
    				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)))
    					{
    						//平空单
    						SetWtCmd(m_pz_no,m_pc_str,"买入",m_xd_size,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_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==0)
    				{
    					m_sell_pdelay=0;
    					var m_kdtick=GetTimeTick(m_buy_kdelay);//毫秒级计时
    					if((m_pz_dsize21==0)&&(m_buy_kdelay==0))
    					{
    						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_kdtick>12*m_tick_cmp)
    					{
    						//超时撤开多
    						SetWtCmd(m_pz_no,"撤开单","买入",0,0,0);
    					}
    				}
    				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(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)))
    					{
    						//平多单
    						SetWtCmd(m_pz_no,m_pc_str,"卖出",m_xd_size,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_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==0)
    				{
    					m_buy_pdelay=0;
    					var m_kktick=GetTimeTick(m_sell_kdelay);//毫秒级计时
    					if((m_pz_dsize21==0)&&(m_sell_kdelay==0))
    					{
    						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_kktick>12*m_tick_cmp)
    					{
    						//超时撤开空
    						SetWtCmd(m_pz_no,"撤开单","卖出",0,0,0);
    					}
    				}
    				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;
    	}		
    }
     
  7. 能设计这样创新的交易体系不容易;
    能把想法落实到现实更加不简单;
    能详细公开发布使用规则更让人佩服;
    永远支持你!
     
  8. 非常感谢 俺现在才知道什么是高手呢 谢谢老师们的分析
     
  9. 有没有专门适合国内软件的自动下单的东东呢?