Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 113

 
hoz:


En realidad, sí. Quizá sea demasiado tarde, pero no lo entiendo. Es esencialmente el beneficio en pps. Es la distancia desde la apertura hasta el cierre. ¿Por qué entonces la expresión es incorrecta?

Como tenemos que dividir por el punto el resultado de esta expresión
 

Me estoy volviendo un poco engreído... :) El problema:

1. Hay una posición abierta de 0,1 lotes

2. Su valor de TakeProfit es de 50 pips.

3. Calculo su beneficio potencial según la fórmula PotentialProfit = Lotes*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. del cálculo obtengo el beneficio potencial de 5,00 dólares (0,1*50*1,0).

La posición entra en rojo y en algún momento se abre una compra más de media, pero con 0,2 lotes

1. Calculo el Breakeven para estas dos posiciones. La función se ha utilizado durante mucho tiempo, según lo requerido, y no tengo ninguna queja hasta ahora:

//+----------------------------------------------------------------------------+
/*
Расчёт уровня БУ для множества по одному инструменту:
сумма лотов = суммарная позиция (СП)
стоимость тика СП = СТ
профит СП = ПСП
Формула расчёта довольно проста:
КП = ПСП / (СТ * СП)
В которой узнаём количество пипс (КП) до уровня БУ относительно текущей цены (ТЦ) символа.
И подставив КП в формулу БУ = ТЦ - КП * Point получаем уровень цены БУ.
В зависимости от направления СП выбирается прибавлять либо отнимать от ТЦ.
*/
double PriceWL(int op, int m1, int m2, double &ll) {
   double Res, pp, pt, tic, NumPP, Prof=0, SumLot=0.00000001;
   int i;
   
   pt =MarketInfo(sy,MODE_POINT);
   tic=MarketInfo(sy,MODE_TICKVALUE);                          // Стоимость тика СТ
   for (i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()==m1 || OrderMagicNumber()==m2) {
            Prof+=(OrderProfit()+OrderSwap()+OrderCommission());  // Суммарный профит позиций ПСП
            SumLot+=OrderLots();                                  // Суммарный лот позиций    СП
            }
         }
      }
   SumLot=MathAbs(NormalizeLot(SumLot));
   NumPP=MathAbs(Prof/(tic*SumLot));                           // Количество пунктов до уровня бу КП
   if (op==0) Res=Ask+NumPP*pt;
   if (op==1) Res=Bid-NumPP*pt;
   ll=SumLot;
   return(Res);
}
//+----------------------------------------------------------------------------+

2. Perfecto. Has calculado el nivel de equilibrio, pero... si pones las fichas de esas dos posiciones en ella, se cerrarán a cero. Bien, creo. Ahora tengo que añadir a este nivel de la BU tantos puntos como necesite para obtener un beneficio total, igual al calculado anteriormente - 5 dólares.

3. Y aquí es donde se me bloquea el cerebro. Lo que hago: tomo 5 dólares, los divido por el lote total de estas dos posiciones (0,1 + 0,2 = 0,3), multiplicado por TICK_VALUE

Tengo 5/(0,3*1,0) = 16,6666 Luego lo multiplico por el punto (0,00016) y lo añado al precio de equilibrio.

4. Perfecto. Las tomas se transfieren allí, pero me parece que el beneficio total de dos Baisers cerrando a este nivel no es igual a 5 dólares - me parece menos. Esto se puede ver en el gráfico de pruebas. Muestra claramente que cuando se cierra una posición, el aumento del saldo es mucho mayor que cuando se cierran varias posiciones al nivel de toma total calculado (puede ver estos lugares en el gráfico por la aparición de la línea de equidad en ellos). El gráfico:


¿En qué me equivoco?

Entiendo que se puede imprimir el beneficio total, pero... Quiero entender dónde puedo estar equivocado en mis cálculos, no el valor de las variables. Ya los he imprimido.

 
semiromid:

Tengo un precio que consta de 5 dígitos. Ejemplo: 1,3221.


Significa 4 dígitos. Es decir, 4 o 5 después del punto decimal. De cinco dígitos, sería, por ejemplo, 132210.
 

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

