金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1789|回复: 1

这是文华财经的自动化策略麻烦技术修改成金字塔可以使用策略

[复制链接]

3

主题

6

帖子

6

积分

Rank: 1

等级: 新手上路

注册:
2023-6-25
曾用名:
发表于 2023-6-25 13:05 | 显示全部楼层 |阅读模式
/*
----------------------------
【模型】
JWJ_Q22081202_LENGGY_WHQ001139
----------------------------
【创建】
WENHUA_JINWJ_20220812
----------------------------
【修改】
WENHUA_JINWJ_20230519
----------------------------
【策略】
死多空头价差策略。
----------------------------
*/

Vars
    //------------------------趋势变量------------------------//
    NumericSeries MA2; //2周期均线
    NumericSeries MA7; //7周期均线
    Numeric BKCOND; //多头开仓条件
    Numeric SKCOND; //空头开仓条件
    //------------------------算法变量------------------------//
    Numeric X; //循环变量
    Numeric N; //下单手数
    Numeric W; //超价倍数
    Numeric BSP; //基准价格
    Numeric DP; //间隔倍数
    Numeric KDN; //网格数量
    Numeric ZYP; //止盈倍数
    Numeric ZSP; //止损倍数
    Numeric CDN; //撤单间隔档位
    Numeric QT; //清仓时间间隔
    Numeric SH; //上海合约参数
    Numeric SVT; //服务器时间
    Numeric CLT; //收盘时间
    Numeric OPP; //开盘价
    Numeric NEWP; //最新价
    Numeric RLP,FLP; //涨跌停价
    Numeric MINP; //最小变动价位
    Numeric BRP0,BRP; //空头可用持仓
    Numeric SRP0,SRP; //空头可用持仓
    Numeric QCT; //清仓处理时间
    Numeric OPFLG; //模型处理标志
    NumericArray SKDP; //卖开网格价格
    NumericArray BKDP; //买开网格价格
    NumericArray BPVLM; //买平手数
    NumericArray SPVLM; //卖平手数
    NumericArray BKDFLG; //买开处理标志
    NumericArray SKDFLG; //卖开处理标志
    NumericArray BPDFLG; //买平处理标志
    NumericArray SPDFLG; //卖平处理标志
    Global_Numeric QCFLG; //清仓处理标志
    Global_Numeric ODFLG; //委托挂单标志
    Global_Numeric VLFLG; //变量赋值标志
    Global_NumericArray BKID,SKID; //开仓委托
    Global_NumericArray BPID,SPID; //平仓委托
    Global_NumericArray BKFLG,SKFLG; //开仓标志
    Global_NumericArray BPFLG,SPFLG; //平仓标志
    Global_NumericArray BKDEL,SKDEL; //开仓撤单标志
    Global_NumericArray BPDEL,SPDEL; //平仓撤单标志
    Global_NumericArray BPSH,SPSH; //平仓委托参数
    Global_NumericArray BKM,SKM; //开仓委托手数
    Global_NumericArray BPM,SPM; //平仓委托手数
    Global_NumericArray BKP,SKP; //开仓委托价格
    Global_NumericArray BPP,SPP; //平仓委托价格
    Global_NumericArray BKCM,SKCM; //开仓成交手数
