以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  求助  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=9371)

--  作者:just
--  发布时间:2011/12/14 9:52:26
--  求助

for i=1 to i=99  do
      if TISREMAINEX(0,\'\',\'rb05\')=0 and TISREMAINEX(0,\'\',\'rb01\')=0 then
        sleep(1000);
       
 i=i+1;
     else
        begin
            if  TISREMAINEX(0,\'\',\'rb05\')>0 then
           
   TCANCELEX(1,0,\'\',\'rb01\');
           
   tbuyshort(1,1,mkt,0,0,\'\',\'rb01\');

              
            else
                  TISREMAINEX(0,\'\',\'rb01\')>0 then
                 
   TCANCELEX(1,0,\'\',\'rb05\');
                 
    tbuy(1,1,mkt,0,0,\'\', \'rb05\');
             end   
  
  
                   break;

公式编译通不过 ,请大侠帮忙看看。
[此贴子已经被作者于2011-12-14 9:58:25编辑过]

--  作者:26327756l
--  发布时间:2011/12/14 10:04:36
--  

不知道你的意图

编译通过了

 

for i=1 to i=99  do
  begin
      if TISREMAINEX(0,\'\',\'rb05\')=0 and TISREMAINEX(0,\'\',\'rb01\')=0 then
       begin
        sleep(1000);       
         i=i+1;
       end 
     else
        begin
           if  TISREMAINEX(0,\'\',\'rb05\')>0 then
             begin
               TCANCELEX(1,0,\'\',\'rb01\');
               tbuyshort(1,1,mkt,0,0,\'\',\'rb01\');
             end
           else if  TISREMAINEX(0,\'\',\'rb01\')>0 then
             begin 
               TCANCELEX(1,0,\'\',\'rb05\');
               tbuy(1,1,mkt,0,0,\'\', \'rb05\');
             end
          end   
    
                   break;
       end

 


--  作者:just
--  发布时间:2011/12/14 10:25:30
--  

基本思路是这样的

2个限价单发出后,100%保证2个限价单成交,其中一个用限价,另一个防止瘸腿用市价
这里,2个单子那个先成交那个不知道,所以,只能用函数去判断,成交一个后,在去撤销另一个限价单,用市价去追单。

由于运行环境比较复杂,所以,不用简单的用仓位控制,只能用for循环语句来控制,强制完成2个单子的交易。但在实现过程中,好像语法上的问题
还是其他什么问题,不能编译通过。


--  作者:fly
--  发布时间:2011/12/14 10:53:04
--  

用以下试试

//后台,用固定时间间隔.

 

//如果05未成交,01成交

if  TISREMAINEX(0,\'\',\'rb05\')>0 and TISREMAINEX(0,\'\',\'rb01\')=0 then
             begin
               TCANCELEX(1,0,\'\',\'rb05\');
               tbuyshort(1,1,mkt,0,0,\'\',\'rb05\');
             end

 

//如果01未成交,05成交
if  TISREMAINEX(0,\'\',\'rb01\')>0 and TISREMAINEX(0,\'\',\'rb05\')=0 then
             begin 
               TCANCELEX(1,0,\'\',\'rb01\');
               tbuy(1,1,mkt,0,0,\'\', \'rb01\');
             end


--  作者:人生如棋
--  发布时间:2011/12/14 11:21:12
--  

谢谢just ,谢谢fly

帮我解决这个问题

fly的方法简单情况下是可以的,但实际上的运行环境,比较复杂,因为有可能是2张限价单10秒不成交,这个时候可能大的条件都不对了,根本进不了这个语句,随时间推进,假设如果限价单成交了一张,又进不了这个语句,那后面就全步乱掉了,事实情况也是这样的,所以,需要限价单挂出后,要对这2个单子做处理,100%保证2张单子成交掉。


--  作者:fly
--  发布时间:2011/12/14 13:37:13
--  

不放在FOR循环里,

直接放到策略开始的几行,不满足什么大条件,或者说只要是最后一周期就好,别的什么条件都不要

[此贴子已经被作者于2011-12-14 13:37:44编辑过]