見出し画像

ゼロから作るBTCFX自動売買BOT

2020/1/15 一部修正

本作では、いままでの経験をもとに、BTCFXの自動売買BOT作成について、ゼロから説明します。ノンプログラマの方、自動売買をこれから始めようと考えている方にうってつけの内容となっています。

まえがき

昨今BTCFXで日々百万、千万円単位の利益を上げている人のtwitterを多く見かけます。レバレッジの高さは他の投資対象と比べ物にならず、少ない資金から一攫千金を目指せるという意味で、BTCFXは非常に魅力的な投資対象です。
レバレッジは最大で4倍(海外のサイトBitMEXであれば最大100倍)ですが、フィアット(法定通貨)のFXに比べるとボラティリティが数倍~数十倍なので、損益の幅はそれなりに大きくなります。
(フィアットのFXであれば通常1日に1%ほどしか上下しませんが、BTCFXであれば一日に5%~10%動くことはざらです。)
そんなBTCFXですが、裁量でやる場合以下の2点の課題があると感じています。

①心理が邪魔をして、売買ルールに沿ったトレードができない。
 →損切ができずに損小利大にできない。欲張って売り抜けられず、利益が減ってしまう。等
②自分の売買ルールの正しさ(利益につながること)の検証に時間がかかる。あるいは検証できない。
 →売買ルールを作成しても、その正しさが検証できないため、自信をもってそのルールを運用し続けることは難しく、トレードしながら非常にストレスがたまってしまう。

上記の欠点を補いつつ、魅力的な投資対象であるBTCFXで利益を上げるためには、私は自動売買BOTを作成するべきだと考えています。
※上記2点以外にも、一度稼働させればチャートに張り付いていなくてよいというメリットもあります。
自動売買BOTであれば、以下の通り前述の課題をクリアしています。

①損切や利益確定を確実にルールに沿って実行できる。
②バックテストを実施することで、売買ルールを過去の相場で適用した場合にどの程度利益がでたのか簡単に検証することができる。

前置きが長くなりましたが、そもそも本書をご覧の方は自動売買BOTに少なからず興味があり、可能性を感じていることと思います。是非本書をもとに仮想通貨BOTを作成し、金銭的な自由を手に入れましょう。

本書のコンセプト

本書は、自動売買BOTなんて作ったこともない。ましてやプログラムもしたことがない。という方をターゲットにしています。ですので、環境構築からプログラミングの仕方まで丁寧に記載しています。

本書は以下のロジックツリーを上から説明していきます。
なお、Tradingviewのバックテストより後(売買ルールをBOT化する)は次回のnoteで説明いたします。お楽しみに。
※本書の内容
 1.売買ルールを作る
 2.売買ルールの効果を測定する
 付録:Tradingviewの使い方
    pine scriptの書き方

    

画像1

1.売買ルールをつくる

「売買ルールを作る」とは

「売買ルールを作る」とは、端的に言うと
・どこでエントリー(買い・売り)して
・どこでクローズ(エントリーの反対売買)するか
ということを、「感覚」ではなく「数値化・明文化」することを指します。

例えば以下のような感じです。
【感覚】
チャートが上目線だし、十分押し目を作ったから全力でロングを入れる。
【数値化・明文化】
チャートが上目線だし  ⇒ 5分足の200日平均が10本前よりも現在の足の方が上にあり、且つ現在の値が200日平均線よりも大きい。
十分押し目を作ったから ⇒ RSIの値が30以下になっている
全力でロングを入れる。 ⇒ 現在の余力にレバレッジ(25倍)をかけてロット(注文の大きさ)を決定し、成行で買いを入れる

より一般化すると、売買ルールは以下の5点を考えることである。と構造化することができます。
(後にプログラム化することを見越してプログラムよりな分け方をしています。)

①注文のトリガー
 マーケットがどのような状況になった時にエントリーするのか
 移動平均、MACD、一目均衡、ボリンジャーバンドなどのテクニカル指標を使用して条件を考える

