A函数与事件驱动8 -TICK数据其二|课间代码

代码如下,逻辑循环已做好

实时环境下单再另外测一次

//------------------------------------------------------------------------
// 简称: ttlesson_0220_2025
// 名称: 
// 类别: 指标应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
    //此处添加参数

Vars
    //此处添加变量
    global Numeric my_sw(0);// 0表示没仓,1是开仓过了
    global Numeric mindiff;
    global Array<Integer> ordid;
    global Numeric g_tick(0);
    global Numeric first_tick(0);
Defs
    //此处添加策略函数
    
Events
    //此处实现事件函数
    
    //初始化事件函数,策略运行期间,首先运行且只有一次
    OnInit()
    {
        //SubscribeBar(Symbol , "tick", BeginDateTime);
        //SubscribeBar(Symbol , "tick", BeginDateTime);
    }
    OnReady()
    {
        mindiff = minmove * PriceScale * BigPointValue;
        print("mindiff="+text(mindiff));
    }
    
    //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
    OnBar(ArrayRef<Integer> indexs)
    {
        tick a;
        
        if(CurrentBar%10 == 9)
        {
            GetTick(a);
            Numeric askv_sum = a.bidask1.askV + a.bidask2.askV + a.bidask3.askv + a.bidask4.askV +a.bidask5.askv;
            Numeric bidv_sum = a.bidask1.bidv + a.bidask2.bidv + a.bidask3.bidv + a.bidask4.bidv +a.bidask5.bidv;
            // a.bidask1.askP 卖一
            // a.bidask1.bidP 买一
            if(BarStatus !=2 )
            {
                buy(1, open);
                //A_Buy(Symbol,1,open,ordid);
            }
            else if(BarStatus == 2 and my_sw==0)
            {
                if(a.bidask1.askP - a.bidask1.bidP > mindiff )
                {
                    //buy(1 , a.bidask1.bidP + mindiff );
                    A_Buy(Symbol,1,a.bidask1.bidP + mindiff,ordid);
                    if(first_tick == 0)//0表示还没开仓
                        first_tick = g_tick;//有值,代表有下单
                }
                else if(askv_sum*5 < a.bidask1.bidv)//追的 
                {
                    //buy(1 , a.bidask5.askP );
                    A_Buy(Symbol,1,a.bidask5.askP,ordid);
                    if(first_tick == 0)
                        first_tick = g_tick;
                }
                Else//例外
                {
                    //buy(1, open);
                    A_Buy(Symbol,1,open,ordid);
                    if(first_tick == 0)
                        first_tick = g_tick;
                }
                my_sw = 1;
            }
        }
        
        if(BarStatus ==2 )
        {
            g_tick = g_tick +1;
            if(first_tick + 30 < g_tick and my_sw == 1)
            {
                print("超时");
                order tem_ord;
                A_GetOrder(ordid[0],tem_ord);
                if(tem_ord.status == Enum_Filled)
                {
                    print("全部成交");
                    
                }
                else if(tem_ord.status == Enum_Declared)
                {
                    print("还在挂");
                    A_DeleteOrderEx(ordid[0]);
                }
                first_tick = 0;
                my_sw = 0;
            }
            print("g_tick="+text(g_tick));
            print("first_tick="+text(first_tick));
            print("my_sw="+text(my_sw));
            print("CurrentBar%10="+text(CurrentBar%10));
        }
        
    }
    OnOrder(OrderRef ord)
    {
        
    }
//------------------------------------------------------------------------
// 编译版本    2025/2/20 151848
// 版权所有    wangkaiming
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------


TBQ3软件A函数与事件驱动8 -TICK数据其二
TB系统提供的事件驱动函数能不能用return返回数据?比如onnar()
关于事件驱动函数
成交事件域驱动
事件驱动框架建议
新量化时代的必备交易利器——“事件驱动”
事件驱动的次序
tick数据缺失,函数结果错误
在事件驱动下如何通过亏损金额止损
OnOrder事件驱动问题