文華語法簡介

以前用CTP和TB,mt4,應羣友要求貢獻一個文華策略,只能看下文華麥語言的語法。

編輯平臺支持的操作符
操作符
意義
加法
CLOSE+OPEN 表示求收盤價及開盤價的和。
CLOSE-OPEN 表示求收盤價及開盤價的差。
CLOSE*OPEN 表示求收盤價及開盤價的積。
CLOSE/OPEN 表示求收盤價及開盤價的商。
減法
*
乘法
/
除法
&&
與(並且)
CLOSE>OPEN 表示判斷當前週期是否收陽。
CLOSE=OPEN 表示判斷當前週期是否平盤。
||
或(或者)
>
大於
<
小於
>=
大於等於
<=
小於等於
<> 
不等於
=
等於操作符
:=
只定義一個局部變量
(這個變量在畫圖時是不畫的)
TMP1:=(OPEN+CLOSE)/2;
MA(TMP1,10);

上面的公式的第一個語句定義了一個局部變量TMP1,在下面一行中引用了這個局部變量,但是要注意的是這個公式在畫圖的時候只畫了第二條語句所求出的結果。
相反下面這個公式則需要畫出兩條線,第一條是自己定義的均價線,同時顯示了均價的名稱爲AVP,第二條線是均價的簡單移動平均線。
AVP:(OPEN+CLOSE)/2;
MA(AVP,10);
聲明瞭一個變量,在畫圖時畫出它並且按這個名字顯示。
 
 
編輯平臺支持的函數
1.引用數據
AVPRICE
引用均價(在盤後對於國內三個期貨交易所指結算價)
CLOSE
引用收盤價(在盤中指最新價)
HIGH
引用最高價
LOW
引用最低價
OPEN
引用開盤價
OPI
引用持倉量
REF(X,N)
引用X在N個週期前的值
例:REF(CLOSE,5);表示引用當前週期前第5個週期的收盤價
REFX(X,N)
引用N個週期後的數據。(N爲大於等於1的整數)(未來函數)
例:REFX(CLOSE,5);表示引用自當前週期後第5個週期的收盤價
SETTLE
引用結算價(只有盤後才能引用當日的結算價)
VOL
引用成交量

