[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 581

 
Vovo4ka:

Por qué se toma el beneficio, no el que debería ser..... cuando se cierra el lote, pero cuando el beneficio debería ser de 30pp en beneficio se escribe de una manera completamente diferente....


Qué es esta tontería: "calcular esencialmente la diferencia entre la apertura de una orden y su cierre) y resumir?????? ...

¿Y en qué volúmenes? ¿No necesitas saberlo? El precio de un punto será diferente...

El beneficio no se calcula en puntos, sino en divisas, en función del volumen de las posiciones negociadas.

 
Vovo4ka:

Por alguna razón se toma el beneficio, no el que debería ser..... cuando se cierra el lote, a la inversa cuando el beneficio debería ser de 30pp en beneficio se escribe completamente diferente....


El beneficio de la orden no es en puntos, sino en la moneda del depósito.

 

Correcto - aquí la pérdida total (pérdida) se calcula a partir del historial de órdenes LOCALES cerradas con pérdida.

Esto es un poco diferente para ti, pero el principio es el mismo.

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям
  datetime 
  Time_at_History_Current = 0,
  Time_at_History_Previos = 0;      
  if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;              
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0) 
                  break;
               }
            }
         }
      }
   }
 
PapaYozh:


El beneficio de la orden no es en pips, sino en la moneda del depósito.


lo necesito en pips, el lote está fijado en 1.... pero la ganancia o pérdida no corresponde a la real..... y quiero calcular el número de pips en ganancia y drawdown más fácilmente y sumarlo y obtener el resultado=)
 
Roman.:

Correcto - aquí la pérdida total (pérdida) se calcula a partir del historial de órdenes LOCALES cerradas con pérdida.

Esto es un poco diferente para ti, pero el principio es el mismo.


Gracias, ahora me ocuparé de ello=)
 
Vovo4ka:

Lo necesito en pips, el lote está fijado en 1.... pero la ganancia o pérdida no corresponde a la real..... y quiero calcular el número de pips en ganancia y drawdown más fácilmente y sumarlo y obtener el resultado=)


Una vez más:

El beneficio de la orden no es en pips, sino en la moneda del depósito.

 
Vovo4ka:

Lo necesito en puntos, el lote es constante 1.... pero por alguna razón la ganancia o pérdida no corresponde a la real.....a mi me interesa calcular el número de puntos de ganancia y drawdown más fácil de sumar y obtener el resultado =)

Si el lote es constante, divide el beneficio del probador por el punto. Obtendrá el beneficio en pips.
 

La última función publicada por Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), sólo cuenta las órdenes abiertas:

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
He intentado ampliarlo un poco para incluir las órdenes pendientes (simplemente añadiendo otros tipos):
if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP) {
                     pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
                     }
if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) {
                     pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
                  }
pero los pedidos pendientes no se tienen en cuenta. ¿Se cuentan de forma diferente? La documentación no dice nada al respecto....
 
artmedia70:
Visualice todas las banderas en el gráfico con Comment` y verá por qué se abre la operación.

ponerlo, ahora las operaciones no se abren en absoluto.
Archivos adjuntos:
1_1.mq4  21 kb
 
Ivn:

Lo he puesto y ahora no hace ningún sdek.

¿Por qué harías eso? Mostrar todas las banderas en un Comentario a la vez.

Aquí:

int start()
  {
//----


 RefreshRates();                        // Обновление данных
 Symb=Symbol();
 int cnt, ticket, total;
 int ABuy=0;                               // флаг на покупку /продажу   
 int ASell=0;   
 
   Comment(".....Вот сюда и пишите вывод всех флагов......");

 if (NewBar() == true)
{        
     x=x0; //передаем данные 
    x1=x01;
    x2=x02;
Razón de la queja: