- 精华
- 0
- 在线时间
- 19 小时
- UID
- 219749
- 积分
- 11
- 帖子
- 7
- 阅读权限
- 10
- 注册时间
- 2015-9-15
- 最后登录
- 2015-11-4
- 精华
- 0
- UID
- 219749
- 积分
- 11
- 帖子
- 7
- 主题
- 4
- 阅读权限
- 10
- 注册时间
- 2015-9-15
- 最后登录
- 2015-11-4
|
本帖最后由 tzwjjxj 于 2015-9-21 23:53 编辑
一段书上的代码,但是手工敲进去后发生各种问题,本人不是搞程序的,请高手修正,谢谢!
//------------------------------------------------------------------------
// 简称: CL_MovingAverageCrossOver
// 名称: CL_MovingAverageCrossOver
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------
CL_MovingAverageCrossOver_L //基于均线交叉的通道突破系统多
Params
Numeric FastLen(9); //快速均线周期
Numeric SlowLen(18); //慢速均线周期
Numeric ChLen(12); //通道突破的周期数
Numeric ExtraPercentage(300); //通道突破的幅度(万分比) 如300=3%
Numeric TrailBar(8); //多少根Bar的最低价作为止损价
Numeric InitialLosts(0); //初始进场寸头
Numeric ReBars(15); //再次进场在出场后多少根Bar内
Numeric ReEntryChLen(10); //再进场通道突破的周期数
Numeric ReEntryLots(0); //再进场头寸
Var
NumericSeries FastMA; //快速均线
NumericSeries SlowMA; //慢速均线
Bool ConCrossOver; //是否金叉(快速均线上穿慢速均线)
Bool ConCrossUnder; //是否死叉(快速均线下穿慢速均线)
Numeric HH; //最近N根Bar的高点
Numeric LL; //最近N根Bar的低点
NumericSeries LEntryPrice; //开多的突破价
NumericSeries SEntryPrice; //开空的突破价
NumericSeries LCount; //均线金叉后记录Bar序号
NumericSeries SCount; //均线死叉后记录Bar序列
NumericSeries TrailStopPrice; //跟踪止损的止损价
NumericSeries ReEntryPrice; //再进场突破开仓的价格
NumericSeries ReEntryCount; //跟踪止损后记录Bar序号
Begin
//集合竞价和小节休息过滤
If (! CallAuctionFilter ()) Return;
//计算均线
FastMA=Average (Close, FastLen);
SlowMA=Average (Close, SlowLen);
PlotNumeric ("FastMA", FastMA);
PlotNumeric ("SlowMA", SlowMA);
//判断均线是否金叉
ConCrossOver=CrossOver (FastMA, SlowMA);
//金叉发生时记录最近Chlen 根Bar的高点加上ExtraPercentage%作为开多突破价
HH=Hightest (Hingt, Chlen);
If (ConCrossOver And CurrentBar>=ChLen-1)
{
LEntryPrice=HH* (1 + ExtraPercentage*0.0001);
//记录Bar序列号以控制只在金叉后Chlen根Bar内进场否则放弃本次交易
Lcont=CurrentBar;
}
//开仓
If (marketposition= =0 And CurrentBar > LCount And CurrentBar < = LCount + Chelen And Hight > =LentryPrice And Vol > 0)
{
Buy (initialLots, Max (open, LEntryPrice));
Commentary ("初次多");
//修改LCount 值以保证每次金叉后只初始进场一次
Lcount=-999;
}
//判断趋势是否反转
ConCrossUnder=ConCrossUnder (FastMA, SlowMA);
//死叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开空突破价
//因为空策略分开,做多策略只考虑平仓,空头开仓由做空策略处理
LL=Lowest (Low, Chlen);
If (ConCrossUnder And CurrentBar >=ChLen-1)
{
SEntryPrice=LL* (1-ExtraPercentage*0.0001);
//记录Bar序列号以控制只在死叉后Chlen 根Bar内突破有效
SCount =CurrentBar;
}
//反向突破
If (CurrentBar > SCount And CurrentBar <=SCount + Chlen And Low <=SEntryPrice And Vol >0)
{
//有持仓则平仓
If (Marketposition= =1)
{
Sell (0, Min (open, SEntryPrice));
Commentary("多单反向出场");
}
//反向后原趋势结束
LCount =-999;
ReEntryCount=-999;
}
//跟踪止损出场
//计算止损位
TrailStopPrice=Lowest (Low [1], TrailBar);
Commentary ("TrailStopPrice=" + Text (TrailStopPrice));
//计算最近ReEntryChLen根Bar的高点
HH=Hightest (Hight, ReEntryChLen);
//触发止损
If (MarketPosition= =1 And BarsSinceEntry > 0 And Vol> 0)
{
If (Low < =TrailStopPrice)
{
Sell (0, Min (open, TrailStopPrice));
Commentary ("多单跟踪止损出场");
//跟踪止损后记录Bar序号准备再进场
ReEntryCount=CurrentBar;
//以ReEntryChLen周期高点作为再进场突破价
ReEntryPrice=HH;
}
}
//出场后再ReBar根Bar内,价格突破再进场突破价进场
If (MarketPosition= =0 And BarSinceExit > 0 And CurrentBar < =Re-EntryCount + ReBars And Vol >0)
{
If (High > =ReEntryPrice)
{
Buy (ReEntryLots, Max (Open, ReEntryPrice));
Commentary ("再次多");
}
}
End
CL_MovingAverageCrossOver_S //基于均线交叉的通道突破系统空
Params
Numeric FastLen(9); //快速均线周期数
Numeric SlowLen(18); //快速均线周期数
Numeric Chlen(12); //通道突破的周期数
Numeric ExtraPercentage(300); //通道突破的幅度 (万分比), 如:300=3%
Numeric TrailBar(8); //多少根Bar的最低价作为跟踪止损价
Numeric initialLots(0); //初始进场寸头
Numeric ReBars(15); //再进场必须在出场后多少根Bar内
Numeric ReEntryChLen根Bar的高点(10); //再进场通道突破的周期数
Numeric ReEntryLots(0); //再进场寸头
Vars
NumericSeries FastMA; //快速均线
NumericSeries SlowMA; //慢速均线
Bool ConCrossOver; //是否金叉(快速均线上穿慢速均线)
Bool ConCrossUnder; //是否死叉 (快速均线下穿慢速均线)
Numeric HH; //最近N根Bar的高点
Numeric LL; //最近N根Bar的底点
NumericSeries LEntryPrice; //开多的突破价
NumericSeries SEntryPrice; //开空的突破价
NumericSeries LCount; //均线金叉后记录Bar序列
NumericSeries SCount; //均线死叉后记录Bar序列
NumericSeries TrailStopPrice; //跟踪止损的止损价
NumericSeries ReEntryPrice; //再进场突破开仓的价格
NumericSeries ReEntryCount; //跟踪止损后记录Bar序号
Begin
//集合竞价和小节休息过滤
If (! CallAuctionFilter ()) Return;
//计算均线
FastMA=Average (Close, FastLen);
SlowMA=Average (Close, SlowLen);
PlotNumeric ("FastMA",FastMA);
PlotNumeric ("SlowMA",SlowMA);
//判断均线是否死叉
ConCrossUnder=CrossUnder (FastMA, SlowMA);
//死叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开空突破价
LL=Lowest (Low, Chlen);
If (ConCrossUnder And CurrentBar>=ChLen-1)
{
SEntryPrice=LL* (1 - ExtraPercentage*0.0001);
//记录Bar序列号以控制只在死叉后Chlen根Bar内进场否则放弃本次交易
SCont=CurrentBar;
}
//开仓
If (marketposition= =0 And CurrentBar > SCount And CurrentBar < = SCount + Chelen And Low < =SentryPrice And Vol > 0)
{
SellShort (initialLots, Min (Open, SEntryPrice));
Commentary ("初次空");
//修改SCount 值以保证每次死叉后只初始进场一次
SCount=-999;
}
//判断趋势是否反转
ConCrossOver=ConCrossOver (FastMA, SlowMA);
//金叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开多突破价
//因为空策略分开,做空策略只考虑平仓,多头开仓由做多策略处理
HH=Highest (High, Chlen);
If (ConCrossOver And CurrentBar >=ChLen-1)
{
LEntryPrice=HH* (1+ExtraPercentage*0.01);
//记录Bar序列号以控制只在金叉后Chlen 根Bar内突破有效
LCount =CurrentBar;
}
//反向突破
If (CurrentBar > LCount And CurrentBar <=LCount + Chlen And Hight >=LEntryPrice And Vol >0)
{
//有持仓则平仓
If (Marketposition= =-1)
{
BuyToCover (0, Max (open, LEntryPrice));
Commentary("空单反向出场");
}
//反向后原趋势结束
SCount =-999;
ReEntryCount=-999;
}
//跟踪止损出场
//计算止损位
TrailStopPrice=Highest (High [1], TrailBar);
Commentary ("TrailStopPrice=" + Text (TrailStopPrice));
//计算最近ReEntryChLen根Bar的底点
LL=Lowest (Low, ReEntryChLen);
//触发止损
If (MarketPosition= =-1 And BarsSinceEntry > 0 And Vol> 0)
{
If (High < =TrailStopPrice)
{
BuyToCover (0, Max (open, TrailStopPrice));
Commentary ("空单跟踪止损出场");
//跟踪止损后记录Bar序号准备再进场
ReEntryCount=CurrentBar;
//以ReEntryChLen周期底点作为再进场突破价
ReEntryPrice=LL;
}
}
//出场后再ReBar根Bar内,价格突破再进场突破价进场
If (MarketPosition= =0 And BarSinceExit > 0 And CurrentBar < =Re-EntryCount + ReBars And Vol >0)
{
If (Low < =ReEntryPrice)
{
SellShort (ReEntryLots, Min (Open, ReEntryPrice));
Commentary ("再次空");
}
}
End
|
|