金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 477|回复: 11

我的公式代码,提示函数“FUNCTION GetHistoricalHigh”未定义,如何解决

[复制链接]

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
发表于 2025-4-10 14:09 | 显示全部楼层 |阅读模式
//================ 全局变量声明 ================
VARIABLE: ZigPeriod=3, Cycle=10, Divisor=6;
VARIABLE: StopLoss=76, TickSize=1, Position=1;
VARIABLE: HIST_PRICE_STR='', DataPointer=0;
VARIABLE: OptZigPeriod=0, OptCycle=0, OptDivisor=0, MaxProfit=-99999;
VARIABLE: LastHigh=0, LastLow=0, Trend=1, PreHigh=0, PreLow=0, SwingBar=0, SwingPrice=0;

//================ 函数定义 ================
FUNCTION GetHistoricalHigh(startPos, periodLen);
    LOCAL highestPrice=0, currentPosition=0, startIndex=0, currentPrice=0;
    FOR i = 0 TO periodLen-1 DO
    BEGIN
        currentPosition := startPos - i;
        IF currentPosition < 1 THEN BREAK;
        startIndex := (currentPosition-1)*7 + 1;
        currentPrice := STRTONUM(STRMID(HIST_PRICE_STR, startIndex, 6));
        IF currentPrice > highestPrice THEN highestPrice := currentPrice;
    END;
    RETURN highestPrice;
END;

FUNCTION GetHistoricalLow(startPos, periodLen);
    LOCAL lowestPrice=999999, currentPosition=0, startIndex=0, currentPrice=0;
    FOR i = 0 TO periodLen-1 DO
    BEGIN
        currentPosition := startPos - i;
        IF currentPosition < 1 THEN BREAK;
        startIndex := (currentPosition-1)*7 + 1;
        currentPrice := STRTONUM(STRMID(HIST_PRICE_STR, startIndex, 6));
        IF currentPrice < lowestPrice THEN lowestPrice := currentPrice;
    END;
    RETURN lowestPrice;
END;

FUNCTION CalculateProfit(startPointer, zigPeriod, cycle, divisor);
    LOCAL tempProfit=0, currentPointer=0, currentTrend=1, lastPivot=0, lastPrice=0, zigTemp=0;
    currentPointer := startPointer;
   
    FOR i = 1 TO 100 DO
    BEGIN
        currentPointer := currentPointer - 1;
        IF currentPointer < 1 THEN currentPointer := 1;
        
        currentPrice := STRTONUM(STRMID(HIST_PRICE_STR, (currentPointer-1)*7+1, 6));
        H1 := GetHistoricalHigh(currentPointer, cycle);
        L1 := GetHistoricalLow(currentPointer, cycle);
        zigTemp := (H1 - L1)/L1*100/divisor;
        
        // 趋势判断
        IF currentTrend = 1 THEN
        BEGIN
            IF currentPrice <= lastPrice*(1 - zigTemp/100) AND (i - lastPivot) >= zigPeriod THEN
            BEGIN
                currentTrend = -1;
                lastPivot = i;
                lastPrice = currentPrice;
            END;
        END
        ELSE
        BEGIN
            IF currentPrice >= lastPrice*(1 + zigTemp/100) AND (i - lastPivot) >= zigPeriod THEN
            BEGIN
                currentTrend = 1;
                lastPivot = i;
                lastPrice = currentPrice;
            END;
        END;
        
        // 收益计算
        IF currentTrend = 1 THEN
            tempProfit += STRTONUM(STRMID(HIST_PRICE_STR, currentPointer*7+1, 6)) - currentPrice;
        ELSE
            tempProfit -= STRTONUM(STRMID(HIST_PRICE_STR, currentPointer*7+1, 6)) - currentPrice;
    END;
    RETURN tempProfit;
END;

//================ 初始化模块 ================
IF BARPOS=1 THEN
BEGIN
    HIST_PRICE_STR := '0000.00';
    FOR i = 2 TO 200;
        HIST_PRICE_STR := HIST_PRICE_STR + ',0000.00';
    DataPointer := 0;
