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

 

Há um erro na função https://forum.mql4.com/ru/38949/page5#434241.

Deveria ser assim

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();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

Favor fazer o download novamente.

 

Boa tarde a todos!

Ao fixar os Expert Advisors (devido às atualizações da MQL), verificou-se que muitas das funções de Igor Kim não funcionam mais. Isto inclui os mais populares. Por exemplo,

NumberOfPositions - Retorna o número de posições.

ExistPosições - Retorna a bandeira de existência das posições.

Outra função, mencionei ontem no tópico: Função NumberOfBarCloseLastPos().
Esta função retorna o número de barras para fechar a última posição

Ao exibir o comentário sobre o gráfico do Testador de Estratégia, vejo que as funções retornam valores constantes (-1 e/ou 0) o tempo todo, apesar da existência de negócios (atuais e fechados). Parece que a EA não vê as condições definidas por estas funções em seu código.

Além disso, as chamadas funções "executáveis" deixam de funcionar, por exemplo, um conjunto de funções para fechar posições: ClosePosBySelect (esta função fecha uma posição preliminarmente selecionada) e funções associadas:
FecharPosições - Fechar posições a preço de mercado, etc.

Por favor, informe que tipo de erros existem nestas funções e o que deve ser corrigido, pelo menos usando uma delas -NumberOfPositions - ele retorna o número de posições?

 
Rita:

Boa tarde a todos!

Ao fixar os Expert Advisors (devido às atualizações da MQL), verificou-se que muitas das funções de Igor Kim não funcionam mais. Isto inclui os mais populares. Por exemplo,

NumberOfPositions - Retorna o número de posições.

ExistPosições - Retorna a bandeira de existência das posições.

Outra função, mencionei ontem na filial: Função NumberOfBarCloseLastPos().
Esta função retorna o número de barras para fechar a última posição.

Ao exibir o comentário sobre o gráfico do Testador de Estratégia, vejo que as funções retornam valores constantes (-1 e/ou 0) o tempo todo, apesar da existência de negócios (atuais e fechados). Parece que a EA não vê as condições definidas por estas funções em seu código.

Além disso, as chamadas funções "executáveis" deixam de funcionar, por exemplo, um conjunto de funções para fechar posições: ClosePosBySelect (fecha uma posição preliminarmente selecionada) e
FecharPosições - Fechar posições a preço de mercado, etc.

Favor informar que tipo de falhas apareceram nas funções e o que precisa ser corrigido, pelo menos usando uma delas como exemplo -NumberOfPositions - Retorna o número de posições?

NumberOfPositions() funciona bem para mim! Realmente, eu continuo trabalhando com a MQL4 sem plumas! Se você está escrevendo em uma linguagem atualizada, então eu acho que tudo precisa ser adaptado a ela ou ir para o Freelance! Tudo é comercializado com uma força terrível agora! Meu coração se apaixona por você!

Se você pode de alguma forma encaixarNumberOfPositions(), então ExistPositions() não é necessário! Você pode verificar desta forma:

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

Boa sorte!

 
borilunad:

NumberOfPositions() funciona bem para mim! É verdade, eu continuo trabalhando com a MQL4 sem plumas! Se você está escrevendo em uma linguagem atualizada, então tudo deve provavelmente ser ajustado a ela ou ir para Freelance! Tudo está sendo comercializado com uma força terrível agora! !

Eu não venho aqui muitas vezes, então não sei, o que significa "MQL4 sem profissionais"?

Você acha que aqueles que podem responder aqui não o fazem para forçar um visitante a pagar para responder a uma pergunta independente sem complicações?

Eu me pergunto quanto custaria aos programadores-comerciais locais para consertar tal função da I.Kim para trabalhar na última versão do mt4 com MQL atualizado:

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}
  return(kp);
}
Deixe-me lembrá-lo que Comentário( NumberOfPositions(NULL, -1, Magic) ); - retorna constantemente -1 mesmo que a EA tenha aberto posições.
 
Rita:

Eu não venho aqui muitas vezes, então não sei, o que significa "MQL4 sem profissionais"?

Você acha que aqueles que podem responder aqui não o fazem para forçar um visitante a pagar para responder a uma pergunta independente sem complicações?

Eu me pergunto quanto custaria aos programadores-comerciais locais para consertar tal função da I.Kim para trabalhar na última versão do mt4 com MQL atualizado:

Deixe-me lembrar que Comentário( NumberOfPositions(NULL, -1, Magic) ); sempre retornará -1, mesmo que a EA tenha aberto posições.

NULL como um parâmetro de função significa sem parâmetros.

Isso seria melhor)Comentário( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

Eu não venho aqui muitas vezes, então não sei, o que significa "MQL4 sem profissionais"?

Você acha que aqueles que podem responder aqui não o fazem para forçar um visitante a pagar para responder a uma pergunta independente sem complicações?

Pergunto-me qual seria o custo de consertar tal característica para um programador comercial:

Deixe-me lembrar que a saída de Comentário( NumberOfPositions(NULL, -1, Magic) ); mostra que -1 é sempre retornado, mesmo que a EA tenha aberto posições.

MQL4++ atualizado, como eles o chamam aqui!

Minha função retorna o número correto de posições! Mas você tem um erro em Comentário()! Tenho certeza de que a função funciona!

Experimente assim:

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

Assim você verá tudo exatamente na tabela, aplique as variáveis BuyPos e SellPos para verificar as condições! Veja como eu o tenho:

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

Boa sorte!

 

Obrigado, borilunad e vadynik, pela dica!

De fato, a função está funcionando! Aqui está um humilde agradecimento pela dica útil:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

Tudo está sendo comercializado com uma força terrível agora! Meu coração se apaixona por você!

Boris, você não tem vergonha de dizer isso? Conte quantas páginas você já escreveu tentando ajudá-lo. E este é o seu agradecimento a todos aqueles que o ajudaram? Não me lembro de todos, mas a Artem (artmedia70) gentilmente cuidou de seu problema e conseguiu em troca...
 
Rita:

Aqui está uma alternativa. A função só é chamada se o número de pedidos tiver mudado. Além disso, pode ser chamado se o tipo de pedido tiver mudado.

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

Obrigado, borilunad e vadynik, pela dica!

De fato, a função está funcionando! Aqui está um humilde agradecimento pela dica útil:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

Obrigado! Mas a próxima função sugerida a você pode estar com problemas, já que está escrita em MQL4++!