[Archive] Rédiger un conseiller gratuitement - page 83

 
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
La fonction principale utilisée pour ouvrir une position ou placer un ordre en attente.
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 :
symbole - Symbole de négociation.
cmd - Type d'opération. Il peut s'agir de n'importe quelle opération de l'énumération des opérations commerciales.
volume - Nombre de lots.
prix - Prix préférentiel de l'échange.
glissement - Glissement de prix maximum pour les ordres d'achat ou de vente.
stoploss - Niveau d'arrêt des pertes.
takeprofit - Niveau de prise de bénéfices.
commentaire - Texte de commentaire de commande. La dernière partie du commentaire peut être modifiée par le serveur.
magie - Commandez le numéro magique. Peut être utilisé comme identifiant défini par l'utilisateur.
expiration - Heure d'expiration de la commande (uniquement pour les commandes en cours).
couleur de la flèche - Couleur de la flèche d'ouverture sur le graphique. Si le paramètre est absent ou a la valeur CLR_NONE, la flèche d'ouverture n'est pas dessinée sur le graphique.
 
#lien de propriété "dwgrell@gmail.com"

//--- 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) ;
}
//+------------------------------------------------------------------+
 
#property link "dwgrell@gmail.com"

//--- input parameters
extern int period=16;
extern int porog=50;

extern double lot=1;
extern int k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
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);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);//Открываем отложник на покупку.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);//Открываем отложник на продажу.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Выбираем ближайший ордер.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(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,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {/*OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {/*OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {/*OrderModify(OrderTicket(),bs,ss,tpb,0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){/*OrderModify(OrderTicket(),ss,bs,tps,0,Blue);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
Compte : 154603Nom : DmitriyDevise : USD12 juillet 2011, 14:23
Transactions fermées :
TicketTemps ouvertTypeTailleArticlePrixS / LT / PHeure de fermeturePrixCommissionTaxesÉchangerProfit
37055732011.07.12 13:57acheter2.16eurusd1.39821.39731.40652011.07.12 14:131.39730.000.000.00-194.40
37053282011.07.12 13:19acheter2.01eurusd1.39241.38991.39482011.07.12 13:491.39480.000.000.00482.40
37053562011.07.12 13:14vendre2.17eurusd1.39001.39241.38762011.07.12 13:191.39240.000.000.00-520.80
37052852011.07.12 13:05vendre2.17eurusd1.39141.39241.39042011.07.12 13:111.39040.000.000.00217.00
37052782011.07.12 13:04acheter2.17eurusd1.39241.39141.39342011.07.12 13:051.39140.000.000.00-217.00
37048122011.07.12 11:32acheter2.40eurusd1.39591.39141.40202011.07.12 13:011.39140.000.000.00-1 080.00
37040302011.07.12 13:01vendre1.88eurusd1.39141.39171.39112011.07.12 13:011.39170.000.000.00-56.40
37041582011.07.12 10:22acheter2.13eurusd1.38961.38981.39582011.07.12 11:301.39580.000.000.001 320.60
37040632011.07.12 10:12acheter2.02eurusd1.38611.38341.38882011.07.12 10:211.38880.000.000.00545.40
37040202011.07.12 10:05acheter1.92eurusd1.38481.38341.38592011.07.12 10:121.38590.000.000.00211.20
37040012011.07.12 10:04vendre1.95eurusd1.38371.38481.38312011.07.12 10:051.38480.000.000.00-214.50
37035052011.07.12 10:01acheter1.82eurusd1.38431.38371.38492011.07.12 10:041.38370.000.000.00-109.20
37039202011.07.12 09:52vendre2.04eurusd1.38451.38431.37552011.07.12 10:011.38430.000.000.0040.80
37036312011.07.12 09:12vendre1.88eurusd1.38921.39351.38492011.07.12 09:501.38490.000.000.00808.40
37035332011.07.12 09:03vendre1.80eurusd1.39151.39351.38952011.07.12 09:101.38950.000.000.00360.00
37035062011.07.12 09:02vendre1.82eurusd1.39271.39301.39242011.07.12 09:021.39300.000.000.00-54.60
 
Je ne le recommande pas pour de vrai.
 
grell Je n'ai pas de stop loss
 
stop loss au chandelier bas
 
ou maximum selon l'ordre
 
Essayez de regarder dans le code de l'EA, et vous comprendrez pourquoi il a été castré. C'est simple là, parce que je l'ai écrit pour un testeur. Mais bizarrement, ça marche.
 
Pour être honnête, je ne comprends pas du tout la programmation MQL.