[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 910
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
Víctor, echa un vistazo a tu mensaje personal, por favor.
Lo he visto
OrderSend() se activa en cada tick (según tengo entendido). Para eliminar el problema, coloque una variable antes de la función de inicio, por ejemplo int H=0.
Más allá del código:
..........
si ( H==0)
{
OrderSend(blah blah blah);
}
H=1;
Y no es necesario el álgebra. Y OrdersTotal() es mejor que no se utilice para limitar.
Entiendo, a mi me funciona, es decir tengo que abrir 1 orden y no se abre al siguiente tick
La segunda orden, la segunda orden sólo es necesaria cuando la primera se cierra
Si no me equivoco, debe ser así.
int H=0;
int F=Total de pedidos();
..........
si(F<1)
{
si ( H==0)
{
OrderSend(blah blah blah);
}
H=1;}
Si no me equivoco, debe ser así.
int H=0;
int F=Total de pedidos();
..........
si(F<1)
{
si ( H==0)
{
OrderSend(blah blah blah);
}
H=1;}
es comprensible, a mi me funciona todo, me refiero a que se abra 1 orden y no se abra al siguiente tick
la segunda orden, la segunda orden es necesaria sólo cuando la primera se cierra
Buenas tardes a todos. No soy muy bueno escribiendo EAs, he tratado de aprender estas cosas, pero acabo de empezar y es bastante difícil para mí. Quiero escribir un EA que abra operaciones cuando los precios crucen una media móvil y las cierre en el cruce opuesto, ya sea usando stop loss o trailing stop. Encontré un ejemplo de tal EA, pero no hay trailing stop o stop loss y las operaciones se abren y cierran simplemente al cruzar. No tengo suficientes conocimientos para ello. Quiero pedirle a alguien que me ayude donde poner trailing stop y stoploss y como hacerlo funcionar:
#property copyright "Jake Sunders"
#enlace de propiedad "feloq@mail.ru"
#define CUADRO_ESTADO 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- parámetros de entrada
extern int MAPeriod=26;
extern double NúmeroDeLotes=1,0;
extern double TrailingStop=50;
extern double StopLoss= 50;
//---- variables globales
int EstadoActual;
int MiPedidoTicket;
//+------------------------------------------------------------------+
//| función de inicialización de expertos |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else EstadoActual = STATE_LONG;
MiPedidoTicket = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| función de desinicialización experta |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{
//----
int err;
doble MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //la media móvil es mayor que el precio de cierre
{
CurrentState = STATE_SHORT;
//vuelta a la venta
//--Cierre la posición si se abre
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Error al cerrar la posición: ", err);
return(0);
}
MiPedidoTicket = 0;
}
RefreshRates();
//--- la posición larga se cerró con éxito
//--- ahora vamos a abrir una posición de venta
//--- comprobar si hay fondos libres
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Error en la apertura de la posición: ", err);
MiPedidoTicket = 0;
}
}
}
si no
{
if (MA < Close[1]) // media deslizante por debajo del precio de cierre
{
CurrentState = STATE_LONG;
//invertir para comprar
//--Cierre la posición si se abre
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Error al cerrar la posición: ", err);
return(0);
}
MiPedidoTicket = 0;
}
RefreshRates();
//--- la posición corta se cerró con éxito
//--- ahora vamos a abrir una posición de compra
//--- comprobar si hay fondos libres
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Error en la apertura de la posición: ", err);
MiPedidoTicket = 0;
}
}
}
//----
return(0);
}
¡Gente, por favor, aconsejen! ¿Cómo puedo hacer que una posición se abra y se cierre en la expiración de una vela o velas? Es decir, se abre en la apertura de una nueva vela, y se cierra
¿Cómo se toman los valores del indicador al cierre de una vela?
Tengo órdenes de compra y venta que se abren al mismo precio para casi 50-100 posiciones,
cómo debo hacer para que sólo se abra una orden, si no me equivoco - OrdersTotal()
Si es así, ¿cómo debo usarlo y dónde debo colocarlo? Siento que sin esta función necesito introducir todo el álgebra
Condiciones incorrectas para realizar operaciones, ver ejemplo de dos MAs.
Buenas tardes a todos. No soy muy bueno escribiendo EAs, he tratado de aprender estas cosas, pero acabo de empezar y es bastante difícil para mí. Quiero escribir un EA que abra operaciones cuando los precios crucen una media móvil y las cierre en el cruce opuesto, ya sea usando stop loss o trailing stop. Encontré un ejemplo de tal EA, pero no hay trailing stop o stop loss y las operaciones se abren y cierran simplemente al cruzar. No tengo suficientes conocimientos para ello. Quiero pedirle a alguien que me ayude donde poner trailing stop y stoploss y como hacerlo funcionar:
#property copyright "Jake Sunders"
#enlace de propiedad "feloq@mail.ru"
#define CUADRO_ESTADO 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- parámetros de entrada
extern int MAPeriod=26;
extern double NúmeroDeLotes=1,0;
extern double TrailingStop=50;
extern double StopLoss= 50;
//---- variables globales
int EstadoActual;
int MiPedidoTicket;
//+------------------------------------------------------------------+
//| función de inicialización de expertos |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else EstadoActual = STATE_LONG;
MiPedidoTicket = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| función de desinicialización experta |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{
//----
int err;
doble MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //la media móvil es mayor que el precio de cierre
{
CurrentState = STATE_SHORT;
//vuelta a la venta
//--Cierre la posición si se abre
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Error al cerrar la posición: ", err);
return(0);
}
MiPedidoTicket = 0;
}
RefreshRates();
//--- la posición larga se cerró con éxito
//--- ahora vamos a abrir una posición de venta
//--- comprobar si hay fondos libres
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Error en la apertura de la posición: ", err);
MiPedidoTicket = 0;
}
}
}
si no
{
if (MA < Close[1]) // media deslizante por debajo del precio de cierre
{
CurrentState = STATE_LONG;
//invertir para comprar
//--Cierre la posición si se abre
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Error al cerrar la posición: ", err);
return(0);
}
MiPedidoTicket = 0;
}
RefreshRates();
//--- la posición corta se cerró con éxito
//--- ahora vamos a abrir una posición de compra
//--- comprobar si hay fondos libres
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Error en la apertura de la posición: ", err);
MiPedidoTicket = 0;
}
}
}
//----
return(0);
}
Mira este ejemplo