

文华财经6源码:
// BOLL多空交易系统
N:=20; // BOLL周期
P:=2; // BOLL宽度参数
M1:=12; // MACD快线
M2:=26; // MACD慢线
M3:=9; // MACD信号线
KDN:=9; // KD周期
// BOLL指标计算
MID:=MA(CLOSE,N);
UPPER:=MID+P*STD(CLOSE,N);
LOWER:=MID-P*STD(CLOSE,N);
// BOLL方向判断
BOLL_UP:=MID>REF(MID,1); // 中轨向上
BOLL_DOWN:=MID<REF(MID,1); // 中轨向下
// 三线收敛判断(简化版)
BOLL_FLAT:=ABS(MID-REF(MID,1))/MID<0.002 AND ABS(UPPER-REF(UPPER,1))/UPPER<0.002 AND ABS(LOWER-REF(LOWER,1))/LOWER<0.002;
// 斜率判断(规则10)
MID_SLOPE:=(MID-REF(MID,3))/REF(MID,3)*100; // 3周期斜率
NO_DOWN_SLOPE:=BOLL_UP AND MID_SLOPE>=-1; // 中轨向上且无较大向下斜率
NO_UP_SLOPE:=BOLL_DOWN AND MID_SLOPE<=1; // 中轨向下且无较大向上斜率
// MACD计算
DIF:=EMA(CLOSE,M1)-EMA(CLOSE,M2);
DEA:=EMA(DIF,M3);
MACD_GOLD:=CROSS(DIF,DEA); // MACD金叉
MACD_DEAD:=CROSS(DEA,DIF); // MACD死叉
// KD计算
RSV:=(CLOSE-LLV(LOW,KDN))/(HHV(HIGH,KDN)-LLV(LOW,KDN))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
KD_LOW:=K<20 AND D<20; // KD在20附近
KD_HIGH:=K>80 AND D>80; // KD在80附近
// 开多信号(整合所有规则)
// 规则5:中轨向上,上穿或回踩中轨开多且KD在20附近
BUY1:=NO_DOWN_SLOPE AND (CROSS(CLOSE,MID) OR (LOW<=MID AND CLOSE>=MID)) AND KD_LOW;
// 规则4:收敛突破,上穿上轨且MACD金叉
BUY2:=BOLL_FLAT AND CROSS(CLOSE,UPPER) AND MACD_GOLD;
// 规则6:三线走平,下轨开多
BUY3:=BOLL_FLAT AND CROSS(CLOSE,LOWER);
BUY_SIGNAL:=BUY1 OR BUY2 OR BUY3;
// 开空信号(整合所有规则)
// 规则5:中轨向下,下穿或未有效突破中轨开空且KD在80附近
SELL1:=NO_UP_SLOPE AND (CROSS(MID,CLOSE) OR (HIGH>=MID AND CLOSE<=MID)) AND KD_HIGH;
// 规则4:收敛突破,下穿下轨且MACD死叉
SELL2:=BOLL_FLAT AND CROSS(LOWER,CLOSE) AND MACD_DEAD;
// 规则6:三线走平,上轨开空
SELL3:=BOLL_FLAT AND CROSS(UPPER,CLOSE);
SELL_SIGNAL:=SELL1 OR SELL2 OR SELL3;
// 平仓信号定义
// 多单平仓
CLOSE_LONG1:=BOLL_UP AND CROSS(CLOSE,UPPER); // 规则2:中轨向上,上轨卖出
CLOSE_LONG2:=BOLL_DOWN AND CROSS(MID,CLOSE); // 规则2:中轨向下,中轨平多
CLOSE_LONG3:=BOLL_FLAT AND CROSS(CLOSE,UPPER); // 规则6:三线走平,上轨平多
// 空单平仓
CLOSE_SHORT1:=BOLL_DOWN AND CROSS(LOWER,CLOSE); // 规则2:中轨向下,下轨买入
CLOSE_SHORT2:=BOLL_UP AND CROSS(CLOSE,MID); // 规则2:中轨向上,中轨平空
CLOSE_SHORT3:=BOLL_FLAT AND CROSS(LOWER,CLOSE); // 规则6:三线走平,下轨平空
// 持仓状态判断(规则9)
VAR_LAST_BUY:=BARSLAST(BUY_SIGNAL);
VAR_LAST_SELL:=BARSLAST(SELL_SIGNAL);
VAR_LAST_CLOSE_LONG:=BARSLAST(CLOSE_LONG1 OR CLOSE_LONG2 OR CLOSE_LONG3);
VAR_LAST_CLOSE_SHORT:=BARSLAST(CLOSE_SHORT1 OR CLOSE_SHORT2 OR CLOSE_SHORT3);
// 当前持仓状态
IN_LONG:=VAR_LAST_BUY<VAR_LAST_SELL AND VAR_LAST_BUY<VAR_LAST_CLOSE_LONG;
IN_SHORT:=VAR_LAST_SELL<VAR_LAST_BUY AND VAR_LAST_SELL<VAR_LAST_CLOSE_SHORT;
// 有效的平仓信号
CLOSE_LONG_VALID:=IN_LONG AND (CLOSE_LONG1 OR CLOSE_LONG2 OR CLOSE_LONG3);
CLOSE_SHORT_VALID:=IN_SHORT AND (CLOSE_SHORT1 OR CLOSE_SHORT2 OR CLOSE_SHORT3);
// 绘图 - BOLL通道
// 7.BOLL中轨方向向上线用红色,BOLL中轨向下用绿色,走平用白色
MID_UP:IF(BOLL_UP AND NOT(BOLL_FLAT),MID,NULL),COLORRED,LINETHICK2;
MID_DOWN:IF(BOLL_DOWN AND NOT(BOLL_FLAT),MID,NULL),COLORGREEN,LINETHICK2;
MID_FLAT:IF(BOLL_FLAT,MID,NULL),COLORWHITE,LINETHICK2;
UPPER,COLORGRAY,LINETHICK1;
LOWER,COLORGRAY,LINETHICK1;
// 8.提示不要箭头,笑脸,只用"多","空","多平","空平"
// 开仓信号
DRAWTEXT(BUY_SIGNAL,LOW,'多'),COLORRED,ALIGN0;
DRAWTEXT(SELL_SIGNAL,HIGH,'空'),COLORGREEN,ALIGN0;
// 9."多"后第一个提示一定是符合标准的"多平",剔除无效提示
// 平仓信号
DRAWTEXT(CLOSE_LONG_VALID,HIGH,'多平'),COLORCYAN,ALIGN0;
DRAWTEXT(CLOSE_SHORT_VALID,LOW,'空平'),COLORMAGENTA,ALIGN0;
// 方向提示文字
DRAWTEXT(FILTER(BOLL_UP AND NOT(BOLL_FLAT),N),LOWER*0.998,'↗多趋势'),COLORRED;
DRAWTEXT(FILTER(BOLL_DOWN AND NOT(BOLL_FLAT),N),UPPER*1.002,'↘空趋势'),COLORGREEN;
DRAWTEXT(FILTER(BOLL_FLAT,N),MID,'收敛'),COLORYELLOW;
// 斜率状态提示
DRAWTEXT(NO_DOWN_SLOPE,MID*1.002,'只多'),COLORRED;
DRAWTEXT(NO_UP_SLOPE ,MID*0.998,'只空'),COLORGREEN;
// K线图
STICKLINE1(CLOSE>OPEN,CLOSE,OPEN,3,0),COLORRED;
STICKLINE1(CLOSE<=OPEN,CLOSE,OPEN,3,0),COLORGREEN;