更多精彩內容,歡迎關注公眾號:數量技術宅。想要獲取本期分享的完整策略代碼,請加技術宅微信:sljsz01
TradingView平台簡介
前段時間,有粉絲找到技術宅,表示他有一個常用的交易平台,叫做TradingView,希望技術宅能將分享的策略,用這個平台的語言改寫。確實,有部分交易者,他們長時間在某個平台交易,適應了這個平台的操作,而有相當一部分平台,會提供量化交易的接口,或者內置一些簡易的可編程語言,幫助大家實現指標計算、甚至是自動交易。
打開TradingView的主頁,可以看到TradingView不加有數字貨幣的行情,還有A股、美股、外匯、黃金、大宗商品等外盤行情,我們在TradingView上編寫的交易策略,不轉換代碼,即可在多市場進行測試。
關於Pine編輯器
TradingView可以說是 一個簡單,易上手,且功能極其強大的交易圖表工具,但它不僅僅是主觀交易者的利器,還內置了一種叫Pine的編程語言,並有對應的Pine編譯器,Pine可以獲取到TradingView的所有交易歷史數據,並且可以快捷、簡便地編寫一些基於K線的交易策略(熟悉交易開拓者的同學,可以將其類比為數字貨幣的TB)。
Pine編輯器的進入步驟很簡單,首先,我們點開某一個品種,比如BTC/USD,選擇右上角圖形的“全功能圖表”按鈕。
進入后,選擇下方的“Pine編輯器”,即可進入策略編寫界面。
在編寫我們的第一個TradingView策略前,先來簡要看一下,Pine語言的基本語法。Pine語言,可以說,相對於時下最熱門的Python語言的語法,簡單了不少,技術宅甚至認為,沒有什么編程基礎的同學,經過我們這篇文章的引導,也能夠寫出一些簡單的策略。Pine語言有一個語法參考手冊,包含三部分內容,分布是運算子、內置變量、內置函數。運算子的部分比較好理解,大部分和我們常用的數學公式或常用的計算機語法類似,比如下圖中的!=代表不等於,而%代表取余數。
內置變量,指的是系統內置的一些關鍵詞,通過這些關鍵詞可以直接獲取到策略計算過程中所需要用到的關鍵數據,最典型的比如K線的開、高、低、收價格數據,以下圖為例,在代碼中調用close,可以直接獲取到每根k線的收盤價,而open、high、low、volume同理,分別是k線的開盤價、最高價、最低價和成交量。
而內置函數中,最多的一類是技術指標,我們常見的技術指標,都可以在TradingView中找到對應的內置函數,比如RSI、ADX、KD、MACD、ATR等等,我們如果在策略中想要用某個技術指標,只需要調用該指標的名稱,不必編寫指標內部的計算公式,就能得到想要的結果了。語法手冊中也有詳細的例子,告訴你每個技術指標如何使用。
開始練手,雙均線策略
雙均線策略可以說是初學者最容易上手的一個策略了,交易規則很簡單:當短期均線上穿長期均線,平空做多;當長期均線下穿短期均線,平多做空。我們以這樣一個簡單的策略,開啟Pine語言的編程之路,來看我們是如何實現的:
策略總共有效代碼,只有7行。第一行的strategy,相當於申明這個策略,第一個"My"是該策略的名稱。接下來是一個判斷變量longCondition, 大家不用糾結longCondition是什么數據類型,Pine腳本對於變量類型定義是開放式的,即賦給它什么類型,它就是什么類型。
我們再來看等號右邊,crossover(sma(close,20),sma(close,60)),此處的close我們在前文已經知道,是k線的收盤價,而sma、crossover又分別代表什么?別着急,Pine編輯器有一個很好用的功能,只需要將鼠標放在關鍵詞上,我們就能知道系統對於這個關鍵詞(內置變量、內置函數)的定義。比如sma,系統提示我們,返回的是移動平均值。 同理,crossover和crossunder也可以通過同樣方式獲取解釋(不得不說,真的好用)。
在理解了每個系統內置關鍵詞的用法,我們就可以來翻譯上述策略代碼了。開多條件:20日收盤價均線上穿60日收盤價均線,如果滿足開多條件,則以當時的價格平空做多1手,同時標記該信號為“My Long”;開空條件:20日收盤價均線下穿60日收盤價均線,如果滿足開空條件,則以當時的價格平多做空1手,同時標記該信號為“My Short”。將該策略加載到想測試(交易)的K線圖表上,可以看到“My Long”、“My Short”對應的交易信號標記。
當我們把策略信號加載到K線圖表后,通過Pine編輯器右側的策略測試器,就可以測試得到該策略的績效。我們把這個策略應用到BTC的日線周期上,可以看到盡管策略很簡單、很基礎,它仍然是一個長期能夠盈利的策略,但中間的回撤幅度會讓人比較難受。
再實現一個類海龜策略
有了第一個練手的雙均線策略的基礎,我們再來一起實現一個比雙均線策略略微復雜一點的類海龜交易策略。之所以稱之為類海龜交易策略,是因為我們在海龜交易策略的唐奇安通道進、出場的基礎之上,添加了一個不同周期的均線過濾,只有當均線和唐奇安通道同時滿足多頭或空頭條件的時候,才會觸發進場的操作。
我們分成三段來編寫這個策略。首先第一段,還是在strategy方法中申明這個策略,然后,我們定義了3個參數變量,分別是唐奇安通道的進場周期20,唐奇安通道的出場周期10,以及均線的周期15。定義為input變量,是為了方便我們能夠直接在Pine的測試界面修改參數數值,而不需要改動原始的代碼。
策略的第二段,我們通過Pine內置的指標函數,分別定義了唐奇安通道進場、出場的上、下軌道,以及收盤價的均線,在代碼中可以看到,每個K線所獲取的high、low、close,我們都在后面加了[1],這是為了計算並取前1個K線周期的指標數據,以防止在當前的計算信號K線中用到未來的數據。
最后是策略第三段,開倉、平倉條件的判斷與執行,此處為了避免連續開倉,引入系統內置變量strategy.position_size,該變量能自動讀取策略的當前倉位。前4行是開倉的判斷與操作,如果當前K線突破唐奇安通道上軌、前一個K線收盤價大於均線、並且此時策略沒有做多倉位,則在突破價位進行做多的操作;如果當前K線突破唐奇安通道下軌、前一個K線收盤價小於均線、並且此時策略沒有做空倉位,則在突破價位進行做空的操作。后4行是平倉的判斷與操作,如果當前持有多頭倉位,價格向下突破平倉唐奇安通道,平掉所有多頭倉位,持有空頭倉位,平倉邏輯相似。
我們將編輯好的策略加載到一個稍精細的周期:BTC4小時K線,並測試策略的績效。可以看到下圖中策略的信號以及回測結果,從測試情況來看,盡管策略邏輯不復雜,但仍可以在BTC的中周期,取得比較穩定的收益了,這也說明數字貨幣市場,是有着很多交易機會的。
我們不改變任何條件和參數,將策略移植到ETF這個同樣是熱門的數字貨幣品種上,策略依舊是有穩定的表現。TradingView提供了許多主流交易所的數字貨幣對,再包括外盤的商品、股指、A股等測試數據,都可以對所寫的Pine語言策略進行測試,只需要修改圖表左上方的品種,就能迅速完成品種的切換和策略的測試。動動手,說不定你能找到更優秀的策略。
如果你想要本次分享Pine語言策略的文本代碼,歡迎加小編微信,與我交流。
往期干貨分享推薦閱讀
【數量技術宅|量化投資策略系列分享】基於指數移動平均的股指期貨交易策略
AMA指標原作者Perry Kaufman 100+套交易策略源碼分享
【數量技術宅|金融數據系列分享】套利策略的價差序列計算,恐怕沒有你想的那么簡單
【數量技術宅|量化投資策略系列分享】成熟交易者期貨持倉跟隨策略
【數量技術宅|金融數據分析系列分享】為什么中證500(IC)是最適合長期做多的指數
商品現貨數據不好拿?商品季節性難跟蹤?一鍵解決沒煩惱的Python爬蟲分享
【數量技術宅|金融數據分析系列分享】如何正確抄底商品期貨、大宗商品