[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 10

 
tol64:
¿Puede indicar si es posible determinar mediante programación la posibilidad de establecer un stop loss/stake profit inmediatamente al abrir una posición/orden pendiente o después?


Compruebe previamente los niveles de stop y de beneficio.

Los identificadores de solicitud utilizados en la función MarketInfo(). Puede ser uno de los siguientes valores:

Constante . Valor Descripción
MODE_LOW 1 Precio mínimo diario
MODO_ALTO 2 Precio máximo diario
MODE_TIME 5 Hora de la última cotización
MODE_BID 9 Último precio de oferta recibido. Para el instrumento actual se almacena en la variable predefinida Bid
MODE_ASK 10 Último precio de oferta recibido. Se almacena en la variable predefinida Pregunta por el símbolo actual
PUNTO_MODE 11 Tamaño del punto en la moneda de la cotización. Almacenado en la variable predefinida Punto para el símbolo actual
MODE_DIGITS 12 Número de dígitos después del punto decimal en el precio del instrumento. Almacenado en la variable predefinida Dígitos para el símbolo actual
MODE_SPREAD 13 Diferencial en pips
MODE_STOPLEVEL 14 Nivel mínimo permitido de Stop Loss/Stake Profit en pips
MODE_LOTSIZE 15 Tamaño del contrato en la moneda base del instrumento
MODE_TICKVALUE 16 Tamaño mínimo de cambio del precio del instrumento en la moneda del depósito
MODE_TICKSIZE 17 Paso mínimo de cambio de precio del instrumento en la moneda de cotización
MODE_SWAPLONG 18 Tamaño del swap para las posiciones largas
MODE_SWAPSHORT 19 Tamaño del swap para posiciones cortas
MODE_STARTING 20 Fecha de inicio del calendario (suele utilizarse para los futuros)
MODO_EXPIRACIÓN 21 Fecha de vencimiento (normalmente utilizada para los futuros)
MODO_COMERCIO_PERMITIDO 22 Permiso para negociar el instrumento especificado
MODE_MINLOT 23 Tamaño mínimo del lote
MODE_LOTSTEP 24 Paso de cambio de tamaño de lote
MODE_MAXLOT 25 Tamaño máximo del lote
MODE_SWAPTYPE 26 Método de cálculo de los swaps. 0 - en puntos; 1 - en moneda base del instrumento; 2 - en porcentajes; 3 - en moneda del margen.
MODE_PROFITCALCMODE 27 Modo de cálculo de los beneficios. 0 - Forex; 1 - CFD; 2 - Futuros
MODE_MARGINCALCMODE 28 Modo de cálculo del margen. 0 - Forex; 1 - CFD; 2 - Futuros; 3 - CFD de índices
MODE_MARGININIT 29 Margen inicial requerido para 1 lote
MODE_MARGINMAINTENANCE 30 Cantidad de margen requerido para apoyar las posiciones abiertas por 1 lote
MODE_MARGINHEDGED 31 Margen cobrado en posiciones superpuestas por 1 lote
MODE_MARGINREQUIRED 32 Cantidad de fondos libres, necesarios para abrir 1 lote para comprar
MODE_FREEZELEVEL 33 Nivel de congelación de las órdenes en puntos. Si el precio de ejecución está dentro de los límites definidos por el nivel de congelación, la orden no puede ser modificada, cancelada o cerrada.

 
SeALALex:

Apenas estoy aprendiendo a escribir un EA, como muchos de mis primeros EAs sobre indicadores estándar, acabo de escribir uno nuevo, pero ahora se me ha complicado la tarea. En general, cómo hacer, que en la aparición de las condiciones abrió una posición y en su cierre, vamos a tomar las mismas condiciones cuando se guarda el nuevo no se abrió, y se abrió sólo cuando las condiciones opuestas, etc. ¡¡¡Gracias!!!


hay un ejemplo listo en la ayuda

int i,accTotal=OrdersHistoryTotal(); for(i=0;i<accTotal;i++) { //---- comprobar el resultado de la selección if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error al acceder a la base de datos histórica (",GetLastError(),")); break;
       } Necesitamos recordar la hora de cierre de la orden, comparar la hora de cierre de la orden con la hora de cierre en la iteración anterior, si (la hora de cierre es mayor y el tipo de operación comercial es Compra o Venta), entonces debemos recordar la hora de la orden actual y el tipo de operación comercial // como resultado, al final del ciclo sabemos el tipo de orden que cerró por última vez } Algo así .

 
ivandurak:


Comprobación previa de los niveles de ajuste del stop y de los beneficios .


En esta lista no hay ninguna marca para ciertos tipos de cuentas. Este es un párrafo del Reglamento de Operaciones Comerciales para las cuentas NDD:

3.3 Si se abre una posición a través del Terminal del Cliente utilizando un Asesor Experto, el Cliente no puede designar órdenes de Stop Loss y/o Take Profit. Si el Cliente desea colocar estas órdenes, puede hacerlo modificando una posición existente de acuerdo con las cláusulas 5.16 - 5.22 y 9.13 - 9.16.

Me pregunto si es posible comprobarlo mediante un programa. Según tengo entendido, no. Inicialmente hay que escribir en el programa una función de apertura de posiciones/configuración de órdenes pendientes, teniendo en cuenta las condiciones establecidas por el broker.
 
tol64:


En esta lista no hay ninguna marca para ciertos tipos de cuentas. Este es un párrafo del Reglamento de Operaciones Comerciales para las cuentas NDD:

Me interesa saber si esto se puede comprobar mediante programación. Según tengo entendido, no. Originalmente hay que escribir en un programa una función para abrir posiciones / establecer órdenes pendientes, teniendo en cuenta las condiciones que establece el corredor.

No entiendo muy bien las reglas para fijar las órdenes, intenta jugar con la demo y ver qué puedes y qué no puedes hacer. Por lo que tengo entendido nada impide establecer programáticamente una orden y luego modificarla. Cierto es extraño, a no ser que cortes la conexión después de abrir una posición dejando sin stop .
 
tol64:


En esta lista no hay ninguna marca para ciertos tipos de cuentas. Este es un párrafo del Reglamento de Operaciones Comerciales para las cuentas NDD:

Me interesa saber si esto se puede comprobar mediante programación. Según tengo entendido, no. Inicialmente hay que escribir en el programa una función para abrir posiciones/establecer órdenes pendientes, teniendo en cuenta las condiciones establecidas por el broker.

No hay ningún problema. Incluso (si no es para uso personal, porque usted sabe en qué cuentas (condiciones de negociación y con quién) para usarlo), pero si usted envía el EA a la orden y el cliente aún no ha decidido en qué cuentas y donde se va a utilizar, incluso en los tipos de cuenta con la posibilidad de establecer una toma y la parada de inmediato, a continuación, por defecto producir la EA con valores cero de estos niveles al establecer todos los tipos de órdenes, a continuación, con su modificación (trabajará allí y allí), mientras que, por supuesto, nadie ha cancelado los requisitos de verificación y restricciones en p.
 
ivandurak:

No entiendo muy bien las reglas para fijar las órdenes, intenta jugar con la demo, lo que puedes y lo que no. Por lo que tengo entendido nada impide establecer programáticamente una orden y luego modificarla. Cierto es extraño, a no ser que cortes la conexión después de abrir una posición dejando sin stop .

))) No. Me has malinterpretado completamente. Yo no escribí sobre "fijar programáticamente", escribí sobre definir programáticamente. En algunos tipos de cuenta no se puede abrir inmediatamente una posición y establecer stops/paradas, lo que sería preferible/seguro para mí. En mql5, si no me equivoco, parece que es posible determinar esto. Me gustaría poder determinar esto y, dependiendo de la definición, elegir qué función utilizar.
 
