見出し画像

FCoinJP 自動取引Bot - FJの取引マイニング

こんにちは、eziiji です。
仮想通貨取引所FCoinJPの取引マイニングの仕組みを利用した自動取引Botを作成しました!実践したコードを有償公開します。あなたも一緒にFJマイニングしませんか?

※ 以前拙作のbotをご購入済の方は無償でFCoinJPのbotを利用可能です。本Noteを購入せずサポート用のdiscordをご確認ください

仮想通貨取引所FCoinJPとFJトークンについて

FCoinJP及びFJがどのようなものかについてはここでは説明致しません。
仮想通貨系のウェブサイトやTwitterをご覧ください。

作成した自動取引botについて

■ ezfjminer
言語: Python 3.6
取引所: FcoinJP
環境: AWS EC2で確認
※ linuxの基本的操作が出来ることと、AWS の基本的な操作が出来るレベルの方の利用を想定しています。

主な特徴

・1つのアカウントで同額の売りと買いの注文を同時発注(スレッドを利用)することで極力自己決済させる
・エラーになるかオーダー可能な最小数量以下になると終了
・発注数量は自動計算(デフォルトは取引する通貨の残高の95%のうち小さいほうを採用)
・少額の注文を高頻度で出すのではなく1回の発注で残高のほとんどを利用することでマイニング効率を高める
・価格変動があると注文が約定せずに残るたため、出した注文をチェックし、一定時間でキャンセル
・キャンセルしただけだとウォレット内の2つの通貨の残高バランスが崩れるため、キャンセルした通貨側で最新価格でオーダーを出し直すことでbot実行の継続性を維持
・discordのweb hook urlを設定すると取引が100回成立するごとに通知を行うことが可能

このbotの考え方

半日~1日かけてウォレットの残高をゼロに近づけていくことを目的にしていますので高速で動作するものではありません。
少額の注文を高頻度で出して、その後の状態をフォローしないようなbotよりも、より安定的に効率よくマイニング可能だと思っています。

ご購入にあたって

・予測しないエラーなどでプログラムが停止する可能性があります。ご連絡頂いたエラーで対応可能なものは修正していきたいとは思いますが対応を保証するものではありません。
・基本的に同値決済のため大きな損害が出ることは無いと思っていますが、万が一このプログラムを利用した取引で損害が発生した場合についても当方は関知しませんので自己責任でご利用下さい
・第三者への譲渡、販売、転載については禁止とさせて頂きます
・購入された方がご自身のbotを作るために改造する行為については特に制限致しません

ご購入頂きました方にはdiscordの招待リンクを閲覧可能になりますので、そちらにて最新版の配布と質問など承ります。discordに参加頂くと以前公開していたFCoin、BigOne、CoinPark用Botのコードも参照可能です。

linuxの基本的操作が出来ることと、AWS の基本的な操作が出来るレベルの方を想定しています。
当方AWS EC2を利用していますが最近Bot界隈で流行りのCloud9でも問題なく動作可能です。WindowsやMacでの利用も大きな問題はないと思いますが検証する予定はありません。
また長時間のサポートは基本的に夜間か週末がメインになると思いますがご了承下さい。

注意事項 マイニングルールとリスクを理解したうえでご利用下さい

取引マイニングを行うと、取引で支払った手数料の100%分の価値のFJが24時間後に支給されます(さらに取引量に応じたトレードボーナスも支給されます)。24時間後にFJが暴落していると損失になります。FJの価格変動にはくれぐれもご注意ください。

よろしければtwitterフォローください

--- ここからはbotの利用ガイドです ---

1. FCoinJPのアカウント登録

FCoinJPのアカウントをお持ちでない方は登録が必要です。
Botを稼働しているアカウントで手動で取引する、他のプログラムを同時実行することを想定していませんので、専用のアカウントを作成してください。

※ FCoinのアカウントを持っている場合はFCoinのアカウントでログインは可能ですが、ウォレットやAPI KEYは別になります。

