![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Est-il possible d'ajouter des options de choix ?
Par exemple,
Séparément, achat, et vente séparément
Modification : BE tous acheter 0, ou +1, ou +2 pips ou vendre tous BE 0, 1 ou 2 pips ?
Est-ce possible ?
be.mq4
Bonjour Mladen ,
J'essaie de coder ma stratégie pour faciliter le trading, j'ai été capable de sélectionner le dernier ordre avec succès en utilisant ce code.
void OpenNewTrade()
{ datetime lastTime = 0 ;
int lastTicket = -1 ; // Aucun ordre ouvert.
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime() ;
lastTicket = OrderTicket() ;
si (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grille*PipValue*Point
{
{
BuyOrder() ;
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder() ;
}
}
}
return(lastTicket) ;
}
sinon
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
Pouvez-vous jeter un coup d'oeil à ce code ? J'essaie de supprimer la commande la plus ancienne en utilisant la date et le ticket de commande, par exemple si la commande ouverte >2, supprimer la commande la plus ancienne.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA et générateur de script version 4.1 EA
//-------------------------------------------------------------
// Mots clés : MT4, Forex EA builder, créer EA, conseiller expert développeur
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// variables exportées
extern int OrderId = 1 ;
extern int Slippage = 2 ;
extern double Lots = 0.01 ;
extern int MaxOrdersAllowed = 2;// op buy et op sell autorisés
extern int Grid = 10 ; // distance totale en pips des ordres ouverts
extern string EAComment = "564 testing" ;
// variables locales
double PipValue=1 ; // cette variable est là pour supporter les brokers à 5 chiffres
bool Terminated = false ;
string LF = "\n" ; // utilisez ceci dans les blocs personnalisés ou utilitaires où vous avez besoin d'un saut de ligne.
int NDigits = 4 ; // utilisé principalement pour NormalizeDouble dans les blocs de type Flex
int ObjCount = 0 ; // compte de tous les objets créés sur le graphique, permet la création d'objets avec des noms uniques
int current = 0 ;
int init()
{
NDigits = Digits ;
if (false) ObjectsDeleteAll() ; // efface le graphique
Comment("") ; // efface le graphique
}
// Démarrage de l'expert
int start()
{
if (Bars < 10)
{
Comment("Pas assez de barres") ;
retour (0) ;
}
if (Terminé == true)
{
Comment("EA Terminated.") ;
retour (0) ;
}
OnEveryTick1() ;
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10 ;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10 ;
IfOrderDoesNotExist2() ;
IfOrderDoesNotExist4() ;
MaximumOrder() ;
}
void IfOrderDoesNotExist2()
{
bool exists = false ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = true ;
}
}
sinon
{
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
if (exists == false)
{
BuyPendingOrder() ;
}
}
void IfOrderDoesNotExist4()
{
bool exists = false ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = true ;
}
}
sinon
{
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
if (exists == false)
{
SellPendingOrder() ;
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0 ;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point ;
double SL = prix - 0*PipValue*Point ;
si (0 == 0) SL = 0 ;
double TP = prix + 0*PipValue*Point ;
si (0 == 0) TP = 0 ;
si (0 == 0) expire = 0 ;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) ;
si (ticket == -1)
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0 ;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point ;
double SL = prix + 0*PipValue*Point ;
si (0 == 0) SL = 0 ;
double TP = prix - 0*PipValue*Point ;
si (0 == 0) TP = 0 ;
si (0 == 0) expire = 0 ;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) ;
si (ticket == -1)
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
}
void MaximumOrder()
{
si (MaxOrdersAllowed> 0)
{
OrderCount() ;
}
}
void OrderCount()
{
int count = 0 ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
compte++ ;
}
}
sinon
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder() ;
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0 ;
int lastTicket = -1 ; // Aucun ouvert.
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime() ;
lastTicket = OrderTicket() ;
si (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red) ;
}
}
}
return(lastTicket) ;
}
sinon
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
int deinit()
{
if (false) ObjectsDeleteAll() ;
}
Bonjour Mladen ,
J'essaie de coder ma stratégie pour faciliter le trading, j'ai été capable de sélectionner le dernier ordre avec succès en utilisant ce code.
void OpenNewTrade()
{ datetime lastTime = 0 ;
int lastTicket = -1 ; // Aucun ordre ouvert.
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime() ;
lastTicket = OrderTicket() ;
si (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grille*PipValue*Point
{
{
BuyOrder() ;
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder() ;
}
}
}
return(lastTicket) ;
}
sinon
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
Pouvez-vous jeter un coup d'oeil à ce code ? J'essaie de supprimer la commande la plus ancienne en utilisant la date et le ticket de commande, par exemple si la commande ouverte >2, supprimer la commande la plus ancienne.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA et générateur de script version 4.1 EA
//-------------------------------------------------------------
// Mots clés : MT4, Forex EA builder, créer EA, conseiller expert développeur
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// variables exportées
extern int OrderId = 1 ;
extern int Slippage = 2 ;
extern double Lots = 0.01 ;
extern int MaxOrdersAllowed = 2;// op buy et op sell autorisés
extern int Grid = 10 ; // distance totale en pips des ordres ouverts
extern string EAComment = "564 testing" ;
// variables locales
double PipValue=1 ; // cette variable est là pour supporter les brokers à 5 chiffres
bool Terminated = false ;
string LF = "\n" ; // utilisez ceci dans les blocs personnalisés ou utilitaires où vous avez besoin d'un saut de ligne.
int NDigits = 4 ; // utilisé principalement pour NormalizeDouble dans les blocs de type Flex
int ObjCount = 0 ; // compte de tous les objets créés sur le graphique, permet la création d'objets avec des noms uniques
int current = 0 ;
int init()
{
NDigits = Digits ;
if (false) ObjectsDeleteAll() ; // efface le graphique
Comment("") ; // efface le graphique
}
// Démarrage de l'expert
int start()
{
if (Bars < 10)
{
Comment("Pas assez de barres") ;
retour (0) ;
}
if (Terminé == true)
{
Comment("EA Terminated.") ;
retour (0) ;
}
OnEveryTick1() ;
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10 ;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10 ;
IfOrderDoesNotExist2() ;
IfOrderDoesNotExist4() ;
MaximumOrder() ;
}
void IfOrderDoesNotExist2()
{
bool exists = false ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = true ;
}
}
sinon
{
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
if (exists == false)
{
BuyPendingOrder() ;
}
}
void IfOrderDoesNotExist4()
{
bool exists = false ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = true ;
}
}
sinon
{
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
if (exists == false)
{
SellPendingOrder() ;
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0 ;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point ;
double SL = prix - 0*PipValue*Point ;
si (0 == 0) SL = 0 ;
double TP = prix + 0*PipValue*Point ;
si (0 == 0) TP = 0 ;
si (0 == 0) expire = 0 ;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) ;
si (ticket == -1)
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0 ;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point ;
double SL = prix + 0*PipValue*Point ;
si (0 == 0) SL = 0 ;
double TP = prix - 0*PipValue*Point ;
si (0 == 0) TP = 0 ;
si (0 == 0) expire = 0 ;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) ;
si (ticket == -1)
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
}
void MaximumOrder()
{
si (MaxOrdersAllowed> 0)
{
OrderCount() ;
}
}
void OrderCount()
{
int count = 0 ;
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
si (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
compte++ ;
}
}
sinon
{
Print("Erreur OrderSend() - ", ErrorDescription(GetLastError())) ;
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder() ;
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0 ;
int lastTicket = -1 ; // Aucun ouvert.
for (int i=OrdersTotal()-1 ; i >= 0 ; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime() ;
lastTicket = OrderTicket() ;
si (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red) ;
}
}
}
return(lastTicket) ;
}
sinon
Print("Erreur OrderSelect() - ", ErrorDescription(GetLastError())) ;
}
int deinit()
{
if (false) ObjectsDeleteAll() ;
}
Essayez d'utiliser une fonction comme celle-ci :
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Merci Mladen
Cela a parfaitement fonctionné. Je m'excuse d'avoir posté un si long morceau de code sur le forum. Je suis encore en train de m'habituer à l'interface. Merci.
L'indicateur ne se rafraîchit pas automatiquement.
J'ai ici un indicateur qui est très bien adapté à mon trading.
Malheureusement, il ne se met pas à jour tout seul. Je dois toujours rafraîchir manuellement qu'il est renouvelé.
Existe-t-il un moyen de résoudre ce problème ?
Ce serait très utile !
Merci d'avance.
P.S. : Ci-joint tout ce que j'ai.
Il veut le sms de notification. Comment se présente le code ?
Il veut le sms de notification. Comment se présente le code ?
popej30
Faites comme ceci :
SendNotification("message de notification que vous voulez envoyer") ;
Et où insérez-vous votre numéro de téléphone ? Mon numéro 0039 555-23-45. Où inscrire ?
Exemple :
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Et où insérez-vous votre numéro de téléphone ? Mon numéro 0039 555-23-45. Où insérer ?
Exemple :
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Voici une bonne explication de la façon dont vous pouvez le faire :
L'indicateur ne se rafraîchit pas automatiquement.
J'ai ici un indicateur qui est très bien adapté à mon trading.
Malheureusement, il ne se met pas à jour tout seul. Je dois toujours rafraîchir manuellement qu'il est renouvelé.
Existe-t-il un moyen de résoudre ce problème ?
Ce serait très utile !
Merci d'avance.
P.S. : Ci-joint tout ce que j'ai.Jim
Au lieu de réécrire toute la chose, ajoutez une limite pour calculer les barres et ensuite toutes ces barres sont recalculées. Cela devrait résoudre le problème de rafraîchissement (il suffit de garder le BarsTocalculate à une valeur raisonnable - pas trop grande ni trop petite. J'ai utilisé 1000 comme valeur par défaut et ça semble aller comme ça). Essayez-le