arleigh418 / python-and-Taiwan-stock-market

Python 金融市場賺大錢聖經:寫出你的專屬指標
54 stars 17 forks source link

tech_macd_ma的疑問 #18

Open RJ0223 opened 2 years ago

RJ0223 commented 2 years ago

你好, 在bt.ind.MACDHisto(period_me1=12,.......)這段程式碼中,你是如何知道 "( )" 內要放進什麼參數的? 因為我想使用其他指標,可是我從bt的官方文件中,看不懂要如何在其他指標的 ( ) 內的放相關的參數 還請你幫忙解惑一下,謝謝你!!!

btw, 在bt的KD指標他的算法是不是跟台灣的KD指標算法不太一樣? 我看Stochastic裡面有很多種類,不知道該用哪一個

arleigh418 commented 2 years ago

Hi 您好~ 其實最簡單的方式就是直接Ctrl+右鍵點進去看程式 (以vscode來說是這樣操作) 如果您點擊Histo進去,應該可以看到他的程式有兩個物件: class MACD(Indicator) class MACDHisto(MACD)

通常在框架中,您看到Indicator在括弧裡,他通常會對應一個params(),params裡面帶有數字的,就是我們通常傳入的參數(如果您選擇直接call函數不傳參,那他就會帶他預設的那些數字),沒有帶數字的有一些是他框架內的其他物件,例如是拿來計算指數的物件等等,這個就比較複雜,跟他的框架設計有關。

另外MACDHisto裡面,您可以看到他不是帶Indicator,他是帶前面的MACD類,這意味著他是MACD的子類,他的一個小弟,所以他原則上會共用MACD的東西,換言之您是call MACDHisto,但他其實會先去找他的大哥MACD,然後再計算MACDHisto的東西給你,所以他所需要的參數基本跟MACD一樣。

arleigh418 commented 2 years ago

另外,沒錯! MACD、KD等等國內外的說明蠻不一致的,所以通常我們在開發的時候做法就是直接問需求者公式,然後去看套件的程式到底哪一個才符合這個公式,這樣最準確,也不太需要糾結一些名詞。

RJ0223 commented 2 years ago

你好, 謝謝你的回覆,先前的問題大致上都沒問題了,不過我現在有另外一個問題要詢問你 我現在想使用KD指標,但是我看了bt給的套件,沒有一個符合台灣的KD指標算法,唯一比較接近的是Stochastic這個物件,但是他的計算方式還是差了一點,如下圖。因為台灣的K值與D值算法是用加權移動平均法計算的,但是Stochastic卻只是用一般的移動平均計算,想請問你,我是否可以在我的策略int物件中,利用Stochastic給出的值,再去計算我需要的值? image image

因為我有試著去計算我所需要的值,如下圖,但是卻會跑出錯誤:IndexError: array index out of range。但若我不去自己計算而直接使用Stochastic給的值,是可以順利跑出結果,所以才想問你說,是我的計算方式有誤,還是需要用其他方式? 在麻煩您幫我解答,真的非常謝謝您。 image

arleigh418 commented 2 years ago

Hi 您好,基本上具備時間概念的資料 (e.g. 當前 [0] 前一刻 [-1] 前兩刻 [-2])並非是init的工作。 換言之init並不知道所謂的[-1]是指前一刻,時間的概念是next() function幫我們打造出來的。

您的問題我認為比較簡單的解法有二:

  1. 在外面算好後將值匯入backtrader框架中 (您可以查一下文檔,他們有說明如何feed)
  2. 在next中計算K、D,只是說您可能思路要稍微變化一下,例如K[-1] 前一刻的k值您要在當前自行計算前一刻的K? 還是丟一個List出來儲存(如果您要這樣做記得list要放在init裡創建,放在next會被每一刻重置)? 那您要想好第一個K值如何定義。然後cross over您可以自行模擬,例如當前A >=B線 且 前一刻A<B線則視為向上穿越。