[¡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 285
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
Quizás la función https://www.mql5.com/ru/forum/107476/page21 pueda ayudar.
Función isCloseLastPosByTake().
Esta función devuelve una bandera para cerrar la última posición de la toma.
Bandera arriba - Verdadero - Se activó el TakeProfit.
Bandera bajada - Falso - la posición se cerró debido a otra razón.
La función propiamente dicha debe colocarse al final del código. También añado a la condición de vender:
Buenos días, tardes o mañanas a todos vosotros.
Hice todo como lo escribí. Puse la función al final del código y la añadí a mis condiciones de venta.
Acabo de pensarlo y lo he añadido para comprarlo. Los pedidos se cerrarán no sólo por BUY, sino también por SHELL.
He insertado la función isCloseLasPosByTake() al final.
Aquí hay una tarta de este tipo, o como decía pfc Gotsman pintura al óleo. ayuda al tonto a salir.... no sabe nada.......
el propio código (es decir, sólo el inicio)
Específicamente escribí en mi post. ¡Que esta función isCloseLastPosByTake() - debe colocarse al final del código, ANTES de la FUNCIÓN START!
¿Y dónde lo pusiste?
Y cuidado con los corchetes en las condiciones de compra y venta. Ahí te faltan claramente (comprueba - que el número de paréntesis abiertos es igual al número de cerrados). Aquí se corrigió la venta :
¡¡¡Buenos días!!!
¡Necesito ayuda! Me disculpo por no ser modesto.
Pero este es mi problema, tengo un EA que se basa en un Martin, coloca la primera orden de VENTA o COMPRA, lo que yo quiera, pero quiero poder elegir COMPRA o VENTA en las propiedades del EA. Es decir, pongo por ejemplo COMPRA en sus propiedades y se abre una orden sólo de COMPRA, o lo contrario.
Me temo que aún no he aprendido a programar en MQL4 .
Adjunto el propio asesor.
¡Gracias de antemano a los que respondan!
Específicamente escribí en mi post. ¡Que esta función isCloseLastPosByTake() - debe colocarse al final del código, ANTES de la FUNCIÓN START!
¿Y dónde lo pusiste?
Y presta más atención a las llaves en las condiciones de compra y venta. Ahí te faltan claramente (comprueba - que el número de paréntesis abiertos es igual al número de cerrados). Aquí está el arreglo de la venta :
Lo puse después del inicio fi, así que entiendo.....
Lo he entendido mal entonces, gracias por el pinchazo :-))
Si lo he entendido bien, debería ponerse después de } al final del bloque de función de desinicialización de expertos ??????? o después de return(0); al final de start-???????
¡¡¡¡¡¡¡¡¡Gracias de antemano por su paciencia!!!!!!!!!
Lo puse después de la función de inicio, por lo que entiendo.....
Lo he entendido mal, gracias por el pinchazo :-))
Si he entendido bien, debe ponerse después de } al final del bloque de función de desinicialización de expertos ??????? o después de return(0); al final de start-???????
¡¡¡¡¡¡¡¡¡Gracias de antemano por su paciencia!!!!!!!!!
Debe colocarse en el exterior. No dentro de ninguna función, - sino como una función independiente.
Así:
No estoy seguro de que en estas condiciones, el Asesor Experto funcione. Porque la primera posición no podrá abrir...
La función isCloseLastPosByTake() debe ser eliminada de una condición de compra o venta.
Entonces el asesor trabajará.
¡¡¡Buenos días!!!
Pero este es mi problema, tengo un EA que se basa en un Martin, coloca la primera orden de VENTA o COMPRA, lo que yo quiera, pero quiero poder elegir COMPRA o VENTA en las propiedades del EA. Es decir, pongo por ejemplo COMPRA en sus propiedades y se abre una orden sólo de COMPRA, o viceversa.
Adjunto el propio EA.
¡Gracias de antemano a todos los que respondan!
Es poco probable que nadie responda. El EA está descompilado (hackeado) y esos archivos no son bienvenidos aquí...
Es decir, el navegador por defecto
ShellExecute, el comando "abierto", por así decirlo.
He decidido estudiar MQL 4 ya que todo lo que he encontrado no cumple con mis aspiraciones. En este momento estoy estudiando para entender cómo funcionan los profesionales y mejorarlo para mi idea. Hay una (simple y pequeña, una página) función personalizada, el código se adjunta. Debido a mi amateurismo, no puedo durante dos días entender - lo que esta función devuelve como resultado, y que condición anidada es el Else?
¿Alguien podría plantar una chispa de conocimiento en mi torpeza?
Lo que consigo es esto:
El propósito de la función es determinar si ya existe un pedido para este par y, si lo hay, determinar su tipo.
La función que llama a esta función espera la presencia de uno de los pedidos seleccionados en el procedimiento interruptor, La función debe devolver "1", en presencia de dos órdenes - "2", y en ausencia de órdenes "-1".
El ciclo se inicia si l_pos_16= 0. Supongamos que tenemos cuatro órdenes pendientes en total para algunos pares, incluyendo dos en el par donde el EA está trabajando y no son las primeras.
Sin embargo, en la primera iteración del bucle, la función if(OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) comprueba la posición con el número "0" en la lista de pedidos, pero no existe tal posición (porque entiendo que la numeración es a partir de la posición 1) y entonces pasará a la siguiente. si no con salida completa de fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12) con devolución del valor Retorno(-1).
Se pierde el sentido de la función en su conjunto, ya que el resultado debería ser el mismo independientemente de la presencia o ausencia de órdenes en el símbolo dado .
Sin embargo, cuando el EA funciona, esta función define y da lo que la función llamada espera de ella, que luego trabaja en función del resultado obtenido .
Tampoco entiendo qué si no Return(-1) funcionará en
if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
O mismo en if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
El código de la función :
int fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12)
a_count_0= 0;
a_count_4 = 0;
a_count_8 = 0;
a_count_12 = 0;
gi_252 = 0;
for (int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) {
if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
switch (OrderType()) case OP_BUY:
a_count_0++;
gi_252 = 1;
g_ticket_268 = OrderTicket();
gs_272 = OrdenComentario();
g_ord_open_price_256 = OrderOpenPrice();
g_ord_stoploss_288 = OrderStopLoss();
g_ord_takeprofit_296 = OrderTakeProfit();
romper;
caso OP_SELL:
a_count_4++;
gi_252 = -1;
g_ticket_268 = OrderTicket();
gs_272 = OrdenComentario();
g_ord_open_price_256 = OrderOpenPrice();
g_ord_stoploss_288 = OrderStopLoss();
g_ord_takeprofit_296 = OrderTakeProfit();
romper;
caso OP_BUYSTOP:
a_count_8++;
romper;
caso OP_SELLSTOP:
a_count_12++;
}
}
} si no, devuelve (-1);
}
devolver (a_count_0 + a_count_4 + a_count_8 + a_count_12);
/* la ejecución normal de la f-i devolverá uno en la variable en uno de caso y "0" en todos los demás, lo que indica que hay uno de
de los tipos de orden, y el número de esta orden está disponible para la función de llamada,
comentario, precio de apertura, stop loss y take profit */
}