金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 237|回复: 5

有没有大神帮忙检查下代码的问题

[复制链接]

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2025-6-14
曾用名:
发表于 2025-6-17 14:00 | 显示全部楼层 |阅读模式
// 螺纹钢期货30分钟均线震荡突破策略(金字塔决策交易系统版)
// 适用品种:RB00(螺纹钢主力)
// 周期:30分钟

// 策略参数设置
Params
    Numeric MA5_PERIOD(5);           // 5日均线周期
    Numeric MA10_PERIOD(10);         // 10日均线周期
    Numeric MA60_PERIOD(60);         // 60日均线周期
    Numeric ATR_PERIOD(14);          // ATR计算周期
    Numeric RSI_PERIOD(14);          // RSI计算周期
    Numeric RSI_OVERBOUGHT(70);      // RSI超买阈值
    Numeric RSI_OVERSOLD(30);        // RSI超卖阈值
    Numeric CONSOLIDATION_THRESHOLD(1.2); // 震荡区间阈值系数
    Numeric CONTRACTSIZE(10);        // 合约乘数(螺纹钢10吨/手)
    Numeric MARGINPERCENT(0.10);     // 保证金比例
    Numeric COMMISSIONRATE(0.0001);  // 手续费率
    Numeric SLIPPAGE(2);             // 滑点设置(跳)
    Numeric MAXRISKPERTRADE(0.02);   // 单笔交易最大风险比例
    Numeric MAXPOSITIONS(3);         // 最大持仓手数
    Numeric ENABLE_RSI_FILTER(1);    // 是否启用RSI过滤(1=启用,0=禁用)
    Numeric ENABLE_TIME_FILTER(1);   // 是否启用时间过滤(1=启用,0=禁用)
    Numeric STOP_LOSS_POINTS(20);    // 止损点数
    Numeric TAKE_PROFIT_POINTS(30);  // 止盈点数
    Numeric EQUITY_DRAW_DOWN(0.10);  // 权益回撤百分比;  // 修正:添加缺失的分号
Vars
    Numeric MA5_VAL;
    Numeric MA10_VAL;
    Numeric MA60_VAL;
    Numeric ATR_VALUE;
    Numeric RSI_VALUE;
    Numeric PREV_HIGH;
    Numeric PREV_LOW;
    Numeric PRICE_VOLATILITY;
    Numeric AVG_RANGE;
    Numeric IN_CONSOLIDATION;
    Numeric IS_TRADING_TIME;
    Numeric RSI_CONDITION_LONG;
    Numeric RSI_CONDITION_SHORT;
    Numeric CURRENT_EQUITY;
    Numeric HIGHEST_EQUITY;
    Numeric CURRENT_DRAWDOWN;
    Numeric MAX_DRAWDOWN;
    Numeric PREV_MARKETPOSITION;
    Numeric STOP_LOSS_LONG;
    Numeric STOP_LOSS_SHORT;
    Numeric TAKE_PROFIT_LONG;
    Numeric TAKE_PROFIT_SHORT;
    Numeric EQUITY_PROTECTION;
    Numeric AVL_CAPITAL;
    Numeric MARGIN_PER_LOT;
    Numeric MAX_LOTS_MARGIN;
    Numeric RISK_PER_TRADE;
    Numeric RISK_PER_LOT;
    Numeric MAX_LOTS_RISK;
    Numeric TRADE_LOTS;
    Numeric WIN_RATE;
    Numeric AVG_PROFIT;
    Numeric AVG_LOSS;
    Numeric PROFIT_LOSS_RATIO;
    Numeric MAX_POS;
    Numeric LEVERAGE;
    Numeric TRADE_COUNT;
    Numeric WINNING_TRADES;
    Numeric LOSING_TRADES;
    Numeric TOTAL_PROFIT;