②注文の内容
 ①のトリガーが発動した際にどのような注文を作成するのか
 ロットサイズ、注文方法(成行、指値、逆指値、トレーリングストップ)を決定する

③クローズのトリガー
 どのような状況になったときに現在持っている建玉を決済するのか
 ①と同様

④クローズの内容
 ③のトリガーが発動した際にどのような決済注文を作成するのか
 ②と同様

⑤処理実行の制御
 トリガーを満たしていることの確認をいつ実行するのか
 10秒ごとに確認する。1時間ごとに確認する。大きな発表が予定されている時間は避ける。等

さらに、トリガーを考える際には、主に以下の3つのパターンがあります。
1.既存の売買ルールに一部手を入れる
 →今大人気のドテン君は、既存(広く一般に知られている)の手法です。
  既存の手法であっても使用する足(5分、1時間、 1日)やテクニカルの
  範囲を変えることで、市場にフィットして利益が出たり、市場に
  フィットせずに損が出ることもあります。
2.チャートからスタートする
 →チャートを見ながら、こういう動きの後はこう動く頻度が高い。
  ということを考え、それをルール化するためにはどうすればよいか?
  と考える方法です。
  そもそもテクニカル指標とはこのやり方で作成されたものです。
  チャート上にある無限にある情報を、ある観点で切り取り、2次元化
  しています。何かを作り出しているのではなく、情報を減らすことで
  理解できる。判断に使える情報にしているのです。
3.テクニカル指標からスタートする
 →一方、テクニカル指標をみているうちに、このテクニカルがこの値に
  なった後は、こういう動きをすることが多い。ということに気づく
  こともあります。これを売買ルールにしてもよいでしょう。

売買ルールの参考書

テクニカル分析を用いてトレードしている人であれば、すでに上記のように数値化、明文化された売買ルールを持っていると思いますが、
まだ明文化された売買ルールを持っていない人は、以下の本を参考にして是非オリジナルな売買ルールを作ってみてはどうでしょうか。

伝説のトレーダー集団 タートル流投資の魔術
 実話を基にした(と言われている)物語調の本。今話題のドンチャンブレイクアウトの手法について詳細に述べられている。

投資苑
 テクニカル指標について非常に詳細に述べられている。テクニカルを使う際の考え方や過去のチャートを基にした使い方も載っているため教科書として使用できる。

チャートの救急箱
 投資苑よりもニッチなテクニカル指標が載っている。非常に辞書的。アイデア探しに使える。この本以上にテクニカルの辞書的な本は見たことがない。

2.売買ルールの効果を測定する

「売買ルールの効果を測定する」とは

「計測できないものは改善できない」という言葉があります。
せっかく売買ルールを作っても、それが本当に効果がある(利益を出せる)かどうかわかりません。
これを改善していくためには、その効果を「測定」する必要があります。

売買ルールにおいて、その効果とはこのルールを適用した場合の利益率です。
この利益率を測定し、よりよい利益率になるように改善したり、他の手法と比較したりすることで、自分の売買ルールをブラッシュアップしていく。というのが、王道のやり方です。

売買ルールの効果を測定する方法

結論からいうと、本作で使用するBitMEXを使する場合は、Tradingviewというツールを使用することが今の環境では最善手です。
しかし、より汎用的な知識を得るためになぜ上記の結論になるのかご説明します。

売買ルールの効果を測定する行為を、一般的に「バックテスト」といいます。
過去(バック)の市場データに売買ルールを適用した場合にどの程度利益がでるのかを試すためです。
※これに対し、実際の市場に対して本番口座やテスト口座を用いて効果を測定することを未来(フロント)の市場でテストすることから「フロントテスト」と呼びます。

バックテストを実施するためには、一般的には以下の方法があります。

画像2

