Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1003

 
 

Le rogamos que nos indique cómo poner en práctica lo siguiente:

Hay líneas personalizadas en el gráfico, que haya un número "n" de ellas. ¿Cómo obtener el valor del precio cuando éste se acerca a una de las líneas?

Gracias de antemano.

 

Hola a todos ) por favor ayuda - El objetivo es (si el precio está por encima de la (100 pips) "línea" entonces "comprar" ) ) como expresarlo ( el precio es mayor en 100 pips de cualquier valor ) y también esta pregunta como saber el precio de la media móvil en este momento?

gracias de antemano )

 
Tema97:

Hola a todos ) por favor ayuda - El objetivo es (si el precio está por encima de la (100 pips) "línea" entonces "comprar" ) ) como expresarlo ( el precio es mayor en 100 pips de cualquier valor ) y también esta pregunta como saber el precio de la media móvil en este momento?

gracias de antemano )

Tema, lee la documentación, allí se describe iMa y los objetos gráficos. Existe una función ObjectGetDouble(con los parámetros correspondientes) para obtener el precio de una línea
 

Por favor, aconseje a un recién llegado cómo evitar la reapertura de una orden, después de que haya sido cerrada, manteniendo las condiciones comerciales de apertura.

Por ejemplo: si el estocástico cruza el nivel 50 hacia arriba, abre la compra. Cerrar en la reversión del estocástico, o cuando alcance el nivel 80 o en el Take Profit. Pero las condiciones de apertura se conservan. Es decir, el estocástico se mantiene por encima de 50 y se abre la compra de nuevo.

double S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0);

double S_2=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,1);

si(S_1>50)

{

Opn_B=true;

}

if(S_1<S_2|||S_1>80)

{

Cls_B=true;

}

Inserto los criterios de comercio en el esquema del Asesor Experto simple, que se presenta en el tutorial MQL. Por favor, indíqueme qué función debe utilizar para evitar este problema. Gracias.

 
if(S_1 > 50 && S_2 < 50)

Esta es la condición para cruzar el nivel 50 de abajo hacia arriba.

 
AlexeyVik:

Esta es la condición para cruzar el nivel 50 de abajo hacia arriba.

¡Muchas gracias! Lo intentaré ahora.
 
¿Cómo puedo "desprender" un indicador "adjunto" (o EA) de un gráfico sin cerrar ese gráfico?
 
¿Es posible poner un indicador AccountEquity() que funcione en tiempo real en el gráfico? ¿Dónde puedo conseguirlo?
 

Hola, ¿podríais aconsejarme? Estoy cambiando los criterios de comercio en el Asesor Experto presentado en el tutorial MQL4. Cuando intento establecer un stop loss en la compra, el programa da el error 130: stops erróneos. Explique por qué, por favor.

// Valores numéricos para M15

extern double StopLoss =0; // SL para la orden que se abre

extern double TakeProfit =0; // TP para la orden que se abre

extern int K = 5;

extern int D = 3;

extern int ralentización = 3;

extern int campo_precio = 0;


extern int Nivel_1 = 80; // Nivel estocástico

extern int Nivel_2 = 20;

extern inttern Periodo_MA_2 = 31; // Periodo MA 2

extern double Rastvor =28.0; // Distancia entre MA

extern double Lotes =0.01; // Número fijo de lotes.

extern double Prots =0.07; // Porcentaje de fondos libres

bool Work=true; // El Asesor Experto funcionará.

string Symb; // Nombre del instrumento financiero

//--------------------------------------------------------------- 2 --

int inicio()

