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

 

A função NumberOfLossPosToday().

Esta função retorna o número de posições perdidas fechadas hoje. A seleção das posições a serem levadas em conta é feita usando 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество убыточных позиций, закрытых сегодня.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              t=OrderCloseTime();
              if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
                if (OrderProfit()<0) kp++;
              }
            }
          }
        }
      }
    }
  }
  return(kp);
}
P.S. Em anexo está um roteiro para testar a função NumberOfLossPosToday().
Arquivos anexados:
 

A função PriceCloseLastPos().

Esta função retorna o preço de fechamento da última posição fechada. 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену закрытия последней закрытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderClosePrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
HH. Anexado um roteiro para testar a função PriceCloseLastPos().
Arquivos anexados:
 
Prezado KimIV Seria bom se você pudesse postar uma biblioteca de todas as suas funções no final do seu tópico.
 

Eu apoio isso. Você poderia até mesmo fazer desta maneira. Não toda a biblioteca. Mas várias bibliotecas, e não no final, mas à medida que as fi bibliotecas se acumulam sobre um determinado tópico.

Por exemplo, biblioteca separada sobre abertura/fechamento (abertura f-i apenas mais abertura por Market Watch e fechamento)

A próxima biblioteca - com f.i.'s que devolvem a presença de posições por estes ou aqueles atributos.

E assim por diante.

Somente é necessário recolher aqui as sugestões das pessoas atuais sobre o conjunto completo de bibliotecas.

 

A função PriceOpenLastPos().

Esta função retorna o preço de abertura da última posição aberta. 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=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=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
ZS. Anexado um roteiro para testar a função PriceOpenLastPos().
Arquivos anexados:
 

A função PriceOpenLastClosePos().

Esta função retorna o preço de abertura da última posição fechada. 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.06.2008                                                     |
//|  Описание : Возвращает цену открытия последней закрытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
HH. Anexado um roteiro para testar a função PriceOpenLastClosePos().
Arquivos anexados:
 
rid:

Eu apoio isso. Você poderia até mesmo fazer desta maneira. Não toda a biblioteca. Mas várias bibliotecas, e não no final, mas à medida que as fi bibliotecas se acumulam sobre um determinado tópico.

Por exemplo, biblioteca separada sobre abertura/fechamento (abertura f-i apenas mais abertura por Market Watch e fechamento)

A próxima biblioteca - com f.i.'s que devolvem a existência de posições por estes ou aqueles atributos.

E assim por diante.

Gostaria de fazer algumas sugestões sobre a aquisição de bibliotecas.

Boa tarde.

Prezado KimIV.

Você está fazendo uma coisa muito útil para os escritores especializados novatos.

Eu me junto ao peticionário anterior.

Se não for difícil, você pode reunir em um "modelo especializado " as principais funções.

-Verificações preliminares

-abertura de uma posição

-Colocar ordem

-Fechar uma posição

-Remover pedidos

-Suporte (modificação) de ordens e posições.

E todos escreverão um bloco com chamadas para estas funções eles mesmos.

Eu mesmo não posso escrever um EA do zero.

Foi por isso que comecei mudando o código de outra pessoa.

Comecei a acrescentar suas funções em blocos - o que eu recebo é confuso.

Após alguns dias de correções e acréscimos, o Expert Advisor do trial trabalhou, mas muito mal.

Foi por isso que fiz este pedido, para criar um simples modelo de Expert Advisor.


O modelo da Roche é um pouco difícil de entender e redundante no início - do artigo do MetaEditor: Construindo sobre o poder dos modelos.

 

A função PriceOpenNearPos().

Esta função retorna o preço de abertura da posição mais próxima. A distância mínima em pips entre o preço de abertura da posição e o preço de mercado atual serve como critério para a "proximidade" de uma posição. A seleção das posições a serem levadas em consideração é definida 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 valor NULL 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 representa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.06.2008                                                     |
//|  Описание : Возвращает цену открытия ближайшей позиции.                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
            }
          }
        }
      }
    }
  }
  return(oop);
}

SZY. Em anexo está um roteiro para testar a função PriceOpenNearPos().

Se alguém estiver interessado, compare DistMarketAndPos() e PriceOpenNearPos() para você mesmo. Observe as diferenças.

Arquivos anexados:
 

A função TicketNearPos().

Esta função devolve o ticket da posição mais próxima ao mercado. A distância mínima em pontos entre o preço de abertura e o preço de mercado atual é usada como critério para a "proximidade" de uma posição. A seleção das posições a serem consideradas é definida 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 05.06.2008                                                     |
//|  Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int TicketNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, p;
  int    i, k=OrdersTotal(), pp=0, ti=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              ti=OrderTicket();
            }
          }
        }
      }
    }
  }
  return(ti);
}
ZS. Anexado um roteiro para testar a função TicketNearPos().
Arquivos anexados:
 

Função TypeNearPos().

Esta função retorna o tipo(0-Buy, 1-Venda) da posição mais próxima ao mercado ao preço de abertura ou -1. A distância mínima em pips entre o preço de abertura de uma posição e o preço de mercado atual serve como critério para a "proximidade" de uma posição. A seleção das posições a serem levadas em consideração é definida 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 valor NULL 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 -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.06.2008                                                     |
//|  Описание : Возвращает тип ближайшей к рынку позиции или -1.               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int TypeNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, p;
  int    i, k=OrdersTotal(), pp=0, ty=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              ty=OrderType();
            }
          }
        }
      }
    }
  }
  return(ty);
}
ZS. Anexado um script para testar a função TypeNearPos().
Arquivos anexados: