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

 

Olá Andrey!

  1. Já existem três funções para o preço de abertura:
  2. Há também funções para os bilhetes. Há dois deles:
Andrey, estas funções têm tudo o que você precisa, exceto a seleção por tamanho de lote. Farei num futuro próximo outras funções nas quais o preço aberto e o bilhete poderão ser obtidos por lote.

 
KimIV:

Olá, Andrey!

  1. Já existem três funções para o preço de abertura:
  2. Há também funções para os bilhetes. Há dois deles:
Andrey, estas funções têm tudo o que você precisa, exceto a seleção por tamanho de lote. Farei num futuro próximo outras funções nas quais o preço aberto e o bilhete poderão ser obtidos por lote.
Talvez sejam redundantes para mim e eu tenha que me livrar de condições desnecessárias, tais como: preço da próxima posição aberta, última posição aberta, mais próxima do mercado. E nem sempre isso se revela correto. Além disso, a compreensão de todas essas sutilezas será mais rápida se as compararmos corretamente. Obrigado, estou ansioso por isso.
 

A função GetOpenPriceByLot().

Esta função retorna o preço de abertura de uma posição ou pedido por tamanho de lote. A seleção das posições a serem levadas em conta é especificada por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão"" significa qualquer instrumento de mercado. O valorNULL significa o instrumento atual.
  • op- Operação comercial, posição ou tipo de ordem. Valores válidos:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT, OP_SELLSTOP ou-1. O valor padrão de-1 significa qualquer operação comercial.
  • mn- Identificador de um cargo ou ordem, MagicNumber. O valor padrão de-1 significa qualquer identificador.
  • lo- Lote. O valor padrão0 significa qualquer lote.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
ZS. Em anexo está um script para testar a funçãoGetOpenPriceByLot().
Arquivos anexados:
 

A função GetTicketByLot().

Esta função devolve o ticket de uma posição ou pedido por lote. A seleção das posições a serem levadas em conta é especificada por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do símbolo especificado. O valor padrão"" significa qualquer instrumento de mercado. O valorNULL significa o instrumento atual.
  • op- Operação comercial, posição ou tipo de ordem. Valores válidos:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT, OP_SELLSTOP ou-1. O valor padrão de-1 significa qualquer operação comercial.
  • mn- Identificador de um cargo ou ordem, MagicNumber. O valor padrão de-1 significa qualquer identificador.
  • lo - Lote. O valor padrão 0 significa qualquer lote.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

ZS. Anexado um script para testar a função GetTicketByLot().


Arquivos anexados:
 

Olá Igor!

Muito obrigado pelas novas características e por ser tão rápido. Tudo é muito bom. A função retorna, por exemplo, um pedido de bilhetes por condições, que podem ser definidas por variáveis externas ou você não pode utilizá-las. Estou um pouco confuso sobre esta linha aqui:

se ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Aqui verificamos a condição de declaração se, ou seja, se a variável externa <0, qualquer tipo de ordem está disponível OU se escrevermos, por exemplo, OP_BUY na chamada de função, a seleção será feita entre as ordens OP_BUY. Esta condição é clara, mas ainda temos uma condição equivalente escrita através do&& que afirma queOrderType() deve estar dentro do intervalo de ordens pendentes, ou seja, de 1 a 5. Nosso tipo OP_BUY não está incluído nesta faixa e, portanto, a condição do operador deve ser falsa e o controle deve passar para o operador que segue o operador if-else, ou seja, é difícil para mim dizer onde, em algum lugar atrás da seta do corpo encaracolado. Parece-me que devemos especificar aqui a condição para ordens de mercado e uma função separada de ordens pendentes do mesmo tipo. Isto é, se eu quiser fazer uma seleção de ordens de mercado e não souber seu tipo exato, eu pego a variável externa <0 mas dirijo a função onde as condições de 0 a 1 são especificadas. O mesmo processo é aplicado às ordens pendentes. Portanto, cheguei à conclusão de que devemos usar uma função diferente para cada categoria de tipos de pedidos quando usamos esta condição útil.

Além disso, tenho um problema com a conexão da biblioteca. Pesquisei e li, mas a conexão dá um erro ao compilar a EA que estou escrevendo. Ainda não tenho tempo para lidar com isso, quero escrever o rentável Expert Advisor mais rapidamente, então copiei todas as três bibliotecas necessárias e anexei-as após o início da função especial(), e coloquei suas variáveis globais em variáveis globais da EA e comentei referências a elas. Não é muito conveniente, mas funciona.
 
00007:

Estou um pouco confuso sobre esta linha aqui:

se ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Obrigado! Corrigido... Isto é uma conseqüência da cópia, ou seja, a utilização de uma pré-forma de outra função destinada a funcionar apenas com ordens de limite e parada.

00007:

Eu também tenho um problema com a conexão de bibliotecas. Eu pesquisei e li, mas a conexão me dá um erro ao compilar o Expert Advisor que estou escrevendo. Não tenho tempo para descobrir, e quero escrever um Expert Advisor rentável mais rapidamente, então copiei todas as três bibliotecas necessárias e anexei-as após o início da função especial(), e coloquei suas variáveis globais em variáveis EA globais e comentei referências a elas. Não é muito conveniente, mas funciona.

A propósito, eu não uso minhas próprias bibliotecas na forma de arquivos MQH. Normalmente copio as funções que preciso em meu EA, ou seja, meu EA padrão pronto é um único arquivo MQ4. Tudo o que eu preciso está dentro deste arquivo. Sim, há alguma repetitividade no código. Mas não há problemas com as versões das funções.

 

A propósito, também notei que você tem scripts de teste para cada função e eles têm todas as funções adicionais que você precisa, que você pode simplesmente adicionar ao seu EA junto com a função e tudo isso estará em um único arquivo sem nada a mais. As funções são simples e úteis, mas com sua permissão farei quatro delas para mim mesmo: duas para cargos e duas para paradas. Eles serão mais universais para as delicadas exigências da minha EA. Mas agora vejo como é fácil de fazer. Muito obrigado, Igor.

Cumprimentos a Andrei.

 

A função TimeOpenFirstPos().

Esta função retorna o tempo da primeira posição aberta. A seleção das posições a serem levadas em consideração é especificada por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições deste instrumento. O valor padrão"" significa qualquer instrumento de mercado. O valorNULL significa o instrumento atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão de-1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t=TimeCurrent();
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
O uso da função é similar ao TimeOpenLastPos()
 

Olá

Como adicionar um foeba ao seu canal SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

 
gince:

Olá

Como adicionar um foeba ao seu canal SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

Pato, é fácil:

  1. Você define o primeiro ponto da linha de fibo (calcule de onde você quer que ele venha).
  2. Decidir qual barra para obter o segundo ponto.
  3. Depois useEquationDirect() para obter o preço.
  4. Tendo coordenadas de dois pontos, traçar uma linha através deles usando a funçãoSetTLine().