Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 356
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
Gracias, pero me gustaría una solución precisa. Para que no se cuente la barra actual, sino sólo las anteriores.
Gracias, pero me gustaría una solución precisa. Para que no se tenga en cuenta la barra actual, sino sólo las anteriores.
Maldita sea, me he metido en el código de otra persona, de nuevo a golpe de vista tratar de cambiar esta pieza. En este caso probablemente PRICE_CLOSE o 0 debería ser...
Aquí está el código, cambió los turnos de 0 a 1. ¿Ayudará eso?
//============================================================================================
//
//
//
//
//
//============================================================================================
inttern MA1_Period=7; // 1er periodo MA
extern int intMA2_Period=13; // Periodo de la 2ª MA
extern int MA1_Method=1; // Método de cálculo MA1 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA2_Method=1; // Método de cálculo de MA2 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA1_Price=0; // Método de cálculo del precio MA1
extern int MA2_Price=0; // Método de cálculo del precio MA2
extern int MA1_Shift=1; // Desplazamiento temporal de MA1
extern int MA2_Shift=1; // Desplazamiento temporal de MA2
extern double Lote = 0,01; // Lote fijo
extern int slippage = 0; // Desviación del precio para órdenes de mercado
int New_Bar; // 0/1 Formación de una nueva barra
int Tiempo_0; // Hora de inicio de un nuevo compás
int PosClose; // Dirección de cruce
int total; // Número de órdenes abiertas
double MA1_0; // Valor actual de la 1ª МА (rosa)
double MA1_1; // Valor anterior de la 1ª MA (rosa)
double MA2_0; // Valor actual de la 2ª MA (azul)
double MA2_1; // Valor anterior de la 2ª MA (azul)
int ordenCompra; // 1 = hecho de la presencia de la orden de compra
int orderSell; // 1 = hecho de la presencia de la orden de venta
//============================================================================================
int init()
{
}
//============================================================================================
int inicio()
{
doble precio;
int total=OrdersTotal(); // total de pedidos
for(int i=total-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) // Seleccionar orden
{
if(OrderType()==OP_BUY) // si es una orden de compra
{
orderBuy=1;
if(CrossPositionClose()==1) // Cerrar la orden si se cumple
{ // condición CrossPositionClose()=1
price=MarketInfo(Symbol(),MODE_BID);
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE);
}
}
if(OrderType()==OP_SELL) // Si se trata de una orden de compra
{
orderSell=1;
if(CrossPositionClose()==2) // Cerrar la orden si se cumple
{ // condición CrossPositionClose()=2
price=MarketInfo(Symbol(),MODE_ASK);
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE);
}
}
}
}
New_Bar=0; // Vamos a ponerlo a cero primero
if (Time_0 != Time[0]) // Si la hora de inicio de la barra ya es diferente
{
New_Bar= 1; // Aquí hay una nueva barra
Time_0 = Time[0]; // Recuerda la nueva hora de inicio de la barra
}
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0); // Valor actual de la 1ª MA
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1); // Valor anterior de la 1ª MA
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0); // Valor actual de la 2ª MA
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1); // Valor anterior de la 2ª MA
volver;
}
//============================================================================================
int PosiciónCruzadaCerrada()
{
PosClose=0; // ¡¡¡Aquí es donde se entierra el perro!!:)
if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0)) // CrossPosition Close {
{
PosClose=1;
}
if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0)) // Intersección descendente
{
PosClose=2;
}
return(PosClose); // devuelve la dirección de la intersección.
}
//============================================================================================
//============================================================================================
int MAMethod(int MA_Method)
{
switch(MA_Método)
{
caso 0: return(0); //retorno MODE_SMA=0
caso 1: return(1); // devolver MODE_EMA=1
caso 2: return(2); // Devuelve MODE_SMMA=2
caso 3: return(3); //retorno MODE_LWMA=3
}
}
//============================================================================================
int MAPrice(int MA_Price)
{
switch(MA_Price)
{
caso 0: return(PRICE_CLOSE); // Devuelve PRICE_CLOSE=0
caso 1: return(PRICE_OPEN); //retorno PRICE_OPEN=1
caso 2: return(PRECIO_ALTO); //retorno PRECIO_ALTO=2
caso 3: return(PRICE_LOW); //retorno PRICE_LOW=3
caso 4: return(PRICE_MEDIAN); //retorno PRICE_MEDIAN=4
caso 5: return(PRECIO_TIPICO); //retorno PRECIO_TIPICO=5
caso 6: return(PRICE_WEIGHTED); //retorno PRICE_WEIGHTED=6
}
}
//============================================================================================
Sepulca, ya lo he intentado, el compilador lo jura.
No puede ser, voy a probarlo yo mismo......
Sepulca, gracias, tu código funciona. Sólo que he puesto los turnos en su sitio.
Lo comprobaré en plazos más largos, lo torturaré durante unos días para estar seguro de que este código funciona.