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

 
KimIV:
khorosh:
há um erro na função bool idPriceLevel() incluída no e-TFL_v2 Expert Advisor: gdUpPrice==0 é repetido duas vezes na última condição, você provavelmente pretendia escrever gdDnPrice==0 no segundo caso.

Obrigado! Fiz o upload da versão corrigida do e-TFL_v2 para o site.


khorosh:
Por alguma razão, este EA trabalha no meu Testador de Estratégia em modo visual, mas não abre posições em uma conta demo, embora informe os níveis de compra e venda nos comentários. Talvez você possa me dizer qual é o problema.

Não sei... Acabei de testar este Expert Advisor em uma demonstração da NorthFinance. Ontem, meu amigo de Moscou me ligou. Ele reclamou do mesmo Conselheiro Especialista. Ele diz que ele abre posição pela linha e depois cada vez mais até que você a pare e abra muitas posições. Portanto, existiam dois objetivos para os testes:

1. A respeito de sua pergunta. Verificação da funcionalidade geral.

2. Sobre a pergunta de meu amigo. Abri apenas uma posição a partir de uma linha.

Para verificar, coloquei o e-TFL_v2 Expert Advisor em prazos de 5 minutos EURUSD, GBPUSD, USDCHF e USDJPY. Usando linhas de tendência, desenhei canais nas últimas 20-30 barras. Como resultado, o Expert Advisor trabalhou como deveria. EUR foi comprado da linha inferior, enquanto o JPY foi vendido da linha superior. Para pound and chyf tudo estava correto também. Portanto, você deve verificá-lo por conta própria. O Expert Advisor trabalha.

KimIV:
khorosh:
A função idPriceLevel() no e-TFL_v2 tem um erro: na última condição gdUpPrice==0 é repetido duas vezes. Provavelmente, no segundo caso você pretendia escrever gdDnPrice==0.

Obrigado! Fiz o upload da versão corrigida do e-TFL_v2 para o site.


khorosh:
Por alguma razão, este EA trabalha no meu Testador de Estratégia em modo visual, mas não abre posições em uma conta demo, embora informe os níveis de compra e venda nos comentários. Talvez você possa me dizer qual é o problema.

Não sei... Acabei de testar este Expert Advisor em uma demonstração da NorthFinance. Ontem, meu amigo de Moscou me ligou. Ele reclamou do mesmo Conselheiro Especialista. Ele diz que ele abre posição pela linha e depois cada vez mais até que você a pare e abra muitas posições. Portanto, existiam dois objetivos para os testes:

1. A respeito de sua pergunta. Verificação da funcionalidade geral.

2. Sobre a pergunta de meu amigo. Abri apenas uma posição a partir de uma linha.

Para verificar, coloquei o e-TFL_v2 Expert Advisor em prazos de 5 minutos EURUSD, GBPUSD, USDCHF e USDJPY. Usando linhas de tendência, desenhei canais nas últimas 20-30 barras. Como resultado, o Expert Advisor trabalhou como deveria. EUR foi comprado da linha inferior, enquanto o JPY foi vendido da linha superior. Para pound and chyf tudo estava correto também. Portanto, você deve verificá-lo por conta própria. O Expert Advisor trabalha.

Talvez eu não entenda bem a lógica da EA, mas me parece que se uma linha for usada, a condição onde o erro ocorreu será cumprida e o idPriceLevel() definirá Falso. Explique, se eu estiver errado.

 
khorosh:

se for usada uma única linha, a condição onde o erro ocorreu será atendida e o idPriceLevel() será definido como Falso, e isto não abrirá a posição.

Sim, isso é correto. A EA requer duas linhas para seu funcionamento normal: uma linha está acima do preço e a segunda linha está abaixo do preço atual. Eu corrigi a descrição no site. Obrigado!

 
KimIV:
khorosh:

se for usada uma única linha, a condição onde o erro ocorreu será atendida e o idPriceLevel() será definido como Falso, e isto não abrirá a posição.

