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
Estoy intentando cambiar el stop loss por el stop principal... ¿Cómo lo hago?
Eso es lo que estoy haciendo:
COrder *order=orders.At(i); .... COrderStop *order_stop=order.MainStop(); double new_sl=...; order_stop.StopLoss(new_sl); order.MainStop(order_stop); order.CheckStops();Realmente me rompí la cabeza tratando de hacer eso...
No se actualiza debido a la comprobación en COrderStopVirtualBase::Update
StopLoss() devuelve el nuevo valor pero sl_line sigue siendo antiguo...
Hola Shep,
Gracias por señalar esto. No me había dado cuenta hasta ahora. Actualizaré el código.
Sí, soy consciente de ello. Esto sigue siendo debido a las declaraciones hacia adelante. CStop requiere instancias de COrder y COrderStop en sus métodos. Lo mismo también cuando intentas compilar CStop. Todas estas clases que se requieren mutuamente deberían compilarse juntas. Daría errores si cada una se compila por su cuenta. Por ejemplo:
Esto no compilará. Tienes que declarar una declaración forward para que el compilador reconozca el miembro de clase m_object2 dentro de la clase object1:
Esto está bien si Object1 y Object2 están en el mismo archivo. Si están en dos ficheros separados, entonces necesitas hacer una declaración forward para Objeto2 en el fichero de clase de Objeto1, y para Objeto1 en el fichero de clase Objeto 2.Entonces el compilador no devolvería errores si compilas cualquiera de los dos ficheros. Esto es cierto, hasta que añadas métodos a cualquiera de las dos clases.
La versión actual del compilador reconoce las declaraciones forward, pero no los métodos listados de la clase declarada forwardly. Por eso no recibes mensajes de error como "CStop - declaración sin tipo", pero recibes mensajes de error del compilador para los métodos como el que has publicado arriba. El compilador reconoce la clase, pero no los métodos de la clase que ha sido declarada forwardly.
Hola Enrico,
Gracias por la rápida respuesta. Tienes toda la razón sobre las declaraciones hacia adelante. Me preocupaba que pudiera ser un problema más profundo que eso. Tiene sentido que el objeto que utiliza la clase declarada hacia adelante no tenga conocimiento de los miembros de esa clase.
Yo uso un modelo diferente para mi motor de ejecución que utiliza el patrón de estrategia. Tengo algunos problemas molestos con él, y estaba echando un vistazo a tu biblioteca cuando me encontré con esos problemas.
Tu trabajo es realmente genial, tienes sólidas habilidades de diseño e ingeniería y gracias por ser tan amable de compartirlo.
Gracias, Shep.
Hola Enrico,
Gracias por tu rápida respuesta. Tienes mucha razón en lo de las declaraciones hacia adelante. Me preocupaba que pudiera ser un problema más profundo que eso. Tiene sentido que el objeto que utiliza la clase declarada hacia adelante no tenga conocimiento de los miembros de esa clase.
Yo uso un modelo diferente para mi motor de ejecución que utiliza el patrón de estrategia. Tengo algunos problemas molestos con él, y estaba echando un vistazo a tu biblioteca cuando me encontré con esos problemas.
Tu trabajo es realmente genial, tienes sólidas habilidades de diseño e ingeniería y gracias por ser tan amable de compartirlo.
Gracias, Shep.
Hola, Shep,
De nada y gracias por hacérmelo saber. Recuerdo que yo también me quedé un poco perplejo cuando me encontré con ese problema de las declaraciones hacia delante.
Me alegra saber que los artículos te han resultado útiles. Te deseo todo lo mejor en tus esfuerzos por construir tu propio motor EA.
Saludos, Enrico
No se actualiza debido a la comprobación en COrderStopVirtualBase::Update
StopLoss() devuelve un nuevo valor pero sl_line sigue siendo antigua...
El propósito de COrderStopVirtualBase::Update es en realidad lo contrario de lo que pretendes. Su propósito es ajustar el valor sl/tp cuando su propia línea de stop se actualiza, normalmente desde fuera del EA (arrastrando en el gráfico o alterando directamente el valor en la ventana de propiedades del objeto ). Utilice en su lugar los métodos MoveStopLoss() y MoveTakeProfit() para los stops virtuales.
Se supone que esto es para el próximo artículo, pero si estás impaciente, quizás quieras echar un vistazo al método CheckTrailing() de COrderStopBase. Modifica el stop de la orden cuando es elegible para trailing. El método se aplica a los tres tipos:
Alternativamente, la clase CTrail también se puede utilizar para modificar los niveles sl/tp sin tener que recuperar una instancia de un stop de orden (no sólo para trailing o breakeven).
Qué lejos de la práctica y la comodidad está el enfoque multiplataforma propuesto. Como engorrosa bicicleta propia, está bien. Pero, ¡para qué publicarlo! Es más fácil escribirlo todo completamente uno mismo, incluso para un principiante, que estudiar y dominar este monstruo. No lo entiendo.
SB bajo MT5 es un ejemplo de elegancia en comparación con este ciclo de artículos. Y también es portado a MT4.
Me ha gustado mucho el artículo, me ha abierto los ojos. Por favor, escriba un artículo de seguimiento. Estoy realmente interesado en cómo se abordaría scalping con esta herramienta.
Un millón de gracias por este y todos sus otros trabajos.
Qué lejos de la práctica y la comodidad está el enfoque multiplataforma propuesto. Como engorrosa bicicleta propia, está bien. Pero, ¡para qué publicarlo! Es más fácil escribirlo todo completamente uno mismo, incluso para un principiante, que estudiar y dominar este monstruo. No lo entiendo.
SB bajo MT5 es un ejemplo de elegancia en comparación con este ciclo de artículos. Y también está portado a MT4.
Estoy completamente de acuerdo. Incluso estando muy familiarizado con OOP, el enfoque de este autor es demasiado pervertido. Hay demasiados excesos y el código no es un código en absoluto, sino un "monstruo"....