![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
Ich versuche, MQ4 zu lernen. Mein erstes einfaches Programm soll einen Alarm auslösen, wenn sich 2 MAs kreuzen. Ich kann nicht herausfinden, warum
dieser Code funktioniert nicht.
Jede Hilfe wird wirklich geschätzt werden! Vielen Dank im Voraus.
extern int Zeitraum_MA1 = 5;
extern int Zeitraum_MA2 = 1;
double MA1;
double MA2;
int init()
{
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
MA1=iMA(NULL,0,Zeitraum_MA1,0,MODE_SMA,PREIS_SCHLIESSEN,0);
MA2=iMA(NULL,0,Zeitraum_MA2,0,MODE_SMA,KURS_SCHLIESSEN,0);
//--------------------------------------------------------------------
wenn (MA2 == MA1 )
Alert("Preis ist derselbe(",Zeitraum_MA2,").");// Alert
zurück;
}Hallo Lincoln2012,
Ich würde mir gerne den Code dieses Ma Cross anschauen.
Ich versuche, MQ4 zu lernen. Mein erstes einfaches Programm soll einen Alarm auslösen, wenn sich 2 MAs kreuzen. Ich kann nicht herausfinden, warum
dieser Code funktioniert nicht.
}Der Schlüssel zum Code einer Kreuzung von 2 beliebigen Indikatorlinien ist dieses Konzept:
1. Wenn der aktuelle Balken Linie1>Linie2 und der vorherige Balken Linie1<Linie2 ist, dann gibt es ein Up Cross.
2. Wenn aktueller Balken Linie1Linie2, dann gibt es ein Down-Kreuz.
Hallo
Nun, ich war dabei wenig Programmierung in der Mt4 sein Spaß, aber ich m nicht pro nur einfache Bearbeitung von alten Indikator. Ok ich möchte einen einfachen Indikator zu machen, aber nicht wissen, wie man es tun.
seine einfache Indikator es einfach überprüfen, für den Wert, wenn der Wert der alle varible gleich sind es zeichnen, dass Punkt, wo der Wert der alle die Variable übereinstimmen.
Meine einfache Lösung
Nehmen wir an, wir haben Variablen
double movingavg1;
double movingavg12;
double movingavg13;
double movingavg14;
double movingavg15;
double movingavg16;
double movingavg17;
double movingavg18;
double movingavg19;
double movingavg10;
double movingavgall;
wir deklarieren die Variable ich gebe nur ein Beispiel ich benutze iStochastic(1), aber wir können für jeden Indikator verwenden.
movingavg12=iStochastic(1)
movingavg13=iStochastic(2)
.
.
.
und so weiter
jetzt
if (movingavg12=movingavg13=movingavg14,....) (Wert in Variable "movingavgall" eintragen) //den Wert eintragen, der für vria gleich ist
movingavgall auf Balken zeichnen
Anwendung
Nehmen wir an, ich möchte überprüfen, wo der gleitende Durchschnitt 3 und der gleitende Durchschnitt 5 den gleichen Wert haben
auch dieser Indikator kann mit RSI verwendet werden, wenn der RSI 1 und RSI 2 Wert = 80
und viele mehr
sogar wenn wir MTF hinzufügen, wird das ein zusätzlicher Bonus sein
Sieht einfach aus, aber ich konnte die Lösung nicht finden, ich hoffe jemand kann helfen.
ich hoffe ihr versteht was ich meine
dankeSobald Sie Werte zum Vergleichen haben, würden Sie einen Code ähnlich dem folgenden verwenden.
Um zuprüfen, ob die Werte gleich sind, verwendet man ==. Ein einzelnes = wird verwendet, um einer Variablen einen Wert zuzuweisen.
Bei der Überprüfung von mehr als 1 Satz muss && verwendet werden, um AND zu bedeuten
movingavgall = 0;
if ((a == b) && (b == c) && (c == d)) movingavgall = a;
Sie können dann prüfen, ob movingavgall einen Wert hat mit
if (movingavgall != 0)
{
// hier etwas tun
}
Suchen Sie mit Google nach Metatrader-Programmierung.
Sie sollten mehrere gute Tutorials für die Programmierung in MT4 finden.
Ein gutes Buch über C-Programmierung wird Ihnen ebenfalls helfen.
Robert Hill alias MrPip
diesen Code vereinfachen
Hallo zusammen!
ich versuche, diesen Code zu vereinfachen, indem ich den Befehl Stringconcatenate aus dem Folgenden verwende:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
zu diesem:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Ich hoffe, jemand kann mir helfen.
Mit freundlichen Grüßen
doc
trend_alexcud_v_2men.mq4
...
Doku
Wenn Sie alle diese Elemente benötigen, gibt es keinen einfacheren Weg, sie zu schreiben
Hallo zusammen!
Ich versuche, diesen Code zu vereinfachen, indem ich den Stringconcatenate-Befehl von hier aus verwende:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
zu diesem:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Ich hoffe, jemand kann mir helfen.
Mit freundlichen Grüßen
doc
trend_alexcud_v_2men.mq4So geht's: Alarmierung alle 60 Sekunden
Wie kann ich einen Code erstellen, der mir z.B. alle 60 Sekunden einen Alarm ausgibt?
Ich habe diesen Code unten erstellt, aber es gibt mir eine Warnung jede Minute aus, wenn ich es an den Chart anhängen und ich möchte, dass es die Broker-Zeit zu folgen, so dass es mich für z.B. alle 60 Sekunden alarmieren.
#include
#include
// exported variables
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int ExpectedTime2 = 0;
int init()
{
NDigits = Digits;
ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePerMinutes2();
}
void OncePerMinutes2()
{
int datetime800 = TimeLocal();
if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1; // reset paused time
}
if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1;
Alert3();
}
}
void Alert3()
{
Alert("One minute gone");
}
int deinit()
{
if (true) ObjectsDeleteAll();
}
Doc Wenn Sie all diese Elemente benötigen, gibt es keinen einfacheren Weg, sie zu schreiben
Ähm, diesmal Pech gehabt, trotzdem danke.
Mit freundlichen Grüßen
doc
Es gibt ein Problem mit dem zweiten StringConcatenate-Aufruf.
Sie addieren 3 verschiedene Schriftartennamen und das Ergebnis ist kein gültiger Name.
Robert
Hallo zusammen!
Ich versuche, diesen Code zu vereinfachen, indem ich den StringConcatenate-Befehl von hier aus verwende:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
zu diesem:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Ich hoffe, jemand kann mir helfen.
Mit freundlichen Grüßen
doc
trend_alexcud_v_2men.mq4Brauche Hilfe mit EA ... Geschäfte werden im Tester nicht geschlossen
Ich arbeite an einem EA, aber egal was ich tue, ich kann ihn nicht dazu bringen, Trades zu schließen. Er öffnet sie problemlos, aber wenn ich sie schließen will, schließt der EA sie nicht.
Ich werde einen Teil meines EA-Codes posten, damit vielleicht einer von euch erfahrenen Programmierern herausfinden kann, warum ich dieses Problem habe. Die Variablen 'buyTrade' und 'sellTrade' sind global für den gesamten EA.
HINWEIS: Ich möchte nur EINEN Handel zu einem bestimmten Zeitpunkt offen haben, entweder long oder short. Die Trades sind "always in", wenn also ein Long-Signal kommt, sollte der bestehende Short geschlossen werden und umgekehrt.
Dies wird NICHT gemacht. Was es tut, ist das Öffnen von Trades und dann öffnet mehr Trades ... und öffnet mehr ... und hält sie offen, bis sie schließlich alle ihre Stops treffen.
Vielen Dank im Voraus
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);...
Da es sich um einen Teilcode handelt: Versuchen Sie, symBid durch symAsk beim Schließen des Verkaufsauftrags und symAsk durch symBid beim Schließen des Kaufauftrags zu ersetzen (kehren Sie die Schlusskurse um, Sie können einen Verkauf nicht zum Geldkurs und einen Kauf nicht zum Briefkurs schließen)
Ich arbeite an einem EA, aber egal was ich tue, ich kann ihn nicht dazu bringen, Trades zu schließen. Es öffnet sie einfach gut, aber wenn ich sie schließen möchte, wird der EA sie nicht schließen.
Ich werde einen Teil meines EA-Codes posten, damit vielleicht einer von euch erfahrenen Programmierern herausfinden kann, warum ich dieses Problem habe. Die Variablen 'buyTrade' und 'sellTrade' sind global für den gesamten EA.
HINWEIS: Ich möchte nur EINEN Handel zu einem bestimmten Zeitpunkt offen haben, entweder long oder short. Die Trades sind "always in", wenn also ein Long-Signal kommt, sollte der bestehende Short geschlossen werden und umgekehrt.
Dies wird NICHT gemacht. Was es tut, ist das Öffnen von Trades und dann öffnet mehr Trades ... und öffnet mehr ... und hält sie offen, bis sie schließlich alle ihre Stops treffen.
Vielen Dank im Voraus
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);