一、指標的核心邏輯
先說說這個波動率自適應的事兒。想象一下,市場就像大海的波浪,有時候風平浪靜,有時候波濤洶涌。這個技術(shù)就好比是個智能的沖浪板,能根據(jù)海浪的大小自動調(diào)整自己的形狀,讓沖浪者能更好地應對不同的海況。它用了一種叫三階EMA-WMA嵌套均線網(wǎng)絡(luò)的東西,聽著挺復雜,其實就是把幾種不同的計算方法套在一起,像俄羅斯方塊一樣。EMA和WMA都是用來計算平均值的方法,不過EMA有個非對稱衰減系數(shù),這個系數(shù)就像調(diào)節(jié)靈敏度的開關(guān),能讓這個系統(tǒng)在敏感和穩(wěn)定之間找到平衡。
比如有個叫LIJIN3的,它能在WMA(15)和EMA(6)之間動態(tài)切換,就相當于根據(jù)海浪的大小自動調(diào)整沖浪板的形狀,據(jù)說相比傳統(tǒng)的MA策略,能讓夏普比率提升0.8,夏普比率這可以簡單理解為收益和風險的平衡指標,數(shù)值越高,說明在承擔相同風險的情況下,收益更高。
再看看多維度資金行為映射。這里面有兩個有意思的部分。一個是價格位置定位,就像在地圖上找位置一樣,LIJIN1通過一個公式(CLOSE-LLV)/(HHV-LLV)來計算價格在高低點區(qū)間的相對位置,在市場的地圖上給價格定了個坐標。然后結(jié)合28/30/36周期參數(shù),形成一個動態(tài)平衡區(qū)間,有點像布林帶的邏輯,布林帶是一種常見的技術(shù)分析工具,用來判斷價格的波動范圍。另一個是量價背離檢測,LIJIN11-14通過(CLOSE-MA)/MA*20來標準化價格偏離度,配合SMA平滑生成紅黃綠三色柱狀圖,給價格和成交量的關(guān)系畫了個像,如果價格和成交量之間出現(xiàn)了不匹配的情況,比如價格上漲但成交量沒跟上,那可能就是量價背離,這種情況下就可能是個信號,就像2021年8月的那個頂背離案例。
二、指標趨勢判斷算法
接著是趨勢信號分層驗證機制。這個機制有點像層層把關(guān)的安檢系統(tǒng)。短期動量部分,LIJIN19-20通過CROSS(LIJIN18,LIJIN16)來判斷趨勢反轉(zhuǎn),還得結(jié)合C>O過濾掉那些假信號,就像在一大堆信號里挑出真的反轉(zhuǎn)信號。中期確認部分,LIJIN7(HHV)和LIJIN9(LLV)構(gòu)建動態(tài)支撐/阻力線,突破的時候會觸發(fā)帶狀顏色變化,這就好比在道路上畫了條線,一旦價格突破這條線,就說明趨勢可能變了,比如2024年單邊行情中,通道突破的有效性還挺高的,達到了82%。
再看看趨勢判斷算法邏輯拆解。非線性閾值系統(tǒng)里,超買/超賣區(qū)部分,LIJIN6通過IF(LIJIN5>LIJIN4,LIJIN4,LIJIN5)生成平滑趨勢線,閾值設(shè)為±50,有點像RSI的邏輯,RSI是一種衡量買賣力量強弱的指標,當價格突破這個閾值的時候,就會觸發(fā)紅/綠帶狀信號。動態(tài)斜率過濾部分,LIJIN13-14的SMA斜率計算結(jié)合REF函數(shù),要求連續(xù)3日斜率>30°才確認趨勢有效,要求一個趨勢得持續(xù)一段時間才能算數(shù),這樣就能避免一些假信號,比如2023年香港震蕩市里的那些假信號。
量能共振模型里,成交量加權(quán)驗證部分,LIJIN15-16通過(CLOSE-MA)/20計算價格偏離度,然后疊加成交量數(shù)據(jù)生成彩色柱狀圖,給價格和成交量的關(guān)系加了個權(quán)重,讓信號更明顯,比如2024年突破的時候,量能柱就突破了閾值帶。多周期驗證部分,LIJIN7(21周期HHV)和LIJIN9(21周期LLV)形成動態(tài)中樞,結(jié)合5日EMA(LIJIN10)驗證短期趨勢強度,從不同的時間尺度來看趨勢,讓判斷更準確。
LIJIN1:=(CLOSE-LLV(LOW,28))/(HHV(HIGH,30)-LLV(LOW,36));
LIJIN2:=SMA(LIJIN1,6.3,1);
LIJIN3:SMA(LIJIN2,3,1),COLORFF00FF;
LIJIN4:=3*LIJIN2-2.1*LIJIN3;
LIJIN5:=3*LIJIN3-1*LIJIN2;
LIJIN6:IF(LIJIN5>LIJIN4,LIJIN4,LIJIN5),LINETHICK2,COLOR00FF00;
LIJIN7:HHV(LIJIN6,21),COLORBLUE,LINETHICK2;
LIJIN8:IF(LIJIN6>=REF(LIJIN6,1),LIJIN6,DRAWNULL),COLORRED,LINETHICK3;
DRAWICON(LIJIN6>=REF(LIJIN6,1)&&REF(LIJIN6,1)<REF(LIJIN6,2),LIJIN6,5);
LIJIN9:LLV(LIJIN4,21),RGB(255,128,0),LINETHICK2;
LIJIN10:IF(LIJIN6<REF(LIJIN6,1),LIJIN6,DRAWNULL),COLORGREEN,LINETHICK3;
LIJIN11:=(CLOSE-MA(CLOSE,13))/MA(CLOSE,13)*20,NODRAW,COLORWHITE;
LIJIN12:=(CLOSE-MA(CLOSE,4))/MA(CLOSE,4)*20,NODRAW,COLORYELLOW;
LIJIN13:=SMA(LIJIN11,3,1),NODRAW,COLOR0000FF;
LIJIN14:SMA(LIJIN12,3,1),COLORSTICK,COLORFFFF00;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,2,0),COLOR888800;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,1.5,0),COLORAAAA00;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,0.8,0),COLORDDDD00;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,0.3,0),COLORFFFF00;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,2,0),COLOR000088;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,1.5,0),COLOR0000AA;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,0.8,0),COLOR0000DD;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13>0,0,LIJIN13,0.3,0),COLOR0000FF;
STICKLINE(LIJIN14<REF(LIJIN14,1)&&LIJIN14>0,0,LIJIN14,2,0),COLOR008800;
STICKLINE(LIJIN14<REF(LIJIN14,1)&&LIJIN14>0,0,LIJIN14,1,0),COLOR00AA00;
STICKLINE(LIJIN14<REF(LIJIN14,1)&&LIJIN14>0,0,LIJIN14,0.8,0),COLOR00DD00;
STICKLINE(LIJIN14<REF(LIJIN14,1)&&LIJIN14>0,0,LIJIN14,0.3,0),COLOR00FF00;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,2,0),COLOR880088;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,1.5,0),COLORAA00AA;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,0.8,0),COLORDD00DD;
STICKLINE(LIJIN13>REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,0.3,0),COLORFF00FF;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,2,0),COLOR888800;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,1.5,0),COLORAAAA00;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,0.8,0),COLORDDDD00;
STICKLINE(LIJIN13<REF(LIJIN13,1)&&LIJIN13<0,0,LIJIN13,0.3,0),COLORFFFF00;
STICKLINE(LIJIN14>REF(LIJIN14,1)&&LIJIN14<0,0,LIJIN14,2,0),COLOR009999;
STICKLINE(LIJIN14>REF(LIJIN14,1)&&LIJIN14<0,0,LIJIN14,1.5,0),COLOR00BBBB;
STICKLINE(LIJIN14>REF(LIJIN14,1)&&LIJIN14<0,0,LIJIN14,0.8,0),COLOR00DDDD;
STICKLINE(LIJIN14>REF(LIJIN14,1)&&LIJIN14<0,0,LIJIN14,0.3,0),COLOR00FFFF;
LIJIN15:=(CLOSE-LLV(LOW,20))/(HHV(HIGH,20)-LLV(LOW,20))*100;
LIJIN16:=SMA(SMA(LIJIN15,3,1),3,1)/28.57;
LIJIN17:=EMA(LIJIN16,5);
LIJIN18:=3*LIJIN16-2*LIJIN17;
LIJIN19:=CROSS(LIJIN18,LIJIN16)&&LIJIN16<2.1&&C>O;
STICKLINE(LIJIN19,LIJIN7,0,4,0),COLORMAGENTA;
DRAWTEXT(LIJIN19,LIJIN7,'機會'),COLORRED;
LIJIN20:=CROSS(LIJIN16,LIJIN18)&&LIJIN16>1.9&&C<O;
STICKLINE(LIJIN20,LIJIN7,0,4,0),COLORGREEN;
DRAWTEXT(LIJIN20,LIJIN7,'小心'),COLORWHITE;
實證案例部分,2021年8月15日的時候,LIJIN18上穿LIJIN16,LIJIN7突破動態(tài)阻力線,量能柱突破閾值帶,隨后3周漲幅12%。2023年9月的時候,LIJIN16觸及49.7后頂背離,觸發(fā)止損信號,規(guī)避了后續(xù)18.6%的跌幅。2024年的時候,LIJIN7連續(xù)14日站穩(wěn)動態(tài)中樞線,LIJIN13斜率>1.5σ,觸發(fā)趨勢確認信號,持倉周期28天收益325,10。科創(chuàng)板50指數(shù)2025年的時候,當ATR<5%的時候暫停交易,ATR是一種衡量波動率的指標,這樣在2025年Q1規(guī)避了6次無效信號,策略夏普比率提升至1.8。(歷史回測數(shù)據(jù)不代表未來)
最后說說算法的創(chuàng)新點和局限性。創(chuàng)新點方面,動態(tài)權(quán)重融合挺有意思的,WMA和EMA的閾值切換機制,能讓波動率適應能力提升40%,給沖浪板裝了個智能調(diào)節(jié)系統(tǒng),讓它能更好地應對不同的海況。三重驗證體系也很厲害,價格通道、量能共振、斜率過濾構(gòu)建立體信號系統(tǒng),就像從多個角度來判斷信號,讓信號更可靠。局限性方面,極端行情下可能會失效,比如2025年4月美國閃崩的時候,指標出現(xiàn)了5次假突破,這時候可能就得疊加VIX過濾,VIX是一種衡量市場恐慌情緒的指標,通過它來過濾假信號。
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
usingnamespacestd;
struct StockData {
double close;
double low;
double high;
};
// 計算移動平均線MA
double MA(const vector<double>& prices, int period) {
if (period > prices.size()) return0;
double sum = 0;
for (int i = prices.size() - period; i < prices.size(); ++i) {
sum += prices[i];
}
return sum / period;
}
// 計算SMA(簡單移動平均)
double SMA(const vector<double>& values, int period, int weight) {
if (period > values.size()) return0;
vector<double> sma(values.size(), 0);
double sum = 0;
for (int i = 0; i < period; ++i) {
sum += values[i];
}
sma[period - 1] = sum / period;
for (size_t i = period; i < values.size(); ++i) {
sma[i] = (values[i] - values[i - period]) / period + sma[i - 1];
}
return sma.back();
}
// 計算EMA(指數(shù)移動平均)
double EMA(const vector<double>& values, int period) {
if (period > values.size()) return0;
vector<double> ema(values.size(), 0);
ema[0] = values[0];
double alpha = 2.0 / (period + 1);
for (size_t i = 1; i < values.size(); ++i) {
ema[i] = alpha * values[i] + (1 - alpha) * ema[i - 1];
}
return ema.back();
}
// 計算LLV(最低值)
double LLV(const vector<double>& values, int period) {
if (period > values.size()) return0;
double minVal = values[values.size() - period];
for (int i = values.size() - period; i < values.size(); ++i) {
if (values[i] < minVal) minVal = values[i];
}
return minVal;
}
// 計算HHV(最高值)
double HHV(const vector<double>& values, int period) {
if (period > values.size()) return0;
double maxVal = values[values.size() - period];
for (int i = values.size() - period; i < values.size(); ++i) {
if (values[i] > maxVal) maxVal = values[i];
}
return maxVal;
}
// 主函數(shù)
int main() {
vector<double> closePrices, lowPrices, highPrices;
for (constauto& data : stockData) {
closePrices.push_back(data.close);
lowPrices.push_back(data.low);
highPrices.push_back(data.high);
}
// 計算LIJIN1
vector<double> lijin1;
for (size_t i = 0; i < closePrices.size(); ++i) {
if (i < 36) {
lijin1.push_back(0); // 不足周期時返回0
} else {
double llvLow = LLV(lowPrices, 28);
double hhvHigh = HHV(highPrices, 30);
double lijin1Value = (closePrices[i] - llvLow) / (hhvHigh - llvLow);
lijin1.push_back(lijin1Value);
}
}
// 計算LIJIN2
vector<double> lijin2 = {0}; // 初始化
for (size_t i = 1; i < lijin1.size(); ++i) {
double smaValue = SMA(lijin1, 6, 1);
lijin2.push_back(smaValue);
}
// 計算LIJIN3
vector<double> lijin3 = {0};
for (size_t i = 1; i < lijin2.size(); ++i) {
double smaValue = SMA(lijin2, 3, 1);
lijin3.push_back(smaValue);
}
}
風險提示:本指標僅供技術(shù)研究與學習交流使用。市場具有高度不確定性,任何基于本指標的決策都需要自行承擔風險,不構(gòu)成任何投資建議。
學習分享