Roman.:

No hay ningún problema. Incluso (si no es para uso personal, porque usted sabe en qué cuentas (condiciones de negociación y con quién) para usarlo), pero si usted hace una EA a la orden y el cliente aún no ha decidido en qué cuentas y donde lo va a utilizar, incluso en los tipos de cuentas con la posibilidad de establecer una toma y detener de inmediato, entonces usted todavía hace una EA con valores cero de estos niveles por defecto al establecer todos los tipos de órdenes, a continuación, con su modificación (trabajará allí y allí), mientras que, por supuesto, nadie canceló los requisitos de verificación y restricciones en p

Sí, no hay problema cuando hay una solución. Sólo tienes que usar lo que tienes y usarlo correctamente).
 

Roman. e ivandurak muchas gracias por sus respuestas, pero esto me sigue costando entenderlo. Encontré una sugerencia en otro foro sobre cómo hacerlo, pero hasta ahora no puedo aplicarlo a mi código habitual

int BuyTrue, SellTrue;// definir las variables que servirán como estos indicadores
....
//--- Condición de compra
if (BuyTrue==0 && ... más sus otras condiciones) //condición de posición abierta
{
....
OrderSend(....); //función para abrir un pedido
BuyTrue=1; // Si BuyTrue=1, la condición para la apertura de la posición no se cumplirá completamente
// En consecuencia, ante una señal de compra repetida no se abrirá una operación
SellTrue=0; // En SellTrue=0 la condición de la apertura de la posición será satisfecha completamente
// por lo que la siguiente operación será sólo de venta
....
}

