![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ist es möglich, Farbe, Stil und Gewichtung zu Indikatorstufenlinien hinzuzufügen?
Hallo,
Ich frage mich, ob mir jemand sagen kann, ob es möglich ist, Farbe, Stil und Gewichtung zu den Indikatorlinien hinzuzufügen?
Zunächst möchte ich sowohl den Stil als auch die Farbe der RSI-Levels festlegen und frage mich, ob man dies tun kann, indem man z.B. der Zeile mehr Code hinzufügt: #property indicator_level1 70 ?
Wenn möglich, wäre ich sehr dankbar, wenn mir das jemand zeigen könnte.
Vielen Dank!
Laurus
...
Ja, Sie können
die folgenden Eigenschaften verwenden:
#property indicator_levelstyle
#property indicator_levelwidth
[/PHP]
If you use indicator_levelwidth greater than 1, only indicator_levelstyle that metatrader will allow is STYLE_SOLID (solid line). Also, you can specify only one color, style and width for all levels (if you need more than one color, style or width for levels, you either have to use buffers or objects - horizontal line, for example)
You can use the SetLevelStyle() function too for that purpose,with same limitations as described above
[PHP]
void SetLevelStyle( int draw_style, int line_width, color clr=CLR_NONE)
Hallo,
Ich frage mich, ob mir jemand sagen kann, ob es möglich ist, Farbe, Stil und Gewichtung zu den Linien der Indikatorstufen hinzuzufügen?
Zunächst möchte ich sowohl Stil als auch Farbe für die RSI-Levels festlegen und frage mich, ob man dies tun kann, indem man zum Beispiel der Zeile mehr Code hinzufügt: #property indicator_level1 70 ?
Wenn möglich, wäre ich sehr dankbar, wenn mir das jemand zeigen könnte.
Vielen Dank!
LaurusVielen Dank für Ihre Antwort, Mladen, ich weiß Ihre Hilfe immer sehr zu schätzen.
Was Sie geschrieben haben, ist genau das, was ich befürchtet habe. Was die Funktionen angeht, ist mir das noch zu hoch.
Wenn Sie einen Blick auf das Bild werfen, sehen Sie, wie ich es gerne hätte. Als Kompromiss habe ich normale horizontale Linien verwendet, aber da ich Trendlinien mit dem Indikator selbst zeichne, ist das keine gute Lösung.
Vielen Dank!
Laurus
...
Wenn man sich Ihr Bild ansieht, scheint dies die einzige Lösung zu sein, die Sie anwenden können (mit Objekten). Die Verwendung von Zeichenpuffern würde einfach Ihre Zeichenpuffer aufbrauchen und Sie könnten nicht alle Werte zeichnen, die Sie für diesen Indikator verwenden. Manchmal "bezahlen" wir immer noch für die Entscheidung des Metatraders 4, nur 8 Zeichenpuffer zu haben.![](https://c.mql5.com/forextsd/smiles/cry_smile.png)
Vielen Dank für Ihre Antwort, Mladen, ich weiß Ihre Hilfe immer sehr zu schätzen.
Was Sie geschrieben haben, ist genau das, was ich befürchtet habe. Was den Teil mit den Funktionen angeht, ist mir das immer noch zu hoch.
Wenn Sie einen Blick auf das Bild werfen, sehen Sie, wie ich es gerne hätte. Als Kompromiss habe ich normale horizontale Linien verwendet, aber da ich Trendlinien mit dem Indikator selbst zeichne, ist das keine gute Lösung.
Danke, Mladen,
LaurusExterne DLL liefert seltsame Ergebnisse
Hallo!
Nachfolgend ein sehr einfaches Beispiel für einen Aufruf einer externen DLL. Das Journalprotokoll sollte steigende Zahlen, beginnend bei 0, anzeigen, wenn es mit dem Strategietester verwendet wird.
Das Ergebnis ist jedoch ziemlich seltsam. Die erste Zeile im Journalprotokoll zeigt eine große Zahl an (z. B. 18472) und steigt dann eine Zeit lang ordnungsgemäß an, bis sie anfängt, etwa 10, manchmal über 100, Schritte auf einmal zu springen.
Kann mir jemand erklären, woran das liegt und wie man es korrigieren kann?
Vielen Dank!
// MyExpert.mql //
#import "MyDLL.dll"
int Test();
#import
void start(){
Print(Test());
}[/CODE]
// MyDLL.def //
LIBRARY MyDLL
EXPORTS
Test
[CODE]
// MyDLL.dll //
int i= 0;
int __stdcall Test() {
i++;
return i;
}Interessantes Code-Problem für Indikator
Hallo Leute,
Ich versuche, MT4-Programmierung zu lernen, und gerade jetzt entwickle ich einen PinBar-Erkennungsindikator, der mir sagt, zu kaufen oder zu verkaufen. Ich habe diesen Indikator speziell für den 4-Stunden-Chart entwickelt, wegen der speziellen Regeln für Kauf oder Verkauf. Die Regel für die Erkennung ist wie folgt:
Körper der Kerze <= 35% der Kerzenlänge.
Mindestens 1 Docht der Kerze >= 50 % der Kerzenlänge.
Bis jetzt habe ich keine Probleme, diese Balken mit dem Indikator zu erkennen.
Die nächste Regel sagt mir jedoch, dass ich kaufen oder verkaufen soll.
Ich zoome in den 1-Stunden-Chart und betrachte die 4 Bars, die den Pinbar im 4-Stunden-Chart erzeugt haben.
Ich habe die Funktion iClose verwendet, um den Wert des Abschlusses des ersten und des letzten Balkens dieser Formation auf dem 1-Stunden-Balken zu übernehmen.
Aber wie jetzt programmiert, schaue ich immer auf die erste und letzte Kerze im 1-Stunden-Chart selbst. Und das ist nicht in Ordnung. Es muss der erste und letzte Balken der Formation sein und nicht der des Charts.
Hier ist der Code, den ich jetzt habe, mit den falschen iClose-Funktionen darin.
{
Buy = Close;
SetLevel(true,i+1,Close);
}Ich war nicht in der Lage, die richtigen 1-Stunden-Kerzen im Hintergrund für diese spezielle 4-Stunden-Kerze zu finden.
Gibt es jemanden, der mir die Antwort auf mein Problem geben kann?
Ich habe es behoben:
int H1BarNumber;
H4BarTime = Time;
H1BarNumber = iBarShift(NULL, PERIOD_H1, H4BarTime);tx vielmals!
Jakob
Wenn ich mir dein Bild ansehe, scheint das die einzige Lösung zu sein, die du anwenden kannst (mit Objekten). Die Verwendung von Zeichnungspuffern würde einfach Ihre Zeichnungspuffer aufbrauchen und Sie könnten nicht alle Werte zeichnen, die Sie für diesen Indikator verwenden. Manchmal sind wir immer noch "zahlen" für metatraders 4 Entscheidung zu haben, nur 8 Zeichnung Puffer
Entschuldigen Sie meine späte Antwort, Mladen, und vielen Dank für die Klärung der Angelegenheit. Was Sie geschrieben haben, weiß ich jetzt wenigstens mit Sicherheit.
Ich danke dir,
Laurus
Hilfe bei Einstiegskriterien
Hallo Leute,
Ich versuche, ein Einstiegskriterium mit MA zu erstellen. Mein Einstiegskriterium ist einfach, ich möchte einen Long-Trade eingehen, wenn der Fast MA den Slow MA am Kerzenschluss nach oben kreuzt und nicht die aktuelle Kerze und umgekehrt.
Meine aktuelle Situation ist, dass mein EA einen langen Handel auslösen wird, wenn die Fast MA Slow MA nach oben und umgekehrt kreuzt, aber diese Kerze hat noch nicht schließen, und manchmal, wenn die Kerze schließt, die endgültige MA möglicherweise nicht nach oben kreuzt so, ich sollte nicht ausgelöst haben, dass bestimmte Handel, und doch das System ausgelöst, weil es nach oben einmal und zurück gekreuzt hat. Dies gilt auch für Short-Trades.
Ich habe über diese für ein paar Tage bereits ohne jeden Fortschritt gegangen. Kann mir jemand sagen, wie ich vorgehen muss, um dieses Problem zu lösen? Danke!
//--- Eingabeparameter
extern double TakeProfit=2700.0;
extern double Lots=0.1;
extern double StopLoss=2500.0;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Gekreuzt (double line1 , double line2)
{
static int letzte_Richtung = 0;
static int aktuelle_Richtung = 0;
if(line1>line2)current_dirction = 1; //oben
if(line1<line2)current_dirction = 2; //abwärts
if(current_dirction != last_direction) //geändert
{
last_direction = current_dirction;
return (letzte_Richtung);
}
sonst
{
return (0);
}
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma;
if(Bars<100)
{
Print("Balken weniger als 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit kleiner als 10");
return(0); // TakeProfit prüfen
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Gekreuzt (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Mein EA",12345,0,Grün);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point, "Mein EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
Vielen Dank und herzliche Grüße
Terrance
...
Terrance
Versuchen Sie, diese Zeilen zu ändern:
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
Auf diese Weise brauchen Sie nicht einmal die Funktion "crossed", und es wird bei einem geschlossenen Balken nach Kreuzen gesucht.
Hallo Leute,
Ich versuche, ein Einstiegskriterium mit Hilfe von MA zu erstellen. Meine Einstiegskriterien sind einfach: Ich möchte einen Long-Trade eingehen, wenn der Fast MA den Slow MA am Ende der Kerze nach oben kreuzt und nicht die aktuelle Kerze und umgekehrt.
Meine aktuelle Situation ist, dass mein EA einen langen Handel auslösen wird, wenn die Fast MA Slow MA nach oben und umgekehrt kreuzt, aber diese Kerze hat noch nicht schließen, und manchmal, wenn die Kerze schließt, die endgültige MA möglicherweise nicht nach oben kreuzt so, ich sollte nicht ausgelöst haben, dass bestimmte Handel, und doch das System ausgelöst, weil es nach oben einmal und zurück gekreuzt hat. Dies gilt auch für Short-Trades.
Ich habe über diese für ein paar Tage bereits ohne jeden Fortschritt gegangen. Kann mir jemand sagen, wie ich vorgehen muss, um dieses Problem zu lösen? Danke!
//--- Eingabeparameter
extern double TakeProfit=2700.0;
extern double Lots=0.1;
extern double StopLoss=2500.0;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Gekreuzt (double line1 , double line2)
{
static int letzte_Richtung = 0;
static int aktuelle_Richtung = 0;
if(line1>line2)current_dirction = 1; //oben
if(line1<line2)current_dirction = 2; //abwärts
if(current_dirction != last_direction) //geändert
{
last_direction = current_dirction;
return (letzte_Richtung);
}
sonst
{
return (0);
}
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma;
if(Bars<100)
{
Print("Balken weniger als 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit kleiner als 10");
return(0); // TakeProfit prüfen
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Gekreuzt (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Mein EA",12345,0,Grün);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point, "Mein EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
Dank und Grüße
TerranceTerrance
Versuche diese Zeilen zu ändern:
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
Hallo Mladen, ich habe ausprobiert, was du mir gesagt hast, und es hat wunderbar funktioniert. Allerdings verstehe ich die Logik hinter den Codes nicht ganz. Warum setzt du die Verschiebung von iMA auf 1 und 2 und warum codierst du das: (diff1*diff2)<0) auch noch? Tut mir leid, aber ich bin derzeit noch in der Lernphase.
Vielen Dank und Grüße
Terrance