Nützliche Funktionen von KimIV - Seite 7

 

Nun, da es keine Fragen gibt, machen wir weiter...

ModifyOrder() Funktion.

Die Funktion ModifyOrder dient dazu, ein oder mehrere Preisniveaus eines vorausgewählten Auftrags zu ändern. Unter einem schwebenden Auftrag versteht man hier einen Limit- oder Stop-Auftrag sowie einen Markt-Kauf- oder -Verkaufsauftrag, d.h. eine Position. Mit der Funktion ModifyOrder können Sie die beiden Preisniveaus StopLoss und TakeProfit für die Position ändern, während für die Pending Order auch der OpenPrice-Einstellpreis geändert werden kann. Die geänderten Preisstufen werden als Parameter an die Funktion ModifyOrder übergeben. Wenn einer der Parameter negativ ist, wird das entsprechende Preisniveau nicht verändert.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
      }
    }
  }
}
 

Beispiele für die Verwendung des Befehls ModifyOrder().

Ich habe beschlossen, die allerersten Beispiele zu nennen, die mir schon oft gestellt wurden. Dies ist die Eröffnung von Positionen im Rahmen der Ausführung von Marktaufträgen Market Watch. Dies ist der Fall, wenn wir nicht gleichzeitig einen Auftrag zur Eröffnung einer Position zum Marktpreis erteilen und einen schwebenden Auftrag damit verbinden können. Eine solche Eröffnung bei Market Watch sollte in zwei Schritten erfolgen: Zuerst eröffnen wir eine Position, und dann versehen wir sie mit einer Pending Order, d.h. wir setzen StopLoss und TakeProfit Kursniveaus.

1. Kaufen Sie 0,1 Lot des aktuellen Symbols und setzen Sie einen Stopp von 30 Punkten

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

2. Verkaufen Sie 0,15 Lot des aktuellen Instruments und setzen Sie 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);
Ein Arbeitsskript mit Beispielen ist im Trailer enthalten.
Dateien:
 
Igor, haben Sie eine Close-Order-Funktion (sowohl Close als auch CloseBy)?
 
Lukyanov:
Igor, haben Sie eine Funktion zum Schließen von Aufträgen (sowohl einfach Close als auch CloseBy)?
Close ist da, CloseBy nicht.
 
Schließen in alphabetischer Reihenfolge sollte vor ModifyOrder stehen ;-)
 
Lukyanov:
Schließen in alphabetischer Reihenfolge sollte vor ModifyOrder stehen ;-)
Ja, das ist richtig... Erst Öffnen, dann Ändern und schließlich Schließen ;-)
 

Das macht Sinn... ;)

Würden Sie es für frech halten, einen kleinen Beitrag zum Thema "Transmission to function" zu verfassen?
Bis jetzt ist es für mich ein dunkler logisch-ideologischer Wald...
(nein, ist es nicht...).

 
kombat писал (а):
Würden Sie es für frech halten, sich in einem Beitrag über das Thema "Transmission to function" zu informieren?
Nein, das würde ich nicht. Was meine Funktionen betrifft, so sind Fragen jederzeit willkommen. Ich werde versuchen, sie alle zu beantworten...
 

Ich danke Ihnen...
Und natürlich ist es nicht eilig... Es besteht keine Eile.
Der Markt wird nicht vor uns davonlaufen... :)))

 
kombat писал (а):
Ich danke Ihnen...
Und natürlich ist es nicht eilig... Es besteht keine Eile.
Der Markt wird nicht vor uns davonlaufen... :)))
Ich hatte eigentlich Fragen von Ihnen erwartet. Konkrete Fragen, die direkt angeben, was Sie im Bereich der Nutzung meiner Funktionen zu klären haben.