Com esta implementação é conveniente/rápido, por exemplo, copiar matrizes de qualquer dimensão (e diferentes) umas para as outras - sem violar o 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); \ } \ }
É uma solução universal. Os clássicos de tal cópia parecem-se com isto
// Копирует двумерный массив в одномерный #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]; \ }
São usadas macros em vez de funções, porque é impossível passar um array de tamanho universal para funções.
Artyom Trishkin: O que posso fazer em vez do MODE_MARGINREQUIRED em mql5 ?
Isso é algo que você precisa perguntar aos desenvolvedores, porque nenhum dos membros do fórum sabe disso. Fiz esta pergunta 4 vezes em diferentes tópicos, uma vez até obtive a resposta: "use search", mas há mais de 100 perguntas em busca e não há uma única resposta. O desenvolvedor não está respondendo à pergunta, provavelmente devido ao fato de que em Cinconão há possibilidade de obter a margem para pares diferentes da moeda de depósito.
Tudo ainda está cru em Cinco e parece que vai ficar assim, mas há um OpenGL para todos =)
Crie previamente um ficheiro apropriado.
Com esta implementação é conveniente/rápido, por exemplo, copiar matrizes de qualquer dimensão (e diferentes) umas para as outras - sem violar o 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]; \
}
A questão é que a OnTradeTransaction() não irá acionar imediatamente após o OrderSend.
Em resumo, há apenas uma multidão de argumentistas aqui sem entrar no assunto da discussão.
Existem duas variantes do algoritmo se algo tiver de ser feito imediatamente após OrderSend():
1. Podemos iniciar um loop à espera de actualizações das listas de encomendas e ofertas.
2. Termine OnTick() e espere a OnTradeTransaction() acionar.
3. Marque com um visto para ver se uma nova ordem ou negócio aparece na lista.
O que posso fazer em vez do MODE_MARGINREQUIRED em mql5 ?
Isso é algo que você precisa perguntar aos desenvolvedores, porque nenhum dos membros do fórum sabe disso. Fiz esta pergunta 4 vezes em diferentes tópicos, uma vez até obtive a resposta: "use search", mas há mais de 100 perguntas em busca e não há uma única resposta. O desenvolvedor não está respondendo à pergunta, provavelmente devido ao fato de que em Cinco não há possibilidade de obter a margem para pares diferentes da moeda de depósito.
Tudo ainda está cru em Cinco e parece que vai ficar assim, mas há um OpenGL para todos =)
O que pode substituir o quádruplo MODE_MARGINREQUIRED em mql5 ?
OrderCalcMargin() tente
Isto é compreensível, mas não funciona a partir do indicador
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot); // залог на 1 лот
Isto é compreensível, mas não funciona com o indicador
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot);
Isto está escrito explicitamente na ajuda, que não funciona a partir do indicador https://www.mql5.com/ru/docs/runtime/running
Eu gostaria de um cálculo que fosse independente do tipo de programa.
Oooh, eu também gostaria muito :)