股票权证全自动交易系统问答专题(一)

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

  1. 发现前面贴子较乱,整理一下
     
  2. >回天海星空..

    "这一段是用于你的程序自己修改自己时保存画面文件,跟你画面编辑保存是两回事.

    比如你到价执行的两个价格,你可用对话框设置,然后将新的价格保存到画面文件
    就可用到他们 "

    上面说的“用对话框设置”,指的是哪个对话框?


    二次开发中会经常进行一些人机交互对话

    就比如提示修改价格参数

    //在定义全局变量位置定义
    //注意在这里要留一点空位,可用于程序自动修改,
    //若使用自动修改和保存,改变量定义一定要放在靠前的位置
    //因为自动修改要用到修改部分的索引号(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;
     
  3. >

    其实自动交易策略用到的参数设定,既可用上面在程序中自动修改的方法,也可利用文件来保存参数.当然最简单的方法是利用实时数据库,因为实时数据库一但创建,它即自动保存其数据内容,同时可通过数据表格对象来修改数据

    实时数据库的创建在"品种"设定对话框中,按"实时数据库设置"推设定对话框.

    实时数据库调用函数和委托函数在同一大类,各位可自己查找
     
  4. Re: >回天海星空..

    1.关于“用对话框设置”,我摸索一下,不行就用编辑保存了。

    2.今天抓到的死策略的调试图:永清兄看看怎么改?
     
  5. >

    语法错误在

    m_sjg=...;

    没有";",当然死在这里.

    你修改完程序后,一定要编译一下,看看有什么错误.

    另外你的外部变量列表中,也有可能有变量名称书写错误,看图中箭头
     
  6. Re: >

    1.我的低级错误,罚敲一下头!加了“;”后运行正常了。

    2.调试的时候 还是有很多后面是“In”?
     
  7. >

    :In

    表示从系统输入变量.若这些系统是变量或控制,就是对的,若是自己定义的,则看看有没有用var定义,或名称写错了
     
  8. Re: >

    每次在新窗口打开画面文件后,必须点一下“正常显示”,再调试,就不会出现“In”了,有时候全空,有时候有几个“Out”。
     
  9. >

    有一些输入输出是正常的,就比如改变显示的文字和颜色.

    你主要是检查你自己编的程序中有没有变量变为in/out
     
  10. Re: >

    //若想自动修改,可通过编译查得12.5序号,例如42
    ChangeMpuData(42,m_set_jg);
    m_mpu_change_flug=1;


    还是不知道怎么自动修改?!“可通过编译查得12.5序号,例如42 ”是指什么?
     
  11. >

    程序在编辑对话框中编译后,会被分成若干元素,并赋予一个序号

    就比如下图的600100这个字符串的序号是51,若想把600100在原代码级别修改,就要通过这个序号.

    基于程序的安全性,原代码只有数值和字串值可在原位置上修改,分别对应

    ChangeMpuData(no,new data) ;//在原代码上改变程序数据值
    ChangeMpuStrData(no,new str) ;//在原代码上改变程序字串值

    这俩个函数.使用时一定要小心.

    你要把上面的12.5修改成其他价格,首先先编译取得它的序号
    一但你在程序中使用自动修改,就应当注意这些序号不能变,这就是这些变量定义应当尽量靠前的原因
     
  12. Re: >

    不方便的地方,我只是随便说说。
    1.画面还是不能保存设置;
    2.品种设定时,删除了前面的品种,其他品种设置的面板数量都变成默认100。不能保存原来的设置。
    3.要是将默认的数量改为1000就好了。
     
  13. >

    一切的根源是你的注册表使用有问题.
     
  14. 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%
     
  15. >

    这不是优化不优化的问题.

    算法原理一样,但方法不一样.

    其实你也应当发现,筹码分布的算法严重依赖换手率(也即流动盘),算法原理是一种假设,不是一种严格的东西,你希望两个软件结果一样是一种可笑的事情.筹码分布和其他指标一样只有相对意义

    象这种简单的算法,你完全可以自己实现,无论是用实时数据库或double双精度浮点动态数组开一个100点的记录或空间就行

    本软件一般不会应用户要求来改变或增加指标,一切都要靠用户自己去理解去运算,

    凡存在的必具道理,凡即求的定有虚妄.
     
  16. 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就撤单?)。后来我双击撤单,在撤单的同时,软件自动以买入价卖出并全部成交。软件是不是有这个功能?
     
  17. >

    算法是不能告诉你的,只能告诉你,算法原理一样,本软件求出的筹码分布的价格肯定比你的价格收敛.


    关于撤单,按逻辑,并不排斥手动撤单,若是超时没有自动撤单,只能说明这时卖出信号没有了或程序有错.
     
  18. Re: >

    Y=(1-A)*Y’+A*B

    Y’表示昨天的Y值。

    搞了半天,还是不知道怎么输出Y。也许对有点编程基础的人是在简单不过了,而我还找不到门。请永清兄点拨一二。
     
  19. >

    //用动态数组存放筹码数据

    //第一步,建立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++)
    {
    //按分布函数求当天某一价格上的换手
    //按原理求筹码

    }

    具体算法自己实现
     
  20. Re: >

    1.永清兄上面的内容我还没看明白。慢慢研究。

    2.问题:本软件有没有与下面这个类似的函数?

    求递归移动平均。
    用法:
    TMA(X,N,M),求X的递归移动平均,N、M为权重。
    算法:
    若Y=TMA(X,N,M) 则 Y=(N*Y'+M*X), 其中Y'表示上一周期Y值。初值为M*X