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 というライブラリを使用することに決めました。このライブラリは常に更新されており、ドキュメントも中国語で詳細に記載されています。

image
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')  # グラフを描画

結果#

image

可視化#

image

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