最新論文紹介 収益性の高いデイトレード戦略 「A Profitable Day Trading Strategy For The U.S. Equity Market」⑧

 前回からの続きで実装していきましょう!


データの取得

一つ一つの銘柄コードに対して1日と5分足の株価の情報を取得します。
そこから必要な指標を計算して、最終行(最新)を辞書に格納します。

for index, symbol in enumerate(symbol_list):
    print(symbol)
    temp={}
    temp['symbol']=symbol
    ticker=yf.Ticker(symbol)
    df_history_1d=ticker.history(interval='1d', start=str_start_date,end=str_end_date)
    df_history_5m=ticker.history(interval='5m', start=str_start_date,end=str_end_date)

    # 平均取引量
    df_history_1d['14Day_Avg_Volume'] = df_history_1d['Volume'].rolling(window=14).mean()
    # ATRの計算
    df_history_1d['ATR'] = calculate_atr(df_history_1d)
    # 相対出来高の計算
    relative_volume_df = calculate_relative_volume(df_history_5m)

    df_history_1d=df_history_1d.reset_index()
    relative_volume_df=relative_volume_df.reset_index()
    df_history_1d['Date'] = pd.to_datetime(df_history_1d['Date']).dt.date
    relative_volume_df['Date'] = pd.to_datetime(relative_volume_df['Date']).dt.date
    merged_df = pd.merge(df_history_1d, relative_volume_df, on='Date', how='left')

    if len(merged_df) == 0:
      print(f'{symbol}:0行です。')
      continue
    merged_df.to_csv(f'{path}/{symbol}_1d_{str_start_date}_{str_end_date}.csv')
    df_history_5m.to_csv(f'{path}/{symbol}_5m_{str_start_date}_{str_end_date}.csv')

    temp['avg_vol'] = merged_df.tail(1)['14Day_Avg_Volume'].values[0]
    temp['atr'] = merged_df.tail(1)['ATR'].values[0]
    temp['rv'] = merged_df.tail(1)['Relative_Volume'].values[0]
    target.append(temp)

    time.sleep(0.2)
APIには一定時間内の回数制限があるみたいなので、一つの処理毎に0.2秒空けるようにしています。

相対出来高の上位20銘柄を抽出し保存


top_20_data = filter_top_20_by_rv(target)
  
  # ファイルに保存
  with open(f'~filter_stock_for_5minetues_ORB_strategy\\top_20_by_rv\\{str_start_date}_{str_end_date}.json', 'w') as f:
      json.dump(top_20_data, f)

結果出来上がったのが以下のようなリスト。
[
  {
    "symbol": "6965.T",
    "avg_vol": 1776914.2857142857,
    "atr": 109.14285714285714,
    "rv": 6.474494706448508
  },
  {
    "symbol": "4575.T",
    "avg_vol": 2437571.4285714286,
    "atr": 101.57142857142857,
    "rv": 3.9250866185972466
  },
  {
    "symbol": "4062.T",
    "avg_vol": 1945750.0,
    "atr": 217.42857142857142,
    "rv": 1.821917808219178
  },
  ...

これを毎日の取引時間が終わった時に実行すれば、次の日のポートフォリオが出来上がるということですね!

次回は実際の銘柄の値動きを見て、どれくらい利益が出そうか見てみましょう!

コメント