自OpenAI 推出ChatGPT後,編寫交易策略變得比以往更加容易。過去學習編寫運用Multicharts及Amibroker編寫策略時需要先熟背大量的語法,但現在ChatGPT可以替你在短時間內完成編寫策略,而且更可用中文給它指令,甚至可直接做回測。

   雖目前ChatGPT的數據只到2021年,但相信不久的將來數據會更新,而且更可以有實時數據。

   現在學習Multicharts及Amibroker重點只需學習語法的基本原理,然後策略由ChatGPT編寫,有了結果後可直接Copy到Multicharts及Amibroker使用,可以做回測及優化。

   但當然,ChatGPT編寫的策略仍需要有基本語法知識去驗證是否有錯誤,但學習的過程相信會比以往變得更容易。我們會將大量的策略給大家示範,除了基本運用技術指標組合,還包括波浪理論、Pair Trade方法、又或看重磅股炒期指的策略等,而且包括了港股、美股、期指、美期、槓桿ETF等。

   先看看ChatGPT寫出來的策略結果,再從大量練習中學習如何驗證ChatGPT寫的結果有否錯漏。過去可能需要半年或一年的時間才能有足夠的經驗去運用程式,但現在相信只需要一個月的時間便能熟習Multicharts及Amibroker,再透過我們給學員的Plug-in便能連接SP Trader、富途牛牛、Webull(微牛證券)等進行全自動交易。

————————————————————————————————————————————————————————————————

如何免VPN及海外電話也能用ChatGPT

用ChatGPT寫Multicharts的power language確實十分方便,除了可讓新手學習得更快,當你用multicharts寫好一個策略後,更可問ChatGPT給你修改的意見,但新手註冊ChatGPT時總覺得很「麻煩」﹕因為除了需要海外電話收SMS外,又要用VPN,但其實現在已十分方便﹕因為只要download POE 這個app , 選ChatGPT 照樣可用來寫Multicharts Power language.


__________________________________________________________________________________________________________________________________________________

ChatGPT 運用外掛可使用2021年後資料

首先大家要明白,ChatGPT能夠寫Multicharts的語言其實只是因為它能在網上搜尋資料,網上有關Mulitcharts Powerlanguage的教學根本很多,ChatGPT能迅速翻譯及整合這些資料給用家答案。不過,相信不少用戶也聽過,OpenAI 刻意將 ChatGPT 的檢索資料庫限制在 2021 年以前的資料,所以大家可能會發現,Multicharts有些用法又好像有點不同。

2020年6月Multicharts 14 Beta 版(測試版)才推出,正式推出 Multicharts 14這個版本是在2021年左右,若有些交易策略是其他炒家在2021年之後在網上發佈的,則ChatGPT便有可能搜尋不到。

不過,其實是有方法突破這個限制的,我們可以透過 Chrome 或Firefox 這兩款瀏覽器的外掛程式,讓 ChatGPT 聊天機器人也可以簡單檢索整理 Google 搜尋到的最新資料內容。

首先大家要下載一個下載名為「WebChatGPT: ChatGPT with internet access」的外掛

如使用Chrome,可到以下連結下載:

https://chrome.google.com/webstore/detail/webchatgpt-chatgpt-with-i/lpfemeioodjbpieminkklglpmhlngfcn

如使用Firefox,則可到以下連結下載:

https://addons.mozilla.org/en-US/firefox/addon/web-chatgpt/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search

安裝時會像其他外掛一樣先有一個「警告」,但點擊「允許此擴充套件於隱私瀏覽視窗中執行」便可以。成功安裝後便可看到ChatGPT的底部新增了一個部份,可以看到可選「Any Time」及「Any Region」。但實測是,ChatGPT可以搜尋到部份2021年後的資料,至少在協助寫Multicharts 語法時會好一點,但若要用ChatGPT直接為策略做Backtest則仍未做到。

___________________________________________________________________________________________________________________________________________________

ChatGPT與Multicharts共同使用的竅門

筆者發現不少人最常會直接叫ChatGPT設計一個投資組合,這樣做其實根本沒有任何意思,例如大家可試試:

「請在港股、美股、日股市場中挑選5隻值得長期持有的股票」

ChatGPT選出了長和(00001)、騰訊(00700)、Apple(US:AAPL)、Amazon(US:AMZN)及住友化學(T:3401)。

再問他是用什麼準則選股,ChatGPT的答案是基本面、行業前景、投資價值及技術分析。

但若再問他技術分析的部分用了那個技術指標,其實它的答案十分含糊。而且這種選股方式應大部份炒家也不會滿意。

