顯示具有 PowerLanguage/EasyLanguage基礎語法 標籤的文章。 顯示所有文章
顯示具有 PowerLanguage/EasyLanguage基礎語法 標籤的文章。 顯示所有文章

2021年1月7日

[置頂] 如何入門程式交易,MultiCharts學習地圖

 想學MultiCharts/程式交易的新同學們,以下學習地圖供參考:



 1.MultiChrts軟體安裝設定 

-工欲善其事,必先利其器,透過詳細的步驟解說,先把工作平台給搞定-

 2.MultiCharts程式語言(PowerLanguage) 

-學習把交易邏輯用語法表達出來,即使從零開始沒有程式背景也可以學-

 3.開發交易策略、回測及參數最佳化  

-從經典策略觀摩開始,到建立自己的策略如何回測與參數調整,逐步邁向上線實戰-

 4.資金管理 

-資金管理是程式交易要成功的最後一哩路


 5.MultiCharts常見疑難雜症Q&A 




歡迎加入LINE@
加入好友
(點擊上方圖示)

2019年10月6日

PowerLanguage如何寫「兩條均線越來越靠近(收斂)」

PowerLanguage怎麼表達「兩條均線越來越靠近(收斂)」?

思考一:兩條均線越來越靠近,意即兩條線間距變小,間距就是兩條均線相減的值,變小就是當下的值小於前一個值,就是value1 < value1[1]。

思考二:兩條均線可能短均線值大於長均線值,也可能相反,由於間距值不會是負數,所以用上計算絕對值得函式--absvalue()。

所以串起來,寫成程式碼即是:

value2=average(close,5);
value3=average(close,20);

value1 = absvalue(value2-value3);
if value3 < value3[1] then ....



2019年10月5日

PowerLanguage如何寫「4個條件中任3個以上符合即進場」

有一個簡單的方法,直接用語法說明,如下:

Condition1=…..
Condition2=…..
Condition3=…..
Condition4=…..

if condition1=true then value1=1 else value1=0;

if condition2=true then value2=1 else value1=0;
if condition3=true then value3=1 else value1=0;
if condition4=true then value4=1 else value1=0;

if value1+value2+value3+ value4>=3 then (進場)


4個條件中任3個符合即進場,重點是不限定哪3個條件符合,且4個都符合也要進場,用以上語法表達雖然感覺有點tricky,不過簡單實用,同理類推,m個條件中任n個以上符合即進場也可以比照辦理。

2019年3月3日

分批進場與分批出場

先建立一個觀念:把加減碼訊號分出來開發成獨立策略,再統整成一個投資組合(各訊號是獨立運行下單),往往比把多個交易訊號通通塞在單一策略裡要好,理由是分開寫可以獨立評估績效與調整,此外,合在一起寫也易發生因為語法控制不當導致訊號互相壓抑或是其他訊號不符預期的狀況。不過,還是會有需求要針對單一策略寫一些簡單的加減碼機制,介紹如下。

2019年1月21日

MultiCharts警示Alert功能(音效、Gmail等)

MultiCharts的Alert語法可以指示程式在符合特定條件時,以聲音、訊息視窗或是email(以Gmail為範例)通知使用者。本文介紹如何操作設定。


一、播放音效


當符合特定條件時需要系統發出提示聲響,主要有兩個作法,一個是在程式腳本下達「Alert」,MC圖表使用使再去開啟警示設定,此法只限定指標(Indicator);另一個方法是直接用「PlaySoung」語法,此法除了指標類外,訊號(Signal)也可採用,語法說明如下:



【方法一】在指標語法內寫「Alert」,再到MC圖表那邊進行指標警示設定:

我們直接以一個長短均線交叉為例,程式碼如下:

===============================================
Inputs:Len1(5),Len2(20);
Vars:MA1(0),MA2(0);

MA1=XAverage(close,Len1);
MA2=XAverage(close,Len2);
plot1(MA1);
plot2(MA2);

if MA1 cross over MA2 then Alert;
===============================================

設定產生「Alert」的條件,接著把上面指標放到MultiCharts圖表上,設定該指標「警示」功能,如下圖所示,至於音效檔為WAV格式,有需要其他不同音效也可以自行上網搜尋下載:



【方法二】使用PlaySound語法:
承上例,我們把alert改成PlaySound:

if MA1 cross over MA2 then PlaySound("C:\ding.wav");

"C:\ding.wav"為音訊檔存放位置,這個寫法適用指標類及訊號類,也不用另外去設定警示功能。


二、Gmail警示通知


