これまでにシステムトレードのためのアルゴリズムなどを考えてきました。これまでに作成したPythonのコードがあればシグナルを発信はできるので、裁量トレードであれば問題なく実施できます。
ただ、やはりシステムトレードと言えば「完全自動売買」なのではないでしょうか。実際に自動売買BOTと呼ばれるツールが注目を集めたり、販売されたりしていますよね。
仮想通貨市場であれば、(口座を持っている取引所によりますが)自動売買を行うのはとっても簡単です。大抵の取引所が注文を含めた売買命令を出すためのAPIを公開しているからです。ちなみに、注文を出すためのAPIはプライベートAPIになります。そのため、APIキーも必須となります。
※APIキーは各取引所でアカウントを開設しなければ基本的に取得できません
そして、実は取引所が変わったとしても、注文する内容は大きくは変わりません。(もちろんAPIのパラメータや、リクエストURIは変わりますので、コード自体は変わります。)
実際に仮想通貨BOTの売買命令を行うコードを書く前に、各取引所共通の注文内容というものを押さえましょう。
※ちなみに、これは仮想通貨に限らず株やFXでも使われる注文内容です。
コンテンツ
仮想通貨自動売買BOTで使う注文や取引命令
さて、今回は買い注文と売り注文で別々に分けて解説したいと思います。実は買い注文でも売り注文でもやっている処理は同じです。※システム管理者からすると別々に分けた方が理解しやすいと思います。
買い注文に関すること
買い注文に関する事で覚えておきたいのは以下の3つです。
成行注文(買い)
現在出ている最も低い売り注文の価格で、すぐに対象通貨を購入します。仮に、今現在のBTC-JPYのレートが100万円だった場合、100万円を支払って1BTCを購入します。現在価格での購入命令と言っても良いかもしれません。
指値注文(買い)
指値注文というのは、購入価格を指定して注文する方法です。仮に、今現在のBTC-JPYのレートが100万円の時に、90万円の指値で1BTCという指値注文をします。そしてBTCの価格が下がっていき、BTC-JPYのレートが90万円まで下がった時点で、90万円で1BTCを購入します。
買い注文の決済(手仕舞い)
現在、BTC購入のポジションを取っている場合に、決済処理を行う事を言います。もし1BTCのポジションを取っているのであれば、取引所のシステムとしては1BTCを売ったのと同じです。
1BTCを100万円で買い、110万円になった時点で決済をすれば10万円の利益という事になります。逆に90万円の時点で決済をすれば10万円の損益となります。
やっている事はこれから紹介する売り注文と同じ事になります。
※厳密には買い注文には含まれませんが、買い注文とセットで覚えておいた方が良いです。
売り注文に関すること
売り注文に関する事も買い注文と同じなのですが、売り注文の観点で確認しておきましょう。
成行注文(売り)
これは上述した買い注文とは真逆の注文方法になります。今現在出ている最も高い買い注文の価格で、通貨を売りに出します。BTC-JPYのレートが100万円の場合、1BTCを売りに出す事になります。現在価格での売却命令と言って良いと思います。
指値注文(売り)
売却価格を指定して注文をします。こちらも買いの指値注文の逆パターンになります。仮に1BTCが100万円の時に、110万円まで価値が上がったら売却注文をするという命令を出します。1BTCが110万円に到達した時点で売買注文を出します。
売り注文の決済(手仕舞い)
こちらは買い注文の場合と真逆の考え方になります。1BTCを100万円で売却した場合、いつかは1BTCを買い戻さなければなりません。110万円になってしまえば損になりますし、90万円までに下がれば、逆に利益になります。
やっている事は買い注文と同じです。
※一度売りポジションを取ったら、いつかは買い戻さなければなりませんから、レートが安い状態で買い戻した方が利益が高くなります。つまり、レートが下がれば下がる程利益が出る事になります。
その他の注文に関する操作・命令
単純に買い、売りの注文を出すだけではなく、その他の注文内容もありますので覚えておきましょう。APIを使って自動で命令を行う事もできます。そのため、BOTを作成する際にも大切な考え方になります。
口座情報の取得
口座に必要な資産がなければ、注文を入れる事はできません。
現物買いであれば、現時点の資産が1万円の状態で、2万円の注文を出す事もできません。
なので、「必要資産がある」という事が注文の前提条件になる訳です。であれば、口座情報を取得するというロジックが必要になります。
また、BOTが順調に稼働する様になったら、資産状況に合わせて注文数を変更するというロジックを入れる事も有効です(資産管理の自動化)。
注文一覧の取得
注文を行ったら、注文が通っているかどうか確認をするのがベターです。
なにかしらの理由(例えば、取引所側のサーバエラーなど)で、意図した通りの注文が通らないケースもあるのです。
場合によっては注文一覧にも載らずに、そのままポジション(約定結果)になる事もありますが、注文を行ったら必ず注文一覧を取得する様にしましょう。
約定確認
成行・指値で注文を入れたとしても、すぐに注文が通る訳ではありません。売買が活発になっている場合には、なかなか注文が通らない事はよくあります。自分が買いたい(もしくは売りたい)と思っても、売買できる相手がいなければ取引は成立しないのと同じ事です。
ですから、実際に注文が通った状態を約定したと言い、注文通りのポジションが取れたかどうか確認する事を約定確認と言います。
こちらもBOTを作成する際には、大切な考え方になります。
キャンセル
一度出した注文をキャンセルする事を言います。特に指値注文をキャンセルする事が多いです。指値を入れていても、チャートの流れが変わったと判断した場合は、一旦キャンセルすべきです。
ストップロス
損益を限定させるために必要な考え方です。
仮に1BTCを100万円で購入した場合、当然BTCの価格が上がる事を期待する訳ですが、もしかしたら(一時的にでも)、BTCが90万円まで値下がりするかもしれません。これが暴落までしてしまった場合は60万円、50万円と下がってしまう可能性もあります。
そのため、損を限定させるために、例えば90万円に決済の注文を入れておきます。そうすれば最悪10万円の損益で済むという考え方になります。
BOTに限らず、手動によるトレードでも必ずこの考え方が大切になります。
まとめ
今回は、仮想通貨の自動売買BOTの注文や売買命令としてどの様な事をしなければならないのかについてご紹介しました。そもそもの取引の紹介の様な形にになりましたが、大切な考え方なのでここでしっかり覚えておいて下さい。
冒頭でもお伝えしましたが、取引所によって実際に注文をする際の命令文は変わってきます。例えば、bitFlyerを使う場合、Zaifを使う場合、Bitmexを使う場合などで、同じ指値注文であっても、プログラムとしての命令方法(厳密にはAPIの仕様)は異なります。
ただ、取引所や、プログラム上の命令方法が異なっていたとしても、やりたい事は一緒なんだという事は改めて覚えておいて下さい。
実際にAPIを使って、これらの注文や取引に関する命令を出す方法については別途ご紹介します。CCXTという非常に便利なライブラリを使えば、別々の取引所に対して同一の命令文(プログラム上のコード)で取引依頼をする事も可能です。