投资者咨询:文华9帮我添加BOLL,同时不显示120均线和240均线。只显示BOLL,谢谢老师! (文华财经)
来源:文华财经 日期:2020-10-20 22:35
以下公式:帮我添加BOLL,同时不显示120均线和240均线。只显示BOLL,谢谢老师!
Numeric FastLength(120); //快线周期
Numeric SlowLength(240); //慢线周期
Vars
NumericSeries AvgValue1; //快线周期均值
NumericSeries AvgValue2; //慢线周期均值
Numeric N; //下单手数
Numeric SH; //平仓参数
Numeric RLP,FLP; //涨跌停价
Numeric BIDP,ASKP; //买卖一价
Numeric BRP,SRP; //多空头可用持仓
Numeric OPFLG; //模型处理标志
Numeric BKDFLG; //买开处理标志
Numeric SKDFLG; //卖开处理标志
Numeric BPKDFLG; //买平开处理标志
Numeric SPKDFLG; //卖平开处理标志
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 BKM,SKM; //开仓委托手数
Global_Numeric BPM,SPM; //平仓委托手数
Global_Numeric BKP,SKP; //开仓委托价格
Global_Numeric BPP,SPP; //平仓委托价格
Begin
//------------------------信号发出------------------------//
If(1) //信号发出
{
AvgValue1 = AverageFC(Close,FastLength); //快线周期均值
AvgValue2 = AverageFC(Close,SlowLength); //慢线周期均值
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
//当前无多仓且快线周期的均线高于慢线周期的均线,开多单
If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
{
BPK(1,Open);
}
//当前无空仓且快线周期的均线低于慢线周期的均线,开空单
If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1])
{
SPK(1,Open);
}
}
//------------------------处理开启------------------------//
If(A_IsExchangeOpen() == 1) //如果是开盘状态
{
If(BarStatus() == 2) //如果不带入历史值
{
If(RunStart() == 1) //如果已初始化成功
{
OPFLG = 1; //开启模型处理
}
}
}
//------------------------变量赋值------------------------//
If(OPFLG == 1) //变量赋值
{
N = 2; //下单手数
BIDP = Price("Bid1"); //买一价
ASKP = Price("Ask1"); //卖一价
RLP = Price("RiseLimit"); //涨停价
FLP = Price("FallLimit"); //跌停价
BRP = F_BuyRemainPosition(); //多头可用持仓
SRP = F_SellRemainPosition(); //空头可用持仓
BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓
SRP = Min(SRP,A_SellRemainPosition()); //空头可用持仓
If(A_IsSHCode() == 1) //如果是上期所合约
{
SH = Enum_ExitToday; //平仓参数
}
Else //如果非上期所合约
{
SH = Enum_Exit; //平仓参数
}
}
//------------------------信号处理------------------------//
If(OPFLG == 1) //信号处理
{
If(F_FreshSig() == 1) //如果当前信号是未处理过的信号
{
If(F_SigValid() == 1) //如果当前信号未消失
{
If(F_Sig() == Sig_BPK) //如果信号类型为BPK
{
Commentary("【BPK信号!】");
BPKDFLG = 1; //开启买平开处理
}
Else If(F_Sig() == Sig_SPK) //如果信号类型为SPK
{
Commentary("【SPK信号!】");
SPKDFLG = 1; //开启卖平开处理
}
}
}
}
//------------------------成交判断------------------------//
If(OPFLG == 1) //成交判断
{
If(BPFLG == 1) //如果有买平委托
{
If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交
{
Commentary("【BPK信号:买平委托成交!】");
BKDFLG = 1; //开启买开处理
BPFLG = 0; //买平标志归0
}
}
If(BKFLG == 1) //如果有买开委托
{
If(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交
{
Commentary("【BPK信号:买开委托成交!】");
If(BKDEL > 0) //如果是SPK信号撤单
{
SPKDFLG = 1; //开启卖平开处理
}
BKFLG = 0; //买开标志归0
BKDEL = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID) == Enum_Canceled) //如果买开委托已撤
{
Commentary("【SPK信号:买开委托已撤!】");
SPKDFLG = 1; //开启卖平开处理
BKFLG = 0; //买开标志归0
BKDEL = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
{
If(BKDEL == 2) //如果是SPK信号撤单
{
Commentary("【SPK信号:买开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
BKDEL = 3; //SPK信号撤掉买开委托挂单
}
}
}
If(SPFLG == 1) //如果有卖平委托
{
If(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交
{
Commentary("【SPK信号:卖平委托成交!】");
SKDFLG = 1; //开启卖开处理
SPFLG = 0; //卖平标志归0
}
}
If(SKFLG == 1) //如果有卖开委托
{
If(F_OrderStatus(SKID) == Enum_Filled) //如果卖开委托成交
{
Commentary("【SPK信号:卖开委托成交!】");
If(SKDEL > 0) //如果是BPK信号撤单
{
BPKDFLG = 1; //开启买平开处理
}
SKFLG = 0; //卖开标志归0
SKDEL = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID) == Enum_Canceled) //如果卖开委托已撤
{
Commentary("【BPK信号:卖开委托已撤!】");
BPKDFLG = 1; //开启买平开处理
SKFLG = 0; //卖开标志归0
SKDEL = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
{
If(SKDEL == 2) //如果是BPK信号撤单
{
Commentary("【BPK信号:卖开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
SKDEL = 3; //BPK信号撤掉卖开委托挂单
}
}
}
}
//------------------------委托处理------------------------//
If(OPFLG == 1) //委托处理
{
If(BPKDFLG == 1) //如果已开启买平开处理
{
If(SKFLG == 1) //如果有卖开委托
{
If(SKDEL == 0) //如果未撤单
{
If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
{
Commentary("【BPK信号:卖开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
SKDEL = 1; //BPK信号撤掉卖开委托挂单
}
Else //如果卖开委托未挂单
{
SKDEL = 2; //BPK信号撤掉卖开委托挂单
}
}
}
Else If(SKFLG == 0) //如果没有卖开委托
{
If(BPFLG == 0) //如果没有买平委托
{
If(SRP > 0) //如果有空头可用持仓
{
BPM = SRP; //买平委托手数
BPP = RLP; //买平委托价格
Commentary("【BPK信号:买平委托发出!】");
BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托
BPFLG = 1; //已发出买平委托
}
Else If(SRP == 0) //如果没有空头可用持仓
{
BKDFLG = 1; //开启买开处理
}
}
}
}
If(BKDFLG == 1) //如果已开启买开处理
{
If(BKFLG == 0) //如果没有买开委托
{
BKM = N; //买开委托手数
BKP = ASKP; //买开委托价格
Commentary("【BPK信号:买开委托发出!】");
BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托
BKFLG = 1; //已发出买开委托
}
}
If(SPKDFLG == 1) //如果已开启卖平开处理
{
If(BKFLG == 1) //如果有买开委托
{
If(BKDEL == 0) //如果未撤单
{
If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
{
Commentary("【SPK信号:买开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
BKDEL = 1; //SPK信号撤掉买开委托挂单
}
Else //如果买开委托未挂单
{
BKDEL = 2; //SPK信号撤掉买开委托挂单
}
}
}
Else If(BKFLG == 0) //如果没有买开委托
{
If(SPFLG == 0) //如果没有卖平委托
{
If(BRP > 0) //如果有多头可用持仓
{
SPM = BRP; //卖平委托手数
SPP = FLP; //卖平委托价格
Commentary("【SPK信号:卖平委托发出!】");
SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
SPFLG = 1; //已发出卖平委托
}
Else If(BRP == 0) //如果没有多头可用持仓
{
SKDFLG = 1; //开启卖开处理
}
}
}
}
If(SKDFLG == 1) //如果已开启卖开处理
{
If(SKFLG == 0) //如果没有卖开委托
{
SKM = N; //卖开委托手数
SKP = BIDP; //卖开委托价格
Commentary("【SPK信号:卖开委托发出!】");
SKID = A_SendOrder(Enum_Sell,Enum_Entry,SKM,SKP); //发出卖开委托
SKFLG = 1; //已发出卖开委托
}
}
}
DrawColorKLine(close>ma(close,120),red,1);
DrawColorKLine(close<ma(close,120),RGB(0,128,64),1);
DrawColorKLine(close==ma(close,120),RGB(192,192,192),1);
End
技术人员回复
日期:2020-10-20 22:38
参考
Params
Numeric Length(26);
Numeric Offset(26);
Numeric P(2);
Numeric FastLength(120); //快线周期
Numeric SlowLength(240); //慢线周期
Vars
Numeric UpLine; //上轨
Numeric DownLine; //下轨
NumericSeries MidLine; //中间线
NumericSeries TMP2;
NumericSeries AvgValue1; //快线周期均值
NumericSeries AvgValue2; //慢线周期均值
Numeric N; //下单手数
Numeric SH; //平仓参数
Numeric RLP,FLP; //涨跌停价
Numeric BIDP,ASKP; //买卖一价
Numeric BRP,SRP; //多空头可用持仓
Numeric OPFLG; //模型处理标志
Numeric BKDFLG; //买开处理标志
Numeric SKDFLG; //卖开处理标志
Numeric BPKDFLG; //买平开处理标志
Numeric SPKDFLG; //卖平开处理标志
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 BKM,SKM; //开仓委托手数
Global_Numeric BPM,SPM; //平仓委托手数
Global_Numeric BKP,SKP; //开仓委托价格
Global_Numeric BPP,SPP; //平仓委托价格
Begin
//------------------------信号发出------------------------//
If(1) //信号发出
{
AvgValue1 = AverageFC(Close,FastLength); //快线周期均值
AvgValue2 = AverageFC(Close,SlowLength); //慢线周期均值
MidLine = Ma(Close, Length);//求Length个周期的收盘价均线,称为布林通道中轨
TMP2 = Std(Close, Offset); //求Offset个周期内的收盘价的标准差
UpLine = MidLine + P * TMP2;//布林通道上轨
DownLine = MidLine - P * TMP2; //布林通道下轨
PlotNumeric("UpLine", UpLine);
PlotNumeric("DownLine", DownLine);
PlotNumeric("MidLine", MidLine);
//当前无多仓且快线周期的均线高于慢线周期的均线,开多单
If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
{
BPK(1,Open);
}
//当前无空仓且快线周期的均线低于慢线周期的均线,开空单
If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1])
{
SPK(1,Open);
}
}
//------------------------处理开启------------------------//
If(A_IsExchangeOpen() == 1) //如果是开盘状态
{
If(BarStatus() == 2) //如果不带入历史值
{
If(RunStart() == 1) //如果已初始化成功
{
OPFLG = 1; //开启模型处理
}
}
}
//------------------------变量赋值------------------------//
If(OPFLG == 1) //变量赋值
{
N = 2; //下单手数
BIDP = Price("Bid1"); //买一价
ASKP = Price("Ask1"); //卖一价
RLP = Price("RiseLimit"); //涨停价
FLP = Price("FallLimit"); //跌停价
BRP = F_BuyRemainPosition(); //多头可用持仓
SRP = F_SellRemainPosition(); //空头可用持仓
BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓
SRP = Min(SRP,A_SellRemainPosition()); //空头可用持仓
If(A_IsSHCode() == 1) //如果是上期所合约
{
SH = Enum_ExitToday; //平仓参数
}
Else //如果非上期所合约
{
SH = Enum_Exit; //平仓参数
}
}
//------------------------信号处理------------------------//
If(OPFLG == 1) //信号处理
{
If(F_FreshSig() == 1) //如果当前信号是未处理过的信号
{
If(F_SigValid() == 1) //如果当前信号未消失
{
If(F_Sig() == Sig_BPK) //如果信号类型为BPK
{
Commentary("【BPK信号!】");
BPKDFLG = 1; //开启买平开处理
}
Else If(F_Sig() == Sig_SPK) //如果信号类型为SPK
{
Commentary("【SPK信号!】");
SPKDFLG = 1; //开启卖平开处理
}
}
}
}
//------------------------成交判断------------------------//
If(OPFLG == 1) //成交判断
{
If(BPFLG == 1) //如果有买平委托
{
If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交
{
Commentary("【BPK信号:买平委托成交!】");
BKDFLG = 1; //开启买开处理
BPFLG = 0; //买平标志归0
}
}
If(BKFLG == 1) //如果有买开委托
{
If(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交
{
Commentary("【BPK信号:买开委托成交!】");
If(BKDEL > 0) //如果是SPK信号撤单
{
SPKDFLG = 1; //开启卖平开处理
}
BKFLG = 0; //买开标志归0
BKDEL = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID) == Enum_Canceled) //如果买开委托已撤
{
Commentary("【SPK信号:买开委托已撤!】");
SPKDFLG = 1; //开启卖平开处理
BKFLG = 0; //买开标志归0
BKDEL = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
{
If(BKDEL == 2) //如果是SPK信号撤单
{
Commentary("【SPK信号:买开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
BKDEL = 3; //SPK信号撤掉买开委托挂单
}
}
}
If(SPFLG == 1) //如果有卖平委托
{
If(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交
{
Commentary("【SPK信号:卖平委托成交!】");
SKDFLG = 1; //开启卖开处理
SPFLG = 0; //卖平标志归0
}
}
If(SKFLG == 1) //如果有卖开委托
{
If(F_OrderStatus(SKID) == Enum_Filled) //如果卖开委托成交
{
Commentary("【SPK信号:卖开委托成交!】");
If(SKDEL > 0) //如果是BPK信号撤单
{
BPKDFLG = 1; //开启买平开处理
}
SKFLG = 0; //卖开标志归0
SKDEL = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID) == Enum_Canceled) //如果卖开委托已撤
{
Commentary("【BPK信号:卖开委托已撤!】");
BPKDFLG = 1; //开启买平开处理
SKFLG = 0; //卖开标志归0
SKDEL = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
{
If(SKDEL == 2) //如果是BPK信号撤单
{
Commentary("【BPK信号:卖开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
SKDEL = 3; //BPK信号撤掉卖开委托挂单
}
}
}
}
//------------------------委托处理------------------------//
If(OPFLG == 1) //委托处理
{
If(BPKDFLG == 1) //如果已开启买平开处理
{
If(SKFLG == 1) //如果有卖开委托
{
If(SKDEL == 0) //如果未撤单
{
If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
{
Commentary("【BPK信号:卖开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
SKDEL = 1; //BPK信号撤掉卖开委托挂单
}
Else //如果卖开委托未挂单
{
SKDEL = 2; //BPK信号撤掉卖开委托挂单
}
}
}
Else If(SKFLG == 0) //如果没有卖开委托
{
If(BPFLG == 0) //如果没有买平委托
{
If(SRP > 0) //如果有空头可用持仓
{
BPM = SRP; //买平委托手数
BPP = RLP; //买平委托价格
Commentary("【BPK信号:买平委托发出!】");
BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托
BPFLG = 1; //已发出买平委托
}
Else If(SRP == 0) //如果没有空头可用持仓
{
BKDFLG = 1; //开启买开处理
}
}
}
}
If(BKDFLG == 1) //如果已开启买开处理
{
If(BKFLG == 0) //如果没有买开委托
{
BKM = N; //买开委托手数
BKP = ASKP; //买开委托价格
Commentary("【BPK信号:买开委托发出!】");
BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托
BKFLG = 1; //已发出买开委托
}
}
If(SPKDFLG == 1) //如果已开启卖平开处理
{
If(BKFLG == 1) //如果有买开委托
{
If(BKDEL == 0) //如果未撤单
{
If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
{
Commentary("【SPK信号:买开委托撤单!】");
F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
BKDEL = 1; //SPK信号撤掉买开委托挂单
}
Else //如果买开委托未挂单
{
BKDEL = 2; //SPK信号撤掉买开委托挂单
}
}
}
Else If(BKFLG == 0) //如果没有买开委托
{
If(SPFLG == 0) //如果没有卖平委托
{
If(BRP > 0) //如果有多头可用持仓
{
SPM = BRP; //卖平委托手数
SPP = FLP; //卖平委托价格
Commentary("【SPK信号:卖平委托发出!】");
SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
SPFLG = 1; //已发出卖平委托
}
Else If(BRP == 0) //如果没有多头可用持仓
{
SKDFLG = 1; //开启卖开处理
}
}
}
}
If(SKDFLG == 1) //如果已开启卖开处理
{
If(SKFLG == 0) //如果没有卖开委托
{
SKM = N; //卖开委托手数
SKP = BIDP; //卖开委托价格
Commentary("【SPK信号:卖开委托发出!】");
SKID = A_SendOrder(Enum_Sell,Enum_Entry,SKM,SKP); //发出卖开委托
SKFLG = 1; //已发出卖开委托
}
}
}
DrawColorKLine(close>ma(close,120),red,1);
DrawColorKLine(close<ma(close,120),RGB(0,128,64),1);
DrawColorKLine(close==ma(close,120),RGB(192,192,192),1);