Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 112
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
Hola. Escribí en mi EA el cálculo del lote así:
lote=NormalizeDouble(AccountBalance()*riesgo/(SL*MarketInfo(Symbol(),MODE_TICKVALUE)),2);
El propósito es obtener el tamaño de lote correcto independientemente de la divisa y el par de la cuenta para el riesgo y el stop loss dados. Elriesgo se establece como un porcentaje de pérdidas cuando se activa el Stop Loss. Stop Loss SL en pips (donde pips es el menor cambio posible del precio del par). Voy a utilizar este EA en la cuenta real. Pero tengo mis dudas. Si alguien de los programadores más experimentados pudiera decirme qué errores pueden producirse, se lo agradecería mucho.Primer probador de estrategias. Entonces, una cuenta de demostración. Y sólo entonces uno de verdad. Para comprobar la fórmula, escribe un script. O simplemente calcularlo en un papel. Tomé balance=100, riesgo=0.1 SL=100, Tick=0.00001 Lote=100*0.1 / (100*0.00001) = 10 / 0.001 = 10000 lote más que el balance? ¿Debemos considerar el apalancamiento?
MarketInfo(Symbol(),MODE_TICKVALUE)) no devuelve el tamaño mínimo del tick. Está escrito en la ayuda:
Tamaño del cambio mínimo del precio del instrumento en la moneda del depósito.
Pero en realidad, devuelve el valor del cambio mínimo del precio del símbolo en la moneda de depósito de 1 lote del contrato.
En su ejemplo,MarketInfo(Symbol(),MODE_TICKVALUE)) devolverá 1. Y entonces todo es correcto. Lo he probado en cuentas reales de dólares y rublos y funciona. Aquí está el script que utilicé para comprobarlo:
#property copyright "Copyright 2016, MetaQuotes Software Corp.
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta
#property show_inputs
extern double risk=0.10;
extern int sl=1000;
//+------------------------------------------------------------------+
//| Función de inicio del programa de script |
//+------------------------------------------------------------------+
void OnStart()
{
Alert(NormalizeDouble(AccountBalance()*risk/(sl*MarketInfo(Symbol(),MODE_TICKVALUE),2))
}
//+------------------------------------------------------------------+
Tienes razón. La comprobación con un script es más rápida y fiable
También tenemos que hacer que la precisión en la función NormaliseDouble dependa del lote mínimo permitido. Si se pasa un lote a la función OrderSend, por ejemplo, 0,11, y la herramienta sólo opera con lotes múltiples de 0,1, se producirá un error.
No puedo entender por qué las operaciones abiertas no se borran todas a la vez, es decir, el EA borra algunas de ellas, pero el error orderdelete 4108, la orden de mercado no se puede borrar varias veces, y sólo entonces las borra.
No puedo entender por qué las operaciones abiertas no se borran todas a la vez, es decir, el EA borra algunas de ellas, pero el error orderdelete 4108, la orden de mercado no se puede borrar varias veces, y sólo entonces las borra.
En esta página se explica cómo eliminar. Tienes dos errores.
En el arranque hay un error constante array out of range en 'expert1.0.mq4' (69,25)... He entendido que se trata de la matriz. No sé qué hacer.
Necesito ver el código, o una parte de él, que maneja esta matriz.
Telépatas, descansen hoy.
Tienes que mirar el código o un trozo de código que maneja el array.
Telépatas, descansen hoy.
}
Esta es la función.
Sólo pensé que el problema no estaba en el código, ya que no hay errores en el modo estándar.