DjangoとCeleryによる暗号取引の自動化

暗号業界と特に暗号取引の急速な発展を考慮して、私たちのチームは実験の一環として、 poloniex暗号プラットフォームで取引することを主な目的とする取引ロボットを作成することを決定しました。 この記事では、ロボットの作成中に発生したすべての困難と、達成できた結果についてお話します。







貿易





なぜpython
ロボットを書いている間、私はPython 3バージョンとその最も人気のあるフレームワークの1つであるDjangoを積極的に研究しました。 したがって、開発言語の選択に問題はありませんでした。



なぜジャンゴ
最初は、ターミナルで動作するロボットを作成しました。 その後、ロボットの動作を視覚的に観察し、取引用にいくつかのアカウントを追加し、構成を構成する必要がありました。これには特定のWebインターフェイスが必要でした。





物語の始まり



旅の初めに、「所有」を追跡できるリソースが必要でした。つまり、 チャートと全額を使用して、1か所で異なる交換の異なる通貨の残高。 また、主要通貨のウォレットを追加し、それらのトランザクション履歴を追跡する必要がありました。







ボットのホームページ

ロボット操作アルゴリズム



最初に、ロボットは数秒ごとに交換をポーリングし、 ボリンジャーバンドリンク )計算を使用して簡単な計算を行い、利益があると判断した場合は注文しました。







このアルゴリズムは数か月間機能し、その後、仕事のロジックを根本的に変更するというアイデアが生まれました-ロボットは為替レートの変更について交換を尋問するべきではなく、その変更の瞬間の価格変更について知っていたはずです スクリプトを書いている時点で、私たちが使用した暗号通貨プラットフォームの1つはそのような機能でした-poloniex。 この機能はWAMPプロトコルです 。 彼は、取引所で必要なチャネルを購読し、レートの変更に関するタイムリーなメッセージを受信することを許可しました。







一般に、Web Socket poloniexに登録すると、為替レートに関する情報だけでなく、 さらに、いわゆる「メガネ」入札に関する情報を受け取ります

ローカルチャットの注文やメッセージについても質問しますが、これはまったく別の話です。


取引所の現在の状況に関する最も関連性の高い情報を受け取った後、注文するタイミング、キャンセルする条件、実行できない場合の買いまたは売り注文の有効期間を考える必要がありました。







いつ注文しますか?



同様のタスクを持つロボットの主な目標は、売買のタイミングを正しく判断することです。 このスクリプトでは、アルゴリズムが次のステップを予測しようとするときに、必要な通貨がどの方向に進むかに応じて、方向メカニズムを使用することにしました。 以下はボットのログからの抜粋で、BTC-ETHペアの「方向」を確認できます。







 0、日付:2017-10-04 11:14:05.217362、最後:0.06349930 
 1、日付:2017-10-04 11:14:41.798799、最後:0.06349955 
 1、日付:2017-10-04 11:19:54.559547、最後:0.06360275 
 1、日付:2017-10-04 11:20:37.940202、最後:0.06370000 
 0、日付:2017-10-04 11:20:52.351764、最後:0.06371080 
 1、日付:2017-10-04 11:21:23.222651、最後:0.06364501 
 1、日付:2017-10-04 11:21:42.255728、最後:0.06365983 
 1、日付:2017-10-04 11:22:02.589577、最後:0.06370500 


方向を見つけるためのアルゴリズムはそれほど複雑ではありません-通貨ペアの最高入札価格と最低売値が前の値に対して同時に増加した場合-価格は次の瞬間に上昇する可能性が高く、そうでない場合は反対に。


このリストの最初の数字は、ロボットが次の瞬間に価格がどこに行くかを予測する同じ試みであり、0-価格は減少し、1-価格は増加します。 作業の結果、ボットは50を超える取引ペアのそれぞれに対してこのような指示を多数持っています。







道順を受け取りました。 次は?



ここで、このポイントがコースが変更されて反対方向に成長し始めるポイントであると自信を持って言うことができるとき、マスクがn連続した方向からどのように見えるかを決定する必要があります。 長いテストと方向マスクの変更後、このようなポイントの前に5(交換の修正を許可する場合は-1)同じ方向と2つの反対のオプションがあります。 例:







 (1、1、1、1、1、0、0)


80%の確率の宛先のこのようなリストは、その時点で為替レートが低下し始め、販売する必要があることを示しています。







展示する価格は?



もう1つの重要なポイントは、注文する必要がある価格を計算する問題です。 ここでは、WSからのすべての同じデータ、つまり取引所での現在の注文に関するデータが役立ちます。 取引所での注文の「グラス」全体を知って、ボットが設定したい通貨の量が注文で設定されたトークンの量と等しくなる条件に達するまで、それを沈めます。







その他の設定



作業中に自分が何を取引するかを選択できるように、Webインターフェースで作業する通貨の希望額やペア自体などの設定を行うことにしました。 注文の有効期間を5分間に設定します-この時間より古い注文をキャンセルするだけです。







結果は何ですか?



上記のアルゴリズムを実装すると、次の結果が得られました。







ボットウェブインターフェース



上記のスクリーンショットは、最終結果のWebインターフェースを示しています。 グラフは、ロボットがいつ注文するか、どの価格で、いつ注文をキャンセルし、どのような理由で決定したかを示しています。 インターフェースの右側には、サイトの主要通貨をオフにすることから、必要なトークン数を資金総額の割合として設定することまで、さまざまな設定があります。










作業の最終結果は、 GitHubのリポジトリにあります








All Articles