
等级: 新手上路
- 注册:
- 2024-8-12
- 曾用名:
|
// ---------- 参数声明 ----------
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修改的,不能在图表程序化运行,请老师给修改一下 |
|