取引マイニングをする場合、免許証・パスポートなどのアップロードによる個人情報の確認(KYC)を行わないとマイニングボーナスが支給されないようです。botを動作させる前に「設定」→「KYC認証」からKYCを行ってください。

2. FCoinJPのAPIキーの登録

アカウントの作成後にFCoinJPにログインして右のメニューから「設定」→「セキュリティ設定」→「OTP」にアクセスして二段階認証を設定していない場合は設定します。
その後「設定」→「API設定」→「APIを作成する」を押し、適当な名前を付けて「確認」を押し、keyとsecretが取得出来ますので保存しておきます。

3. アカウントへの送金と準備

アカウントに取引マイニングに利用する通貨を送金します(マイニングに利用する通貨ペアはデフォルトはBTC/USDTですので、BTCかUSDTを送金してください)
着金したら右のメニューから「アカウント」→「マイウォレット」タブ→「資金振替」を選択して取引口座に資金を移動してください。

その後、売りと買いの注文を同時にオーダーする仕様のため、Bot実行前に取引ペアの通貨を同量程度持っておきます(つまり BTC/USDTで掘る場合にBTCでウォレットに送金していたら、現在保持しているBTCを50%程度売却してUSDTを買ってからbotを実行します)

4. 初期設定とpipのモジュールインストール

AWS EC2またはCloud9の場合ターミナルから下記が必要です
1) yum updateで最新状態にする
2) Python3が動作するように設定を行う(alias設定、sudo update-alternatives設定)
3) pip で必要なモジュールをインストールする(datetime, websocket-client, requests)

ec2-user:~/environment $ sudo yum update
ec2-user:~/environment $ alias python=python36
ec2-user:~/environment $ sudo update-alternatives --config python

There are 2 programs which provide 'python'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/python2.7
   2           /usr/bin/python3.6
   
2を選択してEnter

ec2-user:~/environment $ sudo pip install datetime
ec2-user:~/environment $ sudo pip install websocket-client
ec2-user:~/environment $ sudo pip install requests

5. スクリプトの設置

Botを設置したいサーバにファイルをアップロードしてzipファイルを解凍します。ディレクトリを移動して3ファイルがあることを確認してください。

$ unzip ezfjminer_v0.9.0.zip
Archive:  ezfjminer_v0.9.0.zip
   creating: ezfjminer_v0.9.0/
  inflating: ezfjminer_v0.9.0/ezfjminer.py
  inflating: ezfjminer_v0.9.0/fcoin3.py
  inflating: ezfjminer_v0.9.0/config.ini
$ cd ezfjminer_v0.9.0
$ ls -la
total 40
drwxrwxr-x  2 ec2-user ec2-user  4096 Jun 18 18:58 .
drwx------ 16 ec2-user ec2-user  4096 Jun 19 00:38 ..
-rw-rw-r--  1 ec2-user ec2-user  1881 Jun 18 18:57 config.ini
-rwxr-xr-x  1 ec2-user ec2-user 20165 Jun 18 18:53 ezfjminer.py
-rw-rw-r--  1 ec2-user ec2-user  4549 Jun 18 18:39 fcoin3.py

config.ini をエディタなどで編集します。最低限下記部分に作成した API Keyと Secret Keyを設定してください。

#アカウントのAPIキー及びシークレットキー
KEY =
SECRET =

その他の設定を変更する際は「6. 設定値について」をご参照のうえで変更してください。

スクリプトに実行権限をつけてから実行します

$ chmod 755 ./ezfjminer.py
$ ./ezfjminer.py

正常な場合のスクリプトの実行例(1回約定するまで)