※MT4とは
ザイFXで詳細に紹介されていますので、詳細はそちらを参照のこと。
端的にいうと、「無料・チャートが見やすい・BOTの稼働も検証もできる」というのが特徴。BitMEXがMT4に対応していれば迷わずMT4でBOTを作成するが、残念ながら対応していない。今後各取引所がMT4に対応すればMT4のBOTも増えていくことと思う。
スプレッドが絶望的だが、BitpointならMT4でBTCFXができる。

※Tradingviewとは
こちらも紹介記事がありますので、詳細はそちらを参照のこと。
端的にいうと、「有料(無料もあるけど有料じゃないときつい)・チャートが見やすい・BOTの稼働も検証もできる・対応している市場が非常に多い」のが特徴。
現在人気が出ている理由は完全に最後の特徴。BitMEXに対応しているこの手のツールがこれぐらい。

まとめますと、
手で検証:時間がかかりすぎる
検証プログラムを自作する:プログラミングが趣味です。ぐらいでないときつい。
MT4(MQL)を使用する:現状使える取引所が少ない。BitMEXが使用できないのが致命的。
Tradingview(pine script)を使用する:使える取引所が多い。今回使用するBitMEXが使えるのが決定的。

※BitMEXのデータを使用できることを重要視しているのは、取引所ごとでチャートの形が全然違うためです。これは、取引所ごとにルールや参加者、できること(BOT利用可否、注文方法、建玉上限)が違うためです。一つの巨大な市場に取引所が参加しているのではなく、取引所の一つ一つが小さい市場になっていて、市場間は市場間のバランスの崩れをもとに利益をとる投資家によってバランスされています。

測定結果を売買ルールにフィードバックする

次に、考案した売買ルールの効果測定結果をを売買ルールにフィードバックします。

・思ったよりも売買数が多い(注文トリガーが甘い)
 →注文トリガーの条件をより厳しくする
・思ったところで注文がでていない
 →バグの可能性があるのでソースの見直す
・レバレッジが高すぎて1トレード当たりの資金変動が多き過ぎる
 →レバレッジを調整

上記のように色々な観点で効果測定結果を確認し、より効果が高くなるよう調整したうえで、再度効果測定を実施し、またフィードバックする。ということを繰り返し、売買ルールのブラッシュアップを行います。

以上、ここまでが売買ルールの作成と効果の測定が完了します。
では、さっそくTradingviewを使って売買ルールの効果測定をやってみましょう。

付録.Tradingviewの使い方

・Tradingviewの簡単な使い方

私がTragingviewを使用する理由は単純で「Tradingviewを使うとBitMEXのバックテストが簡単に実行できるから」です。さっそくTradingviewを使用してみましょう。

Tradingview

まずは、上記のURLにアクセスし、会員登録してください。

無料でもできることにはできるのですが、バックテストをする際に、参照できる過去データに制限があるため、無料枠を使ってPremium会員になることをお勧めします。30日あれば十分BOT稼働までたどり着けます。

会員登録が完了したら、トップ画面の検索バーに「XBT」と入力してください。そうすれば、「XBT Bitcoin/US dollar INDEX--bitmex」が出てくるはずです。これを開き、次にインタラクティブチャートを開いてください。

画像3

画像4

画像5

このインタラクティブチャートは非常に便利なので、ぜひ使いこなしてください。チャートの設定は保存できますし、携帯から同様のチャートをみることもできます。

では簡単に使い方をご紹介します。

画像6

主に使用するのは上記の二つです。
まずはインジケーターの追加からやってみましょう。
サンプルとして移動平均の52と200を追加してみましょう。

画像7

上記のように検索窓に「移動平均」と入力し、移動平均線を2回クリックしましょう。
何も反応がなく「あれ?」と思いますが、チャートを見るとちゃんと移動平均線が追加されています。

画像8

今回は範囲が52のものと200のものを追加したいので、歯車のマークをクリックして内容を変更しましょう。

画像9

画像10

画像11

