Características úteis da KimIV - página 10

 

Obrigado KimIV!

 

Função DeleteOrders(). Versão do testador.

Função DeleteOrders() destina-se a excluir pedidos pendentes BuyLimit, BuyStop, SellLimit e SellStop. A função DeleteOrders() é universal, ou seja, pode ser usada para apagar todos os pedidos pendentes já feitos, bem como os pedidos específicos que atendam às condições de seleção definidas usando os parâmetros da função:

sy - Nome do instrumento. Como apenas o símbolo atual pode ser comercializado no testador, este parâmetro não é relevante para a versão do testador e é necessário apenas para compatibilidade com a versão on-line desta função. É melhor usar os valores "" ou NULL no testador. O valor padrão "" significa qualquer símbolo.
op
- Tipo de operação comercial, tipo de ordem pendente. Um dos cinco valores é possível: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ou OP_SELLSTOP. O valor padrão de -1 indica qualquer ordem.
mn
- MagicNumber, número de identificação da ordem pendente. Valor por default -1 - significa qualquer magik.

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

Função DeleteOrders(). Versão on-line.


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

Exemplos de como usar a função DeleteOrders().


1. Excluir todos os pedidos:

DeleteOrders();
2. Remover todos os pedidos BuyStop:
DeleteOrders(NULL, OP_BUYSTOP);

3. Apagar todos os pedidos com o mágico 123456:

DeleteOrders(NULL, -1, 123456);

ZY. No trailer está um roteiro de trabalho com os mesmos exemplos.

Arquivos anexados:
 
KimIV:

Exemplos de como usar a função DeleteOrders().

A este ritmo, nunca chegaremos à biblioteca. Afinal de contas, terei que ir à biblioteca. Se você me convidar. Eu não vou sem um convite.
 
Todo homem tem a direita para a esquerda... hee... Eu vou me divertir um pouco com isto

Ilnar, no tópico Ordens fractais pendentes, perguntou: Como fazer ordens pendentes sobre fractais?


Acho que a Ilnar teve algumas dificuldades com os níveis de preços fractais. É por isso que eu sugiro usar minha função:


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. 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);
}
Função FindNearFractal() procura o fractal mais próximo do tipo especificado no símbolo especificado, no prazo determinado, e retorna seu nível de preço. Conhecendo o nível de preço da localização do fractal, já é fácil estabelecer um pedido a este nível.
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Pergunta... O que o d tem a ver com 0 ???
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Pergunta... O que o d tem a ver com 0 ???
Eu não sei... Eu tinha um caso na minha clínica onde era d=0. Tive que fazer um cheque para que fosse igual a zero. Desde então, venho arrastando este código para todos os lugares que pude. Talvez seja desnecessário, mas acho que é melhor ser muito do que pouco.
 
Vinin:
KimIV:

Exemplos do uso de DeleteOrders().

A este ritmo, nunca conseguiremos chegar à biblioteca. Teremos que ir para a biblioteca. Se você me convidar. Eu não vou sem um convite.

Vitek, qual é o problema? Claro, venha cavar o jardim logo... você pode ajudar...

 
KimIV:
Vinina:
KimIV:

Exemplos do uso de DeleteOrders().

A este ritmo, nunca conseguiremos chegar à biblioteca. Afinal de contas, teremos que ir à biblioteca. Se você me convidar. Eu não vou sem um convite.

Vitek, qual é o problema? Claro, venha cavar o jardim logo... você pode ajudar...

Não há problema com o jardim, embora eu não tenha a idade certa. Talvez pudéssemos arranjar alguém mais jovem para o trabalho. Vamos aos banhos e tomamos um pouco de kvass (você é alérgico, eu também já fui). Veremos como os jovens trabalham. Não seria sério.
Razão: