Con questa implementazione è conveniente/veloce, ad esempio per copiare array di qualsiasi dimensione (e diversi) l'uno dall'altro - senza violentare HDD/SDD.
// Копирование массивов любых размерностей (и разных) друг в друга #define ARRAYCOPY(Dest, Source) \ if (ArraySize(Source) > 0) \ { \ constint handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN); \ \ if (handleRAM != INVALID_HANDLE) \ { \ if (FileWriteArray(handleRAM, Source) > 0) \ FileReadArray(handleRAM, Dest); \ \ FileClose(handleRAM); \ } \ }
È una soluzione universale. I classici di tale copiatura assomigliano a questo
// Копирует двумерный массив в одномерный #define MATRIX_TO_VECTOR(Matrix, Vector) \ if (ArraySize(Matrix) > 0) \ { \ constint Range1 = ArrayRange(Matrix, 0); \ constint Range2 = ArrayRange(Matrix, 1); \ \ ArrayResize(Vector, Range1 * Range2); \ \ int k = 0; \ \ for (int i = 0; i < Range1; i++) \ for (int j = 0; j < Range2; j++) \ { \ Vector[k] = Matrix[i][j]; \ \ k++; \ } \ }
// Копирует одномерный массив в двумерный #define VECTOR_TO_MATRIX(Vector, Matrix) \ if (ArraySize(Vector) > 0) \ { \ constint Size = ArraySize(Vector); \ constint Range = ArrayRange(Matrix, 1); \ \ ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \ \ for (int i = 0; i < Size; i++) \ Matrix[i / Range][i % Range] = Vector[i]; \ }
Le macro sono usate al posto delle funzioni, perché è impossibile passare un array di dimensioni universali alle funzioni.
Artyom Trishkin: Cosa posso fare al posto di MODE_MARGINREQUIRED in mql5?
Questo è qualcosa che devi chiedere agli sviluppatori, perché nessuno dei membri del forum lo sa. Ho fatto questa domanda 4 volte in diversi thread, una volta ho anche ottenuto la risposta: "usa la ricerca", ma ci sono più di 100 domande nella ricerca e non una sola risposta. Lo sviluppatore non risponde alla domanda, probabilmente a causa del fatto che in Fivenon c'è la possibilità di ottenere il margine per coppie diverse dalla valuta di deposito.
Tutto è ancora grezzo in Five e sembra che rimarrà così, ma c'è un OpenGL per tutti =)
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Pre-creare un file appropriato in anticipo.
Con questa implementazione è conveniente/veloce, ad esempio per copiare array di qualsiasi dimensione (e diversi) l'uno dall'altro - senza violentare HDD/SDD.
#define ARRAYCOPY(Dest, Source) \
if (ArraySize(Source) > 0) \
{ \
const int handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN); \
\
if (handleRAM != INVALID_HANDLE) \
{ \
if (FileWriteArray(handleRAM, Source) > 0) \
FileReadArray(handleRAM, Dest); \
\
FileClose(handleRAM); \
} \
}
#define MATRIX_TO_VECTOR(Matrix, Vector) \
if (ArraySize(Matrix) > 0) \
{ \
const int Range1 = ArrayRange(Matrix, 0); \
const int Range2 = ArrayRange(Matrix, 1); \
\
ArrayResize(Vector, Range1 * Range2); \
\
int k = 0; \
\
for (int i = 0; i < Range1; i++) \
for (int j = 0; j < Range2; j++) \
{ \
Vector[k] = Matrix[i][j]; \
\
k++; \
} \
}
// Копирует одномерный массив в двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix) \
if (ArraySize(Vector) > 0) \
{ \
const int Size = ArraySize(Vector); \
const int Range = ArrayRange(Matrix, 1); \
\
ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \
\
for (int i = 0; i < Size; i++) \
Matrix[i / Range][i % Range] = Vector[i]; \
}
Il punto è che OnTradeTransaction() non si attiverà immediatamente dopo OrderSend.
In breve, qui c'è solo una folla di argomentatori senza entrare nell'argomento della discussione.
Ci sono due varianti dell'algoritmo se qualcosa deve essere fatto immediatamente dopo OrderSend():
1. Possiamo avviare un ciclo in attesa degli aggiornamenti delle liste di ordini e offerte.
2. Termina OnTick() e aspetta che OnTradeTransaction() si attivi.
3. Controlla con un segno di spunta se un nuovo ordine o affare appare nella lista.
Cosa posso fare al posto di MODE_MARGINREQUIRED in mql5?
Questo è qualcosa che devi chiedere agli sviluppatori, perché nessuno dei membri del forum lo sa. Ho fatto questa domanda 4 volte in diversi thread, una volta ho anche ottenuto la risposta: "usa la ricerca", ma ci sono più di 100 domande nella ricerca e non una sola risposta. Lo sviluppatore non risponde alla domanda, probabilmente a causa del fatto che in Five non c'è la possibilità di ottenere il margine per coppie diverse dalla valuta di deposito.
Tutto è ancora grezzo in Five e sembra che rimarrà così, ma c'è un OpenGL per tutti =)
Cosa può sostituire MODE_MARGINREQUIRED quadruplo in mql5?
OrderCalcMargin() prova
Questo è comprensibile, ma non funziona dall'indicatore
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot); // залог на 1 лот
Questo è comprensibile, ma non funziona con l'indicatore
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot);
Questo è scritto esplicitamente nell'aiuto, che non funziona dall'indicatore https://www.mql5.com/ru/docs/runtime/running
Vorrei un calcolo indipendente dal tipo di programma.
Oooh, anche a me piacerebbe molto :)