Begin
    // 计算技术指标
    MA5_VAL = MA(CLOSE, MA5_PERIOD);
    MA10_VAL = MA(CLOSE, MA10_PERIOD);
    MA60_VAL = MA(CLOSE, MA60_PERIOD);
    ATR_VALUE = ATR(ATR_PERIOD);
    RSI_VALUE = RSI(CLOSE, RSI_PERIOD);
    PREV_HIGH = REF(HIGH, 1);
    PREV_LOW = REF(LOW, 1);
   
    // 计算价格波动率
    PRICE_VOLATILITY = STDDEV(CLOSE, 20) / MA(CLOSE, 20);
   
    // 计算震荡区间
    AVG_RANGE = MA(HIGH-LOW, 20);
    IN_CONSOLIDATION = IIF((HIGH-LOW) < AVG_RANGE * CONSOLIDATION_THRESHOLD, 1, 0);
   
    // 交易时段过滤
    IS_TRADING_TIME = 1;
    If ENABLE_TIME_FILTER = 1 Then
        IS_TRADING_TIME = IIF((TIME >= 900 AND TIME <= 1130) OR (TIME >= 1330 AND TIME <= 1500) OR (TIME >= 2100 AND TIME <= 2300), 1, 0);
    End If;
   
    // RSI过滤条件
    RSI_CONDITION_LONG = 1;
    RSI_CONDITION_SHORT = 1;
    If ENABLE_RSI_FILTER = 1 Then
        RSI_CONDITION_LONG = IIF(RSI_VALUE < 50, 1, 0);
        RSI_CONDITION_SHORT = IIF(RSI_VALUE > 50, 1, 0);
    End If;
   
    // 更新权益数据
    CURRENT_EQUITY = ACCOUNTBALANCE + MARKETPOSITION * (CLOSE - ENTRYPRICE) * CONTRACTSIZE;
   
    // 正确更新最高权益
    If CURRENT_EQUITY > HIGHEST_EQUITY Then
        HIGHEST_EQUITY = CURRENT_EQUITY;
    End If;
   
    // 计算当前回撤
    CURRENT_DRAWDOWN = (HIGHEST_EQUITY - CURRENT_EQUITY) / HIGHEST_EQUITY;
   
    // 更新最大回撤
    If CURRENT_DRAWDOWN > MAX_DRAWDOWN Then
        MAX_DRAWDOWN = CURRENT_DRAWDOWN;
    End If;
   
    // === 交易信号处理 ===
    // 记录上一周期持仓状态
    PREV_MARKETPOSITION = MARKETPOSITION;
   
    // 止损条件
    STOP_LOSS_LONG = C <= (ENTRYPRICE - STOP_LOSS_POINTS * MINPRICE) AND MARKETPOSITION > 0;
    STOP_LOSS_SHORT = C >= (ENTRYPRICE + STOP_LOSS_POINTS * MINPRICE) AND MARKETPOSITION < 0;
   
    // 止盈条件
    TAKE_PROFIT_LONG = C >= (ENTRYPRICE + TAKE_PROFIT_POINTS * MINPRICE) AND MARKETPOSITION > 0;
    TAKE_PROFIT_SHORT = C <= (ENTRYPRICE - TAKE_PROFIT_POINTS * MINPRICE) AND MARKETPOSITION < 0;
   
    // 权益回撤条件
    EQUITY_PROTECTION = ONEYTOT <= INITMONEY * (1 - EQUITY_DRAW_DOWN);
   
    // 平多条件
    If (MARKETPOSITION > 0 AND (HIGH >= PREV_HIGH OR RSI_VALUE >= RSI_OVERBOUGHT)) OR
       STOP_LOSS_LONG OR TAKE_PROFIT_LONG OR EQUITY_PROTECTION Then
        // 金字塔平仓指令
        Sell("平多", 1, CLOSE, LIMIT, SLIPPAGE);
        PlotText("EXIT", "多单平仓", HIGH, COLOR_RED);
        
        // 记录交易结果
        If EXITPRICE > ENTRYPRICE Then
            WINNING_TRADES = WINNING_TRADES + 1;
        Else
            LOSING_TRADES = LOSING_TRADES + 1;
        End If;
        
        TRADE_COUNT = TRADE_COUNT + 1;
        TOTAL_PROFIT = TOTAL_PROFIT + (EXITPRICE - ENTRYPRICE) * CONTRACTSIZE - (ENTRYPRICE + EXITPRICE) * CONTRACTSIZE * COMMISSIONRATE;
    End If;
   
    // 平空条件
    If (MARKETPOSITION < 0 AND (LOW <= PREV_LOW OR RSI_VALUE <= RSI_OVERSOLD)) OR
       STOP_LOSS_SHORT OR TAKE_PROFIT_SHORT OR EQUITY_PROTECTION Then
        // 金字塔平仓指令
        BuyToCover("平空", 1, CLOSE, LIMIT, SLIPPAGE);
        PlotText("EXIT", "空单平仓", LOW, COLOR_GREEN);
        
        // 记录交易结果
        If ENTRYPRICE > EXITPRICE Then
            WINNING_TRADES = WINNING_TRADES + 1;
        Else
            LOSING_TRADES = LOSING_TRADES + 1;
        End If;
        
        TRADE_COUNT = TRADE_COUNT + 1;
        TOTAL_PROFIT = TOTAL_PROFIT + (ENTRYPRICE - EXITPRICE) * CONTRACTSIZE - (ENTRYPRICE + EXITPRICE) * CONTRACTSIZE * COMMISSIONRATE;
    End If;
   
    // 开仓条件 - 仅当没有持仓时检查
    If MARKETPOSITION = 0 AND BARINDEX > MA60_PERIOD AND IS_TRADING_TIME = 1 Then
        // 仓位计算
        AVL_CAPITAL = AVAILABLEFUNDS;
        MARGIN_PER_LOT = CLOSE * CONTRACTSIZE * MARGINPERCENT;
        MAX_LOTS_MARGIN = FLOOR(AVL_CAPITAL / MARGIN_PER_LOT);
        RISK_PER_TRADE = MAXRISKPERTRADE * AVL_CAPITAL;
        RISK_PER_LOT = ATR_VALUE * CONTRACTSIZE;
        MAX_LOTS_RISK = FLOOR(RISK_PER_TRADE / RISK_PER_LOT);
        TRADE_LOTS = MAX(0, MIN(MAXPOSITIONS, MIN(MAX_LOTS_MARGIN, MAX_LOTS_RISK)));
        
        // 开多条件
        If TRADE_LOTS > 0 AND CLOSE > MA10_VAL AND CLOSE < OPEN AND LOW >= MA5_VAL AND IN_CONSOLIDATION = 1 AND RSI_CONDITION_LONG = 1 Then
            // 金字塔开多指令
            Buy("开多", TRADE_LOTS, CLOSE, LIMIT, SLIPPAGE);
            PlotText("ENTRY", "开多", LOW, COLOR_BLUE);
        End If;
        
        // 开空条件
        If TRADE_LOTS > 0 AND CLOSE < MA10_VAL AND CLOSE > OPEN AND HIGH <= MA5_VAL AND IN_CONSOLIDATION = 1 AND RSI_CONDITION_SHORT = 1 Then
            // 金字塔开空指令
            SellShort("开空", TRADE_LOTS, CLOSE, LIMIT, SLIPPAGE);
            PlotText("ENTRY", "开空", HIGH, COLOR_MAGENTA);
        End If;
    End If;
   
    // === 图表绘制 ===
    // 绘制均线
    PlotLine("MA5", MA5_VAL, COLOR_YELLOW, 1);
    PlotLine("MA10", MA10_VAL, COLOR_CYAN, 1);
    PlotLine("MA60", MA60_VAL, COLOR_RED, 1);
   
    // 标记震荡区间
    If IN_CONSOLIDATION = 1 Then
        SetPlotColor("MA10", COLOR_GREEN);
        SetPlotColor("MA60", COLOR_GREEN);
    End If;
   
    // 绘制持仓状态
    If MARKETPOSITION > 0 Then
        PlotText("POSITION", "持多仓", LOW, COLOR_BLUE);
    End If;
   
    If MARKETPOSITION < 0 Then
        PlotText("POSITION", "持空仓", HIGH, COLOR_MAGENTA);
    End If;
   
    // 绘制止损止盈水平
    If MARKETPOSITION > 0 Then
        PlotLine("STOP_LOSS", ENTRYPRICE - STOP_LOSS_POINTS * MINPRICE, COLOR_RED, 2, STYLE_DASH);
        PlotLine("TAKE_PROFIT", ENTRYPRICE + TAKE_PROFIT_POINTS * MINPRICE, COLOR_GREEN, 2, STYLE_DASH);
    End If;
   
    If MARKETPOSITION < 0 Then
        PlotLine("STOP_LOSS", ENTRYPRICE + STOP_LOSS_POINTS * MINPRICE, COLOR_RED, 2, STYLE_DASH);
        PlotLine("TAKE_PROFIT", ENTRYPRICE - TAKE_PROFIT_POINTS * MINPRICE, COLOR_GREEN, 2, STYLE_DASH);
    End If;
   
    // === 回测绩效统计 ===
    If ISLASTBAR Then
        // 计算胜率
        WIN_RATE = IIF(TRADE_COUNT > 0, WINNING_TRADES / TRADE_COUNT * 100, 0);
        
        // 计算平均盈亏比
        AVG_PROFIT = IIF(WINNING_TRADES > 0, TOTAL_PROFIT / WINNING_TRADES, 0);
        AVG_LOSS = IIF(LOSING_TRADES > 0, TOTAL_PROFIT / LOSING_TRADES, 0);
        PROFIT_LOSS_RATIO = IIF(AVG_LOSS < 0, ABS(AVG_PROFIT / AVG_LOSS), 0);
        
        // 计算杠杆倍数
        MAX_POS = MAX(ABS(BKPOS), ABS(SKPOS));
        LEVERAGE = IIF(MAX_POS > 0, MAX_POS * CLOSE * CONTRACTSIZE * MARGINPERCENT / INITMONEY, 0);
        
        // 绘制绩效统计
        PlotLine("EQUITY", ACCOUNTBALANCE, COLOR_PURPLE, 2);
        
        // 输出绩效报告
        Comment("策略绩效统计:" + NEWLINE +
                "总交易次数: " + STR(TRADE_COUNT) + NEWLINE +
                "盈利交易: " + STR(WINNING_TRADES) + NEWLINE +
                "亏损交易: " + STR(LOSING_TRADES) + NEWLINE +
                "胜率: " + STR(ROUND(WIN_RATE, 2)) + "%" + NEWLINE +
                "总盈利: " + STR(ROUND(TOTAL_PROFIT, 2)) + NEWLINE +
                "最大回撤: " + STR(ROUND(MAX_DRAWDOWN * 100, 2)) + "%" + NEWLINE +
                "盈亏比: " + STR(ROUND(PROFIT_LOSS_RATIO, 2)) + NEWLINE +
                "最大杠杆: " + STR(ROUND(LEVERAGE, 2)));
    End If;
