初心者のための暗号通貨量的な取引 - 暗号通貨量的な取引にあなたを近づける (2)

作者: リン・ハーンリディア, 作成日:2022-07-27 16:34:41, 更新日:2023-09-24 19:31:16

img

初心者のための暗号通貨量的な取引 - 暗号通貨量的な取引にあなたを近づける (2)

前回の記事では,プログラム式取引スクリプトについて語りました. 実際,取引戦略は取引スクリプトプログラムです. この記事では,主に,取引スクリプトプログラム (プログラムが実行される場所) のハードウェアキャリアの必要性について話し,スクリプト取引プログラムは,どの種類のコンピュータプログラミング言語で書かれることができるか (FMZ Quant Trading Platformで使用される3つのプログラミング言語がリストされています. もちろん,プログラム式取引の戦略を実行するために,任意のプログラミング言語を使用することができます). この記事では,暗号通貨の定量化について議論し,それについて学びます.

プログラム化取引スクリプト

  • 取引戦略の種類 プログラミング取引と定量取引の初心者は,さまざまなトレンド戦略,仲介戦略,高周波戦略,グリッド戦略など,様々な用語によって混乱する可能性があります. 実際,プログラミング取引と定量取引における一般的な戦略は単にいくつかの方向です.

    • 套利によるヘッジ戦略 簡単に言えば,ショートポジションを保持しながらロングポジションを保持する戦略は,基本的にアービタージ戦略に分類することができます.スポットクロスマーケット,フューチャークロスペリオド,フューチャーおよびスポットアービタージ,クロススペシスアービタージなどの多くの特定のタイプがあります.
    • トレンド戦略 単純に言うと,二重移動平均,MACDなどのトレンドを追跡し,オーダーやポジションを維持する戦略です.
    • 逆転戦略 例えば 格子戦略は 変動する市場での価格変動から利益を得ることです
    • 高周波戦略 簡単に言うと,それは市場マイクロ構造,パターン,機会,などを見つけるためにいくつかのアルゴリズムを通じて高周波取引のための戦略です.

    上記は,取引戦略の観点から分かれている.FMZ量子取引プラットフォーム上の戦略設計の観点から,戦略は以下に分けられる:

    • 単品種戦略 つまり この戦略は BTC トレーディングや ETH トレーディングのような 1 つの種類のみを操作します
    • 多種戦略 単純に言えば 戦略的論理に従って 多種を操作することです
    • 複数口座戦略 簡単に言うと,複数の交換オブジェクトは実際のボットで構成される (交換の概念は前の記事で紹介され,API KEYが構成されている交換オブジェクトは交換アカウントを表します).例えば,いくつかのフォロー-ザ-オーダー戦略では,複数のアカウントが一緒に操作に従います (同じ交換または異なる交換かもしれません).要するに,複数の交換オブジェクト (アカウント) は実際のボットで管理されます.
    • 複数の論理戦略 例えば,MACD戦略,移動平均戦略,グリッド戦略など,実際のボットで同時に設計されています (もちろん,それは異なる交換オブジェクトを操作することであり,同じ交換オブジェクトの操作は,特定の戦略が論理的に矛盾しているかどうかに依存します)
  • エクスチェンジ API インターフェース プログラム化取引スクリプトは,取引所の開いたAPIインターフェースを通じて取引口座を操作します. では,どのようなインターフェースが交換に開放されているのでしょうか? 前回の記事では,交換には REST と Websocket のインターフェースがあることを一般的には Exchange セクションで説明しました. ここで,戦略手順のレベルからいくつかの概念を追加します. 交換インターフェースは,検証されているかどうか (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.IOFMZ 量子取引プラットフォームの機能 (詳細については,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 機能を使用する際に一般的な問題や経験についてお話ししましょう

      • 誤り容量 これは,無数の初心者が悩んでいる最も一般的なエラーです. 戦略のバックテストのすべてが通常正常ですが,なぜ実際のボットがしばらく (いつでも起動できる) 実行され,失敗するのですか?

        img

        戦略を書いているとき,私たちはすべてインターフェースが返したデータを判断し検証する必要があります.例えば,FMZ Quant Trading Platformで取得する市場価格コードの行 (自分で交換インターフェースに直接アクセスするためのプログラムを書くことと同じ):var ticker = exchange. GetTicker()必要な場合Last(最終価格) のデータticker変数 (GetTicker関数で返される構造を参照してください),我々は使用する必要がありますvar newPrice = ticker.Last価格:最新,価格:価格,はい! すべて一緒に!) この時点で,GetTicker()ネットワークのエラー,交換はネットワークケーブルを引っ張る,ケーブルは切断され,子供が電気スイッチを引っ張る,など... それは原因になりますGetTicker()に戻す関数nullこの時点で,tickernullそして,私がアクセスする場合は,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...

        img

        順序関数は,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)
        }
        

        img
        ここであなたは尋ねるかもしれません: なぜ私はポジションを持ち,クローズバイとセールも一緒に使用されるのですか,なぜエラーが発生し,ポジションを閉鎖できないのですか?私は答えます: あなたは間違った方向で閉鎖しました!ロングポジションは閉鎖されるべきです 上記のエラーレポートの可能な状況の1つは,閉じる方向が正しく設定され,オーダー関数が正しく使用され,この方向の位置も保持され,それでもエラーが報告されます. 原因は,プログラムが複数のオーダーを交付した可能性がありますが,初期オーダーが満たされず,閉じるオーダーが市場で待機している可能性があります.この時点で,プログラムがポジションを閉じるのを継続し,閉じるポジションを上回るエラーが提示されます.

      • ログ出力,トランザクション情報表示 プログラミングおよび定量的な取引戦略の設計は,データ表示や操作日記出力などの人間・コンピュータの相互作用の設計から切り離せない.私たちは通常,ネイティブプログラミング言語を使用して実際のボットスクリプトや戦略プログラムを書きます.現在の言語の出力機能は直接使用されます. 例えば: pythonの使用print- わかった javascript の使用console.log- わかった ゴランの使用fmt.Println()- わかった C++の使用cout

        FMZ量子取引プラットフォームには 2つの主要な場所があります.

        • 状態列 本物のボットが起動したら 本物のボットページは図のように表示されます

          img

          表示部分は状態列情報である.状態列は,主にリアルタイムで変化するデータを表示するために使用される (リアルタイムの変化はリアルタイムで観察する必要があるため,毎回ログとして印刷することはできません.このタイプのデータは,状態列で表示できます.ログは,重複し,意味のないデータが多く繰り返され,各ログが印刷された場合,クエリに影響します). 状態列に表示されるデータは,LogStatus詳細については FMZ API 文書を参照してください.

        • ログ列 図に示されているように:

          img

          ログコラムは,主に特定の時点での特定のデータを永久に記録したり,特定の時点での特定の戦略の操作を記録するために使用されます. 木材には様々な種類があります.

          1. 共通ログ,FMZ上の戦略は,Log関数を採用し,戦略ログにそれを出力し,プリントします.

            img

          2. 注文日記,使用exchange.Sell/exchange.BuyFMZの戦略は,ログ出力に自動的に記録されます.

            img

          3. キャンセル日記exchange.CancelOrderFMZの戦略で使用され,自動的にログにキャンセルログを出力されます.

            img

          4. エラーログ,FMZ上の戦略が実行されているとき,ネットワークリクエストを行うインターフェースでコールエラーが発生し,例外が投げられます (投げの声明など),エラーログは自動的にログに出力されます.

            img

        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期間の移動平均が生成したグラフを見ることができます.

        img

        ストラテジーのカスタム図で,K線と移動平均グラフが描かれています

        img

        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

        img


関連性

もっと