Discusión sobre el artículo "Escribir un Expert Advisor mediante la programación orientada a objetos de MQL5"
En general, no está mal, pero es un poco cojo en el seguimiento de la OOP lema utilizado en el nombre. Por ejemplo, ¿por qué stoploss, take y price se colocan fuera de la clase? STP y TKP deberían ser miembros, necesitamos el método setSLTP; latest_price y levels deberían considerarse dentro de openBuy/openSell. Ellos mismos están escritos muy irracionalmente - es deseable dejar sólo un if con llamada MarginOK, y dentro de él añadir la primera línea de la comprobación if(Chk_Margin == 0) return(true);
Y una cosita más. ¿Por qué se declara Chk_Margin como int-, aunque sólo se usa como bool? Sería mejor describirlo por un tipo mínimo suficiente, de lo contrario hay preguntas al leer el código fuente, ¿qué pasará si Chk_Margin == 2, 3, etc.?
Con el par especificado en el periodo especificado con los parámetros de entrada por defecto, no se puede obtener un gráfico de balance tan bonito. ¿Tenía el autor otras cotizaciones? ¿Podría adjuntar los parámetros de entrada, con los que se obtuvo dicho gráfico?
¿Qué tan diferentes deben ser las cotizaciones entre usted y el autor para que los resultados sean muy diferentes))))))) Yo obtuve casi lo mismo, y el resultado final es incluso un poco mejor:
el diseño es desconcertante
if(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) { return(true); } else { return(false); }
el diseño es desconcertante
¿Qué es exactamente lo que te disgusta tanto? Por supuesto, no lo he visto en el contexto del código.....
¿no es así como se suele escribir en estos casos?
return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
¿No es así como suelen escribirlo en estos casos?
No entiendo la siguiente parte del código:
// Copia el precio de cierre de la barra anterior (barra 1) a la variable correspondiente del Asesor Experto Cexpert.setCloseprice(mrate[1].close); // precio de cierre de la barra 1 //--- Comprobar si hay una posición de compra if (Cexpert.checkBuy()==true) { if (Buy_opened) { Alert("¡¡¡Ya tenemos una posición de compra!!!"); return; // No añadir a la posición larga } double aprice = NormalizeDouble(latest_price.ask,_Digits); double stl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); double tkp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); int mdev = 100; // realizar el pedido Cexpert.openBuy(ORDER_TYPE_BUY,Lot,aprice,stl,tkp,mdev); }Si vamos a abrir una posición de compra, debemos centrarnos en el precio latest_price.ask, pero al establecer un Stop Loss y Take Profit para dicha posición - en el precio latest_price.bid. ¿Es esto correcto? ¿Por qué el Stop Loss y Take Profit se establecen en base al precio ask en el texto del código? ¿Es un error tipográfico o una peculiaridad de una estrategia en particular (el código tiene una construcción similar para la apertura de una posición de venta)?
No entiendo la siguiente parte del código:
Si vamos a abrir una posición de compra, debemos centrarnos en el precio latest_price.ask, pero al establecer un Stop Loss y Take Profit para dicha posición - en el precio latest_price.bid. ¿Es esto correcto? Entonces, ¿por qué Stop Loss y Take Profit se establecen sobre la base del precio ask en el texto del código? ¿Es un error tipográfico o una peculiaridad de una estrategia en particular (el código tiene una construcción similar para la apertura de una posición de venta)?Aquí está la lógica (probablemente, yo también suelo utilizarla):
1. El precio de apertura para Comprar se considera Ask (y es correcto);
Digamos que abrimos a 1.27 en EURUSD.
2. 2. Al abrir una posición obtenemos la diferencia igual al spread, para Buy es Ask-Bid (pérdida potencial si cerramos al precio actual);
Supongamos que el spread es igual a 5 pips. Así Bid en la apertura estará en 1,2695 (¿correcto?).
3. 3. Los largos se cierran al precio Bid (y esto es bastante lógico).
Así que cuando Bid se va a 1,27 obtenemos una BU en la posición (¿correcto?).
4. Pero también necesitamos obtener un beneficio (100 pips en la cotización estándar).
Es decir TP debe ser mayor que Open en 100 pips. En nuestro caso es 1.28 (¿correcto?).
Al mismo tiempo TP se activará si Bid (no Ask) alcanza este 1.28....
5. SL también necesita ser fijado (digamos que es 50 pips). Así que en nuestro ejemplo estará situado en 1.2650 (50 pips por debajo de Open).
¿Bajo qué condiciones funcionará el SL?
Lógicamente, debería funcionar cuando el precio pase estos mismos 50 pips en nuestra contra (es decir, Ask en las monedas de cierre en SL debería estar lógicamente en estos mismos 1.2650).
¿Dónde debería estar el Bid en este caso? Y en este momento estará situada en 1,2645 (porque Spred por la condición tenemos 5 pips).
Recordando que los Longs son fijos.
6. Ahora veamos lo que ocurre en realidad (tomemos como ejemplo la apertura de mercado de un largo en MQL4).
//Взято из справки по OrderSend ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point);
Lo que vemos aquí
El precio de apertura es considerado como Ask, SL es considerado como Bid, y TP es considerado como Ask.
En nuestro caso obtendremos este patrón.
OrderSend(Symbol(),OP_BUY,1,Open = Ask,3,SL = Bid-50*Point,TP Ask+100*Point);
Vamos a sustituir nuestros datos aquí:
OrderSend(Symbol(),OP_BUY,1,1.2700,3,1.2695-50*Point,TP 1.2700+100*Point);
Lo que obtenemos al final - Open = 1.2700 SL= 1.2645 TP 1.28
PS
Comparemos con los datos originales:
Orden - Open = 1.2700 SL= 1.2645 TP 1.28
Modelo - Open = 1.2700 SL= 1.2645 TP 1.28
Aquí existe esta lógica (lo más probable es que yo también tienda a utilizarla):
1. El precio de apertura para Comprar se considera Ask (y es correcto);
Digamos que abrimos a 1.27 en EURUSD
2. Al abrir una posición obtenemos la diferencia igual al spread, para Buy es Ask-Bid (pérdida potencial si cerramos al precio actual);
Supongamos que el spread es igual a 5 pips. Por lo tanto Bid en la apertura estará en 1,2695 (¿verdad?).
5. 5. El SL también debe ser fijado (digamos que es 50 pips). Así que en nuestro ejemplo se situará en 1.2650 (50 pips por debajo de Open)
¿Bajo qué condiciones se activará el SL?
Lógicamente, debería funcionar cuando el precio pase estos mismos 50 pips en nuestra contra (es decir, Ask en monedas de cierre en SL debería estar lógicamente en estos mismos 1.2650).
¿Dónde debería estar el Bid en este caso? Y en este momento se situará en 1,2645 (porque Spred por la condición que tenemos 5 pips).
Recordando que los Longs son fijos.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Escribir un Expert Advisor mediante la programación orientada a objetos de MQL5:
Este artículo se centra en enfoque orientado a objetos para hacer lo que hicimos en el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" -creando un sencillo Expert Advisor. La mayoría de la gente piensa que esto es muy difícil, pero le quiero garantizar que al finalizar la lectura de este artículo, será capaz de escribir su propio Expert Advisor basado en la orientación a objetos.
Autor: Samuel