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

 
alvlaf:
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) ;

}

 
alvlaf:

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).

 
A13ksandr:

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 ?

//+------------------------------------------------------------------+
//| 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 ; // Multiplicateur
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++)

{

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 le délai requis

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 le délai requis

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) ;

}

 
Les gars, à l'aide. Je trade sur la plateforme MT4 de Stforex. Lorsque j'ouvre des ordres, le niveau d'entrée n'apparaît pas sur le graphique (pas de ligne pointillée), et il n'est donc pas pratique de mettre un stop-loss. Peut-être que quelqu'un sait ce qui ne va pas et comment le réparer ?
 
gloomy159:
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 ?

ERR_INVALID_ACCOUNT65 Numéro de compte incorrect
 
testerMT4:

http://prntscr.com/chfa36

Paramètres - Graphiques - Afficher les niveaux de négociation

Cette fonction a été initialement activée, mais elle n'affiche toujours pas les niveaux sur le graphique.
 
gloomy159:
Cette fonction a été initialement activée, mais les niveaux n'apparaissent toujours pas sur le graphique.
Dans les paramètres de couleur, vérifiez si la couleur est attribuée aux volumes et ne correspond pas à la couleur de fond.
 
alvlaf:

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.