求解答,为什么我设置的风险点是0.5%但是它很快就平掉了

Params

   Numeric closeHour(15);

   Numeric closeMinute(0);

// 变量定义区

Vars

   Numeric newprice;        // 最新价格

   Numeric opentime;        // 开仓时间(时间戳)

   Numeric closeTotalSec;  //收盘时间

   Numeric openTotalSec;   //开盘时间

   Numeric TradeDate;      //交易日期

   

   Numeric RiskPoint(0.005);      //风险点

   Series<Bool> opened(False);  // 标记是否已开仓

   Series<Numeric> prentryPrice;  // 记录开仓价格

   Series<Numeric> LastTradeDate;      // 最后储存交易日

   Series<Numeric> OpenPrice_0900(InvalidNumeric);     // 09:00 的开盘价

   Series<Numeric> OpenPrice_0915(InvalidNumeric);     // 09:15 的开盘价

   Series<Numeric> OpenPrice_1030(InvalidNumeric);     //10:30 的开盘价

// 事件处理区

Events

   // 初始化:只执行一次

   OnInit()

   {

       prentryPrice = 0;

       openTotalSec = 9*3600 + 30*60;   // 9:30开盘

       closeTotalSec = 15*3600;          // 15:00收盘

       Print("OnInit: RiskPoint = " + Text(RiskPoint));        

   }


   // 每根K线闭合时触发(核心逻辑)

   OnBar(ArrayRef<Integer> indexes)

   {

       Numeric currentSec = Hour()*3600 + Minute()*60;

      // 获取当前时间和日期

      TradeDate = TradingDate();

       Commentary("当前日期:"+text(TradeDate));

       

      // 过滤非交易日(周六=6,周日=0)

     

        TradeDate = TradingDate();

       Commentary("当前日期:"+text(TradeDate));

       

       // 过滤非交易日(周六=6,周日=0)

      // If(WeekdayFromDateTime(Time) == 6 Or WeekdayFromDateTime(Time) == 0)

        //   Return;

       

       Commentary("最后储存日期:"+text(LastTradeDate));

       

       // 检查是否为新的交易日,重置状态

       If(TradeDate != LastTradeDate)

       {

           LastTradeDate = TradeDate;

           Commentary("修改后储存日期:"+text(LastTradeDate));

           OpenPrice_0900 = 0;

           OpenPrice_0915 = 0;  

           OpenPrice_1030 = 0;

           opened = False;

       }

           

       // 记录21:00开盘价

       If(currentSec == 9*3600)

       {

           OpenPrice_0900 = Open;

       }

       

       // 记录21:15开盘价

       If(currentSec == 9*3600 + 15*60)

       {

           OpenPrice_0915 = Open;

       }

       

       // 记录9:00开盘价

       If(currentSec == 10*3600 + 30*60)

       {

           OpenPrice_1030 = Open;

       }


       // 2. 开仓逻辑:满足时间条件 + 价格条件 + 未开仓

       If ( MarketPosition == 0 && opened == False )

       {

           if(currentSec >= 9*3600 + 15*60 && currentSec <= 9*3600 + 18*60 && OpenPrice_0900 != InvalidNumeric)

           {

               If(OpenPrice_0915 < OpenPrice_0900)  // 当前价格低于开盘价,做空,这个条件永远成立

               {

                   // 开空仓

                   //opened = True;

                   SellShort(1, OpenPrice_0915);

                   opened = True;

                   Commentary("1");

                   prentryPrice = OpenPrice_0915; // 记录开仓价

                   Print("开空仓成功,开仓价:" + Text(prentryPrice) + ",当前时间:" + Text(CurrentTime()));

               }

               Else If(OpenPrice_0915 > OpenPrice_0900)  // 当前价格高于开盘价,做多

               {

                   // 开多仓

                   //opened = True;

                   Buy(1, OpenPrice_0915);

                   opened = True;

                    Commentary("2");

                   prentryPrice = OpenPrice_0915; // 记录开仓价

                   Print("开多仓成功,开仓价:" + Text(prentryPrice) + ",当前时间:" + Text(CurrentTime()));

               }

               Else  // 价格相等,不开仓

               {

                   Print("价格与开盘价相等,今日不开仓");

               }

               

           }

           if(currentSec >= 10*3600 + 30*60 && currentSec <= 10*3600 + 33*60 && OpenPrice_0900 != InvalidNumeric)//currentTotalSec == 10*3600 + 30*60

           {

               If(OpenPrice_1030 < OpenPrice_0900)  

               {

                   // 开空仓

                   //opened = True;

                   SellShort(1, OpenPrice_1030);

                   opened = True;

                    Commentary("3");

                   prentryPrice = OpenPrice_1030; // 记录开仓价

                   Print("开空仓成功,开仓价:" + Text(prentryPrice) + ",当前时间:" + Text(CurrentTime()));

               }

               Else If(OpenPrice_1030 > OpenPrice_0900)  // 当前价格高于开盘价,做多

               {

                   // 开多仓

                   //opened = True;

                   Buy(1, OpenPrice_1030);

                   opened = True;

                    Commentary("4");

                   prentryPrice = OpenPrice_1030; // 记录开仓价

                   Print("开多仓成功,开仓价:" + Text(prentryPrice) + ",当前时间:" + Text(CurrentTime()));

               }

               Else  // 价格相等,不开仓

               {

                   Print("价格与开盘价相等,今日不开仓");

               }

               

           }

       }

       

       // 3. 止损逻辑(独立于开仓逻辑,已开仓时持续检查)

       If(opened == True && MarketPosition != 0)

       {

           // 空单止损:价格从下方涨到开仓价的(1+0.5%)以上,即亏损达到0.5%

           If(MarketPosition == -1  && High >= prentryPrice * (1 + RiskPoint))

           {

               //opened = False;

               BuyToCover(0, High); // 平空仓

               opened = False;

                Commentary("5");

               Commentary("止损平仓(做空): 数量: " + "1" + ", 时间: " + Text(Time) + ", 价格: " + Text(High));

               prentryPrice = 0;

           }

           // 多单止损:价格从上方跌到开仓价的(1-0.5%)以下,即亏损达到0.5%

           If(MarketPosition == 1  && Low <= prentryPrice * (1 - RiskPoint))

           {

               //opened = False;

               Sell(0, Low); // 平多仓

               opened = False;

                Commentary("6");

               Commentary("止损平仓(做多): 数量: " + "1" + ", 时间: " + Text(Time) + ", 价格: " + Text(Low));

               prentryPrice = 0;

           }

       }


       // 4. 收盘前10分钟强制平仓

       If( opened == True && currentSec >= 14*3600 + 50*60 && MarketPosition != 0)//currentTotalSec >= 14*3600 + 50*60

       {

           If(MarketPosition == 1)

           {

               //Print("准备平仓,时间:" + Text(CurrentTime()));

               //opened = False;

               Sell(0,Open);

               opened = False;

                Commentary("7");

               Print("平仓指令已发送,MarketPosition = " + Text(MarketPosition));

               Commentary("平仓(做多): 数量: " + " 1 " + ", 时间: " + Text(Time));

               prentryPrice = 0;

           }

           IF(MarketPosition == -1)

           {

               //opened = False;

               BuyToCover(0,Open);

               opened = False;

                Commentary("8");

               prentryPrice = 0;

               Commentary("平仓(做空): 数量: " + " 1 " + ", 时间: " + Text(Time));

           }

       }

     

   }

买点与卖点相差0.5点
为什么净持仓是3,但是可平多可平空是0呢
求总体风险控制的代码
为什么开盘时会闪烁的呢,我用的是A函数
请问下,我这个模拟盘的账户透视里真实成交价位是6682,但是我点开托管的交易单元,点测试报告的成交记录时,成交价格确实6840,为什么会相差这么大?
为何输出的数据是空值,但是我之前输出的数据是正确的
为何输出的数据是空值,但是我之前输出的数据是正确的
关于滑点设置的问题
各位老师,为什么我用实盘登录后启动策略交易后,马上就显示有盈利和持仓,这肯定是模拟账户的。但是我没有登录模拟账户啊?
我设置了检测持仓,为什么偶尔还是会重复下单?

您自己输出变量调试下,就可以发现