Begin
    //------------------------趋势部分------------------------//
    If(1) //趋势部分
    {
        MA2 = Ma(Close,2); //2周期均线
        MA7 = Ma(Close,7); //7周期均线
        BKCOND = IIF(MA2 > MA7,1,0);
        SKCOND = IIF(MA2 < MA7,1,0);
        PlotLine("A",MA2);
        PlotLine("B",MA7);
        PlotLine("BKCOND",BKCOND,White,NoDraw);
        PlotLine("SKCOND",SKCOND,White,NoDraw);
    }
    //------------------------处理开启------------------------//
    If(1) //处理开启
    {
        If(A_IsExchangeOpen() == 1) //如果是开盘状态
        {
            If(RunStart() == 1) //如果已初始化成功
            {
                OPFLG = 1; //开启模型处理
            }
        }
    }
    //------------------------变量赋值------------------------//
    If(OPFLG == 1) //变量赋值
    {
        N = 1; //下单手数
        W = 2; //超价倍数
        DP = 1; //间隔倍数
        KDN = 1000; //单边网格数量
        ZYP =1; //止盈倍数
        ZSP = 1000; //止损倍数
        CDN = 20; //撤单间隔档位
        QT = 1 * 60; //清仓处理时间
        BSP = 1410; //基准价格
        CLT = StringToTime("16:00:00"); //收盘时间
        SVT = ServerTime(); //服务器时间
        OPP = Price("Open"); //基准价格
        NEWP = Price("New"); //最新价
        RLP = Price("RiseLimit"); //涨停价
        FLP = Price("FallLimit"); //跌停价
        MINP = Price("MinPrice"); //最小变动价位
        SH = A_IsSHCode(); //上海合约参数
        BRP = A_BuyRemainPosition(); //空头可用持仓
        SRP = A_SellRemainPosition(); //空头可用持仓
        If(SH == 1) //如果是上期所合约
        {
            BRP0 = A_TodayBuyRemainPosition(); //空头今仓可用持仓
            SRP0 = A_TodaySellRemainPosition(); //空头今仓可用持仓
        }
        For X = 0 To KDN * 2 - 1 //遍历空头网格
        {
            BKDP[X] = BSP + KDN * DP * MINP - (X + 1) * DP * MINP; //多头网格价格
            SKDP[X] = BSP - KDN * DP * MINP + (X + 1) * DP * MINP; //空头网格价格
        }
        If(VLFLG == 0) //如果变量未赋值
        {
            Commentary("【基准价:" + Text(BSP) + "】");
            For X = 0 To KDN * 2 - 1 //遍历空头网格
            {
                Commentary("【买开网格档位" + Text(X + 1) + ":" + Text(BKDP[X]) + "】");
                Commentary("【卖开网格档位" + Text(X + 1) + ":" + Text(SKDP[X]) + "】");
            }
            VLFLG = 1; //变量已赋值
        }
        QCT = TimeDiff(SVT,CLT) <= QT && SVT <= CLT; //清仓处理时间
        OPFLG = IIF(BSP > 0,1,0); //模型处理标志
    }
    //------------------------成交判断------------------------//
    If(OPFLG == 1) //成交判断
    {
        For X = 0 To KDN * 2 - 1 //遍历多空头网格
        {
            If(BKFLG[X] == 1) //如果有买开委托
            {
                If(F_OrderStatus(BKID[X]) == Enum_Filled && BRP > 0) //如果买开委托成交
                {
                    Commentary("【多头开仓:买开委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
                    BKCM[X] = F_OrderFilledLot(BKID[X]); //买开成交手数
                    SPVLM[X] = BKCM[X]; //卖平手数
                    SPDFLG[X] = IIF(BKDEL[X] == 0 || BKDEL[X] == 1,BKDEL[X] + 1,0); //开启多头止盈卖平处理
                    BKFLG[X] = 2; //买开委托已成交
                    BKDEL[X] = 0; //买开撤单标志归0
                }
                Else If(F_OrderStatus(BKID[X]) == Enum_Canceled) //如果买开委托已撤
                {
                    If(BKDEL[X] == 1) //如果是多头撤单
                    {
                        Commentary("【多头开仓:买开委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    Else If(BKDEL[X] == 2 || BKDEL[X] == 3 || BKDEL[X] == 4) //如果是多头清仓撤单
                    {
                        Commentary("【多头清仓:买开委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    BKCM[X] = F_OrderFilledLot(BKID[X]); //买开成交手数
                    BKFLG[X] = IIF(BKCM[X] > 0,2,0); //买开标志
                    BKDEL[X] = 0; //买开撤单标志归0
                }
                Else If(F_OrderStatus(BKID[X]) == Enum_Declared || F_OrderStatus(BKID[X]) == Enum_FillPart) //如果买开委托部分成交
                {
                    If(BKDEL[X] == 3) //如果是清仓撤单
                    {
                        Commentary("【多头清仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
                        BKDEL[X] = 4; //清仓处理撤掉买开委托挂单
                    }
                }
            }
            If(SPFLG[X] > 0) //如果有卖平委托
            {
                If(F_OrderStatus(SPID[X]) == Enum_Filled) //如果卖平委托成交
                {
                    If(SPFLG[X] == 1) //如果是多头止盈卖平委托
                    {
                        Commentary("【多头止盈:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    Else If(SPFLG[X] == 2) //如果是多头止损卖平委托
                    {
                        Commentary("【多头止损:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    Else If(SPFLG[X] == 3) //如果是多头清仓卖平委托
                    {
                        Commentary("【多头清仓:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    BKCM[X] = 0; //买开成交手数归0
                    BKFLG[X] = 0; //买开标志归0
                    SPFLG[X] = 0; //卖平标志归0
                    SPDEL[X] = 0; //卖平撤单标志归0
                }
                Else If(F_OrderStatus(SPID[X]) == Enum_Canceled) //如果卖平委托已撤
                {
                    If(SPDEL[X] == 1) //如果是多头止损撤单
                    {
                        Commentary("【多头止损:卖平委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    Else If(SPDEL[X] == 2 || SPDEL[X] == 3 || SPDEL[X] == 4) //如果是多头清仓撤单
                    {
                        Commentary("【多头清仓:卖平委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
                    }
                    BKCM[X] = BKCM[X] - F_OrderFilledLot(SPID[X]); //买开成交手数
                    BKFLG[X] = IIF(BKCM[X] == 0,0,2); //买开标志
                    SPFLG[X] = 0; //卖平标志归0
                    SPDEL[X] = 0; //卖平撤单标志归0
                }
                Else If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托部分成交
                {
                    If(SPDEL[X] == 3) //如果是清仓撤单
                    {
                        Commentary("【多头清仓:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
                        SPDEL[X] = 4; //多头清仓撤掉卖平委托挂单
                    }
                }
            }
            If(SKFLG[X] == 1) //如果有卖开委托
            {
                If(F_OrderStatus(SKID[X]) == Enum_Filled && SRP > 0) //如果卖开委托成交
                {
                    Commentary("【空头开仓:卖开委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
                    SKCM[X] = F_OrderFilledLot(SKID[X]); //卖开成交手数
                    BPVLM[X] = SKCM[X]; //买平手数
                    BPDFLG[X] = IIF(SKDEL[X] == 0 || SKDEL[X] == 1,SKDEL[X] + 1,0); //开启空头止盈买平处理
                    SKFLG[X] = 2; //卖开委托已成交
                    SKDEL[X] = 0; //卖开撤单标志归0
                }
                Else If(F_OrderStatus(SKID[X]) == Enum_Canceled) //如果卖开委托已撤
                {
                    If(SKDEL[X] == 1) //如果是空头撤单
                    {
                        Commentary("【空头开仓:卖开委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    Else If(SKDEL[X] == 2 || SKDEL[X] == 3 || SKDEL[X] == 4) //如果是空头清仓撤单
                    {
                        Commentary("【空头清仓:卖开委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    SKCM[X] = F_OrderFilledLot(SKID[X]); //卖开成交手数
                    SKFLG[X] = IIF(SKCM[X] > 0,2,0); //卖开标志
                    SKDEL[X] = 0; //卖开撤单标志归0
                }
                Else If(F_OrderStatus(SKID[X]) == Enum_Declared || F_OrderStatus(SKID[X]) == Enum_FillPart) //如果卖开委托部分成交
                {
                    If(SKDEL[X] == 3) //如果是清仓撤单
                    {
                        Commentary("【空头清仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
                        SKDEL[X] = 4; //清仓处理撤掉卖开委托挂单
                    }
                }
            }
            If(BPFLG[X] > 0) //如果有买平委托
            {
                If(F_OrderStatus(BPID[X]) == Enum_Filled) //如果买平委托成交
                {
                    If(BPFLG[X] == 1) //如果是空头止盈买平委托
                    {
                        Commentary("【空头止盈:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    Else If(BPFLG[X] == 2) //如果是空头止损买平委托
                    {
                        Commentary("【空头止损:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    Else If(BPFLG[X] == 3) //如果是空头清仓买平委托
                    {
                        Commentary("【空头清仓:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    SKCM[X] = 0; //卖开成交手数归0
                    SKFLG[X] = 0; //卖开标志归0
                    BPFLG[X] = 0; //买平标志归0
                    BPDEL[X] = 0; //买平撤单标志归0
                }
                Else If(F_OrderStatus(BPID[X]) == Enum_Canceled) //如果买平委托已撤
                {
                    If(BPDEL[X] == 1) //如果是空头止损撤单
                    {
                        Commentary("【空头止损:买平委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    Else If(BPDEL[X] == 2 || BPDEL[X] == 3 || BPDEL[X] == 4) //如果是空头清仓撤单
                    {
                        Commentary("【空头清仓:买平委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
                    }
                    SKCM[X] = SKCM[X] - F_OrderFilledLot(BPID[X]); //卖开成交手数
                    SKFLG[X] = IIF(SKCM[X] == 0,0,2); //卖开标志
                    BPFLG[X] = 0; //买平标志归0
                    BPDEL[X] = 0; //买平撤单标志归0
                }
                Else If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托部分成交
                {
                    If(BPDEL[X] == 3) //如果是清仓撤单
                    {
                        Commentary("【空头清仓:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
                        BPDEL[X] = 4; //空头清仓撤掉买平委托挂单
                    }
                }
            }
        }
        ODFLG = 1; //委托挂单标志初始化
        For X = 0 To KDN * 2 - 1 //遍历多空头网格
        {
            If(SKFLG[X] == 1 || BPFLG[X] > 0 || BKFLG[X] == 1 || SPFLG[X] > 0) //如果有开平仓委托
            {
                ODFLG = 2; //有委托挂单
            }
        }
    }
    //------------------------清仓处理------------------------//
    If(OPFLG == 1) //清仓处理
    {
        If(QCFLG == 0) //如果未执行清仓处理
        {
            If(QCT == 1) //如果是清仓处理时间
            {
                Commentary("【多空清仓:清仓处理开始!】");
                For X = 0 To KDN * 2 - 1 //遍历空头网格
                {
                    If(BKFLG[X] == 1) //如果有买开委托
                    {
                        If(BKDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(BKID[X]) == Enum_Declared || F_OrderStatus(BKID[X]) == Enum_FillPart) //如果买开委托挂单
                            {
                                Commentary("【多头清仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
                                BKDEL[X] = 2; //多头清仓撤掉买开委托挂单
                            }
                            Else //如果买开委托未挂单
                            {
                                BKDEL[X] = 3; //多头清仓撤掉买开委托挂单
                            }
                        }
                        Else //如果买开委托已撤单
                        {
                            BKDEL[X] = 4; //多头清仓撤掉买开委托挂单
                        }
                    }
                    If(SPFLG[X] > 0) //如果有卖平委托
                    {
                        If(SPDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托挂单
                            {
                                Commentary("【多头清仓:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
                                SPDEL[X] = 2; //多头清仓撤掉卖平委托挂单
                            }
                            Else //如果卖平委托未挂单
                            {
                                SPDEL[X] = 3; //多头清仓撤掉卖平委托挂单
                            }
                        }
                        Else //如果卖平委托已撤单
                        {
                            SPDEL[X] = 4; //多头清仓撤掉卖平委托挂单
                        }
                    }
                    If(SKFLG[X] == 1) //如果有卖开委托
                    {
                        If(SKDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(SKID[X]) == Enum_Declared || F_OrderStatus(SKID[X]) == Enum_FillPart) //如果卖开委托挂单
                            {
                                Commentary("【空头清仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
                                SKDEL[X] = 2; //空头清仓撤掉卖开委托挂单
                            }
                            Else //如果卖开委托未挂单
                            {
                                SKDEL[X] = 3; //空头清仓撤掉卖开委托挂单
                            }
                        }
                        Else //如果卖开委托已撤单
                        {
                            SKDEL[X] = 4; //空头清仓撤掉卖开委托挂单
                        }
                    }
                    If(BPFLG[X] > 0) //如果有买平委托
                    {
                        If(BPDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托挂单
                            {
                                Commentary("【空头清仓:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
                                BPDEL[X] = 2; //空头清仓撤掉买平委托挂单
                            }
                            Else //如果买平委托未挂单
                            {
                                BPDEL[X] = 3; //空头清仓撤掉买平委托挂单
                            }
                        }
                        Else //如果买平委托已撤单
                        {
                            BPDEL[X] = 4; //空头清仓撤掉买平委托挂单
                        }
                    }
                }
                QCFLG = 1; //已发出清仓撤单
            }
        }
        Else If(QCFLG == 1) //如果已发出清仓撤单
        {
            If(ODFLG == 1) //如果没有开平仓委托
            {
                For X = 0 To KDN * 2 - 1 //遍历空头网格
                {
                    If(BKFLG[X] == 2) //如果有买开委托
                    {
                        SPVLM[X] = BKCM[X]; //卖平手数
                        SPDFLG[X] = 3; //开启多头清仓卖平处理
                    }
                    If(SKFLG[X] == 2) //如果有卖开委托
                    {
                        BPVLM[X] = SKCM[X]; //买平手数
                        BPDFLG[X] = 3; //开启空头清仓买平处理
                    }
                }
                QCFLG = 2; //已发出清仓平仓
            }
        }
        Else If(QCFLG == 2) //如果已发出清仓平仓
        {
            If(ODFLG == 1) //如果没有开平仓委托
            {
                Commentary("【多空清仓:清仓处理完成!】");
                QCFLG = 3; //已完成清仓处理
            }
        }
        Else If(QCFLG == 3) //如果已完成清仓处理
        {
            If(QCT == 0) //如果非清仓处理时间
            {
                QCFLG = 0; //清仓处理标志归0
            }
        }
    }
    //------------------------多头处理------------------------//
    If(OPFLG == 1 && QCFLG == 0) //多头处理
    {
        For X = 0 To KDN * 2 - 1 //遍历多头网格
        {
            If(BKFLG[X] == 0) //如果没有买开委托
            {
                If(NEWP <= BKDP[X] && NEWP > BKDP[X] - DP * MINP) //如果最新价达到档位区间
                {
                    If(BKCOND == 1) //如果满足多头开仓条件
                    {
                        BKDFLG[X] = 1; //开启买开处理
                    }
                }
            }
            Else If(BKFLG[X] == 1) //如果已发出买开委托
            {
                If(NEWP >= BKDP[X] + CDN * DP * MINP) //如果和最新价间隔CDN个档位
                {
                    If(BKDEL[X] == 0) //如果未撤单
                    {
                        Commentary("【多头开仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
                        BKDEL[X] = 1; //已撤掉买开委托挂单
                    }
                }
            }
            Else If(BKFLG[X] == 2) //如果买开委托已成交
            {
                If(NEWP <= BKDP[X] - ZSP * MINP) //如果最新价达到止损点位
                {
                    If(SPFLG[X] == 1) //如果已发出止盈卖平委托
                    {
                        If(SPDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托挂单
                            {
                                Commentary("【多头止损:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
                                SPDEL[X] = 1; //清仓处理撤掉卖平委托挂单
                            }
                        }
                    }
                    Else If(SPFLG[X] == 0 && SPDFLG[X] == 0) //如果没有卖平委托
                    {
                        SPVLM[X] = BKCM[X]; //卖平手数
                        SPDFLG[X] = 2; //开启多头止损卖平处理
                    }
                }
                Else //如果最新价未达到止损点位
                {
                    If(SPFLG[X] == 0 && SPDFLG[X] == 0) //如果没有卖平委托
                    {
                        SPVLM[X] = BKCM[X]; //卖平手数
                        SPDFLG[X] = 1; //开启多头止损卖平处理
                    }
                }
            }
        }
    }
    //------------------------空头处理------------------------//
    If(OPFLG == 1 && QCFLG == 0) //空头处理
    {
        For X = 0 To KDN * 2 - 1 //遍历空头网格
        {
            If(SKFLG[X] == 0) //如果没有卖开委托
            {
                If(NEWP >= SKDP[X] && NEWP < SKDP[X] + DP * MINP) //如果最新价达到档位区间
                {
                    If(SKCOND == 1) //如果满足空头开仓条件
                    {
                        SKDFLG[X] = 1; //开启卖开处理
                    }
                }
            }
            Else If(SKFLG[X] == 1) //如果已发出卖开委托
            {
                If(NEWP <= SKDP[X] - CDN * DP * MINP) //如果和最新价间隔CDN个档位
                {
                    If(SKDEL[X] == 0) //如果未撤单
                    {
                        Commentary("【空头开仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                        F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
                        SKDEL[X] = 1; //已撤掉卖开委托挂单
                    }
                }
            }
            Else If(SKFLG[X] == 2) //如果卖开委托已成交
            {
                If(NEWP >= SKDP[X] + ZSP * MINP) //如果最新价达到止损点位
                {
                    If(BPFLG[X] == 1) //如果已发出止盈买平委托
                    {
                        If(BPDEL[X] == 0) //如果未撤单
                        {
                            If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托挂单
                            {
                                Commentary("【空头止损:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
                                F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
                                BPDEL[X] = 1; //清仓处理撤掉买平委托挂单
                            }
                        }
                    }
                    Else If(BPFLG[X] == 0 && BPDFLG[X] == 0) //如果没有买平委托
                    {
                        BPVLM[X] = SKCM[X]; //买平手数
                        BPDFLG[X] = 2; //开启空头止损买平处理
                    }
                }
                Else //如果最新价未达到止损点位
                {
                    If(BPFLG[X] == 0 && BPDFLG[X] == 0) //如果没有买平委托
                    {
                        BPVLM[X] = SKCM[X]; //买平手数
                        BPDFLG[X] = 1; //开启空头止盈买平处理
                    }
                }
            }
        }
    }
    //------------------------委托处理------------------------//
    If(OPFLG == 1) //委托处理
    {
        For X = 0 To KDN * 2 - 1 //遍历空头网格
        {
            If(BKDFLG[X] == 1) //如果已开启买开处理
            {
                If(BKFLG[X] == 0) //如果没有买开委托
                {
                    BKM[X] = N; //买开委托手数
                    BKP[X] = BKDP[X]; //买开委托价格
                    Commentary("【多头开仓:买开委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
                    BKID[X] = A_SendOrder(Enum_Buy,Enum_Entry,BKM[X],BKP[X]); //发出买开委托
                    BKFLG[X] = 1; //已发出买开委托
                }
            }
            If(SPDFLG[X] > 0) //如果已开启卖平处理
            {
                If(SPFLG[X] == 0) //如果没有卖平委托
                {
                    If(BRP >= SPVLM[X] && SPVLM[X] > 0) //如果多头可用持仓达到N手
                    {
                        SPSH[X] = Enum_Exit; //卖平委托参数
                        If(BRP0 >= SPVLM[X]) //如果多头今仓可用持仓达到N手
                        {
                            SPSH[X] = Enum_ExitToday; //卖平委托参数
                        }
                        SPM[X] = SPVLM[X]; //卖平委托手数
                        If(SPDFLG[X] == 1) //如果是多头止盈
                        {
                            SPP[X] = BKDP[X] + ZYP * MINP; //卖平委托价格
                            Commentary("【多头止盈:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
                        }
                        Else If(SPDFLG[X] == 2) //如果是多头止损
                        {
                            SPP[X] = BKDP[X] - ZSP * MINP; //卖平委托价格
                            Commentary("【多头止损:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
                        }
                        Else If(SPDFLG[X] == 3) //如果是多头清仓
                        {
                            SPP[X] = NEWP - W * MINP; //卖平委托价格
                            Commentary("【多头清仓:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
                        }
                        SPID[X] = A_SendOrder(Enum_Sell,SPSH[X],SPM[X],SPP[X]); //发出卖平委托
                        SPFLG[X] = SPDFLG[X]; //已发出卖平委托
                    }
                }
            }
            If(SKDFLG[X] == 1) //如果已开启卖开处理
            {
                If(SKFLG[X] == 0) //如果没有卖开委托
                {
                    SKM[X] = N; //卖开委托手数
                    SKP[X] = SKDP[X]; //卖开委托价格
                    Commentary("【空头开仓:卖开委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
                    SKID[X] = A_SendOrder(Enum_Sell,Enum_Entry,SKM[X],SKP[X]); //发出卖开委托
                    SKFLG[X] = 1; //已发出卖开委托
                }
            }
            If(BPDFLG[X] > 0) //如果已开启买平处理
            {
                If(BPFLG[X] == 0) //如果没有买平委托
                {
                    If(SRP >= BPVLM[X] && BPVLM[X] > 0) //如果空头可用持仓达到N手
                    {
                        BPSH[X] = Enum_Exit; //买平委托参数
                        If(SRP0 >= BPVLM[X]) //如果空头今仓可用持仓达到N手
                        {
                            BPSH[X] = Enum_ExitToday; //买平委托参数
                        }
                        BPM[X] = BPVLM[X]; //买平委托手数
                        If(BPDFLG[X] == 1) //如果是空头止盈
                        {
                            BPP[X] = SKDP[X] - ZYP * MINP; //买平委托价格
                            Commentary("【空头止盈:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
                        }
                        Else If(BPDFLG[X] == 2) //如果是空头止损
                        {
                            BPP[X] = SKDP[X] + ZSP * MINP; //买平委托价格
                            Commentary("【空头止损:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
                        }
                        Else If(BPDFLG[X] == 3) //如果是空头清仓
                        {
                            BPP[X] = NEWP + W * MINP; //买平委托价格
                            Commentary("【空头清仓:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
                        }
                        BPID[X] = A_SendOrder(Enum_Buy,BPSH[X],BPM[X],BPP[X]); //发出买平委托
                        BPFLG[X] = BPDFLG[X]; //已发出买平委托
                    }
                }
            }
        }
    }
End
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-25 14:48 | 显示全部楼层
抱歉,这种复杂的策略,鉴于时间和精力成本缘故,建议走一对一付费服务处理。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-6-15 22:52 , Processed in 0.155802 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表