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
Renvoie le numéro du ticket attribué à l'ordre par le serveur commercial ou -1 en cas d'échec. Pour obtenir des informations supplémentaires sur les erreurs, il faut appeler la fonction GetLastError().
Notes :
Lors de l'ouverture d'un ordre au marché (OP_SELL ou OP_BUY), seuls les derniers prix de l'offre (pour la vente) ou de la demande ( pour l'achat) peuvent être utilisés comme prix ouvert. Si l'opération est effectuée avec un titre différent du titre actuel, la fonction MarketInfo() doit être utilisée avec le paramètre MODE_BID ou MODE_ASK pour obtenir les derniers cours pour ce titre. Le prix calculé ou non normalisé ne peut pas être appliqué. S'il n'y a pas eu le prix ouvert demandé dans le fil de prix ou s'il n'a pas été normalisé en fonction du nombre de chiffres après la virgule, l'erreur 129 (ERR_INVALID_PRICE) sera générée. Si le prix d'ouverture demandé est totalement dépassé, l'erreur 138 (ERR_REQUOTE) sera générée indépendamment du paramètre de slippage. Si le prix demandé est périmé, mais présent dans le fil de discussion, la position sera ouverte au prix actuel et seulement si le prix actuel se situe dans la fourchetteprix+slippage.
Les niveaux StopLoss et TakeProfit ne peuvent pas être trop proches du marché. La distance minimale des niveaux de stop en points peut être obtenue en utilisant la fonction MarketInfo() avec le paramètre MODE_STOPLEVEL. Dans le cas de niveaux d'arrêt erronés ou non normalisés, l'erreur 130 (ERR_INVALID_STOPS) sera générée.
Lors du passage d'un ordre en suspens, le prix ouvert ne peut pas être trop proche du marché. La distance minimale du prix en attente par rapport au prix actuel du marché en points peut être obtenue en utilisant la fonction MarketInfo() avec le paramètre MODE_STOPLEVEL. En cas de faux prix ouvert d'un ordre en attente, l'erreur 130 (ERR_INVALID_STOPS) sera générée.
L'application du délai d'expiration des ordres en attente peut être désactivée dans certains serveurs commerciaux. Dans ce cas, lorsqu'une valeur non nulle est spécifiée dans le paramètre d'expiration, l'erreur 147 (ERR_TRADE_EXPIRATION_DENIED) est générée.
Sur certains serveurs commerciaux, le nombre total d'ordres ouverts et en attente peut être limité. Si cette limite a été dépassée, aucune nouvelle position ne sera ouverte (ou aucun ordre en attente ne sera placé) et le serveur de négociation renverra l'erreur 148 (ERR_TRADE_TOO_MANY_ORDERS).
//--- paramètres d'entrée
extern int period=16 ;
extern int porog=50 ;
extern double lot=1 ;
externe interne k=5000 ;
extern bool pl=true ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,0,0),Digits) ;
double ss=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,1,0),Digits) ;
double tpb=NormalizeDouble(bs+(bs-ss),Digits) ;
double tps=NormalizeDouble(ss-(bs-ss),Digits) ;
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5) ;
si(pl==false)lots=lot ;
si(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);//Ouvrir la limite d'achat.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);//Ouvrir la limite de vente.
}
si(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//sélectionne l'ordre le plus proche.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red) ;
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue) ;
si(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red) ;
si(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red) ;
OrderSelect(1,SELECT_BY_POS,MODE_TRADES) ;
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red) ;
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue) ;
si(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red) ;
si(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red) ;
}
si(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES) ;
si(OrderType()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red) ;
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red) ;
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red) ;
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue) ;
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
}
retour(0) ;
}
//+------------------------------------------------------------------+