- 精华
- 0
- 在线时间
- 16 小时
- UID
- 227739
- 积分
- 19
- 帖子
- 17
- 阅读权限
- 10
- 注册时间
- 2016-2-1
- 最后登录
- 2016-5-12
- 精华
- 0
- UID
- 227739
- 积分
- 19
- 帖子
- 17
- 主题
- 2
- 阅读权限
- 10
- 注册时间
- 2016-2-1
- 最后登录
- 2016-5-12
|
小米 发表于 2016-4-13 09:58
条件中的con1,con2的计算是用到了macdvalue和avgmacd得到的。。
变量avgmacd是计算用到了变量macdvalue,
...
恩,我是在看一本你们公司出的书“策略开发与应用”,其中书上有个策略是叫基于MACD判断的交易系统(first pull back system),代码如下,他的con1 与 con2也是用到了MACDLine,SignalLine,且都有用到close,就不懂这个到底有什么不同,这个不会出现讯号消失
Params
Numeric FastMA(4); //快速均线周期数
Numeric SlowMA(10); //慢速均线周期数
Numeric AvgMA(16); //通道突破的周期数
Numeric ATRLen(10); //ATR周期
Numeric EATRPcnt(1); //多少根bar的最低价作为跟踪止损价
Numeric XATRPcnt(1); //初始进场头寸;
Vars
NumericSeries MACDLine(0); //快速均线
NumericSeries SignalLine(0); //慢速均线
NumericSeries ZeroLine(0);
NumericSeries AATR(0);
BoolSeries UpTrend(False);
BoolSeries DnTrend(False);
BoolSeries BuySetup(False);
NumericSeries CTrendLow(0);
BoolSeries SignalFlag(False);
Bool con1;
Bool con2;
Numeric MinPoint;
NumericSeries Upperband;
NumericSeries Exitband;
Begin
//集合竞价和小节休息过滤
if(!CallAuctionFilter()) Return;
MinPoint = MinMove*PriceScale;
MACDLine = XAverage(Close,FastMA)-XAverage(Close,SlowMA);//计算MACD快线
SignalLine = XAverage(MACDLine,AvgMA);//计算MACD慢线
AATR = AvgTrueRange(ATRLen); //计算atr波动率
ZeroLine = 0;
con1 = CrossOver(MACDLine,SignalLine);
PlotNumeric("SignalLine",SignalLine);
PlotNumeric("ZeroLine",ZeroLine);
PlotNumeric("MACDLine",MACDLine);
if(con1){
UpTrend = True;
SignalFlag = False;
PlotString("con1","con1");
}
con2 = CrossUnder(MACDLine,SignalLine);
if(con2){
UpTrend = False;
BuySetup = False;
SignalFlag = False;
DnTrend = True;
PlotString("con2","con2");
}
if(UpTrend == True){
if(SignalFlag == False){
BuySetup = True;
CTrendLow = Low;
}
if(MACDLine < SignalLine And Low < CTrendLow[1])
CTrendLow = Low;
}
//入场价格及出厂价格
if(BuySetup[1]==True And BuySetup[2] == False){
Upperband = Close[1] + (EATRPcnt*AATR[1]);
Exitband = Close[1] -(XATRPcnt*AATR[1]);
}
//系统入场
if(BuySetup[1]==True AND MarketPosition == 0){
if(High >= Upperband and Vol>0){
Buy(0,Max(Open,Upperband));
BuySetup = False;
SignalFlag = True;
}
}
//系统出场
if( MarketPosition == 1 And BarsSinceEntry >0 And Vol>0){
if(DnTrend[1] == True){
Sell(0,Open);
}else if(Low <= CTrendLow[1]-MinPoint And CTrendLow[1]-MinPoint>=Exitband){ //持有多单后低于入场最低价格 出场
Sell(0,Min(Open,CTrendLow[1]-MinPoint));
}Else if(Low <= Exitband){
Sell(0,Min(Open,Exitband));
}
}
End
|
|