
等级: 新手上路
- 注册:
- 2024-8-12
- 曾用名:
|
// ---------- 参数声明 ----------
INPUT:
M(65, 5, 300, 30), // 布林中轨周期
N(1.5, 0.1, 10, 0.1), // 布林带宽倍数
D(13, 1, 100, 1), // 止损追踪周期
RiskPerTrade(0.01, 0.005, 0.05, 0.001), // 单笔风险比例
ContractSize(300, 1, 1000, 1); // 合约乘数(股指300元/点)
// ---------- 全局变量声明 ----------
VARS:
Position(0), // 持仓方向:0空仓,1多头,-1空头
TradedThisBar(0), // 本K线已交易标记
MID(0), UPPER(0), LOWER(0),// 布林通道
HC30(0), LC30(0), // 30周期高低点
ATR(0), // 波动率
HighestEntry(0), LowestEntry(0), // 入场价
StopLossLong(0), StopLossShort(0); // 动态止损价
// ---------- 初始化 ----------
IF BARPOS = 1 THEN BEGIN
Position := 0;
TradedThisBar := 0;
END
// ---------- 指标计算(避免未来函数)----------
MID := REF(MA(CLOSE, M), 1);
UPPER := MID + N * REF(STD(CLOSE, M), 1);
LOWER := MID - N * REF(STD(CLOSE, M), 1);
HC30 := REF(HHV(C, 30), 1);
LC30 := REF(LLV(C, 30), 1);
ATR := MA(TR, 20); // 波动率基准
// ---------- 动态仓位计算 ----------
Capital := TACCOUNT(19); // 可用资金
UnitSize := INTPART((RiskPerTrade * Capital) / (ATR * ContractSize));
UnitSize := MAX(1, UnitSize); // 至少1手
// ---------- 信号生成(本K线未交易时执行)---------
IF TradedThisBar = 0 THEN BEGIN
// 多空突破信号(加入成交量过滤)
VolFilter := VOL > MA(VOL, 20) * 1.5;
开多信号 := VolFilter AND C > HC30 AND CROSS(H, UPPER);
开空信号 := VolFilter AND C < LC30 AND CROSS(LOWER, L);
// 动态止损价(基于持仓最高/低价)
IF Position = 1 THEN StopLossLong := HIGHEST(H, D) - 1.5 * ATR;
IF Position = -1 THEN StopLossShort := LOWEST(L, D) + 1.5 * ATR;
// 平仓信号(止损触发)
平多信号 := LOW <= StopLossLong;
平空信号 := HIGH >= StopLossShort;
// ===== 指令执行 =====
// 1. 先处理平仓
IF 平多信号 AND Position = 1 THEN BEGIN
TSELL(1, 0, LMT, StopLossLong - MINDIFF*2); // 滑点补偿
Position := 0;
TradedThisBar := 1;
END
ELSE IF 平空信号 AND Position = -1 THEN BEGIN
TSELLSHORT(1, 0, LMT, StopLossShort + MINDIFF*2);
Position := 0;
TradedThisBar := 1;
END
// 2. 再处理开仓(平仓后若未交易则开仓)
IF TradedThisBar = 0 THEN BEGIN
IF 开多信号 AND Position <> 1 THEN BEGIN
EntryPrice := MAX(O, UPPER) + MINDIFF*2; // 突破价+滑点
TBUY(1, UnitSize, LMT, EntryPrice);
Position := 1;
HighestEntry := EntryPrice; // 记录入场价
TradedThisBar := 1;
END
ELSE IF 开空信号 AND Position <> -1 THEN BEGIN
EntryPrice := MIN(O, LOWER) - MINDIFF*2;
TBUYSHORT(1, UnitSize, LMT, EntryPrice);
Position := -1;
LowestEntry := EntryPrice;
TradedThisBar := 1;
END
END
END
// ---------- 可视化模块 ----------
DRAWGBK(COLORRGB(18, 23, 30)); // 深色背景
// 绘制布林通道
DRAWSL(UPPER, COLORCYAN, 1);
DRAWSL(MID, COLORGRAY, 1);
DRAWSL(LOWER, COLORMAGENTA, 1);
// 绘制动态止损线
IF Position = 1 THEN DRAWSL(StopLossLong, COLORRED, 1, DOT);
IF Position = -1 THEN DRAWSL(StopLossShort, COLORRED, 1, DOT);
// 持仓状态面板
DRAWTEXTEX(1, 0, 0, '持仓: ' + IFELSE(Position=1, '多', IFELSE(Position=-1, '空', '空仓')), COLORYELLOW);
DRAWTEXTEX(1, 0, 20, 'ATR: ' + NUMTOSTR(ATR, 2), COLORGREEN);
// ---------- 调试日志 ----------
DEBUGFILE('C:\Bollinger.log', 'Time:%.0f Pos=%d Entry=%.2f Stop=%.2f', DATE, Position,
IF(Position=1, HighestEntry, LowestEntry),
IF(Position=1, StopLossLong, StopLossShort));
老师这个是用AI修改的布林系统,加载到图表程序化,不能运行,不会修改,请老师修改下,另外这个代码加载这个调试日志是干啥的 |
|