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 Mladen, danke für deine Hilfe, ich habe deine Änderungen angewandt, aber es funktioniert nicht wirklich, vielleicht wäre es einfacher, wenn der EA einfach alle bestehenden offenen Trades ignoriert, d.h. sie einfach offen lässt, und dann seinen eigenen neuen einzelnen Trade öffnet und schließt
Im Moment öffnet und schließt der EA seinen eigenen Handel, aber er schließt auch alle weiteren bestehenden offenen Geschäfte
erhöhen.
Aus einem Teil des Codes könnte ich folgendes vorschlagen. Wenn ein Boolean-Parameter NoClosesiserstellt wird, und wenn dieser Parameter auf true gesetzt wird, sollte er keine Aufträge schließen, wenn er wie das Snippet angewendet wird (wenn CB und CS ungleich 1 sind, wird dieser Code keine Aufträge schließen)
Mit freundlichen Grüßen
Mladen
Hi Mladen, danke für deine Hilfe, ich habe deine Änderungen übernommen, aber es funktioniert nicht wirklich, vielleicht wäre es einfacher, wenn der EA einfach alle bestehenden offenen Trades ignoriert, d.h. sie offen lässt, und dann seinen eigenen neuen einzelnen Trade öffnet und schließt Im Moment öffnet und schließt er seinen eigenen Trade, aber er schließt auch alle zusätzlichen bestehenden offenen Trades
erhöhen
Von einem partiellen Code ist das, was ich vorschlagen könnte. Wenn ein boolescher Parameter NoClosesiserstellt wird, und wenn dieser Parameter auf true gesetzt wird, sollte er die Aufträge nicht schließen, wenn er wie das Snippet angewendet wird (wenn CB und CS ungleich 1 sind, wird der Code die Aufträge nicht schließen)
Gruß
MladenDas ist richtig, aber wenn ich es nicht falsch verstanden habe, bedeutet das, dass der vom EA eröffnete Handel auch nie geschlossen wird, so dass er nur zwischen Kauf und Verkauf wechselt?
Ja, das ist richtig.
Soweit ich verstanden habe, war das Ihre Idee: den EA Aufträge öffnen zu lassen und dann würden Sie die Aufträge manuell verwalten (schließen). Mit diesem Parameter können Sie ihn sogar auf "false" zurücksetzen und dann wird der EA die Aufträge wieder schließen - er ist also sozusagen "von außen steuerbar".
Das ist richtig, aber wenn ich es nicht falsch verstanden habe, bedeutet das, dass der vom EA eröffnete Handel auch nie geschlossen wird, so dass er nur zwischen Kauf und Verkauf wechselt?
Ja, das ist richtig. Soweit ich das verstanden habe, war das Ihre Idee: den EA Aufträge öffnen zu lassen und dann die Aufträge manuell zu verwalten (zu schließen). Mit diesem Parameter können Sie ihn sogar auf "false" zurücksetzen, damit der EA die Aufträge wieder schließt - er ist also gewissermaßen "von außen steuerbar".
Ah sorry, ich war zweideutig, ich möchte, dass der EA seinen Auftrag öffnet und schließt und alle bestehenden Aufträge ignoriert, also zum Beispiel
1. Ich habe 5 Verkaufsaufträge offen
2. Ich wende den EA an und er öffnet 1 Kaufauftrag
3. Ich habe jetzt 5 Verkaufsaufträge und 1 Kaufauftrag
4. Der EA löst jetzt einen Verkauf aus, also schließt er seinen Kauf
5. Ich habe jetzt 6 Verkaufsaufträge (5 bestehende, 1 EA-Verkaufsauftrag)
6. Der EA löst jetzt einen Kaufauftrag aus und schließt seinen Verkaufsauftrag.
7. Ich habe jetzt 5 Verkäufe und 1 Kauf usw.
Ich schließe die bestehenden Verkäufe, der EA ignoriert alle anderen Geschäfte außer seinen eigenen wie oben beschrieben.
erhöhen.
Dies ist bereits der Fall, wenn Sie den Magic-Parameter auf einen anderen Wert als 0 setzen (dies ist ein Teil des Codes, der prüft, ob ein Kaufauftrag kurz vor dem Abschlussauftrag geschlossen werden soll).
Wenn also der"Magic"-Parameter ungleich 0 ist und der Wert für "Magic" eindeutig ist, werden nur Aufträge geschlossen, die von ihm selbst eröffnet wurden
Tut mir leid, dass ich mich unklar ausgedrückt habe. Ich möchte, dass der EA seinen Auftrag öffnet und schließt und alle bestehenden Aufträge ignoriert, also zum Beispiel
1. Ich habe 5 Verkaufsaufträge geöffnet
2. Ich wende den EA an und er öffnet 1 Kaufauftrag
3. Ich habe jetzt 5 Verkaufsaufträge und 1 Kaufauftrag
4. Der EA löst jetzt einen Verkauf aus, also schließt er seinen Kauf
5. Ich habe jetzt 6 Verkaufsaufträge (5 bestehende, 1 EA-Verkaufsauftrag)
6. Der EA löst jetzt einen Kaufauftrag aus und schließt seinen Verkaufsauftrag.
7. Ich habe jetzt 5 Verkäufe und 1 Kauf usw.
Ich werde die bestehenden Verkäufe schließen, der EA ignoriert alle anderen Geschäfte außer seinem eigenen wie obenTrade OncePerBar für bestimmten TimeFrame
Hallo, liebe fEllA's!
Ich habe einen EA (jaaa, wer nicht), der auf dem Testgerät gut funktioniert und mehrere Trades pro 4H Bar macht, wie angewiesen. Jetzt, beim Testen auf Demo (Alpari UK) mit 11 Paaren, EA nimmt nur 1 Handel, während es mehr nehmen sollte (3 max, wie angewiesen). Nur jeder 4H Bar, wenn die Bedingungen erfüllt sind.
Ich habe 'Semaphor' Funktion mit GlobalVariable kodiert, und dieses Stück Code, um zu verhindern, dass mehrere Aufträge öffnen innerhalb 1 vordefinierten TimeFrame (4H in diesem Fall):
//Kaufen
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
if (SignalsOnly)
{
// ------ Alert sollte nur einmal pro Signal ODER einmal alle 15 oder 30 Minuten erfolgen
if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);
sonst CheckAlertTime = iTime (NULL, 5, 0);
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY Signal");
if (PlaySounds) PlaySound (WhichSound);
}
if (!IsTrade && !SignalsOnly)
{
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
sonst CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
//Prüfen der freien Marge
if (AccountFreeMargin() < (1000 * Lots))
{
Print ("Wir haben kein Geld. Freie Marge = ", AccountFreeMargin());
return(0);
}
if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
{
if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);
sonst Lots = Lots;
}
if (TradeIsBusy() && IsTradingAllowed() < 0)
return (-1);
RefreshRates();
Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue);
wenn (Ticket > 0)
{
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("7Qi BUY opened: ", OrderOpenPrice());
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY opened");
if (PlaySounds) PlaySound (WhichSound);
}
sonst
{
Print ("Fehler beim Öffnen von BUY: ", Err);
}
}
// TradedThisBar = Bars;
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
TradeIsNotBusy();
return (0);
}
}
//-------------------------------------------------
Ist es möglich, dass dieser Code:
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
sonst CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
verhindert, dass EA in der Mitte der Stunde handelt? Prüft er nur am Anfang des Balkens?
Wenn ich die Funktion "TradedThisBar = Bars" verwende, müsste ich EA nur auf 1 TimeFrame lassen, richtig?
Die Funktion "Semaphor" ist auch in TrailingStops und PartialCloseLots kodiert.
Ich danke Ihnen ALLEN für Ihre Hilfe,
Viel Spaß!
Simon
Slowenien
Iiiiiik - Ich habe das Problem gefunden
Hallo!
Ich habe das Problem gefunden - es ist höchstwahrscheinlich eine Kombination aus:
if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)
return (-1);
//-----------------------------------------------------------------------------------------
int IsTradingAllowed (int MaxWaitingSec = 30)
{
if (!IsTradeAllowed())
{
int StartWaitingTime = GetTickCount();
Print ("Handelskontext ist belegt! Warten Sie, bis er frei ist...");
if (Alerts) Alert (Symbol() + " EA-Handel nicht erlaubt! Waiting...");
while (true)
{
if (IsStopped())
{
Print ("EA wurde beendet!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )
{
Print( "Wartelimit überschritten (" + MaxWaitingSec + " sec)!" );
return(-2);
}
if (IsTradeAllowed())
{
Print ("Der Handelskontext ist jetzt frei!");
return(0);
}
Sleep (100);
}
}
sonst
{
Print ("Handelskontext ist frei!");
return(1);
}
}
*/
//-----------------------------------------------
int TradeIsBusy (int MaxWaitingSec = 30)
{
if (IsTesting()) return(1);
int Err = 0, StartWaitingTime = GetTickCount();
while (true)
{
if (IsStopped())
{
Print ("EA wurde gestoppt!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Wartezeit (" + MaxWaitingSec + " sec) überschritten!");
if (Alerts) Alert (Symbol() + " EA Wartezeit überschritten!");
return(-2);
}
if (GlobalVariableCheck ("TradeIsBusy"))
break;
sonst
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);
Sleep (100);
fortfahren;
}
}
if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1);
sonst
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);
Sleep(100);
fortfahren;
}
}
}
while (true)
{
if (IsStopped())
{
Print ("EA wurde beendet!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Wartezeit (" + MaxWaitingSec + " sec) überschritten!");
if (Alerts) Alert (Symbol() + " Wartezeit überschritten!");
return (-2);
}
if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);
sonst
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSetOnCondition - Fehler # ", Err);
fortfahren;
}
}
if (Alerts) Alert (Symbol() + " - waiting another EA to finish trading...");
Sleep (1000);
}
}
//--------------------------------
void TradeIsNotBusy()
{
int Err;
if (IsTesting())
{
return(0);
}
while (true)
{
if (IsStopped())
{
Print (Symbol() + " EA wurde gestoppt!" );
return(-1);
}
if (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);
sonst
{
Err = GetLastError();
if (Err != 0)
Print ("TradeIsNotBusy - GlobalVariableSet - Fehler # ", Err);
}
Sleep (100);
}
}
//-----------------------------------------------------------------------------------------------
Ich werde es ohne die Funktion IsTradeAllowed versuchen.
Trotzdem vielen Dank,
Viel Spaß!
Simon
Fehlercode 130
----- gelöscht ----- es ist nicht mehr notwendig......
Herunterladbare mq4-Anleitung
Hallo Leute,
ich kann kein Tutorial oder Nachschlagewerk ( nicht online !! ) über den mq4 Code finden.
Könnt ihr mir helfen?
Mit freundlichen Grüßen
GELÖST, musste die Datei mit einem Dienstprogramm dekomprimieren.