不過,若用ChatGPT來修改你用Multicharts或Amibroker的策略則會更好。把已寫好的策略問它意見,究竟有那個部份值得修改,它自動會給你答案,而且會用Multicharts 的語法寫出來,雖然有些語法ChatGPT會寫錯,但再自行更改也肯定比全部要自已寫更方便。

假設筆者要寫以下分三注炒期指的策略:

  1. 當10日平均線高於20日平均線買入1張期指
  2. 若入市後價格高於入市價50點會再買入1張期指(第二注)
  3. 若入市後價格高於入市價達100點則會再買入1張期指(第三注)
  4. 若最低價創最近五支陰陽燭的新低便平倉。

Multicharts 語法:

inputs: Price( Close ), FastLength( 10 ), SlowLength( 20 ) ;

variables: ma1( 0 ), ma2( 0 ) ;

ma1 = AverageFC( Price, FastLength ) ;

ma2 = AverageFC( Price, SlowLength ) ;

If marketposition = 0 and  ma1 cross over ma2 then buy 1 contracts next bar at market;

If marketposition = 1 and currentcontracts = 1 then buy 1 contracts next bar at entryprice +50 stop ;

If marketposition = 1 and currentcontracts = 2 then buy 1 contracts next bar at entryprice +100 stop ;

If marketposition = 1 then sell next bar at lowest (low,5) stop ;

只是簡單的輸入整段語法,還未問任何問題,ChatGPT已立即有反應,而且立即提供解釋及教學:

再問它:「這個策略如何可改得更好?」

它確實能立即提出一些修改策略的意見,而且這些意見會比直接要它推介股票更有用,即使是較複雜的策略,它也可以給多中肯的建議。

然後可以再問它:「請用Multicharts 的Power Language寫出你的建議」

ChatGPT能直接用Multicharts 的Power Language寫一個修改後的版本:

以下便是它的修改版本:

以下是使用Multicharts的Power Language编写的一个简单的均线交易策略:

inputs:

    Price(Close),

    FastLength(10),

    SlowLength(20),

    StopLossPoints(50),

    MaxContracts(2);

variables:

    ma1(0),

    ma2(0),

    buyContracts(0);

ma1 = AverageFC(Price, FastLength);

ma2 = AverageFC(Price, SlowLength);

if marketposition = 0 and ma1 > ma2 then

begin

    buyContracts = 1;

    buy(buyContracts) next bar at market;

end

else if marketposition > 0 and buyContracts < MaxContracts then

begin

    buyContracts = buyContracts + 1;

    buy(buyContracts) next bar at entryprice + StopLossPoints stop;

end;

if marketposition > 0 then

    sell next bar at lowest(low, 5) stop;

