关于多图层策略

把自带的海龟改为多图层

其中错误语句1 If(data[i].MarketPosition == 0 && ((!data[i].LastProfitableTradeFilter) Or (data[i].PreBreakoutFailure)))

语句2 data[i].Sell(data[i].0,data[i].myExitPrice);    // 数量用0的情况下将全部平仓

第一句求给讲一下啊,第二句是全平的0好像得改一下

多图层策略关于onbaropen?
关于多图层运算
请教!关于多品种,跨周期,多图层
多图层
多图层问题
发现多图层的Bug
多图层选股
多图层的执行及策略优化问题
a函数多图层套利策略问题
多图层的交易触发问题

弄明白了。。。我把代码对错行了。。。。所以进不去循环

这是代码
OnBar(ArrayRef<Integer> indexs)
	{
		 Range[0:datasourcesize()-1]
		{
			for i=0 To datasourcesize()-1
			{
				If(BarStatus == 0)
				{
					preEntryPrice = InvalidNumeric;
					PreBreakoutFailure = false;
				}
				MinPoint = MinMove*PriceScale;
				AvgTR = XAverage(TrueRange,ATRLength);
				N = AvgTR[1];
				TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
				TurtleUnits = (TotalEquity*RiskRatio/100) /(N *ContractUnit()*BigPointValue());
				TurtleUnits = IntPart(TurtleUnits); // 对小数取整
				DonchianHi = HighestFC(High[1],boLength);
				DonchianLo = LowestFC(Low[1],data[i].boLength);
				fsDonchianHi = HighestFC(High[1],data.fsLength);
				fsDonchianLo = LowestFC(Low[1],data.fsLength);
				ExitLowestPrice = LowestFC(data.Low,data.teLength);
				ExitHighestPrice = HighestFC(data.High,data.teLength);
				Commentary("N="+Text(N));
				Commentary("preEntryPrice="+Text(data.preEntryPrice));
				Commentary("PreBreakoutFailure="+IIFString(data.PreBreakoutFailure,"True","False"));
				// 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
		
				If(data[i].MarketPosition == 0 && ((!data[i].LastProfitableTradeFilter) Or (data[i].PreBreakoutFailure)))
				{
				// 突破开仓
					If(data[i].High >Data[i]. DonchianHi && data[i].TurtleUnits >= 1)
					{
				// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
						data[i].myEntryPrice = min(data[i].high,data[i].DonchianHi + data[i].MinPoint);
						data[i].myEntryPrice = IIF(data[i].myEntryPrice < data[i].Open, data[i].Open,data[i].myEntryPrice); // 大跳空的时候用开盘价代替
						data[i].preEntryPrice = data[i].myEntryPrice;
						data[i].Buy(TurtleUnits,data[i].myEntryPrice);
						data[i].SendOrderThisBar = True;
						data[i].PreBreakoutFailure = False;
					}
					If(data[i].Low < data[i].DonchianLo && data[i].TurtleUnits >= 1)
					{
						// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
						data[i].myEntryPrice = max(data[i].low,data[i].DonchianLo - data[i].MinPoint);
						data[i].myEntryPrice = IIF(data[i].myEntryPrice >data[i]. Open,data[i]. Open,data[i].myEntryPrice); // 大跳空的时候用开盘价代替
						data[i].preEntryPrice = data[i].myEntryPrice;
						data[i].SellShort(data[i].TurtleUnits,data[i].myEntryPrice);
						data[i].SendOrderThisBar = True;
						data[i].PreBreakoutFailure = False;
					}
				}
		// 长周期突破开仓 Failsafe Breakout point
				If(data[i].MarketPosition == 0)
				{
					data[i].Commentary("data[i].fsDonchianHi="+Text(data[i].fsDonchianHi));
					If(data[i].High > data[i].fsDonchianHi && data[i].TurtleUnits >= 1)
					{
						// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
						data[i].myEntryPrice = min(data[i].high,data[i].fsDonchianHi +data[i]. MinPoint);
						data[i].myEntryPrice = IIF(data[i].myEntryPrice < data[i].Open, data[i].Open,data[i].myEntryPrice); // 大跳空的时候用开盘价代替
						data[i].preEntryPrice = data[i].myEntryPrice;
						data[i].Buy(data[i].TurtleUnits,data[i].myEntryPrice);
						data[i].SendOrderThisBar = True;
						data[i].PreBreakoutFailure = False;
					}
					data[i].Commentary("data[i].fsDonchianLo="+Text(data[i].fsDonchianLo));
					If(data[i].Low <data[i]. fsDonchianLo && data[i].TurtleUnits >= 1)
					{
						// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
						data[i].myEntryPrice = max(data[i].low,data[i].fsDonchianLo - data[i].MinPoint);
						data[i].myEntryPrice = IIF(data[i].myEntryPrice > data[i].Open,data[i].Open,data[i].myEntryPrice); // 大跳空的时候用开盘价代替
						data[i].preEntryPrice = data[i].myEntryPrice;
						data[i].SellShort(data[i].TurtleUnits,data[i].myEntryPrice);
						data[i].SendOrderThisBar = True;
						data[i].PreBreakoutFailure = False;
					}
				}
				If(data[i].MarketPosition == 1) // 有多仓的情况
				{
					Commentary("data[i].ExitLowestPrice="+Text(data[i].ExitLowestPrice));
					If(data[i].Low < data[i].ExitLowestPrice)
					{
						data[i].myExitPrice = max(data[i].Low,data[i].ExitLowestPrice - data[i].MinPoint);
						data[i].myExitPrice = IIF(data[i].myExitPrice > data[i].Open, data[i].Open,data[i].myExitPrice); // 大跳空的时候用开盘价代替
						data[i].Sell(data[i].0,data[i].myExitPrice);    // 数量用0的情况下将全部平仓
					}Else
					{
						If(data[i].preEntryPrice!=InvalidNumeric && data[i].TurtleUnits >= 1)
						{
							If(data[i].Open >= data[i].preEntryPrice + 0.5*data[i].N && data[i].CurrentEntries < data[i].nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
							{
								data[i].myEntryPrice = data[i].Open;
								data[i].preEntryPrice =data[i]. myEntryPrice;
								data[i].Buy(data[i].TurtleUnits,data[i].myEntryPrice);
								data[i].SendOrderThisBar = True;
							}
							while(data[i].High >= data[i].preEntryPrice + 0.5*data[i].N && data[i].CurrentEntries < data[i].nEntries) // 以最高价为标准,判断能进行几次增仓
							{
								data[i].myEntryPrice = data[i].preEntryPrice + 0.5 * data[i].N;
								data[i].preEntryPrice = data[i].myEntryPrice;
								if(False == data[i].Buy(data[i].TurtleUnits,data[i].myEntryPrice))
								{
									break;
								}
								data[i].SendOrderThisBar = True;
							}
						}
						// 止损指令
						If(data[i].Low <=data[i]. preEntryPrice - 1 * data[i].N && data[i].SendOrderThisBar == false) // 加仓Bar不止损
						{
							data[i].myExitPrice = data[i].preEntryPrice - 1 * N;
							data[i].myExitPrice = IIF(data[i].myExitPrice > data[i].Open,data[i]. Open,data[i].myExitPrice); // 大跳空的时候用开盘价代替
							data[i].Sell(data[i].0,data[i].myExitPrice); // 数量用0的情况下将全部平仓
							data[i].PreBreakoutFailure = True;
						}
					}
				}Else If(data[i].MarketPosition ==-1) // 有空仓的情况
				{
					// 求出持空仓时离市的条件比较值
					Commentary("data[i].ExitHighestPrice="+Text(data[i].ExitHighestPrice));
					If(data[i].High > data[i].ExitHighestPrice)
					{
						data[i].myExitPrice = Min(data[i].High,data[i].ExitHighestPrice + data[i].MinPoint);
						data[i].myExitPrice = IIF(data[i].myExitPrice < data[i].Open, data[i].Open,data[i].myExitPrice); // 大跳空的时候用开盘价代替
						data[i].BuyToCover(data[i].0,data[i].myExitPrice);    // 数量用0的情况下将全部平仓
					}Else
					{
						If(data[i].preEntryPrice!=InvalidNumeric && data[i].TurtleUnits >= 1)
						{
							If(data[i].Open <=data[i]. preEntryPrice - 0.5*data[i].N && data[i].CurrentEntries <data[i]. nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
							{
								data[i].myEntryPrice = data[i].Open;
								data[i].preEntryPrice = data[i].myEntryPrice;
								data[i].SellShort(data[i].TurtleUnits,data[i].myEntryPrice);
								data[i].SendOrderThisBar = True;
							}
							while(data[i].Low <=data[i]. preEntryPrice - 0.5*data[i].N && data[i].CurrentEntries < data[i].nEntries) // 以最低价为标准,判断能进行几次增仓
							{
								data[i].myEntryPrice = data[i].preEntryPrice - 0.5 * data[i].N;
								data[i].preEntryPrice = data[i].myEntryPrice;
								if(False == data[i].SellShort(data[i].TurtleUnits,data[i].myEntryPrice))
								{
									break;
								}
								data[i].SendOrderThisBar = True;
							}
						}
						// 止损指令
						If(data[i].High >= data[i].preEntryPrice + 1 *data[i]. N &&data[i].SendOrderThisBar==false) // 加仓Bar不止损
						{
							data[i].myExitPrice = data[i].preEntryPrice + 1 * data[i].N;
							data[i].myExitPrice = IIF(data[i].myExitPrice <data[i].Open, data[i].Open,data[i].myExitPrice); // 大跳空的时候用开盘价代替
							data[i].BuyToCover(data[i].0,data[i].myExitPrice); // 数量用0的情况下将全部平仓
							data[i].PreBreakoutFailure = True;
						}
						]
					}
				}
				Commentary("data[i].CurrentEntries = " + Text(data[i].CurrentEntries));
			}
				}
			}
			}


for i=0 To datasourcesize()-1位置改为在If(data[i].MarketPosition == 0 && ((!data[i].LastProfitableTradeFilter) Or (data[i].PreBreakoutFailure)))前面。另外问一下,多品种多图层交易不可以在本程序的前面加一个range[0:datasourcesize()-1]进行遍历吗,我以为是在range函数下所有语句所有层次都执行一遍