[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 898

 
Dimka-novitsek:
A mesma situação.
Mostrar o código
 
arvis:
Como posso definir o indicador para contar o lucro em pips a partir de um certo tempo em MT4?

Se você quiser que seja baseado no tempo, é assim que será quando o preço fechar, e se você quiser que conte pontos a partir das 21:00, então você tem que jogar com o tempo e não há nada de complicado nisso.

 double Profit; // или double Profit = 0;

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2);
CurrCl = iClose(Symbol(), 0, 1);

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}
 

Por favor, informe como fazer o seguinte código correto:

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

Para que eu possa fazer assim:

if (LastOpenOrder - Bid >= 25 * Point) CloseOrder;

Isto é, para fechar somente esta última ordem aberta, não toque nos outros!

Obrigado de antemão.

 

Como escrever corretamente no meu EA e obter o resultado do indicador?

duplo ROC = iCustom(NULL,0, "ROC",12,0,0); - sem saída de dados.

duplo ROC = iCustom(NULL,0, "ROC",12,0,0,0); - os dados não são impressos.

duplo ROC = iCustom(NULL,0, "ROC",12,0,0,0,0,0); - os dados não são impressos.

Indicador: https://www.mql5.com/ru/code/9340

 
DhP:

Como escrever corretamente no meu EA e obter o resultado do indicador?

duplo ROC = iCustom(NULL,0, "ROC",12,0,0); - sem saída de dados.

duplo ROC = iCustom(NULL,0, "ROC",12,0,0,0); - os dados não são impressos.

duplo ROC = iCustom(NULL,0, "ROC",12,0,0,0,0,0); - os dados não são impressos.

Indicador: https://www.mql5.com/ru/code/9340

A maneira correta seria assim:

double ROC = iCustom(NULL,0,"ROC",0,0);

mas não consigo entender o que você vai fazer com isso. bem, talvez eu não precise entender )

 
belck:

Se você quiser usar o tempo, é assim que será quando o preço fechar, e se você quiser usar 21:00, então você tem que brincar com o tempo e não há nada de complicado nisso.


Obrigado pela ajuda, Belck.

Diga-me, como você pode calcular a mesma quantia de lucro em pips, se você negocia em vários pares? Além disso, é preciso levar em conta os negócios fechados.

 
arvis:


Obrigado por sua ajuda, Belck.

Como posso calcular o mesmo lucro em pips se eu negoceio com vários pares? Além disso, tenho que levar em conta também os negócios fechados.

É difícil para mim responder a esta pergunta.

Mas posso dizer uma coisa: tudo isso deve ser chamado.

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2); // то тут указываете какая валютная пара и по желанию период : PrevCl = iClose("EURUSD", PERIOD_H1, 2);
CurrCl = iClose(Symbol(), 0, 1); // тут так же

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}

o preço do último pedido aberto é chamado assim:

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 
Tudo é mais ou menos claro. Muito obrigado por seu tempo, Belck.
 
arvis:


Obrigado pela ajuda, Belck.

Como posso calcular o mesmo lucro em pips se eu negoceio com vários pares? Já comecei a fazer desta maneira, mas não tenho certeza de como fazê-lo.

Comecei a fazer desta maneira, mas agora entendo que fiquei confuso:

double LastOpenPriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

и

double LastClosePriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderClosePrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 

Este é o critério que me deixa perplexo:

- Se houvesse mais de um pedido fechado, seu número total de pips lucrativos deveria ser contado, mas são os pips que devem ser contados.

Por favor, informe como proceder corretamente neste código:

LastBuyPrice = FindLastBuyPrice();     

if (Ask - LastBuyPrice >= 25 * Point) {
      for (int l_pos_16 = OrdersTotal()  - 1; l_pos_16 >= 0; l_pos_16--) {
 OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         }
       }
     }


double FindLastBuyPrice() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
Razão: