全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
策略改成TBQ可用
AAASSS 分享到
2023-08-02 16:38


Data

COD:\"P2309\"; //合约编码,数据区同步

Vars

Numeric N; //下单手数

Numeric X; //循环变量

Numeric M; //条件价位倍数

Numeric W; //委托价位倍数

Numeric P; //条件比例

Numeric T; //时间间隔

Numeric DTN; //撤单tick数量

Numeric ZYM; //止盈价位倍数

Numeric ZSM; //止损价位倍数

Numeric BKC; //多头开仓条件

Numeric SKC; //空头开仓条件

Numeric BKCP; //多头开仓价格

Numeric SKCP; //空头开仓价格

Numeric TKN; //数据区长度

Numeric TKSV; //tick成交量和

Numeric TKVL; //tick累计成交量

Numeric SH; //平仓参数

Numeric NOW; //当前时间

Numeric NEWP; //最新价

Numeric MINP; //最小变动价位

Numeric RLP,FLP; //涨跌停价

Numeric BIDP,ASKP; //买卖一价

Numeric BVSV,AVSV; //买卖量和

Numeric BRP,SRP; //多空头可用持仓

Numeric OPFLG; //模型处理标志

Numeric BKDFLG; //买开处理标志

Numeric SKDFLG; //卖开处理标志

Numeric BPDFLG; //买平处理标志

Numeric SPDFLG; //卖平处理标志

NumericArray TKV; //tick成交量

NumericArray TKA; //tick主动买卖

Var_TickData TKD; //数据区

Global_Numeric COFLG; //输出处理标志

Global_Numeric KCFLG; //开仓处理标志

Global_Numeric BKID,SKID; //开仓委托

Global_Numeric BPID,SPID; //平仓委托

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; //平仓委托价格

Begin

//------------------------处理开启------------------------//

If(1) //处理开启

{

If(A_IsExchangeOpen() == 1) //如果是开盘状态

{

OPFLG = 1; //开启模型处理

}

}

//------------------------变量赋值------------------------//

If(OPFLG == 1) //变量赋值

{

N = 1; //下单手数

M = 1; //条件价位倍数

W = 1; //委托价位倍数

P = 0.3; //条件比例

T = 30; //时间间隔

DTN = 2; //撤单tick数量

ZYM = 3; //止盈价位倍数

ZSM = 2; //止损价位倍数

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(); //多头可用持仓

SRP = F_SellRemainPosition(); //空头可用持仓

BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓

SRP = Min(SRP,A_SellRemainPosition()); //空头可用持仓

SH = IIF(A_IsSHCode() == 1,Enum_ExitToday,Enum_Exit); //平仓参数

}

//------------------------数据取值------------------------//

If(OPFLG == 1) //数据取值

{

TKD = Def_TickData(\"P2309\",1,2); //数据区

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 //遍历数据区

{

TKV[X] = TKD[X].DeltaVol; //tick成交量

TKA[X] = TKD[X].Activity; //tick主动买卖

TKSV = TKSV + TKV[X]; //tick成交量和

}

TKVL = TKD[TKN - 1].TickVolum; //tick累计成交量

For X = 1 To 5 //遍历五档

{

BVSV = BVSV + Price(\"BidVol\" + Text(X)); //买量和

AVSV = AVSV + Price(\"AskVol\" + Text(X)); //卖量和

}

If(TKA[0] == 0 && TKA[1] == 0 && TKSV >= P * AVSV) //如果满足多头开仓条件

{

BKCP = IIF(ASKP - BIDP > M * MINP,BIDP + W * MINP,ASKP); //多头开仓价格

BKC = 1; //满足多头开仓条件

}

Else If(TKA[0] == 1 && TKA[1] == 1 && TKSV >= P * BVSV) //如果满足空头开仓条件

{

SKCP = IIF(ASKP - BIDP > M * MINP,ASKP - W * MINP,BIDP); //空头开仓价格

SKC = 1; //满足空头开仓条件

}

}

}

//------------------------成交判断------------------------//

If(OPFLG == 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; //已发出撤掉买开委托挂单

}

}

}

}

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 = BIDP; //卖平委托价格

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(TimeDiff(BKCT,NOW) >= T) //如果满足多头清仓条件

