Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 774

 
0Aleksandr0:

O que é isso? Não sou um bom juiz da MQL4, se me disserem o que tenho de obter, poderei escrevê-lo na MQL5.
Penso que tem algo a ver com o cálculo do lucro/perda histórica.


O problema é esse, eu próprio não o compreendo - o código foi escrito à minha ordem, retirado de uma aula. Estou também inclinado a pensar que este código é para o cálculo do equilíbrio. Mas, de acordo com a ideia, a mudança de equilíbrio com a abertura-fechamento de uma nova ordem deve ser reposta na matriz, mas não a vejo...

 
Aleksey Vyazmikin:

Por favor, ajude-me a reescrever o código no MT5 - Não sei nada sobre encomendas :(

#include <MT4Orders.mqh>
 
fxsaber:

Obrigado, a EA com esta turma compilada - não sei se vai entrar em conflito...


Agora a receber um erro ao executar o teste

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 DLL carregamento não é permitido

2017.08.23 11:22:59.929 Core 3 inicialização global falhou

2017.08.23 11:22:59.929 Core 3 erro crítico de inicialização global

2017.08.23 11:22:59.929 Core 3 testador parou porque a iniciação de peritos falhou


É utilizada a chamada da biblioteca - no MT4 tudo está correcto.

#import "Kernel32.dll"
bool CopyFileW(string lpExistingFileName,string lpNewFileName,bool bFailIfExists);
#import 

Qual pode ser a razão?

 
Aleksey Vyazmikin:

Obrigado, a EA compilou com esta turma - mas não sei se vai entrar em conflito...

Não o fará.

Agora a receber um erro ao executar o teste

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 DLL carregamento não é permitido

2017.08.23 11:22:59.929 Core 3 inicialização global falhou

2017.08.23 11:22:59.929 Core 3 erro crítico de inicialização global

2017.08.23 11:22:59.929 Core 3 testador parou porque a iniciação de peritos falhou


É utilizada a chamada da biblioteca - no MT4 tudo está correcto.

Qual poderia ser a razão?

Em Terminal permitir a utilização de DLL.

 
fxsaber:

Não o fará.

No Terminal, permitir que a DLL seja utilizada.


Não vai acreditar - eu acreditei, mas não teve efeito - aparentemente a cache está lá, que é limpa após algum tempo - está a funcionar agora. Obrigado.

 

Como podem os agentes ser ensinados a escrever para o mesmo ficheiro? Neste momento cada um cria o seu próprio ficheiro na sua própria pasta, o que não é bom.

 
Aleksey Vyazmikin:

Como podem os agentes ser ensinados a escrever para o mesmo ficheiro? Neste momento cada um cria o seu próprio ficheiro na sua própria pasta, o que não é bom.

Alexey, abra a documentação pelo menos uma vez... É aí descrita com precisão qual a bandeira que aponta para a pasta geral, que abre o acesso geral ao ficheiro. Se é mais fácil esperar pela resposta do que ler a documentação?

Документация по MQL5: Файловые операции
Документация по MQL5: Файловые операции
  • www.mql5.com
Файловые операции - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin:

Como podem os agentes ser ensinados a escrever para o mesmo ficheiro? Neste momento, cada um cria o seu próprio ficheiro na sua própria pasta, o que não é bom.


Primeiro (Passo 1) tem de ser ultrapassado:

... na sua própria pasta, ...


Isto é feito com a bandeira FILE_COMMON - todos os agentes irão agora escrever para uma pasta comum (mas mesmo assim cada agente irá escrever para o seu próprio ficheiro).


Exemplo EA:

//+------------------------------------------------------------------+
//|                                           Agents FILE_COMMON.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
input int s=0;
//---
string InpFileName="";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initialize the generator of random numbers 
   MathSrand(GetTickCount());
   InpFileName=IntegerToString(MathRand())+".txt";
//--- open the file 
   ResetLastError();
   int file_handle=FileOpen(InpFileName,FILE_WRITE|FILE_TXT|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- the string is formed, write it to the file 
      FileWriteString(file_handle,InpFileName);
      //--- close the file 
      FileClose(file_handle);
      PrintFormat("Data is written, %s file is closed",InpFileName);
      PrintFormat("Common path for all of the terminals installed on a computer: %s",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
     }
   else
     {
      PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+


Para abrir rapidamente esta pasta comum, faça o seguinte: No MetaEditor, seleccione "Abrir pasta de dados comum" no menu Ficheiro.


Agora execute este EA para optimização e veja como novos ficheiros são criados na Pasta de Dados Comum à medida que os testes são executados.

Arquivos anexados:
 
Vladimir Karputov:

O primeiro (passo 1) deve ser derrotado:


Isto é feito com a bandeira FILE_COMMON - todos os agentes irão agora escrever para uma pasta comum (mas mesmo assim cada agente irá escrever para o seu próprio ficheiro).


Exemplo EA:


Para abrir rapidamente esta pasta partilhada, faça o seguinte: no editor de códigos MetaEditor, seleccione "Open Common Data Folder" (Abrir pasta de dados comuns) no menu File (Ficheiro).


Agora execute este EA para optimização e veja como novos ficheiros serão criados na Pasta de Dados Comum à medida que os testes são executados.


Não quero pô-lo em Comum, pois o terminal funciona no seu próprio directório, e haverá muitos ficheiros, como você diz de qualquer forma, o que não resolve o problema.

 
Aleksey Vyazmikin:

Não quero entrar em Comum, uma vez que o terminal funciona no seu próprio directório, e ainda haverá muitos ficheiros, como você diz, o que não resolve o problema.


Diz: " ... Passo 1 ..."

No passo 2 - agora pense por si próprio, nomeadamente, como os múltiplos fios SEM CONFLITO podem escrever para UM só ficheiro.