END;

//================ 数据更新模块 ================
BEGIN
    IF STRLEN(HIST_PRICE_STR) > 1400 THEN
        HIST_PRICE_STR := STRMID(HIST_PRICE_STR, 7, 1393);
    HIST_PRICE_STR := HIST_PRICE_STR + NUMTOSTR(CLOSE,2) + ',';
    DataPointer := DataPointer + 1;
END;

//================ 参数优化模块 ================
IF BARPOS MOD 100 = 0 THEN
BEGIN
    ZigStart=2; ZigEnd=5; ZigStep=1;
    CycleStart=5; CycleEnd=20; CycleStep=1;
    DivisorStart=4; DivisorEnd=8; DivisorStep=1;
   
    MaxProfit = -99999;
    FOR ZigPeriodTemp = ZigStart TO ZigEnd STEP ZigStep;
    BEGIN
        FOR CycleTemp = CycleStart TO CycleEnd STEP CycleStep;
        BEGIN
            FOR DivisorTemp = DivisorStart TO DivisorEnd STEP DivisorStep;
            BEGIN
                CurrentProfit = CalculateProfit(DataPointer, ZigPeriodTemp, CycleTemp, DivisorTemp);
                IF CurrentProfit > MaxProfit THEN
                BEGIN
                    MaxProfit = CurrentProfit;
                    OptZigPeriod = ZigPeriodTemp;
                    OptCycle = CycleTemp;
                    OptDivisor = DivisorTemp;
                END;
            END;
        END;
    END;
   
    ZigPeriod = OptZigPeriod;
    Cycle = OptCycle;
    Divisor = OptDivisor;
    DRAWTEXT(BARSTATUS=2, HIGH, 'Optimal:Z='+NUMTOSTR(ZigPeriod,0)+' C='+NUMTOSTR(Cycle,0)+' D='+NUMTOSTR(Divisor,0)),COLORYELLOW;
END;

//================ 策略逻辑 ================
H1 = GetHistoricalHigh(BARPOS, Cycle);
L1 = GetHistoricalLow(BARPOS, Cycle);
ZigPercent = (H1-L1)/L1*100/Divisor;

T1 = TIME=145800;
T2 = TIME=022800;
T5 = TIME<022700 OR TIME>085500;
T6 = TIME<145000 OR TIME>185500;

IF BARPOS=1 THEN
BEGIN
    LastHigh = HIGH;
    LastLow = LOW;
    PreHigh = HIGH;
    PreLow = LOW;
    SwingBar = 1;
END
ELSE
BEGIN
    IF Trend=1 THEN
    BEGIN
        IF HIGH > PreHigh THEN PreHigh = HIGH;
        IF LOW <= PreHigh*(1-ZigPercent/100) AND (BARPOS - SwingBar) >= ZigPeriod THEN
        BEGIN
            Trend = -1;
            SwingPrice = PreHigh;
            SwingBar = BARPOS;
            PreLow = LOW;
        END;
    END
    ELSE
    BEGIN
        IF LOW < PreLow THEN PreLow = LOW;
        IF HIGH >= PreLow*(1+ZigPercent/100) AND (BARPOS - SwingBar) >= ZigPeriod THEN
        BEGIN
            Trend = 1;
            SwingPrice = PreLow;
            SwingBar = BARPOS;
            PreHigh = HIGH;
        END;
    END;
END;

//================ 交易信号 ================
BuySignal = Trend=1 AND BARPOS>=SwingBar+1;
SellSignal = Trend=-1 AND BARPOS>=SwingBar+1;

BUY(BuySignal AND HOLDING=0 AND T6 AND T5, Position);
BUYSHORT(SellSignal AND HOLDING=0 AND T6 AND T5, Position);
SELL(SellSignal OR T1 OR T2, 0);
SELLSHORT(BuySignal OR T1 OR T2, 0);

//================ 风控模块 ================
IF HOLDING>0 AND LOW<=ENTRYPRICE-StopLoss*MINDIFF THEN SELL(1, Position);
IF HOLDING<0 AND HIGH>=ENTRYPRICE+StopLoss*MINDIFF THEN SELLSHORT(1, Position);