ちなみに「スタイル」タブを選択すれば、インジケーターの色や太さも選択することができます。
52平均を緑、200平均を青にしてチャートに追加した結果が以下です。

画像12

移動平均のデッドクロスを売りトリガーにし、ゴールデンクロスを決済にすれば、一応上記のように利益はでますが、本当なら一番したで決済したいので、まだまだパラメーターの調整予知がありますね。
(もちろん上記は都合のいいポイントを使用しています)

次にチャートを複数表示しましょう。

画像13

上記のように画面上部の四角いボタンを押し、縦2分割のボタンをクリックしてみましょう。

画像14

上記のように画面を分割することができます。
単純にチャート分析をするのであれば、いったん上記の二つの機能がわかっていれば十分だと思います。その他いろいろなボタンがありますので、時間があるときに押してみてください。

pine scriptの書き方

次に、pine scriptについてご説明します。
pine scriptはTradingview上でのみ使用されているプログラミング言語です。
これと言って特徴はないのですが、使用されるプラットフォームが限られているため、以下のメリットがあります。
・環境構築が不要
 →プログラミングする際に一番面倒な環境の構築が不要です。
  WEBブラウザ上で動かすため、自宅のPCに環境構築をしないでいい
  代わりに、Tradingviewのサーバ上でプログラムを稼働させていると
  お考え下さい。
・ライブラリのインポートが不要
 →複雑なプログラムを作成する際には、部分部分を作成したライブラリを
  プログラムの中に取り込み、プログラムから使用します。
  Tradingview上でしか使用しないため、このライブラリもすべて
  デフォルトでそろっているため、ライブラリのインポートが不要です。

デメリットとしては、若干珍しい書き方をする。ぐらいですかね。
では、さっそく書いてみましょう。
安心してください。プログラミングをやったことがなくても案外簡単にできます。

画面下部のPineエディタをクリックしてください。

画像15

画像16

続けて、新規作成→空の投資戦略スクリプトをクリックしてください。
以下のようにエディタにソースが記載されます。

画像17

そのまま「チャートへ追加」をクリックしてください。

画像18

上記のように一気に画面が変わったと思います。
ひとつづつ説明します。
①チャート上に表示された青と赤の文字+矢印は、「チャートに追加」した売買ルールに沿って売買した場合に、買いと売りを実行する場所です。
青が買い、赤が売りです。
自分の売買ルールを検証する際は、買いと売りの矢印の数やチャート上での場所が自分の想定とあっているか確認してみてください。

②投資戦略テスターです。ここに、いままで説明してきた効果測定の結果がでます。ここに記載されている通り、このデフォルト設定の売買ルールは勝率49.27%で、29.52%の利益がでます。(驚きのサンプルですよね..)

③このグラフは横軸が時間、縦軸が利益です。
このグラフの青部分が右肩上がりになっていて、かつ赤部分が小さければ
その売買ルールの効果が非常に高いことを意味します。
プロフィットファクターやドローダウンについてはこのサイトを参照。

では、次にサンプルコードを1行1行解説しましょう。


//@version=3


これは、エディタに記述しているコードをpine scriptのバージョン3として
使用することを意味しています。現状であれば「3」で不都合ありません。


strategy("マイ投資戦略", overlay=true)

strategyとは、エディタに記載しているソースがストラテジーであることを
意味しています。ストラテジーとはイコール売買を含むことを意味します。
これに対し、売買がない場合(=インジケーター)はstudyと記述します。

overlay=trueとは、このソースの中で何か描画する場合に、チャート上に記載するということを意味します。falseにした場合、チャートの外に記載されます。ためしにtrueのままで移動平均をプロットしてみました。

画像19

これに対し、falseにすると以下のようになります。
チャート上ではなく、チャート外に表示されましたね。
また、""で囲んだ文字列は、チャート上にこのストラテジーの名前として表示されています。

画像20

