公開講座の公開により, 頻繁に問題が発生します. 今日は,コード構造の最適化の大切さについてお話しします.
賭けには2つの要素が重要です: 1) 資金利用率 2) 取引き速度
通常,注文の速度は,取引所の近くにあるサーバーや,より良いネットワークを購入することで解決できます. しかし,実際には,ほとんどの新手にとって,単にコード構造を最適化することで,戦略を数十ミリ秒速くすることができ,より良いネットワークの変更の効果に全く劣らないのです. しかし,コストははるかに低いです.
しかし,取引ペアが1つしかない場合,最適化コード構造は1ms未満で改善され,ほとんど違いは見えません.
資金利用率の向上は,多くの場合,同一の資金が同時に複数の取引ペアを観察することを必要とするので,論理循環回数が増加します.この時点で,コード構造の最適化の利点が明らかになります. 一般的な多取引所の多取引対の調査の複雑さはO ((n)) です.*m) ((m) 取引ペアが数百に達し,取引所は同時に数十を観察するときは。
A-CとA-B-Cの2つの利回りがあるという問題です. A-Cは利回り,A-B-Cは利回り,A-B-Cは利回り,A-B-Cは利回りです. 2つの経路は,それぞれ2回計算する必要がある.その1回目は,その経路がもたらす利益を計算する.p1とp2を仮定し,その1回目は,それぞれの取引所と,その取引所が特定の提起を必要とする価格と金額を計算する.
最も一般的な書き込みは,最初に関数を書いて,この関数の機能は,利潤を計算し,具体的には, price と amount を参照する. そして,この関数を循環的に呼び出し,各経路のprofit を取得した後,profit 最大の取引を選択する.
価格と金額を計算する必要がないのは明らかです.
したがって,最適化時に,profitと提言を2つの関数に分けることができる。最初に循環呼び出しのprofitの関数,各経路のprofitを得て,次に,最大で取引するprofitを選択する。このようにして,論理的に提言の関数は,各ループから呼び出し,一度だけ呼び出しになる。時間複雑さはO (((2n) からO (((n+1),nから利回り経路の総数になる。
そして,コードをさらに分析すると,通常の場合,他の仲介業者が存在するので,ある道が利潤があるならば,その時に他の誰かが仲介されていることが判明する.したがって,複数の道が同時に利潤がある場合が非常に難しい.
路線をさらに最適化して,ループを設定し,もしある路線に利益があることがわかったら,その路線をブレイクし,その路線の提言数と価格を計算します.
複雑さは O ((n+1) から O ((m+1),m へとさらに簡素化されます. 各取引所のチャンスが等しいとき,mは約n/2に等しくなるので,複雑さは O ((n/2+1) に減少します.
つまり,単純な分割関数を使って,論理的最適化構造を分析することで,時間複雑さをO(2n) からO(n/2+1) に下げることができる.
実際のコードを書く時には,多くのシナリオを最適化できます.私はコードを書く時に,多くの場合,それを終えた後に,あるO (n!) をO (n) に最適化できる最適化ロジックが存在することを発見しました.*(n+1)) の可能性。時には,数百ミリ秒で実行される論理を1ms以内で最適化することもできる。
戦略調査の間隔を大幅に短縮できるので,少し時間を割いて,コード構造を最適化することをお勧めします.