延續上例,我們希望當均線交叉時發Mail通知,程式語法同上,我們希望通知內容可以完整詳細一點,可以在Alert後面使用Text函式補充,例如:

if MA1 cross over MA2 then Alert(Text("Cross over", GetSymbolname);

其中Text函式可以放補充資訊,會在通知郵件中顯示。

完成程式碼後,把指標放到圖表中,一樣到設定指標去設定警示(Alert),如下圖所示:




設定完成後可以透過設定區左下方的測試鈕進行測試。通常會寄送失敗多是Gmail安全性設定問題所致,可在登入Gmail狀態下進入下面網址進行開啟「允許低安全性應用程式」設定,如下圖:



成功設定後,收到的email通知樣式如下:

凱衛資訊有提供MultiCharts券商版用戶手機APP(Multicharts+)可即時接收委託、成交回報,但訊息有限,透過email雖然比較笨拙點,但也不失為一個監控Multicharts的解決方案。當然如果是專業版的MultiCharts則可以外掛DLL另外連結其他通訊軟體來做即時通知功能。

2018年9月16日

【MultiCharts】如何畫水平支撐壓力線(TL_NEW)

如果想要在MultiCharts畫上最近20根K的最高點的水平壓力線及最近20根K最低點的水平支撐線,如下圖所呈現,該如何辦到?可以用畫趨勢線的「TL_NEW」來完成。

2018年8月22日

【MultiCharts】新手如何寫多指標條件進場訊號(以KD、RSI、MA為例)

以技術指標來寫進出場策略是最基本好上手的寫法(最基本並不代表水平低無法獲利),一開始先用一個指標,接著可以嘗試用多個指標來搭配,本文示範初學者如何把自己習慣看的指標組成一個交易策略(以KD、RSI、MA指標為例)。

2017年12月19日

【MultiCharts】K線組合怎麼寫(以雙鴉躍空為例)

K線源於日本,又稱陰陽線或蠟燭圖,由開高低收繪成,透過實體、上下影線以及紅黑K的不同變化來解讀市場心理,例如墓碑線(長上影線)就代表上檔賣壓沉重,多根K棒組合形成更多樣不同型態以及相對印的市場訊息,例如常聽到的晨星、吞噬、三紅兵等等。有興趣的朋友推薦可以閱讀「強力陰陽線」這本經典書目,裏頭有很詳盡的介紹。

2017年3月23日

【MultiCharts】交易濾網怎麼寫

何謂「交易濾網」?簡單講就是在不該進場時阻止策略進場,以提高勝率。交易濾網怎麼寫,分為初階與進階,最基本的做法是直接修正訊號的敏感度或是增加進場確認條件,後者典型作法是設法先定義出大趨勢,例如用一條200MA定義長線趨勢,在均線上只做多訊(把空訊濾掉),在均線下指做空訊,不過這樣的濾網畢竟還是商品自身的價與量構成,如果可以把外部的資訊,例如大額交易人淨部位(籌碼)或是選擇權VIX指數等等,放進來當濾網,這個濾網是不是就更具有不同層次的視野與效果呢!進階做法就端看開發者的想像力與經驗值。 

2016年12月29日

【MultiCharts】從內建指標或訊號程式碼學怎麼運用函式

對於PowerLanguage初學者而言,很大的困擾就是不知該怎麼用程式表達想要達到的功能或計算,有些最基本的函式如Average、Highest等,學習別無他法,先背起來再說,但例如想以MACD指標來作為交易訊號,遇到第一個難題就是用什麼程式碼來計算(表達)MACD各項值,其實最簡單的方式就是直接參考PowerLanguage內建的訊號或指標範例。

2016年12月7日

【MultiCharts】轉折指標與函數(Pivot high、Pivot Low、SwingHigh、SwingLow)

「轉折」講起來帶有主觀成分,MC裡對轉折的界定是,以轉折高點為例(指標Pivot High)就是該K高點比左邊N根K棒及右邊N根K棒的高點都高(左右的N值可一樣或設不同),如下圖假設N=3所示:

2016年11月12日

【MultiCharts】交易策略怎麼寫---從參考內建訊號開始

跟大多數人一樣,筆者學期貨交易也是從技術分析開始,技術分析起手勢就是學指標,我們從指標可以判多空也進一步形成進場策略,我們熟悉技術指標,加上技術指標量化且直覺的特性,透過指標來擬訂交易策略是相當建議的入門初學方案。一樣的,想在MultiCharts上寫好第一個交易策略,萬事起頭難,怎麼下手?筆者的建議就是從技術指標切入。好處有二,一你不用天馬行空,挑一個熟悉的技術指標不難,二是MultiCharts有現成的內建策略可以參考。

2016年11月7日

【MultiCharts】交易策略開發流程

關於交易策略的開發流程,應該是沒有定論,每個人都有自己適應順序與方法,下圖是一般正規的做法,一個策略從發想到上線大概會經歷這幾個階段。

2016年10月8日

必學常用函式(Function)

學常用保留字就像學英文單字,而學函式就像學英文片語,一樣沒巧門,基本的先背起來,以下列出必學常用的函式及運用範例:

控制流程If…Then….

所謂寫程式換一種講法就是下指令給電腦,下指令終極語言結構就是:如果怎樣怎樣就去做甚麼動作。「If…Then…」這類控制流程就是下指令的語法,也可以說是整個PowerLanguage最重要也最常用的語言。

1.If…Then…(如果符合條件就去執行A動作)
範例:如果5MA向上交叉20MA,下根K棒就市價買進。

If average(close,5) cross over average(close,20) and marketposition<>1 then buy next bar at market;

2.If…Then…Else…(如果符合條件就去執行A動作,不符合就執行B動作)
範例:如果收盤價在20MA以上,均線(編號Plot1)顏色為紅色,反之,為綠色。

if Close > Average(Close, 20) then
SetPlotColor(1, Red)  //動作A後面沒有分號”;”
Else  //Else後面沒有分號”;”
SetPlotColor(1, Green);  //動作B後面有分號”;”作為語法結尾

3.If…Then Begin…End(如果符合條件就去執行A、B、C…等動作)
範例:如果收盤價在20MA以上,動作A,均線(編號Plot1)顏色設為紅色,動作B,發出警示。

if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);  //動作A後面有分號”;”
Alert;      //動作B後面有分號”;”
End;      //End後面有分號”;”

