Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 582

 

Boa tarde.

Parti meu cérebro quanto ao motivo pelo qual o seguinte algoritmo não funciona. Ele não passa uma matriz para a função. No início eu estava procurando a razão, mas consegui localizá-la neste exemplo de teste.

Relatórios: "Não é possível encontrar 'functest' em 'TestLib.ex4'" e depois "chamada de função de importação não resolvida".

Conteúdo do arquivo Test.mq4

#propriedade rigorosa
#Incluir <TestLibx.mqh>

em massa [5];

int OnInit() { return(INIT_SUCCEED); }
nulo OnDeinit(const int razão) { }

nulo OnTick()
{
(massa);
int c=0;
para (c=0;c<5;c++) Imprimir (" massa[",c,"]=",massa[c]," ");
Sleep(2000);
}

Conteúdo do arquivo da biblioteca TestLibx.mq4

# biblioteca de propriedade
#propriedade rigorosa
functest nulo (int &massx[])
{
int c=0;
enquanto (c<5)
{
massx[c]=MathRand();
c++;
}
retornar;
}
Conteúdo do arquivo da biblioteca TestLibx.mqh

#propriedade rigorosa
#importar "TestLibx.ex4
functest nulo (int &massx[]);
#importar

Anexar os arquivos originais ao arquivo.

Por favor, ajude-me a entender como passar arrays em MQL4 para a função de biblioteca.

Obrigado.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
Arquivos anexados:
MQL4.zip  11 kb
 
Alexey Viktorov:
A diferença de valores é maior que 10* pontos, mas precisamos considerar se a diferença será positiva ou negativa.

Obrigado. Quero me transferir para pontos de troca e comissão. O que há de errado com isso?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//
 
bij:

Obrigado. Quero me transferir para pontos de troca e comissão. O que está errado?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

Obrigado.

Op, você mudou sua resposta, eu não preciso saber o lucro. Troca e comissão, pode haver mais de uma posição.

 
bij:

Obrigado.

Op, algo para o qual você mudou sua resposta, eu não preciso saber o lucro. Troca e comissão.

É que você tem que dividir por lotes e precisa se multiplicar.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

O próprio princípio mostrou o que eu uso. E aplicá-lo em seu código é bastante simples.

 
Konstantin Nikitin:

É que você tem divisão por lote e precisa se multiplicar.

O próprio princípio mostrou o que eu uso. E aplicá-lo em seu código é muito fácil.

Estou vendo, obrigado.
 

Olá!

Pergunta: O indicador cria objetos gráficos(OBJ_ARROW), mas alguns deles só aparecem após a compilação ou mudança de cronograma. Não há erros ou avisos durante a compilação. No testador, Print("Error calling ObjectCreate():",GetLastError());0, Print("Error calling ObjectCreate():",GetLastError());4200.

Se você não se importa de responder a um manequim!

 
Como o testador pode programar as citações a partir de um período de tempo diferente (menor)?
 
Juer:
Como o testador pode programar as citações para um período de tempo diferente (menor)?
O alto prazo é baseado nos dados do baixo. Portanto, não é necessário.
 
bij:
Feche a posição se o tempo atual = tempo de abertura mais 5 minutos ou na abertura de uma nova barra se o período do gráfico for M5.

Obrigado. Melhorou. Mas agora há outro problema. O testador continua me dando 100% de resultados. Mas não é assim que funciona. Muitas negociações são abertas e normalmente fechadas após o tempo especificado, de acordo com o registro. No entanto, nem todos os negócios são lucrativos de acordo com o gráfico de resultados onde podemos ver os momentos de abertura e fechamento de posições. Qual pode ser a razão para tal esquerda a 100%?

Graças à Artem também!

Razão: