¿Cómo se puede enseñar a los agentes a escribir en el mismo archivo? Ahora mismo cada uno crea su propio archivo en su propia carpeta, lo que no es bueno.
Para escribir los datos de los Agentes en el mismo archivo se debe utilizar el modo Marco.
// Пример записи данных Агентов (включая Облачные) в один файл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-папку Терминала (не Агента)
}
}
}
Sin embargo, no entiendo, ¿es posible pasar 100 indicadores en un lote en este marco? ¿Por qué en un solo fotograma - ya que cada fotograma se considera como un pase separado, como he entendido de la descripción, o he entendido mal?
¿Y dónde puedo encontrar la descripción del formato de archivo*.mqd?
El significado es claro: estamos recogiendo datos para escribirlos después.
No entiendo muy bien por qué hay que declarar las variables entre paréntesis y qué significa el signo "&" antes de la variable.
De la documentación
Es posible pasar parámetros de tipos simples por referencia. En este caso, la modificación de dichos parámetros dentro de una función llamada afectará a las correspondientes variables pasadas por referencia. Para especificar que un parámetro se pasa por referencia, debe colocarse un modificador "&" después del tipo de datos.
Artyom Trishkin: Es lo básico. Lea en la ayuda sobre los parámetros formales de las funciones y el paso de parámetros por referencia.
Tal vez lo básico, sin argumentos, solo que no puedo entrar en el código, donde empieza, donde termina... de ahí las preguntas. Vale que es una referencia (?), pero ¿a qué?
¿Dónde se originó la variable"Str" aquí?
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-папку Терминала (не Агента)
}
Dice: "... Paso 1 ...".
En el paso 2 - ahora piensa por ti mismo, es decir, cómo múltiples hilos SIN CONFLICTO pueden escribir en UN archivo.
Esa es la cuestión, no pueden...
¿Supongo que los agentes de red no pueden trabajar con bibliotecas dll?
¿Hay alguna manera de averiguar el número de pase del probador? Para poder fusionar los archivos...
¿Cómo se puede enseñar a los agentes a escribir en el mismo archivo? Ahora mismo cada uno crea su propio archivo en su propia carpeta, lo que no es bueno.
Para escribir los datos de los Agentes en el mismo archivo se debe utilizar el modo Marco.
Para escribir los datos de los Agentes en un solo archivo, es necesario utilizar el modo Marco.
Gracias. Tendré que investigarlo.
¿Qué es el "modo marco"?
¿Qué es el "modo marco"?
https://www.mql5.com/ru/docs/optimization_frames
https://www.mql5.com/ru/docs/optimization_frames
Gracias - lo que se entiende por el modo.
Sin embargo, no entiendo, ¿es posible pasar 100 indicadores en un lote en este marco? ¿Por qué en un solo fotograma - ya que cada fotograma se considera como un pase separado, como he entendido de la descripción, o he entendido mal?
¿Y dónde puedo encontrar la descripción del formato de archivo*.mqd?
Sin embargo, no entiendo, ¿es posible pasar 100 indicadores en este marco en un lote?
Fíjate en el ejemplo anterior. Allí se puede transmitir cualquier cantidad de datos arbitrarios.
Fíjate en el ejemplo anterior. Transmite datos arbitrarios en cualquier cantidad.
Muchas preguntas, déjame preguntarte...
Esta es la función en el código
El significado es claro: estamos recogiendo datos para escribirlos después.
No sé muy bien por qué declaramos las variables entre paréntesis y qué significa el signo "&" antes de una variable.
Muchas preguntas, déjame preguntarte...
Esta es la función en el código
El significado es claro: estamos recogiendo datos para escribirlos después.
No sé muy bien por qué declaramos las variables entre paréntesis y qué significa el signo "&" antes de una variable.
Muchas preguntas, déjame preguntarte...
Esta es la función en el código
El significado es claro: estamos recogiendo datos para escribirlos después.
No entiendo muy bien por qué hay que declarar las variables entre paréntesis y qué significa el signo "&" antes de la variable.
Es posible pasar parámetros de tipos simples por referencia. En este caso, la modificación de dichos parámetros dentro de una función llamada afectará a las correspondientes variables pasadas por referencia. Para especificar que un parámetro se pasa por referencia, debe colocarse un modificador "&" después del tipo de datos.
Ejemplo:
Es lo básico. Lea en la ayuda sobre los parámetros formales de las funciones y el paso de parámetros por referencia.
Tal vez lo básico, sin argumentos, solo que no puedo entrar en el código, donde empieza, donde termina... de ahí las preguntas. Vale que es una referencia (?), pero ¿a qué?
¿Dónde se originó la variable"Str" aquí?