
前回の記事では、いわゆるプログラム型取引や定量型取引とは、一連の計算、判断、トリガーを経て取引所から取得したデータに基づいて何らかの操作を行い、取引所の口座を操作して取引を行うスクリプトプログラムのことであると学びました。データの取得やアカウントの操作といったこれらのアクションはすべて、取引所の API インターフェースを通じて実行されます。簡単に言えば、スクリプトプログラムと取引所の相互作用です。相互作用である以上、正常な相互作用と異常な相互作用があるはずです。異常な相互作用が発生すると、インターフェースは例外情報を返します。
もちろん、市販のプログラム化された定量取引システムや独自開発のプログラムには、さまざまなエラー プロンプトやエラー メッセージが表示されます。これらのエラー メッセージは、Exchange API インターフェイスによって報告されるエラー メッセージに限定されません。プログラム実行時例外エラー、構成エラー、プログラム構文エラーなどもあります。
Inventor Quantitative Trading Platform では、エラー メッセージは大まかに次のいくつかのカテゴリに分類できます。

コードには括弧などの文字がありません。このタイプのエラーは通常、ポリシー編集ページに表示され、ポリシーを実行できません (下の図に示すように、実行時にエラーが直接報告されます)。
そのため、戦略を書いた後は、プラットフォームの戦略編集ページを見て、小さな赤い XX があるかどうかを確認するのが習慣になっています。ある場合は、明らかなエラーがあるはずです。


このようなエラーが発生すると、プログラムは失敗し、実行が停止します。
FMZプラットフォームでは、取引ペアは次のように一律に定義されています。X_Yこの形式では、X は取引通貨の名前を表し、Y は表示通貨の名前を表します (先物通貨ベースの契約取引ペアの表示通貨は通常 USD で表され、以前の記事で紹介しました)。例えばBTC_USDT取引ペアをランダムに書き出すと、BTC-USDT。

FMZ プラットフォームのバックテスト システムでエラーが報告されました:

実際の取引でエラーを報告する:

さらに、初心者が遭遇する一般的な間違いは次のとおりです。
https://www.fmz.com
このタイプのエラーは、FMZプラットフォームアカウントのパスワードを変更することによって発生し、API KEY無効 (ユーザーの API キーがブラウザ上で暗号化され、その後 FMZ プラットフォーム上で構成されている) の場合、戦略を開始できず、エラーが報告されます。
戦略を実行する際にインターフェース呼び出しエラーが発生することがよくあります。以前の記事では、FMZプラットフォームのインターフェースが次のように分かれていることを学びました。ネットワークリクエストを生成するためのインターフェース、ネットワークリクエストを生成しないインターフェース。インターフェースエラーによってポリシープログラムが停止することはありません。これは通常、不正なデータを返すインターフェース呼び出し例外が原因です。ポリシーにはフォールトトレランスがないため、不正なデータによってプログラム例外エラーが発生し、プログラムが停止します。 (フォールト トレランスの概念については、以前の記事で説明しました)。
ネットワーク要求を生成するインターフェース エラー メッセージは次のとおりです。
ネットワークタイムアウト

初心者がよく遭遇するエラー メッセージの 1 つは、国内のネットワーク デバイス (自分のコンピューターまたは国内のサーバー) の使用です。ほとんどの取引所がブロックされているため、国内ネットワークからは基本的に多くの取引所にアクセスできず、アクセス インターフェイスはタイムアウトを報告します。 (以前の記事で触れました)
http 429 エラー
https://www.fmz.com
典型的なエラー メッセージの 1 つです。原因は、交換インターフェースが頻繁に呼び出され、交換の頻度制限を超えていることです。 (以前の記事で触れました)
新入生の中には、「もっと交換留学に応募したい」と言う人もいるかもしれません。API KEYあるいは、さらにいくつかの交換口座を申請することもできます。取引所は通常、IPアドレスに基づいてインターフェースのアクセス頻度を制限することを知っておく必要があります。簡単に言えば、IPアドレスから送信されたすべてのリクエストがこのIPアドレスでカウントされる限り、制限を超えてこのIPが再度リクエストを送信した場合、Exchange サーバーはアクセスを拒否します。
交換インターフェースビジネスレベルでのエラー報告
上記のタイムアウトと 429 は、ネットワーク レベルのエラーです。取引所インターフェースのビジネス レベルで問題が発生した場合にもエラーが報告されます。たとえば、スポット相場を取得したいが、存在しない取引ペアを設定した場合などです。 FMZ プラットフォームのデバッグ ツールでテストしました。デバッグ ツールは非常に便利なテスト ツールで、関数呼び出し、データ取得などのニーズのリアルタイム テストに非常に適しています。