{

Commentary(\"【多头清仓:卖平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单

SPDEL = 3; //多头清仓撤掉卖平委托挂单

}

Else //如果不满足多头清仓条件

{

If(SPFLG == 1) //如果是多头止盈卖平委托

{

If(NEWP <= BKAP - ZSM * MINP) //如果满足多头止损条件

{

Commentary(\"【多头止损:卖平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单

SPDEL = 2; //多头止损撤掉卖平委托挂单

}

}

Else If(SPFLG == 2) //如果是多头止损卖平委托

{

Commentary(\"【多头止损:卖平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单

SPDEL = 1; //已发出撤掉卖平委托挂单

}

}

}

}

}

If(SKFLG == 1) //如果有卖开委托

{

If(F_OrderStatus(SKID) == Enum_Filled && SRP > 0) //如果卖开委托成交

{

Commentary(\"【空头开仓:卖开委托成交!】\");

SKAP = F_OrderFilledPrice(SKID); //卖开成交均价

BPDFLG = 1; //开启空头止盈买平处理

SKCT = NOW; //卖开成交时间

SKFLG = 0; //卖开标志归0

SKDEL = 0; //卖开撤单标志归0

}

Else If(F_OrderStatus(SKID) == Enum_Canceled) //如果卖开委托已撤

{

Commentary(\"【空头开仓:卖开委托已撤!】\");

If(F_OrderFilledLot(SKID) > 0) //如果卖开委托部分成交

{

SKAP = F_OrderFilledPrice(SKID); //卖开成交均价

BPDFLG = 1; //开启空头止盈买平处理

SKCT = NOW; //卖开成交时间

}

Else //如果卖开委托全部撤单

{

KCFLG = 0; //开仓处理标志归0

}

SKFLG = 0; //卖开标志归0

SKDEL = 0; //卖开撤单标志归0

}

Else If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单

{

If(SKDEL == 0) //如果未撤单

{

If(TKVL != SKTKV) //如果是新tick

{

SKTKN = SKTKN + 1; //卖开tick数量

SKTKV = TKVL; //卖开累计成交量

}

If(SKTKN == DTN) //如果满足撤单条件

{

Commentary(\"【空头开仓:卖开委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单

SKDEL = 1; //已发出撤掉卖开委托挂单

}

}

}

}

If(BPFLG > 0) //如果有买平委托

{

If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交

{

If(BPFLG == 1) //如果是空头止盈买平委托

{

Commentary(\"【空头止盈:买平委托成交!】\");

}

Else If(BPFLG == 2) //如果是空头止损买平委托

{

Commentary(\"【空头止损:买平委托成交!】\");

}

Else If(BPFLG == 3) //如果是空头清仓买平委托

{

Commentary(\"【空头清仓:买平委托成交!】\");

}

KCFLG = 0; //开仓处理标志归0

BPFLG = 0; //买平标志归0

BPDEL = 0; //买平撤单标志归0

}

Else If(F_OrderStatus(BPID) == Enum_Canceled && SRP > 0) //如果买平委托已撤

{

If(BPDEL == 1) //如果是追价撤单

{

Commentary(\"【空头止损:买平委托已撤!】\");

If(F_OrderFilledLot(BPID) > 0) //如果买平委托部分成交

{

BPM = BPM - F_OrderFilledLot(BPID); //买平委托手数

}

If(SRP > 0 && BPM > 0 && BPM <= SRP) //如果买平委托手数不超过空头可用持仓

{

BPP = ASKP; //买平委托价格

Commentary(\"【空头止损:买平委托追价!】\");

BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托

}

}

Else If(BPDEL == 2) //如果是空头止损撤单

{

Commentary(\"【空头止损:买平委托已撤!】\");

BPFLG = 0; //买平标志归0

BPDFLG = 2; //开启空头止损买平处理

}

Else If(BPDEL == 3) //如果是空头清仓撤单

{

Commentary(\"【空头清仓:买平委托已撤!】\");

BPFLG = 0; //买平标志归0

BPDFLG = 3; //开启空头清仓买平处理

}

BPDEL = 0; //买平撤单标志归0

}

Else If(F_OrderStatus(BPID) == Enum_Declared || F_OrderStatus(BPID) == Enum_FillPart) //如果买平委托挂单

{

If(BPDEL == 0) //如果未撤单

{

If(TimeDiff(SKCT,NOW) >= T) //如果满足空头清仓条件

{

Commentary(\"【空头清仓:买平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单

BPDEL = 3; //空头清仓撤掉买平委托挂单

}

Else //如果不满足空头清仓条件

{

If(BPFLG == 1) //如果是空头止盈买平委托

{

If(NEWP >= SKAP + ZSM * MINP) //如果满足空头止损条件

{

Commentary(\"【空头止损:买平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单

BPDEL = 2; //空头止损撤掉买平委托挂单

}

}

Else If(BPFLG == 2) //如果是空头止损买平委托

{

Commentary(\"【空头止损:买平委托撤单!】\");

F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单

BPDEL = 1; //已发出撤掉买平委托挂单

}

}

}

}

}

}

//------------------------多空处理------------------------//

If(OPFLG == 1) //多空处理

{

If(KCFLG == 0) //如果未执行开仓处理

{

If(BKC == 1) //如果满足多头开仓条件

{

Commentary(\"【多头开仓:满足开仓条件!】\");

BKDFLG = 1; //开启买开处理

KCFLG = 1; //已执行多头处理

}

Else If(SKC == 1) //如果满足空头开仓条件

{

Commentary(\"【空头开仓:满足开仓条件!】\");

SKDFLG = 1; //开启卖开处理

KCFLG = 2; //已执行空头处理

}

}

}

//------------------------委托处理------------------------//

If(OPFLG == 1) //委托处理

{

If(BKDFLG == 1) //如果已开启买开处理

{

If(BKFLG == 0) //如果没有买开委托

{

BKM = N; //买开委托手数

BKP = BKCP; //买开委托价格

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 = Min(BKAP + ZYM * MINP,RLP); //卖平委托价格

Commentary(\"【多头止盈:卖平委托发出!】\");

}

Else If(SPDFLG == 2) //如果是多头止损卖平

{

SPP = BIDP; //卖平委托价格

Commentary(\"【多头止损:卖平委托发出!】\");

}

Else If(SPDFLG == 3) //如果是多头清仓卖平

{

SPP = BIDP; //卖平委托价格

Commentary(\"【多头清仓:卖平委托发出!】\");

}

SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托

SPFLG = SPDFLG; //已发出卖平委托

}

}

}

If(SKDFLG == 1) //如果已开启卖开处理

{

If(SKFLG == 0) //如果没有卖开委托

{

SKM = N; //卖开委托手数

SKP = SKCP; //卖开委托价格

Commentary(\"【空头开仓:卖开委托发出!】\");

SKID = A_SendOrder(Enum_Sell,Enum_Entry,SKM,SKP); //发出卖开委托

SKTKV = TKVL; //卖开累计成交量

SKTKN = 0; //卖开tick数量

SKFLG = 1; //已发出卖开委托

}

}

If(BPDFLG > 0) //如果已开启买平处理

{

If(BPFLG == 0) //如果没有买平委托

{

If(SRP > 0) //如果有空头可用持仓

{

BPM = SRP; //买平委托手数

If(BPDFLG == 1) //如果是空头止盈买平

{

BPP = Max(SKAP - ZYM * MINP,FLP); //买平委托价格

Commentary(\"【空头止盈:买平委托发出!】\");

}

Else If(BPDFLG == 2) //如果是空头止损买平

{

BPP = ASKP; //买平委托价格

Commentary(\"【空头止损:买平委托发出!】\");

}

Else If(BPDFLG == 3) //如果是空头清仓买平

{

BPP = ASKP; //买平委托价格

Commentary(\"【空头清仓:买平委托发出!】\");

}

BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托

BPFLG = BPDFLG; //已发出买平委托

}

}

}

}

End

wangkaiming

这是文华的语言?

目前转化服务只提供简语言级别的(文华6,同花顺,东方财富等)

2023-08-03 09:49
您未登录,请先 登录注册 后发表评论
顶部