const RESOURCEDATA<uint> Resource("\Terminal\99A739E3DB06068691C851DE1765F329\MQL5\Experts\ZC\Conections\Draft4.ex5::ResoC"); // Ресурс для доступа к данным (только для чтения) из другой программы
CONTAINER<uint> Container4; // Сюда будем получать данные
Resource.Get(Container4.Data); // Считали данные из ресурса.
for (int i = 0; i < Container4.GetAmount(); i++)
Print("i==",i);
string Str4;
Container4[0].Get(Str4); // Получили массив
Print("Test!!!"+Str4);
Print(Str4);
//---
}
Parece que faço tudo por analogia, mas por algum motivo não vejo nenhuma informação do que escrevi, nem uma matriz do tipo string, nem uma única string que obtenho de minha estrutura
Parece que faço tudo por analogia, mas, por algum motivo, nenhuma informação é exibida a partir do que escrevi, nem uma matriz do tipo string, nem uma única string que obtenho de minha estrutura.
Tentei imediatamente, pois isso já foi mencionado aqui antes. Passei pelas opções de correção tanto no nome quanto no endereço, e também corrigi em "ResourceData.mqh". Infelizmente, não ajudou. Ainda não encontrei a causa
Verifiquei o nome do recurso usando Print("Full Name: ",Resource.GetFullName()); pego o nome correto, tentei as variantes de caminho TERMINAL_PATH e TERMINAL_DATA_PATH - o resultado é o mesmo.
Ao usar ResourceReadImage(FullNameCorrect,Arr,width,height)) diretamente, posso aceitar dados de um recurso criado por outro EA, e tudo funciona corretamente. Ao acessar o mesmo nome de recurso por meio de funções de biblioteca (semelhante à anexada acima), os dados não são aceitos.
Farei um relatório mais detalhado quando descobrir qual é o problema.
Um recurso criado por meio da biblioteca não é encontrado nem manualmente nem por meio da biblioteca
Um recurso criado manualmente é localizado e lido manualmente, mas não é localizado por meio da biblioteca.
Ele funciona por meio da biblioteca.
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/pt/code/22166#define PRINT(A) Print(#A + " = " + (string)(A));
voidOnStart()
{
// Dados arbitrários para o exemplostring Str[] = {"123", "Hello World!"};
double Num = 5;
MqlTick Tick = {0};
Tick.bid = 1.23456;
const RESOURCEDATA<uint> Resource("::ResoC"); // Recurso para compartilhamento de dados
CONTAINER<uint> Container; // Crie um contêiner - tudo será armazenado em uma matriz de um tipo simples (no exemplo, foi escolhido uint)// Preencher o contêiner com dados diferentes
Container[0] = Str;
Container[1] = Num;
Container[2] = Tick;
// Imprimir os tipos de dados armazenados no contêinerfor (int i = 0; i < Container.GetAmount(); i++)
PRINT(Container[i].GetType())
Resource = Container.Data; // Enviou os dados para troca
CONTAINER<uint> Container2; // É aqui que obteremos os dadosconst RESOURCEDATA<uint> Resource2(Resource.GetFullName()); // Recurso para compartilhamento de dados
Resource2.Get(Container2.Data); // Obteve os dados// Obter os dados em sua forma originalstring Str2[];
Container2[0].Get(Str2); // Obteve a matrizArrayPrint(Str2);
PRINT(Container2[1].Get<double>()) // Temos um número
PRINT(Container2[2].Get<MqlTick>().bid) // Temos a estrutura
}
voidOnTimer()
{
// ....staticconst RESOURCEDATA<uint> Resource("::ResoC"); // Recurso para compartilhamento de dados// ....
}
Você criou um objeto em cada entrada do OnTimer e, consequentemente, o eliminou - na saída. É por isso que o recurso viveu por microssegundos e não estava ao lado.
class RESOURCE
{
public:
~RESOURCE( void)
{
::ResourceFree(this.Name);
}
Que ponto óbvio, que eu deixei passar por dois dias sem perceber)
Muito obrigado!
Tudo funciona perfeitamente, a capacidade de trocar estruturas personalizadas entre algoritmos usando sua biblioteca é uma grande ajuda para minhas negociações.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
O mesmo erro ainda foi lançado mesmo depois de eu ter feito essa alteração, desculpe.
Baixe cada arquivo separadamente da versão russa da base de código.
Olá,
Por favor, me ajude, estou preso em um ponto. Criei dois EAs, um salva os dados e o outro os lê. Tenho um problema com a descoberta de recursos.
Esse código salva os dados e, a partir dele, posso acessá-los e lê-los:
#include "ResourceData.mqh" // https://www.mql5.com/pt/code/22166
#define PRINT(A) Print(#A + " = " + (string)(A));
struct ExampleStruct
{
string ea_name;
string symbol;
string direction;
string time_for_command;
};
ExampleStruct qexamplestruct[2];
int OnInit(void)
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
// Произвольные данные для примера
string Str[] = {"123", "Hello World!"};
qexamplestruct[0].direction="buy";
qexamplestruct[0].ea_name="TestEAname";
qexamplestruct[0].symbol="EURUSD";
qexamplestruct[0].time_for_command="01.01.2021";
string stringtosend = Serialize(qexamplestruct[0]);
const RESOURCEDATA<uint> Resource("::ResoC"); // Ресурс для обмена данными
CONTAINER<uint> Container; // Создаем контейнер - все будет храниться в массиве простого типа (в примере выбран uint)
Container[0] = Str;
Container[1] = stringtosend;
const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::ResoC";
Print(NameOut); // Вывели полное имя ресурса.
Resource = Container.Data; // Отправили данные на обмен
//---
}
string Serialize(const ExampleStruct &s)
{
return s.ea_name + "\n" + s.symbol + "\n" + s.direction + "\n" + s.time_for_command;
}
ExampleStruct Deserialize(const string &line)
{
string parts[];
StringSplit(line, '\n', parts);
ExampleStruct s;
if(ArraySize(parts) > 0) s.ea_name = parts[0];
if(ArraySize(parts) > 1) s.symbol = parts[1];
if(ArraySize(parts) > 2) s.direction = parts[2];
if(ArraySize(parts) > 3) s.time_for_command = parts[3];
return s;
}
E esse código lê os dados e sempre escreve que não há nada:
#include "ResourceData.mqh" // https://www.mql5.com/pt/code/22166
#define PRINT(A) Print(#A + " = " + (string)(A));
int OnInit(void){return(INIT_SUCCEEDED);}
void OnTick()
{
const RESOURCEDATA<uint> Resource("\Terminal\99A739E3DB06068691C851DE1765F329\MQL5\Experts\ZC\Conections\Draft4.ex5::ResoC"); // Ресурс для доступа к данным (только для чтения) из другой программы
CONTAINER<uint> Container4; // Сюда будем получать данные
Resource.Get(Container4.Data); // Считали данные из ресурса.
for (int i = 0; i < Container4.GetAmount(); i++)
Print("i==",i);
string Str4;
Container4[0].Get(Str4); // Получили массив
Print("Test!!!"+Str4);
Print(Str4);
//---
}
Parece que faço tudo por analogia, mas por algum motivo não vejo nenhuma informação do que escrevi, nem uma matriz do tipo string, nem uma única string que obtenho de minha estrutura
Parece que faço tudo por analogia, mas, por algum motivo, nenhuma informação é exibida a partir do que escrevi, nem uma matriz do tipo string, nem uma única string que obtenho de minha estrutura.
Não o executei, mas presumo que seja esse o caso.
Tente da seguinte forma.
Não o executei, mas presumo que seja esse o caso.
Tente você mesmo.
Olá, obrigado por escrever
Tentei imediatamente, pois isso já foi mencionado aqui antes. Passei pelas opções de correção tanto no nome quanto no endereço, e também corrigi em "ResourceData.mqh". Infelizmente, não ajudou. Ainda não encontrei a causa
Fiz mais alguns progressos.
Ao usar ResourceReadImage(FullNameCorrect,Arr,width,height)) diretamente, posso aceitar dados de um recurso criado por outro EA, e tudo funciona corretamente. Ao acessar o mesmo nome de recurso por meio de funções de biblioteca (semelhante à anexada acima), os dados não são aceitos.
Farei um relatório mais detalhado quando descobrir qual é o problema.
Estou criando um recurso:
a - por meio da biblioteca
b - manualmente (ResourceCreate)
Eu acesso os dados do recurso de outro EA usando o mesmo nome de recurso:
a - por meio da biblioteca
b - manualmente(ResourceReadImage)
Resultado:
O recurso criado por meio da biblioteca não é encontrado nem manualmente nem por meio da biblioteca
Um recurso criado manualmente é encontrado e lido manualmente, mas não é encontrado por meio da biblioteca.
Um recurso criado por meio da biblioteca não é encontrado nem manualmente nem por meio da biblioteca
Um recurso criado manualmente é localizado e lido manualmente, mas não é localizado por meio da biblioteca.
Ele funciona por meio da biblioteca.
Não sei por que seu exemplo original ainda não funciona.
Ainda não sei por que seu exemplo original não funciona.
Se todo o resto estiver escrito corretamente, ele ajudará.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Bibliotecas: TradeTransactions
Alexander, 2025.09.15 21:09
Você criou um objeto em cada entrada do OnTimer e, consequentemente, o eliminou - na saída. É por isso que o recurso viveu por microssegundos e não estava ao lado.
estática
Que ponto óbvio, que eu deixei passar por dois dias sem perceber)
Muito obrigado!
Tudo funciona perfeitamente, a capacidade de trocar estruturas personalizadas entre algoritmos usando sua biblioteca é uma grande ajuda para minhas negociações.