Caratteristiche utili da KimIV - pagina 10

 

Grazie KimIV!

 

Funzione DeleteOrders(). Versione per tester.

La funzione DeleteOrders() ha lo scopo di cancellare gli ordini pendenti BuyLimit, BuyStop, SellLimit e SellStop. La funzione DeleteOrders() è universale, cioè può essere usata per cancellare tutti gli ordini pendenti già piazzati, così come quelli specifici che soddisfano le condizioni di selezione impostate con i parametri della funzione:

sy - Nome dello strumento. Poiché solo il simbolo corrente può essere scambiato nel tester, questo parametro non è rilevante per la versione del tester ed è necessario solo per la compatibilità con la versione online di questa funzione. È meglio usare i valori "" o NULL nel tester. Il valore predefinito "" significa qualsiasi simbolo.
op
- Tipo di operazione commerciale, tipo di ordine pendente. È possibile uno dei cinque valori: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT o OP_SELLSTOP. Il valore predefinito di -1 significa qualsiasi ordine.
mn
- MagicNumber, numero di identificazione dell'ordine in sospeso. Valore predefinito -1 - significa qualsiasi magia.

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

Funzione DeleteOrders(). Versione online.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 

Esempi di come usare la funzione DeleteOrders().


1. Cancella tutti gli ordini:

DeleteOrders();
2. Rimuovere tutti gli ordini BuyStop:
DeleteOrders(NULL, OP_BUYSTOP);

3. Cancella tutti gli ordini con la magia 123456:

DeleteOrders(NULL, -1, 123456);

ZY. Nel trailer c'è una sceneggiatura di lavoro con gli stessi esempi.

File:
 
KimIV:

Esempi di come usare la funzione DeleteOrders().

Di questo passo, non arriveremo mai alla biblioteca. Alla fine dovrò andare in biblioteca. Se mi inviti. Non vado senza invito.
 
Ogni uomo ha il diritto alla sinistra... hee... Mi divertirò un po' con questo

Ilnar, nel topic Pending Fractal Orders, ha chiesto, Come fare ordini pendenti su frattali?


Suppongo che Ilnar abbia avuto qualche difficoltà nel rilevare i livelli di prezzo dei frattali. Ecco perché suggerisco di usare la mia funzione:


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
La funzione FindNearFractal() cerca il frattale più vicino del tipo specificato al simbolo specificato, al timeframe dato, e restituisce il suo livello di prezzo. Conoscendo il livello di prezzo della posizione del frattale, è già facile impostare un ordine a questo livello.
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Domanda... Cosa c'entra d con 0??
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Domanda... Cosa c'entra d con 0??
Non so... Ho avuto un caso nella mia pratica in cui era d=0. Ho dovuto eseguire un controllo per renderlo uguale a zero. Da allora ho trascinato questo codice ovunque potessi. Forse non è necessario, ma penso che sia meglio essere troppo che troppo poco.
 
Vinin:
KimIV:

Esempi dell'uso di DeleteOrders().

Di questo passo, non arriveremo mai alla biblioteca. Alla fine dovremo andare in biblioteca. Se mi inviti. Non vado senza invito.

Vitek, qual è il problema? Certo, vieni presto a scavare il giardino... puoi aiutare...

 
KimIV:
Vinin:
KimIV:

Esempi dell'uso di DeleteOrders().

Di questo passo, non arriveremo mai alla biblioteca. Alla fine dovremo andare in biblioteca. Se mi inviti. Non vado senza invito.

Vitek, qual è il problema? Certo, vieni presto a scavare il giardino... puoi aiutare...

Nessun problema con il giardino, anche se non ho l'età giusta. Forse potremmo prendere qualcuno più giovane per il lavoro. Andremo ai bagni e berremo del kvass (sei allergico, lo ero anch'io). Vedremo come lavorano i giovani. Non sarebbe grave.
Motivazione: