【單元3】PowerLanguage程式腳本運作規則

上一篇「兩行程式碼完成均線交叉策略」我們幫大家建立了學習PowerLanguage的信心,並用最原始粗糙的語法舉例兩行就可以寫出一個均線,接下來我們要開始正規地學習PowerLanguage,接下來兩篇要紹讀者認識PowerLanguage的基礎知識,包含腳本運行邏輯、程式基本組成元素、程式結構等等。
 
>>讀完本文您可以學到什麼?
1. PowerLanguage程式腳本運行邏輯
2. PowerLanguage與時間序列概念

PowerLanguage程式腳本運作原理

我們用PowerLanguage編寫的交易邏輯或是指標稱為腳本(Script),腳本完成後,接著開啟MultiCharts主程式,把腳本放到K線上去跑(新增→指標或新增→訊號)。
 
而MultiCharts執行PowerLanguage程式腳本依循以下原則:
 
1. 程式腳本一行一行依序執行。程式腳本是從第一行開始依序執行到最後一行,因此程式碼擺得先後位置不同,特別是變數的運算,會有不一樣的結果。
 
2.從線圖上最左邊(最早)K棒依序每根K棒執行一次腳本到最右(最近)的K棒。執行到程式腳本是從圖上最左邊K棒扣除最大引用K棒數(備註)開始一根一根依序執行,且是在每根K棒收完,確認開高低收量後,完整執行一次程式腳本。每根K棒執行一次腳本也代表程式腳本以及腳本中的變數在每根K收完後都重新運算一次,這個觀念很重要,特別對那些沒有寫程式基礎的人。
 
我們以一個常用的計算累加值得語法來展示這個觀念。假設變數Sum(預設值為0),以下程式碼可以達到每根K棒累加的效果:
 
Sum=Sum+1;
 
我們逐根K來看Sum的值怎麼變化:
  • 第1根K棒:Sum=Sum+1;  (執行)→Sum=0+1=1 (因為Sum的預設值為0,記住這根K棒跑完腳本後,Sum的值已經重新計算為1)
  • 第2根K棒:Sum=Sum+1;  (執行)→Sum=1+1=2 (因為上一根K棒的Sum值為1,這根K棒跑完腳本後,Sum的值已經重新計算為2)
  • 第3根K棒:Sum=Sum+1;  (執行)→Sum=2+1=3(因為上一根K棒的Sum值為2,這根K棒跑完腳本後,Sum的值已經重新計算為3)
以此類推!我們可以去看例如計算加總的函式Summation的程式碼就是運用這樣的邏輯。
 
3. 時間序列結構。所以基本上PowerLanguage是屬於時間序列的結構,每一個K棒就是一個時間紀錄,視採用5分K、60分K或日K而定,我們可以用中括號[]來指定某個特定K棒(時間),例如Close[1]代表前一根K棒的收盤價、High[2]則是指往前第二根K棒的最高價,以此類推。例如我們想表達今日向上跳空,K線圖用日線,向上跳空就是今日開盤大於前日最高價,程式碼則為:Open>High[1]; 
 
4. 過去與未來不能搞混。還有一個重要觀念也容易搞混,我們不知道未來的價格走勢,必然是回頭去看過去價格如何如何來研判下一步會怎麼走,”回頭看”這個觀念很重要,舉例開盤八法是以開盤前三根5分K來預測今日盤勢之強弱,所以一定是在這三根K都確定後才能確認,所以以台指期為例寫開盤八法,就是在9:00這根K棒時”回頭”去確認自身、前一根(8:55)以及前第2根(8:50)共三根K棒符合哪一開盤法的型態。
 
我們來寫寫看開盤八法的「紅三兵」,定義為開盤連續三根5分K都是紅K,那麼用PowerLanguage如何表達?先思考,紅K的定義是收盤價大於開盤價,用程式語法來表達就是Close>Open,再來,回頭看自身這根以及前兩根都要符合紅K條件,寫成語法就是:
 
If Time=900 and Close>Open and Close[1]>Open[1] and Close[2]>Open[2] then condition1=true;
 

快速結論

想法寫成程式,程式腳本再套到線圖,這中間就隔了兩層,再者,寫程式時面對的是過去且已知的資料,當實際上線跑即時行情時又是另一回事,因此先了解PowerLanguage程式腳本運作原理非常重要,可以避免許多錯誤,確保程式寫出來”實際可行”。寫程式的過程看似就是把想法轉換成語法,不過很多時候明明語法都沒錯,卻沒得到預期的結果,很可能就是沒有把上面的腳本運行原則給搞清楚。
 
了解的PowerLanguage程式腳本的運作邏輯,接下來我們開始來"玩拼圖",一步一步把PowerLanguage的結構、組成元素、運算、判斷等等組起來,最終就可以學成撰寫交易策略的功夫。
 
 
 
 
 
註1:在策略屬性設定裡有一欄「策略運算最大使用K棒數量」預設值為50,這個意思就是說圖表的前50根K棒是用來做前置運算用,不會執行程式腳本。為什麼需要這樣的設計,理由很簡單,想像我們要算10日均線,第1根K棒沒辦法計算,只要在第10根K棒才能算出10MA,因此前面9根就保留不跑腳本,稱為「策略運算最大使用K棒數量」。
 
註2:如果是開IOG(IntraBar Order Generation)則是每個Tick都執行一次程式碼。
 
 

期貨線上開戶 期貨營業員專區

/統一期貨相關連結/

 

統一期貨FB統一期貨YouTube統一期貨LINE統一期貨IG