I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification iT_InOut = IN_OUT; //Itrend usage => In & Out RSI_InOut = IN_; //RSI usage =>only IN MFI_InOut = OUT_; //MFI usage =>only OUT //
//this is the complete sequence IF I USE all signals in+out //only to show the completly sequence (I will not use it) m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]); // The green is growing and more than red, RSI is growing, MFI is growing m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]); // The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance {
if (!iT_InOut==OUT_) //Itrend (only options with IN) { m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]); m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]); }
if (!RSI_InOut==OUT_) //RSI (only options with IN) { m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]); m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]); }
if (!MFI_InOut==OUT_) //MFI (only options with IN) { m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]); m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]); } }
///We have opened order it's EXIT else { //Itrend (only options with EXIT) if (!iT_InOut==IN_) { m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]); m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]); } //RSI (only options with EXIT) if (!RSI_InOut==IN_) { m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]); m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]); } //MFI (only options with EXIT) if (!MFI_InOut==IN_) { m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]); m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]); } }
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification iT_InOut = IN_OUT; //Itrend usage => In & Out RSI_InOut = IN_; //RSI usage =>only IN MFI_InOut = OUT_; //MFI usage =>only OUT //
//this is the complete sequence IF I USE all signals in+out //only to show the completly sequence (I will not use it) m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]); // The green is growing and more than red, RSI is growing, MFI is growing m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]); // The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance {
if (!iT_InOut==OUT_) //Itrend (only options with IN) { m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]); m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]); }
if (!RSI_InOut==OUT_) //RSI (only options with IN) { m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]); m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]); }
if (!MFI_InOut==OUT_) //MFI (only options with IN) { m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]); m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]); } }
///We have opened order it's EXIT else { //Itrend (only options with EXIT) if (!iT_InOut==IN_) { m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]); m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]); } //RSI (only options with EXIT) if (!RSI_InOut==IN_) { m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]); m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]); } //MFI (only options with EXIT) if (!MFI_InOut==IN_) { m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]); m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]); } }
//---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, counter; double fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous; double RSInow; double Range, AvgRange;
int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,barsBack);
for(i = limit; i>=0; i--) {
counter=i; Range=0; AvgRange=0; for (counter=i ;counter<=i+9;counter++) { AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]); } Range=AvgRange/10;
こんにちは、Mladenです。
MT5でこのコードを書こうとしているのですが、正しい実装を使用していないような気がします。
私のアイデアは、より多くの指標を使用することです、私に光を与えてください... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
こんにちは、Mladenです。
MT5でこのコードを書こうとしているのですが、正しい実装を使用していないような気がします。
私のアイデアは、より多くの指標を使用することです、私に光を与えてください... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
こんにちは、皆さん。
私はwaddah attarスキャルピングインジケーターを使用してエキスパートを構築しています。
バックテストのスクリーンショットにあるように、緑のバーで買いが入り、赤いバーでも同じです。私は色の変化ごとに1つの取引だけをしたいです。
私は何をしたいです。
INDICATOR TURNS GREEN ---> it opens a buy ---> the buy closes ---> INDICATOR TURNS RED ---> it opens a sell ---> the sell closes ---> repeat
私は色の変化ごとに1つの取引だけが必要です。
以下は私のコードです。(ショートも同じ)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
誰か簡単な解決策を考えてください。
どうもありがとうございました。
こんにちは、皆さん。
私はwaddah attarスキャルピングインジケーターを使用してエキスパートを構築しています。
バックテストのスクリーンショットにあるように、緑のバーで買いが入り、赤いバーでも同じです。私は色の変化ごとに1つの取引だけをしたいです。
私は何をしたいです。
INDICATOR TURNS GREEN ---> it opens a buy ---> the buy closes ---> INDICATOR TURNS RED ---> it opens a sell ---> the sell closes ---> repeat
私は色の変化ごとに1つの取引だけが必要です。
以下は私のコードです。(ショートも同じ)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
誰か簡単な解決策を考えてください。
どうもありがとうございました。
条件を次のように変更します。
ショートパンツも同様
Mladenさん、ありがとうございます。
私たちは時々、自分の仕事に行き詰まり、新たな視点が必要になることがあります。
本当にありがとうございます。
Mladenさん、ありがとうございます。
私たちは時々、自分の仕事に行き詰まり、新たな視点が必要なことがあります。
ありがとうございました。
Bonjour,
Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)
グリーンピップス
こんにちは、私は4つの絵馬が交差し、rsiが>または< 50であるときに上または下矢印を表示することができるema-rsi指標を編集しようとしています。
私の問題は、これらの矢印が一度表示されると、すべてのティックで 更新されないことです。私は矢印を表示する条件がまだ良好であるかどうかをチェックしたい場合は、タイムフレームを変更する必要があります。どこに問題があるのか教えてください。私はコードを投稿します。
ありがとうございます。
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 4
#property indicator_width2 4
double CrossUp[];
double CrossDown[];
extern int FasterEMA1 = 6;
extern int SlowerEMA1 = 12;
extern int FasterEMA2 = 7;
extern int SlowerEMA2 = 14;
extern int RSInowPeriod = 6;
extern int barsBack = 2000;
extern bool AlertsMessage = true;
extern bool AlertsSound = true;
extern bool debug = false;
extern double K = 1.0 ;
bool EMACrossedUp = false;
bool RSICrossedUp = false;
bool EMACrossedDown = false;
bool RSICrossedDown = false;
int SignalLabeled = 0; // 0: initial state; 1: up; 2: down.
int upalert=false,downalert=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 241);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 242);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, i, counter;
double fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous;
double RSInow;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,barsBack);
for(i = limit; i>=0; i--) {
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterEMA1now = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA1previous = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
fasterEMA2now = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA2previous = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA1now = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA1previous = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA2now = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA2previous = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
RSInow=iRSI(NULL,0,RSInowPeriod,PRICE_CLOSE,i);
if (RSInow > 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI UP ");
RSICrossedUp = true;
RSICrossedDown = false;
}
if (RSInow < 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI DOWN ");
RSICrossedUp = false;
RSICrossedDown = true;
}
if ((fasterEMA1now >= slowerEMA1now) && (fasterEMA1previous < slowerEMA1previous) && (fasterEMA2now >= slowerEMA2now) && (fasterEMA2previous < slowerEMA2previous) ) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA UP ");
EMACrossedUp = true;
EMACrossedDown = false;
}
if ((fasterEMA1now <= slowerEMA1now) && (fasterEMA1previous > slowerEMA1previous) && (fasterEMA2now <= slowerEMA2now) && (fasterEMA2previous > slowerEMA2previous)) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA DOWN ");
EMACrossedUp = false;
EMACrossedDown = true;
}
if ((EMACrossedUp == true) && (RSICrossedUp == true) && (SignalLabeled != 1)) {
CrossUp[i] = Low[i] - K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL UP ");
if(i<=2 && AlertsMessage && !upalert)
{
Alert (Symbol()," ",Period(),"M BUY SIGNAL ");
//SendMail("EMA Cross Up on "+Symbol(),"");
upalert=true;
downalert=false;
}
if(i<=2 && AlertsSound && !upalert)
{
PlaySound("alert.wav");
upalert=true;
downalert=false;
}
SignalLabeled = 1;
}
else if ((EMACrossedDown == true) && (RSICrossedDown == true) && (SignalLabeled != 2)) {
CrossDown[i] = High[i] + K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL DOWN ");
if(i<=2 && AlertsMessage && !downalert)
{
Alert (Symbol()," ",Period(),"M SELL SIGNAL ");
//SendMail("EMA Cross Down on "+Symbol(),"");
downalert=true;
upalert=false;
}
if(i<=2 && AlertsSound && !downalert)
{
PlaySound("alert.wav");
downalert=true;
upalert=false;
}
SignalLabeled = 2;
}
}
return(0);
}
//end
このコードでは、インジケータの使い方が全くわかりません(値が対応する配列にどのようにコピーされるのかも)。
ムラデンさん、こんにちは。
これは "sample-ea-modular.mq5 "で、中にいくつかのコードがあります...そして、私が欲しいアイデアを持つインタフェースです。
私はそれをモジュール化しようとしている、アイデアは、各インジケータのイン/アウトを別々に最適化することです...
もし、sample-ea-modular.mq5でこれを作ることができれば、本物のEAを変更するつもりです。
本当のベースは、Ea-sample.mq5です。(私はあなたがすべての指標を見るためにのみ投稿しています)
親愛なる@mladenさん。
もし、下記のエラーを解決することができましたら、大変嬉しく思います。
ありがとうございます...
「質問 : チャートに貼り付け、gmtの自動オフセットを使用すると、警告が出ます。
oguz
いつものように(すでにご存知でしょうが)、私はデコンパイルされたコードについてはコメントしませんが、あなたが正しい道を進んでいることはわかりました:もしそれが(選択肢として)機能するなら、それを使ってください。もし動かないなら、使わないでください。私の見る限り、これは単なるメッセージ(エラーではありません)ですので...
親愛なる@mladenさん。
もし、下記のエラーを解決することができましたら、大変嬉しく思います。
ありがとうございます...
「質問 : チャートに貼り付け、gmtの自動オフセットを使用すると、警告が出ます。