Sinceramente, nem sei o que significa e onde na MQL5 se pode encontrá-lo.
Isso significa que os picos são possíveis em qualquer situação, mesmo em funções síncronas. Você só precisa estar ciente deles e não prestar atenção a eles, pois não há nada que você possa fazer a respeito.
This article is about computer interrupts. For the study of the effect of disruptions on job performance, see Interruption science. For other uses, see Interruption. In system programming, an interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention. An interrupt alerts the...
// Пример хранения/обмена данными через Ресурсы внутри Терминала#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166voidOnStart()
{
const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект классаint ArrayINT[] = {1, 2, 3};
int Num = 5;
ResourceINT = ArrayINT; // Ресурс хранит массив.
ResourceINT += Num; // Добавили в ресурс еще значение.
ResourceINT += ArrayINT; // Добавили массив.int ArrayINT2[];
ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.ArrayPrint(ArrayINT2); // Вывели: 1 2 3 5 1 2 3
ResourceINT.Free(); // Удалили данные из ресурсаPrint(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект классаMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick))
for (int i = 0; i < 3; i++)
ResourceTicks += Tick; // Добавили в ресурс тикиMqlTick Ticks[];
ResourceTicks.Get(Ticks); // Считали данные из ресурса.ArrayPrint(Ticks); // Вывели.// Это полное имя ресурса для обращения из другой программыconststring NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";
Print(NameOut); // Вывели полное имя ресурса.const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программыMqlTick TicksOut[];
Resource.Get(TicksOut); // Считали данные из ресурса.ArrayPrint(TicksOut); // Вывели.
Resource.Free(); // Не получится повлиять на данные read-only-ресурса.Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}
Eu tenho usado um método tão fácil de semi-hacker usando o user32.dll por um longo tempo. Mas é impossível passar conjuntos de carraças desta maneira.
Inventei-o há muito tempo quando estava a dominar a MQL4. É claro que não é a solução mais curta em termos de organização razoável da troca, mas é rápida e funciona bem (talvez mais rápida do que todas as soluções existentes), por isso é que não tenho mais a cabeça rachada.
Além disso, este método não requer nenhuma ação adicional.
A questão é que para todo o Windows é uma variável comum de tipo string - nome da janela principal do Windows. Todos podem mudá-lo e todos podem vê-lo.
Mas é rápido (provavelmente mais rápido do que todas as soluções existentes)
Bem, estás a ir longe demais ) Em primeiro lugar, passa pela fila de mensagens. Em segundo lugar, você tem que fazer algumas conversões adicionais (para frente e para trás). Além disso, há alguma validação em curso.
A propósito, não se deve especificar explicitamente o tamanho da estrutura. É para isso que serve o tamanho de um.
Se via dll, existe uma solução universal para todos os tipos de dados.
Eu não estou a discutir. A sua solução é realmente mais universal. Mas pessoalmente eu só preciso de uma ponte entre terminais para transferir a corrente.
A minha variante é apenas mais fácil de entender devido à sua primitividade e funciona um pouco mais rápido. Medi-o em comparação com o seu e é 1,5 - 2 vezes mais rápido. O tempo de leitura de um tick é de 90 microssegundos contra 160 microssegundos.
Resultado
Sim, não levou em conta o funcionamento interno do Sleep, que no meu computador leva cerca de 4ms.
Uma boa alternativa ao sono (quem se preocupa com a precisão :)) é
Não posso garantir a precisão de 0,995. Apanhei-o para o meu próprio computador. Pode ser adequado para todos.
Sinceramente, nem sei o que significa e onde na MQL5 se pode encontrá-lo.
Isso significa que os picos são possíveis em qualquer situação, mesmo em funções síncronas. Você só precisa estar ciente deles e não prestar atenção a eles, pois não há nada que você possa fazer a respeito.
https://en.wikipedia.org/wiki/InterruptAlém de arquivos e variáveis globais, há outra forma de transferir informações entre programas
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
Bibliotecas: TradeTransactions
fxsaber, 2018.09.20 16:23
Além de arquivos e variáveis globais, há outra forma de transferir informações entre programas
Estamos a falar de programas dentro de um único terminal em funcionamento, não estamos?
Estamos a falar de programas dentro de um único terminal em funcionamento, não estamos?
Sim. É por isso que as variáveis globais são mencionadas.
E entre Terminais começou a ser usado desta forma.Sim. É por isso que as variáveis globais são mencionadas.
E entre Terminais começou a usar desta maneira.Sim, é muito fixe!
Achado muito legal usando discos RAM em vez de SSDs.
Sim. É por isso que as variáveis globais são mencionadas.
Comecei a usar este caminho entre terminais.Eu tenho usado um método tão fácil de semi-hacker usando o user32.dll por um longo tempo. Mas é impossível passar conjuntos de carraças desta maneira.
Inventei-o há muito tempo quando estava a dominar a MQL4. É claro que não é a solução mais curta em termos de organização razoável da troca, mas é rápida e funciona bem (talvez mais rápida do que todas as soluções existentes), por isso é que não tenho mais a cabeça rachada.
Além disso, este método não requer nenhuma ação adicional.
A questão é que para todo o Windows é uma variável comum de tipo string - nome da janela principal do Windows. Todos podem mudá-lo e todos podem vê-lo.
Eu venho usando um método semi-hacker tão fácil há muito tempo, usando o user32.dll. Mas não se pode transferir carreiras desta maneira.
Se via dll, existe uma solução universal para todos os tipos de dados.
Mas é rápido (provavelmente mais rápido do que todas as soluções existentes)
Bem, estás a ir longe demais ) Em primeiro lugar, passa pela fila de mensagens. Em segundo lugar, você tem que fazer algumas conversões adicionais (para frente e para trás). Além disso, há alguma validação em curso.
A propósito, não se deve especificar explicitamente o tamanho da estrutura. É para isso que serve o tamanho de um.
Se via dll, existe uma solução universal para todos os tipos de dados.
Eu não estou a discutir. A sua solução é realmente mais universal.
Mas pessoalmente eu só preciso de uma ponte entre terminais para transferir a corrente.
A minha variante é apenas mais fácil de entender devido à sua primitividade e funciona um pouco mais rápido. Medi-o em comparação com o seu e é 1,5 - 2 vezes mais rápido. O tempo de leitura de um tick é de 90 microssegundos contra 160 microssegundos.