2.金融統計
BACKSET(X,N)
若X非0,則將當前位置到N週期前的數值設爲1。
例:BACKSET(CLOSE>OPEN,3);表示當K線收陽時,自當前位置到3週期前的數值設爲1
BARSLAST(X)
求上一次條件成立到當前的週期數。
COUNT(X,N)
表示統計在N週期內滿足X條件的週期數。如果N爲0則表示從第一天開始算起。
例:WR:=-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)); COUNT(WR>80,5);表示統計在5個週期內滿足WR>80的次數
DMA(X,A)
返回X的動態移動平均,其中A必須介於0及1之間。
計算方法:DMA(N)=DMA(N-1)*(1-A)+X(N)*A 其中DMA(N-1)爲第(N-1)天的DMA值
EMA(X,N)
表示求X在N週期內的平滑移動平均。(指數加權)
計算方法:EMA(X,N)=[2*X+(N-1)*EMA(N-1)]/(N+1) 其中EMA(N-1)爲第(N-1)天的EMA值
EMA2(X,N)
表示求X在N週期內的加權平均。(線性加權)
計算方法:EMA2(N)=(N*X0+(N-1)*X1+(N-2)*X2+...+1*XN)/(N+(N-1)+(N-2)+...+1),X0表示本週期值,X1表示上一週期值...
HHV(X,N)
得到X在N週期內的最高值,如果N=0,則從第一個有效週期開始算起。
例:HHV(HIGH,13);求13個週期內的最高價的最大值。
HHVBARS(X,N)
得到X在N週期內的最高值位置到當前的週期數。如果N=0,則從第一個有效週期開始算起。
例:HHVBARS(VOL,0); 求歷史成交量最大的週期到當前的週期數
LLV(X,N)
得到X在N週期內的最小值,如果N=0,則從第一個有效週期開始算起。
例:LLV(LOW,25);表示求25個週期內最低價的最小值
LLVBARS(X,N)
得到X在N週期內的最小值的位置到當前的週期數。如果N=0則從第一個有效週期開始算起。
例:LLVBARS(VOL,0); 求歷史成交量最小的週期到當前的週期數
MA(X,N)
求X在N週期內的簡單移動平均。
計算方法:MA=(A1+A2+A3+A4+A5)/5 求A在5個週期內的簡單移動平均
ZIGZAG(X,P,C)
之字轉向(未來函數),當C取1,P爲百分比數;當C取0,P爲價位差值。
例:ZIGZAG(HIGH,10,1);表示最高價的10%的之字轉向
ZIGZAG(MA(HIGH,34),100,0);表示34個週期內最高價均線的100個價位的之字轉向
PEAK(X,P,M,C)
取得ZIGZAG前M個波峯的值。其中X爲數據,P爲轉折值(如果C爲1的話,這個值爲百分比,否則爲絕對值),M爲大於等於1的整數。(未來函數)
例:PEAK(HIGH,10,1,1);表示最高價的10%的之字轉向的上一個波峯的數值 PEAK(MA(HIGH,34),100,1,0);表示34個週期內最高價均線的100個價位的之字轉向的上一個波峯的數值
PEAKBARS(X,P,M,C)
取得ZIGZAG前M個波峯到當前週期的週期數。(未來函數)
例:PEAKBARS(HIGH,10,1,1);表示最高價的10%的之字轉向的上一個波峯到當前的週期數
PEAKBARS(MA(HIGH,34),100,1,0);表示34個週期內最高價均線的100個價位的之字轉向的上一個波峯到當前的週期數
TROUGH(X,P,M,C)
取得ZIGZAG前M個波谷的值。(未來函數)
例:TROUGH(LOW,10,1,1);表示最低價的10%的之字轉向的上一個波谷的數值
TROUGH (MA(LOW,34),100,1,0);表示34個週期內最低價均線的100個價位的之字轉向的上一個波谷的數值
TROUGHBARS(X,P,M,C)
取得ZIGZAG前M個波谷到當前週期的週期數 (未來函數)
TROUGHBARS(LOW,10,1,1);表示最低價的10%的之字轉向的上一個波谷到當前的週期數
TROUGHBARS(MA(LOW,34),100,1,0);表示34個週期內最低價均線的100個價位的之字轉向的上一個波谷到當前的週期數
SAR(N, Step, Max)
得到拋物轉向值。N爲計算週期,Step爲步長,Max爲極值。
例:SAR(17,3,30);表示計算17個週期拋物轉向,步長爲3%,極限值爲30%
SMA(X,N,M)
得到X在N個週期內的移動平均,M爲權重。
計算方法:SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N
SUM(X,N)
得到X在N週期內的總和,如果N=0,則從第一個有效週期開始算起。
例: SUM(VOL,10);表示統計10週期內的成交量總和
SUMBARS(X,A)
得到X向前累加直到大於A時的週期數。
TRMA(X,N)
求X在N週期內的三角移動平均。
TSMA(X,N)
求X在N週期內的時間序列移動平均。
計算方法:TSMA(X,N)= FOCAST(X,N)+SLOPE(X,N)