//--- Condición de venta
if (SellTrue==0 && ... más sus otras condiciones) //condición de posición abierta
{
....
OrderSend(....); //función para abrir un pedido
SellTrue=1; // Si SellTrue=1, la condición de apertura de la orden no se cumplirá completamente
// por lo tanto, en una segunda señal de Venta no se abrirá una posición
BuyTrue=0; // En BuyTrue=0 la condición de apertura de la posición se cumplirá plenamente
// en consecuencia, la siguiente operación será sólo de compra
....
}

Mi código para abrir una posición

total=Total de pedidos();
if(total<1)
{
// no se han identificado órdenes abiertas
if(AccountFreeMargin()<(1000*Lots))
{
Print("No tenemos dinero. Margen libre = ", AccountFreeMargin();
return(0);
}
// comprueba la posición larga (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de compra abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden BUY : ",GetLastError());
return(0);
}
// comprobar la posición corta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice())
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
return(0);
}

 
SeALALex:

Roman. e ivandurak muchas gracias por vuestras respuestas, pero a mi me sigue costando entenderlo. He encontrado una sugerencia en otro foro sobre como hacerlo, pero hasta ahora no puedo aplicarlo a mi código habitual

int BuyTrue, SellTrue;// definir las variables que servirán como banderas descritas anteriormente
....
//--- Condición de compra
if (BuyTrue==0 && ... más sus otras condiciones) //condición de posición abierta
{
....
OrderSend(....); //función para abrir un pedido
BuyTrue=1; // Si BuyTrue=1, la condición para la apertura de la posición no se cumplirá completamente
// En consecuencia, ante una señal de compra repetida no se abrirá una operación
SellTrue=0; // En SellTrue=0 la condición de la apertura de la posición será satisfecha completamente
// por lo que la siguiente operación será sólo de venta
....
}

//--- Condición de venta
if (SellTrue==0 && ... más sus otras condiciones) //condición de posición abierta
{
....
OrderSend(....); //función para abrir un pedido
SellTrue=1; // Si SellTrue=1, la condición de apertura de la orden no se cumplirá completamente
// por lo tanto, en una segunda señal de Venta no se abrirá una posición
BuyTrue=0; // En BuyTrue=0 la condición de apertura de la posición se cumplirá plenamente
// en consecuencia, la siguiente operación será sólo de compra
....
}

Mi código para abrir un trato.

total=Total de pedidos();
if(total<1)
{
// no se han identificado órdenes abiertas
if(AccountFreeMargin()<(1000*Lots))
{
Print("No tenemos dinero. Margen libre = ", AccountFreeMargin();
return(0);
}
// comprueba la posición larga (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de compra abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden BUY : ",GetLastError());
return(0);
}
// comprobar la posición corta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice())
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
return(0);
}


En primer lugar, pegar el código en el editor a través de Ctrl + Alt + M (o pulse SRC en la parte superior del menú), de lo contrario es malo, lo que es claro - todo se mezcla bajo una ...:-))

En segundo lugar, leer el tutorial, en particular la información en el enlace que he recomendado, por debajo del código es su descripción y al final de la descripción se describe con precisión - cómo una vez que el informe de un precio por encima / debajo de la MA (que tendrá una analogía con una sola entrada en una condición de comercio dado - el uso de banderas y todo), antes de que el trabajo de su asistente ... :-))

P.D. o búsqueda en google: Cómo insertar correctamente el código site:mql4.com

 






if (SellTrue==0 && A1<A2 && S1<30 && ADX1<ADX2) // Условие открытия позы
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"AO sample",16384,0,Red);
           if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ||SellTrue==1)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
        
        if (ticket > 0 && SellTrue==1)   
     {
      SellTrue=1;
      BuyTrue=0;                 
      Alert("По данным условиям сделка уже открывалась"); // Сообщение 
     }
        }
      return(0);
Romano. No funciona, ¿qué pasa?
Razón de la queja: