Autoaprendizaje del lenguaje MQL5 desde cero - página 81

 
Alexey Viktorov #:

Realmente espero que no hayas escrito esto...

Esta es una función que funciona

Todo lo que tienes que hacer es introducir el tamaño del riesgo, para que no cuente del margen libre completo...

Gracias, Alexey, por tu comentario. Mi versión del cálculo del lote funciona, y sólo la parte del código donde se escribe el array no funciona.

Originalmente lo diseñé para poder establecer diferentes tamaños de riesgo para diferentes pares de divisas.

Para ser honesto, no entiendo muy bien cómo utilizar su código para un EA multidivisa.

Saludos, Vladimir.

 
MrBrooklin #:

Gracias, Alexey, por tu comentario. El cálculo del lote en mi versión funciona, y sólo esa parte del código, donde se escribe el array, no funciona.

En un principio, se pretendía poder establecer diferentes tamaños de riesgo para diferentes pares de divisas.

Para ser honesto, no entiendo muy bien cómo utilizar su código para un EA multidivisa.

Sinceramente, Vladimir.

Muy sencillo. No creí que tuvieras dificultades con ello después de todo lo que has aprendido.

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
//double contractSize(double Lot)
double contractSize(string symbol, double risk)
 {
//  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
  double volume = AccountInfoDouble(ACCOUNT_MARGIN_FREE)*risk/10000,
         v = volume,
         volumeStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP),
         minLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN),
         maxLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
  v = round(volume/volumeStep)*volumeStep;
  return(fmin(maxLot, fmax(minLot, v)));
 }/******************************************************************/

Y la función se llama

double lot = contractSize(symbol[Number], Risk[Number]);
 
Alexey Viktorov #:

Muy sencillo. No pensé, después de todo lo que has aprendido, que tendrías problemas con esto...

Y se llama a la función.

Gracias de nuevo, Alexey! Intentaré utilizarlo en mi EA esta noche.

Soy bastante nuevo en esto de las matrices, de ahí las dificultades. Hasta ahora no los necesitaba, pero ahora me doy cuenta de que es un gran hueco que tendré que cubrir en un futuro próximo. He empezado a estudiar el artículo de Dmitry Fedoseyev, pero hasta ahora hay muchas cosas que no están claras. Necesito tiempo para asimilar el material.

Saludos, Vladimir.

 
SanAlex #:

Aquí hay algo con lo que he estado jugando.

Tal vez debas entender primero lo esencial.
 
SanAlex #:

algo - probó el código por todas partes - esto parece funcionar.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Está a punto de empezar: tengo otro bache en el camino.

Sasha, ¿también escribes este tipo de códigos por encargo en el trabajo autónomo? Siempre me he preguntado cómo se escriben códigos de 2 o más MILES de líneas. Pero ahora empiezo a entenderlo... Calcular el número de líneas de mi código y el tuyo... Y comprobar la extensión máxima, es un disparate... Es mucho más fácil usar la opción "no sé".

  MqlTick tick;
    if(!SymbolInfoTick(posSymbol, tick))
      return;
    if(tick.ask-tick.bid > inpSpred)
      return;

Si quieres que funcione, pero no todo el mundo es capaz de entender lo que has escrito, puedes hacerlo con tres líneas

  MqlTick tick;
    if(!SymbolInfoTick(posSymbol, tick) || tick.ask-tick.bid > inpSpred)
      return;
 
SanAlex #:

este código está tomado de la terminal

Sigan con el buen trabajo.
 
SanAlex #:

No sé escribir código yo mismo: tomo todas las funciones de la documentación y, con un poco de maña, las modifico para mis propios fines.

\\\\\\\\\\\\\\\\\\\\

También miro sus códigos y en el codebase. Estoy aprendiendo - no soy un teórico - es más fácil cavar yo mismo que explicar - cómo cavar.

Ya está claro que sólo se puede cavar. ¿Por qué poner los códigos aquí?
 
SanAlex #:

sólo para... sólo para divertirte.

¿A quién más vas a hacer tus inteligentes preguntas?

Te dieron diez años por una razón.
 
SanAlex #:

Deje el Golfo de Finlandia y venga al Mar Negro con nosotros

En realidad estoy en Kaliningrado
 
SanAlex #:

Deje el Golfo de Finlandia y venga al Mar Negro con nosotros