Grundlegende Fragen ... - Seite 8

 

Schauen Sie sich dieses Thema an: https://www.mql5.com/en/forum/178677

 
newdigital:
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!

Dateien:
10p3v0.03_1.mq4  12 kb
 

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

}

}

}

}

}