“`

而且ChatGPT還會提供中文解釋:

該策略通過計算快速和慢速移動平均線之間的交叉來進行交易決策。

當快線上穿慢線時,產生買入信號;當已經持有頭寸時,可以通過添加止損來控制風險;當市場處於多頭狀態時,可以通過止損來保護利潤

在代碼中,我們還添加了一些變數和參數,例如StopLossPoints表示每個合約的止損點數,MaxContracts表示最多可以持有的合約數。此外,我們還對代碼進行了一些注釋,以方便理解。需要注意的是,這只是一個簡單的交易策略,不能保證一定盈利,還需要根據實際情況進行調整和優化。建議在模擬帳戶中進行測試和驗證,以便更好地瞭解其性能和風險。」

大家會發現,用這種方法得到的答案,比直接要ChatGPT選股及提供選股準則更有效。

當日後要寫自己設計的策略時,先用ChatGPT逐小部份寫出來,若已對Multicharts的Power Language有基本認識,很容易便能察覺有那部份會寫錯,然後把每個小部份組織成整個策略。

最後便是把整個策略給ChatGPT再修改及給予意見,這樣只要你有Power Language的基本認識已能做到,比過去要背誦大量的Power Language語法方便得多。

此外,筆者曾嘗試要ChatGPT為策略進行回測(backtest),大家可以看到它確實能夠做到,但數據只在2021年前,若ChatGPT日後能運用最新的數據,相信用Power Language語法寫好策略後,根本便不需要Multicharts,直接可用ChatGPT做回測。

__________________________________________________________________________________________________________________________________

若與Multicharts 配合運用需要GPT4嗎 ?

2023年3月OpenAI正式推出了GPT-4,相信大家在網上也隨意找有關GPT-4的新功能,主要就是可以不只用文字對話,還能輸入圖片給GPT-4解讀,而且解答能力的「正確程度」會比GPT3.5為高。另外,能輸入的Token數量也大幅增加到32,768個,相當於50頁文字。

不過,GPT4與GPT3.5的訓練資料其實都只是用到2021年9月為止的開放網路資料,能力是升級了,但資料仍然未有更新,最大的特色就是可以看圖,輸入指定圖片後,GPT 4就可以用文字來解釋圖片內容。但若然想用ChatGPT來協助寫Multicharts的Power Language,其實筆者暫時認為沒有太大的幫助。

此外,GPT 4可以透過指定的設定來規限它的用語、風格、語調等條件,例如可以要求GPT4像數學課老師一樣的語調回答問題。這個功能也對寫Multicharts的Power Language完全沒有額外的幫助。

   目前ChatGPT Plus付費用戶可優先排入試用GPT4,但留意即使你已用VPN登記成為Open AI的用戶,這個系統暫時仍不收香港的信用卡,變相令你想課金也沒有辨法。但我們已介紹可以利用 Poe 來使用ChatGPT,目前Poe有提供用戶使用GPT4,但每日只限問一次,自然沒有多大用處。

若你願意付每月159港元的費用,則可每日問300條問題。無論你是用iOS版本的Poe還是網頁版,都必需付月費才能使用GPT4。

若大家有興趣使用GPT,先在POE的最底部找到「Setting」,然後選擇「Subscribe to Poe」,你可選擇每月付款,也可以選擇付年費,目前年費為1599港元,變相令每月的費用降至133.25港元左右。但大家留意一點,每月訂閱自然可以下個月便除消,隨時又可再繼續,但付了年費卻不能退款的,這點像其他很多收費平台也是如此。付款方式方面,Poe接受以Apple pay付款,對本港用家來說就方便得多。 

不過,是否要付款申請使用GPT4,對我們來說最重要的自然是用GPT4寫Multicharts的語法否會較好?

    筆者試用一個較複雜的交易策略分別給GPT3.5及GPT4試寫Multicharts的語法,大家可看看以下的分別:

可否用Multicharts 的pOWER LANGUAGE 編寫以下策略:

交易納指三倍槓桿ETF STOCK CODE: (SQQQ):

在1分鐘圖上,當技術指標 Intraday volume weighted average price 低於某分鐘的收市價達0.2%時買入,買入後股價上升0.3%止盈,下跌0.15%止損。

另外,當 Intraday volume weighted average price 高於某分鐘的收市價0.2%時沽空,沽空後股價跌0.3%止盈,上升0.15%止損。

「ChatGPT 3.5的答案」:

Inputs:

    buy_threshold(0.2), // 買入門檻百分比

    sell_profit(0.3), // 賣出盈利百分比

    sell_stop_loss(-0.15), // 賣出止損百分比

    short_threshold(0.2), // 沽空門檻百分比

    cover_profit(-0.3), // 買回盈利百分比

    cover_stop_loss(0.15); // 買回止損百分比

Vars:

    vwap(0), // Intraday volume weighted average price

    close_price(0), // 收盤價格

    buy_signal(false), // 買入信號

    sell_signal(false), // 賣出信號

    short_signal(false), // 沽空信號

    cover_signal(false); // 買回信號

// 計算Intraday VWAP和收盤價格

vwap = IntradayVWAP(1);

close_price = Close;

// 計算買入信號和賣出信號

if vwap < close_price * (1 – buy_threshold / 100) then

    buy_signal = true;

else if vwap > close_price * (1 + short_threshold / 100) then

    short_signal = true;

// 計算止盈和止損價格

vars:

    buy_target_price(0),

    buy_stop_loss_price(0),

    short_target_price(0),

    short_stop_loss_price(0);

if buy_signal then

begin

    buy_target_price = close_price * (1 + sell_profit / 100);

    buy_stop_loss_price = close_price * (1 + sell_stop_loss / 100);

end

else if short_signal then

begin

    short_target_price = close_price * (1 + cover_profit / 100);

    short_stop_loss_price = close_price * (1 + cover_stop_loss / 100);

end;

// 進行交易

if buy_signal and MarketPosition = 0 then

    Buy(“SQQQ_Long_Entry”) 3 shares next bar at Market;

if short_signal and MarketPosition = 0 then

    SellShort(“SQQQ_Short_Entry”) 3 shares next bar at Market;

if MarketPosition > 0 then

begin

    if Close >= buy_target_price then

        Sell(“SQQQ_Long_Exit”) next bar at Market;

    else if Close <= buy_stop_loss_price then

        Sell(“SQQQ_Long_Stop_Loss”) next bar at Market;

end

else if MarketPosition < 0 then

begin

    if Close <= short_target_price then

        BuyToCover(“SQQQ_Short_Exit”) next bar at Market;

    else if Close >= short_stop_loss_price then

        BuyToCover(“SQQQ_Short_Stop_Loss”) next bar at Market;

end;

這個策略使用`IntradayVWAP`函數計算Intraday VWAP和收盤價格,並根據買入門檻和沽空門檻計算買入信號和沽空信號。當進入交易後,根據止盈和止損百分比計算止盈和止損價格。

最後,使用`Buy`和`SellShort`進行買入和沽空交易,使用`Sell`和`BuyToCover`進行賣出和買回交易。請注意,這只是一個示例,您可能需要進一步調整和優化策略以適應您的交易風格和市場環境。

我們再比較一下ChatGPT4 答案又是否不同?

「ChatGPT 4 的答案」:

Inputs:

          StockCode(“SQQQ”),

          PercentBuy(0.2),

          PercentSell(-0.2),

          TargetProfit(0.3),

          StopLoss(0.15);

Vars:

          IntraVWAP(0),

          PositionSize(0),

          EntryPrice(0);

IntraVWAP = (V * C) / V;

PositionSize = 1;

If BarStatus(1) = 2 Then Begin

          If IntraVWAP < C * (1 – PercentBuy / 100) Then Begin

                    Buy(“Long_Entry”) PositionSize Shares Next Bar at Market;

                    EntryPrice = Close;

                    SetProfitTarget(“Long_Entry”, EntryPrice * (1 + TargetProfit / 100));

                    SetStopLoss(“Long_Entry”, EntryPrice * (1 – StopLoss / 100));

          End;

          If IntraVWAP > C * (1 + PercentSell / 100) Then Begin

                    SellShort(“Short_Entry”) PositionSize Shares Next Bar at Market;

                    EntryPrice = Close;

                    SetProfitTarget(“Short_Entry”, EntryPrice * (1 – TargetProfit / 100));

                    SetStopLoss(“Short_Entry”, EntryPrice * (1 + StopLoss / 100));

          End;

End;

這個策略用到很多不同的參數,ChatGPT 能夠initialize足夠的參數供backtest, 這方面實在做得不錯。不過,大家可以看到無論是ChatGPT 3.5還是ChatGPT4都用了「IntradayVWAP」 這個Function,但其實Multicharts根本沒有內置這個functions,我們要用VWAPResettable來計算VWAP。

「正確的寫法如下」:

input:

    Price(AvgPrice),

    LocalHrsOffset(0),

    refTime(1000),                     

    time1(0900),

    time2(0930),

    time3(1129),

    time4(1315),

    time5(1415),

    BuyThreshold(0.002),

    BuyProfitTarget(0.003),

    BuyStopLoss(0.0015),

    ShortThreshold(0.002),

    ShortProfitTarget(0.003),

    ShortStopLoss(0.0015);

variables:

    var0(0),priceAtRef(0);

var0 = VWAPResettable(Price,LocalHrsOffset,time1,time2,time3,time4,time5);

if time = refTime then

          priceAtRef = Close;

if time <> refTime then

          priceAtRef = priceAtRef[1];

if priceAtRef > 0 and var0 > 0 and Close < var0 * (1 – BuyThreshold) And MarketPosition = 0 Then

begin

          buy next bar at market;

end else if marketposition > 0 then

begin

          Sell (“Long SL”) next bar at entryprice * (1 – BuyStopLoss) stop;

          Sell (“Long TP”) next bar at entryprice * (1 + BuyProfitTarget) limit;

end;

if priceAtRef > 0 and var0 > 0 and Close > var0 * (1 + ShortThreshold) And MarketPosition = 0 Then

Begin

          SellShort next bar at market;

End else if marketposition < 0 then

begin

    Buytocover (“Short SL”) next bar EntryPrice * (1 + ShortStopLoss) stop;

    Buytocover (“Short TP”) next bar EntryPrice * (1 – ShortProfitTarget) limit;

end

ChatGPT確實對學習Multicharts的Power Language很有幫助,但它有時候會參考一些網上錯誤的寫法,無論是ChatGPT 3.5還是ChatGPT4都會有寫錯的時候,但我們逐步熟習Multicharts的Power Language後便會懂得自行修改,令ChatGPT真正變成協助我們寫策略的好幫手,至少不用所有都由頭寫起。

比較過ChatGPT 3.5及ChatGPT4寫Multicharts策略的結果後,筆者認大家若想運用ChatGPT來學習Multicharts的Power Language,暫時仍未需要用到ChatGPT4,或許日後有再進一步更新的版本才會更有幫助。