如何使用TradingView(TV)回測數字貨幣交易策略

數量技術宅發表於2020-12-04

更多精彩內容,歡迎關注公眾號:數量技術宅。想要獲取本期分享的完整策略程式碼,請加技術宅微信: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爬蟲分享

【數量技術宅|金融資料分析系列分享】如何正確抄底商品期貨、大宗商品

【數量技術宅|量化投資策略系列分享】股指期貨IF分鐘波動率統計策略

【數量技術宅 | Python爬蟲系列分享】實時監控股市重大公告的Python爬蟲

相關文章