>回天海星空.. "这一段是用于你的程序自己修改自己时保存画面文件,跟你画面编辑保存是两回事. 比如你到价执行的两个价格,你可用对话框设置,然后将新的价格保存到画面文件 就可用到他们 " 上面说的“用对话框设置”,指的是哪个对话框? 二次开发中会经常进行一些人机交互对话 就比如提示修改价格参数 //在定义全局变量位置定义 //注意在这里要留一点空位,可用于程序自动修改, //若使用自动修改和保存,改变量定义一定要放在靠前的位置 //因为自动修改要用到修改部分的索引号(12.5的索引号) var m_set_jg=12.5 ; ..................................... var m_set_str=""; SetAskItem="请设定到价买入价格:"; m_set_str=m_set_jg; SetAskText=m_set_str; m_set_str=QueryTextInput;//推出输入对话框,以修改价格 if(m_set_str!="") m_set_jg.dblVal=m_set_str; ................... //若想自动修改,可通过编译查得12.5序号,例如42 ChangeMpuData(42,m_set_jg); m_mpu_change_flug=1;
> 其实自动交易策略用到的参数设定,既可用上面在程序中自动修改的方法,也可利用文件来保存参数.当然最简单的方法是利用实时数据库,因为实时数据库一但创建,它即自动保存其数据内容,同时可通过数据表格对象来修改数据 实时数据库的创建在"品种"设定对话框中,按"实时数据库设置"推设定对话框. 实时数据库调用函数和委托函数在同一大类,各位可自己查找
Re: > //若想自动修改,可通过编译查得12.5序号,例如42 ChangeMpuData(42,m_set_jg); m_mpu_change_flug=1; 还是不知道怎么自动修改?!“可通过编译查得12.5序号,例如42 ”是指什么?
> 程序在编辑对话框中编译后,会被分成若干元素,并赋予一个序号 就比如下图的600100这个字符串的序号是51,若想把600100在原代码级别修改,就要通过这个序号. 基于程序的安全性,原代码只有数值和字串值可在原位置上修改,分别对应 ChangeMpuData(no,new data) ;//在原代码上改变程序数据值 ChangeMpuStrData(no,new str) ;//在原代码上改变程序字串值 这俩个函数.使用时一定要小心. 你要把上面的12.5修改成其他价格,首先先编译取得它的序号 一但你在程序中使用自动修改,就应当注意这些序号不能变,这就是这些变量定义应当尽量靠前的原因
Re: > 不方便的地方,我只是随便说说。 1.画面还是不能保存设置; 2.品种设定时,删除了前面的品种,其他品种设置的面板数量都变成默认100。不能保存原来的设置。 3.要是将默认的数量改为1000就好了。
Re: > 请永清兄参考:http://goomj.com/zqts/fxjgsbx/fxjgsbx32.htm 其中 Y=(1-A)*Y’+A*B 我想是它的核心。 永清兄下面的函数如果与Y的相似,那么测得的结果差距很大,请永清兄优化! 我自己改的表达式,其结果与COST(N)有点近似了。如下: B=最低+N*(最高-最低)/100 如果换手率累和(LH)小于1:Y=(LH-A)*Y’+A*B 如果换手率累和(LH)大于1:Y=(1-A)*Y’+A*B 或者永清兄有更接近的。 GetLsLibCMFBYJG(no,bfpara); 求得的价格意义表示: 在这个价格之下的筹码占总的筹码的bfpara% GetLsLibCMFBKJG(no,bfpara);//亏价 求得的价格意义表示: 在这个价格之上的筹码占总的筹码的bfpara%
> 这不是优化不优化的问题. 算法原理一样,但方法不一样. 其实你也应当发现,筹码分布的算法严重依赖换手率(也即流动盘),算法原理是一种假设,不是一种严格的东西,你希望两个软件结果一样是一种可笑的事情.筹码分布和其他指标一样只有相对意义 象这种简单的算法,你完全可以自己实现,无论是用实时数据库或double双精度浮点动态数组开一个100点的记录或空间就行 本软件一般不会应用户要求来改变或增加指标,一切都要靠用户自己去理解去运算, 凡存在的必具道理,凡即求的定有虚妄.
Re: > 1.永清兄的算法能说说大略吗,我想“知其所以然”? 2.假设算法什么的全部相同,自己通过编程实现,与直接用固定的函数实现,在速度上差距大不大? 3.实盘现象: 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; } 上面一段没起作用。我打开自动策略,卖出委托单已经报入,价高没成交,等了几分钟没撤单(上面的意思是不是超过时间m_tick_cmp就撤单?)。后来我双击撤单,在撤单的同时,软件自动以买入价卖出并全部成交。软件是不是有这个功能?
> //用动态数组存放筹码数据 //第一步,建立100个数据的数组 DblArray_RemoveAll(); for(var k=0;k<100;k++) { DblArray_Add(0); } //第二步,求最大最小价格 var m_max=0; var m_min=0; for(k=0;k<=m_end_dir;k++) { var m_max00=GetLsLibData(5,k); var m_min00=GetLsLibData(6,k); if(k==0) { m_max=m_max00; m_min=m_min00; } else { if(m_max<m_max00) m_max=m_max00; if(m_min>m_min00) m_min=m_min00; } } // //这里按价格m_jg00到动态数组的对应关系 //var m_at00.lVal=100*(m_jg00-m_min)/(m_max-m_min); //取数用: //var m_dbl00=DblArray_GetAt(m_at00); //置数用: //DblArray_SetAt(m_at00,m_data); // var m_all_sum=0;//总量 var m_flow_size=...............;//流动盘 for(k=0;k<=m_end_dir;k++) { //按分布函数求当天某一价格上的换手 //按原理求筹码 } 具体算法自己实现
Re: > 1.永清兄上面的内容我还没看明白。慢慢研究。 2.问题:本软件有没有与下面这个类似的函数? 求递归移动平均。 用法: TMA(X,N,M),求X的递归移动平均,N、M为权重。 算法: 若Y=TMA(X,N,M) 则 Y=(N*Y'+M*X), 其中Y'表示上一周期Y值。初值为M*X