Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1329

 
Tanita Gajduchok:
Hola. ¿Cómo puedo hacer una tabla de clasificación aquí?

arriba ?

 
Saludos.

Cómo escribir una función como ésta:

La suma del volumen de las velas al alza debe ser 2 veces la suma del volumen a la baja, por ejemplo, para las últimas 10 barras.

Como el de la captura de pantalla.


Archivos adjuntos:
IMG_9206.PNG  87 kb
 

Buenas tardes a todos. Estoy tratando de adjuntar un cálculo del tamaño del lote a la máquina Grail, para que el lote se establezca como un porcentaje del depósito en caso de pérdida. En otras palabras, si se dispara un stop loss, se pierde el porcentaje especificado del depósito, o si el depósito es pequeño para este porcentaje, entonces el lote se establece en el mínimo posible para el corredor... Encontré un script en algún sitio web que hace tales cosas y me transferí el código del script, pero el lote no se considera correctamente... Hice lo siguiente. En las variables de entrada declaré una variable responsable del riesgo máximo.

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

Luego declaro las variables en el tick on. Una variable que almacena la cantidad de fondos libres en la cuenta. Una variable de un valor puntual de un símbolo. Una variable del lote mínimo de un corredor. Una variable que almacena el valor del lote máximo en el corredor. Y la variable que almacena el paso del tamaño del lote.

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

Y luego se calcula el volumen del lote con un riesgo determinado a un stop loss determinado. El Stop Loss se calcula por atp o fijo en pips - este cálculo funciona correctamente porque si pongo un lote fijo entonces todo está bien abierto y funciona. La fórmula para calcular el volumen del lote es la siguiente.

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


Después de todos los cálculos a través del valor del lote de impresión para verlo.

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

Lo que aparece en el cuaderno de bitácora lo que se registra para el lote y el stop - los valores del stop son correctos pero el lote no lo es((((

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

Buenas tardes a todos. Estoy tratando de adjuntar un cálculo del tamaño del lote a la máquina Grail, para que el lote se establezca como un porcentaje del depósito en caso de pérdida. En otras palabras, si se dispara un stop loss, se pierde el porcentaje especificado del depósito, o si el depósito es pequeño para este porcentaje, entonces el lote se establece en el mínimo posible para el corredor... Encontré un script en algún sitio web que hace tales cosas y me transferí el código del script, pero el lote no se considera correctamente... Hice lo siguiente. En las variables de entrada declaré una variable responsable del riesgo máximo.

Luego declaro las variables en el tick on. Una variable que almacena la cantidad de fondos libres en la cuenta. Una variable de un valor puntual de un símbolo. Una variable del lote mínimo de un corredor. Una variable que almacena el valor del lote máximo en el corredor. Y la variable que almacena el paso del tamaño del lote.

Y luego se calcula el volumen del lote con un riesgo determinado a un stop loss determinado. El Stop Loss se calcula por atp o fijo en pips - este cálculo funciona correctamente porque si pongo un lote fijo entonces todo está bien abierto y funciona. La fórmula para calcular el volumen del lote es la siguiente.


Después de todos estos cálculos imprimo el valor del lote para comprobarlo.

Lo que está impreso en el cuaderno de bitácora puede verse en ***

A primera vista, la función parece estar bien. Lo único que debes poner en la fórmula no es el precio del stoploss de la orden sino la distancia desde la apertura de la orden hasta el stop en puntos.

Entonces tenemos que normalizar el lote a la precisión, no a _Digits sino a Step - (paso incremental del tamaño del lote). La impresión debería salir a través de DoubleToString() con la misma precisión, entonces verá lo que quiere ver.

 
DanilaMactep:

Buenas tardes a todos. Estoy tratando de conseguir un cálculo del tamaño del lote en la máquina del Grial,

He hecho esto

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

A primera vista, la función parece estar bien. Lo único que debemos añadir a la fórmula es la distancia en puntos desde la apertura de la orden hasta el stop, en lugar del precio de stopploss de la orden.

Además: debemos normalizar el lote a la exactitud, no a _Digitos sino a Paso - (paso incremental del tamaño del lote) y se debe dar salida a Print usando DoubleToString() con la misma exactitud.

Mis matemáticas no son muy buenas, ¿cómo calcular la distancia desde la apertura de la orden hasta el stop y sustituir la sl por ésta?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
Anormalizado el valor del lote así
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

Por lo tanto, queda por ver cómo calcular la distancia desde la posición abierta hasta el stop en el código.

 
DanilaMactep:

Así que queda por ver cómo calcular la distancia desde la apertura hasta el tope en el código?

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

Muchas gracias por el trozo de código, pero la pregunta ahora es de qué tipo declarar las variables en este trozo de código y qué valores asignarles. No soy un mago, sólo estoy aprendiendo.

 
DanilaMactep:

Muchas gracias por el trozo de código, pero la pregunta ahora es de qué tipo declarar las variables en este trozo de código y qué valores asignarles. No soy un mago, sólo estoy aprendiendo

Pric_UP

precio abierto para comprar

Loss_UP

precio de stop loss de compra

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
difundir
 
Порт-моне тв:
Saludos.

Cómo escribir una función como ésta:

La suma del volumen de las velas al alza debe ser 2 veces la suma del volumen a la baja, por ejemplo, para las últimas 10 barras.

Como el de la captura de pantalla.


¿Puede alguien ayudarme?