Params
Numeric FastLength(12); //MACD
Numeric SlowLength(26); //MACD
Numeric MACDLength(9); //MACD
Numeric ATRLength(77); // 平均波动周期 ATR Length
Numeric fsLength(19); // 长周期 FailSafe Length
Numeric teLength(8); // 离市周期 Trailing Exit Length
Numeric ExitN(2.5);
Vars
Numeric MACDDiff; //MACD
Numeric AvgMACD; //MACD
Numeric MACDValue; //MACD
Numeric MinPoint; // 最小变动单位
Series<Numeric> AvgTR; // ATR
Numeric N; // N 值
Numeric TurtleUnits(100); // 交易手数
Series<Numeric> fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期
Series<Numeric> fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期
Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价
Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价
Numeric myEntryPrice; // 开仓价格
Numeric myExitPrice; // 平仓价格
Bool SendOrderThisBar(False); // 当前Bar有过交易
Series<Numeric> preEntryPrice(0); // 前一次开仓的价格
Series<Bool> upcross(False);
Events
OnBar(ArrayRef<Integer> indexs)
{
MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDDiff,MACDLength);
if (CrossOver(MACDDiff,AvgMACD))
{
upcross=True;
}Else if (CrossUnder(MACDDiff,AvgMACD))
{
upcross=FALSE;
}Else
{
upcross=upcross[1];
}
If(BarStatus == 0)
{
preEntryPrice = InvalidNumeric;
//PreBreakoutFailure = false;
}
MinPoint = MinMove*PriceScale;
AvgTR = XAverage(TrueRange,ATRLength);
N = AvgTR[1];
fsDonchianHi = HighestFC(High[1],fsLength);
fsDonchianLo = LowestFC(Low[1],fsLength);
ExitLowestPrice = LowestFC(Low[1],teLength);
ExitHighestPrice = HighestFC(High[1],teLength);
Commentary(\"N=\"+Text(N));
Commentary(\"preEntryPrice=\"+Text(preEntryPrice));
//Commentary(\"PreBreakoutFailure=\"+IIFString(PreBreakoutFailure,\"True\",\"False\"));
// 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
If(MarketPosition!=-1 )
{
SellShort(100,Close);
MyEntryPrice=Close;
If(AlertEnabled )
{
Alert(\"报警信息...\");
}
Return;
}
//持仓处理
If(MarketPosition == 1 )
{if ( upcross==False ) // 跟踪止损退出
{
myExitPrice = close;
//myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
Sell(0,myExitPrice); // 数量用0的情况下将全部平仓
}
} Else If(MarketPosition == -1)
{if ( upcross==True ) // 跟踪止损退出
myExitPrice = close;
//myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓
}
}
为何下穿会有平仓??下穿upcross==false,不满足条件,不应该执行,错在哪?
你如果要用uprcoss来控制,那你这个if控制的范围不对,必须把下面的buytocover用大括号括起来
建议先把基础语法学明白
你这个平仓条件不是只要当前仓位是空仓立即平仓么?那开空仓后第二根bar很明显满足条件所以就平仓了啊?