¿Cuál es la diferencia entre la ejecución instantánea y la ejecución de mercado?
(Entero): Con Instant Executuion, se puede abrir una orden con un stop-loss y take-profit preestablecidos, establecer el Slippage en pips, que permite abrir una orden cuando el precio en el momento de su ejecución por el broker se desvía del precio de solicitud del trader. En la Ejecución de Mercado no es posible abrir una orden con un Stop Loss y/o Take Profit predeterminado, no hay parámetro para el Deslizamiento. La orden se abre a cualquier precio disponible en el momento de su ejecución por el corredor. Se puede establecer un Stop Loss y/o Take Profit inmediatamente después de abrir la orden. La mayoría de los centros de negociación trabajan en el modo de ejecución instantánea. No son muchos los centros de negociación que operan en la modalidad de Ejecución de Mercado.
2. Por cierto, ¿cómo es el glosario de términos, está el paciente más bien vivo?
1. No vi el último párrafo de las FAQ en el enlace y sólo reaccioné al post de granit77.
2. He leído la sección en la que ofrecí mi propia ayuda. Pero es tan completo como uno podría desear. No hay prácticamente nada que añadir. Debería haber denunciado antes; me arrepiento de no haberlo hecho.
Aun así, la sección puede añadir abreviaturas de jerga de los términos que utilizan los programadores y los comerciantes. Acabo de empezar un nuevo trabajo y ahora tengo muy poco tiempo libre, apenas el suficiente para al menos continuar con mi propio proyecto. Por lo tanto, iré anotando poco a poco "en un papel" y cuando acumule más, lo añadiré a la sección. ¿DE ACUERDO?
Pregunta: Obtención de una matriz de órdenes "propias"
Respuesta: Desde el punto de vista de la optimización del código, este es el enfoque conveniente: primero, realizamos la "revisión" de las órdenes "amigables" (es decir, las órdenes con el MagicNumber() dado), creamos una matriz de tickets con la información completa relativa a cada ticket, y luego realizamos todas las demás comprobaciones (para cerrar y modificar las posiciones) con la misma matriz de tickets. Ejemplo 1. Recopilación de información sobre las entradas en un par de divisas.
// Сначала объявляем массив в глобальных переменных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;
}
Si quieres, puedes declarar esta función de tipo int y hacer que devuelva el número de "órdenes propias".
gi_cnt_Tickets = fMyTickets (gda_Tickets, Magic);
Si nuestro EA es multidivisa. Ejemplo 2. Recopilación de información sobre los billetes de varios pares de divisas.
Para comprobar los símbolos "amigables" en este caso, necesitaremos una pequeña función más:
// В глобальных переменных объявляем ещё одина массив, теперь с символами с которыми работает наш мультивалютный советник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);
}
No es de extrañar si quieres que tu EA tenga estadísticas adicionales sobre su trabajo, por ejemplo: el drawdown máximo, el beneficio total, etc. Para no tener que "molestar" al servidor con peticiones adicionales, le recomendamos que añada funcionalidad a nuestra función (perdone el juego de palabras). En este caso, la función puede tener el siguiente aspecto
Variante #1 para un EA de monocurrency:
// Объявляем массив в глобальных переменных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 #2 para multidivisas:
// В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советник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;
}
En los ejemplos anteriores sobre la recopilación de información sobre los billetes, esta información es suficiente en la gran mayoría de los casos. Pero en sistemas más complejos, nadie le prohíbe almacenar información sobre ellos en una matriz de entradas, por ejemplo, si se implementan stops virtuales en su Asesor Experto:
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
En general, aquí usted está limitado sólo por el vuelo de la fantasía / fanatismo y el nivel de conocimiento MQL4.
Para no "molestar" innecesariamente al servidor con peticiones...
El servidor no es molestado al recoger los pedidos. La ideología de recoger la información de los pedidos en una matriz es UG. Es imposible que esto esté en las FAQ.
TheXpert: El servidor no es molestado al recoger los pedidos. La ideología de recoger la información de los pedidos en una matriz -- UG. Esto no está permitido de ninguna manera en las FAQ.
Sugerir otra opción. para la necesidad de trabajar con órdenes "propias"
Yo no lo sugeriría. En la mayoría de los casos, no se necesita una serie de entradas. Y lo correcto, en mi opinión, es pedir siempre al terminal la información más actualizada posible.
(Entero ): Con Instant Executuion, se puede abrir una orden con un stop-loss y take-profit preestablecidos, establecer el Slippage en pips, que permite abrir una orden cuando el precio en el momento de su ejecución por el broker se desvía del precio de solicitud del trader. En la Ejecución de Mercado no es posible abrir una orden con un Stop Loss y/o Take Profit predeterminado, no hay parámetro para el Deslizamiento. La orden se abre a cualquier precio disponible en el momento de su ejecución por el corredor. Se puede establecer un Stop Loss y/o Take Profit inmediatamente después de abrir la orden. La mayoría de los centros de negociación trabajan en el modo de ejecución instantánea. No son muchos los centros de negociación que operan en la modalidad de Ejecución de Mercado.
Cada vez son más las empresas de corretaje que se pasan a la ejecución de mercado. Pronto la información dada por Integer será irrelevante.
es sólo información sobre los dos modos.
y eso es exactamente lo que dice el último párrafo de las FAQ: ¡una tendencia! https://www.mql5.com/ru/forum/131853/page3#464977
-------
Por cierto, ¿cómo es el glosario de términos, está el paciente más bien vivo?
1. y el último párrafo de las preguntas frecuentes dice exactamente eso: ¡tendencia! https://www.mql5.com/ru/forum/131853/page3#464977
-------
2. Por cierto, ¿cómo es el glosario de términos, está el paciente más bien vivo?
1. No vi el último párrafo de las FAQ en el enlace y sólo reaccioné al post de granit77.
2. He leído la sección en la que ofrecí mi propia ayuda. Pero es tan completo como uno podría desear. No hay prácticamente nada que añadir. Debería haber denunciado antes; me arrepiento de no haberlo hecho.
Aun así, la sección puede añadir abreviaturas de jerga de los términos que utilizan los programadores y los comerciantes. Acabo de empezar un nuevo trabajo y ahora tengo muy poco tiempo libre, apenas el suficiente para al menos continuar con mi propio proyecto. Por lo tanto, iré anotando poco a poco "en un papel" y cuando acumule más, lo añadiré a la sección. ¿DE ACUERDO?
Pregunta: Obtención de una matriz de órdenes "propias"
Respuesta: Desde el punto de vista de la optimización del código, este es el enfoque conveniente: primero, realizamos la "revisión" de las órdenes "amigables" (es decir, las órdenes con el MagicNumber() dado), creamos una matriz de tickets con la información completa relativa a cada ticket, y luego realizamos todas las demás comprobaciones (para cerrar y modificar las posiciones) con la misma matriz de tickets.Ejemplo 1. Recopilación de información sobre las entradas en un par de divisas.
Si quieres, puedes declarar esta función de tipo int y hacer que devuelva el número de "órdenes propias".
Si nuestro EA es multidivisa.
Ejemplo 2. Recopilación de información sobre los billetes de varios pares de divisas.
Para comprobar los símbolos "amigables" en este caso, necesitaremos una pequeña función más:
y nuestra función tendrá esta forma:
Pregunta: Obtención de una matriz de tickets de pedido "propios"
Respuesta: (Continuación)
No es de extrañar si quieres que tu EA tenga estadísticas adicionales sobre su trabajo, por ejemplo: el drawdown máximo, el beneficio total, etc. Para no tener que "molestar" al servidor con peticiones adicionales, le recomendamos que añada funcionalidad a nuestra función (perdone el juego de palabras). En este caso, la función puede tener el siguiente aspecto
Variante #1 para un EA de monocurrency:
Variante #2 para multidivisas:
En los ejemplos anteriores sobre la recopilación de información sobre los billetes, esta información es suficiente en la gran mayoría de los casos. Pero en sistemas más complejos, nadie le prohíbe almacenar información sobre ellos en una matriz de entradas, por ejemplo, si se implementan stops virtuales en su Asesor Experto:
En general, aquí usted está limitado sólo por el vuelo de la fantasía / fanatismo y el nivel de conocimiento MQL4.
TarasBY
Para no "molestar" innecesariamente al servidor con peticiones...
El servidor no es molestado al recoger los pedidos. La ideología de recoger la información de los pedidos en una matriz -- UG. Esto no está permitido de ninguna manera en las FAQ.
Sugerir otra opción. para la necesidad de trabajar con órdenes "propias"