更多精彩內容,歡迎關注公衆號:數量技術宅。想要獲取本期分享的完整策略代碼,請加技術宅微信:sljsz01html
前段時間,有粉絲找到技術宅,表示他有一個經常使用的交易平臺,叫作TradingView,但願技術宅能將分享的策略,用這個平臺的語言改寫。確實,有部分交易者,他們長時間在某個平臺交易,適應了這個平臺的操做,而有至關一部分平臺,會提供量化交易的接口,或者內置一些簡易的可編程語言,幫助你們實現指標計算、甚至是自動交易。編程
打開TradingView的主頁,能夠看到TradingView不加有數字貨幣的行情,還有A股、美股、外匯、黃金、大宗商品等外盤行情,咱們在TradingView上編寫的交易策略,不轉換代碼,便可在多市場進行測試。微信
TradingView能夠說是 一個簡單,易上手,且功能極其強大的交易圖表工具,但它不只僅是主觀交易者的利器,還內置了一種叫Pine的編程語言,並有對應的Pine編譯器,Pine能夠獲取到TradingView的全部交易歷史數據,而且能夠快捷、簡便地編寫一些基於K線的交易策略(熟悉交易開拓者的同窗,能夠將其類比爲數字貨幣的TB)。編程語言
Pine編輯器的進入步驟很簡單,首先,咱們點開某一個品種,好比BTC/USD,選擇右上角圖形的「全功能圖表」按鈕。編輯器
進入後,選擇下方的「Pine編輯器」,便可進入策略編寫界面。函數
在編寫咱們的第一個TradingView策略前,先來簡要看一下,Pine語言的基本語法。Pine語言,能夠說,相對於時下最熱門的Python語言的語法,簡單了很多,技術宅甚至認爲,沒有什麼編程基礎的同窗,通過咱們這篇文章的引導,也可以寫出一些簡單的策略。Pine語言有一個語法參考手冊,包含三部份內容,分佈是運算子、內置變量、內置函數。運算子的部分比較好理解,大部分和咱們經常使用的數學公式或經常使用的計算機語法相似,好比下圖中的!=表明不等於,而%表明取餘數。工具
內置變量,指的是系統內置的一些關鍵詞,經過這些關鍵詞能夠直接獲取到策略計算過程當中所須要用到的關鍵數據,最典型的好比K線的開、高、低、收價格數據,如下圖爲例,在代碼中調用close,能夠直接獲取到每根k線的收盤價,而open、high、low、volume同理,分別是k線的開盤價、最高價、最低價和成交量。post
而內置函數中,最多的一類是技術指標,咱們常見的技術指標,均可以在TradingView中找到對應的內置函數,好比RSI、ADX、KD、MACD、ATR等等,咱們若是在策略中想要用某個技術指標,只須要調用該指標的名稱,沒必要編寫指標內部的計算公式,就能獲得想要的結果了。語法手冊中也有詳細的例子,告訴你每一個技術指標如何使用。測試
雙均線策略能夠說是初學者最容易上手的一個策略了,交易規則很簡單:當短時間均線上穿長期均線,平空作多;當長期均線下穿短時間均線,平多作空。咱們以這樣一個簡單的策略,開啓Pine語言的編程之路,來看咱們是如何實現的:url
策略總共有效代碼,只有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爬蟲分享
【數量技術宅|金融數據分析系列分享】如何正確抄底商品期貨、大宗商品