金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 442|回复: 1

海龟交易系统修正

[复制链接]

9

主题

33

帖子

33

积分

Rank: 1

等级: 新手上路

注册:
2024-8-12
曾用名:
发表于 2025-7-20 16:17 来自手机 | 显示全部楼层 |阅读模式
// ---------- 参数声明 ----------
INPUT:
    T20(20, 15, 60, 1),        // 20日通道周期
    T10(10, 10, 30, 1),         // 10日离场通道
    ATRLEN(20, 15, 30, 1),      // ATR计算周期
    RiskPerTrade(0.01, 0.005, 0.05, 0.001), // 风险比例
    ContractSize(10, 1, 100, 1); // 合约乘数

// ---------- 全局变量声明 ----------
VARS:
    Position(0),                // 持仓状态: 0空仓, 1多头, -1空头
    TurtleUnits(0),            // 当前单位数
    TradedThisBar(0),           // 本BAR已交易标记
    T20Hi(0), T20Lo(0),         // 20日高低通道
    T10Hi(0), T10Lo(0),         // 10日高低通道
    T55Hi(0), T55Lo(0),         // 55日高低通道
    AvgTR(0), N(0),             // ATR波动率
    HighestEntry(0), LowestEntry(0), // 最高/最低持仓成本
    StopLossLong(0), StopLossShort(0); // 止损价位

// ---------- 初始化模块 ----------
IF BARPOS = 1 THEN BEGIN
    Position := 0;
    TurtleUnits := 0;
    TradedThisBar := 0;
END

// ---------- 指标计算模块 ----------
// 通道计算(兼容金字塔函数)
T20Hi := REF(HHV(H, T20), 1);
T20Lo := REF(LLV(L, T20), 1);
T10Hi := REF(HHV(H, T10), 1);
T10Lo := REF(LLV(L, T10), 1);
T55Hi := REF(HHV(H, 55), 1);
T55Lo := REF(LLV(L, 55), 1);

// ATR波动率计算(修正REF位置)
AvgTR := MA(TR, ATRLEN);
N := REF(AvgTR, 1);  // 使用前一周期的ATR[5](@ref)

// ---------- 资金管理模块 ----------
// 动态仓位计算(使用金字塔账户函数)
Capital := TACCOUNT(19);  // 获取可用资金[5](@ref)
IF Capital > 0 THEN BEGIN
    TurtleUnitsNum := INTPART((RiskPerTrade * Capital) / (N * ContractSize));
    TurtleUnitsNum := MAX(TurtleUnitsNum, 1);
    TurtleUnitsNum := MIN(TurtleUnitsNum, 4); // 最大4单位
END

// --------- 核心交易逻辑(金字塔图表交易规范)--------
// 空仓入场信号(55日通道优先)
IF Position = 0 AND BARPOS > MAX(T20, 55) AND TradedThisBar = 0 THEN BEGIN
    // 多头入场
    IF H > T55Hi THEN BEGIN
        EntryPrice := T55Hi + MINDIFF;
        BUY(1, TurtleUnitsNum, LIMIT, EntryPrice);  // 图表交易指令[9](@ref)
        Position := 1;
        TurtleUnits := 1;
        HighestEntry := EntryPrice;
        TradedThisBar := 1;
    END
    ELSE IF H > T20Hi THEN BEGIN  // 20日突破
        EntryPrice := T20Hi + MINDIFF;
        BUY(1, TurtleUnitsNum, LIMIT, EntryPrice);
        Position := 1;
        TurtleUnits := 1;
        HighestEntry := EntryPrice;
        TradedThisBar := 1;
    END
   
    // 空头入场
    IF L < T55Lo THEN BEGIN
        EntryPrice := T55Lo - MINDIFF;
        BUYSHORT(1, TurtleUnitsNum, LIMIT, EntryPrice);
        Position := -1;
        TurtleUnits := 1;
        LowestEntry := EntryPrice;
        TradedThisBar := 1;
    END
    ELSE IF L < T20Lo THEN BEGIN
        EntryPrice := T20Lo - MINDIFF;
        BUYSHORT(1, TurtleUnitsNum, LIMIT, EntryPrice);
        Position := -1;
        TurtleUnits := 1;
        LowestEntry := EntryPrice;
        TradedThisBar := 1;
    END
