//------------------------------------------------------------------------
// 简称: EMA144_20_Strategy
// 名称: EMA144和EMA20交易策略
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric EMA144Length(144); // EMA144周期
Numeric EMA20Length(20); // EMA20周期
Vars
Numeric EMA144; // EMA144值
Numeric EMA20; // EMA20值
Numeric AboveCount(0); // 收盘价连续高于EMA144的K线数量
Bool FirstNegativeBar(false); // 标记第一根阴线
Numeric EMA144Prev; // 前一个EMA144值
Numeric EMA20Prev; // 前一个EMA20值
Numeric multiplier144; // EMA144的平滑系数
Numeric multiplier20; // EMA20的平滑系数
Numeric EMA144PrevPrev; // 前前一个EMA144值
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
// 计算EMA平滑系数
multiplier144 = 2 / (EMA144Length + 1);
multiplier20 = 2 / (EMA20Length + 1);
// 保存前前一个EMA144值
EMA144PrevPrev = EMA144Prev;
// 计算EMA144
if (CurrentBar == 0)
{
EMA144 = Close;
}
else
{
EMA144 = Close * multiplier144 + EMA144Prev * (1 - multiplier144);
}
EMA144Prev = EMA144;
// 计算EMA20
if (CurrentBar == 0)
{
EMA20 = Close;
}
else
{
EMA20 = Close * multiplier20 + EMA20Prev * (1 - multiplier20);
}
EMA20Prev = EMA20;
if (Close[1] <= EMA144PrevPrev && Close > EMA144)
{
// 收盘价突破EMA144,开始计数
AboveCount = 1;
FirstNegativeBar = false;
}
else if (Close > EMA144)
{
// 收盘价继续高于EMA144,增加计数
AboveCount = AboveCount + 1;
}
else
{
// 收盘价跌破EMA144,重置计数
AboveCount = 0;
FirstNegativeBar = false;
}
if (AboveCount == 3 && Close < Open &&!FirstNegativeBar)
{
// 连续3根K线收盘没跌破EMA144,且第一根收阴线,开仓买入
Buy(1, Close);
FirstNegativeBar = true;
}
if (MarketPosition == 1 && Close < EMA20)
{
// 持仓状态下,收盘价跌破EMA20,卖出
Sell(1, Close);
}
}
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
什么叫
没有显示我自写的公式