Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 852

 

No abre un comercio, ¿dónde está la culpa?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

No abre el comercio, ¿dónde está el error?

Error número 1: En cada tick se crea un NUEVO indicador HANDL

Caladero número 2: (probablemente) la variable Lot tiene un volumen incorrecto.

Fallo número 3: (probablemente) el tipo de llenado de la orden para la clase CTrade no se llena.


En general, ¿qué hay en el registro del terminal (o del probador)?

 
Kirill Belousov:

el importe multiplicado por la pérdida de divisas de 1 SL

Y si la pérdida es 1, en BO por ejemplo.

Puse los valores en la fórmula, ni siquiera cerca del mismo resultado.

¿Qué ocurre?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

Brecha número 1: En cada tick se crea un NUEVO indicador HANDL

Caladero número 2: (probablemente) la variable Lot tiene un volumen incorrecto.

Fallo número 3: (probablemente) el tipo de llenado de la orden para la clase CTrade no se llena.


De todos modos, ¿qué hay en el registro del terminal (o del probador)?

Este código sí estaba en onitics

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

Lo he trasladado a onytics. Acabo de leer los artículos aquí - y he entendido que no hay diferencia para el trabajo, pero es mejor en onitiket. Pero en términos de claridad para mí, era más conveniente hacer todo en 1 bloque, soy puramente para mí mientras resuelvo los problemas que me planteo (aprendizaje.)

El problema estaba en el lote -tenía que poner no un lote variable- y en la función returnlot (porque era una función para calcular el lote).

Ahora he encontrado un error en la función de lote - el lote se calcula con muchos decimales y como resultado la orden no se puede abrir. Hay que reducir los caracteres innecesarios y dejar sólo 2.

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDouble y DoubleToStr hasta ahora no puede trabajar - escribe que la función no puede ser colocado en la función, y por debajo cuando pongo su trabajo con la función escribe error - que no puedo arreglar.


 
Askr:

Este código estaba en onitics.

Lo he movido a ontic. Acabo de leer los artículos aquí - y de ellos entendí que no hay diferencia para el trabajo, pero es mejor en ontiket. Pero en términos de claridad para mí, era más conveniente hacer todo en 1 bloque, soy puramente para mí mientras resuelvo los problemas que me planteo (aprendizaje.)

El problema estaba en el lote -tenía que poner no un lote variable- y en la función returnlot (porque era una función para calcular el lote).

Ahora he encontrado un error en la función de lote - el lote se calcula con muchos decimales y como resultado la orden no se puede abrir. Hay que reducir los caracteres innecesarios y dejar sólo 2.

Cuando pego la función NormalizeDouble y DoubleToStr todavía no puedo hacerlo - dice que la función no puede ser puesta en una función, y cuando las pego abajo la función escribe errores que no puedo corregir.


En MQL5 es necesario crear un mango de indicador SOLO una vez y SOLO en OnInit. Es un axioma. No se puede crear una manija de indicador en cada tick en OnTick - es incorrecto.

La normalización correcta del lote está en la clase comercial CSymbolInfo::NormalizePrice

 
Vladimir Karputov:

En MQL5 se debe crear una manija de indicador SOLO una vez y SOLO en OnInit. Es un axioma. No se puede crear una manija de indicador en cada tick en OnTick - esto es CORRECTO.

La normalización correcta del lote está en la clase comercial CSymbolInfo::NormalizePrice

No es cierto, no lo discuto. ¡¡¡PERO!!! ¿Qué cambiará si lo creamos en cada tic? Ni siquiera el valor cambiará.

 
Alexey Viktorov:

No es cierto, no hay discusión con eso. ¡¡¡PERO!!! ¿Qué va a cambiar si se crea en cada tic? Ni siquiera el valor cambiará.

¿Qué sentido tiene? Sólo un montón de trabajo extra para el guión, eso es todo.

 
Alexey Viktorov:

No es cierto, no se puede discutir eso. ¡¡¡PERO!!! ¿Qué va a cambiar si se crea en cada tic? Ni siquiera el valor cambiará.

En un artículo reciente he demostrado que MQL5 combate eficazmente los vestigios de la codificación al estilo de MQL4 - creación de asas en cada tick: la memoria no se desperdicia, pero la velocidad de operación disminuye al menos. Pero repito: la creación de indicadores en MQL5 al estilo de MQL4 no es el método correcto. Si se cambia a MQL5, significa que hay que reconstruir el estilo de programación.

 
Konstantin Nikitin:

¿Qué sentido tiene? Es un trabajo extra para el guión, eso es todo.

Por supuesto que no tiene sentido. Era una pregunta tan oculta drubashke: ¿Por qué se asemejan a los neuróticos, que son suficientes aquí como es, e incluyen Caps Lock?

 

Es decir, el resultado es el mismo, pero desde luego la ejecución no tiene sentido y es mucho más movida, según entiendo por lo que se ha escrito.

Ojalá hubieran pensado en escribirlo en el artículo, pero en general está claro que no hay razón para hacer lo mismo varias veces.

Pero mi objetivo era escribir para entender y trabajar en sí mismo, no para optimizar.
Razón de la queja: