等级: 免费版
- 注册:
- 2024-9-18
- 曾用名:
|

楼主 |
发表于 2025-2-12 21:20
|
显示全部楼层
下面这段代码总说我缺少分号,麻烦帮我看看
//-------------- 平仓 --------------
// 当持有多单且出现空仓平仓信号时
IF HOLDING > 0.5 AND (SKCON OR SPCON) THEN BEGIN
SELL(1, 0, MARKET, CLOSE); // 平多单
T_Array_Profit := numprofit(1);
// 记录该笔交易盈亏到滚动统计数组,并更新统计指标
TC := TC + 1;
TradeIndex := mod(TC, 50);
T_Array[TradeIndex] := T_Array_Profit;
// 窗口长度:如果总交易数不足50,则窗口大小=TC,否则为50
IF TC < 50 THEN
windowSize := TC
ELSE
windowSize := 50;
winCount := 0;
sumWins := 0;
sumLoss := 0;
FOR i := 0 TO windowSize - 1 DO BEGIN
IF T_Array > 0 THEN BEGIN
winCount := winCount + 1;
sumWins := sumWins + T_Array;
END ELSE IF T_Array < 0 THEN BEGIN
sumLoss := sumLoss + (-T_Array);
END;
END;
IF windowSize > 0 THEN
WinRate := winCount / windowSize
ELSE
WinRate := 0;
IF sumLoss <> 0 THEN
ProfitFactor1 := sumWins / sumLoss
ELSE
ProfitFactor1 := 9999;
// 计算滚动最大回撤:遍历窗口内的累计盈亏曲线
cumulative := 0;
peak := 0;
maxDD := 0;
IF TC < 50 THEN
startIndex := 0
ELSE
startIndex := mod(TC, 50);
FOR j := 0 TO windowSize - 1 DO BEGIN
i := mod(startIndex + j, 50);
cumulative := cumulative + T_Array;
IF cumulative > peak THEN
peak := cumulative;
IF (peak - cumulative) > maxDD THEN
maxDD := peak - cumulative;
END;
MaxDD := maxDD;
END;
// 当持有空单且出现多仓平仓信号时
IF HOLDING < -0.5 AND (BKCON OR BPCON) THEN BEGIN
SELLSHORT(1, 0, MARKET, CLOSE); // 平空单
T_Array_Profit := numprofit(1);
// 记录该笔交易盈亏到滚动统计数组,并更新统计指标
TC := TC + 1;
TradeIndex := mod(TC, 50);
T_Array[TradeIndex] := T_Array_Profit;
IF TC < 50 THEN
windowSize := TC
ELSE
windowSize := 50;
winCount := 0;
sumWins := 0;
sumLoss := 0;
FOR i := 0 TO windowSize - 1 DO BEGIN
IF T_Array > 0 THEN BEGIN
winCount := winCount + 1;
sumWins := sumWins + T_Array;
END ELSE IF T_Array < 0 THEN BEGIN
sumLoss := sumLoss + (-T_Array);
END;
END;
IF windowSize > 0 THEN
WinRate := winCount / windowSize
ELSE
WinRate := 0;
IF sumLoss <> 0 THEN
ProfitFactor1 := sumWins / sumLoss
ELSE
ProfitFactor1 := 9999;
cumulative := 0;
peak1 := 0;
maxDD := 0;
IF TC < 50 THEN
startIndex := 0
ELSE
startIndex := mod(TC, 50);
FOR j := 0 TO windowSize - 1 DO BEGIN
i := mod(startIndex + j, 50);
cumulative := cumulative + T_Array;
IF cumulative > peak1 THEN
peak1 := cumulative;
IF (peak1 - cumulative) > maxDD THEN
maxDD := peak1 - cumulative;
END;
MaxDD := maxDD;
END;
就在这句的上面 // 窗口长度:如果总交易数不足50,则窗口大小=TC,否则为50 , 提示缺少分号,试了很多遍都没检查出来问题,AI也问了好几个
补充内容 (2025-2-13 07:01):
//====== 策略效能评估模块 ======
// 全局统计变量:胜率 WinRate、盈亏比 ProfitFactor1、最大回撤 MaxDD
VARIABLE: WinRate = 0.5, ProfitFactor1 = 2, MaxDD = 0;
// 定义交易记录数组(保存最近50笔交易的... |
|