前回の記事では,プログラム式取引スクリプトについて語りました. 実際,取引戦略は取引スクリプトプログラムです. この記事では,主に,取引スクリプトプログラム (プログラムが実行される場所) のハードウェアキャリアの必要性について話し,スクリプト取引プログラムは,どの種類のコンピュータプログラミング言語で書かれることができるか (FMZ Quant Trading Platformで使用される3つのプログラミング言語がリストされています. もちろん,プログラム式取引の戦略を実行するために,任意のプログラミング言語を使用することができます). この記事では,暗号通貨の定量化について議論し,それについて学びます.
取引戦略の種類 プログラミング取引と定量取引の初心者は,さまざまなトレンド戦略,仲介戦略,高周波戦略,グリッド戦略など,様々な用語によって混乱する可能性があります. 実際,プログラミング取引と定量取引における一般的な戦略は単にいくつかの方向です.
上記は,取引戦略の観点から分かれている.FMZ量子取引プラットフォーム上の戦略設計の観点から,戦略は以下に分けられる:
エクスチェンジ API インターフェース
プログラム化取引スクリプトは,取引所の開いたAPIインターフェースを通じて取引口座を操作します.
では,どのようなインターフェースが交換に開放されているのでしょうか? 前回の記事では,交換には REST と Websocket のインターフェースがあることを一般的には
検証を必要としないインターフェース
一般的に"公開インターフェース"として知られるこのタイプのインターフェースは,API KEY
このタイプのインターフェースは,一般的に市場インターフェースである.例えば,深層市場価格の問い合わせ,K線データの問い合わせ,資金提供率の問い合わせ,取引品種に関する情報の問い合わせ,取引サーバーのタイムスタンプの問い合わせなど.
簡単に言うと,アカウントとは関係のないインターフェースは,概して公開インターフェースであると判断できます (検証は必要ありません)
FMZ Quant Trading Platformでは,検証されていない API 関数 (取引所の検証されていないインターフェース,公開インターフェースをカプセル化) を呼び出すとき,API KEYの構成が間違っている場合でも,インターフェースが返したデータは通常 (検証されていないため) に取得できます.
検証を必要とするインターフェース 簡単に言うと,確認する必要があるインターフェース (API KEY を介して) です.この種のインターフェースはプライベートインターフェースと呼ばれます.通常,アカウント資産のクエリ,アカウントポジションのクエリ,待機中の注文のクエリ,転送のクエリ,通貨の転送,レバレッジの調整,ポジションモードの設定など,アカウントのいくつかの操作または情報に関連しています. これらの操作はすべて検証されなければならない. FMZ 量子取引プラットフォームでは,確認する必要がある API 関数 (封装された交換,プライベート インターフェースの確認が必要なインターフェース) を呼び出すとき,API KEY が正しく設定されていない場合は,インターフェースを呼び出すときにエラーが報告され, null 値が返されます.
FMZの量子取引プラットフォームでは どう使われますか?
FMZ 量子取引プラットフォームは,取引行動とインターフェースを一貫した定義 (K-ラインインターフェース,深層市場インターフェイス,現在の資産クエリインターフェイス,オーダーインターフェイス,オーダーキャンセルインターフェイスなど) で封入し,これらのインターフェースは FMZ 量子取引プラットフォームの API 機能と呼ばれ,API ドキュメンテーションからアクセスできます (https://www.fmz.com/api).
FMZの量子取引プラットフォームではどのように使われますか?
これらの交換インターフェースには:資産転送,条件オーダー,バッチオーダーの配置,バッチオーダーのキャンセル,オーダーの変更などが含まれます.exchange.IO
FMZ 量子取引プラットフォームの機能 (詳細については,FMZ 量子取引プラットフォーム API 文書を参照してください.https://www.fmz.com/api#exchange.io..FMZ 量子取引プラットフォームの戦略スクエアにもいくつかの実践的な IO 戦略例があります.
FMZ Quant Trading Platform API ドキュメントのすべての API 機能がネットワーク リクエストを生成していますか?
まず第一に,取引所の API インターフェイスにはアクセス頻度制限がある (例えば1秒間に5回),アクセス頻度が頻繁すぎない場合, http 429 エラーが報告され,アクセスが拒否される (ほとんどの取引所が 429 報告する). Inventor Quantitative Trading Platform でカプセル化された交換インターフェースを呼び出すのに同じ制限がありますが,FMZ Trading Quant Platform でネットワークリクエストを生成しない API 機能にはそのような制限はありません. FMZ Quant Trading PlatformのAPI機能はすべてネットワークリクエストを生成するものではありません.そのうちのいくつかは,現在の取引ペアを設定し,契約コードを設定し,指標計算機能,取引対象名を取得するなど,一部のローカル設定のみを変更します. 一般的には,ネットワークリクエストが機能の目的から発生するかどうかを判断することができる.交換データ,交換口座操作等が生成されたネットワークリクエストである限り,これらのインターフェースは,コール周波数に注意を払う必要があります.
FMZ 量子取引プラットフォームの API 機能を使用する際に一般的な問題や経験についてお話ししましょう
誤り容量 これは,無数の初心者が悩んでいる最も一般的なエラーです. 戦略のバックテストのすべてが通常正常ですが,なぜ実際のボットがしばらく (いつでも起動できる) 実行され,失敗するのですか?
戦略を書いているとき,私たちはすべてインターフェースが返したデータを判断し検証する必要があります.例えば,FMZ Quant Trading Platformで取得する市場価格コードの行 (自分で交換インターフェースに直接アクセスするためのプログラムを書くことと同じ):var ticker = exchange. GetTicker()
必要な場合Last
(最終価格) のデータticker
変数 (GetTicker関数で返される構造を参照してください),我々は使用する必要がありますvar newPrice = ticker.Last
価格:最新,価格:価格,はい! すべて一緒に!) この時点で,GetTicker()
ネットワークのエラー,交換はネットワークケーブルを引っ張る,ケーブルは切断され,子供が電気スイッチを引っ張る,など... それは原因になりますGetTicker()
に戻す関数null
この時点で,ticker
はnull
そして,私がアクセスする場合は,Last
プログラム例外が発生し 戦略プログラムが停止します
インターフェースの呼び出しの失敗 (GetTickerの呼び出しが失敗し,nullを返します) は,戦略の停止の直接的な理由ではないようですnull
インターフェースコール失敗のエラーレポートは,実際のボット停止を引き起こすことはありません (強調).
では 真のロボットが 異常な停止を防ぐには どうすればよいのでしょうか?
インターフェースが返したデータに対してエラー対応処理を行うことです.非常にシンプルです.返したデータがnull
(JavaScript の例,他の言語は通常同じ)
短いコードセグメントを書いて説明します (これは説明だけです.直接実行することはできません!)
var ticker = exchange.GetTicker()
if (ticker) {
var newPrice = ticker.Last
Log("Print the latest price:", newPrice)
} else {
// The data is null, there will be no problem if no operation is performed
}
だけでなく,GetTicker
インターフェースは故障耐性が必要ですが,ネットワークリクエストのインターフェースは返却値の故障耐性が必要です (関数の返却値を使用する場合)
誤差耐性のある方法はたくさんあります._C()
FMZ API ドキュメンテーションを参照してください) 障害耐性関数を書いて,障害耐性メカニズムと論理を自分で設計します.
薬剤の使用について_C()
パラメータの定義は,そのパラメータが_C()
function は関数参照であり,関数呼び出しではありません._C(funcName, param1, param2)
,呼び出しが正しければ, funcName は括弧なしで,param1 と param2 は funcName 函数に渡すパラメータです._C(funcName(param1, param2))
FMZ APIのドキュメントを真剣に読まない初心者によって書かれています.
切符市場での注文量
スポットマーケットの注文量も,初心者でも簡単に間違いを犯すことができます. 前回の記事で述べたように,スポットマーケットの注文量通常は金額です. (非常に少数の取引所で他の設定がある可能性があります.一般的に,FMZのこれらの特別な交換設定はFMZ APIのドキュメントで説明されます.
取引対は以下のように設定されます.LTC_USDT
function main() {
exchange.IO("simulate", true) // Switch to the demo of OKEX exchange
exchange.Buy(-1, 1) // The price is -1, indicating that the order placed is a market order, and the quantity is 1, indicating that the order amount is 1USDT
}
取引所には通常,注文金額の制限があるため,制限を下回る注文は行われません (例えば,Binance Spotは,順次注文を行う前に,各注文が5USDT以上である必要があります).したがって,次のように注文した場合,エラーが報告されます.
Error Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
将来の注文の方向性 フューチャーストラテジーを作成する際,注文の方向性は初心者によってしばしば間違いを犯され,問題につながります.例として,FMZ Quant Trading Platformで戦略を書くことを挙げましょう. まずAPIのドキュメントの説明を見てみましょうhttps://www.fmz.com/api#exchange.setdirection...
順序関数は,Buy
, Sell
しかし,先物 (もちろん,スポットに問題はない,スポットはただ買ったり売ったりする) は,ロングを開く,ロングを閉じる,ショートを開く,ショートを閉じる方向性があるため,買/売は,多くの方向性での操作を表現できないことは明らかです.この時点で,関数を導入する必要があります.exchange.SetDirection()
取引の方向性を決定するものです
FMZでexchange.SetDirection("buy")
(最初に方向を設定) と組み合わせて使用されますexchange.Buy
オーダーがロングポジションを開くオーダーという意味です
そして,こういったこと.exchange.SetDirection("sell")
薬剤の併用として使用されますexchange.Sell
ショート・ポジションを開くためのオーダーですexchange.SetDirection("closebuy")
薬剤の併用として使用されますexchange.Sell
オーダーがロングポジションを閉じるオーダーです.exchange.SetDirection("closesell")
薬剤の併用として使用されますexchange.Buy
ショートポジションを閉じる命令です.
初期段階ではexchange.SetDirection("sell")
関連してexchange.Buy
(バックテストはエラーを報告しないかもしれませんが,これは明らかに論理的エラーです.強迫性障害は容認できません...).
また,初心者 が 犯す 他 の 共通 の 間違い
function main() {
exchange.SetContractType("quarter") // Set the current contract as a quarterly contract
exchange.SetDirection("sell")
var id = exchange.Sell(-1, 1)
Log("See my market order is placed and the transaction is completed, there is a position", exchange.GetPosition())
exchange.SetDirection("closebuy") // closebuy is used in conjunction with Sell, yes~
exchange.Sell(-1, 1)
}
ここであなたは尋ねるかもしれません:
ログ出力,トランザクション情報表示
プログラミングおよび定量的な取引戦略の設計は,データ表示や操作日記出力などの人間・コンピュータの相互作用の設計から切り離せない.私たちは通常,ネイティブプログラミング言語を使用して実際のボットスクリプトや戦略プログラムを書きます.現在の言語の出力機能は直接使用されます.
例えば:
pythonの使用print
- わかった
javascript の使用console.log
- わかった
ゴランの使用fmt.Println()
- わかった
C++の使用cout
FMZ量子取引プラットフォームには 2つの主要な場所があります.
状態列 本物のボットが起動したら 本物のボットページは図のように表示されます
表示部分は状態列情報である.状態列は,主にリアルタイムで変化するデータを表示するために使用される (リアルタイムの変化はリアルタイムで観察する必要があるため,毎回ログとして印刷することはできません.このタイプのデータは,状態列で表示できます.ログは,重複し,意味のないデータが多く繰り返され,各ログが印刷された場合,クエリに影響します).
状態列に表示されるデータは,LogStatus
詳細については FMZ API 文書を参照してください.
ログ列 図に示されているように:
ログコラムは,主に特定の時点での特定のデータを永久に記録したり,特定の時点での特定の戦略の操作を記録するために使用されます. 木材には様々な種類があります.
共通ログ,FMZ上の戦略は,Log関数を採用し,戦略ログにそれを出力し,プリントします.
注文日記,使用exchange.Sell
/exchange.Buy
FMZ
キャンセル日記exchange.CancelOrder
FMZ
エラーログ,FMZ上の戦略が実行されているとき,ネットワークリクエストを行うインターフェースでコールエラーが発生し,例外が投げられます (投げの声明など),エラーログは自動的にログに出力されます.
FMZのAPI関数,Log (ログ) の出力を生成できる関数 (Log ((...),exchange.Buy ((Price, Amount),exchange.CancelOrder ((Id) などは,必要なパラメータの後にいくつかの追加の出力パラメータが続くことができる.例えば: exchange (交換) CancelOrder (注文) [j].Id (注文) [j]),これは注文の順序[j]がキャンセルされたときに注文情報を出力する.
function main() {
Log("data1", "data2", "data3", "...")
var data2 = 200
var id = exchange.Sell(100000, 0.1, "Attached data1", data2, "...")
exchange.CancelOrder(id, "Attached data1", data2, "...")
LogProfit(100, "Attached data1", data2, "...")
}
指標機能の使用
インディケーター関数について話す前に,まずインディケーターとは何かを理解しましょう.簡単に言うと,それは移動平均,MACD,ATRなどの線です.
Q: これらの指標はどこから来たのですか?
A: もちろん計算されています
Q: 計算の根拠は何ですか?
A:K線データに基づいて計算した.
Q: 例を挙げてください
A: 最も単純な指標である移動平均指標を例として,毎日K線 (すなわち,正線または負線が1日を表す) のデータを指標計算のデータ源として使用した場合.移動平均指標パラメータは10である.計算された移動平均指標は10日移動平均である.
Q: K線 BAR の数は 10 未満である場合,移動平均指標を計算できますか?
K線データ BAR の数が指標期間のパラメータを満たしていない場合,計算された配列の対応位置は空の値で満たされ,例えば,JavaScript
言語戦略が表示されますnull
計算された指標データを印刷する際
戦略の平方根にトートリアル例があります.https://www.fmz.com/strategy/125770バックテストシステムと10期間の移動平均が生成したグラフを見ることができます.
ストラテジーのカスタム図で,K線と移動平均グラフが描かれています
Q:もし10時間の移動平均値が欲しいとしたら? K線データと時間周期のK線データを使うことは大丈夫です
素人の言葉では,私たちが見るK線は,数値化した後,配列です (配列の概念がわからない場合は,Baiduに尋ねることができます). その各要素は,順番に並べたK線列です.配列の最初の要素は,現在の時間から最も遠く,そして配列の最後の要素は,現在の時間から最も近いものです. 通常,K線データの最後のバーは,現在の期間のバーであり,リアルタイムで変化し,未完成です (交換ページにログインして変更を観察できます).計算された指標もK線バーと対応しています.上記の例では,指標値がK線バーに対応していることを見ることができます.最後のK線バーがリアルタイムで変化し,計算された指標もK線バーの変化とともに変化します.
FMZ Quant Trading Platformでは,TAライブラリ (FMZプラットフォームによって実装されたライブラリ,ドッカーに統合され,さまざまな言語を直接使用できます) またはtalibライブラリ (古いtalib指標ライブラリ,JS,C++統合,Pythonは自分でインストールする必要があります) を使用できます. 例えば,上記の例で移動平均を計算するには, TAライブラリを使用:
function main() {
var records = exchange.GetRecords()
var ma = TA.MA(records, 10)
Log(ma) // print moving average
}
タリブの図書館を使う:
function main() {
var records = exchange.GetRecords()
var ma = talib.MA(records, 10)
Log(ma) // print moving average
}
計算された指標データ ma は配列であり,各要素は K 線配列 (レコード) 1対1に対応します.ma[ma.length -1]
対応するrecords[records.length - 1]
そしてこれからも
MACDなどの指標にも注意を払う必要があります.
var macd = TA.MACD(records) // In this way, only the K-line data is passed in, not the indicator parameters. The indicator parameters use the default values, and the same goes for other indicator functions.
この時点で,変数 macd は二次元配列です (この概念を理解していない場合はBaidu に尋ねることができます).二次元配列は単に配列であり,その各要素も配列です. Q: MACD インディケーター データが 2 次元の配列である理由は? A: MACD指標は2つの線 (dif線,dea線) と一組のボリュームバー (macdボリュームバー,実際にはこのボリュームバーデータも線とみなすことができます) から構成されているため,macd変数は以下に分けることができます:
var dif = macd[0]
var dea = macd[1]
var macdColumn = macd[2]
興味のある方は,以下で勉強できます.https://www.fmz.com/strategy/151972