//------------------------------------------------------------------------
// 简称: SAR
// 名称: 抛物线转向
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric AfStep( 0.02);
Numeric AfLimit( 0.2 ) ;
Numeric Lots(1);
Numeric MA(60);
Vars
Numeric oParCl( 0 );
Numeric oParOp( 0 );
Numeric oPosition( 0 );
Numeric oTransition( 0 );
Series<Numeric> MA60(0); // 60日均线
Numeric MA60_Direction(0); // 60日均线方向,1向上,-1向下,0走平
Bool myIsLong(false); // 是否持有多头仓位
Bool myIsShort(false); // 是否持有空头仓位
Numeric myEntryPrice(0); // 记录入场价格
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
ParabolicSAR( AfStep, AfLimit, oParCl, oParOp, oPosition, oTransition ) ;
PlotAuto( "ParCl" , oParCl, 0, Color2(), Enum_Dot) ;
// 绘制60日均线
PlotNumeric("MA60", MA60, 0, RGB(255, 165, 0)); // 橙色
}
// 计算60日均线及方向
MA60 = Average(Open, 60);
// 判断60日均线方向(使用前一根K线的MA60与再前一根K线的MA60比较)
Numeric preMA60 = MA60[1];
Numeric prepreMA60 = MA60[2];
If (preMA60 > prepreMA60)
{
MA60_Direction = 1; // 均线向上
}
Else If (preMA60 < prepreMA60)
{
MA60_Direction = -1; // 均线向下
}
Else
{
MA60_Direction = 0; // 均线走平
}
// 记录持仓状态
myIsLong = (MarketPosition == 1);
myIsShort = (MarketPosition == -1);
If (MarketPosition <> -1 And oPosition == -1 And Open < oParCl And Open < MA60 And MA60_Direction == -1)
{
SellShort(Lots, Open);
myEntryPrice = open; // 记录空单入场价格
}
If (MarketPosition <> 1 And oPosition == 1 And Open > oParCl And Open > MA60 And MA60_Direction == 1)
{
Buy(Lots, Open);
myEntryPrice = open; // 记录多单入场价格
}
}
//------------------------------------------------------------------------
// 编译版本 GS2025.1.23
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------