banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

Pythonで便利な株式のオープンソースライブラリakshare

尝试して株式データを取得して調査してみましたが、検索と比較の結果、akshare というライブラリを使用することに決めました。このライブラリは常に更新されており、ドキュメントも中国語で詳細に記載されています。

画像
akshare ドキュメントのリンク:https://www.akshare.xyz/

7538ad090168ea082b8e1a961345ffc9
株式のさまざまなデータ取得方法
akshare ライブラリのインポート

1import akshare as ak
2import pandas as pd

1. 株式の基本情報データ#

1ak.stock_individual_info_em(symbol="000651")

7776dd5e1362e50450dcb6504b3836cf

2. リアルタイムデータ、当日の取引データ#

一度にすべての上場企業のリアルタイム市場データを取得します

f10f4f3f9dce838cea73df9a7f104747

3. 過去のデータ、過去の取引データ#

 ak.stock_zh_a_hist(symbol="000651", 
                    period="daily", 
                    start_date="20230701", 
                    end_date='20230725',
                    adjust=""
                 ) #不复权

640c7a929e8da5a1580881ff55622142

4. 資金の流れのデータ#

制限:指定した市場と株式の過去 100 日間の資金流れデータを一度に取得します

1ak.stock_individual_fund_flow(stock="000651", market="sz")

fdafbe268b2bac6eba1386136529ede3

5. 市場の価格、買い注文と売り注文の 5 桁#

ak.stock_bid_ask_em(symbol="000651")

2160d3d4d75105d61ef3243e6d6f276d

サンプル#

from datetime import datetime

import backtrader as bt  # 最新バージョンにアップグレード
import matplotlib.pyplot as plt  # Backtraderの問題により、pip install matplotlib==3.2.2が必要です
import akshare as ak  # 最新バージョンにアップグレード
import pandas as pd

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# AKShareを使用して株式の調整後データを取得し、最初の6列のみ取得します
stock_hfq_df = ak.stock_zh_a_hist(symbol="000001", adjust="hfq").iloc[:, :6]
# フィールド名を処理して、Backtraderの要件に合うようにします
stock_hfq_df.columns = [
    'date',
    'open',
    'close',
    'high',
    'low',
    'volume',
]
# 日付をインデックスに設定して、Backtraderの要件に合うようにします
stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])


class MyStrategy(bt.Strategy):
    """
    メインストラテジープログラム
    """
    params = (("maperiod", 20),)  # トレードストラテジーのパラメータをグローバルに設定

    def __init__(self):
        """
        初期化関数
        """
        self.data_close = self.datas[0].close  # 価格系列を指定
        # トレード指示、買い注文価格、手数料を初期化
        self.order = None
        self.buy_price = None
        self.buy_comm = None
        # 移動平均線インジケータを追加
        self.sma = bt.indicators.SimpleMovingAverage(
            self.datas[0], period=self.params.maperiod
        )

    def next(self):
        """
        ロジックを実行
        """
        if self.order:  # 実行待ちの指示があるかどうかを確認
            return
        # ポジションを持っているかどうかを確認
        if not self.position:  # ポジションを持っていない場合
            if self.data_close[0] > self.sma[0]:  # 買い条件を判断:終値が20日移動平均線を上抜け
                self.order = self.buy(size=100)  # 買い注文を実行
        else:
            if self.data_close[0] < self.sma[0]:  # 売り条件を判断:終値が20日移動平均線を下抜け
                self.order = self.sell(size=100)  # 売り注文を実行


cerebro = bt.Cerebro()  # バックテストシステムを初期化
start_date = datetime(1991, 4, 3)  # バックテスト開始日
end_date = datetime(2020, 6, 16)  # バックテスト終了日
data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date)  # データをロード
cerebro.adddata(data)  # データをバックテストシステムに追加
cerebro.addstrategy(MyStrategy)  # トレードストラテジーをバックテストシステムに追加
start_cash = 1000000
cerebro.broker.setcash(start_cash)  # 初期キャッシュを100000に設定
cerebro.broker.setcommission(commission=0.002)  # 取引手数料を0.2%に設定
cerebro.run()  # バックテストシステムを実行

port_value = cerebro.broker.getvalue()  # バックテスト終了後の総資産を取得
pnl = port_value - start_cash  # 損益統計

print(f"初期キャッシュ: {start_cash}\nバックテスト期間:{start_date.strftime('%Y%m%d')}:{end_date.strftime('%Y%m%d')}")
print(f"総資産: {round(port_value, 2)}")
print(f"純利益: {round(pnl, 2)}")

cerebro.plot(style='candlestick')  # グラフを描画

結果#

画像

可視化#

画像

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。