4.If…Then Begin…End Else Begin…End(如果符合條件就去執行A、B、C…等動作,不符合就去執行D、E、F…等動作)
範例:如果收盤價在20MA以上,動作A,均線(編號Plot1)顏色設為紅色,動作B,發出警示;反之收盤價沒有在20MA以上,則動作C,均線(編號Plot1)顏色設為律色,動作D,發出警示。

if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert("Close Above Average");
End         //沒有分號”;”
Else begin    //沒有分號”;”
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end;

以上幾種控制流程的語法運用,簡單歸納以下要點:
1.條件都可以是複數個,用「and」或是「or」串起來。
2.要執行多個動作用If…Then Begin…End,而只執行單一動作用If…Then…。
3.注意哪些地方要用分號”;”結尾,哪些不用。

變數(Variables)與參數(Inputs)宣告

在我們這篇「2行程式碼完成均線交叉策略」中,很直觀簡略地用兩行表達均線交叉訊號的程式碼如下:

If average(close,5) cross over average(close,20) then buy next bar at market;
If average(close,5) cross below average(close,20) then sellshort next bar at market;

進一步,我們把參數與變數運用進來,把兩行程式碼升等為正規的程式腳本,完成完整的程式碼如下: 

2016年10月7日

關於K棒的基本資訊(開、高、低、收、量)

交易或是技術分析最基本的工具就是研究盤讀K線的價與量,PowerLanguage內建價量常用保留字列表如下:

運算與邏輯符號(運算子)

闡述我們的交易策略,不外乎透過數學算式、關係及邏輯來表達,例如以下這個想法「當K線收盤價大於前根K高點10點以上且收紅K就買進」,寫成PowerLanguage就是:

If Close>High[1]+10 and Close>Open then Buy this Bar at market;

其中就須運用:「+」(數學運算)、「>」(關係運算子)、「and」(邏輯運算子)。

PowerLanguage程式腳本運作原理

我們用PowerLanguage編寫的交易邏輯或是指標稱為腳本(Script),腳本完成後,接著開啟MultiCharts主程式,把腳本放到K線上去跑(新增→指標或新增→訊號)。

而MultiCharts執行PowerLanguage程式腳本依循以下原則:

1.程式腳本是從第一行開始依序執行到最後一行,因此程式碼擺得先後位置不同,特別是變數的運算,會有不一樣的結果。

2.程式腳本是從圖上第一根K棒(時間最早的)開始一根一根依序執行,且是在每根K棒收完,確認開高低收量後,完整執行一次程式腳本(如果是開IOG(IntraBar Order Generation)則是每個Tick都執行一次程式碼)。

了解PowerLanguage程式腳本運作原理非常重要。寫程式的過程看似就是把想法轉換成語法,不過很多時候明明語法都沒錯,卻沒得到預期的結果,很可能就是沒有把上面的腳本運行原則給搞清楚。