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.
Para escrever os dados dos agentes no mesmo ficheiro, é necessário utilizar o modo Frame.
// Пример записи данных Агентов (включая Облачные) в один файлinputint Range = 0;
voidOnTick()
{
// ....
}
// Файл открываем только в режимах одиночночного прогона или Фрейма.constint handle = ((MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_OPTIMIZATION)) || MQLInfoInteger(MQL_FRAME_MODE)) ?
FileOpen(__FILE__, FILE_WRITE | FILE_TXT) : INVALID_HANDLE;
// Подготовка данныхvoid GetData( string &Str, MqlTick &Ticks[], double &Balance )
{
Str = "Hello World!";
CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 2); // Последние два тика (пример)
Balance = AccountInfoDouble(ACCOUNT_BALANCE);
}
// Запись данныхvoid SaveData( conststring &Str, constMqlTick &Ticks[], constdouble Balance )
{
FileWrite(handle, Str);
for (int i = 0; i < ArraySize(Ticks); i++)
FileWrite(handle, Ticks[i].bid);
FileWrite(handle, Balance);
}
voidOnTesterDeinit()
{
if (handle != INVALID_HANDLE)
FileClose(handle);
ChartClose();
}
#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280doubleOnTester()
{
string Str;
MqlTick Ticks[];
double Balance;
GetData(Str, Ticks, Balance); // Подготовка данных для записиif (MQLInfoInteger(MQL_OPTIMIZATION)) // Оптимизация
{
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
Container[0] = Str;
Container[1] = Ticks;
Container[2] = Balance;
FrameAdd(NULL, 0, 0, Container.Data); // Отправили данные из Агента на Терминал
}
else// Одиночный прогон
{
if (handle != INVALID_HANDLE)
SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Агента (не Терминала)FileClose(handle);
}
return(0);
}
voidOnTesterPass()
{
if (handle != INVALID_HANDLE)
{
ulong Pass;
string Name;
long ID;
double Value;
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205while (FrameNext(Pass, Name, ID, Value, Container.Data))
{
string Str;
MqlTick Ticks[];
double Balance;
// Получили данные от Агента
Container[0].Get(Str);
Container[1].Get(Ticks);
Container[2].Get(Balance);
// FileWrite(handle, Pass); // Если хочется записать номер прохода
SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Терминала (не Агента)
}
}
}
No entanto, não compreendo, é possível passar 100 indicadores num lote neste quadro? Porquê num quadro - uma vez que cada quadro é considerado como um passe separado, como eu entendi da descrição, ou entendi mal?
E onde posso encontrar a descrição do formato do ficheiro*.mqd?
O significado é claro - estamos a recolher dados para serem escritos mais tarde.
Não percebo bem porque é que precisamos de declarar variáveis entre parênteses e o que significa "&" antes da variável?
A partir da documentação
É possível passar parâmetros de tipos simples por referência. Neste caso, a modificação de tais parâmetros dentro de uma função chamada afectará as variáveis correspondentes passadas por referência. A fim de especificar que um parâmetro é passado por referência, deve ser colocado um modificador "&" após o tipo de dados.
Talvez o básico, sem argumentos, só não consigo entrar no código, onde começa, onde acaba... daí as perguntas. Ok, é uma referência(?), mas a quê?
Qual foi a origem original da variável"Str" aqui?
while (FrameNext(Pass, Name, ID, Value, Container.Data))
{
string Str;
MqlTick Ticks[];
double Balance;
// Получили данные от Агента
Container[0].Get(Str);
Container[1].Get(Ticks);
Container[2].Get(Balance);
// FileWrite(handle, Pass); // Если хочется записать номер прохода
SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Терминала (не Агента)
}
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.
Aí é que está, não podem...
Presumo que os agentes de rede não possam trabalhar com bibliotecas dll?
Existe alguma forma de descobrir o número de passe do testador? Poder fundir os ficheiros...
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.
Para escrever os dados dos agentes no mesmo ficheiro, é necessário utilizar o modo Frame.
É necessário utilizar o modo Frame para escrever os dados dos Agentes num único ficheiro.
Obrigado! Terei de investigar.
O que é "Frame mode"?
O que é 'Frame Mode'?
https://www.mql5.com/ru/docs/optimization_frames
https://www.mql5.com/ru/docs/optimization_frames
Obrigado - qual é o modo entendido.
No entanto, não compreendo, é possível passar 100 indicadores num lote neste quadro? Porquê num quadro - uma vez que cada quadro é considerado como um passe separado, como eu entendi da descrição, ou entendi mal?
E onde posso encontrar a descrição do formato do ficheiro*.mqd?
No entanto, não compreendo, é possível passar 100 indicadores neste quadro num lote?
Veja-se o exemplo acima. Qualquer quantidade de dados arbitrários pode ser aí transmitida.
Veja-se o exemplo acima. Transmite dados arbitrários em qualquer quantidade.
Muitas perguntas, deixe-me fazer-lhe?
Aqui está a função no código
O significado é claro - estamos a recolher dados para serem escritos mais tarde.
Não sei bem porque declaramos variáveis entre parênteses e o que significa "&" antes de uma variável?
Muitas perguntas, deixe-me fazer-lhe?
Aqui está a função no código
O significado é claro - estamos a recolher dados para serem escritos mais tarde.
Não sei bem porque declaramos variáveis entre parênteses e o que significa "&" antes de uma variável?
Muitas perguntas, deixe-me fazer-lhe?
Aqui está a função no código
O significado é claro - estamos a recolher dados para serem escritos mais tarde.
Não percebo bem porque é que precisamos de declarar variáveis entre parênteses e o que significa "&" antes da variável?
É possível passar parâmetros de tipos simples por referência. Neste caso, a modificação de tais parâmetros dentro de uma função chamada afectará as variáveis correspondentes passadas por referência. A fim de especificar que um parâmetro é passado por referência, deve ser colocado um modificador "&" após o tipo de dados.
Exemplo:
É o básico. Leia na ajuda sobre parâmetros de funções formais e parâmetros de passagem por referência.
Talvez o básico, sem argumentos, só não consigo entrar no código, onde começa, onde acaba... daí as perguntas. Ok, é uma referência(?), mas a quê?
Qual foi a origem original da variável"Str" aqui?