lark

next

Code Create Life
telegram
tg_channel
x
github
zhihu
email
follow

同花顺の株式転換プレミアム率の中央値を取得する

Python 環境設定#

詳細なインストール手順については、Python インストールと環境設定の超詳細なチュートリアルを参照してください。

iFind Python 環境設定#

  1. ダウンロードをクリックして、同花順データインターフェースをダウンロードします。
  2. 初めてダウンロードする場合は、フォルダ内の SuperCommand を開いてアカウントにログインしてください。
  3. ログイン後、システムは関連するプログラミング言語の環境を修復するように求めます。指示に従って関連する環境を修復してください。
  4. ログイン後、ツールの中の環境設定オプションをクリックし、Python を選択して [OK] ボタンをクリックします。
  5. インストールした Python のパスを選択し、[続行] をクリックします。

Pycharm のインストール#

ダウンロードをクリック

詳細なインストール手順については、pycharm インストールチュートリアルを参照してください。

Python プログラムの実行#

"""
Author:binxin
Date:2023/11/18 14:44
"""
import os
import numpy as np
import pandas as pd
from iFinDPy import *
import datetime


# ログイン関数
def login(username, password):
    thsLogin = THS_iFinDLogin(username, password)
    if thsLogin != 0:
        print('ログインに失敗しました')
    else:
        print('ログインに成功しました')


# データの取得
def get_data(edate):
    get_str = 'edate=' + edate + ';zqlx=全部'
    data_p00868 = THS_DR('p00868', get_str, 'p00868_f027:Y,p00868_f022:Y', 'format:list')
    return data_p00868


# データをExcelに保存
def save_to_excel(file_name, str_date, premium):
    if not os.path.exists(file_name):
        data = {"日付": [str_date], "転換プレミアム率%": [premium]}
        df = pd.DataFrame(data)
    else:
        df = pd.read_excel(file_name)
        new_data = pd.DataFrame({"日付": [str_date], "転換プレミアム率%": [premium]})
        df = pd.concat([df, new_data], ignore_index=True)

    df.to_excel(file_name, index=False)


# 中央値の計算
def calculate_median(data):
    # 範囲の変換
    max_value = 101
    min_value = 99
    float_values = []

    data_f022 = data['p00868_f022']
    data_f027 = data['p00868_f027']

    for f027, f022 in zip(data_f027, data_f022):
        if '--' in f027 or '--' in f022:
            continue

        f027_value = float(f027)
        f022_value = float(f022)

        if min_value <= f027_value <= max_value:
            float_values.append(f022_value)

    return np.median(float_values) if float_values else None


# データの取得 - 単日
def get_today_data():
    today = datetime.date.today()
    edate = today.strftime("%Y%m%d")
    return get_data(edate)


# データの取得 - インターバル
def get_interval_data(start_date, end_date):
    delta = datetime.timedelta(days=1)
    data_list = []

    while start_date <= end_date:
        edate = start_date.strftime("%Y%m%d")
        data = get_data(edate)
        if data.data is not None:
            data_list.append((start_date.strftime("%Y/%m/%d"), data))
        start_date += delta

    return data_list

# メイン関数
def main():
    username = "アカウント"
    password = "パスワード"
    login(username, password)

    # 本日のデータを取得
    # today_data = get_today_data()
    # if today_data.data is not None:
    #     today_median = calculate_median(today_data.data[0]['table'])
    #     if today_median is not None:
    #         save_to_excel("転換プレミアム率記録(転換価値).xlsx", datetime.date.today().strftime("%Y/%m/%d"), today_median)

    # インターバル内のデータを取得
    start_date = datetime.date(2023, 11, 1)
    end_date = datetime.date(2023, 11, 18)
    interval_data = get_interval_data(start_date, end_date)

    for date, data in interval_data:
        median_value = calculate_median(data.data[0]['table'])
        if median_value is not None:
            save_to_excel("転換プレミアム率記録(転換価値).xlsx", date, median_value)


if __name__ == '__main__':
    main()

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