Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 908

 
Obrigado, malta.
 
A.Vakutin:

Por favor partilhe, quem sabe e sabe como proibir uma EA de vender depois de uma paragem ser activada?

// Оставанивливает работу всех советников, если сработал SL.

#include <MT4Orders.mqh>      // https://www.mql5.com/ru/code/16006
#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

void OnTrade()
{
  static int PrevTotal = OrdersHistoryTotal();
  const int Total = OrdersHistoryTotal();
  
  for (int i = Total - 1; i >= PrevTotal; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == DEAL_REASON_SL))
    {
      long Chart = ChartFirst();
  
      while (Chart != -1)
      {
        if ((Chart != ChartID()) && EXPERT::Is(Chart))
          EXPERT::Remove(Chart);
  
        Chart = ChartNext(Chart);
      }

      break;
    }        
    
  PrevTotal = Total;
}
 

Boa noite, utilizadores do fórum!

Surgiu um dilema.

Fiz uma transacção e guardei-a numa variável

datetime now=TimeCurrent();

Algum tempo depois, ocorreu um evento e eu guardo o tempo numa variável

datetime now2=TimeCurrent();

Como posso verificar se passaram 15 minutos entre estes eventos?

Pensei que tinha duas variáveis agora e agora2 definidas em segundos, tentei tirar a diferença e deveria ser mais de 700 segundos

 if(now2-now>700)

MAS não está a funcionar((

Estou a pedir a ajuda da comunidade!

 
ISL:

Boa noite, utilizadores do fórum!

Surgiu um dilema.

Fiz uma transacção e guardei-a numa variável

Algum tempo depois, ocorreu um evento e eu guardo o tempo numa variável

Como posso verificar se passaram 15 minutos entre estes eventos?

Pensei que tinha duas variáveis agora e agora2 definidas em segundos, tentei tirar a diferença e deveria ser mais de 700 segundos

MAS não está a funcionar((

Por favor, ajuda da comunidade!

A variável data/hora é representada como data e hora. Pode resolver o problema de forma diferente, por exemplo para representar 700 (embora 15 minutos sejam 900 segundos) em tipo de data/hora

if(now2-now>(datetime)700)

ou vice versa representam variáveis como tipo int

if(int(now2-now)>700)

ou como este

if((int)now2-(int)now>700)
Seja como for, temos de verificar...
 
Alexey Viktorov:

A variável data/hora é representada como data e hora. Pode resolver o problema de diferentes maneiras, por exemplo, representando 700 (embora 15 minutos sejam 900 segundos) como data/hora


A noite está a chegar))))

 
ISL:

A noite está a fazer-se sentir))))

Sim... Demorei uma hora e meia a ligar a função a partir do inluder.

 
Vladimir Karputov:

Ligar a classe comercial padrão CTrade
(vem de série com o terminal)

e chamar dois métodos:

SetTypeFillingBySymbol

Define o tipo de ordem de acordo com o símbolo especificado

SetMarginMode

Define o modo de cálculo da margem de acordo com as definições da conta corrente

Vladimir, boa noite, poderia por favor aconselhar-me a fazer uma função que calcule a percentagem de lucro que eu quero calcular o volume negociado mas não consigo acertar, penso que preciso de identificar a encomenda com a direcção para fora e usá-la para calcular o volume

double ALL_PROFIT(int rezult)
  {
   HistorySelect(0,TimeCurrent());
   double   rez=0.0;
   double   alprof=0.0;
   uint     total=HistoryDealsTotal();
   for(uint i=0;i<=total;i++) 
     {
      if(m_ticket.SelectByIndex(i))
        {
         if(m_ticket.Magic()==Mg)
           {
            alprof+=(m_ticket.Profit()+m_ticket.Swap()+m_ticket.Commission());
            rez=alprof;
            if(rezult==1 && alprof!=0.00){rez=alprof/(AccountInfoDouble(ACCOUNT_BALANCE)-alprof)*100;}
            if(rezult==2){rez+=m_ticket.Volume();}      
           }
        }
     }
   return(NormalizeDouble(rez,2)); 
  }
a propósito, o número de posições fechadas é também um problema para descobrir quantas delas foram negociadas
 
TYRBO:

Vladimir, boa noite, aconselha-me por favor fazer uma função que calcula a percentagem de lucro, quero calcular o volume comercializado e não funciona correctamente, penso que preciso de identificar a encomenda com a direcção para fora e com eles para calcular o volume.

Não compreendo nada, todas as cartas estão amontoadas. Passe o seu código através do modelador de códigos.

 
TYRBO:

Vladimir, boa noite, poderia sugerir uma função que calcula a percentagem de lucro, quero calcular o volume comercializado e não funciona correctamente, penso que preciso de identificar a encomenda com a direcção para fora e com eles para calcular o volume.


a propósito, é também um problema com o número de posições fechadas

Por favor, envie o código correctamente. Já o corrigi uma vez e coloquei o código correctamente.

 
TYRBO:

Vladimir, boa noite, poderia sugerir uma função que calcula a percentagem de lucro, quero calcular o volume comercializado e não funciona correctamente, penso que preciso de identificar a encomenda com a direcção para fora e com eles para calcular o volume.

a propósito, o número de posições fechadas é também um problema

Enviei o vosso código correctamente pela terceira vez. Pergunto-me quantas mais tentativas teremos de tentar. :)

Razão: