Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 29
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¡Buenos días a todos! ¿Puede usted por favor aconsejar cómo establecer un borrado de órdenes en un EA?
La situación es la siguiente:
Colocamos 2órdenes pendientes en diferentes direcciones, en cuanto una de ellas se dispara, la otra se elimina y deja de estar expuesta.
Estaría muy agradecido por cualquier ayuda.
Gracias.
Por ejemplo:
// удаляет отложенные ордера по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
Y antes de eso, determinar que hay una posición y es el momento de matar la orden extra
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
Por poner un ejemplo:
// удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
¿Cuál es la segregación por tipo? ¿Qué hace? ¿Habría alguna diferencia si se escribiera así?
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
¿Por qué las barras son diferentes en mt4 y mt5 en mi iPhone? Aunque el horario de apertura y cierre de los bares es el mismo. Evidentemente, le impide superar la línea de ayer a las 14:00 en MT4.
¿Por qué las barras son diferentes en mt4 y mt5 en mi iPhone? Aunque el horario de apertura y cierre de los bares es el mismo. Esto es claramente un obstáculo, porque ayer en mt4 la línea no se rompió a las 14:00.
¿Por qué las barras son diferentes en mt4 y mt5 en mi iPhone? Aunque el horario de apertura y cierre de los bares es el mismo. Obviamente interfiere porque la línea no se rompió ayer a las 14:00 en MT4.
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // nombre del archivo
)
; ...
¿O también se convierte de alguna manera
?Declare
además, ¿qué imprimirá Print? ¿Y en qué condiciones?
¿Qué sentido tiene esta acción? ¿Reproducir un sonido cuando se cierra la orden y escribir un comentario (en TP o SL)?
Saludos. He preguntado por ahí, pero aún no he encontrado respuesta. ¿Podría decirme por qué con la siguiente entrada
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
El sistema genera constantemente errores
: billete no válido para OrderDeletefunction
Error de OrderDelete 4051
Según el libro de referencia es
Valor no válido del parámetro de la función
Aunque los parámetros parecen ser los mismos.
Aunque si se elimina la condición y se deja sólo
OrderDelete(ticketD);
OrderDelete(ticketUP);
se borra con éxito (pero lo necesito por condición). ¿Qué hago mal? Aquí está todo el asunto:
https://www.mql5.com/ru/forum/160683/page31#comment_3911573
El Asesor Experto lee los valores mínimos y máximos de las últimas X barras y coloca las órdenes según estos valores. Entonces, si el máximo o el mínimo han disminuido, debemos eliminar la orden correspondiente y abrirla con los nuevos datos.
Acabo de empezar a estudiarlo y el borrado en lugar de modificarlo lo hice para estudiar la función y me pregunté por qué no funcionaba.