最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

發(fā)明者量化PINE語言入門教程-時間序列與腳本結構

2022-07-11 18:14 作者:發(fā)明者量化  | 我要投稿

時間序列

時間序列這個概念在Pine語言中非常重要,是我們學習Pine語言時必須要弄明白的一個概念。時間序列不是一種類型而是用于隨時間存儲變量的連續(xù)值的基本結構,我們知道Pine腳本是基于圖表的,圖表中展示的最基本的內容就是K線圖。時間序列其中每個值都與一個K線Bar的時間戳關聯。open是一個Pine語言的內置變量(built-in),其結構為儲存每根K線Bar開盤價的時間序列??梢岳斫鉃?code>open這個時間序列結構代表了當前K線圖從開始的第一根Bar到當前腳本執(zhí)行的這根Bar時所有K線Bar的開盤價。如果當前K線圖是5分鐘周期,那么我們在Pine策略代碼中引用(或者使用)open時就是在使用策略代碼當前執(zhí)行時的K線Bar的開盤價。如果要引用時間序列中的歷史值需要使用[]操作符。當Pine策略在某根K線Bar上執(zhí)行時,使用open[1]表示引用open時間序列上當前腳本執(zhí)行的這根K線Bar的前一根K線Bar的開盤價(即上一個K線周期的開盤價)。

  • 時間序列上的變量非常方便用于計算
    我們以內置函數ta.cum舉例子:


測試代碼:


有很多類似ta.cum這樣的內置函數可以直接處理時間序列上的數據,例如ta.cum就是把傳入的變量在每個K線Bar上對應的值累加起來,接下來我們使用一個圖表來方便理解。


可以看到,其實v1、v2甚至bar_index都是時間序列結構,在每根Bar上都有對應的數據。這個測試代碼不論用「實時價模型」還是「收盤價模型」區(qū)別僅僅為圖表上是否顯示實時Bar。為了回測速度我們使用「收盤價模型」回測測試。


因為v1這個變量在每一根Bar上都是1,ta.cum(v1)函數在第一根K線Bar上執(zhí)行時由于只有第一根Bar,所以計算結果為1,賦值給變量v2。
ta.cum(v1)在第二根K線Bar上執(zhí)行時,已經有2根K線Bar了(第一根對應的內置變量bar_index是0,第二根對應的內置變量bar_index是1),所以計算結果為2,賦值給變量v2,以此類推。實際上可以觀察到v2就是圖表中K線Bar的數量,由于K線的索引bar_index是從0開始遞增,那么bar_index + 1實際上也就是K線Bar的數量。觀察圖表也可以看到線v2bar_index確實是重合的。


同樣我也可以用ta.cum內置函數計算當前圖表上所有Bar的收盤價之和,那么只用這樣寫就可以了:ta.cum(close),當策略運行到最右側的實時Bar時ta.cum(close)計算出的結果就是圖表上所有Bar的收盤價之和了(沒有運行到最右側時,只是累加到了當前Bar而已)。

時間序列上的變量也可以使用運算符進行運算,例如代碼:ta.sma(high - low, 14),把內置變量high(K線Bar最高價)減去low(K線Bar最低價),最后使用ta.sma函數求平均值。

  • 函數調用結果也會在時間序列中留下值的痕跡

該測試代碼在回測時測試運行,可以觀察到v1v2的值是相同的,圖表上畫出的線也是完全重合的。函數調用計算出的結果在時間序列中會留下值的痕跡,例如代碼ta.highest(high, 10)[1]其中的ta.highest(high, 10)函數調用計算出的結果也是可以用[1]來引用其歷史值的?;诋斍癇ar的上一根Bar對應的ta.highest(high, 10)計算結果就是ta.highest(high[1], 10)。所以ta.highest(high[1], 10)ta.highest(high, 10)[1]完全等價。

使用另一種畫圖函數輸出信息驗證:

可以看到時間序列中變量a和變量b的值顯示在對應的Bar的上方和下方。在學習過程中可以保留這個畫圖代碼,因為在測試、試驗時可能經常需要在圖表上輸出信息用于觀察。

腳本結構

一般結構

在教程開始部分我們總結過一些FMZ上的Pine和Trading View上的Pine語言使用方面的不同點,FMZ上的Pine代碼編寫時可以省略版本號、indicator()、strategy()、并且暫時不支持library()。當然為了兼容較早版本的Pine腳本,策略編寫時寫上諸如://@version=5indicator(),strategy()也是可以的。一些策略設置也可以在strategy()函數中傳參設置。

<version>版本控制信息可省略。

注釋

Pine語言使用//作為單行注釋符,由于Pine語言沒有多行注釋符。FMZ擴展了注釋符/**/用于多行注釋。

代碼

腳本中不是注釋或編譯器指令的行是語句,它實現了腳本的算法。一個語句可以是這些內容之一。

  • 變量聲明

  • 變量的重新賦值

  • 函數聲明

  • 內置函數調用,用戶定義的函數調用

  • if,for,whileswitch等結構

語句可以以多種方式排列

  • 有些語句可以用一行來表達,比如大多數變量聲明、只包含一個函數調用的行或單行函數聲明。其他的,像結構,總是需要多行,因為它們需要一個局部的塊。

  • 腳本的全局范圍內的語句(即不屬于局部塊的部分)不能以空格制表符(tab鍵)開始。它們的第一個字符也必須是該行的第一個字符。在行的第一個位置開始的行,根據定義成為腳本的全局范圍的一部分。

  • 結構或多行函數聲明總是需要一個local block。一個本地塊必須縮進一個制表符或四個空格(否則,會被解析為上一行的串聯代碼,即被判定為上一行代碼的連續(xù)內容),每個局部塊定義了一個不同的局部范圍。

  • 多個單行語句可以通過使用逗號(,)作為分隔符在一行中串聯起來。

  • 一行中可以包含注釋,也可以只是注釋。

  • 行也可以被包起來(在多行上繼續(xù))。

例如,包括三個局部塊,一個在自定義函數聲明中,兩個在變量聲明中使用if結構,如下代碼:

換行代碼

長行可以被分割在多行上,或被 "包裹 "起來。被包裹的行必須縮進任何數量的空格,只要它不是4的倍數(這些邊界用于縮進局部塊)。

可以被包裝成(注意每行縮進的空格數量都不是4的倍數):


一個長的plot()調用可以被包裝成。

用戶定義的函數聲明中的語句也可以被包裝。但是,由于局部塊在語法上必須以縮進開始(4個空格或1個制表符),當把它分割到下一行時,語句的延續(xù)部分必須以一個以上的縮進開始(不等于4個空格的倍數)。比如說:

本章內容不難,基本都是Pine語言的概念,規(guī)則介紹。您學會了嗎?

發(fā)明者量化PINE語言入門教程-時間序列與腳本結構的評論 (共 條)

分享到微博請遵守國家法律
郸城县| 南陵县| 双桥区| 天长市| 平和县| 班玛县| 胶州市| 普定县| 五河县| 扶风县| 石首市| 蒲江县| 老河口市| 和田市| 江安县| 文登市| 西平县| 东平县| 山西省| 句容市| 府谷县| 大理市| 准格尔旗| 青铜峡市| 甘洛县| 凉城县| 海盐县| 汨罗市| 莱州市| 二手房| 通州市| 如皋市| 维西| 会理县| 尼勒克县| 喜德县| 仙居县| 潞西市| 珲春市| 清镇市| 龙山县|