Wie programmiert man? - Seite 250

 
mladen:

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

increase:
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
 
mladen:
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ß

Mladen

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 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".

increase:
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?
 
mladen:
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).

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

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

increase:
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 oben
 

Trade 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.