Fonctions utiles de KimIV - page 7

 

Eh bien, puisqu'il n'y a pas de questions, continuons...

Fonction ModifyOrder().

La fonction ModifyOrder est conçue pour modifier un ou plusieurs niveaux de prix d'un ordre présélectionné. Par ordre en suspens, on entend ici un ordre limite ou stop, ainsi qu'un ordre d'achat ou de vente sur le marché, c'est-à-dire une position. La fonction ModifyOrder permet de modifier les deux niveaux de prix StopLoss et TakeProfit de la position, tandis que pour l'ordre en suspens, le prix de fixation OpenPrice peut également être modifié. Les niveaux de prix modifiés sont transmis à la fonction ModifyOrder en tant que paramètres. Si l'un des paramètres est négatif, le niveau de prix correspondant ne sera pas modifié.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
  bool   fm;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
      if (fm) {
        if (UseSound) PlaySound(NameFileSound); break;
      } else {
        er=GetLastError();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
 

Exemples d'utilisation de la fonction ModifyOrder().

J'ai décidé de donner les tout premiers exemples que l'on m'a déjà demandés à maintes reprises. Il s'agit de l'ouverture de positions en termes d'exécution d' ordres de marché Market Watch. C'est lorsque nous ne pouvons pas simultanément donner un ordre d'ouverture de position au prix du marché et y attacher un ordre en attente. Une telle ouverture sur Market Watch doit être effectuée en deux étapes : d'abord, nous ouvrons une position, puis nous y attachons un ordre en suspens, c'est-à-dire que nous fixons des niveaux de prix StopLoss et TakeProfit.

1. Acheter 0,1 lot du symbole actuel et fixer un stop de 30 points

int ti=OpenPosition(NULL, OP_BUY, 0.1);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Ask-30*Point, -1, clModifyBuy);

2. Vendre 0,15 lot de l'instrument actuel et fixer un SL=45, TP=99

int ti=OpenPosition(NULL, OP_SELL, 0.15);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell);
Un script de travail avec des exemples est inclus dans la remorque.
Dossiers :
 
Igor, avez-vous une fonction d'ordre de fermeture (à la fois juste Close et CloseBy) ?
 
Lukyanov:
Igor, avez-vous une fonction pour fermer les ordres (à la fois juste Close et CloseBy) ?
Close est là, CloseBy ne l'est pas.
 
La fermeture par ordre alphabétique devrait se faire avant ModifyOrder ;-)
 
Lukyanov:
La fermeture par ordre alphabétique devrait se faire avant ModifyOrder ;-)
Oui, c'est ça... Ouvrir d'abord, puis Modifier, et enfin Fermer ;-)
 

C'est logique... ;)

Considéreriez-vous comme effronté de faire une petite libation, en un seul post, sur le sujet de la "Transmission à la fonction" ?
Jusqu'à présent, c'est une sombre forêt logique-idéologique pour moi...
(non, ce n'est pas le cas...).

 
kombat писал (а):
Considéreriez-vous comme effronté d'avoir une petite éducation d'un poste sur le sujet de la "transmission de fonction" ?
Non, je ne le ferais pas. En ce qui concerne mes fonctions, toute question est acceptable à tout moment. Je vais essayer de répondre à toutes les questions...
 

Merci...
Et bien sûr, il n'y a pas d'urgence... il n'y a pas d'urgence.
Le marché ne nous fuira pas... :)))

 
kombat писал (а):
Merci...
Et bien sûr, il n'y a pas d'urgence... il n'y a pas d'urgence.
Le marché ne nous fuira pas... :)))
En fait, je m'attendais à des questions de votre part. Des questions spécifiques, indiquant directement ce que vous devez clarifier dans le domaine de l'utilisation de mes fonctions.
Raison: