AIとファイナンス

AIとファイナンスの架け橋、それがこのブログの目指すところです。兼業投資家向けに、Pythonを駆使して株やFXの分析を「自分で」行えるようになるための情報を提供します。ニューラルネットワークを活用した市場予測から、実証済みの金融理論まで、全てのコードを公開し、誰もが活用できるように!是非色々なコードで遊んでみてください!

強化学習を通じて学ぶ日経平均株価予測:データ収集から結果分析まで 【その5】

はじめに

強化学習において、報酬設計はエージェントの学習プロセスと行動選択に大きな影響を与えます。今回の記事では、株価予測システムにおける報酬設計の戦略について詳しく見ていきます。

実は当初は単純に日経225をロング、またはショートした日は単純にその日の値幅が報酬=ペナルティとなるような設計にしていました。その結果常に「何もしない」を選択してしまうエージェントが出来てしまったので以下のように手を桑てみました。

報酬設計の理由

  1. 株価の動きに基づく報酬: ロングとショートの両方の行動に対して、株価の変動を基に報酬を与えます。これにより、エージェントは市場の動向を正確に予測することで報酬を最大化することを学習します。これはもとから実装していた報酬設計です。日経225をロングした日は終値始値、ショートした日は始値終値が報酬になります。

  2. 大きな値動きに対する追加報酬: 1.5%以上の大きな値動きがあった場合、追加報酬を与えることで、エージェントが大きな市場の動きを捉えることを奨励します。前回の記事でも触れましたが今回のメトリクスとしてリスクリワード比を導入しています。損小利大はトレードの基本かと思うので入れてみました!
  3. 連続的な利益に対する追加報酬: 連勝することで追加報酬を得られるように設計されており、一貫したパフォーマンスを奨励します。

  4. 「何もしない」行動に対するペナルティ: インフレ率を考慮して、「何もしない」という行動に対してペナルティを設定し、エージェントが積極的な行動を取るように促します。実際に何もしないで資金を寝かせておくのは資産価値が目減りしていくことになるのでインフレ率を7%(高い!)と設定し、「何もしない」場合には報酬が減っていくように設計してみました。

まとめ

報酬設計は、エージェントの学習目標と行動選択に直接影響を与える重要な要素です。ここはいろいろと考える必要がありますよね!ご自身のトレードスタイルを報酬設計に取り入れてみてもいいかもしれませんね!

今回のコードはこちらです。どうぞお使いください!

def calculate_reward(current_data, previous_close, action):
    global consecutive_wins
    open_price = current_data['Open']
    close_price = current_data['Close']
    price_movement = abs(close_price - open_price)
    price_change_percent = price_movement / previous_close

    reward = 0
    if action == 1:  # ロング
        reward = close_price - open_price
    elif action == 2:  # ショート
        reward = open_price - close_price

    # 大きな値動きに対する追加報酬
    if price_change_percent > 0.015:  # 1.5%の閾値
        reward *= 1.5

    # 連続的な利益に対する追加報酬
    if reward > 0:
        consecutive_wins += 1
    else:
        consecutive_wins = 0

    if consecutive_wins >= 3:  # 3連勝以上
        reward *= 1.5

    # 「何もしない」行動に対するペナルティ(インフレ率を考慮)
    if action == 0:  # 何もしない
        reward -= previous_close * inflation_rate / 365  # 1日あたりのインフレ率

    return reward