以前はじめての自動売買プログラム (ひたすら利確をするプログラム) を作成する過程を紹介しました。
予定通りしっかりと利確してくれるプログラムとなりましたが、これだけだと最高値をつかみ、下降トレンドに入った時に損をすることが確実です。
そこでこのプログラムをさらにアップグレードして、完全に放置できる自動売買プログラムを目指して作りこみを始めました。
実際に今既に動かしていて、予想以上にいい傾向を示しているので今回はそのプログラムのアルゴリズムを紹介したと思います。
自動売買プログラムの仕組みのベースは 「倍々ゲーム」
今回作ったプログラムのアルゴリズムは 「倍々ゲーム」 をベースにしています。マーチンゲール法と呼ばれる方法ですね。
これを応用した内容ですが、まずはベースとしている 「倍々ゲーム」 の仕組みについて紹介しておきます。 (今回のプログラムのアルゴリズムが知りたいだけの方は次の見出しまで飛ばしてください)
「倍々ゲーム」 のルールは以下の二点だけ。
- 勝ったらそこで勝負終了。
- 負けたら勝つまで倍賭けの勝負を続ける。
このルールで実際に勝負をするとこんな感じの流れになります。
- 最初に 1000 円の勝負をする。勝ったら +1000 円 の儲けで終了。
負けた場合は -1000 円になりますが、 次は倍額の 2000 円の勝負をします。
- 2 回目は累計損益 -1000円 の状態で 2000 円の勝負になります。これに勝てば +1000 円で終了。再度 1. から繰り返します。
負けたら累計損益が -3000 円になりますが、次は2000 円の倍額の 4000 円の勝負をします。
- 3 回目の勝負は累計損益 -3000円 の状態で 4000 円の勝負になります。これに勝てば +1000 円の儲けで、再度 1. から繰り返します。
負けたらさらに倍の 8000 円の勝負をします。
- …(勝つまで続ける)..
このように負けたら倍額の勝負をすることで勝てば 1000 円の儲けが必ず得られます。また、1/2 の勝負だといずれは勝てる (一生負け続けることはあり得ない) ので、理論上はこれを繰り返す事で必ず勝てるという仕組みです。
「倍々ゲーム」 が必勝法ではない理由
今回のプログラムのアルゴリズムに入る前にもう一点大事なこと。理論上は必ず勝てる勝負ならなぜみんながやらないのか?
購入できる枚数に上限がない Bitcoin FX でこの方法で負けるパターンが一つだけあります。それが資金力不足で倍賭けの勝負ができなくなることです。
例えば、さっきの 1000 円勝負を 10 回連続で負けたらどうなるかその確率と一緒に見てみましょう。
回数 | かけ金 | 確率 |
1 回目 | 1,000 円 | 1/2 = 50% |
2 回目 | 2,000 円 | 1/4 = 25% |
3 回目 | 4,000 円 | 1/8 = 12.5% |
4 回目 | 8,000 円 | 1/16 = 6.25% |
5 回目 | 16,000 円 | 1/32 = 3.125% |
6 回目 | 32,000 円 | 1/64 = 1.562% |
7 回目 | 64,000 円 | 1/128 = 0.781% |
8 回目 | 128,000 円 | 1/256 = 0.391% |
9 回目 | 256,000 円 | 1/512 = 0.195% |
10 回目 | 512,000 円 | 1/1024 = 0.098% |
最初は 1000 円の勝負をしていたのに、連続で負け続けると10 回目の勝負では 51万円の勝負をすることになります。確率的には 0.098% とかなり低いにしても、ありえることです。
このように、倍々ゲームは負け続けて資金力が尽きてしまい、次の勝負ができない場合に大損してしまうというリスクがあります。
今回のプログラムでもこうならないための方法を考慮する必要があります。
完全放置の自動売買プログラムのアルゴリズム
さて、ここからが本題です。
今回の完全放置型自動売買プログラムのアルゴリズムについて具体的に説明をしていきます。
今回の自動売買プログラムでは利確はどんどんしていきます。逆に含み損益が出た時は 「復活ループ」 に入ります。 「復活ループ」 は一旦ゲームをリセットできるまで、倍々ゲームのように倍の枚数を購入し続けます。
プログラムを実行する前に決めて設定値が 3 つあります。
- 初期売買の枚数: この例では 0.1 枚としておきましょう
- + の間隔 (利確をする間隔) : この例では 10000 円とします。
- – の間隔 (復活ループに突入する間隔): この例では 50,000 円とします。
いずれも後で調整できるようにプログラムは作りますが、まずはこの値を例としてプログラムの流れを見ていきましょう。
1) スタート地点:プログラムの実行の開始
スタートはどこからでも大丈夫ですが、とりあえず今の価格で指定の枚数を購入します。方向は買いでも売りでもどちらでも問題ありませんが、基本買い方向とします。
例えば、今が 1BTC = 900,000 だとすると、ここで 0.1 枚を買います。
同時に + と – の価格も設定します。
今回は + の間隔が 10000 円なのでその分価格が上がった 910,000 円で利確するように指しておきます。
逆に – の間隔が 50000 円なので 850,000 になったら復活ループに突入するように設定しておきます。
2) + に動いた場合:どんどん利確
値動きがいい感じの間はどんどん利確していきます。
例えば 900,000 でスタートしたのが、910,000 になると、一旦ここで利確して、この価格 (910,000) から再スタートします。次は 910,000 スタートなので + を 920,000 に設定し、 – を 860,000 に設定します。
さらにこれが 920,000 になったら、一旦ここで利確して、再度ここからスタートします。+ を 930,000 に設定し、- を 870,000 に設定します。
このように、利確できるときはどんどん利確していきます。利確するたびに + の線 (緑)、現在の購入価格 (青)、– の線 (赤) が上に動いていきます。
3) – に動いた場合:復活ループ
逆に – に動いた場合にはリセットできるまで倍々ゲームを続けます。
基本的には倍々ゲームのように一定間隔ごとに買い増していきますが、目的は一旦リセットすることです。買い増すこと保有している枚数の平均価格が下がるので、そこまで増えたらすべてを手放します。 (プラマイゼロで終了する)
これも – に動いていった場合の流れで見ていきましょう。
同じく 900,000 で 0.1 枚買います。+ も同じく 910,000 (+10,000)、- は 850,000 (-50,000)に設定します。
ただし、今回は 850,000 まで下がってしまい、復活ループに入ります。復活ループではリセットできるまで倍々ゲームを続けます。
850,000 で保有枚数 (0.1) を買い増すと、平均価格が 875,000 になります。
購入枚数 | 購入価格 | 保有枚数 | 平均価格 | |
0 回目 | 0.1 | 900,000 | 0.1 | 900,000 |
1 回目 | 0.1 | 850,000 | 0.2 | 875,000 |
つまり、875,000 まで価格が戻ればプラマイゼロで勝負を終了することができますが、逆にさらに -50,000 下がる場合もあるので、そこを次のポイントとして設定しておきます。
この状態で値動きが反発して 875,000 まで戻るとプラマイゼロで今回の勝負は終了し、最初から仕切り直します。
逆に875,000 でリセットできる前に次のラインである 800,000 になってしまった場合には、さらに保有枚数 (0.2) を買い足します。
これで保有枚数は 0.4 枚となり、平均価格は 837,500 になります。
購入枚数 | 購入価格 | 保有枚数 | 平均価格 | |
0 回目 | 0.1 | 900,000 | 0.1 | 900,000 |
1 回目 | 0.1 | 850,000 | 0.2 | 875,000 |
2 回目 | 0.2 | 800,000 | 0.4 | 837,500 |
リセットするラインは平均価格である 837,500 に設定し、- はさらに 50,000 下がった 750,000 に設定します。
値動きがここで反発して、平均価格まで戻ればリセットして仕切りなおせますが、さらに 750,000 まで下がってしまった場合には再度買い増しをします。
このように、リセットが成立するまでこのループを繰り返します。
もちろん復活ループで購入する枚数をもっと増やしたり、- の間隔をもっと狭くすることでリセットできるまでの平均値が下がります。こうすることでより小さな反発でもリセットが成立しますが、やりすぎるとリスクが高くなるのでこのバランスが重要です。
倍々ゲームの唯一の負けは資金力不足なので、リスクが高くなりすぎずに十分な利益を得られる設定値 (枚数、+ の間隔、- の間隔) を見つけていく必要があります。
4) 万が一の強制終了 (最悪パターンを想定する)
相場が急激に変動した場合、ロスカットや追証が発生することがあります。また、確率が低いにしても連続で負け続けることはありえるので、どこかあきらめるタイミングを設定しておく方が安全です。
含み損益が x 以上になったら一旦あきらめる、x 回連続で負けたらあきらめる。いずれかもしくは両方が成立してしまった場合には勝負を終了するという仕組みも入れておくことが重要です。
仮に一回負けたとしても、そこまでにそれ以上の儲けが蓄積されていれば問題ないうえ、ここに行くのは稀のはずなので、今のところは心配していません。
このアルゴリズムが負けない理由をもう少し解説
実際のプログラムのアルゴリズムは以上のとおりですが、Bitcoin FX で倍々ゲームが有効だと思う理由をもう少し記載しておきます。
Bitcoin FX には上限がない・最小発注数が低い・レバレッジがある
購入できる枚数に上限がないことはもちろんですが、逆に購入できる最小枚数が小さいので、資金力があまりなくても気軽に始められます。
このプログラムを書いた当時、bitFlyer の BitCoin FX の最小発注枚数は 0.001 BTC でした。つまり、BitCoin の価格が 100 万の時でも、初期購入価格をわずか 1000 円でできました。
2018年 4月 25日から BitFlyer の Bitcoin FX の最小発注数量が 0.01 BTC に変更されましたが、今でもレバレッジを 15 倍までかけられるのであまり影響しません。
チャートは反発をするもの
ジャンケンと同じく Bitcoin も株も為替も、基本的には価格が上がるか下がるかの1/2 の勝負です。ただし、大きな違いとして 「心理的な理由で反発をする」 という点があります。
ある程度価格が下がり続けると心理的に 「もうそろそろここが底じゃないか」 という心理が働き、長期的なトレンドを変えるほどではないにしても、反発をすることが良くあります。
この反発をうまく捉えられれば下がり続けた場合にも、ほとんどの場合には一旦リセットできるのでそこから勝負を仕切りなおせます。
倍々ゲームの唯一の負けパターンは資金力が追い付かないほど連続して負け続けることなので、この反発をとらえてリセットできるということが非常に有効です。
トータルでどれだけ下がってもうまく反発を捉えられれば損益を出さずにプログラムを流しっぱなしにできます。
以上のアルゴリズムでプログラムを書き、現在も流しています。その結果も追って紹介していきたいと思います。
皆様も良い BitCoin ライフがありますように!