2018-10-30 02:13:07:268: ------------------------------------------------------------
2018-10-30 02:13:07:269: ezfjminer.py ver.0.9.1
2018-10-30 02:13:07:270: btcusdt trade mining is started.
2018-10-30 02:13:07:279: ------------------------------------------------------------
2018-10-30 02:13:07:280: Trade No.0
2018-10-30 02:13:07:91: {'ticker': [6356.13, 0.01, 6356.13, 0.0843, 6356.15, 1.005187096, 6366.94, 888888.0, 6355.0, 218949.227453027, 1395796427.5200262], 'type': 'ticker.btcusdt', 'seq': 414489}
2018-10-30 02:13:07:304: last price: 6356.13 ask: 6356.15 bid:6356.13 previousLastPrice:-1 24h ago Price:6366.94
2018-10-30 02:13:07:306: Account1 balance btc :0.002878200000000000 usdt :18.611159020000000000
2018-10-30 02:13:08:336: Order size: 0.0027 Buy price: 6356.14 Sell price: 6356.14
2018-10-30 02:13:08:344: {'status': 0, 'data': 'tyfaWTynTTWsFuLFu_83D2WxOQZavTDCbC07EgQChUg='}
2018-10-30 02:13:08:345: {'status': 0, 'data': 'tDZJMaCrY_KEQ-EwvRlISieTGII2zBy2-PqLFAZe59o='}
2018-10-30 02:13:08:349: Buy Order is succeeded. orderId: tyfaWTynTTWsFuLFu_83D2WxOQZavTDCbC07EgQChUg=
2018-10-30 02:13:08:361: Sell Order is succeeded. orderId: tDZJMaCrY_KEQ-EwvRlISieTGII2zBy2-PqLFAZe59o=
2018-10-30 02:13:23:376: Order checking loop: 0
2018-10-30 02:13:23:380: {'status': 0, 'data': {'id': 'tyfaWTynTTWsFuLFu_83D2WxOQZavTDCbC07EgQChUg=', 'symbol': 'btcusdt', 'amount': '0.002700000000000000', 'price': '6356.140000000000000000', 'created_at': 1540833188096, 'type': 'limit', 'side': 'buy', 'filled_amount': '0.002700000000000000', 'executed_value': '17.161578000000000000', 'fill_fees': '0.000002700000000000', 'source': 'api', 'exchange': 'fcoin', 'state': 'filled'}}
2018-10-30 02:13:23:381: {'status': 0, 'data': {'id': 'tDZJMaCrY_KEQ-EwvRlISieTGII2zBy2-PqLFAZe59o=', 'symbol': 'btcusdt', 'amount': '0.002700000000000000', 'price': '6356.140000000000000000', 'created_at': 1540833188103, 'type': 'limit', 'side': 'sell', 'filled_amount': '0.002700000000000000', 'executed_value': '17.161578000000000000', 'fill_fees': '0.017161578000000000', 'source': 'api', 'exchange': 'fcoin', 'state': 'filled'}}
2018-10-30 02:13:23:389: Both orders are filled. fill_fees: Account1 0.000002700000000000 Account2 0.017161578000000000

6. 設定値について

下記設定ファイルのコメント欄をご参照ください
※ KEY, SECRET以外はすべてデフォルトでも問題なくbotを動作させることが出来ます

[settings]
#アカウントのAPIキー及びシークレットキー
KEY =
SECRET =
#取引通貨
CURRENCY1 = btc
CURRENCY2 = usdt

#DISCORD通知用のweb fook url
DISCORD_URL =
#DISCORD通知用のmessage 先頭につける識別子複数走らせるときに変更する
DISCORD_MSG_PREFIX = ezfjminer

#前回の価格からこの割合以上の価格変化があった場合にしばらくスリープする
MARKET_CHANGE_LIMIT = 0.05
#価格変化があった場合にスリープする秒数
MARKET_CHANGE_SLEEP = 60

#オーダーしたあとの待ち時間 この時間おきに約定されたかか確認する(短すぎるとAPI制限に達するため注意)
ORDER_RESULT_WAIT_SLEEP = 15

#オーダーした後からキャンセルするまでのループ回数
ORDER_RESULT_WAIT_LOOP = 3

#オーダーが約定した後のスリープ時間(短すぎるとウォレットに入金されずに次のオーダーをしてしまう可能性あり)
ORDER_FILLED_SLEEP = 15

#ウォレット残高からどのぐらいの割合を発注に用いるか
ORDER_RATE = 0.95

