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

 

A função NumberOfBarCloseLastPos().

Esta função retorna o número de fechamento da barra da última posição ou -1. A seleção das posições a serem levadas em conta é 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 deste instrumento. O valor padrão - NULL significa o instrumento de mercado atual.
  • tf - Cronograma. O valor padrão 0 significa o período de tempo 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                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

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

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

Função DeleteOrders() é projetada para excluir pedidos pendentes BuyLimit, BuyStop, SellLimit e SellStop. 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 significa qualquer ordem.
mn
- MagicNumber, número de identificação da ordem pendente. O valor padrão -1 significa qualquer magik.

Olá. Na página 10 esta função foi definida para ser aplicada.

Eu apliquei em meu Consultor Especialista para apagar as ordens pendentes. Ou melhor, eu queria usá-la. Coloquei a função fora da seção int start

Coloquei-o.

if (isCloseLastPosByTake(NULL,OP_BUY, My order Buy ))   {
              DeleteOrders(NULL, -1,  My order Sell);   }

Mas ao compilar, eu recebo um erro

clDelete' - variável não definida C:\Program Files\MetaTrader - Alpari`experts\0005.mq4 (1155, 40)

Como posso eliminar este erro?

E quando eu uso a função ClosePositions() - Fecharposições a preço de mercado, tudo está bem - sem erros!

/ mesmo que eu apenas insira a função DeleteOrders e não a aplique ainda - este erro ainda se compila!

 
Rita писал (а):
Mas quando você o compila, você recebe um erro
clDelete' - variável não definida C:\Program Files\MetaTrader - Alpari`experts\0005.mq4 (1155, 40)
Como posso eliminar este erro? O que é este 'clDelete'?

Ali, na página 10 no anexo está o arquivo test_DeleteOrders.mq4

Faça o download e procure por qualquer referência clDelete nela contida.

 

Descarregue-o, assista-o! Então? Acontece que tudo o que eu tinha que fazer era definir a cor do ícone de fechamento!

Mas agora não está tudo bem novamente. Agora esse erro desapareceu. Mas outro erro apareceu - na função ClosePositions() - que não existia antes.

if (L_2Sell==true)                 {  
        ClosePositions(NULL, -1,Magic);
                                      }

ClosePosBySelect' - função não está definida C:\Program Files\MetaTrader - Alpari`experts\0005.mq4 (905, 47)
E não há nenhum script por perto (p. 14) para verificar

Você pode me dizer como corrigir este erro?

 
Rita писал (а):
ClosePosBySelect' - função não está definida C:\Program Files\MetaTrader - Alpari`experts\0005.mq4 (905, 47)

Este erro significa que ClosePosBySelect() não está definido.

Rita escreveu (a):
Você pode me dizer como corrigir este erro?
Encontre o código da função ClosePosBySelect() e cole-o no arquivo de sua EA. Por favor, consulte a página 13.
 

Desculpe incomodá-lo novamente! Eu coloquei a função ClosePositions() que você especificou ao lado de ClosePosBySelect(), e seis erros apareceram após a compilação! Eu me sinto zangado!

Eu mesmo já lidei com quatro deles. Escorregamento, cor, número de tentativas de aproximação....Dois erros permanecem, -

arquivos de som -

UseSound' - variável não definida C:\Program Files\MetaTrader - Alpari`experts\0005.mq4 (1002, 13)

NameFileSound' - variável não definida C:³ Files\MetaTrader - Alpari`experts\0005.mq4 (1002, 33)

De onde eu o retiro? Onde os coloco?

Bem externo Bool UseSound = falso;//Switch off

Vou colocá-lo em "PROPRIEDADES DO EXPERTO", mas o que é "NameFileSound" e para onde devo levá-lo?

**************************************************************************

Fundou-o e colocou-o no mundo inteiro.

extern bool UseSound = false;//выключатель звука
extern string NameFileSound="alert.wav";

E em vez de um erro, o compilador jogou mais 4:

GetNameOP' - a função não está definida

Descrição do erro - a função não está definida

"outra coisa" - ficha inesperada

GetNameOP' - a função não está definida

Estes erros parecem continuar aparecendo sem parar. Para usar uma função ClosePositions(), eu tive que primeiro criar outra - ClosePosBySelect(). E o outro, por sua vez, requer alguns sons - sinos e apitos. E quando estou lutando para encontrar esses sinos e sinos totalmente desnecessários, recebo todo tipo de erros estranhos - "outros" - inesperados e outros erros. Eu ainda nem comecei a usar esta função. Eu só o defini entre outros!

Você pode me dizer como posso corrigir esses erros? Eu comentei todos estes GetNameOP. Os erros parecem ter desaparecido. Mas será que a função funcionará bem sem eles?

 
Rita писал (а):
E aqui, em vez de um erro, o compilador jogou mais 4:
GetNameOP' - a função não está definida

Na primeira página do anexo testrSetOrder.mq4

Rita escreveu:
ErrorDescription' - a função não está definida

No código de sua EA insira a seguinte linha

#incluir <stdlib.mqh>.

Rita escreveu:
'else' - inesperado
Quando você faz como descrito acima, o erro desaparecerá por si só.
 

A função NumberOfBarOpenLastPos().

Esta função retorna o número de barra da última posição aberta ou -1. 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 - NULL significa o instrumento de mercado atual.
  • tf - Cronograma. O valor padrão 0 significa o período de tempo 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                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
HH. Anexado um roteiro para testar a função NumberOfBarOpenLastPos().
Arquivos anexados:
Razão: