ここから本文です

MT4で稼働するEAを作成しております。 質問なんですが、私が作成いするEAでエント...

mad********さん

2014/6/1923:57:17

MT4で稼働するEAを作成しております。
質問なんですが、私が作成いするEAでエントリーを繰り返す症状が
あります。

作成しているのはトレンドフォローのEAで
バックテストを行うと、ある一定の日などでエントリーを
繰り返し決済しない症状があります。

そこで、コードを記載するので詳しい方、ご教授いただけないでしょうか??
この内容で収支をプラスにしたいなどは思っておりません。
ただ、他のEAを作成しても同じ所で躓くので中々先に進めず困っています。
どうか、なにとぞよろしくお願いします。

extern double Lots = 0.1; //ロット
extern int Slip = 10; //スリップページ
extern string Comments ="3本の矢"; //コメント

//ボリバン・RSIパラメーター
extern int BandsPeriod = 20; //ボリバン期間
extern int BandsShift = 0;
extern double BandsDeviations = 2.0;
extern int RSIPeriod = 12; //RSI期間
extern int Slow_H4 = 240; //4時間足4*60=240

int Ticket_L = 0;
int Ticket_S = 0;
int Exit_L = 0;
int Exit_S = 0;
double En_bar ;
double Ex_bar ;

int start()
{
double RSI_H4 = iCustom(NULL,PERIOD_H4,"RSI",14,0,1); //1本前のほうがいいかも
double RSI_H1 = iCustom(NULL,PERIOD_H1,"RSI",14,0,1);
double RSI_M15 = iCustom(NULL,PERIOD_M15,"RSI",14,0,1);
double RSI_M5 = iCustom(NULL,PERIOD_M5,"RSI",14,0,1);
double BB_Center_M5 = iCustom(NULL,PERIOD_M5,"Bands",BandsPeriod,BandsShift,BandsDeviations,0,0);
double BB_Upper_M5 = iCustom(NULL,PERIOD_M5,"Bands",BandsPeriod,BandsShift,BandsDeviations,1,0);
double BB_Lower_M5 = iCustom(NULL,PERIOD_M5,"Bands",BandsPeriod,BandsShift,BandsDeviations,2,0);
double BB_Center_M5_1 =iCustom(NULL,PERIOD_M5,"Bands",BandsPeriod,BandsShift,BandsDeviations,0,1);


//買いエントリールール
if(Ex_bar != Bars && En_bar != Bars && (RSI_H4 >= 50 && RSI_H1 >= 50 && RSI_M15 >= 50 && RSI_M5 >= 50 &&
Low[1] <= BB_Center_M5_1 && Low[0] >= BB_Center_M5 )
&&(Ticket_L == 0 || Ticket_L == -1 )
&&(Ticket_S == 0 || Ticket_S == -1 ))
{
Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,4545,0,Red);
En_bar = Bars;
}

//売りエントリールール
if(Ex_bar != Bars && En_bar != Bars && (RSI_H4 <= 50 && RSI_H1 <= 50 && RSI_M15 <= 50 && RSI_M5 <= 50 &&
High[1] >= BB_Center_M5_1 && High[0] <= BB_Center_M5 )
&&(Ticket_S == 0 || Ticket_S == -1 )
&&(Ticket_L == 0 || Ticket_L == -1 ))
{
Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,4545,0,Blue);
En_bar = Bars;
}

//買い決済(エグジット)
if(En_bar != Bars && High[1] >= BB_Upper_M5
&&(Ticket_L != 0 || Ticket_L != -1))
{
Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
Ex_bar = Bars;
}
if(Exit_L == 1)
{
Ticket_L = 0;
}

//売り決済(エグジット)
if(En_bar != Bars && Low[1] <= BB_Lower_M5
&&(Ticket_S != 0 || Ticket_S != -1))
{
Exit_S = OrderClose(Ticket_S,Lots,Bid,Slip,Red);
Ex_bar = Bars;
}
if(Exit_S == 1)
{
Ticket_S = 0;
}
return(0);
}
//+------------------------------------------------------------------+

閲覧数:
114
回答数:
2

違反報告

ベストアンサーに選ばれた回答

k_y********さん

2014/6/2018:09:40

OrderSelectあたりから勉強をしたほうがよさそうです。
OrderSelec MT4で検索すればたぶんいいところが出てきます。

質問した人からのコメント

2014/6/25 20:32:50

降参 ご指摘ありがとうございます。

早速勉強します。

ベストアンサー以外の回答

1〜1件/1件中

oka********さん

2014/6/2009:29:35

例外処理が全く入っていないし、今までにこんなシンプルな記述を始めて見ました。

ちょっと直すとかってレベルではなさそうですね。

無論最低限は動作するでしょうが。。。。

参考書に例文が載ってるので最低限のベースは教科書どうりに作り直してみては?

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる