Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo Mladen,
ich versuche, dies im MT5 zu programmieren, aber ich glaube, dass ich nicht die richtige Implementierung verwende,
meine Idee ist es, mehr Indikatoren zu verwenden, bitte gib mir ein Licht... ;-)
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]);
}
}
Hallo Mladen,
ich versuche, dies im MT5 zu programmieren, aber ich glaube, dass ich nicht die richtige Implementierung verwende,
meine Idee ist es, mehr Indikatoren zu verwenden, bitte gib mir ein Licht... ;-)
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]);
}
}
Hallo Leute,
Ich brauche wirklich Hilfe, ich baue einen Experten mit dem Waddah Attar Scalping Indikator, die Logik funktioniert, alles ist ok.
Außer einer Sache, wie Sie sehen, in der Backtest-Screenshot, bei jedem grünen Balken der Experte öffnet einen Kauf, dasselbe für die roten Balken. Ich möchte nur 1 Handel pro Farbwechsel.
Was ich will ist:
ANZEIGE WIRD GRÜN ---> es wird ein Kauf eröffnet ---> der Kauf wird geschlossen ---> ANZEIGE WIRD ROT ---> es wird ein Verkauf eröffnet ---> der Verkauf wird geschlossen ---> Wiederholung
Ich möchte nur 1 Handel pro Farbwechsel.
Hier ist mein Code: (das gleiche für Short)
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;
Kann jemand bitte mit einer einfachen Lösung kommen, schauen Sie sich die Zeile 1265, die Logik kommt hier.
Vielen Dank!
Hallo Leute,
Ich brauche wirklich Hilfe, ich baue einen Experten mit dem Waddah Attar Scalping Indikator, die Logik funktioniert, alles ist ok.
Außer einer Sache, wie Sie sehen, in der Backtest-Screenshot, bei jedem grünen Balken der Experte öffnet einen Kauf, dasselbe für die roten Balken. Ich möchte nur 1 Handel pro Farbwechsel.
Was ich will ist:
ANZEIGE WIRD GRÜN ---> es wird ein Kauf eröffnet ---> der Kauf wird geschlossen ---> ANZEIGE WIRD ROT ---> es wird ein Verkauf eröffnet ---> der Verkauf wird geschlossen ---> Wiederholung
Ich möchte nur 1 Handel pro Farbwechsel.
Hier ist mein Code: (das gleiche für Short)
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;
Kann jemand bitte mit einer einfachen Lösung kommen, schauen Sie sich die Zeile 1265, die Logik kommt hier.
Vielen Dank!
Ändern Sie die Bedingung in
Dasselbe gilt für die Shorts
Vielen Dank, Mladen!
Manchmal bleiben wir stecken und brauchen einen neuen Blick auf unsere Arbeit.
Nochmals vielen Dank!
Vielen Dank, Mladen!
Manchmal bleiben wir stecken und brauchen einen neuen Blick auf unsere Arbeit.
Nochmals vielen Dank!
Bonjour,
Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)
Grüne Kerne
Hallo Leute, ich versuche, einen ema-rsi-Indikator zu bearbeiten, der einen Pfeil nach oben oder unten zeigen kann, wenn 4 ema Kreuz passiert und rsi ist > oder < 50.
Mein Problem ist, dass theese Pfeile nicht fürjeden Tick aktualisieren, sobald sie erschienen, muss ich Timeframe ändern, wenn ich überprüfen möchte, ob Bedingungen noch gut sind, um Pfeil zu zeigen. Können Sie mir sagen, wo ist das Problem? Ich poste den Code.
Ich danke Ihnen
#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
In diesem Code sehe ich die Verwendung der Indikatoren überhaupt nicht (und wie die Werte in entsprechende Arrays kopiert werden)
Hallo Mladen,
Hier ist die "sample-ea-modular.mq5" mit etwas Code drin... und mit der Schnittstelle, die die Idee haben, die ich will.
Ich versuche, es modular zu machen, die Idee ist, separat in/out von jedem Indikator zu optimieren.
Wenn ich dies mit dem "sample-ea-modular.mq5" machen kann, werde ich den echten EA ändern.
die echte Basis ist die Ea-sample.mq5. (ich bin Posting nur um Sie sehen alle Indikatoren)
Lieber @mladen,
Wenn Sie den unten genannten Fehler beheben können, wäre ich Ihnen sehr dankbar.
Vielen Dank...
"Frage: Es gibt eine Warnung, wenn ich einen Chart erstellt habe und auto gmt offset verwende.
oguz
Wie üblich (das wissen Sie bereits) kommentiere ich dekompilierten Code nicht, aber ich sehe, dass Sie auf dem richtigen Weg sind: Wenn es funktioniert (die Option), verwenden Sie sie. Wenn es nicht funktioniert, dann nicht. Soweit ich sehe, ist das nur eine Meldung (kein Fehler), also ...
Lieber @mladen,
Wenn Sie den unten genannten Fehler beheben können, wäre ich Ihnen sehr dankbar.
Vielen Dank...
"Frage: Es gibt eine Warnung, wenn ich einen Chart erstellt habe und auto gmt offset verwende.