商品先物CTPとデジタル通貨APIには,デジタル通貨のプログラム化取引に慣れていない人が,商品先物プログラム化に慣れていない人が,簡単なコピー体験できない.この投稿は,それらの違いを概要します.
歴史的なデータ
CTPインターフェイスは,歴史的な市場を提供していない. 取引先によって処理される. 登陸が未行または登陸断線が取引データを失う場合,CTPは取引復元メカニズムを提供していない. デジタル通貨は,通常,K線と取引履歴にアクセスするためのインターフェースを提供している.
協定は違います
デジタル通貨APIは一般的にRESTとwebsocketプロトコルで,CTPはネットワーク関連ロジックを内部に包み,TCPプロトコルに基づくFTDプロトコルを使用してCTPのバックグラウンドと通信する.
CTPプロトコルのすべての取引および注文の取引は,変更後に通知されるが,注文,アカウント,保有を問い合わせることは主動的な問い合わせである.上記の3つのモデルはデジタル通貨APIで同様の形式で見つけることができます.
データの精度が違います
CTPプロトコルの深さは1回購入1回販売1回販売1回販売1回販売1回販売1回販売1回販売1回販売5回取引費は高価で,デジタル通貨は一般的に全深度または200回取引が可能です.CTPは実際の取引をプッシュしません.ただし,保有資産の変化を反転させることができます.デジタル通貨取引所APIは実際の分譲取引をプッシュできます.国内CTPプラットフォームの取引データティックのレベルは1秒2つのティックです.デジタル通貨取引所のウェブソケットは最大で1秒10回を行うことができます.
アクセス制限は異なります
デジタル通貨取引所では一般的に1秒10回まで制限されている. 注文の撤回については特に要求されていない. CTPは主動的な要求の制限が厳しく,一般的に2sで比較的に安全であり,撤回回数についても要求されている.
安定度
CTPプロトコルは安定しており,エラーやネットワーク上の問題はほとんどありません. デジタル通貨は制限が少なく,取引時間が長く,保守,データ遅延,ネットワーク上のエラーなどの状況が一般的です.
FMZ量化プラットフォーム CTPプロトコルのベストプラクティス
CTPのデフォルトモードでは,GetTicker,GetDepth,GetRecordsなどのインターフェイスがキャッシュされているため,最新のデータを取得できます.データがない場合,データが常に待たされるので,Sleepを使用することはできません. 状況が変化すると,ticker,depth,recordsは更新されます.このとき,任意のインターフェイスが呼び戻されます.
市場を即時更新モードに切り替えることができます. 市場を即時更新モードに切り替えることができます.exchange.IO("mode", 0) ◎このとき,ポリシーはイベント駆動で書き込むことができません.高速な死回りを避けるため,SLEEPイベントを追加する必要があります.いくつかの低周波のポリシーはこのパターンを使用することができ,ポリシーのデザインは簡単です.使用exchange.IO("mode", 1) は,デフォルトのキャッシュモードに戻すことができます.
単一の契約を操作する際には,デフォルトモードを使用することもできます. しかし,複数の契約の場合,取引先へのアクセスが詰まり,他の契約の取引先への更新が入手できないような,市場更新がない契約が起こり得る. この問題を解決するには,即時更新モードを使用できます. しかし,高周波戦略を書くことは簡単ではありません. このとき,イベントプッシュモードを使用して,注文と市場のプッシュを取得できます.设置方式为exchange.IO("wait") ⇒複数の取引所オブジェクトが追加された場合,これは商品フューチャーでは稀です.可以使用exchange.IO返されたインデックスは返された取引所のインデックスを示します.
行事ティックの変更プッシュ: {Event:
戦略構造は以下のように書ける:
function on_tick(symbol){
Log("symbol update")
exchange.SetContractType(symbol)
Log(exchange.GetTicker())
}
function on_order(order){
Log("order update", order)
}
function main(){
while(true){
if(exchange.IO("status")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅rb
while(True){
var e = exchange.IO("wait")
if(e){
if(e.event == "tick"){
on_tick(e.Symbol)
}else if(e.event == "order"){
on_order(e.Order)
}
}
}
}else{
Sleep(10*1000)
}
}
}