こんにちは、
本日は、私たちのチームが事例として取り組んだ、EA Diamond Firmsという投資ファンド向けのプロダクトの制作過程をご紹介したいと思います。
あなたは開発者、または自分で EA を作成したいと考えている初心者かもしれません。では、収益性の高い EA を作成するにはどうすればよいでしょうか?また、それが収益性があることを確認するにはどうすればよいでしょうか? EA を作成する正しいプロセスは何ですか?
この記事では、私の視点を共有したいと思います。
注意してください: 私はこの知識が正しいか間違っているかを述べているわけではありません。私たちのプロセスを紹介したいと思います。
始めましょう。
1. EA アイデアの生成
あなたが経験豊富なトレーダーであろうと、市場の初心者であろうと、おそらく偉大な投資家ニコラス・ダーバスの戦略について聞いたことがあるでしょう。彼はブレイクアウト戦略を使って市場で大金を稼ぎました。
私もこの考えに基づいてトレードをし、このEAを開発しました。 EA は以下の 8 つの状況に基づいて取引を実行します。
2. プログラミング
2.1. 高値と安値を検出して、主要な価格レベルの領域を特定します。
int IndexHigh = findPeak(MODE_HIGH, lookBack, startLook);
int IndexLow = findPeak(MODE_LOW, lookBack, startLook);
double highPrice = iHigh(_Symbol,PERIOD_CURRENT,indexHigh);
double lowPrice = iLow(_Symbol,PERIOD_CURRENT,indexLow);
2.2. highPrice と lowPrice を現在のピークとボトムと比較して、キー レベルの正確性の確率を評価します。
if (highPrice != currentHigh && highPrice!=0) {
現在の高値 = 高価格;
ObjectDelete(0, "KL アップ");
ObjectCreate(0,"KL Up",OBJ_TREND,0, iTime(_Symbol,Period(),indexHigh),iHigh(_Symbol,Period(),indexHigh),iTime(_Symbol,Period(),indexHigh-1),iHigh( _Symbol,Period(),indexHigh));
ObjectSetInteger(0,"KL アップ", OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(0,"KL アップ", OBJPROP_WIDTH, 5);
}
if (lowPrice != currentLow && lowPrice!=0) {
現在の安値 = 低価格;
ObjectDelete(0, "KL ダウン");
ObjectCreate(0,"KL Down",OBJ_TREND,0, iTime(_Symbol,Period(),indexLow),iLow(_Symbol,Period(),indexLow),iTime(_Symbol,Period(),indexLow-1),iLow( _Symbol,Period(),indexLow) );
ObjectSetInteger(0,"KL ダウン", OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(0,"KL ダウン", OBJPROP_WIDTH, 5);
}
2.3. 買い/売りストップ注文を実行して、市場のブレイクアウトの動きを捉えます。
if (buySignal) {
// currentHigh で買いストップを開く
_order.DeleteOrder(OP_BUYSTOP);
int ticket = OpenBuy(.GetHigh() + 3 * ポイント);
}
if (販売シグナル) {
// currentLow で売りストップをオープンする
_order.DeleteOrder(OP_SELLSTOP);
int ticket = OpenSell(GetLow() - 3 * ポイント);
}
注: キー レベルが変更されると、新しいキー レベルに基づいて新しい取引が開始され、古いキー レベルでの取引が削除されます。
確実にブレイクアウトするために、エントリーポイントから3〜5ポイント離れた位置に買い/売りストップを設定します。
一度にオープンできる取引が 1 つだけになるように、マーク付けの目的で変数を使用します。
2.4.さらに、両面の偽装を避けるために、以前に取引を開始していない場合にのみ、取引を確認して開始します。この場合、EA は 120 分以内に重複した取引を開始しません。
// このシンボルの最後の取引を取得します
COrder* order = _order.GetLastClosedOrder();
if (order != NULL && (buySignal || sellSignal)) {
// はい、この最後の取引が終了してからの経過分数を確認します
double timeElapsed =(double)(TimeCurrent() - order.CloseTime);
経過時間 /= 60.0;
注文を削除します。
int minssinceLastTrade = (int)timeElapsed;
// 前回の取引から十分な時間が経過しましたか?
if (minsSinceLastTrade < 120) {
// いいえ、その場合は戻ります
戻る;
}
}
上記は、EA の完全なコア アルゴリズム コードです。
3. EA Diamond Firms の各付属機能または完成品の補足コードについて説明します。
_stage: 1 ~ 5 の 5 つのステージがあり、EA はこのステージを使用してキー レベルを検出します。サイドウェイゾーンを検出したり、キーレベルを見つけたりするにはさまざまな方法や戦略があるため、使用する各戦略はステージと呼ばれます。
_timefiler: EA は、このセクションで設定された GMT 時間に基づいて取引を開始します。お好みに合わせて時間を調整できます。経験がない場合は、デフォルト設定を使用できます。
_orders: 取引ごとのリスクを管理します。固定ロット、固定金額、固定%残高の3種類からお選びいただけます。このEAはプロップファームに適したように設計されているため、固定マネーまたは固定%残高を使用することをお勧めします。デフォルトのバックテスト結果は取引ごとに 0.5% ですが、これは長期に適していると思います。
_news: 影響度の高い、中程度、および低いニュース イベントをフィルタリングします。 EA はすべての取引を無効にし、指定された時間内は取引を実行しません。デフォルト設定では、影響の大きいニュースイベントの前後 30 分間は取引を避けるようになっています。
_smartmoney: EA は数学的な確率公式に基づいて資金を管理し、アカウントが毎週 1 ~ 2% 増加するように支援します。
_ファンド管理: EA は取引を管理し、投資ファンドが指定する 1 日のドローダウンまたは最大損失制限に違反した場合に新しい取引が開始されるのを防ぎます。これにより、現在の投資ファンドの基準に従ってアカウントの安全性が確保されます。デフォルト設定は、アカウントの 1 日あたりの損失制限が 5%、最大損失制限が 8% です。この機能は、アカウントを健全に保ち、アカウントが消去されたり、過剰な損失が発生したりするのを防ぐのに役立ちます。
4. バックテスト
コードが完成したら、システムのバックテスト段階に進みます。なぜなら、どのような取引戦略であっても、勝ち続けることもあれば、負け続けることもあるからです。これは現在の世界のどのシステムにとっても避けられません。ただし、トレーディング戦略が長期的にプラスの利益を生み出した場合、それは市場に勝ったことを意味します。
正確性を確保するために、システムは 2008 年から現在までの実データに対してバックテストを実行します。長期的な視点を確保し、特定の期間や運に依存することを避けるため、合計データは 15 年間をカバーしています。
バックテストはデフォルトのパラメータで実行されます。
5. フォワードテスト
バックテストを行って利益を生み出すだけでは、EA が良好なパフォーマンスを発揮することは保証されません。その有効性を検証するには、リアルタイム データを使用したフォワード テストを受けることが不可欠です。
EA はフォワード テストを受けており、結果はバックテストとほぼ同じであり、99.99% の類似性があります。これは、EA の長期的な効率性を示しています。
勝率は 88% で、バックテスト データと完全に一致します。市場が芳しくなく、EA がドローダウンを経験する場合があります。相場が良いときは、EA が 1 か月以上連続して勝ちトレードを生み出すこともあります。
現在、統計に基づくと、EA はプラスの利益を生み出しており、それは私たちが望んでいることです。すべてのデータはバックテスト データと完全に一致しています。
6.要約する
以上、商品の紹介と紹介をさせていただきました。この記事が、市場で成功する製品のコーディングとテストのプロセスを理解するのに役立つことを願っています。
リスク警告: 取引には常にリスクがないわけではなく、過去のデータは将来の 100% の確実性を保証するものではありません。資本の使い方とリスク管理を慎重に検討してください。