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

 
KimIV >> :

Função IIFc().

...

Tentando fazer um operador ternário desaparecido?

Pontuação, obrigado, com o meu hábito de colocar aparelho de atar caracóis onde quer que eu possa, será muito útil.

 
CMEPTHiK писал (а) >>
Eu estava lendo o livro de V.Yakimkin. "Mercado Forex - seu caminho para o sucesso" e encontrou tais linhas "...diferencial de (DJI x Nikkei)..." Diga-me, Igor, é possível implementá-lo e produzi-lo sob a forma de indicador...

O diferencial é a velocidade mostrada pelo indicador ROC.

 

Igor, você não tem uma função em seu estoque para fechar todas as posições ao mesmo tempo, incluindo o fechamento com as posições contrárias em mente?

Isto é, primeiro fechar todas as posições contrárias, tanto quanto possível, levando em conta o descasamento dos lotes das posições contrárias, depois os perdedores, os lucrativos...

 
alexx_v писал(а) >>

Igor, você tem uma função em seu depósito para fechar todas as posições ao mesmo tempo, incluindo o fechamento com as posições do balcão em mente?

Isto é, primeiro fechar todas as posições opostas, na medida do possível, levando em conta o descasamento de muitas posições opostas, depois as perdedoras, lucrativas...

Não, ainda não o tenho.

 

A função ExistInHistoryCloseBetween().

Retorna uma bandeira para a existência no histórico de uma posição ou ordem fechada (apagada) entre datas. Função ExistInHistoryCloseBetween() recebe os seguintes parâmetros:

  • sy - Nome do instrumento de mercado. "" - qualquer símbolo, NULL - símbolo atual. O valor padrão é "".
  • op - Operação comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT, OP_SELLSTOP. Valor por default -1 - qualquer operação.
  • mn - Identificador de operações comerciais, MagicNumber. Valor por default -1 - qualquer número mágico.
  • d1 - Horário de fechamento da posição (eliminação de ordem pendente). O valor padrão é 0 - qualquer hora de fechamento (apagar). O tempo d1 deve ser menor que d2.
  • d2 - Horário de fechamento da posição (ordem pendente de exclusão). Valor padrão - 0 - qualquer tempo de fechamento (apagar). O tempo d2 deve ser maior que o tempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Exemplos do uso de ExistInHistoryCloseBetween().

  1. Presença de quaisquer posições fechadas ou ordens apagadas ontem de qualquer tipo com MagicNumber=0 pelo símbolo do gráfico atual.
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. Presença de quaisquer posições ou ordens fechadas (excluídas) nas últimas três horas.
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. Se uma compra em EUR foi ou não fechada nos últimos 5 minutos.
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

P.S. Em anexo está um roteiro para testar a função ExistInHistoryCloseBetween().

Arquivos anexados:
 

A função ExistInHistoryOpenBetween().

Devolve uma bandeira para a existência na história de uma posição ou ordem aberta (definida) entre as datas. A função ExistInHistoryOpenBetween() aceita os seguintes parâmetros:

  • sy - Nome do instrumento. "" - qualquer caractere, NULL - o símbolo atual. O valor padrão é "".
  • op - Operação comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT, OP_SELLSTOP. Valor por default -1 - qualquer operação.
  • mn - Identificador de operações comerciais, MagicNumber. Valor por default -1 - qualquer número mágico.
  • d1 - Tempo de abertura da posição (espera para fazer o pedido). O valor padrão é 0 - qualquer tempo de abertura (configuração). O tempo d1 deve ser menor do que o tempo d2.
  • d2 - Hora de abertura da posição (pendente de ordem de colocação). O valor padrão é 0 - qualquer tempo aberto (definido). O tempo d2 deve ser maior que o tempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Boa tarde!

Igor, você poderia me dizer como pintar a barra na cor que eu quiser?

Eu lhes direi desde o início. Estou escrevendo um indicador para o comércio zonal - a quarta dimensão do mercado B da Williams. Preciso que as barras sejam coloridas ou verdes, vermelhas ou cinzas.

Eu escrevi um indicador e foi isto que recebi:

Isto não é o que eu quero. Como fazer uma barra para ser colorida no meio. Estou usando um retângulo com duas coordenadas como método de sombreamento. É aí que eu tenho todo o problema, como escolher as coordenadas do início e do fim do retângulo.

Por favor, me dê uma dica.

Aqui está o código para o indicador.

Arquivos anexados:
zonetrade.mq4  6 kb
 
Duke3D писал(а) >>
Igor, você poderia me dizer como sombrear uma barra na cor que eu quero.
...
Como fazer uma barra para ser sombreada exatamente no meio.

Dê uma olhada no indicador Heiken Ashi. Seu código fonte está incluído no MetaTrader 4.

 

Função ExistInHistoryToDay().

Devolve a bandeira de existência na história de uma posição ou ordem aberta (conjunto) hoje. Função ExistInHistoryToDay() recebe os seguintes parâmetros:

  • sy - Nome do instrumento. "" - qualquer símbolo, NULL - o símbolo atual. O valor padrão é "".
  • op - Operação comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT, OP_SELLSTOP. Valor por default -1 - qualquer operação.
  • mn - Identificador comercial, MagicNumber. Valor por default -1 - qualquer magik.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  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 ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}