End;
回复

使用道具 举报

40

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-6-17 14:01 | 显示全部楼层
抱歉这种tb的不好直接翻译的,建议给出完整策略描述
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2025-6-14
曾用名:
 楼主| 发表于 2025-6-17 14:14 | 显示全部楼层
技术008 发表于 2025-6-17 14:01
抱歉这种tb的不好直接翻译的,建议给出完整策略描述

价格在10均线下和60均线上的的区间,向上突破5均线后,收阴线,不破5日均线,开多单。止盈在上一跟K线的最低点-2,开仓以后的止损也在上一根K线的最低点-2,仓位的话,都是满仓交易
回复

使用道具 举报

40

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-6-17 14:17 | 显示全部楼层
N5 := 5;
N10 := 10;
N60 := 60;
nOffset := 2;  // 止损偏移量

// 计算均线
MA5 := MA(C, N5);
MA10 := MA(C, N10);
MA60 := MA(C, N60);

// 条件判断
bPriceZone := C < MA10 AND C > MA60;  // 价格在10日线下和60日线上
bBreakMA5 := CROSS(C, MA5);  // 向上突破5日线
bIsYinXian := C < O;  // 收阴线
bNotBreakMA5 := L > MA5;  // 不跌破5日线

// 开仓条件
bEntryCondition := bPriceZone AND bBreakMA5 AND bIsYinXian AND bNotBreakMA5;

