Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 64
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
1. Yo diría lo siguiente: utiliza el código de otra persona con mucho cuidado. Porque el código de otro significa también los errores de otro.
2. Aquí(https://www.mql5.com/ru/forum/6343/page64#comment_357008) te sugerí que intentaras poner a cero correctamente las variables antes de utilizarlas. Pero su código aún no ha implementado esta sugerencia. Además, su código contiene construcciones del tipo
Como ves, en esta construcción las variables request y result se ponen a cero no antes de ser utilizadas sino después de serlo. Además, cuando estas variables locales se ponen a cero, la función deja de funcionar, es decir, dicha puesta a cero no tiene sentido. En otras palabras, esta construcción es un buen ejemplo de cómo las variables MqlTradeRequest y MqlTradeResult no deben ponerse a cero. Por lo tanto, si usted está ansioso, por favor, trate de limpiar las variables correctamente. Si algo va mal, por favor, describa con detalle qué es lo que "no funciona".
3. La Biblioteca Estándar tiene una clase de comercio"MQL5 Reference / Standard Library / Trade Classes / CTrade". Intenta averiguar cómo aplicarlo en la práctica. En la fase inicial de inmersión en el idioma, esta clase puede ser suficiente. Por ejemplo, esta clase tiene el siguiente método:"MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify". Se implementa de la siguiente manera:
La línea 'ClearStructures();' en ella borra la variable m_request antes de usarla.
Yedelkin,
Muchas gracias :)
Lo busqué y vi mi error.
Puedo hacerlo así:
Pero me han gustado tus sugerencias:
En cualquier caso, los resultados son los mismos.Ahora el puesto no se encuentra, me esforzaré con esta tarea.
Gracias.
Yedelkin,
Le escribo porque está respondiendo adecuadamente.
Tengo dos sors-MT4 y MT5.
Por qué no funciona en MT5, son iguales.
Desgraciadamente, no entiendo nada de MT4. Echaré un vistazo y si pillo algo, te lo haré saber.
Adenda. En general, esperará a la apertura del mercado e informará de lo que exactamente debería haber funcionado, pero no lo hizo.
Desgraciadamente, no entiendo nada de MT4. Echaré un vistazo y si pillo algo, te lo haré saber.
Adenda. En general, se espera a que el mercado abra y se describe lo que debería haber funcionado, pero no lo hizo.
Así que lo hago por mí y por quién, si es necesario.
Aquí están los comentarios:
Si la indicación de los pips bolshego cero para la modificación de dos yazikas (MT4 y MT5):
Si estos pips (Bid - pips) bolshe abrir posishon:
Si stop = 0 o Bid - pipsi dal trailing >= de la definición de Open Posishon + pips:modificación:
Eso es todo.
Quiero hacer una función separada para la modificación.
¿Puede ser más específico? ¿Su Asesor Experto ya está utilizando el indicador MFI y ahora necesita que utilice el segundo indicador - el indicador MA? ¿O su Asesor Experto no utiliza ningún indicador, pero usted necesita que utilice el indicador MA?
Si el Asesor Experto utiliza MFI, entonces su código debe contener una línea con la obtención del mango de este indicador:"MQL5 Reference / Technical Indicators / iMFI ". Por lo tanto, el manejo del indicador de media móvil se describe aquí:"MQL5 Reference Guide / Technical Indicators / iMA ".
Intente también leer el artículo"Indicador por indicador en MQL5".
1. Lamentablemente, no has especificado lo que "no funciona". Has dicho la lógica del programa (cómo debería funcionar), pero no has dicho dónde se rompe la lógica y cómo se rompe. Sin una descripción detallada del problema, sólo se pueden hacer comentarios sobre el código.
2. La función bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit) contiene estas líneas:
Si mira la descripción de la estructura de MqlTradeResult, puede ver que el campo deal se describe de la siguiente manera
acuerdo
Ticket de transacción, si se ha ejecutado una transacción. Se comunica durante una operación comercial TRADE_ACTION_DEAL
siempre se activará, incluso si la modificación fue exitosa, y al mismo tiempo imprimirá un mensaje de error.
2. Mira las líneas del punto 2 anterior. Allí se utiliza la función GetLastError() que tiene por objeto devolver el código del último error. Pero no se borra la variable que contiene el código de error antes de usarla, por lo que, aunque la modificación sea exitosa, se imprime un error que podría haber ocurrido mucho antes de que se enviara la solicitud de modificación de la posición. Debería ser algo así:
3. Mira estas líneas:
Supongamos que en el siguiente tick se activa su condiciónNormalizeDouble(Bid - MStop,4) == SL. Supongamos que SL==1,11110. Pero entonces también ModifyPosition(Symbol(),1.11110,TP). Es decir, esta modificación especificará los niveles previamente establecidos.
¿Y qué ocurrirá si la igualdad NormalizeDouble(Bid - MStop,4) == SL vuelve a funcionar en el siguiente tick?) Sobre todo si tenemos en cuenta que (a) la normalización se realiza sobre cuatro dígitos, cuando puede haber cotizaciones de cinco dígitos, (b) las solicitudes de negociación pueden ejecutarse en el servidor con cierto retraso.
4. También existe una propiedad de carácter como SYMBOL_TRADE_STOPS_LEVEL. Pero este nivel no se comprueba en su código. Es decir, si el candidato a un nuevo stop loss para una posición de compra se especifica como SL_nuevo, sería útil comprobar la condición if(Bid-STOPS_LEVEL>SL_nuevo).
De hecho, intente buscar en el Manual de Referencia la comparación de números reales. Por lo que recuerdo, se desaconseja encarecidamente comparar dos números reales así: if(doble_1 == doble_2).
Yedelkin,
Muchas gracias, Reshetov también me mostró dónde está el error.
Esta es la función propiamente dicha:
Y aquí está cómo debería haber hecho la función en sí:
Ahora todo funciona bien.
Gracias.