//================ 图形输出 ================
DRAWTEXT(BARSTATUS=2 AND BARPOS=SwingBar, SwingPrice, 'SWING:'+NUMTOSTR(SwingPrice,2)),COLORYELLOW;
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-4-10 14:11 | 显示全部楼层
目前ai没办法完美编写的,很多细节需要自己修改
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
 楼主| 发表于 2025-4-10 14:16 | 显示全部楼层
技术008 发表于 2025-4-10 14:11
目前ai没办法完美编写的,很多细节需要自己修改

麻烦你,帮我修改修改,我是菜鸟,先谢谢啦。
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-4-10 14:17 | 显示全部楼层
请给出策略完整中文描述
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
 楼主| 发表于 2025-4-10 14:18 | 显示全部楼层
代码解释 1. 参数优化:通过遍历ZigPeriod、周期、除数参数组合,回测历史收益选择最优参数。 2. 趋势判断:基于Zig指标计算历史高低价,判断当前趋势方向(上涨/下跌)。 3. 交易信号:根据趋势方向生成买卖信号,并结合特定时间条件(如T1/T2)限制交易时段。 4. 风控机制:设置止损条件,当价格波动超过止损阈值时强制平仓。 5. 数据管理:维护历史价格字符串,定期更新并截断过长数据。  控制流图 mermaid   flowchart TD
    subgraph 初始化模块
    A[初始化历史价格字符串] --> B[设置数据指针]
    end

    subgraph 数据更新模块
    C[追加当前收盘价] --> D{字符串过长?}
    D -->|是| E[截断字符串]
    D -->|否| F[更新指针]
    end

    subgraph 参数优化模块
    G{是否到100周期?} -->|是| H[遍历ZigPeriod参数]
    H --> I[遍历周期参数]
    I --> J[遍历除数参数]
    J --> K[计算参数组合收益]
    K --> L[更新最优参数]
    L --> J
    J --> H
    I --> H
    H --> G
    end

    subgraph 策略逻辑模块
    M[计算历史高低价] --> N[计算Zig指标]
    O{当前趋势方向?} -->|上涨| P[更新最高价]
    O -->|下跌| Q[更新最低价]
    P --> R{满足趋势反转条件?}
    Q --> R
    R -->|是| S[切换趋势方向]
    S --> T[记录拐点价格]
    end

    subgraph 交易执行模块
    U{生成买卖条件} --> V[执行开仓]
    W{风控触发?} -->|是| X[强制平仓]
    V --> Y[图形输出拐点]
    end

    A --> C
    F --> G
    G --> C
    G --> M
    T --> O
    U --> W
    X --> U
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-4-10 14:35 | 显示全部楼层
这种不好编写,另外zig无法用于策略的,它属于未来函数的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
 楼主| 发表于 2025-4-10 14:35 | 显示全部楼层
技术008 发表于 2025-4-10 14:17
请给出策略完整中文描述

中文策略已发,我的公式是在逐K计算模式下运行的。麻烦你了。
回复

使用道具 举报

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
 楼主| 发表于 2025-4-10 14:36 | 显示全部楼层
技术008 发表于 2025-4-10 14:35
这种不好编写,另外zig无法用于策略的,它属于未来函数的

公式中已经没有未来函数了,最主要的是,实时优化参数那部分。

补充内容 (2025-4-10 14:38):
名取的ZIG,但是代码中已经用别的函数代替了,没有未来函数。
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-4-10 14:38 | 显示全部楼层
你这个描述等于没有描述的,工作人员无法看懂的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

11

帖子

11

积分

Rank: 1

等级: 新手上路

注册:
2025-4-10
曾用名:
 楼主| 发表于 2025-4-10 14:40 | 显示全部楼层
技术008 发表于 2025-4-10 14:38
你这个描述等于没有描述的,工作人员无法看懂的

交易策略那部分,已经可以使用了,后加上的是实时参数优化那部分提示错误,还请大佬帮帮忙。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 04:49 , Processed in 0.175921 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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