Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1095
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ist dieser Code in MQL5 geschrieben?
for (int i=0; i<SymbolCount; i++)
{
if (CountTrades() == 0) // Die Anzahl der Aufträge muss Null sein
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// Wenn der letzte Handel einen Verlust aufweist, wird derselbe Handel eröffnet, jedoch mit einem größeren Lot.
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
Code in OnTick nach Worten und so weiter. In MQL4 geschrieben, brauchen Sie MQL5?
Für jeden OrderSend sollte die Bedingung MaxOpenOrders nicht größer sein als OrdersTotal().
Verfahrenscode (OrderSymbol()==Symbol() entfernt und iClose()/iOpen() anstelle von Close/Open eingegeben), habe ich die Korrektheit des Codes nicht überprüft:
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
wenn(C > O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
if(C < O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int Typ = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
wenn (OrderOpenTime() > Zeit)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots);
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderClosePrice();
}
}
}
}
zurück(Preis);
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderOpenPrice();
}
}
}
}
zurück(Preis);
}
extern int Exp = 1;
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
Funktioniert dieser Code bei Ihnen? Das Datum muss hier stehen und um 10 Minuten größer sein als das aktuelle Datum (d. h. TimeCurrent() + 600 Minimum).
for (int i=0; i<SymbolCount; i++)
{
if (CountTrades() == 0) // Die Anzahl der Aufträge muss Null sein
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// Wenn der letzte Handel einen Verlust aufweist, wird derselbe Handel eröffnet, jedoch mit einem größeren Lot.
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
Code in OnTick nach Worten und so weiter. In MQL4 geschrieben, brauchen Sie MQL5?
Für jeden OrderSend sollte die Bedingung MaxOpenOrders nicht größer sein als OrdersTotal().
Verfahrenscode (OrderSymbol()==Symbol() entfernt und iClose()/iOpen() anstelle von Close/Open eingegeben), habe ich die Korrektheit des Codes nicht überprüft:
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
wenn(C > O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
if(C < O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int Typ = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
wenn (OrderOpenTime() > Zeit)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots);
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderClosePrice();
}
}
}
}
zurück(Preis);
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderOpenPrice();
}
}
}
}
zurück(Preis);
}
Gibt eine Reihe von Fehlern aus, konnte sie nicht beheben. Was ist hier los?
//+------------------------------------------------------------------+Leute, Hilfe. Ich handle auf der MT4-Plattform von Stforex. Wenn ich eine Order eröffne, wird mir das Einstiegsniveau auf dem Chart nicht angezeigt (keine gepunktete Linie), und daher ist es nicht möglich, einen Stop-Loss zu setzen. Wer weiß vielleicht, was los ist und wie man es beheben kann?
http://prntscr.com/chfa36
Einstellungen - Diagramme - Handelsstufen anzeigen
Leute, welche Funktion könnte den Fehler 65 zurückgeben?
http://prntscr.com/chfa36
Einstellungen - Diagramme - Handelsstufen anzeigen
Diese Funktion war ursprünglich eingeschaltet, aber die Pegel werden immer noch nicht in der Grafik angezeigt.
Macht ein paar Fehler, kann es nicht richtig machen. Was ist hier los?
Sie haben vergessen, eine schließende Klammer in die Variablen OnTick, LastAsk und LastBid einzufügen. Hier ist ein Code, der sich ohne Fehler kompilieren lässt, ich habe seine Funktionalität nicht überprüft:
//+------------------------------------------------------------------+
//| BB1.mq4 |
//| Copyright 2016, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng
extern double Lots = 1; // Lose
extern int Exp = 1; // Verfall
extern int Wait = 2; // Anzahl der Candlesticks einer Richtung
extern int Timeout = 1; // Zeitfenster
extern double Multiplikator = 3; // Multiplikator
extern int Schlupf = 5; // Schlupf
extern int Magic = 774274; // Magie
extern int MaxOpenOrders = 1; // Maximale Anzahl von Aufträgen
int ticket, Type, SymbolCount;
doppelter Preis, Los;
input string TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // Symbole für den Handel
string Symbols[50]; // 50 ist die maximal mögliche Anzahl von Symbolen
//--------------------------------------------------
int OnInit()
{
if (IsTesting() || !ExtractSymbols())
{
SymbolZahl = 1;
Symbole[0] = Symbol();
}
return(INIT_SUCCEEDED);
}
//--------------------------------------------------
bool ExtractSymbols()
{
ushort Comma = StringGetCharacter(",", 0);
SymbolCount = StringSplit(TradeSymbols, Comma, Symbols);
for (int i = 0; i < SymbolCount; i++)
{
StringToUpper(Symbols[i]);
Symbols[i] = StringTrimRight(Symbols[i]); // Schutz vor versehentlichen Leerzeichen
Symbols[i] = StringTrimLeft(Symbols[i]);
}
if (SymbolCount > 0) return(true);
return(false);
}
//--------------------------------------------------
void OnTick()
{
for (int i=0; i<SymbolCount; i++)
{
double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);
if (CountTrades() == 0) // Anzahl der Aufträge muss gleich Null sein
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)) && MaxOpenOrders > OrdersTotal())
// Wenn der letzte Handel einen Verlust aufweist, wird derselbe Handel eröffnet, jedoch mit einem größeren Lot.
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = LastAsk;
if (Typ == OP_SELL) Preis = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
wenn (C > O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // Geben Sie hier den gewünschten Zeitrahmen an
double O = iOpen(Sym, PERIOD_M5, i);
if (C < O) return(false);
}
wenn ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int Typ = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
wenn (OrderOpenTime() > Zeit)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots);
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderClosePrice();
}
}
}
}
zurück(Preis);
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderOpenPrice();
}
}
}
}
zurück(Preis);
}
Hallo!
Wie können Sie feststellen, ob eine Position auf TP geschlossen wurde? Ich glaube nicht, dass OrderClosePrice()==OrderTakeProfit() die richtige Wahl wäre.