Deseos para MT5 - página 14

 
stringo:
Lo solucioné y lo arreglé. Gracias.

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

Gracias por la corrección, casi bueno, por qué casi...

En la ayuda dice

start_time [in] La hora del bar correspondiente al primer elemento.

Y el primer elemento es 0.

Pero el último elemento está bien.

Si esta es la forma en que se pretendía, por favor, arreglar el helpe.

 
vdv2001:

Gracias por la corrección, casi bueno, por qué casi...

En la ayuda dice

start_time [in] La hora del bar correspondiente al primer elemento.

Y el primer elemento es 0.

Pero el último elemento está bien.

Si es así, por favor, arreglen la ayuda.

La situación es que start_time y stop_time en la variante date-to-date pueden ser cualquier cosa - en cualquier caso forman un rango. Intentemos que esto quede más claro en la documentación
 
stringo:
La situación es que start_time y stop_time en el caso de date-to-date pueden ser cualquiera - en cualquier caso forman un rango. Intentemos ser más específicos sobre esto en la documentación

Es decir, ¿dices que las funciones Copy*, en el caso de fecha a fecha, devolverán todos los elementos excepto el inicial? Así que tengo que escribir la expresión así:

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

esta pregunta es muy importante para mí.

 

Tenga en cuenta que cuando se cambia de día, esto es lo que ocurre:

Después de la actualización, todo se pone en su sitio.

Observar la formación de la transición a un nuevo día, a menudo me doy cuenta de este cambio, y lo más interesante en el momento de la formación de la primera barra de la tabla de actualización del día siguiente no trae resultados. (Puede que me equivoque, pero creo que mi post anterior también tiene algo que ver).

 

Bild 252.

Menú principal: <Gráficos> -<Instrumentos gráficos> se muestran los plazos.

 
uncleVic:

Lamentablemente, la última versión de CAccountInfo no llegó a la compilación.

En el archivo adjunto, encontrará el método FreeMarginCheck (hasta ahora sólo para SYMBOL_CALC_MODE_FOREX).

Si tiene algún comentario o idea, escríbanos.

Encontré, que el método FreeMarginCheck necesita ser mejorado.

1. Consideremos el caso SYMBOL_CALC_MODE_FOREX:

work=SímboloInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Divisa();
bid=SymbolInfoDouble(work,SYMBOL_BID);
margen=oferta*volumen*tamaño del contrato/apalancamiento;
margin=margen libre;
romper;

Si los valores de los dos sumandos SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) y Currency() resultan ser iguales, entonces la variable bid obtiene el valor 0 y la variable margin obtiene el valor free_margin.

Para solucionarlo, he hecho lo siguiente:

caso SYMBOL_CALC_MODE_FOREX:

bid=1.0;

if (SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Divisa())

{

work=SímboloInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Divisa();
bid=SymbolInfoDouble(work,SYMBOL_BID);
}

margen=oferta*volumen*tamaño del contrato/apalancamiento;
margin=margen libre;
romper;

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

¿Puedo preguntar cuándo funcionarán normalmente las funciones Copy*()?

En cada nueva construcción dejan de funcionar, ¿nadie los usa?

 
vdv2001:

Gracias por la corrección, casi bueno, por qué casi...

En la ayuda dice

start_time [in] La hora del bar correspondiente al primer elemento.

Y el primer elemento es 0.

Pero el último elemento está bien.

Si esto es lo que pretendía, por favor, arregle la ayuda.

No está claro en su ejemplo cómo se adquiere el valor de time1. El intento de reproducir la situación no tuvo éxito.

Archivos adjuntos:
 
Yedelkin:

Encontré que el método FreeMarginCheck necesita ser refinado.

Gracias por el comentario. Corregido.
 
Yedelkin:

Encontré que el método FreeMarginCheck necesita ser refinado.

2. Otro problema es el siguiente. Consideremos de nuevo el caso SYMBOL_CALC_MODE_FOREX:
work=SímboloInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Divisa();
bid=SymbolInfoDouble(work,SYMBOL_BID);

Si la variable delsímbolo tiene una moneda que no está cotizada directamente (por ejemplo, CADJPY) como moneda base, SymbolInfoDouble(work,SYMBOL_BID) dará como resultado 0.

2.1 Además, no está claro por qué se utiliza el precio de la oferta para calcular la segunda variable (oferta). Al fin y al cabo, tenemos que asegurarnos de que la monedaen la que se calculan las pujas se adquierea costa de la moneda de depósito, es decir, "comprar la moneda del margen, vender la moneda del depósito". Y si en un determinado par de divisas, la moneda de depósito está en el segundo lugar, entonces tenemos que utilizar el precio ASK para realizar la operación especificada.

Para rectificar la situación, he hecho lo siguiente:

doble curso;
//---
switch(SymbolInfoInteger(símbolo,SYMBOL_TRADE_CALC_MODE))
{
caso SYMBOL_CALC_MODE_FOREX:
curso=1.0;

//--Comprueba si la moneda del depósito es la moneda base del par de divisas actual
//par. Si es así, el valor de la variable del curso seguirá siendo 1,0
if(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Divisa())
{
work=SímboloInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Divisa();

//--Comprueba si existe un par de divisas cuya moneda base sea la misma que la
//la moneda base del par actual, y la moneda de cotización es la misma que la moneda de depósito
//(es decir, si el depósito es en USD, compruebe la cotización directa)
if(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
course=SymbolInfoDouble(work,SYMBOL_ASK);

//--- Si la condición anterior no se cumple, cambia la secuencia de símbolos
//las divisas en la variable de trabajo no se cumplen y obtenemos un par de divisas con moneda base
//coincide con la moneda de depósito, y la moneda de cotización es la misma que la moneda base
//par actual (si el depósito es en USD, obtenemos el par de divisas con la cotización inversa).
si no
{
work=Moneda()+SímboloInfoString(símbolo,SYMBOL_CURRENCY_MARGIN);
course=1/SymbolInfoDouble(work,SYMBOL_BID);
}
}
margen=curso*volumen*tamaño del contrato/apalancamiento;
margin=margen libre;
romper;

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
Razón de la queja: