投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
Params
Numeric AvgLen(27); //高低点均线计算周期
Numeric AbsDisp(15); //高低点均线前移周期
Numeric ExitBar(4); //止损周期参数,该周期以前中轨止损,以后外轨止损
Vars
NumericSeries UpperAvg; //通道上轨
NumericSeries LowerAvg; //通道下轨
NumericSeries ExitAvg; //通道中轨
NumericSeries RangeLeadB;
NumericSeries RangeLeadS;
NumericSeries MedianPrice; //K线中点
NumericSeries Range1; //K线振幅
Numeric N; //下单手数
Numeric T; //时间间隔
Numeric SH; //平仓参数
Numeric NOW; //当前时间
Numeric BIDP,ASKP; //买卖一价
Numeric BRP,SRP; //多空头可用持仓
Numeric OPFLG; //模型处理标志
Numeric BKDFLG; //买开处理标志
Numeric SKDFLG; //卖开处理标志
Numeric BPDFLG; //买平处理标志
Numeric SPDFLG; //卖平处理标志
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; //平仓委托价格
Global_Numeric BKT,SKT; //开仓委托时间
Global_Numeric BPT,SPT; //平仓委托时间
Begin
//------------------------信号发出------------------------//
If(1) //信号发出
{
Range1 = High - Low; //K线振幅
UpperAvg = Ma(High[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前高点的均值
LowerAvg = Ma(Low[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前低点的均值
MedianPrice = (High + Low) * 0.5; //计算K线中点
ExitAvg = Ma(MedianPrice[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前K线中点的均值
RangeLeadB = MedianPrice > High[1] && Range1 > Range1[1]; //当根K线满足中点大于前一根K线高点且振幅大于上一根振幅
RangeLeadS = MedianPrice < Low[1] && Range1 > Range1[1]; //当根K线满足中点小于前一根K线低点且振幅大于上一根振幅
PlotNumeric("Lineu",UpperAvg); //输出通道上轨
PlotNumeric("LineM",ExitAvg); //输出通道中轨
PlotNumeric("Lingd",LowerAvg); //输出通道下轨
//系统入场
If(MarketPosition == 0) //无持仓
{
If(RangeLeadB[1] == 1 && Close[1] > UpperAvg[1]) //上根K线满足RangeLeadB条件,且上一根收盘价大于上一根通道上轨
{
BK(DefaultVol,Open); //以开盘价开多仓
}
If(RangeLeadS[1] == 1 && Close[1] < LowerAvg[1]) //上根K线满足RangeLeadS条件,且上一根收盘价小于上一根通道下轨
{
SK(DefaultVol,Open); //以开盘价开空仓
}
}
//系统出场
If(MarketPosition == 1 && BarsSinceEntry > 0) //持有多仓且开仓后一根K线以后
{
If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
{
If(Low <= ExitAvg) //最低价小于等于中轨
{
SP(DefaultVol,Min(Open,ExitAvg)); //以开盘价和中轨的较小价平多仓
}
}
Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
{
If(Low <= UpperAvg - MinPrice) //最低价小于等于上轨减最小变动价位
{
SP(DefaultVol,Min(Open,UpperAvg - MinPrice)); //以开盘价与上轨减最小变动价位的较小价平多仓
}
}
}
If(MarketPosition == -1 && BarsSinceEntry > 0) //持有空仓且开仓后一根K线以后
{
If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
{
If(High >= ExitAvg) //最高价大于等于中轨
{
BP(DefaultVol,Max(Open,ExitAvg)); //以开盘价和中轨的较大价平空仓
}
}
Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
{
If(High >= LowerAvg + MinPrice) //最高价大于等于下轨加最小变动价位
{
BP(DefaultVol,Max(Open,LowerAvg + MinPrice)); //以开盘价与下轨加最小变动价位的较大价平空仓
}
}
}
}
//------------------------处理开启------------------------//
If(A_IsExchangeOpen() == 1) //如果是开盘状态
{
If(BarStatus() == 2) //如果不带入历史值
{
If(RunStart() == 1) //如果已初始化成功
{
OPFLG = 1; //开启模型处理
}
}
}
//------------------------变量赋值------------------------//
If(OPFLG == 1) //变量赋值
{
N = 1; //下单手数
T = 3; //时间间隔
NOW = CurrentTime(); //当前时间
BIDP = Price("Bid1"); //买一价
ASKP = Price("Ask1"); //卖一价
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_BK) //如果信号类型为BK
{
Commentary("【BK信号!】");
BKDFLG = 1; //开启买开处理
}
Else If(F_Sig() == Sig_SP) //如果信号类型为SP
{
Commentary("【SP信号!】");
SPDFLG = 1; //开启卖平处理
}
Else If(F_Sig() == Sig_SK) //如果信号类型为SK
{
Commentary("【SK信号!】");
SKDFLG = 1; //开启卖开处理
}
Else If(F_Sig() == Sig_BP) //如果信号类型为BP
{
Commentary("【BP信号!】");
BPDFLG = 1; //开启买平处理
Numeric AvgLen(27); //高低点均线计算周期
Numeric AbsDisp(15); //高低点均线前移周期
Numeric ExitBar(4); //止损周期参数,该周期以前中轨止损,以后外轨止损
Vars
NumericSeries UpperAvg; //通道上轨
NumericSeries LowerAvg; //通道下轨
NumericSeries ExitAvg; //通道中轨
NumericSeries RangeLeadB;
NumericSeries RangeLeadS;
NumericSeries MedianPrice; //K线中点
NumericSeries Range1; //K线振幅
Numeric N; //下单手数
Numeric T; //时间间隔
Numeric SH; //平仓参数
Numeric NOW; //当前时间
Numeric BIDP,ASKP; //买卖一价
Numeric BRP,SRP; //多空头可用持仓
Numeric OPFLG; //模型处理标志
Numeric BKDFLG; //买开处理标志
Numeric SKDFLG; //卖开处理标志
Numeric BPDFLG; //买平处理标志
Numeric SPDFLG; //卖平处理标志
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; //平仓委托价格
Global_Numeric BKT,SKT; //开仓委托时间
Global_Numeric BPT,SPT; //平仓委托时间
Begin
//------------------------信号发出------------------------//
If(1) //信号发出
{
Range1 = High - Low; //K线振幅
UpperAvg = Ma(High[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前高点的均值
LowerAvg = Ma(Low[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前低点的均值
MedianPrice = (High + Low) * 0.5; //计算K线中点
ExitAvg = Ma(MedianPrice[AbsDisp],AvgLen); //计算AvgLen周期内,AbsDisp周期前K线中点的均值
RangeLeadB = MedianPrice > High[1] && Range1 > Range1[1]; //当根K线满足中点大于前一根K线高点且振幅大于上一根振幅
RangeLeadS = MedianPrice < Low[1] && Range1 > Range1[1]; //当根K线满足中点小于前一根K线低点且振幅大于上一根振幅
PlotNumeric("Lineu",UpperAvg); //输出通道上轨
PlotNumeric("LineM",ExitAvg); //输出通道中轨
PlotNumeric("Lingd",LowerAvg); //输出通道下轨
//系统入场
If(MarketPosition == 0) //无持仓
{
If(RangeLeadB[1] == 1 && Close[1] > UpperAvg[1]) //上根K线满足RangeLeadB条件,且上一根收盘价大于上一根通道上轨
{
BK(DefaultVol,Open); //以开盘价开多仓
}
If(RangeLeadS[1] == 1 && Close[1] < LowerAvg[1]) //上根K线满足RangeLeadS条件,且上一根收盘价小于上一根通道下轨
{
SK(DefaultVol,Open); //以开盘价开空仓
}
}
//系统出场
If(MarketPosition == 1 && BarsSinceEntry > 0) //持有多仓且开仓后一根K线以后
{
If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
{
If(Low <= ExitAvg) //最低价小于等于中轨
{
SP(DefaultVol,Min(Open,ExitAvg)); //以开盘价和中轨的较小价平多仓
}
}
Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
{
If(Low <= UpperAvg - MinPrice) //最低价小于等于上轨减最小变动价位
{
SP(DefaultVol,Min(Open,UpperAvg - MinPrice)); //以开盘价与上轨减最小变动价位的较小价平多仓
}
}
}
If(MarketPosition == -1 && BarsSinceEntry > 0) //持有空仓且开仓后一根K线以后
{
If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
{
If(High >= ExitAvg) //最高价大于等于中轨
{
BP(DefaultVol,Max(Open,ExitAvg)); //以开盘价和中轨的较大价平空仓
}
}
Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
{
If(High >= LowerAvg + MinPrice) //最高价大于等于下轨加最小变动价位
{
BP(DefaultVol,Max(Open,LowerAvg + MinPrice)); //以开盘价与下轨加最小变动价位的较大价平空仓
}
}
}
}
//------------------------处理开启------------------------//
If(A_IsExchangeOpen() == 1) //如果是开盘状态
{
If(BarStatus() == 2) //如果不带入历史值
{
If(RunStart() == 1) //如果已初始化成功
{
OPFLG = 1; //开启模型处理
}
}
}
//------------------------变量赋值------------------------//
If(OPFLG == 1) //变量赋值
{
N = 1; //下单手数
T = 3; //时间间隔
NOW = CurrentTime(); //当前时间
BIDP = Price("Bid1"); //买一价
ASKP = Price("Ask1"); //卖一价
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_BK) //如果信号类型为BK
{
Commentary("【BK信号!】");
BKDFLG = 1; //开启买开处理
}
Else If(F_Sig() == Sig_SP) //如果信号类型为SP
{
Commentary("【SP信号!】");
SPDFLG = 1; //开启卖平处理
}
Else If(F_Sig() == Sig_SK) //如果信号类型为SK
{
Commentary("【SK信号!】");
SKDFLG = 1; //开启卖开处理
}
Else If(F_Sig() == Sig_BP) //如果信号类型为BP
{
Commentary("【BP信号!】");
BPDFLG = 1; //开启买平处理
技术人员回复
日期:2020-10-14 10:44
请稍等
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
谢谢
技术人员回复
日期:2020-10-14 11:06
参考;
AVGLEN:=27;
//高低点均线计算周期
ABSDISP:=15;
//高低点均线前移周期
EXITBAR:=4;
//止损周期参数,该周期以前中轨止损,以后外轨止损
RANGE1 := HIGH - LOW; //K线振幅
UPPERAVG : MA(REF(HIGH,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前高点的均值
LOWERAVG :MA(REF(LOW,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前低点的均值
MEDIANPRICE := (HIGH + LOW) * 0.5; //计算K线中点
EXITAVG : MA(REF(MEDIANPRICE,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前K线中点的均值
RANGELEADB := MEDIANPRICE > REF(HIGH,1) && RANGE1 >REF( RANGE1,1); //当根K线满足中点大于前一根K线高点且振幅大于上一根振幅
RANGELEADS := MEDIANPRICE < REF(LOW,1) && RANGE1 > REF(RANGE1,1); //当根K线满足中点小于前一根K线低点且振幅大于上一根振幅
RANGELEADB=1&&C>UPPERAVG,BK;
RANGELEADS=1&&C<LOWERAVG,SK;
BARSBK>0&&BARSSK<=EXITBAR&&L<EXITAVG,SP;
BARSBK>EXITBAR&&L< UPPERAVG - MINPRICE,SP;
CHECKSIG(SP,'A',0,'C',0,0);
BARSSK>0&&BARSSK<=EXITBAR&&H>=EXITAVG,BP;
BARSSK>EXITBAR&&H>LOWERAVG + MINPRICE,BP;
CHECKSIG(BP,'A',0,'C',0,0);
AUTOFILTER;
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
老师,帮我加一个动态止盈,开仓后盈利达到100个变动价位,最低点回撤50个变动价位止盈,固定止损!
技术人员回复
日期:2020-10-16 15:46
参考:
AVGLEN:=27;
//高低点均线计算周期
ABSDISP:=15;
//高低点均线前移周期
EXITBAR:=4;
//止损周期参数,该周期以前中轨止损,以后外轨止损
RANGE1 := HIGH - LOW; //K线振幅
UPPERAVG : MA(REF(HIGH,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前高点的均值
LOWERAVG :MA(REF(LOW,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前低点的均值
MEDIANPRICE := (HIGH + LOW) * 0.5; //计算K线中点
EXITAVG : MA(REF(MEDIANPRICE,15),AVGLEN); //计算AVGLEN周期内,ABSDISP周期前K线中点的均值
RANGELEADB := MEDIANPRICE > REF(HIGH,1) && RANGE1 >REF( RANGE1,1); //当根K线满足中点大于前一根K线高点且振幅大于上一根振幅
RANGELEADS := MEDIANPRICE < REF(LOW,1) && RANGE1 > REF(RANGE1,1); //当根K线满足中点小于前一根K线低点且振幅大于上一根振幅
RANGELEADB=1&&C>UPPERAVG,BK;
RANGELEADS=1&&C<LOWERAVG,SK;
BARSBK>0&&BARSSK<=EXITBAR&&L<EXITAVG,SP;
BARSBK>EXITBAR&&L< UPPERAVG - MINPRICE,SP;
CHECKSIG(SP,'A',0,'C',0,0);
BARSSK>0&&BARSSK<=EXITBAR&&H>=EXITAVG,BP;
BARSSK>EXITBAR&&H>LOWERAVG + MINPRICE,BP;
CHECKSIG(BP,'A',0,'C',0,0);
BKHIGH>BKPRICE+100*MINPRICE&&C<BKHIGH-50*MINPRICE||C<BKPRICE-50*MINPRICE,SP;
SKLOW<SKPRICE-100*MINPRICE&&C>SKLOW+50*MINPRICE||C>SKPRICE+50*MINPRICE,BP;
AUTOFILTER;
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
破中规应该止损,突破上下轨就应该开仓,
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43
破中规应该止损,突破上下轨就应该开仓,
投资者咨询:老师请修改文化8可用 (文华财经)
来源:文华财经 日期:2020-10-14 10:43