Python

【Python】プログラミング初心者の自動売買bot-自動売買botの戦略を検討

 

目次

自動売買botの戦略を検討

Pythonで自動売買botを作成するとき、どんな戦略をbotに組み込むかが非常に肝です。

初心者か否か関係ないところですが、

  • Pythonの初心者はこういう戦略を目指すべき
  • 私のbotの戦略を公開

ということをこの記事でやっていきます。

 

Pythonの初心者はこういう戦略を目指すべき

ポイントは次の通りです。

ポイント

  • ゆったりbotを目指す
  • シンプルな戦略を採用する

1つずつ具体化します。

 

ゆったりしたbotを目指す

これは何度か触れたことありますが、繰り返し。

ゆったりしたbotとは、長い足を読みこんで週に数回トレードするようなbotのイメージです。

対極にいるのは分足などを読んで、1日に数十回取引するようなスキャルbotです。

よくMMbotと言われてるやつです。

私も高速取引で毎日安定的に収入を得られたらと夢見て、スキャルbotをnoteで購入してみたり、自分で作ってみたりしましたが、いずれもうまくいかず、結局ゆったりbotに戻ってきました。

 

実際に取り組んでみると分かりますが、スキャルbotを目指すときの難易度は半端ない。

まずスキャルbotの玄人達を出し抜いて利益をあげるbotを作成することが難しい。

短い足はトレンドに関係のない突発的な値動きを見せるので、それに脊髄反射できるbotの作成が必要で、速度の工夫や接続不良への対処、ポジション管理・・・etcと難しさのポイントを挙げるのに枚挙に暇がありません(笑

 

対して、ゆったりしたbotは時間足や日足などの比較的トレンドが反映されやすい足を読むので、トレンドに乗ることを意識できれば比較的勝負しやすいと思いました。

また処理速度を気にしなくていいので、Pythonの基本構文だけでbotを作成しても影響を感じませんし、APIにしても難易度が高めなsocket通信もほとんど必要ないです。

私のおススメはこんなbotです。

ポイント

  • 日足と時間足を読む
  • 日足の移動平均に沿ったトレンドフォロー
  • 取引のタイミングは時間足で計る

長い足が比較的トレンドを反映しやすいので、自ずとトレンドフォロー型になるかと思います。

2種類の足を読みこむのはトレンドだけを測っていると、取引のタイミングが分からないためです。取引すべきタイミングは、レンジを突破したときなど、これまでと違う動きを見せたときで、それを捕捉するための足をもう1種読み込みます。

私も日足の移動平均でトレンドを探り、時間足がこれまでと違う値動きを見せたときにポジションを持つbotを運用しました。

 

シンプルな戦略を採用する

これも非常に大事!

おそらく世に有名なテクニカル分析を駆使してbotを構築することになると思いますが、2~3の搭載に留めるべきだと思います。

たくさんの分析手法を採用すると、取引機会が減ります。

また、このテクニカル分析Aがこう示したとき、かつ別のB分析がこう示したとき、かつC分析がこう示したとき・・・と重ねていくと、気づかぬうちにカーブフィッティングに繋がってたりして、再現性が無く、結局勝ち続けるbotにならなかったりします。

カーブフィッティング

自動売買等の戦略を構築する際に、過去データのみに通用する過剰な設定を施してしまうこと。

よって、理想は、トレンドを読むテクニカル分析+取引のタイミングを計るテクニカル分析の2種類です。

 

私のbotの戦略を公開

では、恥ずかしながら、私のbotの戦略をば公開します。

  • 24日指数移動平均の当日と前日を比較し、買いか売りかのトレンド判断
  • 30時間の一番高い(安い)終値を、直近1時間足の終値が抜けたら順張り

というものです。

2種類!

色々な戦略をバックテストをしまくって、計2か月くらい色々試してましたが、ここに行きつきました。

該当箇所のコードはこんな感じ。シンプル!

if candles_short_df.iloc[-1]["close_price"] > candles_short_df.iloc[-2]["high_max_channel_breakout"]:
    if candles_long_df.iloc[-1]["average_long"] > candles_long_df.iloc[-2]["average_long"]:
        # 買いのロジック

elif candles_short_df.iloc[-1]["close_price"] < candles_short_df.iloc[-2]["low_min_channel_breakout"]:
    if candles_long_df.iloc[-1]["average_long"] < candles_long_df.iloc[-2]["average_long"]:
        # 売りのロジック

 

いわゆるチャネルブレイクアウト戦略ですね。

先月20万円の利益をあげたのも、この戦略であげました。

あとは損切とか、トレイリングストップとかいろいろ設定はありますが、ここらへんは特段の工夫もなく、ryotaさんのものを参考に組んでいます。

ryotaさんのブログは以前の記事でも取り上げてます。

【Python】プログラミング初心者の自動売買bot-Pythonの基本的な内容を学ぶ

 

一応私が行きついた戦略のバックテスト結果を貼っておきます。

全て

  • 初期資金70万円仮定
  • レバレッジ2倍
  • 資金の4/5で購入数量を決定
  • 損切・トレイリングストップ有
  • 一括エントリー(分割エントリー無し)

という条件でテストしています。

2018年

2019年

2020年

 

3年間のバックテストなのである程度信頼がおけるかもしれません。

年区切りで見れば、全て勝ってます。

それが今後も続くかは不明ですが。

シンプル、かつゆったりなbotでも充分勝てると思います。

 

まとめ

つまるところ

  1. ゆったりしたbotなら難しいプログラミング知識が不要だからおすすめ!
  2. 再現性を確保しやすいシンプルな戦略を採用しよう!

ということが言いたかった!

以上!

-Python
-, , , ,

© 2024 ゆるふわFire! Powered by AFFINGER5