Code Monkey home page Code Monkey logo

kabutobashi's Introduction

Hi there 👋

Repositories

name description release related
kabutobashi / Python provides convenient functions related with Stocks. PiPY stock
AzFS / Python provides convenient Python read/write functions for Azure Storage Account. PiPY Azure
dotfiles dotfiles of @gsy0911 - dotfiles, zsh

other repositories are here.

My Qiita contributions My Qiita posts

liked articles books

name description tag related
zenn-contents stored zenn contents. - Zenn
zenn-streamlit-cognito - - Zenn, streamlit, cognito
zenn-cloudfront-cognito - - Zenn, CloudFront, cognito
zenn-cloudfront-oai - - Zenn, CloudFront, Next.js
zenn-cloudfront-cognito-apigw - - Zenn, CloudFront, cognito, API-GW
zenn-cognito-frontend-auth - - Zenn, Next.js, cognito
zenn-ec2-ssm - - Zenn, EC2, SSM
zenn-fastapi-ecs-apigw - - Zenn, ECS, CloudMap, API-GW
zenn-cloudfront-resize-image - - Zenn, CloudFront, Lambda@Edge
zenn-php-symfony - - Zenn, PHP, Symfony
zenn-nextjs-routes-types - - Zenn, Next.js, axios, types
zenn-nextjs-authjs-cognito - - Zenn, Next.js

My Skills

trophy

GitHub Streak

kabutobashi's People

Watchers

 avatar  avatar  avatar

kabutobashi's Issues

全体の傾向から個別銘柄の値動き、残差項を考慮できるような仕組み

DoD

振幅不変性のために入出力を入力の振幅のスケールで割ることにより正規化する構造を導入しました。これにより縦軸のスケールが異なるだけの入出力データを深層ニューラルネットワークが同様に扱うようになりました。次に、時間スケール不変性のために畳み込みのような構造 (図 3) を導入しました。

  1. 全体をopen/high/low/closeのmax値で割りスケールのみにする
  2. 10日(1日ごと)、20日(2日ごと)、30日(3日ごと)の差を計算する仕組み

型指定のところのエラー修正

完了の定義

以下のエラー修正

エラー

~/Development/Projects/stock_project/.venv/src/pystock/pystock/attributes/stock_df.py in set(self, instance, value)
34 # 型の指定
35 value['open'] = value['open'].astype(float)
---> 36 value['close'] = value['close'].astype(float)
37 value['high'] = value['high'].astype(float)
38 value['low'] = value['low'].astype(float)

ValueError: could not convert string to float: '1,007.0'

StockDfErrorが分かりづらいのを修正する

完了の定義

エラーの値を表示する

エラー例

" File "/var/task/pystock/attributes/stock_df.py", line 67, in _replace_comma\n raise StockDfError("floatに変換できる値ではありません")\n"

以前の分析手法を取り込むか決める

完了の定義

以下の過去の分析手法を取り込む場合は取り込む

  • MeanVarSMA
from chalicelib.analysis.StockAnalysis import StockAnalysis
import pandas as pd


class MeanVarSMA(StockAnalysis):
    def __init__(self):
        super().__init__("mean_var_sma")

    def analyze_method(self, _df: pd.DataFrame) -> float:
        self.logger.info(f"start analyzing by {self}")
        _df = _df.reset_index(drop=True)
        _df['sma5'] = _df['close'].rolling(5).mean()
        _df = _df.tail(5)
        _df['diff'] = _df.apply(lambda x: x['close'] - x['sma5'], axis=1)
        mean = _df['diff'].mean()
        var = _df['diff'].var()
        return mean / var
  • MacdCubicFunction
from chalicelib.analysis.StockAnalysis import StockAnalysis
import numpy as np


class MacdCubicFunction(StockAnalysis):
    # 分析に利用する日数
    DAYS_TO_ANALYSIS = 20
    # 分析に利用する日数
    DAYS_UNDER_ZERO = 7

    def __init__(self):
        super().__init__("macd_cubic_function")

    def analyze_method(self, _df) -> float:
        """
        macdを基準として売り買いの目安を評価値で返す。
        値が大きければ買いの傾向が高いことを表している。
        値が小さければ売りの傾向が高いことを表している。
        :param _df:
        :return:
        """
        self.logger.info(f"start analyzing by {self}")
        _df = _df.reset_index(drop=True)
        # histogramが図として表現されるMACDの値
        _df = _df.assign(
            # MACDの計算
            ema_12=lambda x: x['close'].ewm(span=12).mean(),
            ema_26=lambda x: x['close'].ewm(span=26).mean(),
            macd=lambda x: x['ema_12'] - x['ema_26'],
            signal=lambda x: x['macd'].ewm(span=9).mean(),
            # ヒストグラム値
            histogram=lambda x: x['macd'] - x['signal'],
        )

        # 3次関数に近似する(近似区間は直近の20日)
        f_x = np.linspace(-10, 10, self.DAYS_TO_ANALYSIS)
        y = _df['histogram'].tail(self.DAYS_TO_ANALYSIS)

        res3 = np.polyfit(f_x, y, 3)
        # 3次関数に近似した値を取得
        y3 = np.poly1d(res3)(f_x)
        # 階差を取得
        diff_1st = np.diff(y3)
        diff_2nd = np.diff(diff_1st)
        # 評価値の算出
        e_val = (diff_2nd[-1] - diff_2nd[0]) * np.var(diff_2nd) * np.var(diff_1st)
        if abs(e_val) < 0.01:
            e_val = 0
        return e_val

あまり関係ないけど

  • sigmoid

    @staticmethod
    def sigmoid(x) -> float:
        # pandasでcsvとして出力した際に、小さすぎる値の場合はeを用いた値で表示されて
        # pandasで読み込むことができないため。
        val = 1 / (1 + math.exp(-x))
        return val if val > 0.001 else 0

日付を考慮するようにする

完了の定義

以下の関数を追加する

from datetime import datetime, timedelta
import jpholiday
def get_past_n_days(current_date: str, n: int = 60) -> list:
    end_date = datetime.strptime(current_date, "%Y-%m-%d")
    # 2倍しているのは土日や祝日が排除されるため
    back_n_days = n * 2
#     start_date = end_date - timedelta(days=back_n_days)
    date_candidate = [end_date - timedelta(days=d) for d in range(back_n_days)]
    # 土日を除く
    filter_weekend = [d for d in date_candidate if d.weekday() < 5]
    # 祝日を除く
    filter_holiday = [d for d in filter_weekend if not jpholiday.is_holiday(d)]
    # 文字列に日付を変えてreturn
    return list(map(lambda x: x.strftime("%Y-%m-%d"), filter_holiday[:n]))

entityの見直し

  • StockDataSingleDay
    • StockInfoから変える
  • StockDataMultipleDays
    • StockDfから変える。(内部の構造もList[SingleDay]とかにする?)
  • StockDataProcessed
    • Methodを適用した後のEntity
  • StockDataParameterized
    • 機械学習とかにも利用しやすい形

stock_dfの不正値の処理を追加

完了の定義

float以外の値が含まれていた場合は既知としてエラーを返す

~/Development/Projects/stock_project/.venv/src/pystock/pystock/attributes/stock_df.py in _replace_comma(x)
     62         if type(x) is str:
     63             x = x.replace(",", "")
---> 64         return float(x)

could not convert string to float: '---'

52週高値・底値の関数にバグ

完了の定義

lowを取得しようとして、dictのなかにhighの文字列が含まれることがあるので、文字列でフィルタをかけるようにする

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.