VARIABLE: RSI_G: = 0,RSI_D: = 0 ,MACD_L: = 0 ,MACD_S: = 0;
LC:= REF(CLOSE,1);
RSI:=SMA(MAX(CLOSE-LC,0),7,1)/SMA(ABS(CLOSE-LC),7,1)*100; //RSI计算
IF BKVOL > 0 && RSI > 70 && RSI_G = 0 THEN
BEGIN
RSI_G:= 1;
END
IF BKVOL = 0 && RSI_G = 1 THEN
BEGIN
RSI_G:= 0;
END有持仓时 实时盘中RSI > 70 没满足 RSI_G 会变成赋值成1呢? 历史满足也算吗? 如果要实时条件满足才赋值 赋值不在改变锁定 直到没有持仓初始化。要怎么写呢?
TB 和TB3 用if语句 就很容易实现的
请把完整代码发出来,并把对应情况截图贴一下
// 主模型(任意周期加载)
VARIABLE: RSI_G: = 0,RSI_D: = 0 ,MACD_L: = 0 ,MACD_S: = 0;
YESTERDAY_CLOSE := REF(C, BARSLAST(DATE <> REF(DATE,1)) + 1); // 昨日收盘价,通过BARSLAST定位最后一根K线
YESTERDAY_SETTLE :="DAY$1$SETTLE"; // 主连合约结算价不可用,用昨收代替
NIGHT_OPEN_PRICE := VALUEWHEN(DAYBARPOS=1, O); // 夜盘开盘价,DAYBARPOS=1表示每日第一根K线
// 获取日线周期的开、收、结价
开盘价:=NIGHT_OPEN_PRICE;
结算价:=ROUND2(YESTERDAY_SETTLE,0);
收盘价:=YESTERDAY_CLOSE;
// 计算最大值
MAX_PRICE := MAX1(开盘价, 结算价, 收盘价); // 三个价格中的最大值
// 计算最小值
MIN_PRICE := MIN1(开盘价, 结算价, 收盘价); // 三个价格中的最小值
// 计算中间值(既不是最大也不是最小的值)
MID_PRICE := IFELSE(开盘价<>MAX_PRICE&&开盘价<>MIN_PRICE, 开盘价, IFELSE(结算价<>MAX_PRICE&&结算价<>MIN_PRICE, 结算价, 收盘价));
// 输出降序排列结果(最大值、中间值、最小值)
降序最大值:=MAX_PRICE; // 降序第1位:最大值
降序中间值:=MID_PRICE; // 降序第2位:中间值
降序最小值:=MIN_PRICE; // 降序第3位:最小值
GAO:=开盘价+ ABS(MAX_PRICE - MID_PRICE);
高点:GAO,NODRAW;
DI:=开盘价- ABS(MAX_PRICE - MID_PRICE);
低点:DI,NODRAW;
DRAWICON(VAR1.SC_15,CLOSE,'ICO87');
DRAWICON(VAR1.JC_15,CLOSE,'ICO153');
HH:=HHV(HIGH,1)/5+HHV(HIGH,2)/5+HHV(HIGH,2)/5+HHV(HIGH,5)/5+HHV(HIGH,8)/5;
LL:=LLV(LOW,1)/5+LLV(LOW,2)/5+LLV(LOW,2)/5+LLV(LOW,5)/5+LLV(LOW,8)/5;
H1:= IFELSE(H<REF(H,2) AND REF(H,1)<REF(H,2),REF(H,2),0);
L1:= IFELSE(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);
H2:=VALUEWHEN(H1>0,H1);
L2:=VALUEWHEN(L1>0,L1);
K1:=IFELSE(CLOSE>H2,-3,IFELSE(CLOSE<L2,1,0));
K2:=VALUEWHEN(K1<>0,K1);
TMP1:=K2;
DRAWTEXT(REF(CROSS(TMP1,0),1) ,HH,'空'),COLORGREEN,FONTSIZE13;
DRAWTEXT(REF(CROSS(0,TMP1),1) ,LL,'多'),COLORRED,VALIGN0,FONTSIZE13;
LONG:=REF(CROSS(0,TMP1),1);
SHORT:=REF(CROSS(TMP1,0),1);
MA40:MA(CLOSE,40); //30日均线
LC:= REF(CLOSE,1);
RSI:=SMA(MAX(CLOSE-LC,0),7,1)/SMA(ABS(CLOSE-LC),7,1)*100; //RSI计算
IF BKVOL > 0 && ref(RSI,1) > 70 && RSI_G = 0 THEN
BEGIN
RSI_G:= 1;
END
IF BKVOL = 0 && RSI_G = 1 THEN
BEGIN
RSI_G:= 0;
END
IF SKVOL > 0 && ref(RSI,1) < 21 && RSI_D = 0 THEN
BEGIN
RSI_D:= 1;
END
IF SKVOL = 0 && RSI_D = 1 THEN
BEGIN
RSI_D:= 0;
END
DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26); //MACD计算
DEA:=EMA(DIFF,9); //MACD止盈计算
MACD_L:= REF(DEA ,1) < REF(DEA ,2);
MACD_S:= REF(DEA ,1) > REF(DEA ,2);
ZLOW:=LLV(LOW,10); //周期内低点止损点
HHIGH:=HHV(HIGH,10); //周期内高点止损点
N2:=DAYBARPOS;
GAO_X:=HHV(H,N2)+PY; //最高价
DI_X:=LLV(L,N2)-PY; //最低价
/*DI_X <= DI AND */REF(C,1) > MA40 AND LONG , BK(6); //多头开仓--------
/*GAO_X >= GAO AND*/ REF(C,1) < MA40 AND SHORT , SK(6); //空头开仓-------
//------------------------------------------------------------------------------------------------------------------------
LOCK_ZLOW:= VALUEWHEN(BKVOL=0, ZLOW); // 开多时锁定低点
LOCK_HHIGH:= VALUEWHEN(SKVOL=0, HHIGH); // 开空时锁定高点
多止损:LOCK_ZLOW;
空止损:LOCK_HHIGH;
FLAG_TP_LONG:=IFELSE(BKVOL< 6 ,1,0);//持仓小于开仓数标记 跳过盈利平仓一般逻辑;
COND_TP:= CLOSE - BKPRICE >=YL && BKVOL>0 && FLAG_TP_LONG =0; // 20点盈利平仓条件(多头)
COND_TP, SP(BKVOL/2); //多平仓一半
DRAWICON(COND_TP,H,'ICO71');
COND:=VOL>REF(HHV(VOL,10),1)*4; //标识出成交量大于前K根K线的成交量最大值的VL倍的K线
DRAWICON(COND,O,'ICO162');
C < LOCK_ZLOW, SP; //周期低点
SCPC, SP; //多头15分死叉
COND, SP; //量突然放大
BKVOL>0 && RSI_G >= 78 && MACD_L ,SP; //RSI在高位MACD向下
COND_BB:= PROFIT/MINPRICE/BKVOL/4 <= 4*MINPRICE && BKVOL>0 && FLAG_TP_LONG =1; // 多头保本单
COND_BB,SP; //多头保本平仓
FLAG_TP_SHORT: =IFELSE(SKVOL< 6 ,1,0);
COND_SP:= SKPRICE - CLOSE >= YL && SKVOL > 0 && FLAG_TP_SHORT =0;
COND_SP, BP(SKVOL/2); //空平仓一半
DRAWICON(COND_SP,H,'ICO71');
CLOSE > LOCK_HHIGH,BP; //周期高点
COND, BP; // 量突然放大
JCPC, BP; // 空头15分金叉
SKVOL >0 && RSI_D <= 21 && MACD_S ,BP;//RSI在低位MACD向上
COND_LB:= PROFIT/MINPRICE/SKVOL/4 <= 4*MINPRICE && SKVOL>0 AND FLAG_TP_SHORT =1; // 空头保本单
COND_LB, BP; //空头保本平仓
CURRENT_PROFIT:=PROFIT; //获取当前理论逐笔浮盈
盈亏:CURRENT_PROFIT,NODRAW;
TIME>=1458 && TIME<=1459 && BKVOL>0,SP; // 多仓收盘平仓
TIME>=1458 && TIME<=1459 && SKVOL>0,BP; // 空仓收盘平仓
DRAWICON(TIME>=1458 && TIME<=1459 && BKVOL>0,CLOSE,'ICO91');
DRAWICON(TIME>=1458 && TIME<=1459 && SKVOL>0,CLOSE,'ICO91');
AUTOFILTER; // 启用一开一平信号过滤
CLOSEKLINE(0);
RSI低点:RSI_D,NODRAW;
RSI低点:RSI_G,NODRAW;
现在碰到问题是 有持仓时 RSI >70 条件当时是满足 的 RSI_G会被赋值为1 我的理想情况是 有持仓时 RSI >70 条件满足再被赋值 固定住 直到被平仓再恢复为0
这里有大量参数未给出,也不是完整代码,需要你自己用COMMENTARY PRINT等函数调试,找到原因