全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
开仓后为何还会重复开仓?是A_SendOrder的语法问题吗?
2021-05-11 15:27

Params
    Numeric AfStep( 0.02);
    Numeric AfLimit( 0.2 ) ;
    Numeric timeExit(0.1455);
    Numeric timeInto(0.0900);
    Numeric a(0.006);
    Numeric initcapital(100);    //单位:万
    Numeric moneyrate(80);         //资金使用比例:单位%    
    Numeric money(100);             //固定市值开仓:单位万 
Vars
    Numeric oParCl( 0 ); 
    Numeric oParOp( 0 );
    Numeric oPosition( 0 );
    Numeric oTransition( 0 );
    Series<Numeric> sar1( 0 );
    Series<Numeric> ParCl( 0 );
    Series<Numeric> CC( 0 );

    Numeric lots(0);        //下单手数   


Events
    OnInit()
    {
        SetInitCapital(initcapital*10000);    //设定初始资金
        SetMarginRate(0.1);                    //设定保证金比例
        SetBeginBarMaxCount(1);
           SubscribeBar("rb2110.SHFE","3m",20210501);     
    }
    OnBar(ArrayRef<Integer> indexs)
    {
        Range[0:DataSourceSize() - 1]
        {
            data1.ParabolicSAR( AfStep, AfLimit, oParCl, oParOp, oPosition, oTransition ) ;
            PlotNumeric( "ParCl" , data1.oParCl) ;
            ParCl = data1.oParCl;
            sar1 = data1.ParCl[1];
            CC = data1.Close[1];
              lots=IntPart(A_CurrentEquity*0.7/(myprice*contractunit*BigPointValue*0.1)); //计算开仓手数
            If(A_FreeMargin == A_CurrentEquity)
            {

             If( CC > sar1  And Time < timeExit And Time >= timeInto)                    
              {
                 A_SendOrder(Enum_Buy,Enum_Entry,lots,MIN(Close*1.01,Q_AskPrice));
              }

            }
            If(A_TotalPosition == 1)
            {
             If(CC < sar1 || Time > timeExit)            
              {
                 A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),MAX(Close*0.99,Q_BidPrice));
              }
            }

            }
            
        }

上一篇: 关于A函数的问题
gtja83604693

非常感谢专业指导!

2021-05-13 10:10
kyover

建议你把公式运行机制了解清楚再写

 

2021-05-12 09:53
gtja83604693
@kyover

运行机制在哪里可以了解?我只看到帮助,但依然无法解决问题,在有持仓的条件下也居然开仓,实在不懂。谢谢

2021-05-13 08:14
kyover
@gtja83604693

这些内容都是很系统性的,建议你搜索视频区 启航 关键字 从最早的视频开始先学起来

2021-05-13 08:31
kyover
@gtja83604693

这里简单解释一下

程序本地的运行速度是很快的 基本0.5秒一次

但是网络i通信的速度可能就没这么快,报送单到期货公司,期货公司再到交易所,交易所再返回,可能0.5秒内处理不完

也就是说 第一个时刻,程序判断当前没有持仓,于是报单。第二次运行的时候,成交的信息还没及时回报,虽然订单已经在撮合交易了,但是本地还是认为现在没有持仓,于是又报单了。这就是为什么你会发现重复报单的主要原因。当然,也有可能是你代码业务逻辑就写得有问题。

这个问题属于订单管理问题,文华是没有这个部分的,因为文华本来就不是给专业人士用的,很简单。

tb也有类似的简单的交易命令,可以把订单管理托管给系统去处理,而不需要自己处理。系统里提供的策略都是这样的类型。

不太清楚为什么你已上来要用最专业的方式去开发模型,你看起来并没有订单管理相关的经验,突然用账户函数开发模型肯定非常难。

2021-05-13 08:37
您未登录,请先 登录注册 后发表评论
顶部