如何让止盈只执行一次

Params //此处添加参数 Numeric Length1(12); Numeric Length2(144); Numeric Length3(169); Numeric Length4(288); Numeric Length5(388); Numeric lots1(10); Numeric lots5(1); Vars Series<Numeric> EMA1; Series<Numeric> EMA2; Series<Numeric> EMA3; Series<Numeric> EMA4; Series<Numeric> EMA5; Numeric lots; Series<Numeric> HighAfterEntry; // 开仓后出现的最高价 Series<Numeric> LowAfterEntry; // 开仓后出现的最低价 Numeric StartPro1(3); //1级跟踪止盈,盈利%启动 Numeric StopPro1(30); //1级跟踪止盈,盈利回撤%触发 Numeric StartPro2(4); //2级跟踪止盈,盈利%启动 Numeric StopPro2(20); //2级跟踪止盈,盈利回撤50%触发 Numeric StartPro3(5); //3级跟踪止盈,盈利%启动 Numeric StopPro3(20); //3级跟踪止盈,盈利回撤%触发 Numeric StopLoss(5); // 止损% Bool BuyEntry(False); Bool SellEntry(False); Bool BuyExit(False); Bool SellExit(False); Defs //此处添加公式函数 Numeric calcAvg(Numeric a,Numeric b) { return (a+b)/2; } Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnBar(ArrayRef<Integer> indexs) { { Print("ExitSize:" + Text(ExitSize())); } Range[0:DataSourceSize() - 1] { PlotNumeric("EMA1",XAverage(Close, Length1)); PlotNumeric("EMA2",XAverage(Close, Length2)); PlotNumeric("EMA3",XAverage(Close, Length3)); PlotNumeric("EMA4",XAverage(Close, Length4)); PlotNumeric("EMA5",XAverage(Close, Length5)); EMA1=XAverage(Close, Length1); EMA2=XAverage(Close, Length2); EMA3=XAverage(Close, Length3); EMA4=XAverage(Close, Length4); EMA5=XAverage(Close, Length5); lots=lots1; if(crossover(EMA1[1],EMA5[1])) { Buy(lots,Open); } if(CrossUnder(EMA1[1],EMA5[1])) { SellShort(lots,Open); } If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro3) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro3) { BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro3)); Commentary("最大盈利达到"+Text(StartPro3)+"%之后盈利回撤"+Text(StopPro3)+"%平空"); } If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro3) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro3) { Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro3)); Commentary("最大盈利达到"+Text(StartPro3)+"%之后盈利回撤"+Text(StopPro3)+"%平多"); } If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro2) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro2) { BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro2)); Commentary("最大盈利达到"+Text(StartPro2)+"%之后盈利回撤"+Text(StopPro2)+"%平空"); } If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro2) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro2) { Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro2)); Commentary("最大盈利达到"+Text(StartPro2)+"%之后盈利回撤"+Text(StopPro2)+"%平多"); } If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro1) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro1) { BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro1)); Commentary("最大盈利达到"+Text(StartPro1)+"%之后盈利回撤"+Text(StopPro1)+"%平空"); } If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro1) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro1) { Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro1)); Commentary("最大盈利达到"+Text(StartPro1)+"%之后盈利回撤"+Text(StopPro1)+"%平多"); } If(MarketPosition==-1 && High>=LastEntryPrice*(1+StopLoss*0.01)) { BuyToCover(lots5,Max(LastEntryPrice*(1+StopLoss*0.01),Open)); Commentary("空头亏损"+Text(StopLoss)+"%止损"); } If(MarketPosition==1 && Low<=LastEntryPrice*(1-StopLoss*0.01)) { Sell(lots5,Min(LastEntryPrice*(1-StopLoss*0.01),Open)); Commentary("多头亏损"+Text(StopLoss)+"%止损"); } //记录开仓后高低点 If(BarsSinceentry == 0) { HighAfterEntry = High; LowAfterEntry = Low; }else { HighAfterEntry = Max(HighAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断 LowAfterEntry = Min(LowAfterEntry,Low); // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断 } } }

序列类型定义一个状态变量 止盈以后就关闭这个状态变量

回复:能帮忙写一下么 我不会写 谢谢你

回复:看置顶帖 建议不要采用化缘式量化开发