- 精华
- 0
- 在线时间
- 28 小时
- UID
- 269875
- 积分
- 3
- 帖子
- 2
- 阅读权限
- 10
- 注册时间
- 2018-9-10
- 最后登录
- 2020-11-13
- 精华
- 0
- UID
- 269875
- 积分
- 3
- 帖子
- 2
- 主题
- 1
- 阅读权限
- 10
- 注册时间
- 2018-9-10
- 最后登录
- 2020-11-13
|
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(10); // 再进场通道突破的周期数
Numeric ReEntryLots(0); // 再进场头寸
Vars
Series<Numeric> FastMA; // 快速均线
Series<Numeric> SlowMA; // 慢速均线
Bool ConCrossOver; // 是否金叉(快速均线上穿慢速均线)
Bool ConCrossUnder; // 是否死叉(快速均线下穿慢速均线)
Numeric HH; // 最近N根BAR的高点
Numeric LL; // 最近N根BAR的低点
Series<Numeric> LEntryPrice; // 开多的突破价
Series<Numeric> SEntryPrice; // 开空的突破价
Series<Numeric> LCount; // 均线金叉后记录BAR序号
Series<Numeric> SCount; // 均线死叉后记录BAR序号
Series<Numeric> TrailStopPrice; // 跟踪止损的止损价
Series<Numeric> ReEntryPrice; // 再进场突破开仓的价格
Series<Numeric> ReEntryCount; // 跟踪止损后记录BAR序号
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算均线
FastMA = Average(Close, FastLen);
SlowMA = Average(Close, SlowLen);
PlotNumeric("FastMA",FastMA);
PlotNumeric("SlowMA",SlowMA);
// 判断均线是否金叉
ConCrossOver = CrossOver(FastMA,SlowMA);
// 金叉发生时记录最近Chlen根Bar的高点加上ExtraPercentage%作为开多突破价
HH = Highest(High,ChLen);
If(ConCrossOver And CurrentBar >= ChLen-1)
{
LEntryPrice = HH * (1 + ExtraPercentage * 0.0001);
// 记录BAR序号以控制只在金叉后Chlen根BAR内进场否则放弃本次交易
LCount = CurrentBar;
}
// 开仓
If(MarketPosition == 0 And CurrentBar > LCount And CurrentBar <= LCount + Chlen And High >= LEntryPrice And Vol > 0)
{
Buy(InitialLots, Max(Open,LEntryPrice));
Commentary("初次多");
// 修改LCount值以保证每次金叉后只初始进场一次
LCount = -999;
}
// 判断趋势是否反转
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内突破有效
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 = Highest(High,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 BarsSinceExit > 0 And CurrentBar <= ReEntryCount + ReBars And Vol > 0)
{
If(High >= ReEntryPrice)
{
Buy(ReEntryLots, Max(Open,ReEntryPrice));
Commentary("再次多");
}
}
}
//------------------------------------------------------------------------
// 编译版本 GS2014.10.25
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ |
|