ログ・ファイルから取引の詳細を分析する
BOTのログはVisual Studio Code (VS Code)のTEMINALウィンドウにも表示されますが、
バグがあるのかすべてのログが表示されないことがあります。
なので仮想通貨の取引の詳細を確認するにはログ・ファイルを見ます。
ここではログ・ファイル「log(20220910).txt」の一部を掲載しています。
関数「buy_sell()」では仮想通貨の「買い注文」と「売り注文」のタイミングを調べています。
行3には、現在売りのポジション(short position)を持っている状態であることが表示されています。
行4には、マーケットのトレンドが下降トレンドでないので「売り注文」をスキップしたという情報が表示されています。
ちなみに、このBOTでは「損小利大」になるようなアルゴリズムを組み込んでいるのでマーケットが上昇トレンドから下降トレンドに変わったタイミングで売り注文を出しています。
関数「buy_sell()」では、なぜ「買い注文」及び「売り注文」が実行されなかったを示すさまざまな情報が表示されます。
これらの情報を分析してBOTのアルゴリズムと各種パラメータを調整します。
buy_sell():
realBuySell() class initiated: BTC_JPY, qty=[0.01, 0.01, 0.01], rate=[1.0015, 0.0200] [2022-09-10 07:00:49]
.... buy_sell(): buy_sell_condition(2), mas_buy_df.shape(327), mas_sell_df.shape(362) [2022-09-10 07:02:09]
.... buy_sell(): SELL position (short position) [2022-09-10 07:02:09]
.... buy_sell(): SKIP(2) due to market is not down trend [2022-09-10 07:02:09]
.... update_order(): sell position(True), mas_df.shape(689), close(False), cancel(True) [2022-09-10 07:02:09]
.... update_order(): sell_position=110, order_sell_price=3,040,085, book_sell_price=3,028,340 [2022-09-10 07:02:10]
.... update_order(): reverse_sell_position: [110] [2022-09-10 07:02:10]
.... update_order2(): first_pass(True), last_order_completed(False) [2022-09-10 07:02:10]
.... update_order2(): update_order_info(buy_order_id=B0910-065535-503611, buy_real_qty=0.01, buy_real_price=3,024,743, buy_real_fee=0) [2022-09-10 07:02:10]
.... stop_loss_v3(): mas_df.shape(689), loss cut: 18%(False), 15%(False), 10%(False) [2022-09-10 07:02:10]
.... update_order2(): first_pass(False), last_order_completed(False) [2022-09-10 07:02:10]
.... update_order2(): update_order_info(buy_order_id=B0910-065535-503611, buy_real_qty=0.01, buy_real_price=3,024,743, buy_real_fee=0) [2022-09-10 07:02:10]
.... main(2): sell position count 0~10[0] 11~30[0] 31~50[0] 51~70[0] 71~90[0] 91~999[1] [2022-09-10 07:02:10]
gmo81BuySellv10Bot2 main(2): real(BTC_JPY), real_order_completed(False), close(False), cancel(True), coin.buy[1, 0], coin.sell[0, 0], coin.sl[0] [2022-09-10 07:02:10]
行1-21には仮想通貨「XRP_JPY」のログの一部を掲載しています。
行5では現在、買いポジション(long position)を持っていることが表示されています。
そして買い注文の条件が満足したので関数「create_buy_order()」を呼び出しています。
行6-13は関数「create_buy_order()」のログです。
行7では関数「exe_buy_order_market_wait()」を呼び出して成り行きの「買い注文」を出しています。
この関数の引数には「数量、買値」を指定します。
買値は仮想取引のときのみ有効です。リアルの取引では無視されます。
この関数からは戻り値として注文ID、ポジションID等が返されます。
行8-12では買い注文のログを生成しています。
参考までに買い注文は「成り行き」「指値」どちらでも可能です。
create_buy_order():
realBuySell() class initiated: XRP_JPY, qty=[10, 10, 10], rate=[1.0035, 0.0200] [2022-09-10 06:39:38]
.... buy_sell(): mas_buy_df.shape(686) [2022-09-10 06:40:53]
.... buy_sell(): mas_sell_df.shape(782) [2022-09-10 06:40:53]
.... buy_sell(): NEW BUY ORDER REQUEST last sell order has been closed: buy_real_qty=10.0, sell_real_qty=10.0 [2022-09-10 06:40:53]
.... buy_sell(): BUY position (long position) [2022-09-10 06:40:53]
.... create_buy_order(): create_buy_order(buy_time=2022-09-09 21:31:00, qty=10, price=50.173) [2022-09-10 06:40:53]
.... create_buy_order(): exe_buy_order_market_wait(qty=10, price=50.173): ▶ 0, order_id=B0910-064053-975179 FAKE [2022-09-10 06:40:53]
.... create_buy_order(): while(1): exe_buy_order_market_wait(10, 50.173) ▶ status=0, res_df.shape=(1, 11) [2022-09-10 06:40:53]
.... create_buy_order(): write_buy_order_child_log(buy_order_id=B0910-064053-975179, position_id=P0910-064053-975179, real_qty=10, real_price=50.173, real_fee=0): ▶ 1 [2022-09-10 06:40:53]
.... create_buy_order(): write_buy_sub_order_log(buy_order_id=B0910-064053-975179, position_id=P0910-064053-975179, qty=10, price=50.173, real_qty=10, real_price=50.173, real_fee=0): ▶ 1 [2022-09-10 06:40:53]
.... create_buy_order(): while(1): buy_qty=10.0, header_sum_real_qty=10.0 [2022-09-10 06:40:53]
.... create_buy_order(): write_buy_order_log(buy_time=2022-09-09 21:31:00, qty=10, price=50.173, real_qty=10, real_price=50.173, real_fee=0): ▶ 1 [2022-09-10 06:40:53]
.... create_buy_order(): create_buy_order() ▶ status=0 normal return... [2022-09-10 06:40:53]
.... update_order(): sell position(False), mas_df.shape(1468), close(False), cancel(True) [2022-09-10 06:40:54]
.... update_order2(): first_pass(True), last_order_completed(True) [2022-09-10 06:40:54]
.... update_order2(): write_order_info(buy_order_id=B0910-064053-975179, buy_real_qty=10, buy_real_price=50.173, buy_real_fee=0) [2022-09-10 06:40:54]
.... stop_loss_v3(): mas_df.shape(1468), loss cut: 18%(False), 15%(False), 10%(False) [2022-09-10 06:40:54]
.... update_order2(): first_pass(False), last_order_completed(False) [2022-09-10 06:40:54]
.... update_order2(): update_order_info(buy_order_id=B0910-064053-975179, buy_real_qty=10, buy_real_price=50.173, buy_real_fee=0) [2022-09-10 06:40:54]
.... main(3): sell position count 0~10[0] 11~30[0] 31~50[0] 51~70[0] 71~90[0] 91~999[0] [2022-09-10 06:40:54]
gmo81BuySellv10Bot0 main(3): real(XRP_JPY), real_order_completed(False), close(False), cancel(True), coin.buy[1, 0], coin.sell[1, 0], coin.sl[0] [2022-09-10 06:40:54]
行1-28には仮想通貨「XRP_JPY」のログの一部を掲載しています。
行3の「buy_sell()」では、現在売りポジション(short position)を持っていることが表示されています。
そして売り注文の条件が満足したので関数「create_sell_order()」を呼び出しています。
行4-11は関数「create_sell_order()」のログです。
行5では関数「get_sell_price()」を呼び出して売値を計算させて取得しています。
売値は利益率から自動的に計算します。
ただし、マーケットの売値がここで計算した売値よりも高いときはマーケットの価格を売値にします。
行6では関数「exe_sell_close_order_limit()」を呼び出して指値の売り注文を出しています。
この関数の引数には「ポジションID、数量、売値」を指定します。
ポジションIDは買い注文のときに取得したポジションIDを指定します。
この関数からは戻り値として注文IDが返されます。
行7-10ではログを作成・更新しています。
create_sell_order():
realBuySell() class initiated: XRP_JPY, qty=[10, 10, 10], rate=[1.0035, 0.0200] [2022-09-10 07:06:25]
.... buy_sell(): buy_sell_condition(0), mas_buy_df.shape(679), mas_sell_df.shape(784) [2022-09-10 07:07:52]
.... buy_sell(): SELL position (short position) [2022-09-10 07:07:52]
.... create_sell_order(): create_sell_order(sell_time=2022-09-09 22:05:00, ms_price=50.060, buy_time=2022-09-09 21:31:00) [2022-09-10 07:07:52]
.... create_sell_order(): get_sell_price(buy_price=50.173): ▶ sell_price=50.349 [2022-09-10 07:07:52]
.... create_sell_order(): exe_sell_close_order_limit(P0910-064053-975179, qty=10, price=50.349): ▶ status=0, order_id=S0910-070752-748214 FAKE [2022-09-10 07:07:52]
.... create_sell_order(): write_sell_sub_order_log(sell_time=2022-09-09 22:05:00, buy_time=2022-09-09 21:31:00, sell_order_id=S0910-070752-748214, position_id=P0910-064053-975179, qty=10, price=50.349): ▶ 1 [2022-09-10 07:07:52]
.... create_sell_order(): update_buy_sub_order_log(buy_time=2022-09-09 21:31:00, buy_order_id=B0910-064053-975179, sell_order_id=S0910-070752-748214, sell_time=2022-09-09 22:05:00) [2022-09-10 07:07:52]
.... create_sell_order(): write_sell_order_log(sell_time=2022-09-09 22:05:00, buy_time=2022-09-09 21:31:00, qty=10, price=50.349): ▶ 1 [2022-09-10 07:07:52]
.... create_sell_order(): update_buy_order_log(col_name=sell_time, col_value=2022-09-09 22:05:00): ▶ 1 [2022-09-10 07:07:52]
.... create_sell_order(): create_sell_order() ▶ status=0 normal return... [2022-09-10 07:07:52]
.... update_order(): sell position(True), mas_df.shape(1463), close(False), cancel(True) [2022-09-10 07:07:52]
.... update_order(): sell_position=48, order_sell_price=50.349, book_sell_price=50.136 [2022-09-10 07:07:53]
.... update_order(): reverse_sell_position: [48] [2022-09-10 07:07:53]
.... update_order(): update_sell_sub_order_log_count(sell_order_id=S0910-070752-748214, get_price_count=1) [2022-09-10 07:07:53]
.... update_order(): get_order_status(orderId=S0910-070752-748214, qty=10, price=50.349): ▶ status=0, order_status=EXECUTED FAKE [2022-09-10 07:07:53]
.... update_order(): get_price(order_id=S0910-070752-748214, qty=10, price=50.349): ▶ status=9 FAKE [2022-09-10 07:07:54]
.... update_order(): get_price(50.349) ▶ status=9 pending exe_sell_close_order_limit() request: continue to next sell sub orders... [2022-09-10 07:07:55]
.... update_order(): update_sell_order_log(sell_time=2022-09-09 22:05:00, real_qty=0, real_price=0.000, real_fee=0) [2022-09-10 07:07:55]
.... update_order2(): first_pass(True), last_order_completed(False) [2022-09-10 07:07:55]
.... update_order2(): update_order_info(buy_order_id=B0910-064053-975179, buy_real_qty=10, buy_real_price=50.173, buy_real_fee=0) [2022-09-10 07:07:55]
.... update_order2(): update_order_info(sell_order_id=S0910-070752-748214, sell_real_qty=0, sell_real_price=0.000, sell_real_fee=0) [2022-09-10 07:07:55]
.... stop_loss_v3(): mas_df.shape(1463), loss cut: 18%(False), 15%(False), 10%(False) [2022-09-10 07:07:55]
.... update_order2(): first_pass(False), last_order_completed(False) [2022-09-10 07:07:55]
.... update_order2(): update_order_info(buy_order_id=B0910-064053-975179, buy_real_qty=10, buy_real_price=50.173, buy_real_fee=0) [2022-09-10 07:07:55]
.... update_order2(): update_order_info(sell_order_id=S0910-070752-748214, sell_real_qty=0, sell_real_price=0.000, sell_real_fee=0) [2022-09-10 07:07:55]
.... main(1): sell position count 0~10[0] 11~30[0] 31~50[1] 51~70[0] 71~90[0] 91~999[0] [2022-09-10 07:07:55]
gmo81BuySellv10Bot0 main(1): real(XRP_JPY), real_order_completed(False), close(False), cancel(True), coin.buy[0, 0], coin.sell[0, 0], coin.sl[0] [2022-09-10 07:07:55]