// 止损条件
bStopLossCondition := L <= (REF(L, 1) - nOffset);  // 价格触及止损位

// 交易指令
IF bEntryCondition AND HOLDING = 0 THEN
    BUY(1, 1, MARKETr);
   
IF bStopLossCondition AND HOLDING > 0 THEN
    SELL(1, 1, MARKETr);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2025-6-14
曾用名:
 楼主| 发表于 2025-6-19 21:36 | 显示全部楼层
技术008 发表于 2025-6-17 14:17
N5 := 5;
N10 := 10;
N60 := 60;

多头开仓条件包括价格在MA10之下和MA60之上,向上涨突破前一个60均线下方转折到5.10.60之上的高点,之后收阴线或者十字线,收盘价不突破5日均线, 空头开仓条件包括价格在MA10之上和MA60之下,向上涨突破前一个向上涨突破前一个60均线上方转折到5.10.60之下的低点点,之后收阳线或者十字线,收盘价不突破5日均线。  移动止损止盈为上一根K线的最低点最高点-5
回复

使用道具 举报

40

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-6-20 09:16 | 显示全部楼层
// 定义均线参数
MA5:MA(CLOSE,5);  // 5日均线
MA10:MA(CLOSE,10); // 10日均线
MA60:MA(CLOSE,60); // 60日均线
// 多头条件判断
COND1:=CLOSE<MA10 AND CLOSE>MA60;  // 价格在MA10之下和MA60之上
COND2:=REF(LOW,1)<REF(MA60,1) AND LOW>MA60; // 前一日低点在60均线下方,当日低点在60均线上方
COND3:=HIGH>REF(HHV(HIGH,10),1); // 突破前10日高点
COND4:=CLOSE<OPEN OR (ABS(CLOSE-OPEN)/OPEN<0.005); // 收阴线或十字线
COND5:=CLOSE<=MA5; // 收盘价不突破5日均线
LONG_COND:=COND1 AND COND2 AND COND3 AND COND4 AND COND5; // 多头开仓条件
// 空头条件判断
COND6:=CLOSE>MA10 AND CLOSE<MA60; // 价格在MA10之上和MA60之下
COND7:=REF(HIGH,1)>REF(MA60,1) AND HIGH<MA60; // 前一日高点在60均线上方,当日高点在60均线下方
COND8:=LOW<REF(LLV(LOW,10),1); // 跌破前10日低点
COND9:=CLOSE>OPEN OR (ABS(CLOSE-OPEN)/OPEN<0.005); // 收阳线或十字线
COND10:=CLOSE>=MA5; // 收盘价不突破5日均线
SHORT_COND:=COND6 AND COND7 AND COND8 AND COND9 AND COND10; // 空头开仓条件
// 止损止盈条件
LONG_STOP:=REF(LOW,1)-5*mindiff; // 多头止损位(上一K线最低点-5)
LONG_PROFIT:=REF(HIGH,1)-5*mindiff; // 多头止盈位(上一K线最高点-5)
SHORT_STOP:=REF(HIGH,1)+5*mindiff; // 空头止损位(上一K线最高点+5)
SHORT_PROFIT:=REF(LOW,1)+5*mindiff; // 空头止盈位(上一K线最低点+5)
// 交易指令
BUY(LONG_COND,1,LIMITR,CLOSE); // 多头开仓
SELL(CLOSE<=LONG_STOP OR CLOSE>=LONG_PROFIT,0,MARKET); // 多头平仓(止损或止盈)
buySHORT(SHORT_COND,1,LIMITR,CLOSE); // 空头开仓
sellshort(CLOSE>=SHORT_STOP OR CLOSE<=SHORT_PROFIT,0,MARKET); // 空头平仓(止损或止盈)

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-2 02:27 , Processed in 0.167428 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表