我怎么改才能做到当最新价跌破止损线就马上进行平仓

我做的止损条件判断是在k线闭合以后用k线最低价进行的交易超过了我设置的风险点,我怎么改才能做到当最新价跌破止损线就马上进行平仓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 的开盘价 Series<Numeric> OpenPrice_2100(InvalidNumeric); // 21:00 的开盘价 Series<Numeric> OpenPrice_2115(InvalidNumeric); // 21:15 的开盘价// 事件处理区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; OpenPrice_2100 = 0; OpenPrice_2115 = 0; opened = False; } // 记录9:00开盘价 If(currentSec == 9*3600) { OpenPrice_0900 = Open; } // 记录9:15开盘价 If(currentSec == 9*3600 + 15*60) { OpenPrice_0915 = Open; } // 记录21:00开盘价 If(currentSec == 21*3600) { OpenPrice_2100 = Open; } // 记录21:15开盘价 If(currentSec == 21*3600 + 15*60) { OpenPrice_2115 = Open; } // 记录10:30开盘价 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("价格与开盘价相等,今日不开仓"); } } if(currentSec >= 21*3600 + 15*60 && currentSec < 21*3600 + 18*60 && OpenPrice_2100 != InvalidNumeric) { If(OpenPrice_2115 < OpenPrice_2100) // 当前价格低于开盘价,做空,这个条件永远成立 { // 开空仓 //opened = True; SellShort(1, OpenPrice_2115); opened = True; prentryPrice = OpenPrice_2115; // 记录开仓价 Print("开空仓成功,开仓价:" + Text(prentryPrice) + ",当前时间:" + Text(CurrentTime())); } Else If(OpenPrice_0915 > OpenPrice_0900) // 当前价格高于开盘价,做多 { // 开多仓 //opened = True; Buy(1, OpenPrice_2115); opened = True; prentryPrice = OpenPrice_2115; // 记录开仓价 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); // 平空仓 prentryPrice = 0; opened = False; Commentary("5"); Commentary("止损平仓(做空): 数量: " + "1" + ", 时间: " + Text(Time) + ", 价格: " + Text(High)); } // 多单止损:价格从上方跌到开仓价的(1-0.5%)以下,即亏损达到0.5% If(MarketPosition == 1 && Low <= prentryPrice * (1 - RiskPoint)) { //opened = False; Sell(0, Low); // 平多仓 prentryPrice = 0; opened = False; Commentary("6"); Commentary("止损平仓(做多): 数量: " + "1" + ", 时间: " + Text(Time) + ", 价格: " + Text(Low)); } } // 4. 收盘前10分钟强制平仓 If( opened == True && currentSec >= 14*3600 + 50*60 && currentSec <= 14*3600 + 52*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)); } } }

谁写的问谁吧,ai写的还是问ai好或者去看置顶的付费代写服务