金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 384|回复: 9

请老师纠错

[复制链接]

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
发表于 2025-1-6 11:18 | 显示全部楼层 |阅读模式
// 定义全局变量,用于记录持仓数量// 初始设定已持有底仓 5000 股variable:position(5000); // 定义函数用于计算 KDJ 指标// N(9), M1(3), M2(3)为 KDJ 指标计算的参数默认值function KDJ(N(9), M1(3), M2(3))    // 计算 RSV 值,反映当前收盘价在过去 N 天最高价和最低价范围内的相对位置    RSV = (Close - Lowest(Low, N)) / (Highest(High, N) - Lowest(Low, N)) * 100;    // 计算 K 值,对 RSV 进行加权移动平均,M1 为周期参数    K = SMA(RSV, M1, 1);    // 计算 D 值,对 K 值进行加权移动平均,M2 为周期参数    D = SMA(K, M2, 1);    // 计算 J 值,根据 K 和 D 值通过公式得出    J = 3 * K - 2 * D;    // 返回计算得到的 K、D、J 值    return K, D, J;end// 主程序入口,初始化操作可在此处添加OnInit()beginendOnBarUpdate()begin        ma_buy = EMA(Close, 2);        ma_sell = EMA((SLOPE(Close, 21) * 20 + Close), 42);    /    guide = EMA(((EMA(Close, 4) + EMA(Close, 6) + EMA(Close, 12) + EMA(Close, 24)) / 4), 2);        boundary = MA(Close, 27);        holding = If(ma_buy >= ma_sell, Close, 0);        empty = If(ma_buy < ma_sell, Close, 0);        b_buy = If((CrossOver(guide, boundary) Or CrossOver(ma_buy, ma_sell)) And Close!= 0, Close, 0);      s_sell = If((CrossOver(boundary, guide) Or CrossOver(ma_sell, ma_buy)) And Close!= 0, Close, 0);    // 计算 KDJ 指标值    [K, D, J] = KDJ(9, 3, 3);    // 1 分钟周期买入条件判断,如果买入信号等于持仓信号且 K 值大于 D 值    if (b_buy = holding) and (K > D) then    begin                Buy(800,Open);               position = position + 800;                Commentary("在 1 分钟周期满足条件,买入 800 股");    end       if (empty > 0) and (CrossUnder(K, D)) then    begin                if position >= 800 then        begin                       SellShort(800,Open);                       position = position - 800;            // 输出交易信息到日志或交易记录中            Commentary("在 1 分钟周期满足条件,卖出 800 股");        end    endend
回复

使用道具 举报

38

主题

9989

帖子

9999

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-1-6 11:25 | 显示全部楼层
具体什么错误呢
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-1-6 11:34 | 显示全部楼层
variable:position(5000); 赋值语句无效


涵数N未定义
回复

使用道具 举报

37

主题

9830

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-6 13:21 | 显示全部楼层
麻烦你把代码整理好再贴出来
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-1-6 13:55 | 显示全部楼层
// 定义全局变量,用于记录持仓数量
variable:position(5000);

// 定义函数用于计算 KDJ 指标
function KDJ(N(9), M1(3), M2(3))
    RSV = (Close - Lowest(Low, N)) / (Highest(High, N) - Lowest(Low, N)) * 100;
    K = SMA(RSV, M1, 1);
    D = SMA(K, M2, 1);
    J = 3 * K - 2 * D;
    return K, D, J;
end

// 主程序入口
OnInit()
begin
end

// 每一个新的 tick 数据到来时执行的函数
OnBarUpdate()
begin
    // 计算买线
    ma_buy = EMA(Close, 2);
    // 计算卖线
    ma_sell = EMA((SLOPE(Close, 21) * 20 + Close), 42);
    // 计算指导线
    guide = EMA(((EMA(Close, 4) + EMA(Close, 6) + EMA(Close, 12) + EMA(Close, 24)) / 4), 2);
    // 计算界
    boundary = MA(Close, 27);
    // 计算持仓、空仓等条件判断变量
    holding = If(ma_buy >= ma_sell, Close, 0);
    empty = If(ma_buy < ma_sell, Close, 0);
    b_buy = If((CrossOver(guide, boundary) Or CrossOver(ma_buy, ma_sell)) And Close!= 0, Close, 0);
    s_sell = If((CrossOver(boundary, guide) Or CrossOver(ma_sell, ma_buy)) And Close!= 0, Close, 0);

    // 计算 KDJ 指标值
    [K, D, J] = KDJ(9, 3, 3);

    // 1 分钟周期买入条件判断
    if (b_buy = holding) and (K > D) then
    begin
        // 买入 800 股
        Buy(800,Open);
        // 更新持仓数量
        position = position + 800;
        // 输出交易信息
        Commentary("在 1 分钟周期满足条件,买入 800 股");
    end

    // 1 分钟周期卖出条件判断
    if (empty > 0) and (CrossUnder(K, D)) then
    begin
        // 判断持仓是否足够卖出 800 股
        if position >= 800 then
        begin
            // 卖出 800 股
            SellShort(800,Open);
            // 更新持仓数量
            position = position - 800;
            // 输出交易信息
            Commentary("在 1 分钟周期满足条件,卖出 800 股");
        end
    end

end
回复

使用道具 举报

37

主题

9830

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-6 13:59 | 显示全部楼层
这不是PEL语言编写的代码,自然无法在金字塔中直接运行使用。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-1-6 14:26 | 显示全部楼层
麻烦您改写一下
回复

使用道具 举报

38

主题

9989

帖子

9999

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-1-6 14:28 | 显示全部楼层
您最好给出代码逻辑,直接看其他代码改没那么容易的
您需要整理好策略需求用中文清晰的表达下
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

37

主题

9830

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-6 14:34 | 显示全部楼层
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;

// 计算买线
ma_buy := EMA(Close, 2);
// 计算卖线
ma_sell := EMA((SLOPE(Close, 21) * 20 + Close), 42);
// 计算指导线
guide := EMA(((EMA(Close, 4) + EMA(Close, 6) + EMA(Close, 12) + EMA(Close, 24)) / 4), 2);
// 计算界
boundary := MA(Close, 27);

empty :=ma_buy < ma_sell;
b_buy := (Cross(guide, boundary) Or Cross(ma_buy, ma_sell)) and ma_buy >= ma_sell, Close And Close<> 0;
s_sell := (Cross(boundary, guide) Or Cross(ma_sell, ma_buy)) and ma_buy < ma_sell And Close<> 0;





    // 1 分钟周期买入条件判断
    if (b_buy = 1) and (K > D) then
    begin
        // 买入 800 股
        Buy(1,800,LIMIT,Open);
    end

    // 1 分钟周期卖出条件判断
    if (empty = 1) and (Cross(K, D)) and HOLDING-DAYHOLDING >= 800 then
    begin
            // 卖出 800 股
            Sell(1,800,LIMIT,Open);
    end


注:建议你对照两者之间的逻辑,进行进一步的调整
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-1-6 14:37 | 显示全部楼层
谢谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 04:08 , Processed in 0.140542 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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