[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 581

 
Vovo4ka:

Por que o lucro é tirado, não aquele que deveria ser..... quando o lote é fechado, mas quando o lucro deveria ser 30pp em lucro, diz algo completamente diferente....


O que é este absurdo: "essencialmente calcular a diferença entre abrir um pedido e fechá-lo) e resumir?????? ...

E em que volumes? Você não precisa saber? O preço de um ponto será diferente...

Os lucros não são contados em pips, mas em moeda, dependendo do volume das posições negociadas.

 
Vovo4ka:

Por alguma razão o lucro é tomado, não aquele que deveria ser..... quando o lote é fechado, inversamente quando o lucro deveria ser 30pp em lucro ele é escrito completamente diferente....


O lucro do pedido não está em pontos, mas na moeda do depósito.

 

Correto - aqui a perda total (perda) é calculada a partir do histórico de pedidos LOCAL fechados com perda.

Isto é um pouco diferente para você, mas o princípio é o mesmo.

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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:


O lucro do pedido não está em pips, mas na moeda do depósito.


preciso dele em pips, o lote é fixado em 1.... mas o lucro ou perda não corresponde ao real..... e quero calcular o número de pips em lucro e drawdown mais fácil e somá-lo e obter o resultado=)
 
Roman.:

Correto - aqui a perda total (perda) é calculada a partir do histórico de pedidos LOCAL fechados com perda.

Isto é um pouco diferente para você, mas o princípio é o mesmo.


Obrigado, vou lidar com isso agora=)
 
Vovo4ka:

Eu preciso dele em pips, o lote é fixado em 1.... mas o lucro ou perda não corresponde ao real..... e eu quero calcular o número de pips em lucro e drawdown mais fácil e somá-lo e obter o resultado=)


Mais uma vez:

O lucro do pedido não está em pips, mas na moeda do depósito.

 
Vovo4ka:

Eu preciso disso em pontos, o lote é constante 1.... mas por alguma razão o lucro ou perda não corresponde ao real..... para mim quero calcular o número de pontos de lucro e drawdown mais fácil de somar e obter o resultado =)

Bem, se o lote for constante, divida o lucro do testador pelo ponto. Você terá o lucro em pips.
 

A última função publicada pela Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), conta apenas os pedidos em aberto:

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
Tentei estendê-lo um pouco para incluir pedidos pendentes (simplesmente adicionando outros 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;
                  }
mas as ordens pendentes não são consideradas. Eles são contados de maneira diferente? A documentação não diz nada sobre esta....
 
artmedia70:
Mostre todas as bandeiras na tabela com Comentário` e você verá porque o comércio se abre.

colocá-lo dentro, agora os negócios não se abrem de forma alguma.
Arquivos anexados:
1_1.mq4  21 kb
 
Ivn:

Eu o coloquei, agora ele não faz nenhuma careta.

Por que você faria isso? Exibir todas as bandeiras em um único Comentário de uma só vez.

Aqui:

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;