Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1862

 
Alexey Viktorov #:

Qual é a pergunta?)))

Aparentemente, você e Andrei deveriam parar de andar de trolha...

O ambiente é realmente hostil (como já mencionado acima). Eu vim aqui para discutir questões de MQLQL. Mas eu li algo que não é sobre a MQL. Do que você está falando?

Deixe que algum recém-chegado faça uma pergunta ou algo assim. Ou talvez ele tenha medo de...? Perca-se na briga entre você e Andrei... :)
 

Boa tarde a todos.

Por favor, informe como escrever o código corretamente.
Eu fecho vários pedidos ao mesmo tempo em diferentes direções, diferentes pares de moedas, de acordo com certas condições. Mas às vezes o comando não é executado devido à empresa de corretagem e alguma parte das ordens permanece em aberto. Posso prescrever Sleep para cada pedido. Mas eu quero algo mais curto.

if ( NormalizeDouble((MaxOpenSell(2) + MaxOpenBuy(2) + MinOpenSell(2))*Point,Digits) >= Profit1 && FindLastSell() >= Block 
         && FindLastBuy() >= 1 && MaxOpenSell(2) > 0 && MA1 < MA2)
      {
         LockTicket = 0;
         CalProfHis = 0;
         bool close =  OrderClose((int)MaxOpenSell(5),MaxOpenSell(3), Ask, Slippage, clrPink);
              close =  OrderClose((int)MinOpenSell(5),MinOpenSell(3), Ask, Slippage, clrPink);
              close =  OrderClose((int)MaxOpenBuy(5),MaxOpenBuy(3), Bid, Slippage, clrBlue);

      }
 
makssub Sleep para cada pedido. Eu gostaria de usar algo mais curto.

https://book.mql4.com/ru/trading/orderclose

Закрытие и удаление ордеров - Торговые операции - Учебник по MQL4
Закрытие и удаление ордеров - Торговые операции - Учебник по MQL4
  • book.mql4.com
Закрытие и удаление ордеров - Торговые операции - Учебник по MQL4
 
makssub Sleep para cada pedido. Eu gostaria de ter algo mais curto.

Quando a condição de saída/encerramento for alcançada, devemos adicionar os carrapatos à matriz. Então, se a matriz não estiver vazia, o programa fará um loop através dela, chamando OrderClose para cada bilhete. Em seguida, verifique a existência de cada bilhete, e remova-o da lista. Repita estas ações a intervalos de 1-3 segundos até que a lista esteja vazia.

 

Olá.

Preciso calcular o lucro líquido do Expert Advisor no final do trabalho. Executo um loop em OrdersHistoryTotal() no OnDeinit e adiciono OrderProfit().

Lucro=Profit+OrderProfit();

Mas no final, o lucro é diferente daquele relatado no testador. Descobri que o valor do ponto difere em uma parte dos pedidos.

Qual é a razão para isto? A propagação é definida manualmente no testador.

 
AlexandrVV #:

Olá.

Preciso calcular o lucro líquido do Expert Advisor no final do trabalho. Executo um loop em OrdersHistoryTotal() no OnDeinit e adiciono OrderProfit().

Lucro=Profit+OrderProfit();

Mas no final, o lucro é diferente daquele relatado no testador. Descobri que o valor do ponto difere em uma parte dos pedidos.

Qual é a razão para isto? A propagação é definida manualmente no testador.

Troca e comissão foram esquecidas para serem adicionadas! O spread já é levado em conta, já que é sempre entre os preços de entrada e saída.

 
Mihail Matkovskij #:

A troca e a comissão foram esquecidas para serem adicionadas! O spread já é levado em conta, pois está sempre entre o preço de entrada e o preço de saída.

Ah, é verdade! Muito obrigado!!!! )

 
Olá a todos. Por favor, diga-me onde posso encontrar um roteiro ou indicador que envie uma notificação para meu telefone, quando o preço atingir um determinado nível especificado por mim.
 

Você pode me dizer qual é o problema, o código deve fechar as ordens e se elas estiverem faltando, deve abrir uma nova ordem.

Mas, por alguma razão, fecha apenas 1 pedido e pára até o próximo sinal.

2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Sinal 1.1322 < fechar 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Sinal 1.1322 > fechar 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 08:00:00 e: Sinal 1.1325 < fechar 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04 04:00:00 e: Sinal 1.1325 > fechar 1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 2022.01.04 00:00:00 e: Sinal 1.1326 < fechar 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Sinal 1.1326 > fechar 1.1296 ExistPosBuy 1
2022
.01.17 16:22:08.298 2022.01.03 20:00:00 e: Sinal 1.1328 < fechar 1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: fechar #1 comprar 0,01 EURUSD a 1.13598 ao preço 1.12831

2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Sinal 1.1328 > fechar 1.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: abrir #4 comprar 0,01 EURUSD em 1.13512 ok
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Sinal 1.134 < fechar 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Sinal 1.134 > fechar 1.135 ExistPosBuy 1

if(isNewBar()==true) {  
if(Signal > clos ) {  //--------------------- МА выше цены закрытия предыдущего бара.
     if(ExistPositions( NULL, OP_BUY, Magic) == true) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //--------  закрытие одной позиции с максимальным профитом в валюте депозита.
         if(ExistPositions( NULL, OP_BUY, Magic) == False) //----------- если позиции BUY отсутствуют то
   ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию SELL

if(Signal < clos ) { //--------------------- МА ниже цены закрытия предыдущего бара.
    if(ExistPositions( NULL, OP_SELL, Magic) == true) //---------------- Если есть позиция SELL то
 ClosePosWithMaxProfitInCurrency(); //---------------------закрытие одной позиции с максимальным профитом в валюте депозита.
        if(ExistPositions( NULL, OP_SELL, Magic) == False)  //----------- если позиции SELL отсутствуют то
  ticket=OpenPosition(NULL,OP_BUY, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию BUY

} return; 
 
Бахром Балтабаев uma notificação para meu telefone quando o preço atingir um determinado nível, eu especifico.

Recentemente escrevi um alerta:. Mas pode ser melhorado adicionando a SendNotification:

// использовать алерт
input bool alert = true;
// использовать push-уведомления
input bool notification = true;
// уровень срабатывания
input double trigLv = 0.0;
// отклонение от trigLv в пунктах
input int deviation = 30; 


// функция взята из https://www.mql5.com/ru/docs/basis/types/double
bool EqualDoubles(double d1,double d2,double epsilon)
  {
   if(epsilon<0) 
      epsilon=-epsilon;
//---
   if(d1-d2>epsilon) 
      return false;
   if(d1-d2<-epsilon) 
      return false;
//---
   return true;
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
  return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[]
) {
  static bool triggered = false;
  static datetime time_ = 0;
  if (!alert && !notification)
    return rates_total;
  if (EqualDoubles(trigLv, close[rates_total - 1], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { // сравнение цены Close с trigLv
    if (time_ != time[rates_total - 1])
      time_ = time[rates_total - 1];
    else
      return rates_total;
    if (!triggered) {
      if (alert)
        Alert("Level ", NormalizeDouble(trigLv, (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " triggered!");
      if (notification)
        SendNotification("Level " + (string)NormalizeDouble(trigLv, (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " triggered!");
    }
    triggered = true;
  }
  else
    triggered = false;
  
  return rates_total;
}

Adicione as linhas, que destaquei ao código fonte, solte-o na pasta Indicadores e compile-o. Este indicador pode ser adicionado ao gráfico quantas vezes desejar e receber sinais quando diferentes níveis forem cruzados. O código foi finalizado on-line. O resultado não é verificado.

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...