3.數理統計
AVEDEV(X,N)
求X在N週期內的平均絕對偏差。
DEVSQ(X,N)
數據偏差平方和。
FORCAST(X,N)
得到X的N週期線性迴歸預測值。
例:FORCAST(CLOSE,5);表示求5週期線性迴歸預測
SLOPE(X,N)
得到X在N週期內的線性迴歸的斜率。
例:SLOPE(CLOSE,5);表示求5週期線性迴歸線的斜率
STD(X,N)
得到X在N週期內的標準差。
STDP(X,N)
得到X在N週期內的總體標準差。
VAR(X,N)
得到X在N週期內的樣本方差。
VARP(X,N)
得到X在N週期內的總體樣本方差。
數理統計舉例說明:
設一個數列,數列中數據的總個數爲N,以今天(2005-10-14)五天內的A0605收盤價爲例,N就爲5。數列的內容爲:{2766,2805,2814,2886,2885}。
1、算術平均值MA(CLOSE,5):數據總和除以總個數N。 (2766+2805+2814+2886+2885)/5=2831.20。可以用公式MA(CLOSE,5),從今天的值上看出。
2、偏差:每個數據,減去算術平均值的結果。 2766-2831.20=-65.2, 2805-2831.20=-26.2, 2814-2831.20=-17.2, 2886-2831.20=54.8, 2885-2831.20=53.8, 各偏差相加,應該是等於0的。
3、平均絕對偏差AVEDEV(X,N):將偏差的絕對值相加,除以總個數N。 (65.2+26.2+17.2+54.8+53.8)/5=43.44
4、數據偏差平方和DEVSQ(X,N):將偏差的平方相加。 (-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²=11130.80
5、總體樣本方差VARP(X,N):將偏差的平方相加,總和除以總個數N。用公式可以這樣算: (-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²/5=2226.16
6、樣本方差VAR(X,N):是總體方差的N/(N-1)倍。 2226.16*5/(5-1)=2782.70 估算樣本方差,總比總體樣本方差大一點,當N夠大時,兩者趨於相等。
7、總體標準差STDP(X,N):方差的開方。 [(-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²/5]½=47.18
8、標準差STD(X,N):估算樣本方差的開方。 [2226.16*5/(5-1)]½=52.75 同樣,估算標準差也比總體標準差大一點,當N夠大時,兩者趨於相等。

4.邏輯判斷
BETWEEN(A,B,C)
判斷A是否位於B及C之間,如果A介於B,C之間則返回1,否則返回0。
例:BETWEEN(CLOSE,MA5,MA40); 表示收盤價介於5日均線與40日均線之間
CROSS(X,Y)
如果X上穿Y則返回1(yes),否則返回0(no)。
例:CROSS(CLOSE,MA(CLOSE,5));表示收盤線從下方向上穿過5日均線
EXIST(COND,N)
判斷過去N個週期內是否有滿足條件COND。
例:EXIST(CLOSE>REF(HIGH,1),10);表示10個週期中是否存在收盤價大於前一個週期的最高價
EVERY(COND,N)
判斷過去N個週期內是否一直滿足條件COND。
例:EVERY(CLOSE>OPEN,5);表示5個週期內一直是陽線
LAST(COND,N1,N2)
判斷過去N1到N2週期內是否一直滿足條件COND。
例:LAST(CLOSE>OPEN,10,5);表示從過去第10個週期到第5個週期內一直是陽線
LONGCROSS(A,B,N)
如果A在前N個週期內都小於B,本週期上穿B,則返回1。否則返回0。
例:LONGCROSS(CLOSE,MA(CLOSE,10),20);表示收盤線在10日均線之下持續20週期後從下向上穿過10日均線
NOFILTER
信號過濾函數。
公式後加“NOFILTER;”是指不需要過濾,出現任何交易指令都會執行。公式後不加“NOFILTER;”是指當連續出現同方向的交易指令時,系統只顯示出第一個交易指令,其他交易指令自動被過濾。
IF(C,A,B)
如果C成立返回A,否則返回B。
例:IF(CLOSE>REF(CLOSE,1),1,0);表示若今日收盤價高於前一日收盤價,則返回1,否則返回0
ISDOWN
如果該週期收陰則返回1,否則返回0。
ISEQUAL
如果該週期平盤則返回1,否則返回0。
ISUP
如果該週期收陽則返回1,否則返回0。
ISLASTBAR
取得當前週期是否爲最後一根K線。最後一個週期返回值爲1,其餘爲0。
VALUEWHEN(COND,DATA)
當條件COND滿足時,取當時的DATA的值,否則取得VALUEWHEN的前一個值。
例:VALUEWHEN(HIGH>REF(HIGH,5),HIGH);表示當前最高價大於前五個週期最高價的最大值時返回當前最高價

5.數學運算
ABS(X)
求X的絕對值。
例:ABS(CLOSE-10) 返回收盤價和10的價差的絕對值
ACOS(X)
求X的反餘弦值。
ASIN(X)
求X的反正弦值。
ATAN(X)
求X的反正切值。
CEILING(X)
向上舍入。返回沿X數值增大方向最接近的整數。
COS(X)
返回X的餘弦值。
EXP(X)
表示求e的X次冪。
FLOOR(X)
向下舍入。返回沿X數值減小方向最接近的整數。
INTPART(X)
取X的整數部分。INTPART(X)返回沿X絕對值減小方向最接近的整數。
LN(X)
得到X的自然對數。以e爲底的對數。
例:LN(OPEN);求開盤價的自然對數。
LOG(X)
得到X的常用對數。取得X的以10爲底的對數。
例:LOG(OPEN);求開盤價的以10爲底的對數。
MAX(A,B)
求A,B中的較大者。
例:MAX(CLOSE-OPEN,0);表示若收盤價大於開盤價返回它們的差值,否則返回0
MIN(A,B)
求A,B中的較小者。
例:MIN(OPEN,CLOSE);返回開盤價和收盤價中的較小值
MOD(A,B)
返回A對B得到模。
例:MOD(CLOSE,OPEN);收盤價除以開盤價所得餘數
NOT(X)
當X爲0時返回1,否則返回0。
例:NOT(TIME=0905);表示該週期對應的時間不是9:05AM
POW(A,B)
得到A的B次冪。
例:POW(CLOSE,2);求得收盤價的2次方
REVERSE(X)
取反。
例:REVERSE(LOW);返回-LOW
SGN(X)
得到X的符號,如果X>0則返回1,如果X<0則返回-1,否則返回0。
SIN(X)
得到X的正弦值。
SQRT(X)
得到X的平方根。
例:SQRT(CLOSE);收盤價的平方根
SQUARE(X)
得到X的平方。
例:SQUARE(CLOSE);收盤價的平方
TAN(X)
得到X的正切值。

6.時間函數
BARPOS
取得當前K線的位置。
DATE
取得當前週期的日期數(700101-341231)。
DAY
取得當前週期的日數(1-31)。
HOUR
取得當前週期的小時數(0-23)。
MINUTE
取得當前週期的分鐘數(0-59)。
MONTH
取得當前週期的月數(1-12)。
TIME
取得當前週期的時間數(0-2359)。
WEEKDAY
取得當前週期的星期數(0-6)。
YEAR
取得當前週期的年數(1970-2034)。

7.繪圖
DRAWLINE
(C1,P1,C2,P2, COLOR)
當條件C1及C2均滿足時,從P1畫直線到P2,顏色爲COLOR。
例:DRAWLINE(MA18< CLOSE,OPEN,MA5 >CLOSE,CLOSE,COLORCYAN); 表示當收盤價大於18日均線並且小於5日均線時,從開盤價畫青色直線到收盤價。
DRAWTEXT(C,P,TEXT)
表示當條件C滿足時在P上寫TEXT文字。
例:DRAWTEXT(CLOSE< OPEN&&REF(CLOSE,1)< REF(OPEN,1) &&REF(VOL,1)*1.1< VOL,LOW,'注'); 表示連續兩日收陰並且成交量比前一日至少多10%時,在最低價上寫“注”字。
DRAWSL(COND,DATA,
SLOPE,LEN,EXPAND,
COLOR)
畫斜線,當條件COND滿足時,從DATA開始以每個週期相差SLOPE個點的斜率畫斜線,劃線長度爲LEN個週期,EXPAND爲線段的延長方式(0:不延伸;1:向左延伸;2:向右延伸;3:雙向延伸)。
例:DRAWSL(LOW=LLV(LOW,50),LOW,5,3,2,COLORRED); 表示當前最低價等於50週期內的最小值時,從當前最小值開始以每隔5個點的斜率畫長度爲3個週期向右延伸的斜線,顏色爲紅色
DRAWNUMBER
(COND,DATA,NUMBER,PRECISION,COLOR)
畫數字。當條件COND滿足時,在DATA位置寫數字NUMBER(爲數組),精度爲PRECISION(小數點後有幾位數字)。
例:DRAWNUMBER(CLOSE/OPEN>1.08,HIGH,(CLOSE-OPEN)/OPEN*100,2,COLORRED); 表示當日漲幅大於8%時在最高價位置顯示漲幅(相對開盤價的百分比)。
FILLRGN
(COND,DATA1,DATA2,COLOR)
填充區域,當條件COND滿足時,填充DATA1及DATA2包圍的區域。
例:FILLRGN(MA5>MA10,MA5,MA10,COLORRED); 表示MA5>MA10時以紅色填充MA5和MA10之間的區域。
POLYLINE
(COND,DATA,COLOR)
畫折線,當條件COND滿足時,連接各個DATA點。
例:POLYLINE(CLOSE>=HHV(CLOSE,100),CLOSE,COLORRED); 表示在收盤價創100天新高點之間畫折線。
PARTLINE
(COND,DATA,COLOR)
同POLYLINE。
例:PARTLINE(HIGH>REF(HIGH,1),HIGH,COLORRED); 表示當期最高價大於前期最高價用紅色繪製最高價連線。
STICKLINE
(C,P1,P2,Color,Empty)
如果條件C滿足時,從P1到P2畫柱線,顏色爲Color,如果Empty不爲0,則爲空心柱,否則爲實心柱。
例:STICKLINE(OPEN-CLOSE>0,OPEN,CLOSE,COLORCYAN,0); 表示當開盤價大於收盤價時,從開盤價到收盤價畫青色的實心柱,即K線陰線的實體部分。
VERTLINE
(COND,COLOR)
畫垂直線,當條件COND滿足時,畫垂直線。
例:VERTLINE(HIGH>=HHV(HIGH,30),COLORRED); 表示在價格創30天新高時畫垂直線。
 
 
編輯平臺可以使用的常數
常數
意義
COLORRED
紅色
COLORGREEN
綠色
COLORBLUE
藍色
COLORMAGENTA
紅紫色
COLORYELLOW
黃色
COLORLIGHTGREY
淺灰色
COLORLIGHTRED
淺紅色
COLORLIGHTGREEN
淺綠色
COLORLIGHTBLUE
淺藍色
COLORBLACK
黑色
COLORWHITE
白色
COLORCYAN
青色
COLORSTICK
畫彩色柱線
VOLUMESTICK
畫成交量線
BAMBOOLINE
畫竹線
CIRCLEDOT
畫圓
OPISTICK
畫持倉量柱線
注意:在公式內即使你定義了某種顏色,在顯示的時候也未必是此種顏色,取決於背景顏色當前頁面裏是否保了該指標的顏色及您是否在顯示的時候改變了該指標的顏色設置。
 
 
編輯平臺的語法
 
1.關於公式名稱:
公式的名稱不可以和已經存在的公式重複。

2.關於參數:
每個自編公式最多可以定義四個參數,參數的定義如下,首先是參數名稱,然後是參數的最小值,最大值,最後是參數的默認值。在定義參數時要注意的是參數名稱不可以重複。

3.關於變量名稱:
變量名稱不可以互相重複,不可以和參數名重複,不可以和函數名稱重複。

4.關於公式內容:
公式的每個語句應該以分號結束,包括最後一條語句。在數據公式的時候請您注意一定要使用半角輸入。在編寫公式的過程中,如果您不記得某個函數的確切寫法,可以選擇插入函數來插入函數。

5.如果您在編寫公式之後,想給這個公式加上註釋,說明之類的東西,可以使用公式說明來輸入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章