デバッグツールの実行結果と実際の実行結果に違いはありません。

Huobi 错误 GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
ここでのエラーメッセージは、トランザクションペアが無効であることを意味します(ここで確認できます)"err-msg":"invalid symbol")。
例えば、このような業務関連のエラーは数多くあります。例えば、レバレッジを設定する際、一部の取引所では小数点付きのレバレッジ値に対応していません。このとき、レバレッジ値に小数点が含まれていると、インターフェース呼び出しエラー。
ネットワーク要求を生成しないインターフェース呼び出しをリストします
先物契約コードを設定する 一部のインターフェースは、システム内の一部のグローバル変数のみを設定し、ネットワーク要求を生成しません。次に例を示します。

ただし、パラメータが誤って渡されたり、ランダムに書き込まれたりした場合はエラーが発生します。

ただし、エラーの種類に関係なく、表示されるエラー メッセージは問題を見つけるための重要な情報であり、通常はエラー メッセージから問題を特定できます。翻訳ツールを使用して、エラー メッセージを翻訳し、重要な情報を抽出できます。例えば、上記の例では"err-msg":"invalid symbol"、翻訳: 「err msg」: 「無効なシンボル」。取引コードと取引ペアを表すために通常英語の記号が使用されるため、取引ペアの設定が間違っていることはおそらくご存知でしょう。
エラー情報について簡単に説明します。クエリに関するよくある質問を引き続き収集する投稿があります: https://www.fmz.com/bbs-topic/1427
バックテスト システムも定量ツールの重要なポイントです。バックテスト システムを使用すると、戦略のプロトタイプを簡単にテストし、戦略の潜在的なバグや論理的な問題を事前にテストできます。バックテストシステムについては合理的に考える必要があります。バックテスト システムは、ある程度、戦略の問題を反映できます。
以下では、FMZ がサポートするさまざまな戦略言語の観点から、FMZ プラットフォーム上のバックテスト システムについて簡単に説明します。 (バックテストシステムの紹介は以前の記事で触れました)
ブラウザ側のバックテストでは、ローカルのハードウェア リソースが使用されます。
カストディアンでバックテストを行う場合、どのカストディアンに割り当てるかを選択できます (独自のカストディアンまたは FMZ プラットフォームのパブリック カストディアンのいずれか)。 FMZプラットフォームのパブリックカストディアンの負荷が高いことを考慮すると、バックテストにはローカルカストディアンを使用することをお勧めします(これはより高速になります)。パブリックカストディアンでバックテストを行う場合、負荷を超えるタスクが多すぎると、一部のバックテストがタスクがキャンセルされ、バックテストが遅延します。測定が中断されます。
スクリプト言語とは異なり、C++ ポリシーは実行する前にコンパイルする必要があります。 C++ 言語戦略は、最初に FMZ プラットフォーム (サーバー) でコンパイルされます (コードに問題がある場合は、コンパイルが失敗し、エラー メッセージが表示されます)。コンパイル後、FMZ プラットフォーム (サーバー) でバックテストを実行します。
基盤となる実装は JavaScript であり、バックテストもブラウザ側で実行されます。
基盤となる実装は JavaScript であり、バックテストもブラウザ側で実行されます。
Inventor Quantitative Trading Platform のバックテスト システムには、2 つのバックテスト モードがあります (こちらは戦略言語を区別せず、こちらはバックテスト設定であり、さまざまな言語での戦略バックテストは同じです)。

