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
Schauen Sie sich dieses Thema an: https://www.mql5.com/en/forum/178677
Sehen Sie sich diesen Thread an: https://www.mql5.com/en/forum/178677
Vielen Dank, für die Anleitung zum Öffnen der Datei und den Download-Link
10Punkte3
PLEAASEEE, PROGRAMMIERER!
Wir brauchen in 10points3 EA, dass, wenn der dritte Handel öffnet, der erste geschlossen wird, ich versuche es, aber es ist immer noch alle Positionen zu schließen.
Eigentlich haben wir:
if (PreviousOpenOrders>OpenOrders)
{
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=Auftragsart();
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Blue); }
if (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red); }
return(0);
}
Ich habe mir Folgendes überlegt:
1. die magische Zahl für den ersten Handel ändern, wenn der zweite eröffnet wird, zum Beispiel magicnumber+1
2. wenn der dritte Handel eröffnet wird, schließe ich den ersten mit der zugewiesenen magicnumber+1.
Liege ich richtig?
Oder wie kann ich auf andere Weise den ersten Handel identifizieren, um ihn später zu schließen?
Wenn Sie mich anleiten oder die Änderungen vornehmen können, umso besser, denn ich bin kein Programmierer, ich lerne gerade.
Diese Änderung wäre der Beginn des heiligen Grals!!!
10Punkte3
Entschuldigung, der EA.
Und es ist in diesem Thread:
https://www.mql5.com/en/forum/174975
Danke!
Programmierhilfe - Rückgabeoperator
hallo
ich bin Anfänger in der mt4 Programmierung und versuche nun oft eine Lösung für die Übergabe von Variablen aus einer void Funktion an das Hauptprogramm "start()" zu finden.
unten sehen Sie ein Beispiel und die Frage ist, wie kann ich die Werte der Variablen "CountOpenSell", "CountOpenBuy", "ProfitSell" und "ProfitBuy" an das start() - Hauptprogramm......... übergeben
ich habe meinen Vorschlag hinzugefügt (return`s in BOLD Buchstaben), aber ich weiß nicht, ob es richtig ist und wie der richtige Code für das "start()" Hauptprogramm ist???
sorry für mein schlechtes Englisch und alle Hilfe
vielen Dank
Viele Grüße
forex2006
void CallBuySellProfit()
{ ProfitBuy=0;
ProfitSell=0;
CountOpenSell=0;
CountOpenBuy=0;
for (i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++;}
if (OrderType()==OP_BUY) {ProfitBuy = ProfitBuy + OrderProfit();CountOpenBuy++;}
}
else Print( "Fehler bei Orderauswahl ", GetLastError());
}
return(CountOpenSell);
return(CountOpenBuy);
return(ProfitSell);
return(GewinnKauf);
}
forex2006 Programmierhilfe - Rückgabeoperator
Hallo forex2006,
Wenn du wirklich mql lernen willst, empfehle ich dir codersguru tutorials, dort habe ich angefangen. Was deine Frage betrifft, so kann eine ungültige Funktion keinen Wert zurückgeben. Wenn du Werte aus ungültigen Funktionen erhalten willst, musst du globale Variablen verwenden. Am besten ist es, eine Funktion zu verwenden, die einen Wert zurückgibt, der mit Parametern versehen ist, die angeben, welche Werte Sie haben möchten. Unten sehen Sie ein einfaches Beispiel. Versuchen Sie, die Verwendung globaler Variablen in Funktionen zu vermeiden, da dies später zu Problemen führen könnte.
Ich hoffe, es hilft
int start()
{
double ProfitBuy = CallBuySellProfit(OP_BUY,false);
double ProfitSell = CallBuySellProfit(OP_SELL,false);
int CountOpenBuy = CallBuySellProfit(OP_BUY,true);
int CountOpenSell = CallBuySellProfit(OP_SELL,true);
Comment( "GewinnKaufen: "+DoubleToStr(ProfitBuy,2) +"\n "+
"ProfitSell: "+DoubleToStr(ProfitSell,2) +"\n "+
"CountOpenBuy: "+DoubleToStr(CountOpenBuy,2)+"\n "+ "CountOpenSell: "+DoubleToStr(CountOpenBuy,2) +"\n "+
"CountOpenSell: "+DoubleToStr(CountOpenSell,2)+"\n "+
"");
zurück;
}
double CallBuySellProfit(int iOrderType, bool bCount)
{
double dProfit = 0;
int iZahl = 0;
for (int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==iOrderType)
{
dProfit = dProfit + OrderProfit();
iCount++;
}
}
sonst
{
Print( "Fehler bei der Auftragsauswahl ", GetLastError());
}
}///end for
if(bCount)return(iCount);
sonst return(dProfit);
}//end CallBuySellProfit
EA-Handel auf demselben Balken stoppen
Hallo, irgendwie zu setzen Code, so dass der EA prüft, ob Trades wurden bereits auf dieser Bar dann nicht mehr Trades bis eine neue Bar platzieren?
Dankeschön
matrixebiz, haben Sie die Möglichkeit in Betracht gezogen, dass ein Handel in derselben Kerze eröffnet und geschlossen wird, bevor die Kerze geschlossen wurde? Sie sollten wahrscheinlich auch die History-Liste überprüfen.
Ich habe diese kleine Funktion, die ich geschrieben habe, immer auf alle meine EAs portiert, vielleicht ist sie auch für Sie nützlich.
bool DecideToOpenTrade()
{
int total = OrdersTotal();
if (total > 0)
{
for(int cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)
{
return (false);
}
}
}
}
// in case trades has already opened and closed within the candle
int histotal = OrdersHistoryTotal();
if (histotal > 0)
{
for(cnt=0;cnt<histotal;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)
{
if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle
{
return (false);
}
}
}
}
}
return (true);
}
int start()
{
// some time check codes first.. blah blah
// ...
// ...
// ...
// check signals
if (Should_Buy())
{
if (DecideToOpenTrade())
{
//... trade opening codes here
}
}
if (Should_Sell())
{
if (DecideToOpenTrade())
{
//... trade opening codes here
}
}
}
Hinweis: Diese Funktion setzt voraus, dass Sie einen eindeutigen Wert für EA_MAGIC_NUM festgelegt haben. Auf diese Weise werden keine von anderen EAs eröffneten Trades überprüft.
Should_Buy() und Should_Sell() sind Funktionen, die ich in allen meinen EAs erstelle, um festzustellen, ob ein Kauf- oder Verkaufssignal aufgetreten ist.
Ich hoffe, das hilft Ihnen. Schreiben Sie mir eine PM, wenn Sie weitere Erklärungen benötigen.
Grüße,
Zen
aktualisierter Beitrag unten...
Dies scheint bei mir zu funktionieren Danke
void DesideToOpen()
//----------------------------------------------------------------+
//----------------------------------------------------------------+
{
int total = OrdersTotal();
if (total > 0)
{
for(int cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS))
{
if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;
}
}
}
// in case trades has already opened and closed within the candle
int histotal = OrdersHistoryTotal();
if (histotal > 0)
{
for(cnt=0;cnt<histotal;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderComment() == EA_Name + MagicNumber)
{
if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle
}
}
}
}
}