在程序化交易中往往需要自己計算K線指標,剛開始希望在網絡上找一些現成的代碼資源,但找了半天相關信息很少,好像只有一個ta-lib金融庫,但使用復雜,而且很多計算方法和一些常用股票軟件不一致,最后的指標結果和這些股票軟件是不同的。
如何獲得K線指標計算公式
后來決定自己動手編,可以從一些常用股票軟件查詢獲得計算公式,文華財經的指標公式查詢如下圖:
文華財經的 [BOLL公式]說明:
N = 26
M = 26
P = 2
MID:MA(CLOSE,N);
TMP2:=STD(CLOSE,M);//標準差:
TOP:MID+PTMP2;
:MID-PTMP2;
標準差STD:M日的(C-MA)的兩次方之和除以M的平方根
查到指標計算公式后,可以自己編程實現,發現實現起來其實很簡單,而且計算方法可以自己選擇,可以做到和自己常用的股票軟件完全一致。
面向對象編程在程序化交易中的優勢
面向對象的C++編程在程序化編程中真是好用,只需要實現一個K線類,各周期K線(如5分鐘線、15分鐘線、小時線、日線等)是K線類的實例用c語言編寫的股票交易系統,程序代碼簡單、短小,把面向對象編程的優點完全發揮出來了。
K線數據可以根據每500ms獲得的Tick數據生成(應用CTP接口可以獲得Tick數據),K線數據的生成后續有時間將在另外一篇文章介紹。
代碼示例
以下是實現代碼示例,示例中只實現了幾個常用的指標,有需要其它指標的民工們可以參照實現代碼自己查找指標公式,然后自己編程實現。
.h K線數據頭文件定義:
#ifndef KLINEDATADEF_H
#define KLINEDATADEF_H
#include
using namespace std;
const unsigned int MAX_BARS = 200;
const unsigned int MAX_LOG_NUM = 20;
class KLineData
{
public:
//K線數據,數組下標0是最新的數據,MAX_BARS是最遠期的數據,以日線為例,0是當日數據,1是昨日數據,100是前100日數據
double Open[MAX_BARS]; ///<開盤價
double Close[MAX_BARS]; ///<收盤價
double High[MAX_BARS]; ///<最高價
double Low[MAX_BARS]; ///<最低價
//移動均線數據
double Ma120[MAX_BARS];
//布林線數據
double BollTop[MAX_BARS];
double BollMid[MAX_BARS];
double BollBottom[MAX_BARS];
//MACD數據
double MacdMacd[MAX_BARS];
double MacdDiff[MAX_BARS];
double MacdDea[MAX_BARS];
//KDJ數據
double KdjK[MAX_BARS];
double KdjD[MAX_BARS];
double KdjJ[MAX_BARS];
//PBX數據
double Pbx1[MAX_BARS];
double Pbx2[MAX_BARS];
double Pbx3[MAX_BARS];
double Pbx4[MAX_BARS];
double Pbx5[MAX_BARS];
double Pbx6[MAX_BARS];
//CCI數據
double Cci[MAX_BARS];
//用于生成K線的一些標志和數據
//新時間周期內是否已經更新生成新K線的標志
bool UpdateFlag;
//一天內的5分鐘K線個數,是5分鐘K線所特有的成員,用于判斷生成新15分鐘、小時K線的時機
int K5BarNum; //{0,1,2,3,4,5,6,.....11,12,.....47}
void CalMa();
void CalLastMa();
void CalBoll();
void CalLastBoll();
void CalMacd();
void CalLastMacd();
void CalKdj();
void CalLastKdj();
void CalPbx();
void CalLastPbx();
void CalCci();
void CalLastCci();
void CalAllIndicators();
void CalAllLastIndicators();
//void CalDmi();
//void CalLastDmi();
void ShiftKlineDataOne();
void LogKlineData();
KLineData();
~KLineData();
private:
void LogArrayData( string InitStr, double ArrayData[],int LogCount );
double Low9(int index);
double High9(int index);

double MA(int index,int N);
double STD(int index,int N);
//計算CCI指標所需的內部函數
double MaTyp(int index,int N);
double AveDevTyp(int index,int N);
//EMA數據
double Ema12[MAX_BARS],Ema26[MAX_BARS];
double Ema4[MAX_BARS];
double Ema6[MAX_BARS];
double Ema9[MAX_BARS];
double Ema13[MAX_BARS];
double Ema18[MAX_BARS];
double Ema24[MAX_BARS];
//計算CCI指標的TYP中間數據
double Typ[MAX_BARS];
};
#endif
.cpp K線類實現文件:
一點小說明:指標計算時有兩個實現函數用c語言編寫的股票交易系統,一個是計算所有K線的指標值,另一個是計算當前K線的指標值。這有什么用呢?計算所有K線的指標值需要計算多個指標,往往應用在指標初始化讀入數據或剛剛開始一個新的指標周期時應用;而計算當前K線的指標值只計算當前K線一個指標,是需要每Tick 500ms都不斷更新的,程序化交易需要根據當前最新的指標來操作。
具體來說,如日線數據,只有每日啟動時讀入日線數據時需要計算一次所有的日線指標,而當天內的每500ms Tick周期只需要計算當日的新指標,程序化交易應用中可能應用當日的新指標和之前的指標來驅動策略實現自動化交易操作。把計算當前K線指標值函數獨立出來可以節省運行時的計算時間(編程需要時刻牢記計算機“時間”、“空間”消耗,以最小的代價實現相同的功能)
#include
#include
#include "KLineDataDef.h"
#include "NetDataLog.h"
extern NetDataLog *pLog;
KLineData::KLineData()
{
int loop;
for (loop = 0 ; loop < MAX_BARS ; loop++) {
Open[loop] = 0;
Close[loop] = 0;
High[loop] = 0;
Low[loop] = 0;
BollTop[loop] = 0;
BollMid[loop] = 0;
BollBottom[loop] = 0;
MacdDea[loop] =0;
MacdMacd[loop] =0;
MacdDiff[loop] =0;
KdjK[loop] =0;
KdjD[loop] =0;
KdjJ[loop] =0;
Pbx1[loop] =0;
Pbx2[loop] =0;
Pbx3[loop] =0;
Pbx4[loop] =0;
Pbx5[loop] =0;
Pbx6[loop] =0;
Ema4[loop] =0;
Ema6[loop] =0;
Ema9[loop] =0;
Ema13[loop] =0;
Ema18[loop] =0;
Ema24[loop] =0;
Ema12[loop] =0;
Ema26[loop] =0;
};
UpdateFlag =false;
K5BarNum = 0;
}
KLineData::~KLineData()
{}
//算術平均計算函數
double KLineData::MA(int index,int N)
{
int j;
double tmp;
tmp = 0;
for(j=index;j< index + N;j++){
tmp = tmp + Close[j];
}
return (tmp/N);
}
//標準差計算函數 標準差STD:M日的(C-MA)的兩次方之和除以M的平方根 == 所有數減去平均值,它的平方和除以數的個數(【文華公式采用:個數減一】),再把所得值開根號,就是1/2次方,得到的數就是這組數的標準差。
double KLineData::STD(int index,int N)
{
int j;
double tmp,ma;
tmp = 0;
ma = MA(index,N);
for(j=index;j< index + N;j++){
tmp = tmp + pow( (Close[j] - ma), 2 );
}
return (sqrt(tmp/(N-1)));
}
//MA移動平均線計算
void KLineData::CalMa()
{
int i;

for ( i = MAX_BARS -120-1; i>=0; i--) Ma120[i] = MA(i,120);
}
void KLineData::CalLastMa()
{
Ma120[0] = MA(0,120);
}
//布林線計算
/*【文華財經公式
[BOLL公式]
N = 26
M = 26
P = 2
MID:MA(CLOSE,N);
TMP2:=STD(CLOSE,M);//標準差:
TOP:MID+P*TMP2;
BOTTOM:MID-P*TMP2;
標準差STD:M日的(C-MA)的兩次方之和除以M的平方根
*/
void KLineData::CalBoll()
{
int i;
double std;
for ( i = MAX_BARS -26-1; i>=0; i--) {
BollMid[i] = MA(i,26);
std = STD(i,26);
BollTop[i] = BollMid[i] + 2*std;
BollBottom[i] = BollMid[i] - 2*std;
};
}
void KLineData::CalLastBoll()
{
double std;
BollMid[0] = MA(0,26);
std = STD(0,26);
BollTop[0] = BollMid[0] + 2*std;
BollBottom[0] = BollMid[0] - 2*std;
}
//MACD計算
void KLineData::CalMacd()
{
int i;
/*
第一天的EMA12和EMA26都等于收盤價
EMA(12)= 前一日EMA(12)×11/13+今日收盤價×2/13
EMA(26)= 前一日EMA(26)×25/27+今日收盤價×2/27
DIFF=今日EMA(12)- 今日EMA(26)
DEA(MACD)= 前一日DEA×8/10+今日DIF×2/10
BAR=2×(DIFF-DEA)
*/
Ema12[MAX_BARS-1] = Close[MAX_BARS-1];
Ema26[MAX_BARS-1] = Close[MAX_BARS-1];
for (i= MAX_BARS-2; i>=0; i-- ) {
Ema12[i]=Ema12[i+1]*11/13 + Close[i]*2/13;
Ema26[i]=Ema26[i+1]*25/27 + Close[i]*2/27;
MacdDiff[i] = Ema12[i] - Ema26[i];
MacdDea[i] = MacdDea[i+1]*8/10 + MacdDiff[i]*2/10;
MacdMacd[i] = 2*(MacdDiff[i]-MacdDea[i]);
};
}
void KLineData::CalLastMacd()
{
Ema12[0]=Ema12[1]*11/13 + Close[0]*2/13;
Ema26[0]=Ema26[1]*25/27 + Close[0]*2/27;
MacdDiff[0] = Ema12[0] - Ema26[0];
MacdDea[0] = MacdDea[1]*8/10 + MacdDiff[0]*2/10;
MacdMacd[0] = 2*(MacdDiff[0]-MacdDea[0]);
}
//Kdj計算
double KLineData::Low9(int index)
{
double tmp;
int i;
tmp = Low[index];
for(i=index+1;i < index + 9; i++){
if ( Low[i] <tmp ) tmp = Low[i];
};
return tmp;
}
double KLineData::High9(int index)
{
double tmp;
int i;
tmp = High[index];
for(i=index+1;i < index + 9; i++){
if ( High[i] >tmp ) tmp = High[i];
};
return tmp;

}
void KLineData::CalKdj()
{
/*
以KDJ(9,3,3) 為例:
RSV(9)=(今日收盤價-9日內最低價)÷(9日內最高價-9日內最低價)×100
K(3日)=(當日RSV值+2×前一日K值)÷3
D(3日)=(當日K值+2×前一日D值)÷3
J=3K-2D (這里應該是3k而不是3d)
如果無前一日的K、D值,K、D初始值取50。
*/
int i,j;
double rsv9;
i = MAX_BARS - 1 - 9;
KdjK[i+1] = 50;
KdjD[i+1] = 50;
for(j=i;j>=0;j--){
rsv9 = (Close[j] - Low9(j))/( High9(j) - Low9(j) ) * 100;
KdjK[j] = (rsv9 + 2 * KdjK[j+1])/3;
KdjD[j] = (KdjK[j] + 2 * KdjD[j+1])/3;
KdjJ[j] = 3*KdjK[j] - 2*KdjD[j];
}
}
void KLineData::CalLastKdj()
{
double rsv9;
rsv9 = (Close[0] - Low9(0))/(High9(0) - Low9(0))* 100;
KdjK[0] = (rsv9 + 2 * KdjK[1])/3;
KdjD[0] = (KdjK[0] + 2 * KdjD[1])/3;
KdjJ[0] = 3*KdjK[0] - 2*KdjD[0];
}
/*****【通信達等其它常用PBX瀑布線計算】******
【EXPMA計算公式】
1.EXPMA=(當日或當期收盤價-上日或上期EXPMA)/N+上日或上期EXPMA
2.首次上期EXPMA值為上期收盤價,N為天數。
3.可設置多條指標線,參數為12,50
【PBX瀑布線計算公式】
其參數有:
M1,最小值3,最大值10,缺省值4;
M2,最小值3,最大值20,缺省值6;
M3,最小值3,最大值30,缺省值9;
M4,最小值3,最大值40,缺省值13;
M5,最小值3,最大值50,缺省值18;
M6,最小值3,最大值60,缺省值24。
公式為:
PBX1:(EXPMA(CLOSE,M1)+MA(CLOSE,M1*2)+MA(CLOSE,M1*4))/3;
PBX2:(EXPMA(CLOSE,M2)+MA(CLOSE,M2*2)+MA(CLOSE,M2*4))/3;
PBX3:(EXPMA(CLOSE,M3)+MA(CLOSE,M3*2)+MA(CLOSE,M3*4))/3;
PBX4:(EXPMA(CLOSE,M4)+MA(CLOSE,M4*2)+MA(CLOSE,M4*4))/3;
PBX5:(EXPMA(CLOSE,M5)+MA(CLOSE,M5*2)+MA(CLOSE,M5*4))/3;
PBX6:(EXPMA(CLOSE,M6)+MA(CLOSE,M6*2)+MA(CLOSE,M6*4))/3;
公式翻譯為:
輸出PBX1:(收盤價的M1日指數移動平均+收盤價的M1*2日簡單移動平均+收盤價的M1*4日簡單移動平均)/3
輸出PBX2:(收盤價的M2日指數移動平均+收盤價的M2*2日簡單移動平均+收盤價的M2*4日簡單移動平均)/3
輸出PBX3:(收盤價的M3日指數移動平均+收盤價的M3*2日簡單移動平均+收盤價的M3*4日簡單移動平均)/3
輸出PBX4:(收盤價的M4日指數移動平均+收盤價的M4*2日簡單移動平均+收盤價的M4*4日簡單移動平均)/3
輸出PBX5:(收盤價的M5日指數移動平均+收盤價的M5*2日簡單移動平均+收盤價的M5*4日簡單移動平均)/3
輸出PBX6:(收盤價的M6日指數移動平均+收盤價的M6*2日簡單移動平均+收盤價的M6*4日簡單移動平均)/3
【經查詢獲得文華瀑布線的具體公式如下】:
PB1:(EMA(CLOSE,M1)+MA(CLOSE,M1*2)+MA(CLOSE,M1*4))/3;
PB2:(EMA(CLOSE,M2)+MA(CLOSE,M2*2)+MA(CLOSE,M2*4))/3;
PB3:(EMA(CLOSE,M3)+MA(CLOSE,M3*2)+MA(CLOSE,M3*4))/3;
PB4:(EMA(CLOSE,M4)+MA(CLOSE,M4*2)+MA(CLOSE,M4*4))/3;
PB5:(EMA(CLOSE,M5)+MA(CLOSE,M5*2)+MA(CLOSE,M5*4))/3;
PB6:(EMA(CLOSE,M6)+MA(CLOSE,M6*2)+MA(CLOSE,M6*4))/3; //定義6條瀑布線
EMA(X,N):求N周期X值的指數加權移動平均。
EMA=(N-1)*EMA(N-1)/(N+1) + 2*X/(N+1)
第一天的EMA12和EMA26都等于收盤價
EMA(12)= 前一日EMA(12)×11/13+今日收盤價×2/13
EMA(26)= 前一日EMA(26)×25/27+今日收盤價×2/27
*/
void KLineData::CalPbx()
{
int i;
Ema4[MAX_BARS-1] = Close[MAX_BARS-1];
Ema6[MAX_BARS-1] = Close[MAX_BARS-1];
Ema9[MAX_BARS-1] = Close[MAX_BARS-1];
Ema13[MAX_BARS-1] = Close[MAX_BARS-1];
Ema18[MAX_BARS-1] = Close[MAX_BARS-1];
Ema24[MAX_BARS-1] = Close[MAX_BARS-1];
for (i= MAX_BARS-2; i>=0; i-- ) {
Ema4[i]=Ema4[i+1]*3/5 + Close[i]*2/5;
Ema6[i]=Ema6[i+1]*5/7 + Close[i]*2/7;
Ema9[i]=Ema9[i+1]*8/10 + Close[i]*2/10;
Ema13[i]=Ema13[i+1]*12/14 + Close[i]*2/14;
Ema18[i]=Ema18[i+1]*17/19 + Close[i]*2/19;

Ema24[i]=Ema24[i+1]*23/25 + Close[i]*2/25;
};
for (i = MAX_BARS - 97; i >= 0; i--){
Pbx1[i] = (Ema4[i] + MA(i,8) + MA(i,16))/3;
Pbx2[i] = (Ema6[i] + MA(i,12) + MA(i,24))/3;
Pbx3[i] = (Ema9[i] + MA(i,18) + MA(i,36))/3;
Pbx4[i] = (Ema13[i] + MA(i,26) + MA(i,52))/3;
Pbx5[i] = (Ema18[i] + MA(i,36) + MA(i,72))/3;
Pbx6[i] = (Ema24[i] + MA(i,48) + MA(i,96))/3;
};
}
void KLineData::CalLastPbx()
{
//需要先更新EMA【0】的值
Ema4[0] = Ema4[1] * 3 / 5 + Close[0] * 2 / 5;
Ema6[0] = Ema6[1] * 5 / 7 + Close[0] * 2 / 7;
Ema9[0] = Ema9[1] * 8 / 10 + Close[0] * 2 / 10;
Ema13[0] = Ema13[1] * 12 / 14 + Close[0] * 2 / 14;
Ema18[0] = Ema18[1] * 17 / 19 + Close[0] * 2 / 19;
Ema24[0] = Ema24[1] * 23 / 25 + Close[0] * 2 / 25;
//再計算各Pbx值
Pbx1[0] = (Ema4[0] + MA(0,8) + MA(0,16))/3;
Pbx2[0] = (Ema6[0] + MA(0,12) + MA(0,24))/3;
Pbx3[0] = (Ema9[0] + MA(0,18) + MA(0,36))/3;
Pbx4[0] = (Ema13[0] + MA(0,26) + MA(0,52))/3;
Pbx5[0] = (Ema18[0] + MA(0,36) + MA(0,72))/3;
Pbx6[0] = (Ema24[0] + MA(0,48) + MA(0,96))/3;
}
/*
//*****【文華財經瀑布線公式實現】 對比文華贏順云交易軟件,實際公式并不是這個,廢棄不用 *****
//PB1:EMA(CLOSE,9);
//PB2:EMA(CLOSE,12);
//PB3:EMA(CLOSE,19);
//PB4:EMA(CLOSE,27);
//PB5:EMA(CLOSE,39);
//PB6:EMA(CLOSE,49);
void KLineData::CalPbx()
{
int i;
Pbx1[MAX_BARS-1] = Close[MAX_BARS-1];
Pbx2[MAX_BARS-1] = Close[MAX_BARS-1];
Pbx3[MAX_BARS-1] = Close[MAX_BARS-1];
Pbx4[MAX_BARS-1] = Close[MAX_BARS-1];
Pbx5[MAX_BARS-1] = Close[MAX_BARS-1];
Pbx6[MAX_BARS-1] = Close[MAX_BARS-1];
for (i= MAX_BARS-2; i>=0; i-- ) {
Pbx1[i]=Pbx1[i+1]*8/10 + Close[i]*2/10;//9
Pbx2[i]=Pbx2[i+1]*11/13 + Close[i]*2/13;//12
Pbx3[i]=Pbx3[i+1]*18/20 + Close[i]*2/20;//19
Pbx4[i]=Pbx4[i+1]*26/28 + Close[i]*2/28;//27
Pbx5[i]=Pbx5[i+1]*38/40 + Close[i]*2/40;//39
Pbx6[i]=Pbx6[i+1]*48/50 + Close[i]*2/50;//49
};
}
void KLineData::CalLastPbx()
{
Pbx1[0]=Pbx1[1]*8/10 + Close[0]*2/10;//9
Pbx2[0]=Pbx2[1]*11/13 + Close[0]*2/13;//12
Pbx3[0]=Pbx3[1]*18/20 + Close[0]*2/20;//19
Pbx4[0]=Pbx4[1]*26/28 + Close[0]*2/28;//27
Pbx5[0]=Pbx5[1]*38/40 + Close[0]*2/40;//39
Pbx6[0]=Pbx6[1]*48/50 + Close[0]*2/50;//49
}
*/
/* CCI指標計算公式
【經查詢獲得文華CCI的具體公式如下】:
TYP:=(CLOSE+HIGH+LOW)/3;
CCI:(TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));
MA(X,5)=(X1+X2+X3+X4+X5)/5
AVEDEV(C,3) = (ABS(C-(C+REF(C,1)+REF(C,2))/3)+ABS(REF(C,1)-(C+REF(C,1)+REF(C,2))/3)+ABS(REF(C,2)-(C+REF(C,1)+REF(C,2))/3))/3;
*/
//算術平均計算函數
double KLineData::MaTyp(int index,int N)
{
int j;
double tmp;
tmp = 0;
for(j=index;j< index + N;j++){
tmp = tmp + Typ[j];
}
return (tmp/N);
}
//平均絕對偏差計算函數
double KLineData::AveDevTyp(int index,int N)
{
int j;
double tmp;
tmp = 0;

for(j=index;j< index + N;j++){
tmp = tmp + fabs( Typ[j]-MaTyp(index,N) );
}
return (tmp/N);
}
void KLineData::CalCci()
{
int i;
for (i= MAX_BARS-1; i>=0; i-- ){
Typ[i] = (Close[i] + High[i] + Low[i])/3;
}
for ( i = MAX_BARS -14-1; i>=0; i--) {
Cci[i] = ( Typ[i] - MaTyp(i,14) ) / (0.015*AveDevTyp(i,14));
}
}
void KLineData::CalLastCci()
{
Typ[0] = (Close[0] + High[0] + Low[0])/3;
Cci[0] = ( Typ[0] - MaTyp(0,14) ) / (0.015*AveDevTyp(0,14));
}
void KLineData::CalAllIndicators()
{
CalBoll();
CalMacd();
CalKdj();
CalPbx();
CalMa();
CalCci();
}
void KLineData::CalAllLastIndicators()
{
CalLastBoll();
CalLastMacd();
CalLastKdj();
CalLastPbx();
CalLastMa();
CalLastCci();
}
void KLineData::ShiftKlineDataOne()
{
int loop;
for(loop = MAX_BARS-1; loop >= 1 ; loop--) {
Open[loop] = Open[loop-1];
Close[loop] = Close[loop-1];
High[loop] = High[loop-1];
Low[loop] = Low[loop-1];
};
}
void KLineData::LogArrayData( string InitStr, double ArrayData[],int LogCount )
{
int loop;
string OutStr;
char TmpStr[100];
OutStr = InitStr;
for(loop=0;loop < LogCount; loop++ ){
sprintf_s(TmpStr," %.2f",ArrayData[loop]);
OutStr = OutStr + TmpStr;
};
pLog->addLog(OutStr);
}
void KLineData::LogKlineData()
{
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[K 線開盤價]:: ",Open,MAX_LOG_NUM);
LogArrayData("[K 線最高價]:: ",High,MAX_LOG_NUM);
LogArrayData("[K 線最低價]:: ",Low,MAX_LOG_NUM);
LogArrayData("[K 線收盤價]:: ",Close,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[布林中線值]:: ",BollMid,MAX_LOG_NUM);
LogArrayData("[布林上線值]:: ",BollTop,MAX_LOG_NUM);
LogArrayData("[布林下線值]:: ",BollBottom,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[MACD-Diff]:: ",MacdDiff,MAX_LOG_NUM);
LogArrayData("[MACD -Dea]:: ",MacdDea,MAX_LOG_NUM);
LogArrayData("[MACD-Macd]:: ",MacdMacd,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[KDJ - K值]:: ",KdjK,MAX_LOG_NUM);
LogArrayData("[KDJ - D值]:: ",KdjD,MAX_LOG_NUM);
LogArrayData("[KDJ - J值]:: ",KdjJ,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[PBX1---值]:: ",Pbx1,MAX_LOG_NUM);
LogArrayData("[PBX2---值]:: ",Pbx2,MAX_LOG_NUM);
LogArrayData("[PBX3---值]:: ",Pbx3,MAX_LOG_NUM);
LogArrayData("[PBX4---值]:: ",Pbx4,MAX_LOG_NUM);
LogArrayData("[PBX5---值]:: ",Pbx5,MAX_LOG_NUM);
LogArrayData("[PBX6---值]:: ",Pbx6,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
LogArrayData("[CCI----值]:: ",Cci,MAX_LOG_NUM);
pLog->addLog( "------------------------------------------------------------------------------" );
}