//------------------------------------------------------------------------
// 简称: Five_MA_bonding
// 名称: 五线粘合交易
// 1、设置5、10、20、30、60五根均线;
// 2、当五线同时在上一根K线的最高价和最低价之间;
// 3、如果上一根K线是阳线,则此K线的开盘价就买入;如果是阴线,则此K线的开盘价就卖出。
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
//设置均线周期参数
Numeric Length1(5);
Numeric Length2(10);
Numeric Length3(20);
Numeric Length4(30);
Numeric Length5(60);
Vars
//申明均线变量
Series<Numeric> FiveMA;
Series<Numeric> TenMA;
Series<Numeric> twentyMA;
Series<Numeric> thirtyMA;
Series<Numeric> sixtyMA;
Events
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
FiveMA = Average(Close,Length1);
TenMA = Average(Close,Length2);
twentyMA = Average(Close,Length3);
thirtyMA = Average(Close,Length4);
sixtyMA = Average(Close,Length5);
//图表上画出五线
PlotNumeric("MA1",FiveMA);
PlotNumeric("MA2",TenMA);
PlotNumeric("MA3",twentyMA);
PlotNumeric("MA4",thirtyMA);
PlotNumeric("MA4",sixtyMA);
//当五线满足在最高价与最低价之间
If(High[1]>FiveMA>Low[1] And High[1]>TenMA>Low[1] And High[1]>twentyMA>Low[1] And High[1]>thirtyMA>Low[1] And High[1]>sixtyMA>Low[1])
{
If(Close[1] > Open[1]) //如果是阳线
{
Buy(1,Open);
}
Else If(Close[1] < Open[1]) //如果是阴线
{
SellShort(1,Open);
}
}
}
>,<, >=, <=, ==, != 等逻辑运算符不支持传递式写法,High[1]>FiveMA>Low[1] 要改成 High[1]>FiveMA and FiveMA >Low[1]
//当五线满足在上一根K线开盘价与收盘价之间,则此Bar开盘价开始交易
If(Open[1] > FiveMA And FiveMA > Close[1])
{
If(Open[1] > TenMA And TenMA > Close[1])
{
If(Open[1] > twentyMA And twentyMA > Close[1])
{
If(Open[1] > thirtyMA And thirtyMA > Close[1])
{
If(Open[1] > sixtyMA And sixtyMA > Close[1])
{
If(Close[1] > Open[1]) //如果是阳线
{
Buy(1,Open);
}
Else If(Close[1] < Open[1]) //如果是阴线
{
SellShort(1,Open);
}
}
}
}
}
我把它改成了这样,但是我看K线上测试的结果和交易逻辑并不一样,大神帮忙看一下,是那里出了问题
条件语句顺序不对吧,先判断阴阳线,再判断五根均线是否在K线中。也可以先求出五根均线的最大值最小值,K线的最大值最小值,再来比较。
另外,均线也要用上一根的来比较,这样才是比较严谨的。