Señores programadores, por favor, aconsejen cómo combinar un EA con un indicador?

Por ejemplo, tomé un simple bot mo_bidir.mq4 que negocia usando su propio algoritmo y quiero que abra operaciones usando su propio algoritmo pero después de 3 señales de MA

Por ejemplo en laseñal - Tres medias móviles:

FastEMA>MediumEMA>SlowEMA (tendencia hacia arriba) - bot compra

FastEMA<MediumEMA<SlowEMA (tendencia hacia abajo) - bot vende

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod= 48;

Quiero que mi Asesor Experto opere en el marco de tiempo de 5 minutos y que el indicador dé señales desde el marco de tiempo diario o de 4 horas, y quiero poder cambiar los marcos de tiempo en la configuración del bot.

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

Pido disculpas por la repetición, pero al menos dime en qué hilo del foro debo solicitarlo, ¿o debo crear un hilo nuevo?

No sé qué hacer.

 
Este es el lugar para ti : Trabajo
 

Hola a todos. ¿Puede explicar por qué OrderSend no abre una posición?

if (NormalizeDouble(Open[0],Norm)>ma && NormalizeDouble(Bid,Norm)<=ma)

      {

      if (CheckFiltr()>=Filtr) 

         {

         Print (CheckFiltr()+" Buy"); <= Это в журнале есть, значит должна открыться сделка.

         for (i=0;i>5;i++)

            {

            res=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Sl*Point,0,"OpenBuy",Magik,0,Green);

            Print ("Проверка Бай "+i); <= Этого в журнале нет.

            if (res>0) break;

            Print (GetLastError()); <= Этого в журнале нет.

            Sleep (5000);

            }

         }

      }   
 
for (i=0;i<5;i++)
 
artmedia70:

Me estoy volviendo un poco engreído... :) El problema:

1. Hay una posición abierta de 0,1 lotes

2. Su valor de TakeProfit es de 50 pips.

3. Calculo su beneficio potencial según la fórmula PotentialProfit = Lotes*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. del cálculo obtengo el beneficio potencial de 5,00 dólares (0,1*50*1,0).

La posición entra en rojo y en algún momento se abre una compra más de media, pero con 0,2 lotes

1. Calculo el Breakeven para estas dos posiciones. La función se ha utilizado durante mucho tiempo, según lo requerido, y no tengo ninguna queja hasta ahora:

2. Perfecto. Has calculado el nivel de equilibrio, pero... si pones las fichas de esas dos posiciones, se cerrarán a cero. Bien, creo. Ahora tengo que añadir a este nivel de la BU tantos puntos como necesite para obtener un beneficio total, igual al calculado anteriormente - 5 dólares.

3. Y aquí es donde se me bloquea el cerebro. Lo que hago: tomo 5 dólares, los divido por el lote total de estas dos posiciones (0,1 + 0,2 = 0,3), multiplicado por TICK_VALUE

Tengo 5/(0,3*1,0) = 16,6666 Luego lo multiplico por el punto (0,00016) y lo añado al precio de equilibrio.

4. Perfecto. Las tomas se transfieren allí, pero me parece que el beneficio total de dos Baisers cerrando a este nivel no es igual a 5 dólares - me parece menos. Esto se puede ver en el gráfico de pruebas. Muestra claramente que cuando se cierra una posición, el aumento del saldo es mucho mayor que cuando se cierran varias posiciones al nivel de toma total calculado (puede ver estos lugares en el gráfico por la aparición de la línea de equidad en ellos). El gráfico:


¿En qué me equivoco?

Entiendo que se puede imprimir el beneficio total, pero... Quiero entender dónde puedo estar equivocado en mis cálculos, no el valor de las variables. Ya los he imprimido.

incluso si la posición es de Venta ?
Archivos adjuntos:
mr01.mq4  6 kb
 
FAQ:

for (i=0;i<5;i++)

Le ruego que me explique cuál es el error aquí. No puedo entenderlo.

 
pako:
incluso si la posición es de Venta ?

Me refiero a las posiciones de compra. No hay que ser tan meticuloso. Naturalmente, para los puestos de venta me quito.