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

 
Aleksei Stepanenko:
Lo siento, me metí en la conversación aquí, no me di cuenta...

Un tema común, y sus códigos son siempre interesantes...

tomó mucho para mí)

 
Iurii Tokman:
MakarFX:

.

 
Iurii Tokman:

La tarea técnica se entiende mejor en ucraniano

Todavía no estoy a ese nivel, mi lengua materna es el ruso :)

...pero lo entiendo a nivel casual
 
Aleksei Stepanenko:

Todavía no tengo ese nivel, mi primer idioma es el ruso :)

Soy de la URSS... tengo dos lenguas maternas)
 
MakarFX:
Soy de la URSS... tengo dos lenguas maternas)
.
 
MakarFX:
Soy de la URSS... tengo dos lenguas maternas)

y tenemos tres, todavía surzhik.

 
DanilaMactep:

No soy muy bueno en matemáticas, ¿cómo puedo calcular la distancia desde la apertura de la orden hasta el stop en el código, para poder reemplazar sl por éste?

Anormalizado el valor del lote así

Entonces, queda por entender cómo calcular la distancia desde la posición abierta hasta el stop en el código?

El valor absoluto de la diferencia entre el precio de apertura y el de parada debe dividirse por el paso de precio.

  int sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;

Y este valor sl entra en la fórmula.

Teniendo en cuenta que se pone un stop calculado por el indicador ATR, basta con

double lot =MathFloor((Free*MaxRisk/100)/(sl/_Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
Y este será ya el tamaño de lote normalizado.
 
MakarFX:

comprarprecio de apertura

comprar stop loss

difundir

Ahora lo entiendo, sólo tengo que entender qué valor debo asignar a los precios de compra y venta.

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Ask+sl,Ask-tp ,"ДИВЕРГЕНЦИЯ НА СЕЛ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР

En otras palabras, ¿asigno Ask al precio abierto de compra, f al precio abierto de venta asigno Bid?

 
DanilaMactep:

En el código, abro una orden de la siguiente manera.

¿Quieres decir que asigno la variable Ask al precio abierto de compra y Bid al precio abierto de venta?

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

A juzgar por esta función, usted ya conoce el stop loss... No entiendo cuál es el problema

 
Alexey Viktorov:

Divida el valor absoluto de la diferencia entre el precio de apertura y el precio de parada por el paso de precio.

y este valor sl entrará en la fórmula.

Teniendo en cuenta que se pone un stop calculado por el indicador ATR, basta con

Y ese sería el tamaño de lote normalizado.

Lo he hecho por código como me has aconsejado. En el principio del código tengo la condición para elegir el tipo de parada - atp o fija.

if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     //Print("СТОП ПО АТР, ЕГО РАЗМЕР ");
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     Print("СТОП ЛОС ФИКСИРОВАННЫЙ В ПУНКТАХ");
     sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
     }

Entonces comenté mi normalización y la asigné de esta manera

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ

El cálculo del beneficio es el siguiente en el código. No hay problemas ahí y después de calcular el beneficio he añadido la fórmula de miedo que me han aconsejado.

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА КОТОРУЮ МНЕ СОВЕТОВАЛИ

Todo fue compilado sin errores. Pero cuando ejecuté la prueba el error aparece en el registro, es una división por cero por lo que entiendo y la prueba se detiene. ¿En qué me he equivocado o qué no he hecho bien?

ERROR AL INICIO DE LA PRUEBA

Razón de la queja: