问题讨论:自动交易系统(简易公式语言)

Discussion in '金字塔决策交易系统' started by Superview, Jun 29, 2009.

  1. 经过两周的模拟账户实盘测试,现在以公式语言建立的交易系统,完全适用于一般频度的短、中、长线程式化交易,即不高于每秒交易一次。对于超高频炒单(每秒交易一个次以上)等特殊要求,需要用金字塔的VBS高端功能进行开发。

    目前金字塔与飞狐基本兼容(市面上流行的三重滤网很容易通过跨周期引用来实现),很快将99%的兼容,且函数和功能大幅增加,我们将增加新的数学函数、统计函数和工程预测函数近百个,届时函数将超过750个,远超过金狐的445个,其中与程式化交易有关的函数将超过100个(金狐18个、分析家28个),充分满足交易员的各种需要。

    金字塔程式化交易的特点和与TradeStation等软件的不同点

    金字塔的程式化交易是基于后台的预警模式,可以在不影响用户前台图形操作情况下,与预警系统一起工作来实现自动交易,并且可以一个交易策略同时交易几个品种。而TradeStation是必须在图表上才能实现交易的。

    TradeStation程式化交易时,图表上只有最后一个周期走完才发出交易指令,而金字塔是基于预警轮询模式,在一个K线周期内会被多次执行交易判断(频率取决于预警时间间隔这个选项),这样可以保证在出现信号时能够以最快速度的发出交易指令,但是用户不用担心一个周期内多次重复交易问题,因为金字塔可以自动防止此现象。

    由于程式化交易模式不同,所以用金字塔做自动交易时应特别注意几个问题:

    1、由于自动交易不局限于最后的K线走完,所以可能会导致中间发出信号,而价格变动后信号消失

    2、预警时间间隔控制轮询的频率,用户应该根据交易公式所用到的周期合理的分配间隔时间,防止由于间隔时间不合适而导致例如上传下破等指标信号漏掉的情况

    3、金字塔后面的版本会考虑增加兼容TradeStation的交易模式,最后K线走完才发指令,满足不同用户的需求
     
    Last edited by a moderator: Nov 5, 2009
  2. 奋勇的XXX 23:09:30
    你好,是这样的,我不会编程,分析家什么也没用过,现在我想试试在金字塔弄简单程序化交易,针对外汇,每个品种虽然24小时交易,单活跃的时段也就几个小时,那么我怎么设定系统只在特定时段起作用呢,能否用金字塔自带的那个macd金死叉系统帮我编一下,我好有个大架子慢慢研究
    奋勇的XXX 23:09:38
    比如我需要有效时段是北京时间下午4点到凌晨2点,这样我可以测试系统,否则按24小时测试出来的结果大多数时候在来回砍

    答复:简单的不能再简单的交易模型
    MACD:="MACD"(26,12,9);
    资产:ASSET,LINETHICK0;
    可用现金:CASH(0),LINETHICK0;
    持仓:HOLDING,LINETHICK0;

    TT1:=TIME>=110000 and TIME<205000;{开仓时段,对于外汇3时区,北京时间16:00---2:00为3时区的11:00---21:00}
    TT2:=TIME>=110000 and TIME<210000;{平仓时段}
    TJ:=CROSS(MACD,0);
    TJ1:=CROSS(0,MACD);

    {开多} BUY(tt1 and ref(TJ,1),1,market,o);
    {平多} SELL(tt1 and TJ1,持仓,thisclose,C);

    上述公式可以在图表上进行显示和做交易评测

    当然要程序化交易,还需要用程式化交易函数替代模型相关的几个交易系统执行函数,如
    tBUY替代BUY等,其中类型也要根据具体情况修改。
    请仔细阅读有关交易函数和程式化函数及其举例。

    再比如一个最简单的3天均线穿越5天均线的多头交易系统

    资产:ASSET,LINETHICK0;
    可用现金:CASH(0),LINETHICK0;
    持仓:HOLDING,LINETHICK0;



    MA3:MA(C,3);
    MA5:MA(C,5);

    BUY(CROSS(MA3,MA5),1,THISCLOSE); //开多1手
    SELL(CROSS(MA5,MA3),0,THISCLOSE);//平多0表示平掉全部持仓



    上述公式可以完整的显示在图表上,如果需要做程式化交易,那么只需替换两个交易函数即可

    MA3:MA(C,3);
    MA5:MA(C,5);

    TBUY(CROSS(MA3,MA5),1,LMT,C); //按照最新价限价开多
    TSELL(CROSS(MA5,MA3),0,LMT,C);//按照最新价限价平多,0表示平掉全部持仓



    请注意TBUY和TSELL函数的参数出现了变化,真正的下单时,需要指定下单类型和价格的,否则系统会按照市价进行交易。
     
    Last edited by a moderator: Nov 5, 2009
  3. 如图,北京时间16:00---2:00为3时区的11:00---21:00,才允许交易
     
  4. Forex**** 11:14:03
    我觉得手动开仓,自动止损比较好,开仓点还是由人来主动选择
    forex**** 14:44:51
    比如我手动开仓做多HG,然后止损放到sar下面0.003,我希望金字塔能帮我实现的就是移动止损的功能
    forex**** 14:54:24
    这样我可以安心睡觉 ,呵呵

    答复:可以做, 我帮你做一个简单例子,你慢慢体会、修改

    input:p(4,1,20),STEP(2,1,6),MAXP(20,5,100);
    资产:ASSET,LINETHICK0;
    可用现金:CASH(0),LINETHICK0;
    持仓:HOLDING,LINETHICK0;

    SAR1:SAR(P,STEP,MAXP),CIRCLEDOT;
    BUY1:=SAR1+0.003;{止损放到sar上面0.003}
    SELL1:=SAR1-0.003;{止损放到sar下面0.003}

    ENTERLONG1:=cross(h,BUY1);
    EXITLONG1:=cross(SELL1,l);

    BUY(ENTERLONG1,20%,stopr,BUY1); //按照20%仓位下单
    SELL(EXITLONG1 and 持仓>0,持仓,stopr ,SELL1);
     
    Last edited by a moderator: Nov 5, 2009
  5. 因为手动开仓,自动止损比较好,所以BUY和BUYSHORT语句不执行。
    还需要用程式化交易函数替代模型相关的几个交易系统执行函数,如
    tSELL替代SELL等,其中类型也要根据具体情况(对应IB_TWS的四种交易指令:LMT、MKT、STP、STPLMT)修改。如下蓝色部分

    input:p(4,1,20),STEP(2,1,6),MAXP(20,5,100);

    SAR1:SAR(P,STEP,MAXP);
    BUY1:=SAR1+0.003;{止损放到sar上面0.003}
    SELL1:=SAR1-0.003;{止损放到sar下面0.003}

    ENTERLONG1:=cross(h,BUY1);
    EXITLONG1:=cross(SELL1,l);

    TBUY(ENTERLONG1,1,stp,BUY1);
    TSELL(EXITLONG1 and 持仓>0,持仓,stp ,SELL1);

    请先使用纸帐户进行实盘测试
     
    Last edited by a moderator: Nov 5, 2009
  6. Forex**** 11:18:51
    请问:如何启动程式化交易?

    答复:
    选择[交易]---[本地预警与程式化交易] 或者Ctrl + A ---[新增条件]---选入监控的品种、时间间隔、钩选程式化交易,点击[指标公式]---选入[交易系统]---[SAR_T003]---选定周期,如图,确定后,启动预警
     
  7. 确定后,启动预警;
    左键双击SAR_T003,出现,如下图

    你就可手动交易,自动止损了
     
  8. forex**** 10:58:29
    我的advisor账户, 现在下面有2个帐号交易,是不是需要另外设置呢?
    forex**** 10:58:47
    比如开仓的时候, 和平仓的时候

    答复: 不用。advisor账户,在交易系统里,写进相应的帐号即可,如
    按需要写,如'U33503'---开20,'U33506'---开30

    tBUY(b1,20,STP ,BUY1+0.25,'U33503');
    tBUY(b1,30,STP ,BUY1+0.25,'U33506');
    tSELL(b2,持仓,SELL1-0.25,'U33503');
    tSELL(b2,持仓,STP ,SELL1-0.25,'U33506');
    tBUYSHORT(c1,20,STP ,SELL1-0.25,'U33503');
    tBUYSHORT(c1,30,STP ,SELL1-0.25,'U33506');
    tSELLSHORT(c2,持仓,STP,BUY1+0.25,'U33503');
    tSELLSHORT(c2,持仓,STP,BUY1+0.25,'U33506');
     
  9. QQ何时有人值班??
     
  10. 午休,有人了
     
  11. 请问金字塔交易系统的评测,开仓、平仓时机和价位还是按飞狐或分析家那样用本周期或次周期的最高价、最低价、中间价、开盘价、收盘价进行的吗? 能否更精细些,按接近实际的价位和时机进行?
     
  12. 金字塔的交易系统评测可以使用BUY等等交易函数,可以指定任意价格开仓和平仓
     

  13. 谢谢您的关注!
    在金字塔交易系统的评测中,一般可以按本周期或次周期的最高价、最低价、中间价、开盘价、收盘价进行统计。
    但在交易策略的公式编写中,完全可以按接近实际的价位和时机进行交易统计, #4的例子中
    BUY(b1,20%,stopr,BUY1);
    就是按具体价位BUY1进行交易的,而系统评测也是按此价格统计的。
    可以这么说,金字塔的系统交易模型在考虑手续费和滑价后的评测可以非常接近真实情况,绝不像国内大部分软件那样,只是粗略的近似,而引起总收益率较大的误差,美化某些拙劣系统。请注意图中的出、入市价位标记
     
  14. 如此说来,金字塔真是个顶呱呱的软件
     
  15. "在金字塔交易系统的评测中,一般可以按本周期或次周期的最高价、最低价、中间价、开盘价、收盘价进行统计。"

    为什么我用系统自带的macd交易系统做恒指测试,无交易记录;但叠加公式在主图上又有交易信号??

    更别说用自己编的交易系统做什么测试了??????

    你5楼提到的简单例子也没有测试结果??
     
  16. 把交易系统放到主图上有信号,评测没有信号,只能说明一点,就是你的评测的设置有问题,比如周期没有选好,测试的品种没有数据,或者交易系统中资金不足或者开平仓条件逻辑问题等等。请仔细检查你的设置。
     
  17. 用系统自带的macd交易系统做恒指测试,如图

    请注意测试时,仔细填写有关的5个步骤。

    4楼提到的简单例子是可以测试的,而5楼提到的简单例子是经过4楼测试后形成的可以交易的程式化系统,无须再做测试。若实在需要测试,可将有关函数前面的[t]去掉就行。
     
  18. 明白了,我注意到可能是我选数据周期的问题;

    另如何调入品种恒指08合约,我用系统自带的恒指07改了一下到期日为20090827,发现没有用,这是为什么??
     
  19. 应该改为到期日:20090828
     
  20. 我又犯了低级错误,呵呵;

    谢谢指导!