兄弟朋友们,今天来学习一款量价检测指标,通常我们对市场的理解可以概括为四种状态,那么完全可以用量化指标的方式来直观表示出来。 一、指标核心算法 该指标可以监测四种基本的市场状态: 
图一:量价规律四象限算法附图 1. 价量齐升:价格上涨,成交量也随之增加。 2. 价升量缩:价格走高,但成交量却有所减少。 3. 价跌量增:价格下跌,但成交量却增加。 4. 价量齐跌:价格走低,成交量也萎缩。
算法指标以简单的标签帮助用户快速识别当前市场特征,就像天气预报用符号表示天气变化。 此外,它采用双指标验证机制来追踪趋势: 1. 成交量指标:计算近50天的成交量变化均值。 2. 价格指标:计算近30天的价格变化均值。当两个指标同步变化时,确认趋势有效,避免单一数据的误判。这种验证方式类似于使用两个气压计来判断气压变化。 算法指标还配备了可视化提示系统: 二、实际指标用法指导 短期信号: 确认中期趋势:需要同时满足以下条件: 此外,指标还具备风险管理机制: 三、算法指标的优势特点 自适应调整能力:根据市场波动自动调整参数,采用动态计算方式,更好地适应市场变化。如同手机屏幕根据环境光线自动调节亮度。 多时间维度分析:指标可以同时观察日线级别变化和月线级别趋势,兼顾短期波动和长期方向。 四、总结和建议 当趋势明朗时,顺应趋势: 1. 当价格和成交量同步上升,趋势指标大于1时,建议增加持仓。 2. 当价格和成交量同步下降,趋势指标低于0.8时,建议减少持仓。同时,注意趋势转折的提示,如价格下跌但成交量突然放大等短期反弹信号,以及趋势反转警示。该算法指标将复杂的量价关系转化为直观的视觉信号,适合需要客观决策依据的使用。有对这个算法感兴趣的可以一起评论区交流交流改进下。 价量同升:=C>REF(C,1)&&V>REF(V,1); 价量背离1:=C<REF(C,1)&&V>REF(V,1); 价量背离2:=C>=REF(C,1)&&V<REF(V,1); 价量同降:=C<REF(C,1)&&V<REF(V,1); DRAWRECTREL(10,500,990,500,0); DRAWRECTREL(500,10,500,990,0); 价涨幅1:=(C-REF(C,1))/REF(C,1); 量涨幅1:=(V-REF(V,1))/REF(V,1); 价涨幅:SUM(价涨幅1,0),COLORFF2000,LINETHICK2,LINESTICK; 量涨幅:=SUM(量涨幅1,0); 量涨幅2:=EMA(量涨幅,50)/EMA(价涨幅,30); 量涨幅线:量涨幅/量涨幅2,COLORGRAY,LINETHICK2,LINESTICK; DRAWTEXT_FIX(价量同升,0.9,0.9,1,'价量同升且量较小,低'); DRAWTEXT_FIX(价量同降,0.2,0.9,1,'价量同降,清仓'); DRAWTEXT_FIX(价量背离1,0.2,0.7,1,'价量背离,清仓'); DRAWTEXT_FIX(价量背离2,0.9,0.2,1,'价量背离,观望'); DRAWTEXT_FIX(价量同升,0.2,0.2,1,'价量同升且量大,持'); DRAWNUMBER_FIX(CURRBARSCOUNT=1&&价量同升,0.98,0.9,1,C),COLORRED; DRAWNUMBER_FIX(CURRBARSCOUNT=1&&价量同降,0.28,0.9,1,C),COLORGREEN; DRAWNUMBER_FIX(CURRBARSCOUNT=1&&价量同升,0.28,0.20,1,C),COLORRED; DRAWNUMBER_FIX(CURRBARSCOUNT=1&&价量背离1,0.28,0.7,1,C),COLORGREEN; DRAWNUMBER_FIX(CURRBARSCOUNT=1&&价量背离2,0.98,0.20,1,C),COLORRED;
 #include <iostream> #include <vector> #include <cmath> #include <string> #include <sstream>
struct StockData { double closePrice; // 收盘价 double volume; // 成交量 };
std::pair<double, double> calculatePriceAndVolumeChange(const std::vector<StockData>& data, int index) { if (index <= 0 || index >= data.size()) { return {0.0, 0.0}; } double priceChange = (data[index].closePrice - data[index - 1].closePrice) / data[index - 1].closePrice; double volumeChange = (data[index].volume - data[index - 1].volume) / data[index - 1].volume; return {priceChange, volumeChange}; }
// 简单的移动平均计算 double calculateEMA(const std::vector<double>& data, int period, int index) { if (index < period - 1) { return0.0; } double sum = 0.0; for (int i = index - period + 1; i <= index; ++i) { sum += data[i]; } return sum / period; }
// 判断价量关系 std::string judgePriceVolumeRelation(const std::vector<StockData>& data, int index) { if (index <= 0) { return'Invalid index'; } bool priceUp = data[index].closePrice > data[index - 1].closePrice; bool volumeUp = data[index].volume > data[index - 1].volume;
if (priceUp && volumeUp) { return'价量同升'; } elseif (!priceUp && volumeUp) { return'价量背离1'; } elseif (priceUp && !volumeUp) { return'价量背离2'; } elseif (!priceUp && !volumeUp) { return'价量同降'; } else { return'未知情况'; } }
int main() {
for (size_t i = 1; i < data.size(); ++i) { std::string relation = judgePriceVolumeRelation(data, i); std::cout << '第 ' << i + 1 << ' 天: ' << relation << std::endl;
// 根据关系绘制文本和数字 if (relation == '价量同升') { drawText('价量同升且量较小,低', 0.9, 0.9, '红色'); drawNumber(data[i].closePrice, 0.98, 0.9, '红色'); } elseif (relation == '价量同降') { drawText('价量同降,清仓', 0.2, 0.9, '绿色'); drawNumber(data[i].closePrice, 0.28, 0.9, '绿色'); } elseif (relation == '价量背离1') { drawText('价量背离,清仓', 0.2, 0.7, '绿色'); drawNumber(data[i].closePrice, 0.28, 0.7, '绿色'); } elseif (relation == '价量背离2') { drawText('价量背离,观望', 0.9, 0.2, '灰色'); drawNumber(data[i].closePrice, 0.98, 0.2, '红色'); } }
return0; }
风险提示:本指标仅供技术研究与学习交流使用。市场具有高度不确定性,任何基于本指标的决策都需要自行承担风险,不构成任何投资建议。 

 学术交流:我们专注于市场的学术交流与研究包括自用指标零滞后均线最速曲线,以及自动化程序量化学习。分享知识:田都元帅,敬神常在,爱人如己,我为人人,与人为善,分享快乐!
|