Qual é a diferença entre Execução Instantânea e Execução de Mercado?
(Inteiro): Com a execução instantânea, uma ordem pode ser aberta com um Stop Loss e Take Profit pré-determinados, definir o Slippage em pips, o que permite abrir uma ordem quando o preço no momento de sua execução pelo corretor se desviar do preço do pedido do corretor. Na Execução do Mercado não é possível abrir uma ordem com um Stop Loss e/ou Take Profit pré-determinado, não há parâmetro para o Slippage. A ordem é aberta a qualquer preço disponível no momento de sua execução pelo corretor. Um Stop Loss e/ou Take Profit pode ser definido imediatamente após a abertura do pedido. A maioria dos centros de negociação trabalha no modo de Execução Instantânea. Não são tantos os centros de negociação que operam no modo de execução do mercado.
A propósito, como está o glossário de termos, o paciente está bastante vivo?
1. Não vi o último parágrafo da FAQ no link e apenas reagiu ao post do Granit77.
2. Eu li a seção na qual ofereci minha própria ajuda. Mas é o mais completo que se poderia desejar. Não há praticamente nada a acrescentar. Eu deveria ter relatado isso mais cedo - lamento não ter feito isso.
Ainda assim, a seção pode acrescentar abreviações em jargão de termos que estão em uso por programadores e comerciantes. Acabo de começar um novo trabalho e tenho muito pouco tempo livre agora, mal o suficiente para, pelo menos, continuar meu próprio projeto. Portanto, escreverei gradualmente "em um pedaço de papel" e quando acumular mais dele, o acrescentarei à seção. OK?
Pergunta: Obtenção de uma série de ordens "próprias".
Resposta: Do ponto de vista da otimização do código, esta é a abordagem conveniente: primeiro, realizamos a "revisão" de ordens "amigáveis" (ou seja, ordens com o MagicNumber() dado), criamos uma matriz de bilhetes com informações completas sobre cada bilhete, e depois realizamos todas as outras verificações (para fechamento e modificação de posições) com a mesma matriz de bilhetes. Exemplo nº 1. Reunindo informações sobre ingressos em um par de moedas.
// Сначала объявляем массив в глобальных переменныхdouble gda_Tickets[30][10]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price
// gda_Tickets[][4] - OrderProfit
// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Не забываем о счётчике ордеров (он нам ещё понадобится)int gi_cnt_Tickets;
// сама функцияvoid fMyTickets (double& ar_Tickets[][10], int fi_Magic = -1)
{
int li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
//----for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol())
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
gi_cnt_Tickets = li_cnt;
//----return;
}
Se desejar, você pode declarar esta função do tipo int e fazê-la retornar o número de "pedidos próprios".
gi_cnt_Tickets = fMyTickets (gda_Tickets, Magic);
Se nossa EA for multimoedas. Exemplo nº 2. Coleta de informações sobre bilhetes para vários pares de moedas.
A fim de verificar a existência de símbolos "amigáveis" neste caso, precisaremos de mais uma pequena função:
// В глобальных переменных объявляем ещё одина массив, теперь с символами с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)// сама функцияint fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)int fi_Magic = -1) // MagicNumber
{
int NUM_Symbol, li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
//----for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic)
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- для дальнейших вычислений не лишним будет запомнить номер индекса символа в массиве символов
//---- но для этого не забудьте увеличить размер массива тикетов при его объявлении gda_Tickets[30][11]
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
//----return (li_cnt);
}
Pergunta: Obtenção de uma série de tickets de pedidos "próprios".
Resposta: (Continuação)
Não é de se admirar que você queira que sua EA tenha estatísticas adicionais sobre seu trabalho, por exemplo: o saque máximo, o lucro total, etc. Para que você não tenha que "perturbar" o servidor com pedidos adicionais, recomendamos que você acrescente funcionalidade à nossa função (desculpe o trocadilho). Neste caso, a função pode se parecer com a seguinte
Variante nº 1 para uma EA de moeda única:
// Объявляем массив в глобальных переменныхdouble gda_Tickets[30][10]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Добавляем массив для сбора ститистикиdouble gda_AddInfo[5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[0] - количество соих ордеров (всех)// gda_AddInfo[1] - количество своих рыночных ордеров// gda_AddInfo[2] - общий размер открытых рыночных лотов// gda_AddInfo[3] - общий профит по открытым позициям// gda_AddInfo[4] - максимальная просадка по открытым позициямvoid fMyTickets (double& ar_Tickets[][10], // массив тикетов (для заполнения)double& ar_Info[], // массив для заполнения дополнительной информациейint fi_Magic = -1) // MagicNumber
{
int li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
double tmp_Loss;
//----
tmp_Loss = ar_Info[4];
//---- Обнуляем заполняемый массив перед использованиемArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol())
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[0]++;
if (OrderType() < 2)
{
ar_Info[1]++;
ar_Info[2] += OrderLots();
ar_Info[3] += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
//---- Учитываем максимальную просадку
ar_Info[4] = MathMin (ar_Info[3], tmp_Loss);
//----return;
}
Variante nº 2 para multimoedas:
// В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Массив с дополниетельной информацией должен быть 2-ух мерным// 1-ый индекс - это номер символа в массиве символов gsa_Symbols[]// Не забудьте перед его использованием задать ему размер в первом измерении равный количеству используемых символов// ArrayResize (gda_AddInfo, ArraySize (gsa_Symbols));double gda_AddInfo[][5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[][0] - количество соих ордеров (всех)// gda_AddInfo[][1] - количество своих рыночных ордеров// gda_AddInfo[][2] - общий размер открытых рыночных лотов// gda_AddInfo[][3] - общий профит по открытым позициям// gda_AddInfo[][4] - максимальная просадка по открытым позициям// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)void fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)double& ar_Info[][5], // массив для заполнения дополнительной информациейint fi_Magic) // MagicNumber
{
int NUM_Symbol, li_cnt = 0, li_Range = ArraySize (ar_Symbol); // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
double tmp_Loss[];
//----//---- Инициализируем временный массив для хранения сведений о максимальной просадкеArrayResize (tmp_Loss, li_Range);
//---- Сохраняем в него эти сведенияfor (int li_int = 0; li_int < li_Range; li_int++)
{tmp_Loss[li_int] = ar_Info[li_int][4];}
//---- Обнуляем используемый массив
ArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[NUM_Symbol][0]++;
if (OrderType() < 2)
{
ar_Info[NUM_Symbol][1]++;
ar_Info[NUM_Symbol][2] += OrderLots();
ar_Info[NUM_Symbol][3] += OrderProfit() + OrderSwap() + OrderCommission();
ar_Info[NUM_Symbol][4] = MathMin (tmp_Loss[NUM_Symbol], ar_Info[NUM_Symbol][3]);
}
}
}
//----return;
}
Nos exemplos acima sobre a coleta de informações sobre ingressos, estas informações são suficientes na grande maioria dos casos. Mas em sistemas mais complexos, ninguém proíbe que você armazene informações sobre eles em uma série de tickets, por exemplo, se paradas virtuais forem implementadas em seu Consultor Especialista:
double gda_Tickets[30][12]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// gda_Tickets[][10] - Virtual SL// gda_Tickets[][11] - Virtual TP
Em geral, aqui você está limitado apenas pelo vôo da fantasia / fanatismo e pelo nível de conhecimento da MQL4.
TheXpert: O servidor não é perturbado na coleta de pedidos. A ideologia de coletar informações de pedidos em uma matriz -- UG. Isto não é de forma alguma permitido no FAQ.
Sugerir outra opção. pela necessidade de trabalhar com pedidos "próprios".
Eu não o sugeriria. Na maioria das vezes, não é necessária uma variedade de bilhetes. E a coisa certa a fazer, imho, é sempre pedir ao terminal as informações mais atualizadas possíveis.
(Inteiro ): Com a execução instantânea, uma ordem pode ser aberta com um Stop Loss e Take Profit pré-determinados, definir o Slippage em pips, o que permite abrir uma ordem quando o preço no momento de sua execução pelo corretor se desviar do preço do pedido do corretor. Na Execução do Mercado não é possível abrir uma ordem com um Stop Loss e/ou Take Profit pré-determinado, não há parâmetro para o Slippage. A ordem é aberta a qualquer preço disponível no momento de sua execução pelo corretor. Um Stop Loss e/ou Take Profit pode ser definido imediatamente após a abertura do pedido. A maioria dos centros de negociação trabalha no modo de Execução Instantânea. Não são tantos os centros de negociação que operam no modo de execução do mercado.
Cada vez mais empresas de corretagem estão mudando para a Market Execution. Logo as informações fornecidas pela Integer se tornarão irrelevantes.
são apenas informações sobre os dois modos.
e é exatamente isso que diz o último parágrafo da FAQ - uma tendência! https://www.mql5.com/ru/forum/131853/page3#464977
-------
A propósito, como está o glossário de termos, o paciente está bastante vivo?
1. e o último parágrafo da FAQ diz exatamente isso - tendência! https://www.mql5.com/ru/forum/131853/page3#464977
-------
A propósito, como está o glossário de termos, o paciente está bastante vivo?
1. Não vi o último parágrafo da FAQ no link e apenas reagiu ao post do Granit77.
2. Eu li a seção na qual ofereci minha própria ajuda. Mas é o mais completo que se poderia desejar. Não há praticamente nada a acrescentar. Eu deveria ter relatado isso mais cedo - lamento não ter feito isso.
Ainda assim, a seção pode acrescentar abreviações em jargão de termos que estão em uso por programadores e comerciantes. Acabo de começar um novo trabalho e tenho muito pouco tempo livre agora, mal o suficiente para, pelo menos, continuar meu próprio projeto. Portanto, escreverei gradualmente "em um pedaço de papel" e quando acumular mais dele, o acrescentarei à seção. OK?
Pergunta: Obtenção de uma série de ordens "próprias".
Resposta: Do ponto de vista da otimização do código, esta é a abordagem conveniente: primeiro, realizamos a "revisão" de ordens "amigáveis" (ou seja, ordens com o MagicNumber() dado), criamos uma matriz de bilhetes com informações completas sobre cada bilhete, e depois realizamos todas as outras verificações (para fechamento e modificação de posições) com a mesma matriz de bilhetes.Exemplo nº 1. Reunindo informações sobre ingressos em um par de moedas.
Se desejar, você pode declarar esta função do tipo int e fazê-la retornar o número de "pedidos próprios".
Se nossa EA for multimoedas.
Exemplo nº 2. Coleta de informações sobre bilhetes para vários pares de moedas.
A fim de verificar a existência de símbolos "amigáveis" neste caso, precisaremos de mais uma pequena função:
e nossa função terá esta forma:
Pergunta: Obtenção de uma série de tickets de pedidos "próprios".
Resposta: (Continuação)
Não é de se admirar que você queira que sua EA tenha estatísticas adicionais sobre seu trabalho, por exemplo: o saque máximo, o lucro total, etc. Para que você não tenha que "perturbar" o servidor com pedidos adicionais, recomendamos que você acrescente funcionalidade à nossa função (desculpe o trocadilho). Neste caso, a função pode se parecer com a seguinte
Variante nº 1 para uma EA de moeda única:
Variante nº 2 para multimoedas:
Nos exemplos acima sobre a coleta de informações sobre ingressos, estas informações são suficientes na grande maioria dos casos. Mas em sistemas mais complexos, ninguém proíbe que você armazene informações sobre eles em uma série de tickets, por exemplo, se paradas virtuais forem implementadas em seu Consultor Especialista:
Em geral, aqui você está limitado apenas pelo vôo da fantasia / fanatismo e pelo nível de conhecimento da MQL4.
TarasBY
A fim de não "perturbar" desnecessariamente o servidor com pedidos.
O servidor não é perturbado na coleta de pedidos. A ideologia de coletar informações de pedidos em uma matriz -- UG. Isto não é de forma alguma permitido no FAQ.
Sugerir outra opção. pela necessidade de trabalhar com pedidos "próprios".