{

int

Nivel K,

Total, // Número de pedidos en la ventana

Tip=-1, // Tipo de pedido seleccionado (B=0,S=1)

Ticket; // Número de pedido

doble S_1,

S_2,

MA_1_t, // Valor de MA_1_t. Valor actual de MA_1

MA_2_t, // Valor. MA_2 current MA_2_t value // Número de lotes seleccionados en el orden

Lotes, //Cantidad de lotes en el pedido actualmente seleccionado

Lts, //Número de lotes en una orden abierta

Min_Lot, // Número mínimo de lotes

Paso, // Paso del cambio de tamaño del lote

Libre, // Fondos libres actuales

One_Lot, // Valor de un lote

Precio, // Precio de la orden seleccionada

SL, // Precio SL de la orden seleccionada

TP; // TP de la orden seleccionada

bool

Ans =false, // Respuesta del servidor después del cierre

Cls_B=false, // Criterio de cierre Comprar

Cls_S=false, // Criterio de cierre Venta

Opn_B=false, // Criterio de apertura de Buy

Opn__S=false; // criterio de apertura Venta

//--------------------------------------------------------------- 3 --

/Preprocesamiento

if(Bars < Period_MA_2) // No hay suficientes barras

{

Alert("No hay suficientes barras en la ventana. El Asesor Experto no funciona");

return; // Salir de start()

}

if(Work==false) // Error crítico.

{

Alert("Error crítico. El Asesor Experto no funciona");

return; // Salir de start()

}

//--------------------------------------------------------------- 4 --

// Recuento de pedidos

Symb=Símbolo(); // Nombre del instrumento financiero.

Total=0; // Número de pedidos

for(int i=1; i<=TotalPedidos(); i++) // Bucle de pedido

{

if(OrderSelect(i-1,SELECT_BY_POS)==true) // Si

{ // Análisis de pedidos:

if (OrderSymbol()!=Symb)continue; // No es nuestro instrumento financiero

if (OrderType()>1) // Tenemos una orden pendiente

{

Alert("Orden pendiente detectada. El Asesor Experto no está funcionando;)

return; // Exit()

}

Total++; // Contador de órdenes de mercado

if (Total>1) // No hay más de un pedido

{

Alert("Varias órdenes de mercado. El Asesor Experto no funciona;)

return; // Exit()

}

Ticket=OrderTicket(); // Número de pedido seleccionado.

Tip =OrderType(); // Tipo de la orden seleccionada.

Precio =OrderOpenPrice(); // Precio de la orden seleccionada.

SL =OrderStopLoss(); // SL de la orden seleccionada.

TP =OrderTakeProfit(); // TP de la orden seleccionada.

Lot =OrderLots(); // Número de lotes

}

}

//--------------------------------------------------------------- 5 --

// Criterios comerciales

S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0);


S_2=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,1);


if(S_1 > 50 && S_2 < 50)


{


Opn_B=true;


}


if(S_1<S_2||(S_1 < 80 && S_2 > 80))


{


Cls_B=true;


}

if(S_1 < 50 && S_2 > 50)


{


Opn_S=true;


}


if(S_1>S_2||(S_1 > 20 && S_2 < 20))


{


Cls_S=true;


}

//--------------------------------------------------------------- 6 --

// Cerrar órdenes

while(true) // Cerrar el bucle de pedido.

{

if (Tip==0 && Cls_B==true) //Abrir orden de compra.

{ //hay un criterio de cierre

Alert("Intentando cerrar Buy ",Ticket,";)

RefreshRates(); // Actualizar datos

Ans=OrderClose(Ticket,Lot,Bid,2); // Cerrar la compra

if (Ans==true) // Ha funcionado :)

{

Alerta ("Orden de compra cerrada ",Ticket;)

break; // Salir del bucle de cierre

}

if (Fun_Error(GetLastError())==1) // Gestión de errores

continuar; // reintentar

return; // Salir de start()

}

if (Tip==1 && Cls_S==true) // Orden de venta abierta.

{ // hay un criterio de proximidad

Alert("Intentando cerrar la venta ",Ticket,";)

RefreshRates(); // Actualizar datos

Ans=OrderClose(Ticket,Lot,Ask,2); // Cierre de la venta

if (Ans==true) // Ha funcionado :)

{

Alerta ("Orden de venta cerrada ",Ticket;)

break; // Salir del bucle de cierre

}

if (Fun_Error(GetLastError())==1) // Gestión de errores

continuar; // reintentar

return; // Salir de start()

}

break; // Salir mientras

}

//--------------------------------------------------------------- 7 --

// Ordenar los valores

RefreshRates(); // Actualizar datos

Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Número mínimo de lotes

Free =AccountFreeMargin(); // Liberar fondos

One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valor de 1 lote

Paso =MarketInfo(Symb,MODE_LOTSTEP); // Tamaño del cambio de paso

if (Lots > 0) // Si se especifican los lotes

Lts =Lotes; // trabajamos con ellos

else // % de fondos libres

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Para abrir

if(Lts < Lote_Mín) Lts=Lote_Mín; // No menos que Lote_Mín; // No menos que Lote_Mín

if(Lts*One_Lot > Free) // Lotes más caros que Free

{

Alert(" No hay suficiente dinero ", Lts," lotes);

return; // Salir de start()

}

//--------------------------------------------------------------- 8 --

//Apertura de pedidos

while(true) //Ordenar el cierre del bucle.

{

if (Total==0 && Opn_B==true) // No hay órdenes abiertas

{ //criterio de compra abierto.

RefreshRates(); // Actualizar datos

Alert("Intentando abrir Buy. Esperando respuesta...");

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,StopLoss,TakeProfit);//comprar

if (Ticket > 0) // ha funcionado :)

{

Alerta ("Orden de compra abierta ",Ticket;)

return; //Salir de la orden

}

if (Fun_Error(GetLastError())==1) // Gestión de errores

continuar; // reintentar

return; // Salir de start()

}

if (Total==0 && Opn_S==true) // no hay órdenes abiertas

{ //abrir criterio de venta.

RefreshRates(); // Actualizar datos

Alert("Intentando abrir la venta. Esperando respuesta...");

Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,StopLoss,TakeProfit);//Open Sel.

if (Ticket > 0) // Ha funcionado :)

{

Alerta ("Orden de venta abierta ",Ticket;)

return; //Salir de la orden

}

if (Fun_Error(GetLastError())==1) // Gestión de errores

continuar; // reintentar

return; // Salir de start()

}

break; // Salir mientras

}

//--------------------------------------------------------------- 9 --

return; //salir de start()

}


//-------------------------------------------------------------- 10 --

int Fun_Error(int Error) // Fie de gestión de errores

{

switch(Error)

{ // Errores insalvables.

caso 4: Alerta("El servidor de comercio está ocupado. Inténtelo de nuevo...");

Sleep(3000); // Solución simple.

return(1); // Salir de la función.

case 135:Alert("El precio ha cambiado. Inténtelo de nuevo...");

RefreshRates(); // Actualizar datos.

return(1); // Salir de la función.

case 136:Alert("No hay precio. Esperando un nuevo tick...");

while(RefreshRates()==false) // Till a new tick

Sleep(1); // Retraso en el bucle

return(1); // Salir de la función

case 137:Alerta("El corredor está ocupado. Inténtelo de nuevo...");

Sleep(3000); // Solución simple.

return(1); // Salir de la función.

case 146:Alert("El subsistema de comercio está ocupado. Inténtelo de nuevo...");

Sleep(500); // Decisión simple

return(1); // Salir de la función

// Errores críticos

caso 2: Alert("Error general;)

return(0); // Salir de la función.

caso 5: Alert("Versión antigua del terminal.");

Work=false; // Ya no funciona

return(0); // Salir de la función

caso 64: Alerta("Cuenta bloqueada.");

Work=false; // Ya no funciona

return(0); // Salir de la función

caso 133:Alerta("Prohibido comerciar.");

return(0); // Salir de la función

caso 134:Alerta("No hay suficiente dinero para ejecutar la transacción");

return(0); // Salir de la función

por defecto: Alert("Se ha producido un error ",Error); // Otras opciones

return(0); // Salir de la función

}

}

//-------------------------------------------------------------- 11 --

int New_Stop(int Parametr) // Comprueba la parada.

{

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distancia mínima

if (Parametr < Min_Dist) // Si es menor de lo permitido.

{

Parametr=Min_Dist; // Establecer la tolerancia.

Alert("La distancia de parada ha aumentado;)

}

return(Parametr); // Valor de retorno.

}

Razón de la queja: