Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 56
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 verfeinere sie noch:
wenn die Bedingung erfüllt ist
offene Bestellung 1
ob sich der Preis dorthin bewegt hat, wo er sollte oder nicht
offene Bestellung 2
LastLot= Bestellung 2 (oder höhere Zahl)
LetzterPreis= Bestellung2 (oder höhere Zahl)
Wenn der Preis sich bewegt oder nicht bewegt hat, wo er sich bewegen sollte...
LastLot= Bestellung 3 (oder höhere Zahl)
LastPrice= Bestellung 3 (oder eine höhere Zahl)
Das Problem ist, dass der letzte (oder nicht) Auftrag immer zwischen einem StopLoss und einem TakeOut liegt, was bedeutet, dass er nicht zurückgesetzt wird, wenn die anderen geschlossen werden, da der Auftrag selbst noch vorhanden ist. Wie können wir sie mit den anderen verbinden, wenn wir die Anzahl der Aufträge nicht kennen?
Der Mechanismus, den letzten, ersten oder vorletzten an die anderen zu binden, hat sich als ineffizient erwiesen, da sich ihre Anzahl mit den Zahlen ändert.
Das Ergebnis sollte in etwa lauten: "Wenn ein Auftrag der angegebenen Reihe abgeschlossen ist, schließe alle anderen".
Serienprüfung - die erste Order der aktuellen Richtung (eine andere Order wird nicht geöffnet) - hier sollte entweder ein zusätzlicher Bezeichner oder eine andere Bindungsmethode verwendet werden. Der Schlüssel - der erste Auftrag wird gemäß den Bedingungen eröffnet, die restlichen Aufträge sind Hilfsaufträge.
irgendwelche Gedanken?
Ich verfeinere sie noch:
wenn die Bedingung erfüllt ist
offene Bestellung 1
ob sich der Preis dorthin bewegt hat, wo er sollte oder nicht
offene Bestellung 2
LastLot= Bestellung 2 (oder höhere Zahl)
LetzterPreis= Bestellung2 (oder höhere Zahl)
Wenn der Preis sich bewegt oder nicht bewegt hat, wo er sich bewegen sollte...
LastLot= Bestellung 3 (oder höhere Zahl)
LastPrice= Bestellung 3 (oder eine höhere Zahl)
Das Problem ist, dass der letzte (oder nicht) Auftrag immer zwischen einem StopLoss und einem TakeOut liegt, was bedeutet, dass er nicht zurückgesetzt wird, wenn die anderen geschlossen werden, weil der Auftrag selbst noch vorhanden ist. Wie können wir sie mit den anderen verbinden, wenn wir die Anzahl der Aufträge nicht kennen?
Der Mechanismus, den letzten, ersten oder vorletzten an die anderen zu binden, hat sich als ineffizient erwiesen, da sich ihre Anzahl mit den Zahlen ändert.
Das Ergebnis sollte in etwa lauten: "Wenn ein Auftrag der angegebenen Reihe abgeschlossen ist, schließe alle anderen".
Serienprüfung - die erste Order der aktuellen Richtung (eine andere Order wird nicht geöffnet) - hier sollte entweder ein zusätzlicher Bezeichner oder eine andere Bindungsmethode verwendet werden. Der Schlüssel - der erste Auftrag wird gemäß den Bedingungen eröffnet, die restlichen Aufträge sind Hilfsaufträge.
Haben Sie eine Idee?
Es ist unklar. Versuchen Sie, Ihre Gedanken klarer auszudrücken.
Es geht um Folgendes:"Wenn der Preis in die richtige Richtung geht oder nicht, sollten wir Auftrag 2 eröffnen" - wie ist es zu verstehen, dasswir auf jeden Fall Auftrag 2 eröffnen sollten?
Und wir werden immer mehr "oder sonst" bekommen.
Und wenn wir uns nicht Fragen stellen wollen wie: "Wie kann man ihn mit den übrigen Aufträgen verbinden, wenn der Preisbetrag nicht bekannt ist", sollten wir zuerst den Betrag herausfinden.
Es ist verwirrend, unverständlich. Versuchen Sie, Ihre Gedanken klarer zu formulieren.
Dieses"wenn der Kurs sich in die richtige Richtung bewegt hat oder nicht - um Auftrag2 zu eröffnen" - wie sollen wir das auf jeden Fall verstehen"um Auftrag2 zu eröffnen"?
Und wir werden immer mehr "oder sonst" bekommen.
Und wenn wir uns nicht mit Fragen wie"Wie können wir es mit den übrigen Aufträgen in Verbindung bringen, wenn wir den Betrag nicht kennen" auseinandersetzen wollen, sollten wir zuerst den Betrag herausfinden.
OK, mit Zahlen
EURUSD=1,10000
einen Befehl zur Eröffnung eines Kaufauftrags gemäß dem TP (bereits geschrieben)
wenn EURUSD=1.10200, geben wir einen Kaufauftrag (bereits geschrieben)
wenn EURUSD=1.09800 zu "kaufen" (es ist bereits geschrieben)
und so weiter mit einer Schrittweite von 200
wenn einer der Aufträge geschlossen ist (Stopps und Übernahmen werden gesetzt, aber nicht bei allen)
Schließen Sie das gesamte Gitter
Suche nach einer Möglichkeit, das Netz zu identifizierenOK, mit Zahlen
EURUSD=1,10000
Befehl zur Eröffnung eines Kaufauftrags gemäß dem TP zum aktuellen Preis (bereits geschrieben)
wenn EURUSD=1.10200, um den Kaufauftrag zu ergänzen (bereits geschrieben)
wenn EURUSD=1.09800 zu "kaufen" (es ist bereits geschrieben)
und so weiter mit einer Schrittweite von 200
wenn einer der Aufträge geschlossen wird (Stopps und Übernahmen sind bereits festgelegt)
das gesamte Gitter schließen
Suche nach einer Möglichkeit, das Gitter zu identifizierenEs können Kommentare mit der Bestellnummer hinzugefügt werden. Und wenn die gesamte Reihe von Aufträgen eines Typs - dann sollten sie einfach neu zu berechnen und die Menge zu beheben.
Ich hatte an Kommentare gedacht, aber nach den Rückmeldungen zu urteilen, hält der Chefkoch sie für ungenießbar und löscht sie entweder oder ändert sie in seine eigenen.
Und was das Zählen angeht, muss ich also zählen und die Zahl notieren, wenn ich eine weitere hinzuzähle?
Und was das Zählen angeht: Muss ich die Menge zählen und aufzeichnen, wenn ich ein weiteres Exemplar hinzufüge?
Ja. Und wenn sich die Zahl seit dem letzten Mal verringert hat, schließen Sie alle verbleibenden.
Sie können auch die abgeschlossenen Aufträge in der Historie verfolgen. Und schließen Sie die Serie, wenn ein neuer Auftrag erscheint, der die angegebenen Merkmale erfüllt.
Sie können TP/SL auch nicht in der Order setzen, sondern im Expert Advisor die Summe der TP/SL für die gesamte Serie berechnen. Verwenden Sie sie zum Abschluss der Serie. Die Vorteile - die Brokerfirma sieht die Breakpoint-Levels nicht, und das Problem, die Serie zu finden, bleibt bestehen, wenn ein TP oder ein SL bei einer Order ausgelöst hat.double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
OK, lassen Sie mich Ihnen eine einfache Frage stellen. Wie kann ich den EA so einstellen, dass er automatisch das Lot in Abhängigkeit von der Hebelwirkung berechnet...sagen wir Hebelwirkung 1:50 Einzahlung 3000...
Versuchen Sie es so:
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}