有交易信号,但是无发单委托

老师好,

新人小白一枚,最近在模拟交易时遇到个问题:有交易信号,但是无发单委托。

比如:有开仓信号,但无发单委托;有平仓信号,无发单委托。

附上部分代码及图片,还请帮忙看看是哪里有潜在的问题,感谢!

//------ 持仓处理 ------

   If(MarketPosition == 1)

   {

CurrentPrice = Close[1];  // 使用前一Bar收盘价(确定值)

       FloatProfitRatio = (CurrentPrice - FirstEntryPrice) / FirstEntryPrice; // 计算相对盈亏

       

       // 全局风控检查

       If(!EquityRiskTriggered)

       {

           // 直接使用计算盈亏比例(不再依赖 PositionProfit)

           If(FloatProfitRatio <= -FloatLossThreshold)  // 注意:亏损时为负值

           {

               Sell(0, Open, SlipPoint);

               Commentary("多头浮动止损触发 | 亏损比例:" + Text(FloatProfitRatio*100) + "%");

               EquityRiskTriggered = True;

               LastExitBar = CurrentBar;

           }

       }

               

       // 动态止损止盈

       DynamicStopRatio = FixScale * (1 + (ATRValue[1]/Close[1])*StopSensitivity);

       FixedStopLong = FirstEntryPrice * (1 - DynamicStopRatio);

       ProfitTargetLong = FirstEntryPrice + ATRValue[1] * ProfitMultiplier;

       

       // 止损执行(使用前一日低点防闪烁)

       If(Low <= FixedStopLong && Low[1] > FixedStopLong)

       {

           Sell(0, FixedStopLong, SlipPoint);

           LastExitBar = CurrentBar;

           Commentary("多头止损触发于:"+Text(FixedStopLong));

       }

       // 止盈执行

       Else If(High >= ProfitTargetLong && Close[1] < ProfitTargetLong)

       {

           Sell(0, ProfitTargetLong, SlipPoint);

           LastExitBar = CurrentBar;

           Commentary("多头止盈触发于:"+Text(ProfitTargetLong));

       }

   }

//------ 开仓逻辑 ------

   If(MarketPosition == 0)

   {

       If(LongSignal)

       {

           // 开多仓

           Buy(PositionSize, Open, SlipPoint);

           FirstEntryPrice = Open;

           If(!FirstEntryLong)

           {

               InitialEquity = Portfolio_CurrentEquity();

               FirstEntryLong = True;

           }

           AddCount = 1;

           LastEntryBar = CurrentBar;

           EquityRiskTriggered = False;

           Commentary("多头开仓于:"+Text(Open));

       }

       Else If(ShortSignal)

       {

           // 开空仓

           SellShort(PositionSize, Open, SlipPoint);

           FirstEntryPrice = Open;

           If(!FirstEntryShort)

           {

               InitialEquity = Portfolio_CurrentEquity();

               FirstEntryShort = True;

           }

           AddCount = 1;

           LastEntryBar = CurrentBar;

           EquityRiskTriggered = False;

           Commentary("空头开仓于:"+Text(Open));

       }

   }

//------ 盈利保护模块 ------

   If(MarketPosition != 0 && InitialEquity > 0)

   {

       // 核心修改:用固定入场价差替代浮动盈亏计算

       CurrentPrice = Close[1];  // 关键!使用前一Bar收盘价

       

       // 多空统一计算公式(自动识别方向)

       If(MarketPosition == 1)

       {

           FloatProfitValue = (CurrentPrice - FirstEntryPrice) * PositionSize * ContractUnit() * BigPointValue();

           FloatProfitRatio = (CurrentPrice - FirstEntryPrice) / FirstEntryPrice;

       }

       Else If(MarketPosition == -1)

       {

           FloatProfitValue = (FirstEntryPrice - CurrentPrice) * PositionSize * ContractUnit() * BigPointValue();

           FloatProfitRatio = (FirstEntryPrice - CurrentPrice) / FirstEntryPrice;

       }

       

       

       // 盈利达标平仓

       If(FloatProfitRatio >= InitialEquity * 0.15)

       {

           If(MarketPosition == 1)

               {

                   Sell(0, Open, SlipPoint);

                   Commentary("盈利保护触发(多头)| 收益率:" + Text(FloatProfitRatio*100) + "%");

               }

               Else If(MarketPosition == -1)

               {

                   BuyToCover(0, Open, SlipPoint);

                   Commentary("盈利保护触发(空头)| 收益率:" + Text(FloatProfitRatio*100) + "%");

               }

       }

   }

无信号发单问题
委托及成交无显示
图表无信号但是实际却正常交易
第一个发单满足的时候有发单,但是图表上未记录信号
发单委托,出现连续委托N多个
无图表交易有什么好处
请问,只报警提示,但是不交易、不委托发单,要怎么编写呢?
延迟发单回测有交易信号,实盘模拟的时候不能发出委托单
有持仓时,发委托
只发信号,不委托发单

辅k线警告!

老生常谈的问题了。

首先明确第一天,打开k线这个功能不是展示该单元的运行轨迹,仅仅是以该策略单元的配置新建一个图表运行一下。

这里可能会有疑惑为什么要强调这个?

因为策略单元里的k线都是盘中实时bar挨个tick执行过来的。而打开k线时,本来应该挨个tick执行的bar全都变成历史bar,只会按照收盘状态执行一次。

这就造成了策略单元和辅助k线可能运行轨迹不一致的问题。

但是这个运行轨迹不一致的问题,根本上来说,是模型编写的问题,一般因为模型含有信号闪烁的隐患,所以导致k线图的信号失去了参考意义。

如果想查看策略单元的实际信号执行记录,必须如下操作。

首先,必须保证,该单元没有停止运行并重启过。如果重启过,那就没意义了,就跟打开k线没区别了。

其次,打开测试报告,查看交易记录,这里才是单元内真实执行出来的信号。

这个问题说到底,还是因为模型有信号闪烁,所以才导致信号对不上。

需要理解这个问题,首先要清楚onbar事件域对于历史bar和实时bar的运行区别,其次要理解打开k线的原理(上面说了),最后还要了解一下信号闪烁的概念。

建议通过视频区零基础课程系统性地学习一下。

好的,感谢老师。零基础的课程也只是过了一遍,理解不深。他这个闪烁问题困扰了我很久,有什么办法能够比较好的快速找出影响闪烁的问题啊。

这个好像直播课教过,直接用quant3的setbaseperiod回测就好了

https://video.tbquant.net/video?id=20250310103731783228