這一篇我來講一下通達信公式的句式。文中我也會頻繁的回顧第一個公式“多頭吞噬”,以其做一個例子(有可能是反面例子),同時也會用到KD指標這個公式。所以,如果第一次看我的這個系列文章,可以先看一下《通達信公式(概論):第一個公式》,同時了解一下KD指標。
前一篇說到句式是通達信公式的骨架,通達信公式有它固定的表達方式,比如我們的語言中有陳述句、疑問句、感嘆句等等。而電腦不會有帶感情的感嘆句,也不會有模棱兩可的疑問句,只有陳述句。你要問現在不是有AI嗎,說句話就可以選股了?朋友,通達信只是一個炒股軟件,公式只是一個配套工具,AI、人工智能這些就不要想啦。外面呢,同花順的i問股在這方面做的還可以,不過離智能還有一定的距離,只是減少了部分寫代碼的過程,而且不一定能滿足大家的投資策略。我實踐總結下來,通達信公式的句式主要分為以下三種:賦值語句、輸出語句、條件語句。賦值語句是為了產生中間變量而存在,比如我們有個策略要用到收盤價除以開盤價(不是漲幅,漲幅是收盤價除以前一日收盤價),通達信沒有直接結果,但可以用通達信公式系統基礎函數O和C,進行計算得出。雖然計算出一個數據,但這個數據若沒有輸出(形成技術指標)或者應用在條件(條件選股、五彩K線、專家系統)中是沒有意義的。輸出語句則在技術指標公式中應用較廣,輸出一個數據,比如近10個交易日收盤價的平均值,輸出到K線圖上就是我們看到的10日均線。條件語句則在技術指標公式,條件選股公式、專家系統公式、五彩K線公式中均有應用,是句法中的核心。所以條件選股語句是本篇的重頭戲,也是學好通達信公式必須能靈活應用的內容。賦值語句,顧名思義就是自己定義一個變量,并給這個變量賦予一個數值。大家可能會有疑問,就是通達信公式調用的數據既然已經是通達信公式的默認函數了,為什么還需要這個賦值語句呢?上面簡單說了一個案例,就是收盤價除以開盤價,大家想一想,有沒有點眼熟。不錯,我們在第一個公式:多頭吞噬中用過,主要是給K線實體長度進行量化,用這個值減去1,再取絕對值,就可以得出這根K線的相對長度是幾個點,比如大于5%我們就把他稱做大陽線、大陰線,1%以下,就是小陽線、小陰線。但是我們注意,這個指標是K線策略才會重點關注的指標,如果你用KD指標而不怎么看K線,那么大概率不會用到這個數據。換句話說,不同的策略可能會用到很多定制化的數據,如果針對每個策略的數據都做到函數中,通達信只能說: 雖然通達信做不到,但實際上這也沒必要,比如上面的那個陽線長度就可以用通達信的基礎函數(C和O)加工而成,對吧。因此,我們想要通達信公式系統為我所用,極大可能需要通過基礎數據加工屬于自己的數據。接下來我們來用KD指標的公式講解一下賦值語句。下圖是通達信中內置的KD指標函數,在公式管理器——技術指標中可以找他: 雙擊KD公式后就進入公式編輯器,看到KD指標的公式如下: KD指標公式的第一句就是典型的賦值語句,我們可以看到賦值語句的標準格式是:“:=”前面是我們自定義的變量名,隨便取,但為便于使用,最好選取變量中文名稱的縮寫,比如K線長度,我們可以取名KXCD,而KD指標是國外傳來的,所以RSV用的是英文單詞Raw Stochastic Value(未成熟隨機值)的首字母,后面的公式語句中就可以直接調用,比如K值就用到了RSV這個變量。“:=”后面就是這個變量的計算公式,計算完成后將數值賦予變量名,這就是賦值公式的由來。RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;RSV賦值:(收盤價-N日內最低價的最低值)/(N日內最高價的最高值-N日內最低價的最低值)*100接下來用人話翻譯一下:由于N值一般用的是9,我就按9來翻譯:未成熟隨機值就是當前周期收盤價在9天內最高點和最低點的相對位置。因為K值,D值是對RSV均值平滑處理,所以KD指標的超買超賣精髓,實際上就是近期股價在9日中最高價和最低價之間的位置,離最低價近一點,就處于超賣狀態,而離最高價近一點就處于超買狀態。再說簡單點,KD指標就是跌多了就看多,漲多了就看空。 曾經多么神奇的KD指標,我們一拆開來,其實也沒什么神秘的對不對,竟然這么簡單。所以說,學好公式,能夠破除很多神奇公式的迷信,讓我們能夠把握指標的本質,而不是被胡里花哨的包裝所迷惑。(很多所謂量化投資策略,說開來也很簡單,但是用Python語言這么一寫,加點什么神經網絡,機器學習的概念,看似高大上,實際可能追溯到根本就是漲多了賣,跌多了買而已)。看到這里,你可能會有點納悶:不對啊,按照你的格式,你的這個多頭吞噬公式里面哪里有賦值語句啊。我上面說了,賦值語句實際上是一個中間語句,一個公式中可以沒有賦值語句,比如在KD指標中,我們可以完全不用RSV這個中間變量,直接這么寫,效果也是一樣的。這么說吧,我剛開始學公式的時候,雖然我經常用到一些加工后的數據,但卻沒有使用賦值語句,就像之前多頭吞噬的公式,一股腦寫在一句公式當中。看這個多頭吞噬公式,雖然我寫了三行,但實際上他是一個句子,只有一個分號。這一句話用三個AND連接了起來。REF(C,1)<REF(O,1) AND REF(O,1)/REF(C,1)>1.005 AND C>O AND C>REF(O,1) AND O<REF(C,1) AND C/O>1.01;這樣寫公式的結果就是,造成單句語句特別長,長的句子會有一個問題,就是萬一里面出錯了,通達信只提示這一句有問題,然后我就找啊找,找了半天,發現少了個括號!別笑,當你用帶參數的函數比較多的時候,三四個括號疊加在一起時很常見,到時候數括號數的眼花,早期我就深受其害,更何況很多公式遠比這個復雜。所以,我們把K線實體長度寫成一個變量試試:K線長度KXCD:=ABS(1-C/O)(1減去收盤價和開盤價的比值再取絕對值)。在這個公式中,雖然篇幅似乎還多了,但是如果提示第二句有錯誤,我們就沒必要再去看這個實體長度的描述有沒有問題。而且有了這個實體長度的變量公式,以后只要我們還用到實體長度這個變量直接調用就可以了。看到這兒,有沒有朋友看出我們修改后的多頭吞噬還有一點小問題呢?對了,就是每句最后不要忘了分號,KXCD賦值之后,沒有點分號。這下我們就真正完成了,如果你自己編寫的公式句子比較多,特別是很多中間變量要寫成賦值語句,那一定記住,不要忘了每句后面的分號。(1)賦值語句是中間語句,一個公式中可以視其復雜程度,不用賦值語句。同時一句賦值語句,也無法是一個獨立的公式,也就是說,只有賦值語句的公式是沒有意義的;(2)當我們主要使用一類指標時,比如K線,則有必要對一些本策略體系常用的中間變量(比如K線實體長度)用賦值語言進行標準化,方便后面我們其他的公式使用;(3)使用賦值語句能夠有效地降低單句語句的復雜程度,降低我們檢查bug的難度。寬客吧為專注交易型指數基金(ETF)研究,重點圍繞ETF產品,打造ETF一、二級市場資訊及投研平臺,持續為投資者提供ETF及時資訊及投資策略,幫助大家在ETF投資過程中梳理科學投資理念,建立和完善投資策略,降低投研成本。
|