同時実行を実現するためにはJavaScript定量的な戦略を使用します

ビットコイン定量的トレーディング・プラットフォームのFMZの発明で作られたこの記事と記事のためのコード:

同時実行を達成するためにはJavaScript定量的な戦略を使用する-機能のパッケージを行く-本発明者は、定量化www.fmz.comを

定量的な戦略を実施する際に、多くの場合、遅延は、効率を改善するために同時に低減することができます。ロボットをヘッジするために、例えば、我々は、2枚のコイン、次の順序で実行されるコードの深さを取得する必要があります。

VaRのdepthA =交流[0] .GetDepth()
VaRのdepthB =交流[1] .GetDepth()

  

遅延APIがある休息を要求し、仮定が100ミリ秒であるので、時間の二倍の深さは実際には同じではありません取得し、より多くのアクセス場合、遅延の問題は、より顕著になる政策の実施に影響を与えます。

JavaScriptがマルチスレッドされていないので、パッケージ下部ので、この問題を解決するための機能を行く、しかしにより、より複雑な実装するためのメカニズムを設計します。

交換A = VAR [0] .GO( "getDepth")
VaRの交換B = [1] .GO( "getDepth")
VAR = depthA a.wait()//デプス結果を得るのリターンコール待ち方法待つ非同期
VAR depthB = b.wait()

  

最も単純なケースでは、何も書かれた政策の問題はありません。しかし、すべての戦略サイクルは、このプロセスを繰り返す必要があることに注意して、中間変数、Bは本当にただの一時的な援助です。私たちは多くの並行タスクがある場合、それは、レコードとdepthA、BおよびdepthB、私たちのタスクは不確実性によって複雑化する場合、状況はより複雑であるとの間に必要な追加の対応があります。したがって、我々は、機能を実装したい:並行移動を書くとき、同時に、結果は自動的ので、中間変数の必要性を排除し、変数に代入されて返された結果を同時に実行すると、変数をバインドするプログラムをより簡潔にするために。特定以下を達成。

関数G(T、CTX、F){ 
    リターン{実行:関数(){ 
        F(t.wait(1000)、CTX)
    }} 
}

  

私たちは、fは、特定の割り当ての関数であり、実行される機能の移動パラメータtは関数Gを、定義、記録プログラムコンテキストがCTXあります。だから我々は、この機能の効果を見ることができますされます。

このとき、プログラムの全体的なフレームワークは、「プロデューサー - 消費者」と同様に書き込むことができるモデル(いくつかの違いがあります)、生産者は、消費者が同時実行されるタスクを発行し続け、コードがプログラムに関連していない唯一のデモであり、実行ロジック。

VAR情報= [{奥行き:ヌル 、アカウント:ヌル}、{奥行き:ヌル、アカウント:ヌル}] // 私たちはより多くの情報を持つ2人の交流や奥行きアカウントを取得する必要があります参加も配置することができ、このような順序などID、ステータスなど。
VaRのタスクは= [] //グローバルタスクリスト

機能プロデュース(){//様々な同時タスクを発行した
  論理的なタスクは、唯一のプレゼンテーション生成ここでは省略// 
  tasks.pushを({為替:0、RET :「深さ'PARAM:[' getDepth ']})
  tasks.push({交換:. 1、RET:'深さ'PARAM:[' getDepth ']})
  tasks.push({交換:0、RET:「sellID、 PARAM:[ '購入'、インフォ[0] .depth.Asks [0] .price、10]})
  tasks.push({交換:. 1、RET: 'buyID'、PARAM:[ '売り'、インフォ[1。 ] .depth.Bids [0] .price、10]})
} 
関数ワーカー(){ 
    VARジョブ= [] 
    (VAR I = 0;私はtasks.lengthを<; Iは++){ 
        VAR =タスクのタスク[I] 
        タスク.splice(I、1)//タスクが実行された削除
        jobs.push(G(交流[task.exchange] .Go.apply(本、task.param)、タスク、機能(V、タスク){ 
                    インフォ[task.exchange] [task.ret] // V = v関数複雑になる待ち()の戻り値を移動し、慎重に下に体験することができます
                ))} 
    } 
    (ジョブズ、機能(T){_.eachを
            t.run()//すべてのタスクが同時に実行場所
        })
} 
(主な機能){ 
    一方(真の){ 
        プロデュース()は、取引注文// 
        ワーカーを()//同時に実行
        スリープ(1000)
    } 
}

  

完全な円だけの単純な機能を実装し、実際には、大幅にコードの複雑さを簡素化し、我々は唯一のタスクがプログラムを生成するために必要なものを気に見える、彼らは自動的に)(労働者が同時に実行し、結果を返します。柔軟性は多くのことを改善しました。

おすすめ

転載: www.cnblogs.com/botvsing/p/11106147.html