バックテスト システムの説明については、プラットフォーム チュートリアルの情報を参照してください。
https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B
K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
図のシミュレーションのように: https://www.fmz.com もちろん、実際のバックテスト システムでこのシミュレーションを実装する場合、状況は図に示されているよりも少し複雑になります。ここでは詳しく説明しません。シミュレーション レベルのバックテストのメカニズムを理解すれば十分です。 この原則を理解した上で、シミュレーション レベルのバックテストは非常に高速ですが、シミュレーション レベルのバックテストの欠点に注意する必要があります (シミュレーションによって生成された価格は、1 秒ごとに 1 つずつリリースされる実際の価格ではないため)。しかし、戦略が合えばシミュレーションされたティック変化トレンドこれにより、戦略のパフォーマンスが非常に良くなります (ただし、実際の状況では、価格はこの K ライン列の枠組み内にあっても、このように動かない場合があります)。 シミュレーションされたティックデータを生成するために使用されるKラインは基礎Kラインと呼ばれ、このKラインの期間はボトムKラインサイクルポリシー設定ページに示されているように設定します。
ここで 1 分に設定すると、シミュレートされたティックを生成するためのデータ ソースとして、1 分周期の K ライン データが使用されることを意味します。
もう 1 つのポイントは、高頻度戦略の場合、シミュレーション レベルのバックテストを使用することは明らかに適切ではないということです。ただし、トレンド戦略の場合、シミュレーションレベルのバックテストを使用すると、戦略のパフォーマンスをある程度反映できます。

Inventor Quantitative Trading Platform バックテスト システムのデータはどこから来ますか?バックテスト システムは、デフォルトで FMZ プラットフォームのデータ センターのデータを使用します。FMZ プラットフォームのデータ センターは、各取引所から各通貨の市場データを自動的に収集し、プラットフォーム上のバックテスト システムに提供します。

FMZ API ドキュメントには、カスタム データ ソースに関する説明もいくつかあります。 https://www.fmz.com/api#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%BA%90
FMZ ライブラリにもいくつかのソリューションがあります。

興味のある初心者の方は勉強したり参考にしたりしてください。
プログラム取引と定量取引は切り離せない勉強、テスト、考える。 問題について孤立して考えることはできません。それは非効率的です。問題を解決し、考える最も効果的な方法は情報を探す、それから自分で試してみましょう、思考分析問題が解決しない場合は、上記の手順を繰り返してください。
しかし、通常、初心者が問題に遭遇すると、次のように感じます。
「あ~プログラミングも定量化も戦略書きも難しすぎる。」 「ずっと見てきたけど、まだ混乱してる!」 「まだ始めていないのにやめてしまいたい!」 ….
FMZ プラットフォームを使い始めるのは実はとても簡単です。まず、情報を見つけるのが上手である必要があります。 Inventor Quantitative Trading Platform の戦略プラザ、コミュニティ、ライブラリには、参照可能な情報が多数あります。

次に、実践的な能力があります。バックテスト システムとデバッグ ツールを使用すると、テストが容易になります。これは、完全な戦略をテストすることを意味するものではありません。実際、基礎知識がまったくない場合でも、FMZ 定量バックテスト システムで JavaScript プログラミングの基礎を学ぶことができます。
私がよくJSを勉強するチュートリアルサイトはこちらです:https://www.runoob.com/js/js-loop-for.html JSに限らず、あらゆるIT知識をここで検索・学習できます。 例えばJSの正規表現の使い方が分からないのですが、どうすればいいでしょうか? もちろん、まずは情報を確認してから試してみてくださいね〜
次のような例を見ました:
私はそれをテストしたいのですが、FMZ プラットフォームのバックテスト システムを使用してテストして学習することもできます。
バックテストシステムでランダムに取引所を設定する

次のコードをテストします。
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "[email protected]"
Log(strEmailAddress2, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress2))
}

見て〜なんて素晴らしい学習ツールなんだろう! たとえば、JavaScript 言語でループ ロジックを記述する方法を学びたいので、次のように試します。
配列変数の要素を配列内に現れる順序でループします。
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}

すぐに勉強する意欲が湧いてきますか? 実際、FMZ では、バックテスト システムで JavaScript の基礎を学びながら、JavaScript チュートリアルを視聴できます。 JavaScript構文はほぼマスターされました。次の段階に進むには、交換インターフェースを使用してテスト用のデータを取得する必要があります。FMZプラットフォームを使用することもできます。デバッグツール実際のインターフェーステストを実行します。
次に、さらに考え、1 つの例から推論を引き出し、テストして検証し、比較して分析するなどを行う必要があります。この方法ならすぐに始めることができます。