- 登入
- 註冊
上一篇文(第一次學 Multicharts 程式碼就上手),我們介紹了 MultiCharts 的程式語法 PowerLanguage 的基本要素。Multicharts 是一套專門拿來做程式交易的軟體,所以在Multicharts 內建的程式語法編譯器(PowerLanguage Editor)中,已經把程式交易當中常常會使用到的情境,預設為程式的內建保留字。
例如:進出場價、進場時間、部位 、 未平倉損益 、 最大曾經虧損等等。而我們在撰寫程式碼的時候的也會自動跑出提示,讓我們可以更節省時間的去寫一段程式碼。
PowerLanguage 的英文字母大小寫並無區別,本篇文章會介紹幾種常用的內建保留字,內建字的預設顏色都是藍色。我們也可以透過編譯器的代碼表中查找程式碼相關的使用方式。
and 、or 與 not 為布林邏輯判斷的內建字, and 是所有條件都需要符合才會成立,or 則是其中的一個條件符合就會成立,not 則是要該條件不符合才會成立。
內建字 | 說明 |
And | 且,所有條件須皆成立。if 上漲 and 成交量放大 then 買進。要兩個條件都符合才會買進。 |
Or | 或,只要有一個條件成立。if 上漲 or 成交量放大 then 買進。只要一個條件符合就會買進。 |
Not | 非,該條件不符合才會成立。if not 上漲 then 買進。只要條件不符合就會買進。 |
另外還有比較進階的使用方式,就是用 () 串聯。
if (上漲 and 成交量放大) or 收盤價 > 均線 then 買進。
以上的例子當中,只要 (上漲 and 成交量放大 ) 或是 收盤價>均線 ,當中兩組有一組條件成立就會觸發買進訊號。而其中我們將 (上漲 and 成交量放大 ) 用 () 綁釘在一起,使之成為同一組的條件。
程式交易的的策略,大多數是基於 K 棒來作為條件判斷或是指標計算。在 MultiCharts 當中,K棒價格的開高低收就是很直觀的Open、High、Low 跟 Close。
除此之外 value[N] 是前 N 根 K棒的值,例如:C[1] 代表的是前一根 K棒的收盤價、C[2] 代表的是前兩根K棒的收盤價、 H[2] 就是前兩根 K棒的收盤價。
內建字 | 說明 |
Open | 開盤價,縮寫為 O |
High | 最高價,縮寫為 H |
Low | 最低價,縮寫為 L |
Close | 收盤價,縮寫為 C |
value[N] | 向前數 N根 K棒,當時的 value 值 |
時間,在我們寫策略的時候也是常常使用到的條件判斷。時間可細分為年、月、日、時。在討論時間相關內建字之前,我們必須先了解在 MultiCharts PowerLanguage 的架構中,日期與時間的顯示方式。
在 MultiCharts 的日期格式為 YYYMMDD。舉個例子,2021/1/1 會顯示成1210101。
1210101當中,前三位數字121為年份, PowerLanguage 的語法中,年份預設為西元1900年起算之年數,所以所使用的年份要在減去1900。所以 2021年1月1號,就會顯示成「1210101」(2021-1900=121)。
而月份與日期就相對直觀很多了,須把未滿兩位數的數字用 0 補滿。
而 MultiCharts 的時間格式為 HHMM,採24小時制,比如說下午兩點零一分,為「1401」。早上八點四十五分 ,為「0845」。
內建字 | 說明 |
Date | 日期,縮寫為 D,格式為YYYMMDD。 2021年1月1號,顯示為「1210101」(2021-1900=121)。 |
Time | 時間,縮寫為 T,格式為HHMM。 24小時制,下午兩點零一分,顯示為「1401」。 |
Year(D) | 年份,格式為YYY( 西元1900年起算之年數,2021年會顯示成「121」,2021-1900=121 )。 |
Month(D) | 月份,格式為M。三月會回傳3,十月會回傳10。 |
這一系列的內建字是我認為非常人性且實用的字,而也不會有任何閱讀障礙,英文單字難度相當小學生等級。
很多邏輯的需求都能夠透過以下程式碼達成。
例如:出場後三天出場,if D-ExitDate(0)>=3 then sell next bar market
內建字 | 說明 | |
進場內建字 |
BarsSinceEntry | 進場後經過幾根K棒。 |
EntryPrice | 進場價 | |
EntryName | 進場名稱 | |
EntryDate | 進場日期 | |
EntryTime | 進場時間 | |
出場內建字 |
BarsSinceExit | 出場後經過幾根K棒 |
ExitPrice | 出場價 | |
ExitName | 出場名稱 | |
ExitDate | 出場日期 | |
ExitTime | 出場時間 |
MarketPosition 和 CurrentContracts 為部位相關的內建字,可以顯示部位方向與持倉數量。
MarketPosition 是顯示部位方向,多單為正1,空單為負1,空手為0,比如多單 1口是「1」,空單 100口是「-1」。只考慮方向不考慮持倉的數量。
CurrentContracts 是顯示自己持有的口數,不管是多單 3口或是空單 3口都是回傳「3」,空口回傳「0」。
而實務上我們為了要同時顯示部位的方向和數量。會將以上兩個函數相乘 ( MarketPosition * CurrentContracts ) ,就可以5口空單回傳「-5」、空手回傳 「0」、 多單2口回傳 「2」。
內建字 | 說明 |
MarketPosition | 部位方向,只顯示1(多單)、-1(空單)、0(空手) |
CurrentContracts | 在倉口數,只顯示持有單位數量 |
MarketPosition * |
同時顯示部分及口數 |
如果要顯示這次交易的最大獲利要使用 MaxPositionProfit ,最大虧損使用 MaxPositionLoss。
內建字 | 說明 |
MaxPositionProfit | 本次交易最大曾經獲利金額 |
MaxPositionLoss | 本次交易最大曾經虧損金額 |
BigPointValue | 每一大點的點值金額 |
內建字 | 說明 |
SetStopLoss | 設定停損金額 |
SetExitOnClose | 尾盤平倉部位 |
SetBreakEven | 損益兩平出場 |
SetProfitTarget | 設定停利金額 |
內建字 | 說明 |
plot | 繪製指標或 K線 |
text_new | 標示特定的文字,格式為 “文字” ,文字為淺綠色 。 |
本篇取自「MultiCharts 程式交易|從零到一快速上手」試閱內容,
更多課程內容:https://quantpass.org/mc_onlineclass-2/
想請問如果期指收盤時間(05:00)後將電腦關機或是休眠後關閉MC,於當天開盤8:45重新啟動MC,是否就無法抓取05:00前的均線資料?那要如何才能抓到開盤前的資料呢?
可以的,MC會自己回補資料