如何让止盈只执行一次

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的跟踪止损判断
         

        }
        }
        }

当前的K线只执行一次
循环体内plot只执行一次
如何让多图层只加载0图层的K线图表?
每个BAR,只在最后结束执行一次,怎么实现啊
每个BAR,只在最后结束执行一次,怎么实现啊
请问为何代码只执行一次开仓程序,后续就不再执行了
命令当日仅执行一次该如何编写?
多数据源时,有段代码想开盘前全局只执行一次计算
让日线每天只交易一次代码怎么写
在条件A和条件B周期内只进行一次交易,如何编写?

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

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

看置顶帖

建议不要采用化缘式量化开发