Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 23

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 bin völlig verwirrt.
double blevel=OrderStopLoss()<Bid-Point*TS; funktioniert bei mir. SL geht nach dem Preis nur im Gewinn.
double slevel=OrderStopLoss()>Ask+Point*TS; Ich weiß nicht, wie ich dies zu else hinzufügen kann
Es ist kein Bool.
Nicht bool, sondern implizite Konvertierung genannt
Was machen Sie eigentlich? Schleppnetz?
Kein bool, aber eine implizite Konvertierung
Was machen Sie eigentlich? Schleppnetz?
Ja, ich habe versucht, ein Schleppnetz zu erstellen. Das ursprüngliche Skript sollte nur geschlossen werden, wenn der Gewinn der Bestellung erreicht war.
Ja, ich habe versucht, ein Schleppnetz zu erstellen.
Logik:
Wenn der Gewinn der aktuellen, in der Schleife ausgewählten Order größer ist als der eingestellte Wert, wenn ihr Stoploss kleiner (für Kauf)/größer (für Verkauf) ist als das berechnete Stoploss-Niveau, dann wird der Stop auf den neuen Wert verschoben.
Dies ist kurz und bündig.
Hatte ich das nicht vorgeschlagen?
Ja, nun... Ich habe mir Ihren Code so unaufmerksam angeschaut, dass ich besser sagen sollte, ich habe ihn mir gar nicht angeschaut. Aber das ist schon halb so schlimm, dann habe ich so einen Blödsinn gesagt, für den ich mich fast schäme. Aus irgendeinem Grund hatte ich plötzlich diese verrückte Idee, dass ArrayMaximum() auf ein Array von Strukturen oder sogar ein separates Feld dieses Arrays angewendet werden könnte.
Ich bereue, ich rate niemandem, so zu denken, es funktioniert nicht...:)
Ja, nun... Ich habe mir Ihren Code so unaufmerksam angeschaut, dass ich besser sagen sollte, ich habe ihn mir gar nicht angeschaut. Aber das ist schon halb so schlimm, dann habe ich so einen Blödsinn gesagt, für den ich mich fast schäme. Aus irgendeinem Grund hatte ich plötzlich diese verrückte Idee, dass ArrayMaximum() auf ein Array von Strukturen oder sogar ein separates Feld dieses Arrays angewendet werden könnte.
Ich bereue, ich rate niemandem, so zu denken, es funktioniert nicht...:)
Na ja... Und was ist mit mir? Ich habe mir Ihren Code auf dieselbe Weise angesehen und mich bei Ihnen bedankt - weil er wirklich kürzer ist...
Kurzum - beide sind einen Witz wert...
Kein Skript, sondern ein Expert Advisor. Sie verwechseln die Arten von Programmen. Das Skript wird einmal ausgeführt, nachdem es in das Diagramm geladen wurde, und dann gelöscht. Wenn sie nicht geschleift ist. Kaum jemand wird ein Skript mit Schleifen erstellen, um Positionen zu schließen.
so der Autor:
Hier ist ein leicht modifiziertes Standard MT4 close.mq4 SkriptLegen Sie die Datei in den Ordner MetaTrader\experts\Scripts,
Na ja... Und ich? Als ich einen Blick auf Ihren Code warf, verbeugte ich mich in Dankbarkeit - er ist wirklich kürzer...
Kurzum - beide sind einen Witz wert...
Nein, das sehe ich nicht so. Dieser Code
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
getestet und funktioniert. Es gibt einfache benutzerdefinierte Double-Arrays, und CopyRates() füllt ein Array von Strukturen und daher kann man nicht Maximum und Minimum wählen, indem man Funktionen der Arbeit mit Arrays verwendet.
so der Autor:
Hier ist ein leicht modifiziertes Standard MT4 close.mq4 SkriptLegen Sie die Datei im Ordner MetaTrader\experts\Scripts ab,
Sein Skript funktioniert also nur einmal - ich habe es in den Chart eingefügt, das Skript hat funktioniert(Positionen geschlossen) und wurde dann wieder entladen.
Sie brauchen kein Skript, Sie brauchen einen EA.
Nein, da bin ich anderer Meinung. Dieser Code
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
ist getestet und funktioniert. Hier handelt es sich um einfache benutzerdefinierte Double-Arrays, und CopyRates() füllt ein Array von Strukturen, so dass Sie Max und Min nicht mit Array-Funktionen auswählen können.
Nun, ich sage Ihnen, ich habe Ihren Code auch sehr aufmerksam beobachtet. Also - der Witz ist über mich.
SZY... Aber mein Code gibt vier Werte zurück: High/Low/Highest/Lowest, Ihrer gibt nur High und Low zurück, und mein Code prüft den Erfolg des Datenkopierens (wenn auch nicht alle), Ihrer nicht...
Auf diese Weise prüft mein Code, ob die erforderlichen Daten vollständig kopiert wurden:
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+