Sim, isso é correto. A EA requer duas linhas para seu funcionamento normal: uma linha está acima do preço e a segunda linha está abaixo do preço atual. Eu corrigi a descrição no site. Obrigado!

É por isso que minha posição não se abriu, pois eu trabalhava com uma linha. Tudo está claro agora. Obrigado por seus esforços altruístas. Suas funções são muito claras e claramente descritas. Talvez a maioria de nossos EAs, que estão sendo desenvolvidos agora, agora usará suas funções.

 

Função Existente no mercadoOPNearMarket().

Esta função retorna uma bandeira de que uma ordem ou posição existe perto do mercado (a uma distância especificada em pips do mercado). A seleção mais precisa das ordens ou posições a serem verificadas é especificada por parâmetros externos:

  • sy - Nome do instrumento. Se este parâmetro for definido, a função somente verificará as ordens ou posições do instrumento especificado. O "" ou NULL significa o símbolo atual.
  • op - Operação comercial, ordem ou tipo de posição. Valores válidos: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP ou -1. O valor padrão de -1 significa qualquer operação comercial.
  • mn - Identificador da ordem ou posição (MagicNumber). O valor padrão -1 significa qualquer identificador.
  • ds - Distância do mercado em pips. O valor padrão é 1000000.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от рынка   (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;

  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
            if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
          }
          if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
            if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
          }
        }
      }
    }
  }
  return(False);
}
SZZY. roteiro anexo para experimentos com a função ExistOPNearMarket().
Arquivos anexados:
 

Função ExistPosByPrice().

Esta função retorna uma bandeira para a existência de uma posição a um determinado preço em aberto. Uma seleção mais precisa das posições a serem verificadas é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se você especificar este parâmetro, a função só verificará as posições de um instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. 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.
  • pp - Posição preço aberto. O valor padrão 0 significa qualquer preço.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  int    d, 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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS. No trailer há um roteiro para testar a função ExistPosByPrice().
Arquivos anexados:
 

A função GetAmountLotFromOpenPos().

Esta função retorna a soma de muitas posições em aberto. Uma seleção mais precisa 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. 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 GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=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) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Anexado um script para testar a função GetAmountLotFromOpenPos().
Arquivos anexados:
 

A função GetIndexByTicket().

Esta função retorna o índice da ordem ou posição por bilhete. A seleção mais precisa das ordens ou posições a serem pesquisadas é especificada por parâmetros externos:

  • ti - Pedido de bilhetes, posição. O valor deste parâmetro não pode ser vazio ou zero.
  • sy - Nome do instrumento de mercado. Se você definir este parâmetro, a função considerará apenas as posições do instrumento especificado. Valor padrão - "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, ordem ou tipo de posição. Valores válidos: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP ou -1. O valor padrão de -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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  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=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS. Em anexo está um script para testar a função GetIndexByTicket().
Arquivos anexados:
 

Olá

Eu gostaria de saber se você tem uma função para determinar a correlação de duas séries passadas a ela como parâmetros?

 
scorpionk:

Olá

Eu gostaria de saber se você tem uma função para determinar a correlação das duas séries passadas a ela como parâmetros?

não... Mas eu tenho interesse neste tópico. Se você fornecer as fórmulas para calcular a correlação, eu escreverei a função.


ZS. Eu mesmo não vou procurar as fórmulas. Eu também não irei a ligações com materiais. Ou seja, não tenho nenhum desejo de entender o assunto. Existe apenas o desejo de escrever uma função usando fórmulas prontas.

 
KimIV:
escorpião:

Olá

Eu gostaria de saber se você tem uma função para determinar a correlação das duas séries passadas a ela como parâmetros?

não... Mas eu tenho interesse neste tópico. Se você fornecer as fórmulas para calcular a correlação, eu escreverei a função.


ZS. Eu mesmo não vou procurar as fórmulas. Eu também não irei a ligações com materiais. Ou seja, não tenho nenhum desejo de entender o assunto. Existe apenas o desejo de escrever a função nas fórmulas prontas.


Fórmula de correlação

Razão: