Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 159

 
hoz:

Há uma função. Aqui estão seus inícios:

Aqui está a essência disto. O segundo parâmetro formal da função tem um valor padrão de 0. Portanto, de acordo com a documentação, posso chamar esta função sem o segundo parâmetro, porque o padrão será 0.

Eu o chamo assim:

O compilador se afasta:

Por quê?

Mova-o da biblioteca para o código "o que você faz". Se o erro desaparecer, significa que há um problema com a conexão correta da biblioteca no código wha-tam-do. Antes de mais nada.

Se não for embora - veja quais parâmetros são passados para a função. Na idéia, deve haver um parâmetro do tipo string com o nome do par de moedas. Basta passar Símbolo()

 
artmedia70:

Mova-o da biblioteca para o código wha-tam-do. Se o erro desaparecer, significa que há um problema com a conexão correta da biblioteca no código wha-tam-do. Antes de mais nada.

Se não for embora - veja quais parâmetros são passados para a função. Na idéia, deve haver um parâmetro do tipo string com o nome do par de moedas. Basta passar Símbolo().



Isso realmente ajuda. Vou pensar sobre isso.

Isto é tão estranho. Por que eu deveria procurar na biblioteca se a passagem dos parâmetros está correta? O erro está claramente escrito. Ou não há nada específico? Eu só queria saber o que era necessário.

Esta função é emprestada, por isso estou afixando-a com os contatos do autor:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

Foi assim que o importei:

#import "hoz_Base@Library.ex4"
    double ND (double v);
    string DToS (double v);
    string DToSByLots (double v);
    void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0);
#import

A chamada agora é assim:

fGet_MarketInfo (fs_Symbol);

Como você resolve tais problemas?

 
hoz: Como esses problemas são resolvidos?

Estudar a documentação. As bibliotecas compiladas não passam parâmetros por padrão - você deve passar TODOS os parâmetros ao chamar uma função. Leia-o com atenção. Extrato:

Como as funções importadas estão fora do módulo que está sendo compilado, o compilador não pode verificar se os parâmetros passados estão corretos. Portanto, a composição e a ordem dos parâmetros passados para as funções importadas devem ser descritas com precisão para evitar erros de tempo de execução. Os parâmetros passados para funções importadas (tanto de módulos EX4 como DLL) não podem ter valores padrão.
 
TarasBY:

Nenhum parâmetro padrão é passado para bibliotecas compiladas - você deve passar TODOS os parâmetros ao chamar uma função. Leia-o com atenção. Extrato:

Como as funções importadas estão fora do módulo que está sendo compilado, o compilador não pode verificar se os parâmetros passados estão corretos. Portanto, a composição e a ordem dos parâmetros passados para as funções importadas devem ser descritas com precisão para evitar erros de tempo de execução. Os parâmetros passados para funções importadas (tanto de módulos EX4 como DLL) não podem ter valores padrão.

Ah, é isso aí. Viva e aprenda! Obrigado, vou ter isso em mente.
 

Ao executar a otimização no MT4, precisamos receber informações sobre um passe na guia "Resultados da otimização" semelhante ao gerado por um único passe na guia "Relatório".

Como isso pode ser implementado?

 

Decidi me familiarizar com a biblioteca. Copiei parte do código do meu indicador e o colei em uma função, e copiei e colei esta função em dois arquivos de biblioteca.

Eu nomeei o primeiro "indi.mqh" e o segundo simplesmente "djo.mq4".

int countbars(int& hist, int obrax, bool tikk)
{ 
 int z=0;
 static int PreBars=0; 
 static datetime BarTime=0;
 if (Bars == PreBars && tikk==false)return(-1);
 if (Bars < hist+obrax)  
 {
  if (Bars-obrax<=1) {Alert (" Недостатьньо історії");return(-1);}
  hist=Bars-obrax;
 }
 
 if (Bars-PreBars == 0 && BarTime==Time[0] && tikk==true) return(0);
 else  
 {
  if (Bars-PreBars == 1 && BarTime==Time[1]) z=1;
  else  z=hist;
 }
 PreBars = Bars;  
 BarTime=Time[0];
 return (z);
}

Ao ponto: quando se refere ao primeiro, tudo funciona como planejado;

 include <indi.mqh>

ao substituir o primeiro pelo segundo e acessar o segundo por um método:

#import "djo.ex4"  int countbars(int& hist, int obrax, bool tikk);  #import

Mas nada funciona, nem mesmo os alertas - em nenhum lugar depois do início. E agora mesmo e o terminal se fechou))

Como eu acho que todas as constantes são reinicializadas cada vez que eu acesso a função importada?

Onde posso ler em detalhes sobre a importação de mql4, quais bugs são corrigidos ou não e assim por diante?

Obrigado, eu vou dormir............

 
ALXIMIKS:

Decidi me familiarizar com a biblioteca. Eu peguei uma parte do código do meu indicador e o coloquei na função, e multipliquei esta função e colei-a em dois arquivos de biblioteca.

Eu nomeei o primeiro "indi.mqh" e o segundo simplesmente "djo.mq4".

Ao ponto: quando se refere ao primeiro, tudo funciona como planejado;

ao substituir o primeiro pelo segundo e acessar o segundo por um método:

Mas nada funciona, nem mesmo os alertas - em nenhum lugar depois do início. E agora mesmo e o terminal se fechou))

Como eu acho que todas as constantes são reinicializadas cada vez que eu acesso a função importada ?

Onde posso ler em detalhes sobre a importação de mql4, quais bugs são corrigidos ou não e assim por diante?

Obrigado, eu vou dormir............

É possível passar parâmetros por referência. Neste caso, a modificação de tais parâmetros afetará as variáveis correspondentes na função chamada passada por referência. Não é possível passar elementos de arrays por referência. Os parâmetros podem ser passados por referência somente dentro dos limites de um único módulo, tal oportunidade não é fornecida para funções de biblioteca. A fim de especificar que o parâmetro é passado por referência, o modificador & deve ser colocado após o tipo de dado. E aqui estão mais algumas experiências.
 
Diga-me. Eu recebo uma mensagem sonora quando cruzo duas médias deslizantes. Quando aberta, esta mensagem sonora é repetida tantas vezes quantas as travessias que houve na história. Pergunta. Como posso conseguir que produza uma mensagem apenas para os sinais que foram gerados no tempo presente. Ou seja, somente no momento e o sinal que foi recebido literalmente no momento.
 
Zolotai:
Diga-me. Eu recebo uma mensagem sonora quando cruzo duas médias deslizantes. Quando aberta, esta mensagem sonora é repetida tantas vezes quantas as travessias que houve na história. Pergunta. Como posso conseguir que produza uma mensagem apenas para os sinais que foram gerados no tempo presente. Ou seja, somente no momento e o sinal que foi recebido literalmente no momento.
Na abertura de quê? Parece ser um indicador. Há muitas soluções. Tudo depende do código.
 
artmedia70:
Ao abrir o quê? Parece ser um indicador. Há muitas soluções. Tudo depende do código.


Não tem nada a ver com o código. Eu só preciso da condição correta. A questão é se podemos saber o horário do bar atual. Como posso saber o horário do bar?
Razão: