Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1154
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
Hallo Freunde.
Wie kann man erreichen, dass die Stop-Loss-, Tekprofit- und Trailing-Werte als Prozentsatz anstelle von Pips angezeigt werden?
Diese Formel ist zu unübersichtlich und funktioniert überhaupt nicht
StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);
Ich möchte die einfachste Form des Prozentsatzes haben.
Doppelter Stoploss = 0,05;
--------
Gewinn=Gebot-Stop-Verlust in Prozent(es ist ein unschönes Beispiel, aber nur zur Verdeutlichung)
Ich danke Ihnen.
Ein schlampiges Beispiel führt zu einer schlampigen Antwort. Um sie zu verstehen, müssen Sie wissen, woran der Prozentsatz gemessen wird.
.. Wer braucht Hilfe bei der Erstellung eines EA, können Sie mir eine E-Mail schicken. Ich werde helfen
Hilfe nehmen den Preis von Null bar, hier ist die Diskussion
https://www.mql5.com/ru/forum/160683/page237#comment_5350688
Ein fadenscheiniges Beispiel führt zu einer fadenscheinigen Antwort. Um das zu verstehen, muss man wissen, woran die Prozentsätze gemessen werden.
Ich hab's.
Ich werde versuchen, mich klarer auszudrücken.
Mein Code ist ursprünglich folgendermaßen geschrieben:
extern double StopLoss =0;
extern double TakeProfit =0;
extern double SL_PERCENT = 0,02;
extern double TP_PERCENT = 0.03;
extern double TRALL_PERCENT = 0.01;
extern double Lots =0.5;
Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,NormalizeDouble(OrderOpenPrice+(OrderOpenPrice + StopLoss)/100*SL_PERCENT,Digits),NormalizeDouble(OrderOpenPrice-(OrderOpenPrice - TakeProfit)/100*TP_PERCENT,Digits),",Magic,0,Red);
StopLoss wird ausgelöst, aber nicht um 0,02 %, sondern um 0,43 %, was nicht korrekt ist. Ich weiß nicht, wie es mit TakeProfit aussieht, da ich es noch nie ausprobiert habe, aber es scheint ebenfalls falsch zu sein.
Ich habe einige Hinweise darauf, dass der Code nicht korrekt ist.
Noch eine Sache, die vielleicht wichtig ist. Meine Bestellungen sind für alle meine Depots für 3-4 Paare geöffnet. Manchmal um fünf.
Außerdem möchte ich solche Parameter wie StopLoss, Takeprofit, TrailingStop in Prozent und nicht in Punkten ändern.
Zum Beispiel,
1) Takeprofit=OrderOnProfit+%TP_PERCENT
2) Stoploss=OrderOnPrice-%SL_PERCENT
D.h.
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,%,%,",Magic,0,clrGreen);
Ich weiß nicht, wie ich sie für die Zwecke der Nachverfolgung weiter modifizieren kann.
Ich habe ein Beispiel aus dem Lernprogramm genommen, aber ich mache offensichtlich etwas falsch.
3.) TrailingStop=Bid-%TRALL_PERCENT
Fall 0: // Kaufauftrag
if (NormalizeDouble(OrderOpenPrice-SL*Point,Digits)*SL_PERCENT/100<=(OrderOpenPrice-Ask) // If below
NormalizeDouble(Bid-(Bid-TS)/100*TRAL_PERCENT,Digits)
|| NormalizeDouble(SL,Digits)==0)
{
SL=Bid-TS*Point; //dann ändern
string Text="Kaufen "; // Text für Kaufen
Ändern=true; // zugewiesen zu ändern.
}
Ich hoffe wirklich, dass ich das erklären konnte.
Ich danke Ihnen.
Wie kann man die Eröffnung eines Geschäfts (OrderSend) genau zu Beginn der Kerze korrekt umsetzen - OnTimer und/oder OnTick,
Um das Terminal nicht zu überlasten (20-30 gleichzeitig geöffnete und verfolgte Charts)?
entdeckt, dass die Verzögerung beim Erscheinen eines neuen Ticks zu Beginn einer Kerze bis zu 5-10 Sekunden betragen kann; der Abstand zum vorherigen Tick ist signifikant (negativ für Transaktionsbedingungen)
p.s. Gleichzeitig soll der Expert Advisor über ein mögliches Geschäft 1-2 Minuten vor der Geschäftseröffnung informieren, d.h. vor Beginn der Kerzeneröffnung.
Wie kann man die Eröffnung eines Geschäfts (OrderSend) genau zu Beginn der Kerze korrekt umsetzen - OnTimer und/oder OnTick,
um das Terminal nicht zu überlasten (20-30 gleichzeitig geöffnete und verfolgte Charts)?
Es wurde herausgefunden, dass die Verzögerung beim Erscheinen eines neuen Ticks am Anfang einer Kerze bis zu 5-10 Sekunden betragen kann, mit einem signifikanten Abstand zum vorherigen Tick (es ist negativ für Handelsbedingungen)
p.s. In diesem Fall soll der Expert Advisor 1-2 Minuten vor der Geschäftseröffnung, d.h. vor Beginn der Kerzeneröffnung, über ein mögliches Geschäft informieren.
Sie müssen alle offenen Charts im Timer anzeigen, um zu sehen, ob ein neuer Balken erscheint.
Sie müssen ein Array von Zeigern auf Instanzen von Klassen erstellen - eine Klasse für jeden Zeitrahmen jedes offenen Charts.
Die Klasse, die das Öffnen einer neuen Bar überwacht, finden Sie in diesem Artikel.
Öffnen Sie das Diagramm und fügen Sie es der Liste der offenen Diagramme hinzu. Schließen Sie das Diagramm - löschen Sie es aus dem Array.
In der Schleife im Timer durchlaufen Sie ein Array von Zeigern auf Instanzen von Klassen und prüfen die Tatsache der Öffnung eines neuen Balkens, die die Klasse im Falle der Bildung eines neuen Balkens zurückgeben wird.
Sie müssen alle offenen Charts im Timer anzeigen, um zu sehen, ob ein neuer Balken erscheint.
Sie müssen ein Array von Zeigern auf Klasseninstanzen erstellen ...
Wie sieht es mit der Verwendung von MQL4 aus?
Und was ist mit - "...es soll 1-2 Minuten vor der Geschäftseröffnung, d.h. bevor sich eine Kerze öffnet, eine vorläufige Meldung über ein mögliches Geschäft machen...", d.h. innerhalb eines Balkens
Willkommen zum Thema https://www.mql5.com/ru/forum/208120#comment_5412193
Ich kann keinen Konsens finden.
Bevor ich den Doppeltyp anzeige, normalisiere ich ihn auf 2 Dezimalstellen, aber manchmal funktioniert das nicht. Warum? Hier ist ein Teil des Codes.
Typ prof[] ist String
Und es treten folgende Probleme auf
Bevor ich den Doppeltyp anzeige, normalisiere ich ihn auf 2 Dezimalstellen, aber manchmal funktioniert das nicht. Warum? Hier ist ein Teil des Codes.
Typ prof[] ist String
Es treten folgende Probleme auf
DoubleToString()
DoubleToString
Konvertiert einen numerischen Wert in eine Zeichenkette.
stringDoubleToString(
doppelterWert,//Zahl
intdigits=8//Anzahl der Dezimalstellen
);
Parameter
Zurückgegebener Wert
Beispiel:
Print("DoubleToString(120.0+M_PI) : ",DoubleToString(120.0+M_PI);
Print("DoubleToString(120.0+M_PI,16) : ",DoubleToString(120.0+M_PI,16);
Print("DoubleToString(120.0+M_PI,-16) : ",DoubleToString(120.0+M_PI,-16);
Print("DoubleToString(120.0+M_PI,-1) : ",DoubleToString(120.0+M_PI,-1));
Print("DoubleToString(120.0+M_PI,-20) : ",DoubleToString(120.0+M_PI,-20);
Irgendein wundersamer Käfer oder etwas anderes.
Wir fügen die Eingaben hinzu:
input datetime test =0;