Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 574
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 Idee der Eröffnung von Aufträgen auf ein Kauf-oder Bärengriff Signal, wie man es so, dass es nur ein Kauf / Verkauf Handel und eine schwebende Ordnung Handel, habe ich eine offene auf jedem Tick des Handels. Helfen Sie mit, das Problem zu lösen.
Nun, es gibt eine andere Möglichkeit: Für jede Kerze im Bereich werden Streichhölzer geschrieben. In der vorherigen Version wurden die Übereinstimmungen nur für eine Kerze geschrieben - d.h. es wurde keine Übereinstimmung für die Kerze geschrieben, die mit dieser übereinstimmt.
Artem, ich danke dir. Ich werde mich damit befassen.
Die hohen Werte können gerundet werden, z. B. können wir den Wert 1,23456 auf 1,2346 runden.
Ich verstehe, was ich meine. Ich füge auch eine Variable in den Einstellungen hinzu, in der Sie die Abweichung vorgeben können, innerhalb derer die Werte von hoch als gleich angesehen werden. Das ist notwendig, weil es bei vierstelligen Anführungszeichen oft kein solches Problem gibt, aber bei fünfstelligen Anführungszeichen ist die Suche nach exakten Übereinstimmungen unendlich oft möglich.
Artem, ich danke dir. Ich werde es mir ansehen.
Die Rundung ist eindeutig. Ich habe auch eine Variable in die Einstellungen eingefügt, mit der ich den Abweichungswert vorgeben kann, innerhalb dessen die hohen Werte als gleich angesehen werden. Das ist notwendig, weil es bei vierstelligen Anführungszeichen oft kein solches Problem gibt, aber bei fünfstelligen Anführungszeichen ist die Suche nach genauen Übereinstimmungen endlos.
Bitte sehr. In der zweiten Fassung ist mir eine Ungenauigkeit unterlaufen. Da in der ersten Version die Suche nach den Übereinstimmungen bei der nächsten Kerze ab dem Schleifenindex begann, wurde die Hauptschleife nach der Anzahl der Kerzen minus eins durchlaufen, um die beiden äußersten Kerzen zu vergleichen. In der zweiten Version suchen wir nun für jede Kerze nach Übereinstimmungen über den gesamten Bereich, also in der Zeile
sollten Sie die Anzahl der Balken ändern in
Überprüfen Sie die Anzahl der eingestellten Aufträge und die Anzahl der offenen Positionen, bevor Sie eine neue Position eröffnen oder einen neuen schwebenden Auftrag erteilen.
d.h. ist es notwendig, eine Bedingung hinzuzufügen, um die Anzahl der Aufträge und Positionen in den Bedingungen für einen Handel zu überprüfen?
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&h2>h1&h1<o2&o1<c1&&l2>l1&&o3>c3&&o4>c4){ //first condition
if (OrdersTotal()==0) //zweite Bedingung
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } ................................... und so für jeden Handel?
Und welche Funktion zählt die Anzahl der offenen Stellen?
Ich glaube, ich habe das Problem gelöst:
if (Stunde()>=0&Stunde()<23){
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l1&&o3>c3&&o4>c4){
wenn (PositionenGesamt()<=1)
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } //eröffnet Kaufen
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l1&&o3>c3&&o4>c4){
if (PositionenGesamt()==1&Auftragsart()==0)
OrderSend(Symbol(), OP_SELLSTOP,Lot,l2,10,h2,0);} //Aufgeschobener SellStop-Auftrag
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<c3&&o4<c4){
wenn (PositionenGesamt()<=1)
OrderSend(Symbol(),OP_SELL,Lot,o,10,h1,0); } //Öffnet Verkauf
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<c3&&o4<c4){
if (PositionenGesamt()==1&Auftragsart()==1)
OrderSend(Symbol(), OP_BUYSTOP,Lot,h2,10,l2,0);} //Aufgeschobener BuyStop-Auftrag
}
//+------------------------------------------------------------------+
//Funktion, die die Gesamtzahl der offenen Positionen zurückgibt |
// |
//+------------------------------------------------------------------+
int PositionsTotal() {
int pos = 0;
for (int i=0; i<OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
pos++;
}
return(pos);
}
//+------------------------------------------------------------------+
Nun, hier ist eine andere Möglichkeit: Für jede Kerze im Bereich werden Streichhölzer geschrieben. In der vorherigen Version wurden die Übereinstimmungen nur für eine Kerze geschrieben - d.h. es wurde keine Übereinstimmung für die Kerze geschrieben, die mit dieser übereinstimmt.
Gut. Aber wenn der Höchststand der Kerze 2 mit dem Tiefststand der Kerze 7 zusammenfällt, werden zwei Übereinstimmungen gefunden: 2 <=> 7, 7 <=>2. Und wie sieht es mit der Berücksichtigung von Umkehrpaaren aus, aber ohne die zusätzliche Schleife?
Können Sie das Problem nicht in einem Durchgang lösen, ohne verschachtelte for-Schleifen zu verwenden:)))?
Gud. Wenn das Hoch der Kerze 2 mit dem Hoch der Kerze 7 übereinstimmt, werden zwei Übereinstimmungen gefunden: 2 <=> 7, 7 <=>2. Und wie sieht es mit der Berücksichtigung inverser Paare aus, allerdings ohne die zusätzliche Schleife?
Wie wäre es, das Problem in einem Zug zu lösen, ohne verschachtelte for-Schleifen zu verwenden:)))?
:) Versuchen Sie nicht, michschwach zu machen ;) Natürlich denke ich, dass man das Problem mit einer Schleife lösen kann, aber ich war zu faul, um länger darüber nachzudenken, und habe es so gemacht, wie es mir auf Anhieb einfiel.
Natürlich werden hier alle gepaarten oder mehr Kerzen in den Matchdaten jeder Kerze erfasst. Deshalb gibt es Querverweise zwischen ihnen. Ich schlage nur Varianten vor, ohne zu wissen, wofür sie sind.
Außerdem ist es möglich, die Aufgabe der Optimierung von Berechnungen zu lösen, aber ich brauche das nicht.
Und was ist, wenn Sie genau die Daten für jede Kerze und alle Streichhölzer benötigen, und was ist, wenn plötzlich, plötzlich ... gibt es nur ....
Ich habe also keine Zeit und keine Lust. Ich habe meine Zeit verschwendet, anstatt meine eigenen Codes zu schreiben.
SZY, vielleicht sollten Sie auch Kohonen-Methoden verbinden, wenn Sie den erforderlichen Eingabeparameter kennen.
Im Allgemeinen - keine Zeit und keine Lust. Und so verschwendete ich Zeit, anstatt meinen eigenen Code zu schreiben.
Das ist schade, das ist schade.
Bitte sehr. In der zweiten Fassung ist mir eine Ungenauigkeit unterlaufen. Da in der ersten Version ab der nächsten Kerze ab dem Schleifenindex nach Übereinstimmungen gesucht wurde, wurde die Hauptschleife um die Anzahl der Kerzen minus eins erweitert, um die beiden äußersten Kerzen zu vergleichen. In der zweiten Version suchen wir nun für jede Kerze nach Übereinstimmungen über den gesamten Bereich, also in der Zeile
sollten Sie die Anzahl der Balken ändern in
Bitte erklären Sie uns die Bedeutung dieser Zeilen:
input int Search_Period=10; // Anzahl der zu kopierenden Candlesticks
int searchPeriod=(Search_Period<1)?1:Search_Period; // was bedeuten die Symbole "?", ":"?
input int Delta=2; // Anzahl der Zulassungspunkte
int delta=(Delta<0)?0:Delta; // was bedeuten die Symbole "?", ":"?
Bitte erklären Sie mir die Bedeutung dieser Zeilen:
input Search_Period=10; // Anzahl der zu kopierenden Candlesticks
int searchPeriod=(Search_Period<1)?1:Search_Period; // was bedeuten die Zeichen "?", ":"?
input int Delta=2; // Anzahl der Zulassungspunkte
int delta=(Delta<0)?0:Delta; // was bedeuten die Symbole "?", ":"?
Von der Referenz:
Bedingter Operator ?
Die allgemeine Form eines ternären Operators sieht wie folgt aus:
Ausdruck1? Ausdruck2: Ausdruck3
Als erster Operand kann "expression1" ein beliebiger Ausdruck sein, der einen Wert vom Typ bool ergibt. Wenn das Ergebnis wahrist , wird der durch den zweiten Operanden "expression2" angegebene Operator ausgeführt .
Wenn der erste Operand falsch ist, wird der dritte Operand, "expressionZ", ausgeführt. Der zweite und dritte Operand, d. h. "expression2" und "expressionZ", müssen Werte desselben Typs zurückgeben und dürfen nicht vom Typ "void" sein. Das Ergebnis der Ausführung des bedingten Operators ist das Ergebnis von "Ausdruck2" oder das Ergebnis von "Ausdruck3", je nach dem Ergebnis von "Ausdruck1".
//--- Renormierung der Differenz zwischen Eröffnungs- und Schlusskurs durch die tägliche Spanne
double true_range = (High==Low)?0:(Schließen-Öffnen)/(Hoch-Tief);
Dieser Eintrag ist gleichbedeutend mit folgendem
double_range;
if(High==Low)true_range=0;// wenn High und Low gleich sind
else true_range=(Close-Open)/(High-Low);// wenn High ungleich Null ist