2023-12-15|閱讀時間 ‧ 約 11 分鐘

從樸實無華的再出發之一[QuantTradingwithPython_9]

 

raw-image


從樸實無華的再出發之一


接上一篇,看來花花綠綠的東西跟我們是無望了。對原本接下來的計畫也只好做一些改變。所以衹能把我們的程式碼,重新移動到了7月7號那篇文章的進度NBLOG_20230707使用TA_LIB(PANDAS_TA) 打造一個交易策略實用工具(2TA_LIB輕探之馬克快來幫幫手)。就決定從這個地方開始新方向。先確認個進度,原始程式碼與輸出的結果如下。


import yfinance as yf

import talib

import mplfinance as mpf

import pandas as pd

%matplotlib notebook

# 下載AAPL股票的資料

symbol = "AAPL"

data = yf.download(symbol, start="2023-01-01", end="2023-08-14")

# 計算吞噬K線組合

engulfing = talib.CDLENGULFING(data['Open'], data['High'], data['Low'], data['Close'])

# 找出吞噬K線組合的日期

engulfing_dates = data.index[engulfing != 0]

# 在吞噬K線組合的日期上標示三角箭頭

data['Arrow'] = pd.Series(index=data.index, dtype='float64')

data.loc[engulfing_dates, 'Arrow'] = data.loc[engulfing_dates, 'Low'] - 2

apd = mpf.make_addplot(data['Arrow'], type='scatter', markersize=60, marker='^', panel=0)

# 繪製K線圖和成交量

mpf.plot(data, type='candle', volume=True, title=symbol, ylabel='Price', addplot=apd)



 

既然要動刀給它手術了;就順便把一些也忍了很久的缺點一併解決。所以在這一章中,先來解決一些關於資料下載的問題。首先我想讓下載資料長度活起來。蠻討厭的;每次總是要去敲鍵盤,輸入開始日期以及資料的截止日期。對吧!沒說錯吧?我看見有人舉手了。所以必須要調用jupyter notebook的部件小工具widgets,來幫大夥解決這個問題。這個小工具就叫做日期挑選器Date picker。

程式範例如下、、


widgets.DatePicker(

    description='Pick a Date',

    disabled=False

)

看起來還蠻容易使用的。但事實上它有兩個是可以控制的;首先是上面的這個description。衹是用來設定一個指示文字的標題欄,沒什麼技術含量的。另外還有一個value。這個便是輸出點擊後的日期變數。在之後的範例程式中可以看到它的使用。但在事實上,這個變數是可以雙向使用的。也就是說我們可以來設定這個小工具呈現時候所預設的日期。放心,這個我們之後的範例中會再介紹。現在就來看看第一步改造後的結果。


import yfinance as yf

import talib

import mplfinance as mpf

import pandas as pd

import datetime

import ipywidgets as widgets

from IPython.display import display

# 創建日期小部件

start_date_widget = widgets.DatePicker(description='開始日期')

end_date_widget = widgets.DatePicker(description='結束日期')

button = widgets.Button(description='開始繪圖')

# 定義按鈕點擊事件處理函數

def plot_stock_data(button):

    # 獲取所選的開始日期和結束日期

    start_date = start_date_widget.value

    end_date = end_date_widget.value

    # 下載AAPL股票的資料

    symbol = "AAPL"

    data = yf.download(symbol, start=start_date, end=end_date)

      # 計算吞噬K線組合

    engulfing = talib.CDLENGULFING(data['Open'], data['High'], data['Low'], data['Close'])

      # 找出吞噬K線組合的日期

    engulfing_dates = data.index[engulfing != 0]

      # 在吞噬K線組合的日期上標記三角箭頭

    data['Arrow'] = pd.Series(index=data.index, dtype='float64')

    data.loc[engulfing_dates, 'Arrow'] = data.loc[engulfing_dates, 'Low'] - 2

    apd = mpf.make_addplot(data['Arrow'], type='scatter', markersize=60, marker='^', panel=0)

      # 繪製K線圖和成交量

    mpf.plot(data, type='candle', volume=True, title=symbol, ylabel='Price', addplot=apd)

# 將小部件和按鈕顯式顯示

display(start_date_widget)

display(end_date_widget)

display(button)

# 將按鈕的點擊事件與繪圖函數綁定

button.on_click(plot_stock_data)

 


好的,這下子我們動動滑鼠。就可以自由的選擇下載資料的長度了。如果再配上了,我們 Jupyter notebook的神奇指令 %matplotlib notebook。這下子觀察的自由度就會更大了。

弄到這裡了,可是還是覺得有個地方癢癢的對不對?既然讓我們恨得牙癢癢的;那就用力抓吧!接下來再下一刀,把這個沉痾解決了。再請來個小部件,把股票觀察視野擴大。


import yfinance as yf

import talib

import mplfinance as mpf

import pandas as pd

import datetime

import ipywidgets as widgets

from IPython.display import display

# 創建日期和股票代碼小部件

start_date_widget = widgets.DatePicker(description='開始日期')

end_date_widget = widgets.DatePicker(description='結束日期')

symbol_widget = widgets.Text(description='股票代碼')

button = widgets.Button(description='開始繪圖')

# 定義按鈕點擊事件處理函數

def plot_stock_data(button):

    # 獲取所選的開始日期、結束日期和股票代碼

    start_date = start_date_widget.value

    end_date = end_date_widget.value

    symbol = symbol_widget.value

        # 下載股票資料

    data = yf.download(symbol, start=start_date, end=end_date)

        # 計算吞噬K線組合

    engulfing = talib.CDLENGULFING(data['Open'], data['High'], data['Low'], data['Close'])

        # 找出吞噬K線組合的日期

    engulfing_dates = data.index[engulfing != 0]

        # 在吞噬K線組合的日期上標記三角箭頭

    data['Arrow'] = pd.Series(index=data.index, dtype='float64')

    data.loc[engulfing_dates, 'Arrow'] = data.loc[engulfing_dates, 'Low'] - 2

    apd = mpf.make_addplot(data['Arrow'], type='scatter', markersize=60, marker='^', panel=0)

        # 繪製K線圖和成交量

    mpf.plot(data, type='candle', volume=True, title=symbol, ylabel='Price', addplot=apd)

# 將小部件和按鈕顯式顯示

display(start_date_widget)

display(end_date_widget)

display(symbol_widget)

display(button)

button.on_click(plot_stock_data)




是吧,找來了老朋友幫我們抓癢。這個小部件就可以解決了,輸入股票代碼的問題。看起來一切都朝著所要的方向前進。今天就先牛刀小試,解決這兩個問題。在下一篇當中。會依然朝著這個方向去拓展我們需要的功能。希望改變後的這個開發方向是正確的。那麼我們這一篇就先談到這裡,也真誠的期待著你對這系列文章的反饋與建議。很期待下期很快就能跟大家再見面。祝你早安,午安晚安。




分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

作者的相關文章

Parkson Dow的沙龍 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.