ビットコインの自動売買トレード(BOT)の作成日記!
今回の修正は「注文を最速」で出せるようにしました。
まだまだ初心者なので、websocket?とか使ってないんですが、なんとか1秒で位で注文できるようになりました。
今回のトラブル 注文に15秒くらいラグができる
原因
・cryptowatchからのデータ取得に7秒ほどラグがある
・プログラムで外部からのデータ取得を使いすぎて走らせるのに8秒くらいかかる
cryptowatchからのデータ取得にラグ
原因は二つありました。
1つはcryptwatchからのデータ取得が何故かラグがあります。
普通は12時00分ちょうどにデータが渡されるはずが、なぜか?12時00分7秒に渡されてきます。
ということは1分足が更新されてから7秒遅れで注文を出すことになります。
私の考えるロジックはスキャで1分足が更新された瞬間にポジションをとることを理想としてますので、このラグは痛すぎます。
スイングやデイトレならいいでしょうが・・・。
これについては原因はよく分かりません。
もともとそういう仕様なのか?
私が初心者だから勘違いしてるのか・・・w
プログラムのループが遅い
私のPCスペックが遅いのが悪いのか・・・?
プログラムが走るのが遅いので注文までに時間がかかりました。
約8秒w
これではスキャに向いてませんw
調べたところ、プログラムの書き方が悪かったようです。
プログラムの処理に時間がかかったのは、外部からのデータを取得するとき。
ビットコインBOTの場合だと、cryptowatchから価格データなどを取得するときに時間がかかりました。
1秒~3秒くらい?
そんでもって、私のプログラムはコードがめちゃくちゃで、しなくていいのに何回も外部からのデータを取得していましたw
基本的にコピペ職人だと、コードの意味を理解できずに適当にいらないものも置いてしまいます><;
解決方法
cryptowatchのラグ
タイムデータを使い、リアルタイムを取得して、それの形式をクリプトウォッチと同じよう変えます。
close_time = datetime.fromtimestamp(data[0]).strftime('%Y/%m/%d %H:%M:%S')real_time = datetime.now().strftime('%Y/%m/%d %H:%M:%S')
close_timeはcryptowatchから形成中の最新のローソク足のデータを取得。
real_timeはdatetime.nowを使って正しい最新の時間を取得
どちらも形式を同じにします。
そして、ループ分岐のところで
にすると、正しい時間の切り替わりでポジション確認・オーダー注文を出すことができます。
どちらも同じ時間になった瞬間に次に進むということですね。
これで7秒くらいのラグはなくなりました。
プラグラムのラグ
こっちは単純にcryptowatchからのデータ取得の回数を減らせばよかった。
こんなアフォなコードを書いてるのは私しかいないだろう・・・。
価格データを10秒に4~5回呼んでたからねwwww
外部データ取得はなるべく1つにまとめるのがよい。
まとめ
1分足の切り替わりでポジションをとることができた。
速ければ00秒、遅かったら3秒かかっちゃうけど・・・。
前のコードは15秒くらい送れてたからねw
だいぶ改善してパフォーマンスも変わると思う。
プロプログラマーの人から見たらだいぶレベル低いことをやってると思うでしょうが、初心者ゆえご了承お願いします。
私的メモみたいな感じで書いてます。
でわでわ~