一个基于文华t9的只做多策略求大神拷打


Data
    COD:"m2409"; //合约编码,数据区同步
Vars
        String ModA;
        Numeric C1;//m2409价格
    Numeric C1_last;//m2409上一价格
        Numeric M; //条件价位倍数
    Numeric N; //下单手数
    Numeric X; //循环变量
    Numeric W; //委托价位倍数
    Numeric T; //时间间隔
       Numeric QCT; //清仓处理时间
    Numeric SH; //上海合约标志
    Numeric SVT; //服务器时间
        Numeric WQF; //尾盘清仓标志
    Numeric QT; //清仓时间间隔
    Numeric DTN; //撤单tick数量
    Numeric ZYM; //止盈价位倍数
    Numeric ZSM; //止损价位倍数
    Numeric BKC; //多头开仓条件
        Numeric SPC; //多头平仓条件
    Numeric TKN; //数据区长度
    Numeric TKHP; //tick最高价
    Numeric TKLP; //tick最低价
    Numeric TKVL; //tick累计成交量
        Numeric TPrice; //关键价格
    Numeric ODFLG; //挂单判断标志
    Numeric NOW; //当前时间
    Numeric NEWP; //最新价
    Numeric MINP; //最小变动价位
    Numeric RLP,FLP; //涨跌停价
    Numeric BIDP,ASKP; //买卖一价
    NumericArray TKBP; //tick买一价
    NumericArray TKAP; //tick卖一价
    Numeric BRP,SRP; //多空头可用持仓
    Numeric OPFLG; //模型处理标志
    Numeric BKDFLG; //买开处理标志
    Numeric SKDFLG; //卖开处理标志
    Numeric BPDFLG; //买平处理标志
    Numeric SPDFLG; //卖平处理标志
    NumericArray TKP; //tick价格
        Numeric SPVLM; //卖平手数
    NumericArray TKO; //tick持仓量
        Numeric CLT1; //夜盘收盘时间
    Var_TickData TKD; //数据区
    Global_Numeric COFLG; //输出处理标志
    Global_Numeric KCFLG; //开仓处理标志
    Global_Numeric BKID,SKID; //开仓委托
    Global_Numeric BPID,SPID; //平仓委托
        Global_Numeric SPOFLG;
    Global_Numeric BKFLG,SKFLG; //开仓标志

    Global_Numeric BPFLG,SPFLG; //平仓标志
    Global_Numeric BKDEL,SKDEL; //开仓撤单标志
    Global_Numeric BPDEL,SPDEL; //平仓撤单标志
    Global_Numeric BKTKN,SKTKN; //开仓tick数量
    Global_Numeric BKTKV,SKTKV; //开仓累计成交量
    Global_Numeric BKAP,SKAP; //开仓成交均价
    Global_Numeric BKCT,SKCT; //开仓成交时间
    Global_Numeric BKM,SKM; //开仓委托手数
    Global_Numeric BPM,SPM; //平仓委托手数
    Global_Numeric BKP,SKP; //开仓委托价格
    Global_Numeric BPP,SPP; //平仓委托价格
        Global_Numeric QCFLG; //清仓处理标志


