私がEAを開発する時には、
スケジューリングを立てて計画的に作業を進めているわけではありません。
納期が決められたお客さん相手の仕事ではなく、
あくまでも自分の為だけの仕事(趣味?)なので、
時間の合間を縫ってプログラミングする事が多いです。
EAのアイデア自体は、
普段、チャートを見ている時だったり、
布団に寝ていてチャートを思い出している時に
何となく
「こんな条件でエントリーして、
こんな条件でクローズしたら優位性があるかな?」
というアイデアが浮かんできます。
それをメモ帳か何かに書き留めておいて、
後日、簡単な要件定義や基本設計、
いわゆるロジックの概要をまとめておきます。
この段階で、
“自分がこれから開発するEAは、どんな立ち振る舞いをするのか”
その具体的なイメージを掴んておく必要があります。
チャートを頭の中に思い描き、
エントリー場面とクローズ場面を想定します。
そして、それらを実現するには
どのようなテクニカル指標を用いれば良いのかを想定します。
こうしたイメージとそれに伴う作業予測は
EA開発者のそれまでのトレード経歴に左右されます。
なので、プログラミングが得意でもトレードが苦手な人には
このような”想定”の部分が苦手、というか不得手になるでしょう。
そしてその後、詳細設計からプログラミングを行い、
出来上がったプロトタイプのEAを過去10年間のバックテストにかけます。
もしもバックテストの結果、
その収支グラフが明らかな右肩下がりになっていたら、
私の思い違いだったと反省して、そのEAの開発は諦めます。
しかし、明らかな右肩下がりでなければ、
つまり、たとえ 期待値<1 であっても、
それなりに収支グラフが上下動する形跡が見られるようなら
一応、開発は続けてみます。
パラメーターを調節すれば、
期待値>1に変貌する可能性もあるわけですからね。
そして、ある程度開発が進み、期待値>1が実現すると、
バックテストの結果から、
過去チャートでのエントリー位置とクローズを確かめます。
すると、
自分がイメージしていたエントリー位置でないトレードや
自分がイメージしていたクローズ位置でないトレードが
幾つか含まれている事に気づきます。
やはり、実際にプログラミングしてみて、
そのロジックを過去チャートにキッチリ当てはめていくと、
どうしても自分が想定していた挙動でないトレードも含まれてしまうものです。
分かりやすい例えで言うと、
2つの移動平均線のゴールデンクロスでロングエントリーし、
デッドクロスでクローズするロジックだとしましょう
(これが長期的に有効かどうかは別問題ですよ)
この場合、私の中のイメージでは
以下のような感じのエントリーとクローズを想定します。
しかし実際のチャートでは、
以下のようなエントリーとクローズも含まれてしまいます。
これは、自分のイメージでは想定していないトレーディングなので、
フィルターをかけて取り除くようにします。
こうして自分のイメージのトレーディングに近づけていきます。
しかし、、、
ここで重要なのは、何から何までフィルターをかけて
自分にとって都合の悪いトレードを全て排除しようとしない事です。
とにかく、勝率を上げようとして、
負けトレードの排除ばかりを優先してしまうと、
総取引回数が減ってしまいますし、
そもそも、そのフィルター自体に優位性があるのかどうかも
判断できなくなってしまいます。
あくまでも、要件定義、基本設計の段階で
自分が想定していたトレーディングと違っているものだけを
取り除くようにしないといけません。
ルールに則った負けトレードは受け入れ、
勝ち負けのトータルでプラスになっている事が重要です。
そうして、必要なフィルターのみを追加して、
過去10年間のバックテストを行い、
期待値>1である事が分かれば、
その時点で初めてフォワードテストへ移行できるようになります。