トレードロボットをオーダーするための要件定義を作成する方法
目次
- トレーディングロボットを発注するための前提条件
- なぜ、要件定義を持つことが重要なのでしょうか。
- 要件定義の例
- 要件定義に含まれているもの
- 要件定義を作成できない場合、どこで取得できるでしょうか?
- 使用に際しての条件
- フリーランスに注文の詳細を書く方法
- トレーディング戦略の一般的な考え方
- シグナルの前の設定の説明
- シグナルの説明
- シグナルの有効期間
- オーダーの配置とポジションの取得
- トレーディングポジション/オーダーの管理
- オーダーのキャンセルとポジションの決済
- オーダーロットの計算
- トレードエラーと環境状態の処理
- 足のオープンと足のトレードの差
- ティック/スキャルピング戦略
- グリッド、マーチンマーチンゲール、これらの技術のダークサイド
- 開発者の選択の重要な側面
- プログラマができないこと
トレーディングロボットを発注するための前提条件
トレーディングロボットは、基になるアルゴリズムに従って動作するプログラムです。 アルゴリズムは、特定のイベントに応答して実行する一連のアクションです。 たとえば、アルゴリズムトレーディングで最も一般的なタスクは、 "New bar" イベントです。 イベントが発生すると、ロボットはトレードシグナルの出現をチェックし、それに応じて行動します。
トレードロボットのプログラムまたはオーダーを決定する前に、トレード操作を実行するためのタイミングについて、明確なルールを持つトレーディングシステムを策定する必要があります。 あらゆるトレードシステムの開発は、どんなに複雑なものでも、売買のトレードシグナルの定義などの基本的なものから始まります。 さらに、トレードを閉じるための様々なオプションを追加していきます。
トレーディング戦略を開発するために、トレーディングターミナルに対する長年の経験を持っている必要はありません。 ウェブ上で利用可能な数百の実証済みのアイデアの中から選択できます。 プログラミングのスキルについてはわからない場合でも、それは障害ではありません。 フリーランスのサービスは、適切な開発者を見つけるのに役立ちます。
アルゴリズムのトレード技術を続行する前にこれらの記事を読むことをお勧めします:
なぜ、要件定義を持つことが重要なのでしょうか。
トレードロボットを発注または開発する際には、ロボットが実行するタスク、動作する条件、インシデントや緊急事態への対応、必要な制御メソッドなどの要件を策定する必要があります。 トレーディングロボットは、厳密にロジックに従うプログラムです。 アルゴリズムをプログラムするためには、その詳細を準備する必要があります。
トレード戦略の説明は、要件定義の形式で提供されます。 提供する詳細については、以下の誤解は、 (顧客) とプログラマ (オーダーの開発者) の間に発生します。
EAの要件定義の重要な部分は、明確なトレードルールを提示することです。 EA をオーダーするのではなく、自分で開発したい場合でも、ルールの定義から始める必要があります。 要件定義を準備し、EA のテスト/最適化関連ポイントを含めます。 トレード戦略の品質と安定性をチェックするために使用する仮説を追加し、最適なパラメータを選択するための基準を記述します。
すべての EA 開発ステージを要件定義に含め、アルゴリズムのアイデアが開発者にとって明確になり、数週間後、数か月後、または数年後に思い出すのに役立ちます。 アルゴリズムのトレードは趣味ではなく、すべての段階を適切に文書化する必要があります。 新しいアイデアをテストする必要があり、トレーディングシステムの開発日記は非常に便利になります。
要件定義の例
ここでは、MetaTrader5標準パッケージで利用可能なMACD サンプルEAの開発の要件定義の例です。
1. トレードシステムの考え方は次の通りです: 相場のエントリは、 MACD のメインとシグナル線が現在のトレンド方向にクロスするときに実行されます。
2. トレンドは、指定された期間 (InpMATrendPeriod) の指数移動平均に基づいて決定されます。 現在の EMA 値が前より大きい場合、トレンドは成長していると見られます (ema_current > ema_previous)。 あるいは、現在の EMA が前のEMAの下にある場合、そのトレンドは下がりつつあると考えられます (ema_current < ema_previous)。
3. トレーディングシグナル:
- 買いシグナル: MACDメインラインが、シグナル線を上向きに横切る (MACD_current > signal_current & & MACD_previous < signal_previous).
- 売りシグナル: MACDメインラインが、シグナルラインを下向きにクロスする(macd_current<signal_current && macd_previous>signal_previous). 以下の図は、買いと売りのケースを示しています。
4. ポジションは、逆のシグナルで閉じている: 買いポジションは、売りのシグナルで決済され、売りポジションは、買いシグナルで閉じています。
5. ポジションは、新しい足が現れるマーケットプライスで開かれます。 このEAは、始値を使用してテストするので、足内の操作を無効にするための関数を追加する必要はありません。
6. ポジションを開くための追加のフィルタ:
MACD のメインラインの絶対値は弱いシグナルを除外するために使用されます: この値が open_level (ポイント単位) より大きい場合にのみシグナルが確認されます。 シグナルの確認条件は次のとおりです。
- 買いシグナルの確認: Abs (MACD_current) > open_level
- 売りシグナルの確認: MACD_current > open_level
7. ポジションを閉じるための追加のフィルタ:
MACD のメインラインの絶対値は、ポジションの決済を確認するためにも使用されます: この値が close_level (ポイント単位) より大きい場合、シグナルが確認されます。 シグナルのクローズの確認条件は次のとおりです。
- 買いポジションを閉じるための確認-MACD_current > close_level
- 売りポジションをクローズするための確認-Abs (MACD_current) > close_level
8. テイクプロフィットで閉じる-ポジションの始値では、TPレベルは、ポイントで指定された始値から固定距離に設定されます。 この値は、InpTakeProfit インプットパラメータで設定されます。
9. ポジション管理
TrailngStopは利益を保護するために使用されます。 ポイントの利益が InpTrailingStop パラメータで指定された値を超えた場合、ストップロスが設定されます。 価格が利益方向に移動し続けている場合、ストップロスは与えられた距離で引きずるべきです。 ストップロスを損失方向に移動することはできません。 保護命令 (テイクプロフィット、ストップロス) のどれも誘発しなければ、ポジションは反対のシグナルによって閉じます。 他のポジションの決済メソッドは利用できません。
要件定義に含まれているもの
トレーディングアイデア
要件定義の最初の部分で一般的な基本概念について説明します。 例: "価格がレジスタンスレベルに2回近づき、そこからロールバックすると、次にレジスタンスが壊れる可能性があります。 " ここでは、レジスタンス/サポートライン、インジケーターと説明書を使用してチャートを追加することができます。 正確な数値または計算アルゴリズムは、アイデアの説明では必要ありません。 したがって、この例では、どのように判断するかを説明する必要はありません。
- レジスタンスレベル、
- レベルブレイクアウト、
- "のような"の概念
初期段階での抽象化は、技術的な詳細ではなく、アイデアに焦点を当てます。 この方法では、戦略ブロック、インジケーター、およびフィルタを交換または組み合わせることによって、トレード戦略の複数の変更を生成することができます。 共通の一般的な考え方では、トレーディングロボットの異なるインプットパラメータを使用します。
次に、アイデアの説明に含まれるすべての用語と概念について説明する必要があります。 トレンドが作戦にとって重要なら、トレンドの方向および強さを定めるためにどのようなインジケーターを使用するのかを定義してください。 定義の数値特性は、エキスパートアドバイザのインプットパラメータの基礎となり、ストラテジーテスタで最適化することができます。 したがって、要件定義の最初のセクションは "トレーディングアイデア " です。
用語と定義
関連する用語と定義を説明するために、要件定義に別のセクションを作成することをお勧めします。 個別の段落で用語を説明します。 トレーディング戦略の重要な概念を強調するために太字のフォントを使用します。 必要に応じて、画像を追加します。 希望の EA のインプットパラメータは斜体で記述することができます。
トレーディングシグナル
要件定義の最も重要なセクションです。 条件の説明を提供します。相場の状態とインジケーター値, 買いトレードが実行されるべき状態を説明します。 買いシグナルの生成に必要な各条件を記述するには、シグナルの出現に影響する数値パラメータを選択します。 たとえば、移動平均のスムージングタイプと期間を使用します。 重要なパラメータは、エキスパートアドバイザのインプットパラメータとして使用します。
買いの反対である場合でも、売り条件の説明を別途提供します。 プログラマが誤解する可能性がある特徴があります。 たとえば、買い条件が "値> 0 " に設定されている場合があります。 "値 < 0 " または "値 < = 0 " のように、売りの正確な条件を示すようにしてください。
その他の条件やフィルタは、トレードシグナルを確認またはキャンセルするためによく使用されます。 インジケーターとセットアップの視覚的な説明を使用して、各種の相場状況にスクリーンショットを使います。 将来的にこのような視覚化は、 EAが一見明らかなシグナルを無視したり、不利な瞬間にトレードを実行する場合、分析するのに役立ちます。
スクリーンショットとフローチャート
スクリーンショットとフローチャートを作成するための無料のプログラムのいずれかを使用することができます。 選択するプログラムとその使用メソッドに関するヒントは、「インジケーターをオーダーするための要件定義の作成方法」に記載されています。 また、この記事では、買いシグナルおよび売りシグナルを生成する矢印インジケーターのオーダー付けに関する推奨事項を示します。 エキスパートアドバイザとは別に実行されているこのようなインジケーターは、リアルタイム操作とビジュアルテストの両方で、トレードロボットの確認と監視が容易になります。
シグナル/オーダー/ポジションの有効期間
トレーディング戦略の2番目の重要なパートは、未処理のポジションを決済し、予約オーダーを削除することです。 トレードシグナルは、時間または特定のイベントの下でキャンセルすることもできます。 したがって、買い/売りポジションをクローズしたり、予約オーダーを削除したり、シグナルをキャンセルしたりする条件を記述する必要があります。
オープンポジションと保留指図の管理
トレード戦略がストップロスやテイクプロフィットによって決済する場合、計算アルゴリズムを記述してください。 必要に応じて、レベルを柔軟に変更するためのトレーリングのメカニズムをリクエストできます。 この場合は、トレーリングストップ条件とアルゴリズムを記述する必要があります。 SL/TP の変更は、足の始値またはすべてのティックで実行することができます。 要件定義で必要なオプションを指定します。 また、オンティックおよびオンバーオプションは、戦略テストに影響します。 記事実際のティックのトレード戦略をテストを必ずお読みください。
要件定義を作成できない場合、どこで取得できるでしょうか?
要件定義が上手くいかない場合やそもそも存在しない場合は、トレードルール自体が存在していないことを意味します。 従って、顧客がトレードシステムと呼ぶものは実際にはアイディアです。 すべてのニュアンスと必要なロジックの説明の欠如は、開発プロセス中に明らかにされます。 開発者は顧客によって提供されなかったものを考えなければならない。
この場合、開発者は自分の責任でトレードロボットをプログラムすることができます。 しかし、すべてにそれをすれば、多くの時間を失う可能性があります。 適切な説明の欠如によってロボットの動作が顧客の期待と異なる場合、Arbitration(仲裁)に送信されることがあります。 委託者は、ロボットの不適切なプログラミングを開発者に訴えることがよくあります。 ただし、仲裁決定は要件定義に基づいて行われます。 フリーランスのルールによると、他の対応は、紛争時に考慮されません:
場合によっては、顧客が明確なトレードルールを持つことがありますが、何らかの理由で要件定義を作成できない場合があります。 問題は、正しい説明、数学の数式、ニューラルネットワークまたは機械プログラミング関連の発行者、およびその他の側面で発生することがあります。 この場合、要件定義の作成をオーダーすることができます。 フリーランスのサービスの "プログラミングのアドバイス " または "他の " セクションで行うことができます。
カテゴリのいずれかを選択し、 "トレードロボットのオーダーのリクエスト仕様の作成 " という名前のオーダーを作成し、タスクの初期コストを指定します。 トレーディングシステムの経験豊富な開発者は、明確でわかりやすいフォームで戦略ルールを記述するのを手助けしてくれるでしょう。 スクリーンショットを使用して、チャート、インジケーター、使用するグラフィカルオブジェクトに基づいてトレードシグナルのセットアップを表示します。
プログラマはトレーディングシステムを理解しようとし、トレーディングアルゴリズムの説明を準備してくれます。 概念を定式化できない場合 (たとえば、 "モメンタム " や "レベルからのリバウンド" など)、プログラマは自分の経験に基づいて準備したアイデアを提案できます。 原則として、変動パラメータを持つシンプルなモデルによって、相場の状況を論理的に (そしてプログラムによって) 記述することができます。 このようなバリエーションは、後でエキスパートアドバイザで最適化する特定のパラメータで表すことができます。
相場は決して繰り返さないので、完璧なパターンは存在しません。 しかし、同様の状況は、ヒストリーの中にあります。 トレードロボットをオーダーするために使用する開発要件を得られることでしょう。
使用に際しての条件
多くの場合、トレーディングシステムには、相場の状態や価格の振る舞いを記述する重要な概念や用語が数多く含まれています。 要件定義で一般的に受け入れられ、シンプルな概念を使用すると考えても、より明確に説明します。 各用語ごとに1つの説明の段落を追加します。
たとえば、ビルウィリアムズによると、上昇トレンドは、すべての3つのアリゲーターラインが下から上に次のオーダーで表示されるときに発生します: 青、赤、緑。
上昇のもう一つの古典的な定義はラリーウィリアムスによって提案された: 各々の新しい天井は前の天井より高く、各新しいたらいは前のたらいより低くない。
さらに、用語の説明でチャートのスクリーンショットを使用できます。必要に応じてプログラマがテキスト内で検索できるように、要件定義の用語に太字のフォントを使用します。
説明の代わりに、他のリソース (web サイト、出版物、フォーラムのトピックなど) へのリンクを使用しないでください。 すべてのポイントについての詳細な説明は、要件定義に直に記入します。 使用されるすべての用語を記述するために時間をかければ、ロボットの開発時間の節約になります。
フリーランスに注文の詳細を書く方法
オーダーを作成するときに、潜在的に開発者が必要なものを理解できるように、トレードのアイデアの一般的な本質を説明します。 トレードシステムのルールや、オーダーの説明のインジケーターの詳細を明らかにしないでください。
説明は次のようになります。
トレンドの反転のエキスパートアドバイザーの開発。 反転シグナルは、価格アクションパターンに基づいて生成されます。 トレンドは ADX、アリゲーター、MACD に基づいて決定されますが、インジケーターの選択は EA のインプットパラメータで利用可能である必要があります。
トレーディング戦略の一般的な考え方
トレードされるシンボル、トレンド識別の詳細、およびその他の情報について言及することができます。 EAの後のトレンドについては、ブレイクアウトまたはその他のメソッドで、ロールバック中にエントリメソッドを指定します。
一般的に、トレード戦略には2つの大きな種類があります: 流れの継続を期待するか、元に戻る動きに期待するかです。 トレードのアイデアは、2つのタイプのいずれかに関連付ける必要があります。 どのようにトレードを開く必要があるか説明します。: ブレイクアウト/ロールバックの確認後など。
シグナルの前の設定の説明
簡単なシグナルは、アルゴリズムを使用して記述できます。 たとえば、人気のあるシンプルなパターンには、 "巻き込む " と "Pin 足 " が含まれます。 しかし、こうしたシンプルなフォーメーションに基づいて収益性の高い戦略を作成することは、実質的に不可能です。 このようなパターンは、トレンドの反転ポイントを決定するために使用されます。 弱気巻き込みパターンのセットアップは、上昇基調の存在です。
したがって、トレードシグナルを記述することに加えて、要件定義で適切な設定を説明する必要があります。
シグナルの説明
特定の条件が満たされると、売買シグナルが出現します。 例えば、価格が移動平均を上向きに越えるとき古典的な買いシグナルが現われます。 このシグナルの説明では、次のパラメータを指定する必要があります。
見た目ほどシンプルではないので、また、フレーズ "価格は移動平均を越える " の説明が必要です。 シグナルはクロスの瞬間に現れることがあります。 あるいは、ロウソクが MA をブレイクするのを待つことを選ぶかもしれません。 これは、エキスパートアドバイザのコード、およびテスト中に使用されるティック生成モードに影響します。
したがって、トレンド、レベル、ブレイクアウト、クロスオーバーと同様のもの概念を説明する必要があります。すなわち、ティック、足、終値との操作の間で選択します。 ストラテジーテスターで最適化する正式な説明と数値パラメータを提供します。 たとえば、トレンド強度はADXインジケーターを使用して測定できますが、一目均衡表はこの目的には適していません。
トレードシステムが必要とする条件やフィルタが多ければ多いほど、ロボットは複雑になります。 また、複雑な戦略には通常、多くのインプットパラメータがあり、最適化の際に大量のパスが必要になる場合があります。 MetaTrader5 ストラテジーテスタは、遺伝的アルゴリズムとMQL5 クラウドネットワークを使用して最適化時間を短縮することができますが、結果として得られるデータの量も膨大になります。
したがって、 EA の開発とデバッグのルールに従うことをお勧めします。
- シグナルの視覚的なテストとデバッグを有効にするために、EA はチャートにラベル/オブジェクトとして新しいシグナルを表示する必要があります。 履歴データのデバッグに加えて、チャート上のシグナルの生成を表示することができます。 複雑なアルゴリズムを理解するのは難しい場合もあります。 シグナルの視覚的な表示は、トレードの開始を監視するのに便利です。
- もう1つの便利なソリューションは、チャートの矢印として買い/売りシグナルを表示するインジケーターの作成を開始することです。 2つのアプリケーションを個別にデバッグでき、より便利なソリューションです。 ロボットトレードとインジケータープロットをしましょう。 この場合、エキスパートアドバイザコードには必要な関数のみが含まれます。 さらに、実行されたトレードよりも多くのシグナルが存在する可能性があります。 たとえば、EA は買いシグナルを受け取り、相場に参入します。 アルゴリズムに従って、他の買いシグナルはもはや確認されない。 別のインジケーターを使用している場合は、開いているポジションの有無に関係なく、すべての買いシグナルが表示されます。
- リクエストの仕様では、売買シグナルについて個別の説明を提供するだけでなく、個別にデバッグすることをお勧めします。 売買シグナルは頻繁に相互に、すなわち買いのポジションがあるとき、すべての売りシグナルは無視される (売りのシグナルが買いのポジションを閉めるために使用されなければ)。 売買シグナルを個別にテストすることで、基になるロジックの正当性を純粋な形で確認することができます。
また、買いと売りの戦略のパラメータを個別に最適化することができ、単一のトレーディングロボットのアルゴリズムを組み合わせます。 このように、最適なパラメータを検索すると、より少ないエラーで高速に実行されます。 しかし、この場合には、さらにインジケーターとEAの作成に支払う必要があります。 しかし、良いトレードアイデアにはそれだけの価値があるのではないでしょうか。
シグナルの有効期間
一部のトレーディングシステムでは、シグナルが出現した直後にポジションが開かれません。 このようなシステムは、追加のシグナルによる確認が必要です。 例えば、レジスタンスレベルのブレイクアウトの後で、よりよい条件の下で相場に入るためにブレイクレベルへの価格のリターンまで待っていたいと思う場合もあります。 ここで時間パラメータを定義する必要があります: レベルブレイクアウトシグナルが有効になる期間。 システムは5つの足を待機するか、またはトレードセッションが終了するまで、シグナルが取り消されます。
有効期間パラメータを追加して追加のフィルタを使用し、トレーディングシステムの品質を向上させることができます。
オーダーの配置とポジションの取得
トレード・オーダーを送信する関数を開発する場合は、事前に追加関数を提供することができます。 たとえば、トレードと最適化の結果をさらに分析するために、さまざまなMagicNumbersとコメントを使用できます。 追加の分析を可能にするエントリの時間と日、トレードパターン番号とその他の詳細に基づいてマジックナンバーを使用することができます。 したがって、1つのEAで複数のトレード戦略を実装し、トレードロボットの最良のパラメータを見つけるために、すべてを最適化することができます。 このようなリクエストをする場合は、各パターン/設定/シグナルのマジックナンバー計算アルゴリズムを記述します。
トレードオーダーが正常に実行されるとは限りません。 最初の試行中にポジションを開けたり閉じたりできない場合は、状況を指定する必要があります。 EA はこのような状況をどう処理する必要があるでしょうか。: 一時ストップを行うか、新しいティックを待つか? 何回までの試行が許可されるでしょうか? どのような情報をログに書き込む必要があるでしょうか。 どのような形式で情報を書くべきでしょうか? 通知は、トレーダーに送信する必要がありますか? DDoS 攻撃のような状況を回避するためにメッセージを送信する頻度はどれくらいにしたらいいでしょうか。
トレード履歴の迅速な分析のトレードオーダーにコメントを使用してください。 場合によっては、トレードサーバーはこのフィールドに特定のコメントを書き込みます。 したがって、ロボットは、さらにトレード操作の独自の毎日のログを書き込むことができます。
もしトレード戦略にストップロスやテイクプロフィットがあるなら、計算やメソッドに関するアルゴリズムを記述してください。 たとえば、[ストップロス] は、利益の方向に指定したポイント数だけ価格が移動した場合にのみ設定できます。 成功したポジションオープン後に SL と TP を設定する場合は、トレードオーダーを送信した直後、または次のティックで、ポジションの始値を確認する手順を説明します。
トレーディングポジション/オーダーの管理
トレーダーの基本的なルール: 利益を実行し、損失を削減しましょう。 アルゴリズムでは、保守的なストップロスを設定することにより利益獲得の潜在性を制限することがない、ということを意味します。
ストップオーダーサイズはトレード結果に大きく影響します。 多くの場合、トレーダーは利益を最大化するために最適な SL/TP の距離を見つけることを試みるでしょう。 相場のボラティリティ、トレンドの方向性、サポート/レジスタンスレベルを考慮した距離計算アルゴリズムを探してみてください。
適切な SL/TP のアイデアを見つけるために既存のトレーディングシステムを勉強することができます。 多くのプログラマには、アイデアに基づいてトレードロボットを作成するときに使用することができる既製のライブラリがあります。
要件定義には、次の点を考慮して説明します。
- ストップロス、テイクプロフィット、計算アルゴリアムを使う
- トレーリングストップの使用、トリガする条件、ステップ計算アルゴリズム;
- 予約オーダーがエントリに使用されている場合は、適切なアルゴリズムを記述します。
- 特定の損益レベルに到達した時点でポジションを閉じるために、オープンポジションの変動損益を監視する必要があります。
- etc.
オーダーのキャンセルとポジションの決済
別のポジションおよびオーダーの管理メソッドは時間および反対のシグナルに基づいています。 次のような追加のクロージャーと削除オプションについて説明します。
- 変動損益値に基づいています。
- 現在の予約オーダーの開始レベルからの指定された距離で価格が移動する場合 (機会が逃したことを意味する可能性があります);
- 指定された時間に;
- 足の指定された数の後;
- 指定された時間間隔の後;
- 反対のシグナルの場合;
- 良好なセットアップ/パターンが消える場合。
オーダーロットの計算
一部のトレーダーは、ロボットの作成の最初の段階でトレーディングロットの計算アルゴリズムがあります。 ただし、追加のインプットパラメータが EA 最適化中に履歴ベースのオーバーフィット回避につながる可能性があるため、この段階でロットを計算するための資金管理アルゴリズムを含めることはお勧めしません。
固定ロットを使用して、最初の EA バージョンをテストします。 履歴データと数ヶ月の実際のトレードを使用した前方テスト後、アルゴリズムの弱点と強みを明らかにすることができます。その後、資金の管理メソッドを追加することができます
ここに、ポジションのロットサイズを計算するアプローチがあります:
- 利益または損失に関係なく固定されたボリューム;
- 残高またはエクイティのサイズに応じたボリューム;
- 利益/損失に基づいたボリューム;
- 最後の N のトレードに基づいて (種々のマーチンゲールおよび反マーチンゲール);
- 指定されたストップロスのリスク% に応じて;
- その他のリスクベースの計算、ヴィンスメソッドなど。
いずれにせよ、EAにロット計算アルゴリズムを追加する前に、トレーディングシステムは、ランダムなトレード上の優位性を持っていることを確認してください。 そうでなければ自身を騙すだけでしょう。 負けたシステムは資金管理メソッドを使っても、勝てるシステムにはなれない。
トレードエラーと環境状態の処理
トレードロボットは24時間稼働する自律型プログラムです。 したがって、その動作を制御するメカニズムを提供します。 EAのアクションは、 Print ()関数を使用してエキスパートジャーナルに書き込むことができます。 一般的に、実行するためのオーダーを送信する前に、シグナル、パターンと設定、現在の相場価格とトレードのリクエストパラメータの出現を記録することをお勧めします。
トレードリクエストの実行が失敗した場合は、その結果もログに書き込む必要があります。 トレードサーバーのリターンコードを分析して、障害の原因を理解し、修正します。 要件定義では、次の事項について説明します。
- EA がジャーナルにメッセージを書き込む必要がある状況。
- メッセージに含めるパラメータを設定します。
- 時間、数字、セパレータなどの指定に必要なエントリー形式
トレードオーダーと実行結果の詳細なログは、迅速にトレードのエラーを識別し、資金を節約することができます。
初心者のトレーダーにとって重要なポイントは多くの場合、ターミナルの再起動とネット接続の確保です。 このような場合、メッセージング関数または電子メールを介して通知の可能性をリクエストすることがあります。
足のオープンと足のトレードの差
各価格が変わると、ロボットはOnTick ()関数によってNewTickイベントの処理を開始します。 足の有効期間中に多くのティックを受け取ることができるので、EA は各足でロジックを実行します。 足の始値でのみシグナルを生成する場合は、次のことを決める必要があります:
- 最初のテイックインジケーターの値を取得し、次回以降のティックをスキップし、どのようにトレードのシグナルを計算するか
- 最初のティックで必要なアクションを実行できなかった場合の対処。
シンプルな例を分析してみましょう: 移動平均のクロスにあるシグナル。 EA が各ティックでシグナルをチェックすると、シグナルが表示されて消えてしまう状況が生じることがあります。 その結果、EA は1つの足の間に何度かポジションを開閉します。 オンライントレード中に問題を引き起こす可能性があります。
このような問題を回避するには、"すべてのティック " または "実際のティックに基づいてすべてのティック" モードでエキスパートアドバイザをテストします。 1つの足内で同様の操作が多数表示された場合は、ロボットのコードを修正します。 EAと使用済みインジケーターのビジュアルテストを実行して、チャート上の異なる履歴間隔で確認するようにしてください。
ティック/スキャルピング戦略
初心者の場合は、新しい足の始値で動作するシステムを選択します。 このような戦略は、開発とデバッグが容易になりますが、新しい足イベントの適切な処理を提供する必要があります。 足の始値でEAのトレードの正しさを確認することができます: "オープンプライスのみ " のテスト結果は、 "すべてのティック "/ "リアルタイムチック " モードに基づいてすべてのティックの結果と一致する必要があります。
トレーディングシステムは、足内で動作するより困難です。 継続的なティックフローの分析に基づいた戦略のコードを作成、デバッグ、および最適化するために必要となるすべての手順の説明が含まれているMetaTrader5 でトレード戦略を迅速に開発およびデバッグする方法の記事を読むことをお勧めします。
スキャルピングロボットを開発するとき、そのような戦略は、非常に敏感であることに注意してください。, コミッション, ネットワークの遅延, ヒストリーの質とパフォーマンスの速度. トレード条件の悪化は、このような戦略を "殺す" ことができます。
すぐに相場に参入し、小さな保証利益をキャッチしようとするスキャルピング戦略と混同しないでください。( いわゆる pipsing 戦略) Pipsing 戦略は、ピップをターゲットにすることができますし、数十数百のドローダウンを容認します。 このようなシステムの開発者は、価格が不利な方向に50-100-300 ポイント行くよりもオープンポジションの方向にいく可能性が高いと考えています。 最適化の結果として、トレードの勝利の 90-99% で、ヒストリー上において印象的な結果を達成することができます。 実際のアカウントでこのロボットを実行すると、戦略はしばらくの間、予想される利益を示すことができます。 しかし、相場は鋭い動きをすることがあり、すべての利益は失われます。
グリッド、マーチンマーチンゲール、これらの技術のダークサイド
時には、アルゴリズムトレーダーは、1つの方向にオーダー/ポジションの数を増やすことによって結果を改善しようとし、価格レベル/ドローダウン/損失 (技術的なソリューション) に応じて、シグナルの品質を向上させない多くの値を操作します (戦略的ソリューション)。
オーダーグリッド、 マーチンゲール/反マーチンゲール要素と失われたポジション平均化技術は、コードを複雑にし、プログラムエラーの可能性を高めます。 また、このような追加パラメータはオーバーフィッティングのリスクを増大させます。 そのようなメソッドの使用はトレードシステムの安定性や収益性を増加させず、崩壊を遅らせることができます。
このようなトリックを使用する代わりに、別の方法を選択することをお勧めします。
- まず、1つのシンボルに異なる相関トレーディングシステムのポートフォリオを作成します。
- その後、徐々に異なるツールのポートフォリオのセットを作成します。
シンプルなトレーディングシステムのポートフォリオは、複数の一式インプットパラメータを持つ1つの複雑なシステムよりも、相場の変化に対してより耐性があります。
開発者の選択の重要な側面
さて、EAの形でトレーディングシステムを実装しようとし、フリーランスにオーダーを作成し、異なる開発者からの申し込みを受け取りました。 どうすればコストと品質の面で最適な開発者を選択することができるでしょうか?
経験豊富な開発者は、以前に開発したシステムやトレーディングシステムのバリエーションの複雑さについては教えてくれませんが、要件定義について質問をします。 つまり、彼は自身を印象付けようとはしないでしょう。 プロは時間を大切にするので、通常はトレードの性質やプログラミングの難しさについての哲学的な無駄話はしないでしょう。
開発者は、提供された短い説明に加えて、詳細をリクエストすることがあります。 オーダーが一般に明確なら、プログラマーはオーダーの費用および時間についての情報を提供します。
責任を負う開発者は、要件定義に不明確なポイントを指します。 もしオーダーの詳細が欠けている場合は、後でプログラマに詳細を説明するか、コンサルティングサービスを利用するか、時間とお金のコストを増大させるかになります。
良いプログラマは時間を高く評価するので、明確かつ徹底的に準備された要件定義でタスクを開始するために、不明確な点を明らかにします。
プログラマができないこと
あなたのシステムに基づいたトレードロボットがテスト中に損失を示すことが起こるかもしれません。 原則として、委託者が手動でシステムを確認できる期間が短いためです。 ストラテジーテスターを使用すると、任意のヒストリーのトレード結果を得ることができます。 この場合は何ができますか? プログラマは、収益性のない戦略から収益性の高い戦略を作ることはできませんが、彼はエントリの品質を向上させるためのアイデアを提案することができます。 たとえば、あるトレンド、ボリューム、またはその他のフィルタを追加して、ダマシシグナルを避けることができます。
また、あなたの戦略は、パラメータを変えることにより、より現在の相場の状態に適する可能性があります。 EA を年単位で最適化して、ボラティリティ、その他の要因に関する最適な値の依存性を調査します。 これは、弱点やシステムの制限を識別するのに役立ちます。 しかし、開発者はプログラムを担当するのみであり、アナリストではないため、これらは自分で行う必要があります。
最後のパートはプログラマのミスです。 エラーのないプログラムを開発することはほとんど不可能です。 正しいアルゴリズムに間違ったコードが記述されている場合や、論理エラーが発生した場合に、コードエラーが含まれる場合があります。 どちらの場合でも、自分で見つける必要があります。
- トレードサーバーのリターンコードとランタイムエラーを理解する必要があります。
- 各重要な操作の結果を処理し、エラーコードをログに記録する必要があることを、要件定義で示すようにしてください。 さらに、トレードリクエストの送信、ストップロスの計算、その他の操作などの重要な操作を列挙することもできます。
- このようなメッセージは、定義済みのマクロ置換を使用して、間違った動作の理由と正確なロケーションを見つけるのに役立ちます。
これらの3つのルールは、状況を分析し、開発者と意思疎通するのに役立ちます。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/4368
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 トレードロボットをオーダーするための要件定義を作成する方法 はパブリッシュされました:
作者: MetaQuotes Software Corp.