END

// 多头持仓管理
IF Position = 1 THEN BEGIN
    // 移动止损(基于最高入场价)
    StopLossLong := HighestEntry - 2 * N;
   
    // 加仓逻辑(单K线限1次)
    IF TradedThisBar = 0 AND HIGH > HighestEntry + 0.5 * N AND TurtleUnits < 4 THEN BEGIN
        AddPrice := HighestEntry + 0.5 * N;
        AddPrice := INTPART(AddPrice / MINDIFF) * MINDIFF;  // 合规取整[5](@ref)
        BUY(1, TurtleUnitsNum, LIMIT, AddPrice);
        TurtleUnits := TurtleUnits + 1;
        HighestEntry := AddPrice;
        TradedThisBar := 1;
    END
   
    // 离场条件(移动止损/10日突破)
    IF (LOW <= StopLossLong) OR (LOW < T10Lo) THEN BEGIN
        SELL(1, 0, THISCLOSE);  // 本周期收盘价平仓[9](@ref)
        Position := 0;
        TurtleUnits := 0;
        TradedThisBar := 1;
    END
END

// 空头持仓管理(对称逻辑)
IF Position = -1 THEN BEGIN
    StopLossShort := LowestEntry + 2 * N;
   
    IF TradedThisBar = 0 AND LOW < LowestEntry - 0.5 * N AND TurtleUnits < 4 THEN BEGIN
        AddPrice := LowestEntry - 0.5 * N;
        AddPrice := INTPART(AddPrice / MINDIFF) * MINDIFF;
        BUYSHORT(1, TurtleUnitsNum, LIMIT, AddPrice);
        TurtleUnits := TurtleUnits + 1;
        LowestEntry := AddPrice;
        TradedThisBar := 1;
    END
   
    IF (HIGH >= StopLossShort) OR (HIGH > T10Hi) THEN BEGIN
        SELLSHORT(1, 0, THISCLOSE);
        Position := 0;
        TurtleUnits := 0;
        TradedThisBar := 1;
    END
END

// ---------- 可视化模块 ----------
DRAWGBK(1, COLORRGB(25,35,45), COLORRGB(20,30,40), 0);
DRAWTEXTEX(1, 0, 0, 0, '★ 海龟交易系统V2 ★'), COLORYELLOW;
DRAWTEXTEX(1, 0, 20, 0, 'ATR: ' + NUMTOSTR(N, 2)), COLORCYAN;
DRAWTEXTEX(1, 0, 40, 0, '持仓: ' + STRCONCAT(IF(Position=1, '多', IF(Position=-1, '空', '空仓')) + ' | 单位:' + NUMTOSTR(TurtleUnits, 0));
DRAWTEXTEX(1, 0, 60, 0, '止损: ' + NUMTOSTR(StopLossLong, 2)), COLORRED;

// 通道可视化
DRAWSL(C > 0, T20Hi, 0, 0, 2, COLORBLUE);
DRAWSL(C > 0, T20Lo, 0, 0, 2, COLORBLUE);
DRAWSL(C > 0, T55Hi, 0, 0, 2, COLORGREEN);
DRAWSL(C > 0, T55Lo, 0, 0, 2, COLORGREEN);
DRAWSL(C > 0, StopLossLong, 0, 0, 1, COLORRED);

// ---------- 调试日志 ----------
DEBUGFILE('C:\TurtleLog.txt', '时间:%.0f ATR=%.2f 仓位=%d', DATE, N, Position);

这段代码是用ai修改的,不能在图表程序化运行,请老师给修改一下
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-7-21 09:02 | 显示全部楼层
另一个帖中已经回复
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-24 00:00 , Processed in 0.112817 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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