Begin
    //---------------------组件处理开启---------------------//
    If(1)
    {
        If(A_IsExchangeOpen() == 1) //如果是开盘状态
        {
            OPFLG = 1; //开启模型处理
        }
    }
    //---------------------期货变量赋值---------------------//
    If(OPFLG == 1)
    {
                M=1.3;
        N = 2; //下单手数
        W = 1; //委托价位倍数
        T = 30; //时间间隔
        DTN = 2; //撤单tick数量
        ZYM = 4; //止盈价位倍数
        ZSM = 8; //止损价位倍数
        NOW = CurrentTime(); //当前时间
        NEWP = Price("New"); //最新价
        BIDP = Price("Bid1"); //买一价
        ASKP = Price("Ask1"); //卖一价
        RLP = Price("RiseLimit"); //涨停价
        FLP = Price("FallLimit"); //跌停价
        MINP = Price("MinPrice"); //最小变动价位
        BIDP = IIF(BIDP == 0 && NEWP == FLP,FLP,BIDP); //买一价(对手价)
        ASKP = IIF(ASKP == 0 && NEWP == RLP,RLP,ASKP); //卖一价(对手价)
        BRP = F_BuyRemainPosition(); //多头可用持仓
        
        BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓
        
        SH = IIF(A_IsSHCode() == 1,Enum_ExitToday,Enum_Exit); //平仓参数
                 WQF = 1; //尾盘清仓标志(1-开启/0-关闭)
        QT = 5 * 60; //清仓时间间隔
        CLT1 = StringToTime("15:00:00"); //收盘时间
        QCT = TimeDiff(SVT,CLT1) <= QT && SVT <= CLT1; //清仓处理时间
        //------------------------开仓条件判断------------------------//
        If(1)
        {
            TKD = Def_TickData("m2409",0,60); //数据区
            If(TKD.State != 1) //如果数据区无效
            {
                If(COFLG == 0) //如果未执行输出处理
                {
                    Commentary("【数据存储:数据区存储中】");
                    COFLG = 1; //已执行输出处理
                }
                OPFLG = 2; //关闭模型处理
            }
            Else If(TKD.State == 1) //如果数据区有效
            {
                If(COFLG == 1) //如果已执行输出处理
                {
                    Commentary("【数据存储:数据区已有效】");
                    COFLG = 2; //已完成输出处理
                }
                TKN = TKD.Num; //数据区长度
                For X = 0 To TKN - 1 //遍历数据区
                {
                                        TKBP[X] = TKD[X].Bid1; //tick买一价
                    TKAP[X] = TKD[X].Ask1; //tick卖一价
                    TKP[X] = TKD[X].TickPrice; //tick价格
                    TKO[X] = TKD[X].TickOpi; //tick持仓量
                                        
                    If(X < TKN - 1) //如果非最新tick
                    {
                         TPrice=TKP[TKN=0];//tick上一周期收盘价
                        
                    }
                }
                TKVL = TKD[TKN - 1].TickVolum; //tick累计成交量
                ModA="SGSD_M";
                F_Bind(ModA);//绑定模组SGSD
                                C1=F_Variant(ModA,"C1");//m2409价格
                C1_last=F_Variant(ModA,"C1_last");//m2409上一价格
                             If( C1/C1_last==M) //如果满足多头开仓条件
                {
                    BKC = 1; //满足多头开仓条件
                }
                If(BKP+4*MINP>=SKP) //如果满足多头盈利平仓条件
                {
                    SPC = 1; //满足多头盈利平仓条件
                }
                If( SPP>=BKP-8*MINP) //如果满足多头止损平仓条件
                {
                    SPC = 1; //满足多头止损平仓条件
                }
            }
        }
    }
    //------------------查询组件当前任务-----------------//
    If(OPFLG == 1)
    {
        If(1)
        {
            If(BKFLG == 1) //如果有买开委托
            {
                If(F_OrderStatus(BKID) == Enum_Filled && BRP > 0) //如果买开委托成交
                {
                    Commentary("【多头开仓:买开委托成交】");
                    BKAP = F_OrderFilledPrice(BKID); //买开成交均价
                    SPDFLG = 1; //开启多头止盈卖平处理
                    BKCT = NOW; //买开成交时间
                    BKFLG = 0; //买开标志归0
                    BKDEL = 0; //买开撤单标志归0
                }
                Else If(F_OrderStatus(BKID) == Enum_Canceled) //如果买开委托已撤
                {
                    Commentary("【多头开仓:买开委托已撤】");
                    If(F_OrderFilledLot(BKID) > 0) //如果买开委托部分成交
                    {
                        BKAP = F_OrderFilledPrice(BKID); //买开成交均价
                        SPDFLG = 1; //开启多头止盈卖平处理
                        BKCT = NOW; //买开成交时间
                    }
                    Else //如果买开委托全部撤单
                    {
                        KCFLG = 0; //开仓处理标志归0
                    }
                    BKFLG = 0; //买开标志归0
                    BKDEL = 0; //买开撤单标志归0
                }
                Else If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
                {
                    If(BKDEL == 0) //如果未撤单
                    {
                        If(TKVL != BKTKV) //如果是新tick
                        {
                            BKTKN = BKTKN + 1; //买开tick数量
                            BKTKV = TKVL; //买开累计成交量
                        }
                        If(BKTKN == DTN) //如果满足撤单条件
                        {
                            Commentary("【多头开仓:买开委托撤单】");
                            F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                            BKDEL = 1; //已发出撤掉买开委托挂单
                        }
                    }
                }
                Else If(F_OrderStatus(BKID) == Enum_NoOrder) //如果买开委托无效
                {
                    Commentary("【多头开仓:买开委托无效】");
                    KCFLG = 0; //开仓处理标志归0
                    BKFLG = 0; //买开标志归0
                    BKDEL = 0; //买开撤单标志归0
                }
            }
            If(SPFLG > 0) //如果有卖平委托
            {
                If(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交
                {
                    If(SPFLG == 1) //如果是多头止盈卖平委托
                    {
                        Commentary("【多头止盈:卖平委托成交】");
                    }
                    Else If(SPFLG == 2) //如果是多头止损卖平委托
                    {
                        Commentary("【多头止损:卖平委托成交】");
                    }
                    Else If(SPFLG == 3) //如果是多头清仓卖平委托
                    {
                        Commentary("【多头清仓:卖平委托成交】");
                    }
                    KCFLG = 0; //开仓处理标志归0
                    SPFLG = 0; //卖平标志归0
                    SPDEL = 0; //卖平撤单标志归0
                }
                Else If(F_OrderStatus(SPID) == Enum_Canceled && BRP > 0) //如果卖平委托已撤
                {
                    If(SPDEL == 1) //如果是追价撤单
                    {
                        Commentary("【多头止损:卖平委托已撤】");
                        If(F_OrderFilledLot(SPID) > 0) //如果卖平委托部分成交
                        {
                            SPM = SPM - F_OrderFilledLot(SPID); //卖平委托手数
                        }
                        If(BRP > 0 && SPM > 0 && SPM <= BRP) //如果卖平委托手数不超过多头可用持仓
                        {
                            SPP = BKP-8*MINP; //卖平委托价格
                            Commentary("【多头止损:卖平委托追价】");
                            SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
                        }
                    }
                    Else If(SPDEL == 2) //如果是多头止损撤单
                    {
                        Commentary("【多头止损:卖平委托已撤】");
                        SPFLG = 0; //卖平标志归0
                        SPDFLG = 2; //开启多头止损卖平处理
                    }
                    Else If(SPDEL == 3) //如果是多头清仓撤单
                    {
                        Commentary("【多头清仓:卖平委托已撤】");
                        SPFLG = 0; //卖平标志归0
                        SPDFLG = 3; //开启多头清仓卖平处理
                    }
                    SPDEL = 0; //卖平撤单标志归0
                }
                Else If(F_OrderStatus(SPID) == Enum_Declared || F_OrderStatus(SPID) == Enum_FillPart) //如果卖平委托挂单
                {
                    If(SPDEL == 0) //如果未撤单
                    {
                        If(SPFLG != 3 && TimeDiff(BKCT,NOW) >= T) //如果满足多头清仓条件
                        {
                            Commentary("【多头清仓:卖平委托撤单】");
                            F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                            SPDEL = 3; //多头清仓撤掉卖平委托挂单
                        }
                        Else //如果不满足多头清仓条件
                        {
                            If(SPFLG == 1) //如果是多头止盈卖平委托
                            {
                                If(NEWP <= BKP - ZSM * MINP) //如果满足多头止损条件开仓价减8跳
                                {
                                    Commentary("【多头止损:卖平委托撤单】");
                                    F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                                    SPDEL = 2; //多头止损撤掉卖平委托挂单
                                }
                            }
                            Else If(SPFLG == 2) //如果是多头止损卖平委托
                            {
                                Commentary("【多头止损:卖平委托撤单】");
                                F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                                SPDEL = 1; //已发出撤掉卖平委托挂单
                            }
                        }
                    }
                }
                Else If(F_OrderStatus(SPID) == Enum_NoOrder) //如果卖平委托无效
                {
                    If(SPFLG == 1) //如果是多头止盈卖平委托
                    {
                        Commentary("【多头止盈:卖平委托无效】");
                    }
                    Else If(SPFLG == 2) //如果是多头止损卖平委托
                    {
                        Commentary("【多头止损:卖平委托无效】");
                    }
                    Else If(SPFLG == 3) //如果是多头清仓卖平委托
                    {
                        Commentary("【多头清仓:卖平委托无效】");
                    }
                    SPFLG = 0; //卖平标志归0
                    SPDEL = 0; //卖平撤单标志归0
                }
            }
If(1) //尾盘清仓
        {
            If(QCFLG == 0) //如果未执行清仓处理
            {
                If(WQF == 1 && QCT == 1) //如果是清仓处理时间
                {
                    Commentary("【尾盘清仓:清仓处理开始】");
                    If(BKFLG == 1) //如果有买开委托
                    {
                        If(BKDEL == 0) //如果未撤单
                        {
                            If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果C买开委托挂单
                            {
                                Commentary("【多头清仓:买开委托撤单】");
                                CODC.F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                                BKDEL = 2; //多头清仓撤掉买开委托挂单
                            }
                            Else //如果买开委托未挂单
                            {
                                BKDEL = 3; //多头清仓撤掉买开委托挂单
                            }
                        }
                        Else //如果已发出撤单
                        {
                            BKDEL = 4; //多头清仓撤掉买开委托挂单
                        }
                    }
                    
                        
                    }
                    If(SPFLG > 0) //如果有卖平委托    
                    {
                        If(SPDEL == 0) //如果未撤单
                        {
                            If(F_OrderStatus(SPID) == Enum_Declared || F_OrderStatus(SPID) == Enum_FillPart) //如果卖平委托挂单
                            {
                                Commentary("【多头清仓:卖平委托撤单】");
                                COD.F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉C卖平委托挂单
                                SPDEL= 2; //多头清仓撤掉C卖平委托挂单
                            }
                            Else //如果C卖平委托未挂单
                            {
                                SPDEL = 3; //多头清仓撤掉C卖平委托挂单
                            }
                        }
                        Else //如果已撤单
                        {
                            SPDEL = 4; //多头清仓撤掉卖平委托挂单
                        }
                    }
                    
                        
                    }
                    QCFLG = 1; //已发出清仓撤单
                }
            }
            Else If(QCFLG == 1) //如果已发出清仓撤单
            {
                If(ODFLG == 1) //如果没有开平仓委托
                {
                    SPVLM = BRP; //卖平手数
                
                    SPDFLG = 3; //开启多头清仓卖平处理
                    QCFLG = 2; //已发出清仓平仓
                }
            }
            Else If(QCFLG == 2) //如果已发出清仓平仓
            {
                If(SPOFLG == 1) //如果没有平仓委托
                {
                    Commentary("【尾盘清仓:清仓处理完成】");
                    QCFLG = 3; //已完成清仓处理
                }
            }
            Else If(QCFLG == 3) //如果已完成清仓处理
            {
                If(QCT == 0) //如果非清仓处理时间
                {
                    QCFLG = 0; //清仓处理标志归0
                }
            }
        }
        
        If(1)
        {
            If(KCFLG == 0) //如果未执行开仓处理
            {
                If(BKC == 1) //如果满足多头开仓条件
                {
                    Commentary("【多头开仓:满足开仓条件】");
                    BKDFLG = 1; //开启买开处理
                    KCFLG = 1; //已执行多头处理
                }
                
            }
        }
    
    //------------------------委托发出------------------------//
    If(OPFLG == 1)
    {
        //---------------------买开委托处理--------------------//
        If(BKDFLG == 1) //如果已开启买开处理
        {
            If(BKFLG == 0) //如果没有买开委托
            {
                BKM = N; //买开委托手数
                BKP = BIDP ; //买开委托价格
                Commentary("【多头开仓:买开委托发出】");
                BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托
                BKTKV = TKVL; //买开累计成交量
                BKTKN = 0; //买开tick数量
                BKFLG = 1; //已发出买开委托
            }
        }
        //---------------------卖平委托处理--------------------//
        If(SPDFLG > 0) //如果已开启卖平处理
        {
            If(SPFLG == 0) //如果没有卖平委托
            {
                If(BRP > 0) //如果有多头可用持仓
                {
                    SPM = BRP; //卖平委托手数
                    If(SPDFLG == 1) //如果是多头止盈卖平
                    {
                        SPP =BKP+4*MINP; //卖平委托价格
                        Commentary("【多头止盈:卖平委托发出】");
                    }
                    Else If(SPDFLG == 2) //如果是多头止损卖平
                    {
                        SPP = BKP-8*MINP; //卖平委托价格
                        Commentary("【多头止损:卖平委托发出】");
                    }
                    Else If(SPDFLG == 3) //如果是多头清仓卖平
                    {
                        SPP = 0.99*BKP; //卖平委托价格
                        Commentary("【多头清仓:卖平委托发出】");
                    }
                    SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
                    SPFLG = SPDFLG; //已发出卖平委托
                }
            }
        }
        
    }    
    
End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值