Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1095
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Ce code est-il écrit en MQL5 ?
for (int i=0 ; i<SymbolCount ; i++)
{
if (CountTrades() == 0) // Le nombre d'ordres doit être égal à zéro
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// Si la dernière transaction est perdante, la même transaction sera ouverte, mais avec un lot plus important.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk;
if (Type == OP_SELL) Prix = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
}
si (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// si le bénéfice de la dernière transaction est égal à zéro, la même transaction sera ouverte.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk;
if (Type == OP_SELL) Prix = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Si la dernière transaction est profitable, l'ordre est ouvert.
{
si (SignalBuy(Symboles[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si (SignalSell(Symboles[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
Code dans OnTick après les mots et ainsi de suite. Écrit en MQL4, avez-vous besoin de MQL5 ?
Pour chaque OrderSend, la condition MaxOpenOrders ne doit pas être supérieure à OrdersTotal().
Code de procédure (suppression de OrderSymbol()==Symbol() et entrée de iClose()/iOpen() au lieu de Close/Open), je n'ai pas vérifié l'exactitude du code :
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0 ;
for (int i=OrdersTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i);
si(C > O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i);
si(C < O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0 ;
datetime opentime = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime() ;
opentime = OrderOpenTime() ;
}
}
}
}
retour(opentime) ;
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0 ;
int type = -1 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic)
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
type = OrderType() ;
}
}
}
}
retour(type) ;
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0 ;
double lots = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderOpenTime() > time)
{
time = OrderOpenTime() ;
time = OrderLots() ;
}
}
}
}
retour(lots) ;
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderClosePrice() ;
}
}
}
}
retour(prix) ;
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderOpenPrice() ;
}
}
}
}
retour(prix) ;
}
extern int Exp = 1 ;
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
Ce code fonctionne-t-il pour vous ? La date doit être ici, et supérieure à la date actuelle de 10 minutes (c'est-à-dire TimeCurrent() + 600 minimum).
for (int i=0 ; i<SymbolCount ; i++)
{
if (CountTrades() == 0) // Le nombre d'ordres doit être égal à zéro
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// Si la dernière transaction est perdante, la même transaction sera ouverte, mais avec un lot plus important.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk;
if (Type == OP_SELL) Prix = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
}
si (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// si le bénéfice de la dernière transaction est égal à zéro, la même transaction sera ouverte.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk;
if (Type == OP_SELL) Prix = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Si la dernière transaction est profitable, l'ordre est ouvert.
{
si (SignalBuy(Symboles[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si (SignalSell(Symboles[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
Code dans OnTick après les mots et ainsi de suite. Écrit en MQL4, avez-vous besoin de MQL5 ?
Pour chaque OrderSend, la condition MaxOpenOrders ne doit pas être supérieure à OrdersTotal().
Code de procédure (suppression de OrderSymbol()==Symbol() et entrée de iClose()/iOpen() au lieu de Close/Open), je n'ai pas vérifié l'exactitude du code :
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0 ;
for (int i=OrdersTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i);
si(C > O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i);
si(C < O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0 ;
datetime opentime = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime() ;
opentime = OrderOpenTime() ;
}
}
}
}
retour(opentime) ;
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0 ;
int type = -1 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic)
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
type = OrderType() ;
}
}
}
}
retour(type) ;
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0 ;
double lots = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderOpenTime() > time)
{
time = OrderOpenTime() ;
time = OrderLots() ;
}
}
}
}
retour(lots) ;
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderClosePrice() ;
}
}
}
}
retour(prix) ;
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderOpenPrice() ;
}
}
}
}
retour(prix) ;
}
Il y a quelques erreurs, mais je n'ai pas pu les corriger. Qu'est-ce qui ne va pas ici ?
//+------------------------------------------------------------------+Les gars, à l'aide. Je négocie sur la plateforme MT4 de Stforex. Lorsque j'ouvre un ordre, il ne me montre pas le niveau d'entrée sur le graphique (pas de ligne pointillée), et donc pas pratique pour mettre un stop-loss. Peut-être qui sait ce qui ne va pas et comment le réparer ?
http://prntscr.com/chfa36
Paramètres - Graphiques - Afficher les niveaux de négociation
Les gars, quelle fonction pourrait retourner l'erreur 65 ?
http://prntscr.com/chfa36
Paramètres - Graphiques - Afficher les niveaux de négociation
Cette fonction a été initialement activée, mais les niveaux n'apparaissent toujours pas sur le graphique.
Il y a quelques erreurs, mais on ne peut pas les corriger. Qu'est-ce qui ne va pas ici ?
Vous avez oublié d'ajouter une parenthèse fermante dans les variables OnTick et LastAsk et LastBid. Voici un code qui compile sans erreur, je n'ai pas vérifié sa fonctionnalité :
//+------------------------------------------------------------------+
//| BB1.mq4 |
//| Copyright 2016, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte
extern double Lots = 1 ; // Lots
extern int Exp = 1 ; // Expiration
extern int Wait = 2 ; // Nombre de chandeliers d'une même direction
extern int Timeout = 1 ; // Créneau horaire
extern double Multiplier = 3 ; // Multiplier
extern int Slippage = 5 ; // Slippage
extern int Magic = 774274 ; // Magie
extern int MaxOpenOrders = 1 ; // Nombre maximal de commandes
int ticket, Type, SymbolCount ;
double Price, Lot ;
input string TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP" ; // symboles de négociation
string Symbols[50] ; // 50 est le nombre maximal de symboles possible
//--------------------------------------------------
int OnInit()
{
si (IsTesting() || !ExtractSymbols())
{
SymbolCount = 1 ;
Symboles[0] = Symbole() ;
}
return(INIT_SUCCEEDED) ;
}
//--------------------------------------------------
bool ExtractSymbols()
{
ushort Virgule = StringGetCharacter(",", 0) ;
SymbolCount = StringSplit(TradeSymbols, Comma, Symbols) ;
for (int i = 0 ; i < SymbolCount ; i++)
{
StringToUpper(Symboles[i]) ;
Symboles[i] = StringTrimRight(Symboles[i]) ; // protection contre les espaces accidentels
Symboles[i] = StringTrimLeft(Symboles[i]) ;
}
si (SymbolCount > 0) return(true) ;
retour (faux) ;
}
//--------------------------------------------------
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) // le nombre d'ordres doit être égal à zéro
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)) && MaxOpenOrders > OrdersTotal())
// Si la dernière transaction est perdante, la même transaction sera ouverte, mais avec un lot plus important.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk ;
if (Type == OP_SELL) Prix = LastBid ;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
}
si (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// si le bénéfice de la dernière transaction est égal à zéro, la même transaction sera ouverte.
{
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = LastAsk ;
if (Type == OP_SELL) Prix = LastBid ;
Lot = NormalizeDouble(LotsLastHistOrder(), 2) ;
ticket = OrderSend(Symbols[i], Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Si la dernière transaction est profitable, l'ordre est ouvert.
{
si (SignalBuy(Symboles[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
si (SignalSell(Symboles[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--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++ ;
}
}
retour(cnt) ;
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i) ;
si (C > O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
pour (int i=1 ; i<=Wait ; i++)
{
double C = iClose(Sym, PERIOD_M5, i) ; // Spécifiez ici la période de temps requise
double O = iOpen(Sym, PERIOD_M5, i) ;
si (C < O) return(false) ;
}
si ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true) ;
si (CountHistTrades() == 0) return(true) ;
retour (faux) ;
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0 ;
datetime opentime = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime() ;
opentime = OrderOpenTime() ;
}
}
}
}
retour(opentime) ;
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0 ;
int type = -1 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic)
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
type = OrderType() ;
}
}
}
}
retour(type) ;
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0 ;
double lots = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderOpenTime() > time)
{
time = OrderOpenTime() ;
time = OrderLots() ;
}
}
}
}
retour(lots) ;
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderClosePrice() ;
}
}
}
}
retour(prix) ;
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0 ;
double prix = 0 ;
for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)
{
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
si (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
si (OrderCloseTime() > time)
{
time = OrderCloseTime() ;
prix = OrderOpenPrice() ;
}
}
}
}
retour(prix) ;
}
Bonjour !
Comment pouvez-vous déterminer si une position a été fermée sur TP ? Je ne pense pas que l'utilisation de OrderClosePrice()==OrderTakeProfit() soit correcte.