Onestamente, non so nemmeno cosa significa e dove si può incontrare in MQL5.
Ciò significa che i picchi sono possibili in qualsiasi situazione, anche nelle funzioni sincrone. Dovete solo esserne consapevoli e non farci caso, perché non c'è niente che possiate fare.
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 - Ошибочный параметр при вызове системной функции.
}
Ho usato un metodo semi-hacker così facile usando user32.dll per molto tempo. Ma è impossibile passare array di tick in questo modo.
L'ho inventato molto tempo fa quando stavo padroneggiando MQL4. Certo, non è la soluzione più breve in termini di organizzazione ragionevole dello scambio, ma è veloce e funziona bene (forse più veloce di tutte le soluzioni esistenti), ecco perché non mi sono più scervellato.
Inoltre, questo metodo non richiede alcuna azione aggiuntiva.
Il punto è che per tutto Windows è una variabile comune di tipo stringa - nome della finestra principale di Windows. Tutti possono cambiarlo e tutti possono vederlo.
Ma è veloce (probabilmente più veloce di tutte le soluzioni esistenti)
Beh, stai andando troppo lontano ) Prima di tutto, passa attraverso la coda dei messaggi. In secondo luogo, devi fare alcune conversioni aggiuntive (avanti e indietro). Inoltre c'è una convalida in corso.
Non sto discutendo. La tua soluzione è davvero più universale. Ma personalmente ho solo bisogno di un ponte tra i terminali per trasferire i tick di corrente.
La mia variante è solo più facile da capire a causa della sua primitività e funziona un po' più velocemente. L'ho misurato in confronto al tuo ed è 1,5 - 2 volte più veloce. Il tempo di lettura di un tick è di 90 microsecondi contro 160 microsecondi.
Risultato
Sì, non ho tenuto conto del funzionamento interno di Sleep, che sul mio computer richiede circa 4ms.
Una buona alternativa a Sleep (chi si preoccupa della precisione :)) è
Non posso garantire la precisione di 0,995. L'ho preso per il mio computer. Può essere adatto a tutti.
Onestamente, non so nemmeno cosa significa e dove si può incontrare in MQL5.
Ciò significa che i picchi sono possibili in qualsiasi situazione, anche nelle funzioni sincrone. Dovete solo esserne consapevoli e non farci caso, perché non c'è niente che possiate fare.
https://en.wikipedia.org/wiki/InterruptOltre ai file e alle variabili globali, c'è un altro modo per trasferire informazioni tra i programmi
Forum sul trading, sistemi di trading automatico e test di strategia
Biblioteche: TradeTransactions
fxsaber, 2018.09.20 16:23
Oltre ai file e alle variabili globali, c'è un altro modo di trasferire informazioni tra i programmi
Stiamo parlando di programmi all'interno di un singolo terminale in esecuzione, vero?
Stiamo parlando di programmi all'interno di un singolo terminale in esecuzione, vero?
Sì, è per questo che si parla di variabili globali.
E tra i terminali ha iniziato a usare questo modo.Sì, è per questo che si parla di variabili globali.
E tra i terminali ha iniziato a usare questo modo.Sì, è davvero forte!
Una scoperta molto bella usando dischi RAM invece di SSD.
Sì, è per questo che si parla di variabili globali.
Ho iniziato a usare questo modo tra i terminali.Ho usato un metodo semi-hacker così facile usando user32.dll per molto tempo. Ma è impossibile passare array di tick in questo modo.
L'ho inventato molto tempo fa quando stavo padroneggiando MQL4. Certo, non è la soluzione più breve in termini di organizzazione ragionevole dello scambio, ma è veloce e funziona bene (forse più veloce di tutte le soluzioni esistenti), ecco perché non mi sono più scervellato.
Inoltre, questo metodo non richiede alcuna azione aggiuntiva.
Il punto è che per tutto Windows è una variabile comune di tipo stringa - nome della finestra principale di Windows. Tutti possono cambiarlo e tutti possono vederlo.
Ho usato un metodo semi-hacker così facile per molto tempo, usando user32.dll. Ma non si possono trasferire gli array di tick in questo modo.
Se tramite dll, c'è una soluzione universale per tutti i tipi di dati.
Ma è veloce (probabilmente più veloce di tutte le soluzioni esistenti)
Beh, stai andando troppo lontano ) Prima di tutto, passa attraverso la coda dei messaggi. In secondo luogo, devi fare alcune conversioni aggiuntive (avanti e indietro). Inoltre c'è una convalida in corso.
A proposito, non dovreste specificare esplicitamente la dimensione della struttura. Ecco a cosa serve la sizeof.
Se tramite dll, c'è una soluzione universale per tutti i tipi di dati.
Non sto discutendo. La tua soluzione è davvero più universale.
Ma personalmente ho solo bisogno di un ponte tra i terminali per trasferire i tick di corrente.
La mia variante è solo più facile da capire a causa della sua primitività e funziona un po' più velocemente. L'ho misurato in confronto al tuo ed è 1,5 - 2 volte più veloce. Il tempo di lettura di un tick è di 90 microsecondi contro 160 microsecondi.