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
Das ist völlig falsch ...
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
(BuyTicket || SellTicket) ergibt true oder false ... und in diesem Fall wird true oder false als 1 oder 0 angesehen ... nicht als Ihre SellTicket- oder Buyticket-Nummer ...
Stoploss = 40 ... wenn Sie einen Stoploss in OrderSend verwenden, ist es ein Preis ... nicht eine Anzahl von Pips, Slippage ist eine Anzahl von Pips ... lesen Sie die Dokumentation: OrderSend
Okay, ich weiß, was Sie meinen, ich brauche also einen Befehl, um die Bestellung auszuwählen, während Sie OrderSelect verwenden... oder ist OrderSelect in diesem Fall generell falsch?
Lesen Sie die Docs... OrderSelect wird benötigt, um die Bestellung auszuwählen , bevor Sie Funktionen wie OrderLots, OrderTicket, OrderOpenPrice usw. verwenden können. "Hinweis: Die Bestellung muss zuvor mit der FunktionOrderSelect()ausgewählt worden sein."
Wenn Sie keine Informationen zu einer bestehenden Bestellung benötigen, brauchen Sie OrderSelect nicht. Wenn doch, dann schon.
Lesen Sie die Docs... OrderSelect wird benötigt, um die Bestellung auszuwählen , bevor Sie Funktionen wie OrderLots, OrderTicket, OrderOpenPrice usw. verwenden können. "Hinweis: Die Bestellung muss zuvor mit der FunktionOrderSelect()ausgewählt worden sein."
Wenn Sie keine Informationen zu einer bestehenden Bestellung benötigen, brauchen Sie OrderSelect nicht. Wenn doch, dann schon.
Momentan denke ich, dass ich diese Informationen brauche, denn wenn eine Position am Markt ist, muss ich sie schließen und durch eine andere ersetzen. Ich dachte, OrderSelect würde mir auf diese Weise helfen. Aber wenn OrderSelect nur für offene Orders und nicht für die aktive Position am Markt gilt, ist es nicht nützlich. Liege ich da richtig?
Aber wenn OrderSelect nicht hilft, wie kann ich dann die aktiven Positionen schließen?
Mit freundlichen Grüßen
Marc
nirvanamac:
Das scheint größtenteils richtig zu sein, aber jetzt muss ich wissen, warum das Programm nur die Verkaufsaufträge bei 12 und 23 ausführt und nicht die Kaufaufträge...?
Wahrscheinlich tut es das... und es erzeugt wahrscheinlich einen Fehler, den Sie nicht abfangen...
Versuchen Sie es...
Ihr OrderClose ist falsch ... Sie öffnen einen Buy at Ask, um einen Buy zu schließen, Sie Sell ... Sie Sell at Bid, Sie öffnen einen Sell at Bid, um einen Sell zu schließen, Sie Buy ... Sie Buy at Ask.
Ihr OrderClose ist falsch ... Sie eröffnen einen Buy at Ask, um einen Buy zu schließen, verkaufen Sie ... Sie verkaufen zum Bid, Sie eröffnen einen Sell at Bid, um einen Sell zu schließen, kaufen Sie ... Sie kaufen zum Ask.
Vielen Dank für Ihre Hilfe...Ich habe den Code mit Ihren Hinweisen geändert. Es sieht folgendermaßen aus:
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"
//Wichtige Variablen
extern double Minlot=0.01;
extern int Ziffern2Runde=2;
extern int PercentOfFreeDepo=1;
extern int Schlupf=5;
extern int MagischeZahl=1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int HandelsStunde18=18;
extern int HandelsStunde20=20;
extern int HandelsStunde12=12;
extern int TradeHour23=23;
extern int StopLoss=400;
//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;
int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(Kontostand()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risiko/(StopLoss/0,0001)*0,1,Digits2Round);
//===================== Lässt die Losgröße und das Risiko bestimmen ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n", "Akzeptables Risiko ist ",PercentOfFreeDepo,"% = ",Risk," des freien Geldes ",FreeDepo," in Lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderOpenTime()+3600) < TimeCurrent())
{
if (OrderType() == OP_BUY || OP_SELL)
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
openbuy = 0;
opensell = 0;
}
if (OrderType() == OP_SELL)
{
Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
opensell = 0;
openbuy = 0;
}
}
}
}
//BuyOrder
if ((TradeHour3==Stunde())||(TradeHour4==Stunde())||(TradeHour7==Stunde())||(TradeHour10==Stunde())||(TradeHour17==Stunde())||(TradeHour18==Stunde())||(TradeHour20== Stunde()) && openbuy == 0) //Kaufsignal
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Ask - StopLoss * Point,0, "time trader buy order ",MagicNumber,0,Blue);
if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//VerkaufsOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0, "time trader sell order ",MagicNumber,0,Green);
if (opensell < 0) Print("OrderSend OP_SELL fehlgeschlagen, Fehler: ", GetLastError() );
}
//----
return(0);
}
//+------------------------------------------------------------------+
//PipPoint-Funktion
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Währung, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0,0001;
return (CalcPoint);
}
//Get Slippage Funktion
int GetSlippage(string Währung, int SlippagePips)
{
int CalcDigits = MarketInfo(Währung, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}
Während der Ausführung des Backtests gibt es eine Fehlermeldung ERR_INVALID_TICKET (4108).
Nicht alle Aufträge wurden ausgeführt
Könnte es sein, dass der Fehler damit zusammenhängt, dass der SL vorher ausgelöst wurde?