OrderComment kann von Ihrem Broker überschrieben werden
Sie wollen... Nun, nach meiner Anforderung, wenn der Preis würde sagen, 7 pip [103,603] im Gewinn, der Stop Loss von
1. und 2. Handel wird sagen wir 1 Pip Gewinn [103,543] und der Stop Loss des 3. Handels bleibt bei 103,386.
make extern int BreakEven = 7
(* 10 ) Korrektur bei 5-stelligem Broker, um den Pipwert zu erhalten
ohh, ja, das ist sicherlich ein Manko. All meine harte Arbeit seit dem Abend ist nun umsonst gewesen!
Ich habe versucht, einen Weg zu finden, um die Trades in Abhängigkeit von der Funktion'order comment' zu unterscheiden und habe einen Code geschrieben.
Wie auch immer, der von Ihnen angegebene Code verschiebt den Stop-Loss-Teil zum BE oder zum gewünschten Punkt, aber mein Problem mit dem "dritten" Handel ist immer noch nicht gelöst.
Ich habe auch diesen BE bewegenden Teil des Codes, aber ich bleibe mit dem nicht bewegenden SL für den dritten Handel stecken.
Ich habe gerade eine andere Idee und versuche es jetzt.
if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way
{ //==EURUSD) failsint Magic_Number_3=1303int Magic_Number_2=1302int Magic_Number_1=1301
}
auf diese Weise müssen Sie nach 3 verschiedenen magischen Zahlen suchen
Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....
Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.
Haben Sie meinen Code überprüft?
Die Funktion des Mindestgewinns ist ein "Fehlschlag".
Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!
Aber mein Ziel ist nicht so.
Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt
dass der Handel mit meinem gewünschten Mindestgewinn geschlossen wird.
Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.
Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.
Sie machen es viel zu kompliziert, weil Sie keine Ahnung haben, wie man das macht.
je mehr man liest und versucht, selbst zu programmieren, desto einfacher wird es, komplexere Dinge zu machen
aber fangen Sie mit einfachen Dingen an, wenn Sie ein Programm für einen Handel zum Laufen bringen und es dann später mit mehreren Handelsgeschäften versuchen
müssen Sie eine Menge lernen.
Wenn Sie mit einem kurzen, einfach geschriebenen Programm beginnen und einige Änderungen daran vornehmen, um es zu testen
können Sie lernen, wie das Programm funktioniert.
Ihr Problem, das Sie begonnen haben
Sehen Sie, wie ich es machen würde
//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link"https://www.mql4.com"inputdouble TakeProfit =50;
inputdouble Lots =0.1;
inputint MagicNumber =16384;
inputint TakeProfit1 = 15;
inputint TakeProfit2 = 25;
inputint TakeProfit3 = 0;
inputint StopLoss = 100;
inputdouble BreakEven =10;
inputdouble BreakEvenSL =5;
inputdouble TrailingStop =30;
inputdouble TrailingStep =30;
inputint SlippagePips =3;
inputdouble MACDOpenLevel =3.0;
inputdouble MACDCloseLevel=2;
inputint MATrendPeriod =26;
int count,countbuy,countsell;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.015 0.0150int Digitspips; // DoubleToStr(dbl/pips2dbl, Digitspips)int Slip;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10; Digitspips = 1;}
else {pips2dbl = Point; pips2points = 1; Digitspips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
Slip = pips2points * SlippagePips; //Slippage //---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//---if(Bars<100)
{
Print("bars less than 100");
return;
}
//---if((countbuy>0)||(countsell>0))
{
int CMD;
double SL,TP,price;
int LastError = 0;
RefreshRates();
if (countbuy>0)
{
count=countbuy;
CMD = OP_BUY;
price = Ask;
if(StopLoss>0)SL= price-StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl;
}
else
{
count=countsell;
CMD = OP_SELL;
price = Bid;
if(StopLoss>0)SL= price+StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl;
}
ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green);
if (ticket>0) //Checking if the order was opened or not
{
OrderPrint();
countbuy--;
countsell--;
}
else {
LastError = GetLastError();
if(CMD==OP_BUY)Print("Error sending buy order "+count+ ". Error code= " + LastError);
if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code= " + LastError);
}
if((countbuy>0)||(countsell>0))return;
}
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
//--- it is important to enter the market correctly, but it is more important to exit it correctly...
total=0;
for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)break;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()<=OP_SELL)// check for opened position
{
total++;
//--- long position is openedif(OrderType()==OP_BUY)
{
//--- should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*pips2dbl))
{
//--- close orderOrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven)
{
if(OrderStopLoss()<OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if(OrderOpenPrice()<OrderStopLoss())
{
if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else// go to short position
{
//--- should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl))
{
//--- close order and exitOrderClose(OrderTicket(),OrderLots(),Ask,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(OrderOpenPrice()-Ask>pips2dbl*BreakEven)
{
if(OrderStopLoss()>OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point))
{
if(OrderStopLoss()>(Ask+pips2dbl*(TrailingStop+TrailingStep)))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Ask+pips2dbl*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(total<1)
{
countbuy = 0;
countsell = 0;
//--- no opened orders identifiedif(AccountFreeMargin()<(3000*Lots))//3trades*1000
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibilityif(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious)
{
countbuy = 3;//we can open
}
//--- check for short position (SELL) possibilityif(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious)
{
countsell = 3;//we can open
}
}
//---
}
//+------------------------------------------------------------------+
nicht benötigte verschiedene Eingaben für Symbol()
OrderComment kann von Ihrem Broker überschrieben werden
Sie wollen... Nun, nach meiner Anforderung, wenn der Preis würde sagen, 7 pip [103,603] im Gewinn, der Stop Loss von
1. und 2. Handel wird sagen wir 1 Pip Gewinn [103,543] und der Stop Loss des 3. Handels bleibt bei 103,386.
make extern int BreakEven = 7
(* 10 ) Korrektur bei 5-stelligem Broker, um den Pipwert zu erhalten
ohh, ja, das ist sicherlich ein Manko. All meine harte Arbeit seit dem Abend ist nun umsonst gewesen!
Ich habe versucht, einen Weg zu finden, um die Trades in Abhängigkeit von der Funktion'order comment' zu unterscheiden und habe einen Code geschrieben.
Wie auch immer, der von Ihnen angegebene Code verschiebt den Stop-Loss-Teil zum BE oder zum gewünschten Punkt, aber mein Problem mit dem "dritten" Handel ist immer noch nicht gelöst.
Ich habe auch diesen BE bewegenden Teil des Codes, aber ich bleibe mit dem nicht bewegenden SL für den dritten Handel stecken.
Ich habe gerade eine andere Idee und versuche es jetzt.
Und war das gültig?
string comment_sell="Sell Order";
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);
if (OrderComment()=="comment_sell") // ?
Ist dies gültig?
Angenommen, ich habe den EA an ein EURUSD-Chart angehängt.
if (Order_Symbol()==EURUSD)
Wird er vergleichen, ob der aktuelle Chart EURUSD ist oder nicht?
Hier ist eine Möglichkeit zur Unterscheidung von Aufträgen über die "magische Zahl", dachte ich.
Klammern sind nicht ausbalanciert.
Ist das möglich?
auf diese Weise müssen Sie nach 3 verschiedenen magischen Zahlen suchen
Es scheint mir möglich zu sein, Folgendes zu tun
Ok, nach einem kontinuierlichen harten Arbeitszauber (zumindest für mich) wurde der EA 'fehlerfrei' gemacht!
Posting der Änderungen in Kürze:
Ich habe Verwirrung mit der Funktion Set_Magic_Number() .
Habe ich es richtig definiert? Wird es auch beim Aufrufen in anderen Funktionen korrekt funktionieren?
Grüße
Ich habe Verwirrung mit der Funktion Set_Magic_Number().
Habe ich sie richtig definiert? Wird sie auch beim Aufruf in anderen Funktionen korrekt funktionieren?
Mit freundlichen Grüßen
Ich habe hier gelesen, dass Ihr Symbol nicht "EURUSD" ist.
Sie müssen das richtige Symbol verwenden
Ich habe hier gelesen, dass Ihr Symbol nicht "EURUSD" ist.
Sie müssen das richtige Symbol verwenden.
Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....
Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.
Haben Sie meinen Code überprüft?
Die Funktion des Mindestgewinns ist ein "Fehlschlag".
Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!
Aber mein Ziel ist nicht so.
Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt
dass der Handel mit meinem gewünschten Mindestgewinn geschlossen wird.
Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.
Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.
Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....
Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.
Haben Sie meinen Code überprüft?
Die Funktion des Mindestgewinns ist ein "Fehlschlag".
Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!
Aber mein Ziel ist nicht so.
Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt
dass der Handel mit meinem gewünschten Mindestgewinn geschlossen wird.
Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.
Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.
Sie machen es viel zu kompliziert, weil Sie keine Ahnung haben, wie man das macht.
je mehr man liest und versucht, selbst zu programmieren, desto einfacher wird es, komplexere Dinge zu machen
aber fangen Sie mit einfachen Dingen an, wenn Sie ein Programm für einen Handel zum Laufen bringen und es dann später mit mehreren Handelsgeschäften versuchen
müssen Sie eine Menge lernen.
Wenn Sie mit einem kurzen, einfach geschriebenen Programm beginnen und einige Änderungen daran vornehmen, um es zu testen
können Sie lernen, wie das Programm funktioniert.
Ihr Problem, das Sie begonnen haben
Sehen Sie, wie ich es machen würde
nicht benötigte verschiedene Eingaben für Symbol()
3 verschiedene Magicnumbers..
Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....
Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.
Haben Sie meinen Code überprüft?
Die Funktion des Mindestgewinns ist ein "Fehlschlag".
Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!
Aber mein Ziel ist nicht so.
Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt
dass der Handel mit dem von mir gewünschten Mindestgewinn geschlossen wird.
Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.
Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.
Ich habe Ihren Code kompiliert 80 Fehler 6 Warnungen
meist nicht deklarierte Bezeichner
Ich brauche den Code mit allen deklarierten Bezeichnern
wenn die Datei zu groß ist, dann anhängen
Kompilieren Sie die Datei und überprüfen Sie die Fehler, die Sie erhalten