もう一つ ① ロスカットの価格設定の不具合 の解決に取り組みたいと思います。
どういう状況か、もう一回思い出しますが。
画像の使い回しでスミマセン。
明らかに損切り価格の指定がおかしいのは明白です。
どうやら 「過去○本のバーの最安値を取得する」 が全然役に立ってない気がする(仮定)。。。。
なので、下記を追加して取得してみます。
for (int i = 1; i <= StopLossCriteria; i++) {
if (MinPrice < Low[i]) MinPrice = Low[i];
Print("CalcStopLoss[",i,"/",StopLossCriteria,"] MinPrice=",MinPrice," Low=",Low[i]);
}
この結果から買い取引が発生した時間帯の出力内容を見てみると。。。
あれ、、、全然、最低価格を更新してくれてない。。。
これは完全にケアレスミスの匂いがする。。。
for (int i = 1; i <= StopLossCriteria; i++) {
if (MinPrice < Low[i]) MinPrice = Low[i];
}orz
完全にケアレスミスですね。逆だ、逆!!
というわけで、修正しました。
まず買いの最安値を算出するロジック。
// 過去の最安値を算出する
for (int i = 1; i <= StopLossCriteria; i++) {
if (MinPrice > Low[i]) MinPrice = Low[i];
}まず売りの最安値を算出するロジック。
// 過去の最高値を算出する
for (int i = 1; i <= StopLossCriteria; i++) {
if (MinPrice < High[i]) MinPrice = High[i];
}そして、前回の「スプレッドの考慮忘れてた」という凡ミスを取り返すロジックを組み入れつつ、
この調査の過程で見つけた不具合を修正します。
double CheckStopLossPrice(int MarketTrend) {
(略)
double Spread = MarketInfo(Symbol(),MODE_SPREAD); // スプレッド
(略)
MinPrice = Low[1];
// 過去の最安値を算出する
for (int i = 2; i <= StopLossCriteria; i++) {
if (MinPrice > Low[i]) MinPrice = Low[i];
}
// 損切り価格の算出(10pips余裕を持たせる)
if (MinPrice < Ask) //現在値が最安値の場合を除く
StopLossPrice = MinPrice - Spread - 0.1;
} else if (MarketTrend == 2) {
// 下げ相場=売りポジションの場合 ----------
// 過去の最高値を算出する
MinPrice = High[1];
for (int i = 2; i <= StopLossCriteria; i++) {
if (MinPrice < High[i]) MinPrice = High[i];
}
// 損切り価格の算出(10pips余裕を持たせる)
if (MinPrice > Bid) //現在値が最高値の場合を除く
StopLossPrice = MinPrice + Spread + 0.1;いや、これほどまでに凡ミスをひけらかすブログもどうかと思いますが


これでバックテストくらいは少しは儲けが出れば良いのですが。。。
おぉ!利益が出てる!!
思ったロジックで1年分のバックテストを実行して利益が出てるのは感動モノです。
とはいえ、まだ目標利益には一桁足りません。
でも、ドローダウンが大きいのは、逆に可能性を感じます!
今後は利益が出にくい傾向の取引をしないようなロジック修正をしたいと思います。
【修正後のEAソースコード】
GitHub: sysfxtry1/ea01/ea01.mq4


