Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 623
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
Die einfachste Aufgabe habe ich bereits beschrieben.
Öffnen Sie MetaEditor.
Klicken Sie auf Datei->Erstellen.
Wählen Sie im Pop-up-Feld Indikator.
...
Aber dieser Code wird vom MQL-Übersetzer nicht akzeptiert.
Ich werde in etwa 20 Minuten antworten
Was macht ihr Kinder eigentlich, wenn ihr das Wasser aufwirbelt?
Niemand macht einen Aufstand. Die Situation beginnt sich endlich ein wenig zu klären. Es stellt sich heraus, dass Sie ein Skript eine Funktion nennen, die nicht in den Hauptteil des Codes eingefügt werden kann.
Vergessen Sie auch nicht, dass MT dazu gedacht ist, mit Geld zu arbeiten, das vor den Angriffen Dritter geschützt werden muss. Daraus ergeben sich die meisten Einschränkungen der Sprache.
Ich habe bereits eine einfache Aufgabe beschrieben.
Öffnen Sie MetaEditor.
Klicken Sie auf Datei->Erstellen.
Wählen Sie im Pop-up-Feld Indikator.
In das Feld Indikator OnCalculate() betten Sie ein beliebiges Skriptobjekt mit dem Ereignis OnStart() ein.
Ich persönlich weiß nicht, wie man das macht. Nun, zum Beispiel so:
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &Volumen[],
const int &spread[])
{
//---
for(int i = 1; i < 100;i++)
{
if(offen[i] > Max)
{
OnStart()
Und hier schreiben wir ein Skript für die Erstellung des Objekts, das uns interessiert. Zum Beispiel eine Ellipse oder ein Buchstabe in einer Tabelle oder etwas anderes
} //if(offen)
} //for(int i)
//--- Rückgabewert von prev_calculated für den nächsten Aufruf
return(raten_gesamtsumme)
} // OnCalculate
Das sollte in etwa so aussehen.
Aber der MQL-Übersetzer nimmt einen solchen Code nicht wahr.
Sie sollte in etwa so aussehen
In etwa 20 Minuten werde ich antworten.
Es hat lange gedauert, das Video hochzuladen - über 40 Minuten.
Es dauerte lange, bis das Video geladen war - mehr als 40 Minuten.
Manchmal vermische ich auch die Forenbereiche und schreibe eine Antwort auf eine Frage zu mql4 in mql5.
Im Prinzip ändert sich in diesem Fall nichts außer der Dateierweiterung, aber in mql4 wird sie überflüssig
und sogar völlig unnötig und nutzlos.
Was macht ihr Kinder eigentlich, wenn ihr das Wasser aufwirbelt?
Gehen Sie einfach in den MetaEditor, und geben Sie den Befehl ein: Datei->Erstellen...
Daraufhin wird ein Formular mit verschiedenen Dummy-Dateien angezeigt.
Dabei handelt es sich vor allem um die Dongles:
- Expert Advisor
- Benutzerdefinierter Indikator
- Skript
- Bibliothek, etc.
Wir sind an den ersten drei Punkten interessiert: Expert Advisor, Custom Indicator und Script.
Vergleichen wir diese Dummies:
In Expert Advisor haben wir Ereignisse:
-OnInit(), OnDeinit(), OnTick(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Im Skript gibt es die Ereignisse:
- OnStart() ... das war's, mehr nicht.
im Indikator haben wir Ereignisse:
- OnInit(), OnCalculate(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Hier stellt sich natürlich die Frage, wie die Verbindung zwischen diesen Objekten hergestellt werden kann.
Es stellt sich heraus, dass es in MQL keine Verbindung zwischen ihnen gibt und geben kann, da die Datenströme zwischen diesen Objekten vollständig getrennt sind und es keine Verbindung zwischen ihnen gibt.
Außerdem bin ich überrascht, dass die Macher von MQL uns diese Tatsache als "gut" verkaufen.
Und wenn ich zum Beispiel in C++ den BASIC-Übersetzer oder Javascript oder irgendeinen anderen Übersetzer aufrufe und z. B. zur Android-Programmierumgebung wechsle,
im Rahmen von MQL kann ich nicht einmal ein sogenanntes "Skript" in der "Indikator"-Umgebung erstellen, da die Indikator-Umgebung den Befehl OnStart() nicht akzeptiert.
Was ist das für ein Freak?
Und von solchen hässlichen Dingen gibt es in MQL mehr als genug.
Sie sind bei jedem Schritt dabei.
Ich habe die Beschreibung von MQL gelesen - und ich bin überrascht, denn es gibt nichts anderes zu tun.
Die ganze Zeit über verkünden die Macher von MQL lautstark, dass MQL ein Nachkomme von C++ ist.
Es tut mir natürlich leid, aber ich möchte die MMS-Ersteller fragen: - Erbe wovon? - In seiner Hässlichkeit?
Ich vergleiche MQL ungewollt mit der berühmten 1C-Programmierumgebung. Sie behaupten auch, die Erben von C++ zu sein.
Aber dort wird alles auf eine viel anständigere Weise gemacht.
Und die grafischen Objekte, die Kommunikation zwischen Modulen und vieles mehr.
Und was gibt es in MQL?
Keine eingebauten Klassen, keine threadbezogenen Objekte... und überhaupt nichts.
Und ich habe nichts über die mathematische Hülle des Terminals gesagt!!!
Das ist ein ganz anderes Thema für Überraschungen!!!
Warum liest du nicht einfach ein bisschen Hilfe und findest all die Dinge, von denen du sagst, dass es sie nicht gibt, liest über eingebaute Klassen in SB, lernst, wie man höflich um Hilfe bittet (du hast um Hilfe gebeten) und lernst, wie man nicht unhöflich zu Leuten ist, die versuchen, dir zu helfen (beachte dies desinteressiert)...
In der Regel - verbieten Sie für 24 Stunden für Trolling, Unhöflichkeit und Betteln (Sie haben nicht eine Zeile Ihres Codes gezeigt, um alle Ihre Aussagen zu beweisen, aber unverschämt verlangen, dass Menschen, die auf Ihre Frage und Aussagen geantwortet haben, werden sie Ihnen mit Arbeits-Code für Ihre Bedürfnisse - es ist nicht üblich, hier - sie helfen, nicht für Sie tun, beachten Sie - die einfachste Code)
Nichts für ungut - wer mit nichts zu uns kommt, wird durch etwas Unverständliches getötet.
Außerdem habe ich Sie gewarnt, die Heizung herunterzudrehen:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Alle Fragen von Anfängern zu MQL4, Hilfe und Diskussion über Algorithmen und Codes
Artyom Trishkin, 2018.09.12 14:02
Versuchen Sie es jetzt ohne Beleidigungen und Arroganz.Wie installiert man mt4 auf macOS? Hilfe bitte!
Ausschließlich in einer virtuellen Maschine. Ich habe Parallel's teuer, aber bequem und zuverlässig.
https://www.parallels.com/ru/products/desktop/
Ich bitte um Hilfe. Die Fragen lauten:
1. Das Programm setzt im Testmodus keine Stop Losses für Kauf und Verkauf. Aber die Änderung anstehender Aufträge geht gut.
2. Es wird nicht in Echtzeit auf Rechnung gestartet.
Bitte, helfen Sie.
Ich möchte auch darum bitten, auf eventuelle Fehler hinzuweisen, die beim Schreiben des Programms aufgetreten sind.
Vielen Dank im Voraus.
Programm-Code:
.input int Percent=50;
Eingabe int MAGICNUMBER=413;
//Einführung von Indikatorkonstanten und Oszillatoren für die langfristigen Charts
input int Signal_Period_long_term=6;
Eingabe int Fast_EMA_Period_long_term=12;
Eingabe int Slow_EMA_Period_long_term=24;
//Wirkungsparameter von Indikatoren und Oszillator-Konstanten für kurzfristige Charts
input int Stochastic_Kperiod_short_term=5;
input int Stochastic_Dperiod_short_term=3;
input int Stochastic_slowing_short_term=3;
input ENUM_TIMEFRAMES PERIODs_short_term=PERIOD_M5;
input ENUM_TIMEFRAMES PERIODs_long_term=PERIOD_H1;
//-----------------------------------------------------------------------------------------
//Gemeinsame Variablen und ihre Typen
static datetime New_Time;//Zeit des aktuellen Taktes
statisch datetime Time_Local;
double Margin_Percent; //Eröffnungsmittel für die Eröffnung von Aufträgen
double Lots;//Bestimmung der Gesamtzahl der Lose
double Lots_Volumen;
//Variablen und Typen für das Langzeitdiagramm
double MacdCurrent_long_term;//MACD-Parameter der Hauptlinie des aktuellen Balkens
double MacdPrevious_long_term;//MACD-Parameter der Hauptlinie des vorherigen Balkens
double SignalCurrent_long_term;
//Variablen und Typen für den kurzfristigen Chart
double Stochastic_Current_short_term_main;//Stochastische Parameter des aktuellen Balkens im 5-Minuten-Chart
double Stochastic_Previous_short_term_main;//Stochastische Parameter des vorherigen Balkens im 5-Minuten-Chart
double Stochastic_Current_short_term_signal;//Stochastische Parameter des aktuellen Balkens im 5-Minuten-Chart
double Stochastic_Previous_short_term_signal;//Stochastische Parameter des vorherigen Balkens im 5-Minuten-Chart
double StopLoss_BUY;
double StopLoss_SELL;
double Price_BUY;
double Price_SELL;
//+------------------------------------------------------------------+
Experteninitialisierungsfunktion //|
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
int ticket,cnt;
int total=OrdersTotal();// Ermittlung der Anzahl der Bestellungen
bool New_Bar=false; // Neuen Balken markieren
//Definieren der Variablenwerte für das Langzeitdiagramm
MacdCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,1);
MacdPrevious_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,2);
SignalCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_SIGNAL,1);
//Bestimmung der Variablenwerte für das Kurzzeitdiagramm
Stochastic_Current_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,1);
Stochastic_Previous_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,2);
Stochastic_Current_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,1);
Stochastic_Previous_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,2);
//Definition der gemeinsamen Variablen
Price_BUY=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
Price_SELL=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
StopLoss_BUY=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
StopLoss_SELL=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
Margin_Percent=AccountFreeMargin()*Percent/100;
Lots=NormalizeDouble(Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED),2);
Lots_Volume=NormalizeDouble(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP),2);
//-----------------------------------------------------------------------------------------------------------------------
//----- Определение нового бара------------------------------------------------------------------------------------------
New_Time=TimeCurrent();
Print("Time=",TimeCurrent();
Print("Bar open time =",iTime(NULL,PERIODs_short_term,0));
if(iTime(NULL,PERIODs_short_term,0)==New_Time) // Zeiten vergleichen
{
if(iVolume(NULL,PERIODs_short_term,0)<=2) //Volumen vergleichen
Print("Bar Volumen =",Volumen[0]);
if(iBarShift(NULL,PERIODs_short_term,TimeCurrent())==0)//Prüfen des Balkenindex
Print("Balkenindex =",iBarShift(NULL,PERIODs_short_term,TimeCurrent());
New_Bar=true; // Ein neuer Balken wird erfasst
Print("Neuer_Balken");
}
else if(Neuer_Balken==false) // Wenn der Balken nicht neu ist...
{
Print("Bar ist nicht neu");
Rückkehr;
}
//---Prüfung der Verfügbarkeit von Mitteln für die Eröffnung der Mindestpartie
if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
{
Print("Nicht genügend Mittel. Freie Mittel = ",AccountFreeMargin());
Rückkehr;
}
//---Bestimmung der Losnummer
if(Lose>Lose_Volumen)
{
Lots=NormalizeDouble(Lots_Volume,2);
Print("Anzahl der Lose : ",Lose);
}
sonst if(Lose<Lose_Volumen)
{
Lots=NormalizeDouble(MathFloor(Lots),2);
Print("Anzahl der Lose : ",Lose);
}
//+------------------------------------------------------------------+
//| Bedingungen für die Eröffnung von Aufträgen, wenn die Anzahl der Aufträge gleich Null ist |
//+------------------------------------------------------------------+
if(gesamt<1)
{
if(MacdCurrent_long_term<0 && MacdCurrent_long_term>SignalCurrent_long_term)
Print("Bedingung ist wahr für KAUFEN");
{
//+---------------------------------------------------------------------------+
//| Bedingung für die Eröffnung einer langen BUY-Position |
//+---------------------------------------------------------------------------+
if(Stochastic_Current_short_term_main<Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main>=Stochastic_Previous_short_term_signal)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price_BUY,3,0,0,NULL,MAGICNUMBER,0,Blue);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("BUY order open : ",OrderOpenPrice());
Rückkehr;
}
else Print("BUY order open error : ",GetLastError());
Rückkehr;
}
}
}
if(MacdCurrent_long_term>0 && MacdCurrent_long_term<SignalCurrent_long_term)
Print("Bedingung ist wahr für SELL");
{
//+---------------------------------------------------------------------------+
//| Bedingung für die Eröffnung von Short-SELL-Positionen |
//+---------------------------------------------------------------------------+
if(Stochastic_Current_short_term_main>Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main<=Stochastic_Previous_short_term_signal)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Price_SELL,3,0,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("SELL order open : ",OrderOpenPrice());
Rückkehr;
}
else Print("Fehler bei der Eröffnung einer SELL-Order: ",GetLastError());
Rückkehr;
}
}
}
}
//+---------------------------------------------------------------------------+
//| Änderungsbedingungen für die Bestellung |
//+---------------------------------------------------------------------------+
for(cnt=0;cnt<Gesamt;cnt++)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
weiter;
if(OrderMagicNumber()==MAGICNUMBER && // Überprüfung der magischen Nummer der Bestellung
OrderSymbol()==Symbol()) // Prüfung auf das Order-Symbol
{
//--- Long-Position eröffnet
if(Auftragsart()==OP_BUYSTOP)
{
if(OrderOpenPrice()<Preis_BUY && Ask<Preis_BUY)
{
if(OrderModify(OrderTicket(),Price_BUY,0,0,0,Blue))
Print("Die Preis_BUY-Bestellung wurde erfolgreich geändert.");
else Print("Fehler beim Ändern der BUYStop-Order. Fehlercode=",GetLastError());
Rückkehr;
}
else Print("Der Änderungspreis ist höher als der Auftragspreis");
Rückkehr;
}
if(OrderType()==OP_SELLSTOP)
{
if(OrderOpenPrice()<Price_SELL && Bid>Price_SELL)
{
if(OrderModify(OrderTicket(),Price_SELL,0,0,0,Green))
Print("Preis_Verkaufsauftrag wurde erfolgreich geändert.");
else Print("Fehler beim Ändern der Order SELLStop. Fehlercode=",GetLastError();
Rückkehr;
}
}
if(Auftragsart()==OP_BUY)
{
if(OrderStopLoss()<StopLoss_BUY && StopLoss_BUY<Ask)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_BUY,0,0,Blue))
Print("Preis_BUY Bestellpreis erfolgreich geändert.");
else Print("Fehler beim Ändern der BUY-Bestellung. Fehlercode=",GetLastError());
Rückkehr;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()>StopLoss_SELL && StopLoss_SELL>Bid)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_SELL,0,0,Green))
Print("Preis_Verkaufsauftragspreis erfolgreich geändert.");
else Print("Fehler beim Ändern des SELL-Auftrags. Fehlercode=",GetLastError();
Rückkehr;
}
}
}
}
}
//+------------------------------------------------------------------+
Hilfe bei der Behebung eines Fehlers im Indikator, er zeichnet nicht das Tageshoch und -tief, wenn er sich auf der letzten Kerze der Stunde befindet.
https://prnt.sc/kut6xo
https://prnt.sc/kut79b
Ich bitte um Hilfe. Die Fragen lauten:
1. Das Programm setzt im Testmodus keine Stop Losses für Kauf und Verkauf. Aber die Änderung anhängiger Aufträge geht gut.
2. Es wird nicht in Echtzeit auf Rechnung gestartet.
Dies ist der Weg
ändert den AND-Code und fügt ihn korrekt ein (Alt+S).