

文华财经指标源码:
// ================================
// 多空分界线高级交易系统
// ================================
// 加权高低点计算(用于显示位置)
HH := HHV(HIGH, 1)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 4)/10 +
HHV(HIGH, 4)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 13)/10 +
HHV(HIGH, 40)/10 + HHV(HIGH, 20)/10;
LL := LLV(LOW, 1)/10 + LLV(LOW, 2)/10 + LLV(LOW, 2)/10 + LLV(LOW, 4)/10 +
LLV(LOW, 4)/10 + LLV(LOW, 8)/10 + LLV(LOW, 8)/10 + LLV(LOW, 13)/10 +
LLV(LOW, 40)/10 + LLV(LOW, 20)/10;
// 文字显示偏移参数
HH_B := HHV(HIGH, 1)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 4)/10 +
HHV(HIGH, 4)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 13)/10 +
HHV(HIGH, 40)/10 + HHV(HIGH, 20)/9.8; // 文字往上偏移
LL_B := LLV(LOW, 1)/10 + LLV(LOW, 2)/10 + LLV(LOW, 2)/10 + LLV(LOW, 4)/10 +
LLV(LOW, 4)/10 + LLV(LOW, 8)/10 + LLV(LOW, 8)/10 + LLV(LOW, 13)/10 +
LLV(LOW, 40)/10 + LLV(LOW, 20)/10.8; // 文字往下偏移
// 箭头显示偏移参数
HH_A := HHV(HIGH, 1)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 2)/10 + HHV(HIGH, 4)/10 +
HHV(HIGH, 4)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 8)/10 + HHV(HIGH, 13)/10 +
HHV(HIGH, 40)/10 + HHV(HIGH, 20)/10.3; // 箭头往上偏移
LL_A := LLV(LOW, 1)/10 + LLV(LOW, 2)/10 + LLV(LOW, 2)/10 + LLV(LOW, 4)/10 +
LLV(LOW, 4)/10 + LLV(LOW, 8)/10 + LLV(LOW, 8)/10 + LLV(LOW, 13)/10 +
LLV(LOW, 40)/10 + LLV(LOW, 20)/10; // 箭头往下偏移
// ================================
// 核心多空判断逻辑
// ================================
// 到期时间参数(目前设置为永久有效)
// LHS: IF(DATE > 290105, NULL, 1), NODRAW; // 原到期时间设置
LHS := 1; // 永久有效
MA3 := MA(C, 170) * LHS;
// 识别关键高低点
HH1 := IFELSE(H < REF(H, 1) && REF(H, 1) < REF(H, 2), REF(H, 2), 0);
LL1 := IFELSE(L > REF(L, 1) && REF(L, 1) > REF(L, 2), REF(L, 2), 0);
HH2 := VALUEWHEN(HH1 > 0, HH1);
LL2 := VALUEWHEN(LL1 > 0, LL1);
// 趋势转折点识别
H1 := IFELSE(HH < REF(HH, 1) && LL < REF(LL, 1) &&
REF(OPEN, 1) > CLOSE && OPEN > CLOSE &&
(HHV(OPEN, 0) - CLOSE) > 0, REF(HH, 2), 0);
L1 := IFELSE(LL > REF(LL, 1) && HH > REF(HH, 1) &&
REF(OPEN, 1) < CLOSE && OPEN < CLOSE &&
(CLOSE - LLV(OPEN, 0)) > 0, REF(LL, 2), 0);
// 变量定义
X_X := DATE;
X0 := H1 * LHS, LINETHICK2;
X00 := L1 * LHS;
XXX0 := O * LHS, LINETHICK2;
XXX00 := C * LHS;
XXX000 := H * LHS;
XXX0000 := L * LHS;
// 关键高低点确认
H2 := VALUEWHEN(X0 > 0, X0) * LHS, LINETHICK2;
L2 := VALUEWHEN(X00 > 0, X00) * LHS, LINETHICK2;
// 多空状态判断
K1 := IFELSE(CLOSE > H2, -3, IFELSE(CLOSE < L2, 1, 0));
K2 := VALUEWHEN(K1 <> 0, K1);
G := IFELSE(K2 = 1, H2, L2);
G1 := G;
// ================================
// 止损价格显示系统
// ================================
DRAWLASTBARNUMBER(G1, G1, 0, COLORCYAN);
DRAWLASTBARNUMBER(G1, G1, 0, COLORWHITE), ALIGN0, FONTSIZE30, VALIGN0;
DRAWLASTBARLINE(1, G1, 0, 1, G1, 100, 1), COLORWHITE, DASH;
DRAWLASTBARTEXT(G1, '止损价格'), COLORWHITE, FONTSIZE30;
// ================================
// 价格变量处理
// ================================
X000 := K2 * LHS, LINETHICK2;
TMP := K2 * LHS, LINETHICK2;
W1 := X000 * LHS, LINETHICK2;
X0000 := OPEN * LHS - CLOSE * LHS, LINETHICK2;
W2 := X0000 * LHS, LINETHICK2;
HT := IFELSE(OPEN > CLOSE, OPEN, CLOSE) * LHS, LINETHICK2;
LT := IFELSE(OPEN < CLOSE, OPEN, CLOSE) * LHS, LINETHICK2;
// ================================
// K线着色系统
// ================================
// 多头区域(青色)影线绘制
DRAWLINE(W1 = 1, XXX000 * LHS, W1 = 1, HT, COLORGREEN); // 上影线
DRAWLINE(W1 = 1, XXX0000 * LHS, W1 = 1, LT, COLORGREEN); // 下影线
// 空头区域(红色)影线绘制
DRAWLINE(W1 = -3, XXX000 * LHS, W1 = -3, HT, COLORRED); // 上影线
DRAWLINE(W1 = -3, XXX0000 * LHS, W1 = -3, LT, COLORRED); // 下影线
// K线实体绘制
STICKLINE(W1 > 0, XXX0 * LHS, XXX00, COLORGREEN, 1); // 青色空心K线
STICKLINE(W1 <= 0, XXX0 * LHS, XXX00, COLORRED, 1); // 红色空心K线
STICKLINE(W2 > 0 && W1 <= 0, XXX0 * LHS, XXX00, COLORRED, 0); // 红色实心K线
STICKLINE(W2 > 0 && W1 > 0, XXX0 * LHS, XXX00, COLORGREEN, 0); // 青色实心K线
// ================================
// 趋势线绘制系统
// ================================
// 折竖线绘制
DRAWLINE(TMP = 1 && REF(TMP, 1) = 1, G,
TMP = 1 && REF(TMP, 1) = 1, REF(G, 1), COLORCYAN), DOT; // 青色折竖线
DRAWLINE(TMP = -3 && REF(TMP, 1) = -3, G,
TMP = -3 && REF(TMP, 1) = -3, REF(G, 1), COLORRED), DOT; // 红色折竖线
// 折横线绘制
DRAWSL(K2 = 1, G, 0, 1, 0, COLORCYAN), DOT; // 青色折横线
DRAWSL(K2 = -3, G, 0, 1, 0, COLORRED), DOT; // 红色折横线
// ================================
// 多空信号提示
// ================================
DRAWTEXT(CROSS(TMP, 0), HH, '空'), COLORGREEN, FONTSIZE20;
DRAWTEXT(CROSS(0, TMP), LL, '多'), COLORRED, FONTSIZE20, VALIGN0;
// ================================
// 突破信号系统
// ================================
N3 := BARSLAST(CROSS(W1 > 0, 0.5)) * LHS, LINETHICK2;
N4 := BARSLAST(CROSS(W1 <= 0, 0.5)) * LHS, LINETHICK2;
HH3 := IF(W1 <= 0, REF(HV(H, N4), N3), NULL), COLORYELLOW, DOT;
LL3 := IF(W1 > 0, REF(LV(L, N3), N4), NULL), COLORGREEN, DOT;
B_B := CROSSUP(C, HH3) || REF(ISNULL(HH3), 1) && C > HH3; // 突破做多信号
S_S := CROSSDOWN(C, LL3) || REF(ISNULL(LL3), 1) && C < LL3; // 突破做空信号
DRAWICON(B_B = 1, L, 'ICO145'); // 做多图标
DRAWICON(S_S = 1, H, 'ICO146'); // 做空图标
// ================================
// MACD背离系统
// ================================
DIFF := (EMA(C, 12) - EMA(C, 26)) * LHS, COLORWHITE;
DEA := EMA(DIFF, 9) * LHS, COLORYELLOW;
MACD := 2 * (DIFF - DEA) * LHS, COLORYELLOW;
// 金叉检测
JC := CROSS(DIFF, DEA), NODRAW;
DRAWTEXT(JC, DIFF + 0.8, 'JC'), COLORRED;
JC_COUNT := COUNT(CROSS(DIFF, DEA), 0), NODRAW; // 金叉计数
JC_BARS_LAST := BARSLAST(CROSS(DIFF, DEA)), NODRAW; // 上次金叉至今K线数
JC_PRICE_CURR := IF(BARSLAST(CROSS(DIFF, DEA)) = 0, DIFF, 0), NODRAW; // 当前金叉值
JC_PRICE_LAST := REF(REF(DIFF, JC_BARS_LAST), 1), NODRAW; // 上次金叉值
// 死叉检测
SC := CROSSDOWN(DIFF, DEA), NODRAW;
DRAWTEXT(SC, DIFF + 0.8, 'SC'), COLORGREEN;
SC_COUNT := COUNT(CROSSDOWN(DIFF, DEA), 0), NODRAW; // 死叉计数
SC_BARS_LAST := BARSLAST(CROSSDOWN(DIFF, DEA)), NODRAW; // 上次死叉至今K线数
SC_PRICE_CURR := IF(BARSLAST(CROSSDOWN(DIFF, DEA)) = 0, DIFF, 0), NODRAW; // 当前死叉值
SC_PRICE_LAST := REF(REF(DIFF, SC_BARS_LAST), 1), NODRAW; // 上次死叉值
// ================================
// MACD背离信号判断
// ================================
// 顶背离减空信号
JC_1_2 := IF(JC_PRICE_LAST > 0 AND JC_PRICE_CURR < 0 AND
JC_PRICE_LAST > JC_PRICE_CURR, 1, 0);
DRAWTEXT(JC_1_2, LL_B, '减空'), COLORYELLOW, FONTSIZE18;
DRAWICON(JC_1_2, LL_A, 'ICO4');
JC_1_4 := IF(JC_PRICE_LAST < 0 AND JC_PRICE_CURR < 0 AND
JC_PRICE_LAST > JC_PRICE_CURR, 1, 0);
DRAWTEXT(JC_1_4, LL_B, '减空'), COLORYELLOW, FONTSIZE18;
DRAWICON(JC_1_4, LL_A, 'ICO4');
// 多头信号
JC_2_1 := IF(JC_PRICE_LAST > 0 AND JC_PRICE_CURR > 0 AND
JC_PRICE_LAST < JC_PRICE_CURR, 1, 0);
DRAWTEXT(JC_2_1, LL_B, ' 多'), COLORRED, FONTSIZE18;
DRAWICON(JC_2_1, LL_A, 'ICO4');
// 顶背离减多信号
SC_2_1 := IF(SC_PRICE_LAST > 0 AND SC_PRICE_CURR > 0 AND
SC_PRICE_LAST < SC_PRICE_CURR, 1, 0);
DRAWTEXT(SC_2_1, HH_B, '减多'), COLORYELLOW, FONTSIZE18;
DRAWICON(SC_2_1, H, 'ICO5');
SC_2_3 := IF(SC_PRICE_LAST < 0 AND SC_PRICE_CURR > 0 AND
SC_PRICE_LAST < SC_PRICE_CURR, 1, 0);
DRAWTEXT(SC_2_3, HH_B, '减多'), COLORYELLOW, FONTSIZE18;
DRAWICON(SC_2_3, H, 'ICO5');
// 空头信号
SC_1_2 := IF(SC_PRICE_LAST > 0 AND SC_PRICE_CURR < 0 AND
SC_PRICE_LAST > SC_PRICE_CURR, 1, 0);
DRAWTEXT(SC_1_2, HH_B, '空'), COLORGREEN, FONTSIZE18;
DRAWICON(SC_1_2, H, 'ICO5');
// ================================
// 其他背离提示信号
// ================================
JC_1_1 := IF(JC_PRICE_LAST > 0 AND JC_PRICE_CURR > 0 AND
JC_PRICE_LAST > JC_PRICE_CURR, 1, 0);
DRAWTEXT(JC_1_1, HH_B, '逢高减多'), COLORYELLOW;
DRAWICON(JC_1_1, H, 'ICO5');
JC_2_4 := IF(JC_PRICE_LAST < 0 AND JC_PRICE_CURR < 0 AND
JC_PRICE_LAST < JC_PRICE_CURR, 1, 0);
DRAWTEXT(JC_2_4, LL_B, '注意反弹'), COLORRED;
DRAWICON(JC_2_4, LL_A, 'ICO4');
SC_1_1 := IF(SC_PRICE_LAST > 0 AND SC_PRICE_CURR > 0 AND
SC_PRICE_LAST > SC_PRICE_CURR, 1, 0);
DRAWTEXT(SC_1_1, HH_B, '注意回落'), COLORGREEN;
DRAWICON(SC_1_1, H, 'ICO5');
SC_2_4 := IF(SC_PRICE_LAST < 0 AND SC_PRICE_CURR < 0 AND
SC_PRICE_LAST < SC_PRICE_CURR, 1, 0);
DRAWTEXT(SC_2_4, HH_B, '逢低减空'), COLORYELLOW;
DRAWICON(SC_2_4, H, 'ICO5');
// ================================
// 轨道带系统(注释部分,需要时取消注释)
// ================================
/*
LHS := 1;
A := EMA2(HIGH, 30) * LHS;
B := EMA2(LOW, 30) * LHS;
A1 := EMA2(HIGH, 150) * LHS, LINETHICK2;
B1 := EMA2(LOW, 150) * LHS, LINETHICK2;
S1 := CROSS(CLOSE, EMA2(HIGH, 150)) * LHS, LINETHICK2;
X1 := CROSS(EMA2(LOW, 150), CLOSE) * LHS, LINETHICK2;
WS1 := BARSLAST(S1) + 1 * LHS, LINETHICK2;
WX1 := BARSLAST(X1) + 1 * LHS, LINETHICK2;
SS1 := CROSS(SUM(S1, WX1), 0.5) * LHS, LINETHICK2;
XX1 := CROSS(SUM(X1, WS1), 0.5) * LHS, LINETHICK2;
S := CROSS(CLOSE, EMA2(HIGH, 30)) * LHS, LINETHICK2;
X := CROSS(EMA2(LOW, 30), CLOSE) * LHS, LINETHICK2;
WS := BARSLAST(S) + 1 * LHS, LINETHICK2;
WX := BARSLAST(X) + 1, LINETHICK2;
SS := CROSS(SUM(S, WX), 0.5) * LHS, LINETHICK2;
XX := CROSS(SUM(X, WS), 0.5) * LHS, LINETHICK2;
// 中间轨道带状线
STICKLINE(CLOSE > EMA2(HIGH, 150), EMA2(HIGH, 150),
EMA2(LOW, 150) * LHS, COLORRED, 1);
STICKLINE(CLOSE < EMA2(LOW, 150), EMA2(LOW, 150),
EMA2(HIGH, 150) * LHS, COLORBLUE, 1);
// 上线
PARTLINE(CLOSE > EMA2(HIGH, 150), EMA2(HIGH, 150) * LHS, COLORRED), LINETHICK5;
PARTLINE(CLOSE < EMA2(HIGH, 150), EMA2(HIGH, 150) * LHS, COLORGREEN), LINETHICK5;
// 下线
PARTLINE(CLOSE > EMA2(LOW, 150), EMA2(LOW, 150) * LHS, COLORRED);
PARTLINE(CLOSE < EMA2(LOW, 150), EMA2(LOW, 150) * LHS, COLORBLUE);
// K线特殊着色
STICKLINE(SUM(X, WS) > 0.5 && CLOSE >= OPEN, OPEN, CLOSE, COLORCYAN, 1);
STICKLINE(SUM(X, WS) > 0.5 && CLOSE < OPEN, OPEN, CLOSE, COLORCYAN, 0);
DRAWLINE(SUM(X, WS) > 0.5, HIGH, CLOSE > OPEN, CLOSE, COLORCYAN);
DRAWLINE(SUM(X, WS) > 0.5, LOW, CLOSE > OPEN, OPEN, COLORCYAN);
DRAWLINE(SUM(X, WS) > 0.5, HIGH, CLOSE < OPEN, OPEN, COLORCYAN);
DRAWLINE(SUM(X, WS) > 0.5, LOW, CLOSE < OPEN, CLOSE, COLORCYAN);
DRAWLINE(SUM(X, WS) > 0.5, HIGH, CLOSE = OPEN, LOW, COLORCYAN);
STICKLINE(SUM(S, WX) > 0.5 && CLOSE >= OPEN, OPEN, CLOSE, COLORRED, 1);
STICKLINE(SUM(S, WX) > 0.5 && CLOSE < OPEN, OPEN, CLOSE, COLORRED, 0);
DRAWLINE(SUM(S, WX) > 0.5, HIGH, CLOSE > OPEN, CLOSE, COLORRED);
DRAWLINE(SUM(S, WX) > 0.5, LOW, CLOSE > OPEN, OPEN, COLORRED);
DRAWLINE(SUM(S, WX) > 0.5, HIGH, CLOSE < OPEN, OPEN, COLORRED);
DRAWLINE(SUM(S, WX) > 0.5, LOW, CLOSE < OPEN, CLOSE, COLORRED);
DRAWLINE(SUM(S, WX) > 0.5, HIGH, CLOSE = OPEN, LOW, COLORRED);
// 将蓝色K线变成绿色的
*/