longCondition = crossover(sma(close, 14), sma(close, 28))

要素がいくつかあるため、ここもひとつづつ説明します。
longConditionとは、新しい変数を定義しています。
変数=値を保存する箱です。
「=」がついているのは、longCondition変数に右辺の値を代入することを意味しています。
では右辺を見ていきましょう。
crossoverについては、PINEスクリプト言語参照マニュアルを見てみましょう。基本的に何かやりたいこと、知らない関数に出会ったときはこのマニュアルに行けば解決します。以下の通り、crossover関数は、xがyをうわ抜いた場合にtrueを返し、それ以外の場合はfalseを返すということを意味しています。

画像21

次に、sma(close, 14)です。smaとは「単純移動平均(Simple Moving Average」の略です。つまりsmaは移動平均の値を返す関数です。使い方は簡単で、sourceに平均をとりたい値(終値(close)、始値(open)等)、lengthに移動平均をとる範囲を指定します。そうすれば、その足の位置における移動平均の値が返ります。
また、closeとは各足の終値の値を意味します。

画像22

以上から、crossover(sma(close, 14), sma(close, 28))は終値の14単純移動平均が28単純移動平均がうわ抜いた場合にtrueを返すという意味になります。
図でいうと以下の場所です。

画像23

if (longCondition)

ifは( )内がtrueの場合に処理ブロックを実行し、falseの場合は処理ブロックをスキップするという関数です。処理ブロックはifの直後でインデントされているブロックのことをさします。
今回でいうと、次に説明するstrategy.~~の部分がこのif分の対象処理ブロックです。

画像24

    strategy.entry("My Long Entry Id", strategy.long)

strategy.~~と記載去れている関数は、studyでは使用できない関数であることを意味しています。strategyをstudyに書き換えてからチャートに追加をしてみましょう。

画像25

怒られました。上記のように、エラーがでます。
また、エラーが出た場合は、上記のようにエディタの下にエラー内容が出ますので、エラー内容を確認して対応しましょう。
entryとは、買いや売りの注文を出す関数です。
entry("My Long Entry Id", strategy.long)は、My long Entry Idという名前(識別子)でlong(買い)注文を出すということを意味しています。


shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

さて、ここまで読んだ方であれば、上記の内容が14単純移動平均が28単純移動平均を下抜いた際に売り注文を出すコードだということがわかるはずです。
いかがでしたでしょうか?案外簡単ですよね?

ただ、まだ説明していないことがあります。
それは、このプログラムの処理制御についてです。
プログラムとは、書いてあるコードを上から下まで処理したら処理が終了するのが普通です。
pineスクリプトには、繰り返し実行するソースがありませんが、記載したコードが何度も実行されています。(チャート上に矢印がいっぱい出ていますよね?)
これは、pine scriptはデフォルトで、スクリプトを追加したチャートの足ごとに処理を実行する。という作りになっているためです。よって、エディタに記載したソースコードは、チャートの足が更新されるたびに繰り返し実行されます。このような処理の制御部分や環境構築、ライブラリのインポートがないため、pine scriptは非常にとっつきやすく、プログラミングをやったことがない方でも記述することができるのです。
次回ご説明するpythonはpine scriptでは必要のない上記の作業が追加されるため、やや難解(つまづきやすい)な内容になります。

最後にスクリプトにいろいろなテクニカルを追加する場合のtipsをご紹介します。書きのように、新規追加を押すとデフォルトでいろいろな関数を追加することができます。デフォルト登録されている関数でほぼやりたいことが網羅できるものと思いますので、これをいったん追加し、そのコードを先ほどのサンプルコードの条件に追加していけば、自分のオリジナル売買ルールを記述することができます。また、登録されていない関数についても、そのテクニカル指標の計算式がわかれば、その通り計算式を記述すればスクリプトに追加することができます。

画像26

以上です。お読みいただきありがとうございました。









この記事が気に入ったらサポートをしてみませんか?