Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1003
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
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 )
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 )
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.
Esta es la condición para cruzar el nivel 50 de abajo hacia arriba.
Esta es la condición para cruzar el nivel 50 de abajo hacia arriba.
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.
}