为什么出场信号不执行

是不

Params Numeric nEntries(3); // 最大建仓次数 Numeric RiskRatio(1); // % Risk Per N ( 0 - 100) Numeric yha(2); // Numeric yhb(20); // Numeric yhc(21); // Numeric yhd(42); // Numeric bla(1); // Numeric blb(2); // Numeric blc(3); // Numeric bld(13); Numeric teLength(10); // Vars Numeric MinPoint; // 最小变动单位 Series<Numeric> AvgTR; // ATR Numeric N; // N 值 Numeric TotalEquity; // 按最新收盘价计算出的总资产 Numeric TurtleUnits; // 交易单位 Series<Numeric> YA; // Series<Numeric> YB; // Series<Numeric>BA ; // Series<Numeric>BB; Series<Numeric>BC; // Series<Numeric>BD; Series<Numeric>BE; Series<Numeric>BF; Series<Numeric>BG; Series<Numeric> DonchianLo; // 唐奇安通道下轨,延后1个Bar Numeric BE1; Numeric BE2; Series<Numeric>RHbar; Series<Numeric>Hbar; Series<Numeric>ls1; Series<Numeric>A1; Series<Numeric>A2; Series<Numeric>A3; Series<Numeric>A4; Series<Numeric>ls2; Numeric ls3; Numeric rc; Series<Numeric>ls4; Series<Numeric>ls5; Numeric ls6; Array<Array<String>> rvalue; Numeric ls; Numeric myEntryPrice; // 开仓价格 Numeric myExitPrice; // 平仓价格 Bool SendOrderThisBar(False); // 当前Bar有过交易 Series<Numeric> preEntryPrice(0); // 前一次开仓的价格 Series<Bool> PreBreakoutFailure(false); // 前一次突破是否失败 Events OnBar(ArrayRef<Integer> indexs) { If(BarStatus == 0) { preEntryPrice = InvalidNumeric; PreBreakoutFailure = false; } MinPoint = MinMove*PriceScale; AvgTR = XAverage(TrueRange,yhb); N = AvgTR[1]; TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin(); TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue()); TurtleUnits = IntPart(TurtleUnits); // 对小数取整 // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作*/ DonchianLo = LowestFC(Low[1],teLength); PlotNumeric("10日最低",DonchianLo); YA=XAverage(CLOSE,yha); YB=XAverage(((LinearRegSlope(close,yhc)*yhb)+close),yhd); BA=(blb*CLOSE+HIGH+LOW)/blc; BB=XAverage(BA,blc); BC=XAverage(BB,blc); BD=XAverage(BC,blc); BE=(BD-BD[1])/BD[1]*100; BF=Average(BE,bla); BG=Average(BE,blb); ReadCSVFile("e://ls.csv", rvalue); ls=IIF((rvalue[0][0] == "1" and rvalue[0][1] == "1") ,1,0); bool cond1 = (CrossOver(BF[1],BG[1]) and be[1]<0); bool cond2 = CrossUnder(BF[1],BG[1]); Integer barOffset = nthcon(cond1,1); Commentary("barOffset="+Text(barOffset)); bool cond3 = (CrossUnder(BF[1],BG[1]) and be[1]>0); bool cond4 = CrossOver(BF[1],BG[1]); Integer barOffset1 = nthcon(cond3,1); Commentary("barOffset1="+Text(barOffset1)); if(barOffset==0) { A1=BE[1]; } Commentary("A1="+text(A1)); if(cond1) { ls1=1; ls2=0; } Commentary("ls1="+text(ls1)); if(cond2) { ls2=1; } Commentary("ls2="+text(ls2)); ls3=(ls1[1]+ls2[1])-(ls1+ls2); Commentary("ls3="+text(ls3)); if(barOffset1==0) { A3=BE[1]; } Commentary("A3="+text(A3)); if(cond3) { ls4=1; ls5=0; } Commentary("ls4="+text(ls4)); if(cond4) { ls5=1; } Commentary("ls5="+text(ls5)); ls6=(ls4[1]+ls5[1])-(ls4+ls5); Commentary("ls6="+text(ls6)); Commentary("ls="+text(ls)); Commentary("YA = " + Text(YA)); Commentary("YB = " + Text(YB)); Commentary("BE = " + Text(BE)); Commentary("N="+Text(N)); Commentary("preEntryPrice="+Text(preEntryPrice)); Commentary("快="+Text(BF)); Commentary("慢="+Text(BG)); range[1:1] { DonchianLo = LowestFC(Low[1],teLength); PlotNumeric("10日最低",DonchianLo); } range[2:2] { BA=(blb*CLOSE+HIGH+LOW)/blc; BB=XAverage(BA,blc); BC=XAverage(BB,blc); BD=XAverage(BC,blc); BE=(BD-BD[1])/BD[1]*100; BF=Average(BE,bla); BG=Average(BE,blb); Commentary("快="+Text(BF)); Commentary("慢="+Text(BG)); } If(MarketPosition == 0)//&&ls==1) { // 突破开仓 If(ls3==1 and A1>A1[1] &&TurtleUnits >= 1 ) { // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交&& data2.BF[1]>data2.bg[1] rc=close[1]; if(rc>data1.DonchianLo && open>data1.DonchianLo) {myEntryPrice =rc; myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 preEntryPrice = myEntryPrice; Buy(TurtleUnits,myEntryPrice); SendOrderThisBar = True; Commentary("preEntryPrice="+Text(preEntryPrice)); } } } If(MarketPosition == 1) // 有多仓的情况 { If(LOW<Data1.DonchianLo) //底仓止损点 { myExitPrice = max(Low, Data1.DonchianLo- MinPoint); myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 Sell(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); }Else If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1) { If(Open >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。 { myEntryPrice = Open; preEntryPrice = myEntryPrice; Buy(TurtleUnits,myEntryPrice); SendOrderThisBar = True; } while(High >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 以最高价为标准,判断能进行几次增仓 { myEntryPrice = preEntryPrice + 0.5 * N; preEntryPrice = myEntryPrice; if(False == Buy(TurtleUnits,myEntryPrice)) { break; } SendOrderThisBar = True; } } If(ls6==1 and A2<A2[1]) //出场信号 { myExitPrice = CLOSE[1]; myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 Sell(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); } } Commentary("CurrentEntries = " + Text(CurrentEntries)); }

回复:你的问题是什么,如果是不开仓,你就把你的开仓信号全都诊断一下,看看哪个写错了

回复:下面出场信号写错了,已经好了,谢谢

建议贴代码,不是发截图。如果想给你复现一下问题还要自己重新输入一遍,那不是很浪费时间吗

回测的时候只在第一个止损位置出场,后面给你出场信号出现了都没有,只在第一个止损位置出场