等级: 标准版
- 注册:
- 2024-7-17
- 曾用名:
|
楼主 |
发表于 2024-12-31 14:59
|
显示全部楼层
{ 可调整的输入参数 }
INPUT:MA_PERIOD(26), // 移动平均线周期
RSI_PERIOD(13), // RSI 周期
PRICE_DEVIATION_THRESHOLD(0.02), // 价格与移动平均线偏离度阈值
STOP_LOSS_POINTS(10), // 止损点数
TAKE_PROFIT_POINTS(20), // 止盈点数
N1(1); // 交易手数
{ 指标计算 }
VAR:MID(0),
UPPER(0),
LOWER(0),
LC(0),
RSI(0),
hh(0),
ll(0),
HLC(0),
TM(False),
H2(0),
L3(0),
H1(0),
L1(0),
H4(0),
L4(0),
TM2(False),
kd1(False),
PD1(False),
PD2(False),
PD3(False),
PD4(False),
kk1(False),
PK1(False),
PK2(False),
PK3(False),
PK4(False),
enterbars(0),
ENTERPRICE(0);
{ 计算移动平均线及其上下轨 }
MID:=MA(C,MA_PERIOD);
UPPER:=MID + 2*STD(C,MA_PERIOD);
LOWER:=MID - 2*STD(C,MA_PERIOD);
{ 计算前一日收盘价 }
LC:=REF(C,1);
{ 计算 RSI 指标 }
RSI:=SMA(MAX(C - LC,0),RSI_PERIOD,1)/SMA(ABS(C - LC),RSI_PERIOD,1)*100;
{ 记录 09:15 的高低价 }
hh:=VALUEWHEN(TIME=091500,H);
ll:=VALUEWHEN(TIME=091500,L);
{ 计算 09:15 高低价的平均值 }
HLC:=(hh + ll)/2;
{ 定义交易时间范围 }
TM:=(TIME>=091500) AND (TIME<=144500);
{ 假设 TYPEBAR 函数是计算某种 K 线类型的信息,这里可能需要根据金字塔系统的具体函数来替换或完善 }
H2:=TYPEBAR(1,1);
L3:=TYPEBAR(1,3);
{ 计算开多以来的最高价和开空以来的最低价 }
H1:=HHV(H,H2);
L1:=LLV(L,L3);
{ 上一次开仓价格时的最高价和最低价 }
H4:=REF(H,enterbars);
L4:=REF(L,enterbars);
{ 定义 15:00 时刻 }
TM2:=(TIME=150000);
{ 价格与移动平均线的偏离度作为趋势强度的判断依据 }
VAR:PRICE_DEVIATION(0);
PRICE_DEVIATION:=ABS((C - MID)/MID);
{ 开多信号 }
kd1:=CROSS(C,hh) AND TM AND PRICE_DEVIATION > PRICE_DEVIATION_THRESHOLD;
{ 平多信号 }
PD1:=TM2;
PD2:=CROSS(HLC,C);
PD3:=C < L4 - STOP_LOSS_POINTS;
PD4:=CROSS(70,RSI) AND C >= ENTERPRICE + TAKE_PROFIT_POINTS;
{ 开空信号 }
kk1:=CROSS(ll,C) AND TM AND PRICE_DEVIATION > PRICE_DEVIATION_THRESHOLD;
{ 平空信号 }
PK1:=TM2;
PK2:=CROSS(C,HLC);
PK3:=C > H4 + STOP_LOSS_POINTS;
PK4:=CROSS(RSI,30) AND C <= ENTERPRICE - TAKE_PROFIT_POINTS;
{ 交易逻辑 }
{ 开多指令 }
IF kd1 AND TBUYHOLDINGEX('',1,0)=0 THEN
BEGIN
TBUY(1,N1,MKT);
ENTERPRICE:=C;
enterbars:=BARPOS;
END;
{ 平多指令 }
IF (PD1 OR PD2 OR PD3 OR PD4) AND enterbars > 0 THEN
BEGIN
TSELL(1,0,MKT);
enterbars:=0;
END;
{ 开空指令 }
IF kk1 AND TBUYHOLDINGEX('',2,0)=0 THEN
BEGIN
TBUYSHORT(1,N1,MKT);
ENTERPRICE:=C;
enterbars:=BARPOS;
END;
{ 平空指令 }
IF (PK1 OR PK2 OR PK3 OR PK4) AND enterbars > 0 THEN
BEGIN
TSELLSHORT(1,0,MKT);
enterbars:=0;
END;
{ 止损和止盈逻辑 }
IF enterbars > 0 THEN
BEGIN
IF THOLDING > 0 AND C < ENTERPRICE - STOP_LOSS_POINTS THEN
BEGIN
TSELL(1,0,MKT);
enterbars:=0;
END
ELSE IF THOLDING > 0 AND C > ENTERPRICE + TAKE_PROFIT_POINTS THEN
BEGIN
TSELL(1,0,MKT);
enterbars:=0;
END
ELSE IF THOLDING < 0 AND C > ENTERPRICE + STOP_LOSS_POINTS THEN
BEGIN
TSELLSHORT(1,0,MKT);
enterbars:=0;
END
ELSE IF THOLDING < 0 AND C < ENTERPRICE - TAKE_PROFIT_POINTS THEN
BEGIN
TSELLSHORT(1,0,MKT);
enterbars:=0;
END;
END; |
|