![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
tkuan77
Vous devez trouver la dernière barre fermée et voir si le jour de la dernière barre fermée est le même que le jour actuel.
Vous pouvez utiliser quelque chose comme cette fonction pour obtenir l'heure de la dernière barre fermée :
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
Bonjour mladen,
Mais où dois-je insérer cette partie du code ? Je suis désolé de demander cela car je suis encore assez nouveau dans le codage et je n'arrive toujours pas à comprendre comment fonctionne la boucle For.
Salutations
Ryan
Salut mladen,
Mais où dois-je insérer cette partie du code ? Désolé de vous poser cette question car je suis encore assez novice en matière de codage et je n'arrive toujours pas à comprendre le fonctionnement de la boucle For.
Salutations
RyanRyan
Quelque chose comme ceci :
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // pas de transaction
Ryan
Quelque chose comme ceci :
si (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // pas de négociation
Bonjour mladen, j'ai ajouté le code mais il semble donner une sorte d'erreur de variable globale. De plus, j'ai remarqué que vous avez une variable MagicNumber qui n'est pas définie, puis-je demander à quoi elle sert ? Je l'ai ajoutée sous int mais je ne suis pas sûr de l'utilité de cette variable.
Veuillez me conseiller. Merci encore pour votre patience.
//---- paramètres d'entrée
extern double TakeProfit = 1000.0 ;
extern double Lots = 0.1 ;
extern double StopLoss = 980.0 ;
extern int Entry_Hour_1st = 21 ;
//+------------------------------------------------------------------+
//| fonction d' initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Déclenchement du commerce
//+------------------------------------------------------------------+
int ticket, total, MagicNumber ;
double TP_Value, SL_Value ;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0 ;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime() ;
}
return(CloseTime) ;
}
total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
Bonjour mladen, j'ai ajouté le code mais il semble donner une sorte d'erreur de variable globale. Aussi, j'ai remarqué que vous avez une variable MagicNumber qui n'est pas définie, puis-je demander à quoi elle sert ? Je l'ai ajoutée sous int mais je ne suis pas sûr de l'utilité de cette variable.
Veuillez me conseiller. Merci encore pour votre patience.
//---- paramètres d'entrée
extern double TakeProfit = 1000.0 ;
extern double Lots = 0.1 ;
extern double StopLoss = 980.0 ;
extern int Entry_Hour_1st = 21 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Déclenchement du commerce
//+------------------------------------------------------------------+
int ticket, total, MagicNumber ;
double TP_Value, SL_Value ;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0 ;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime() ;
}
return(CloseTime) ;
}
total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ;
SL_Value = (Low[1] - 0.0010) ;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ;
SL_Value = (High[1] + 0.0010) ;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
C'est une fonction
Déplacez-la en dehors du corps de la fonction start().
↵
C'est une fonction
Déplacez-le en dehors du corps de la fonction start()Bonjour mladen, j'ai essayé de déplacer la fonction hors de Start function, cependant, mon EA déclenche toujours plus d'une transaction par jour au lieu de se limiter à ne déclencher qu'une seule transaction par jour.![](https://c.mql5.com/forextsd/smiles/frown.png)
J'apprécie l'éclairage.![](https://c.mql5.com/forextsd/smiles/smile.png)
Salutations
//---- paramètres d'entrée
extern double TakeProfit = 1000.0 ;
extern double Lots = 0.1 ;
extern double StopLoss = 980.0 ;
extern int Entry_Hour_1st = 21 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int MagicNumber ;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0 ;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime() ;
}
return(CloseTime) ;
}
int start()
{
//+------------------------------------------------------------------+
//-- Déclenchement du commerce
//+------------------------------------------------------------------+
int ticket, total ;
double TP_Value, SL_Value ;
total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ; // valeur du corps long
SL_Value = (Low[1] - 0.0010) ; // toujours la même valeur pour un long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ; // valeur du corps court
SL_Value = (Low[1] - 0.0010) ; // toujours la même chose pour le long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ; // valeur de toute la bougie, y compris la tête et la queue de bougie
SL_Value = (Low[1] - 0.0010) ; // toujours la même pour un long terme.
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ; // valeur du corps long
SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ; // valeur du corps court
SL_Value = (High[1] + 0.0010) ; // toujours la même valeur pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.
SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
↵
Bonjour mladen, j'ai essayé de déplacer la fonction hors de la fonction Start, mais mon EA continue à déclencher plus d'une transaction par jour au lieu de se limiter à déclencher une seule transaction par jour.![](https://c.mql5.com/forextsd/smiles/frown.png)
Merci pour vos explications.![](https://c.mql5.com/forextsd/smiles/smile.png)
Salutations
//---- paramètres d'entrée
extern double TakeProfit = 1000.0 ;
extern double Lots = 0.1 ;
extern double StopLoss = 980.0 ;
extern int Entry_Hour_1st = 21 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int MagicNumber ;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0 ;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime() ;
}
return(CloseTime) ;
}
int start()
{
//+------------------------------------------------------------------+
//-- Déclenchement du commerce
//+------------------------------------------------------------------+
int ticket, total ;
double TP_Value, SL_Value ;
total = OrdersTotal() ; // vérifier le nombre total de transactions actuellement ouvertes
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ; // valeur du corps long
SL_Value = (Low[1] - 0.0010) ; // toujours la même valeur pour un long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ; // valeur du corps court
SL_Value = (Low[1] - 0.0010) ; // toujours la même chose pour le long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.
SL_Value = (Low[1] - 0.0010) ; // toujours la même pour un long terme.
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;
retour(0) ;
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
si ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]) ; // valeur du corps long
SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]) ; // valeur du corps court
SL_Value = (High[1] + 0.0010) ; // toujours la même valeur pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
si ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.
SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;
retour(0) ;
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
tkuan77
Remplacer ceci :
if(total < 1)
par ceci :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
Et il ne devrait plus le faire
tkuan77
Remplacez ceci :
if(total < 1)
par ceci :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
Et il ne devrait plus le faireBonjour mladen, après avoir entré le code, au lieu de déclencher 1 transaction par jour, il a déclenché plusieurs transactions à la fois jusqu'à ce que le compte explose. Est-ce que cela peut être dû à un mécanisme de déclenchement qui provoque cela ?
Salutations
Bonjour mladen, j'ai ce code particulier qui fermera toutes les transactions en attente que j'ai après avoir déclenché une transaction. Comment puis-je faire pour annuler seulement ma transaction en attente actuelle après avoir déclenché une transaction au lieu de toutes les futures transactions en attente ?
merci.....
int new_del()
{
int i,a ;
int total = OrdersTotal() ;
string comentario,par ;
for (i=total-1 ; i >=0 ; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;
si (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1 ; a >=0 ; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES) ;
comentario=OrderComment() ;
par=StringSubstr(comentario,0,6) ;
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket()) ;
Print("Suppression de SELL_STOP"," Ordertype :",OrderType()) ;
return(1) ;
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket()) ;
Print("Suppression de BUY_STOP"," Ordertype :",OrderType()) ;
return(1) ;
}
}
}
}
}
Bonjour mladen, j'ai ce code particulier qui fermera toutes les transactions en attente que j'ai après avoir lancé une transaction. Comment puis-je faire en sorte d'annuler uniquement ma transaction en attente actuelle après avoir déclenché une transaction au lieu de toutes les futures transactions en attente ?
merci.....
int new_del()
{
int i,a ;
int total = OrdersTotal() ;
string comentario,par ;
for (i=total-1 ; i >=0 ; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;
si (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1 ; a >=0 ; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES) ;
comentario=OrderComment() ;
par=StringSubstr(comentario,0,6) ;
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket()) ;
Print("Suppression de SELL_STOP"," Ordertype :",OrderType()) ;
return(1) ;
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket()) ;
Print("Suppression de BUY_STOP"," Ordertype :",OrderType()) ;
return(1) ;
}
}
}
}
}tkuan77
Que signifie "current pending trade" et que signifie "future pending trade" ?
tkuan77
Que signifie l'expression "current pending trade" et "future pending trade" ?
Bonjour mladen,
Le "Current pending trade" signifie qu'une fois qu'une condition a été remplie, l'ea va créer 2 positions en attente (1 longue et 1 courte). Ainsi, si la position longue est déclenchée, l'ea annule automatiquement la position courte en attente.
Future pending trade signifie qu'après que l'ea a annulé les précédentes transactions en attente et que la condition est à nouveau remplie, l'ea devrait automatiquement établir 2 autres transactions en attente (1 longue et 1 courte). Cependant, si l'ea a actuellement une transaction en cours, l'ea annulera automatiquement tous les ordres en attente que l'ea essaie d'établir.
Ce que j'essaie de faire, c'est de laisser le système annuler uniquement la transaction en cours après qu'une transaction ait été déclenchée. merci de votre aide.![](https://c.mql5.com/forextsd/smiles/smile.png)
salutations