#キャンセルしたあとの待ち時間 この時間おきにキャンセルされたか確認する
CANCELLATION_WAIT_SLEEP = 15

#発注のベースに用いる価格center/last/ask/bid/take/headのいずれかを指定する
ORDER_PRICE = center

#キャンセル後の再注文時に用いるベース価格last/ask/bid/take/headのいずれかを指定する
RETRY_ORDER_PRICE = take

#取引通貨ごとの設定
[btcusdt]
#オーダーを出す下限と上限を設定するかどうか
ORDER_PRICE_LIMIT_FLAG = 0
#上限と下限
ORDER_LOWER_PRICE_LIMIT = 0
ORDER_UPPER_PRICE_LIMIT = 0
#ベース価格から不利な方向に発注価格を変更する(マイナス値を指定すると有利な方向)
ORDER_MARGIN_BUY = 0
ORDER_MARGIN_SELL = 0
RETRY_ORDER_MARGIN_BUY = 0
RETRY_ORDER_MARGIN_SELL = 0

[ethusdt]
ORDER_PRICE_LIMIT_FLAG = 0
ORDER_LOWER_PRICE_LIMIT = 0
ORDER_UPPER_PRICE_LIMIT = 0
ORDER_MARGIN_BUY = 0
ORDER_MARGIN_SELL = 0
RETRY_ORDER_MARGIN_BUY = 0
RETRY_ORDER_MARGIN_SELL = 0

7. 設定の細かな調整について

※ KEY, SECRET以外はすべてデフォルトでも問題なくbotを動作させることが出来ます

発注のベースに用いる価格をORDER_PRICE で設定します。
center :ask価格とbid価格の中央値(端数切捨て)
last : 最新約定価格
ask :ask価格
bid :bid価格
take : 買いはbid価格、売りはask価格で発注
のいずれかを指定してください。
通常は centerが自己決済しやすく良いと思います。

上記のベース価格から
ORDER_MARGIN_BUYORDER_MARGIN_SELLだけ価格をずらすことが出来ます(正の値が不利な方向、負の値が有利な方向)
取引板が厚くてなかなか約定しないときなどは価格を少しずらすなどするとよい場合があります。

注文後に約定するかどうかを待つウェイト時間はORDER_RESULT_WAIT_SLEEP(オーダーを出した後のウェイト時間) x ORDER_RESULT_WAIT_LOOP (ループ回数)です。
これを過ぎると注文をキャンセルして新しい価格で再注文します。
スプレッドがなく板が厚くなっていてなかなか約定しない場合などはこの時間を増やしますが価格変動による損切時のリスクも増大しますので調整してください。

キャンセル後の再注文のベース価格はRETRY_ORDER_PRICEで設定しますlast/center/ask/bid/takeのいずれかを指定してください。延々とリトライを繰り返さないようにデフォルトは約定しやすさを優先してtakeになっています。
RETRY_ORDER_MARGIN_BUYRETRY_ORDER_MARGIN_SELLで価格をずらすことが可能です。

発注する価格上限と下限を決めることが可能です(価格変動が大きく損切リスクの大きい通貨で有効だと思います)
この機能を利用する場合はORDER_PRICE_LIMIT_FLAG = 1 に設定します。
ORDER_LOWER_PRICE_LIMITORDER_UPPER_PRICE_LIMIT が下限と上限になります。上限に達するとMARKET_CHANGE_SLEEPだけスリープします。キャンセル後の再注文ではこの機能は利用出来ません。

8. よくある質問

Q1. 下記のようなメッセージが出るけど問題ないか?

2018-06-19 00:15:37:55: Exception => get_market_price: Connection is already closed.

A1. 価格の取得にWebSocketを利用していますが前回の価格取得から1分程度経過するとタイムアウトしてこのエラーが発生します。内部でコネクションを張りなおしているため下記のようなTicker情報が表示されて処理が継続していれば正常です。

2018-10-30 02:13:07:91: {'ticker': [6356.13, 0.01, 6356.13, 0.0843, 6356.15, 1.0051


ここから先は

130字

¥ 15,800

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