Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 574
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
La idea de abrir órdenes en una señal de compra o de agarre bajista, cómo hacer para que sólo haya una operación de compra/venta y una operación de orden pendiente, tengo una abierta en cada tick de la operación. Ayude a resolver el problema.
Pues bien, esta es otra forma de hacerlo: se escriben cerillas para cada vela del rango. En la versión anterior, las coincidencias se escribían sólo para una vela, es decir, no se escribía ninguna coincidencia para la que coincidía con ésta.
Artem, gracias. Lo investigaré.
Los valores altos pueden redondearse, por ejemplo, podemos redondear el valor 1,23456 a 1,2346.
Ya veo lo que quiero decir. También añado una variable en los ajustes en la que se puede prescribir la desviación dentro de la cual los valores de alta se consideran iguales. Es necesario porque para las comillas de 4 dígitos a menudo no hay tal problema, pero para las comillas de cinco dígitos buscar coincidencias exactas es infinitamente posible.
Artem, gracias. Lo investigaré.
El redondeo está claro. También he puesto una variable en los ajustes, en la que podré prescribir el valor de desviación, dentro del cual los valores altos se consideran iguales. Es necesario, porque para las comillas de 4 dígitos a menudo no hay tal problema, pero para las comillas de cinco dígitos buscar coincidencias exactas es interminable.
De nada. He cometido una inexactitud en la segunda versión. Como en la primera versión buscábamos las coincidencias a partir de la siguiente vela del índice del bucle, el paso del bucle principal era por el número de velas menos una para comparar las dos velas más externas. Ahora, en la segunda versión, para cada una de las velas buscamos coincidencias en todo el rango, por lo que en la línea
debe cambiar el número de barras a
Compruebe el número de órdenes establecidas y el número de posiciones abiertas antes de abrir una nueva posición o colocar una nueva orden pendiente.
es decir, ¿es necesario añadir una condición para comprobar el número de órdenes y posiciones en las condiciones de una operación?
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&h2>h1&h1<o2&o1<c1&&l2>l1&&o3>c3&&o4>c4){ //first condition
if (OrdersTotal()==0) //segunda condición
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } ................................... y así para cada comercio?
¿Y qué función cuenta el número de posiciones abiertas?
Creo que he resuelto el problema:
if (Hour()>=0&Hour()<23){
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l1&&o3>c3&&o4>c4){
si (PositionsTotal()<=1)
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } //abre la puerta a la compra
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l1&&o3>c3&&o4>c4){
if (PositionsTotal()==1&OrderType()==0)
OrderSend(Symbol(), OP_SELLSTOP,Lot,l2,10,h2,0);} /Orden de venta pospuesta
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<c3&&o4<c4){
si (PositionsTotal()<=1)
OrderSend(Symbol(),OP_SELL,Lot,o,10,h1,0); } //abre la venta
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<c3&&o4<c4){
if (PositionsTotal()==1&OrderType()==1)
OrderSend(Symbol(), OP_BUYSTOP,Lot,h2,10,l2,0);} /Orden de compra pospuesta
}
//+------------------------------------------------------------------+
//Función que devuelve la cantidad total de posiciones abiertas |
// |
//+------------------------------------------------------------------+
int PositionsTotal() {
int pos = 0;
for (int i=0; i<OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
pos++;
}
return(pos);
}
//+------------------------------------------------------------------+
Pues bien, esta es otra forma de hacerlo: se escriben cerillas para cada vela del rango. En la versión anterior, las coincidencias se escribían sólo para una vela, es decir, no se escribía ninguna coincidencia para la que coincidía con ésta.
Bien. Pero tal y como yo lo veo, si el máximo de la vela 2 coincide con el mínimo de la vela 7, entonces se encontrarán dos coincidencias: 2 <=> 7, 7 <=>2. ¿Y qué pasa con la contabilización de los pares inversos, pero sin el bucle extra?
¿No se puede resolver el problema en una sola pasada, sin utilizar bucles for anidados:)))?
Gud. Sin embargo, según entiendo, si el máximo de la vela 2 coincide con el máximo de la vela 7, entonces se encontrarán dos coincidencias: 2 <=> 7, 7 <=>2. ¿Y qué pasa con la contabilización de los pares inversos, pero sin el bucle extra?
¿Qué tal si resolvemos el problema de una sola vez, sin usar bucles for anidados:)))?
:) No trates de hacerme eldébil;) Por supuesto, creo que se puede resolver el problema con un solo bucle, pero me daba pereza pensar mucho más e hice lo que se me ocurrió de inmediato.
Naturalmente, aquí se registran todas las velas emparejadas o más en los datos del partido de cada vela. De ahí las referencias cruzadas entre sí. Sólo sugiero variantes, sin saber para qué sirven.
Y además es posible resolver la tarea de optimización de los cálculos, pero no lo necesito.
Y si necesitas exactamente los datos de cada vela y de todos los partidos, y si, de repente, de repente... sólo hay ....
Así que no tengo tiempo ni ganas. He perdido mi tiempo en lugar de escribir mis propios códigos.
SZY, tal vez debería conectar también los métodos Kohonen conociendo el parámetro de entrada requerido.
En general, no hay tiempo ni ganas. Y así perder el tiempo en lugar de escribir mis propios códigos.
Es una pena, es una pena.
De nada. He cometido una inexactitud en la segunda versión. Como la primera versión buscaba coincidencias a partir de la siguiente vela del índice del bucle, el bucle principal se pasaba por el número de velas menos una para comparar las dos velas más externas. Ahora, en la segunda versión, para cada una de las velas buscamos coincidencias en todo el rango, por lo que en la línea
debe cambiar el número de barras a
Por favor, díganos el significado de estas líneas:
input int Search_Period=10; // Número de velas a copiar
int searchPeriod=(Search_Period<1)?1:Search_Period; // ¿qué significan los símbolos "?", ":"?
input int Delta=2; // Número de puntos de admisión
int delta=(Delta<0)?0:Delta; // ¿qué significan los símbolos "?", ":"?
Por favor, dígame el significado de estas líneas:
input Search_Period=10; // Número de velas a copiar
int searchPeriod=(Search_Period<1)?1:Search_Period; // ¿qué significan los caracteres "?", ":"?
input int Delta=2; // Número de puntos de admisión
int delta=(Delta<0)?0:Delta; // ¿qué significan los símbolos "?", ":"?
De referencia:
Operador condicional ?
La forma general de un operador ternario es la siguiente
expresión1? expresión2: expresión3
Como primer operando, "expresión1" puede ser cualquier expresión que dé como resultado un valor de tipo bool. Si el resultado es verdadero, se ejecuta el operador especificado por el segundo operando, "expresión2 ".
Si el primer operando esfalso, se ejecuta el tercer operando, "expresiónZ". El segundo y tercer operandos, es decir, "expresión2" y "expresiónZ", deben devolver valores del mismo tipo y no deben ser de tipo void. El resultado de la ejecución del operador condicional es el resultado de la "expresión2" o el resultado de la "expresión3", dependiendo del resultado de la "expresión1".
//--- renormalizar la diferencia entre los precios de apertura y cierre por el rango diario
double rango_verdadero = (¿Alto==Bajo)?0:(Cierre-Apertura)/(Alto-Bajo);
Esta entrada equivale a lo siguiente
rango_doble;
if(High==Low)true_range=0;// si High y Low son iguales
else true_range=(Close-Open)/(High-Low);// si High es distinto de cero