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

 
MakarFX:

Versuchen Sie es (ich habe es nicht getestet)

Obrigado, vou verificar mais tarde.

 
Eugen8519:



Por favor, ajude-me a posicionar a função corretamente

...

Mas como e onde inserir

Para enviar uma mensagem quando um stop loss outake profit é atingido?


MakarFX:

Estamos falando da mesma coisa?

Encontrei um exemplo que acompanha a saída do SL com aOnTradeTransaction:https://www.mql5.com/ru/code/21147.

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

O mesmo EA em dois instrumentos diferentes

Olá! Você poderia, por favor, me ajudar?

Tenho um EA que funciona no gráfico no qual foi arrastado (o valor Symbol() é tomado como o nome do símbolo).

Mas esta EA também tem uma variável ticket_exist que contém um ticket da ordem definida e a EA entende que se o ticket_exist não for igual a zero,a ordem é definida aqui.

Pergunta: Se eu abrir tal EA em dois instrumentos diferentes e a variável ticket_exist não for igual a zero em um instrumento, a variável com o mesmo nome permanecerá igual a zero no outro instrumento?

SU.

 
Mihail Nefedov:

O mesmo EA em dois instrumentos diferentes

Olá! Você poderia, por favor, me ajudar?

Tenho um EA que funciona no gráfico no qual foi arrastado (o valor Symbol() é tomado como o nome do símbolo).

Mas esta EA também tem uma variável ticket_exist que contém um ticket da ordem definida e a EA entende que se o ticket_exist não for igual a zero,a ordem é definida aqui.

Pergunta: Se eu abrir tal EA em dois instrumentos diferentes e a variável ticket_exist não for igual a zero em um instrumento, a variável com o mesmo nome permanecerá igual a zero no outro instrumento?

SU.

O valor da variável em uma EA não está disponível para outra EA. O principal é que ou os símbolos, ou magiks, ou ambos são diferentes.

 

Você pode me dizer que horas são em carrapatos? Tempo do servidor ou UTC ?

Eu me lembro de ler em algum lugar, mas não me lembro onde...

 
Alexey Viktorov:

O valor de uma variável em uma EA não está disponível para outra EA. O principal é que ou os símbolos, ou mágicos, ou ambos, devem ser diferentes.

Obrigado! Se entendi corretamente, então para obter um conflito de EAs (dois absolutamente idênticos) trabalhando com símbolos diferentes, suas variáveis devem ser definidas como globais (para todo o terminal) ou, por exemplo, uma ordem deve ser acessada por seu número seqüencial ou simplesmente pelo fato de sua existência?

 
MakarFX:

Tente isto (ainda não testei)

Não funciona, dá erros de compilação.


Tentei desta forma e a compila sem problemas, mas não posso testá-la com o ringue fechado.

Voltarei ao trabalho amanhã.

  void OnTradeTransaction(const MqlTradeTransaction &trans,
                          const MqlTradeRequest &request,
                          const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
Arquivos anexados:
x4.PNG  11 kb
 
Eugen8519:

não funciona, dá erros de compilação


Eu tentei desta maneira, ele se compila sem problemas, mas quando o ringue está fechado eu não posso testá-lo.

Terminarei isso amanhã.

você não inseriu o código corretamente!

Eu consertei um pouco e está funcionando.

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

Você não inseriu o código corretamente!

Eu corrigi um pouco, funciona (eu verifiquei).

Aqui, precisamos rastrear o fato de que o negócio foi fechado exatamente por SL ou TP. E usandoa OnTradeTransaction, obtemos dados prontos logo após o fechamento do negócio.

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

Se houver mais de um comércio fechado na TimeCurrent, que resultado deve ser devolvido? E a presença de um lucro não significa que o comércio foi fechado pelo SL ou TP. Isto precisa ser rastreado, como eu disse antes. Portanto, usando aOnTradeTransaction, é a solução mais fácil!

 
Mihail Matkovskij:

Aqui, também precisamos rastrear que o comércio foi fechado exatamente no SL ou TP.

Entendi isso como uma notificação de fechamento de negócio, talvez tenha me enganado...

Mihail Matkovskij:

Se mais de um comércio for fechado na TimeCurrent, que resultado devo obter de volta?

não sei, preciso verificar