等级: 免费版
- 注册:
- 2025-1-2
- 曾用名:
|
// 定义全局变量,用于记录持仓数量// 初始设定已持有底仓 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
|
|