Comment apprendre aux agents à écrire dans le même fichier ? Actuellement, chacun crée son propre fichier dans son propre dossier, ce qui n'est pas bon.
Pour écrire les données des agents dans le même fichier, vous devez utiliser le mode 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-папку Терминала (не Агента)
}
}
}
Cependant, je ne comprends pas, est-il possible de passer 100 indicateurs en un lot dans ce cadre ? Pourquoi dans un seul cadre - puisque chaque cadre est considéré comme un passage séparé, comme j'ai compris de la description, ou j'ai mal compris ?
Et où puis-je trouver la description du format de fichier*.mqd?
Beaucoup de questions, laissez-moi vous demander...
Voici la fonction dans le code
Le sens est clair : nous recueillons des données qui seront écrites plus tard.
Je ne comprends pas bien pourquoi nous devons déclarer les variables entre parenthèses et ce que signifie le signe "&" devant la variable ?
Extrait de la documentation
Il est possible de passer des paramètres de types simples par référence. Dans ce cas, la modification de ces paramètres dans une fonction appelée affectera les variables correspondantes passées par référence. Pour spécifier qu'un paramètre est transmis par référence, il faut placer un modificateur "&" après le type de données.
Peut-être les bases, pas d'arguments, mais je n'arrive pas à entrer dans le code, où ça commence, où ça finit... d'où les questions. Ok c'est une référence( ?), mais à quoi ?
D'où vient la variable"Str" à l'origine ?
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-папку Терминала (не Агента)
}
Il est écrit : "... Étape 1 ...".
À l'étape 2, réfléchissez maintenant par vous-même, à savoir comment plusieurs threads SANS CONFLIT peuvent écrire dans UN fichier.
C'est ça le truc, ils ne peuvent pas...
J'en déduis que les agents de réseau ne peuvent pas travailler avec les bibliothèques dll ?
Existe-t-il un moyen de connaître le numéro de passe du testeur ? Pour pouvoir coller les dossiers ensemble...
Comment apprendre aux agents à écrire dans le même fichier ? Actuellement, chacun crée son propre fichier dans son propre dossier, ce qui n'est pas bon.
Pour écrire les données des agents dans le même fichier, vous devez utiliser le mode Frame.
Vous devez utiliser le mode Cadre pour écrire les données des agents dans un seul fichier.
Merci ! Je vais devoir y réfléchir.
Qu'est-ce que le "mode cadre" ?
Qu'est-ce que le "Frame Mode" ?
https://www.mql5.com/ru/docs/optimization_frames
https://www.mql5.com/ru/docs/optimization_frames
Merci - quel est le mode compris.
Cependant, je ne comprends pas, est-il possible de passer 100 indicateurs en un lot dans ce cadre ? Pourquoi dans un seul cadre - puisque chaque cadre est considéré comme un passage séparé, comme j'ai compris de la description, ou j'ai mal compris ?
Et où puis-je trouver la description du format de fichier*.mqd?
Cependant, je ne comprends pas, est-il possible de passer 100 indicateurs dans ce cadre en un lot ?
Regardez l'exemple ci-dessus. N'importe quelle quantité de données arbitraires peut y être transmise.
Regardez l'exemple ci-dessus. Il transmet des données arbitraires en n'importe quelle quantité.
Beaucoup de questions, laissez-moi vous demander...
Voici la fonction dans le code
Le sens est clair : nous recueillons des données qui seront écrites plus tard.
Je ne sais pas vraiment pourquoi nous déclarons les variables entre parenthèses et ce que signifie le signe "&" devant une variable ?
Beaucoup de questions, laissez-moi vous demander...
Voici la fonction dans le code
Le sens est clair : nous recueillons des données qui seront écrites plus tard.
Je ne sais pas vraiment pourquoi nous déclarons les variables entre parenthèses et ce que signifie le signe "&" devant une variable ?
Beaucoup de questions, laissez-moi vous demander...
Voici la fonction dans le code
Le sens est clair : nous recueillons des données qui seront écrites plus tard.
Je ne comprends pas bien pourquoi nous devons déclarer les variables entre parenthèses et ce que signifie le signe "&" devant la variable ?
Il est possible de passer des paramètres de types simples par référence. Dans ce cas, la modification de ces paramètres dans une fonction appelée affectera les variables correspondantes passées par référence. Pour spécifier qu'un paramètre est transmis par référence, il faut placer un modificateur "&" après le type de données.
Exemple :
C'est l'essentiel. Lisez l'aide sur les paramètres formels des fonctions et le passage des paramètres par référence.
Peut-être les bases, pas d'arguments, mais je n'arrive pas à entrer dans le code, où ça commence, où ça finit... d'où les questions. Ok c'est une référence( ?), mais à quoi ?
D'où vient la variable"Str" à l'origine ?