Especialistas: Cidomo - página 2

 

A seguir, o código:

//--- verificar os níveis de Freeze e Stops
/*
 Tipo de pedido/posição | Preço de ativação | Verificar
 ------------------------|--------------------|--------------------------------------------
 Comprar pedido com limite| Ask| Ask-OpenPrice >= SYMBOL_TRADE_FREEZE_LEVEL
 Ordem Buy Stop| Ask| OpenPrice-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 Ordem de limite de venda | Bid| OpenPrice-Bid >= SYMBOL_TRADE_FREEZE_LEVEL
 Ordem de parada de venda| Lance | OpenPrice-BidBid-OpenPrice >= SYMBOL_TRADE_FREEZE_LEVEL
 Posição de compra| Bid| TakeProfit-Bid >= SYMBOL_TRADE_FREEZE_LEVEL 
 || Bid-StopLoss >= SYMBOL_TRADE_FREEZE_LEVEL
 Posição de venda| Ask| Ask-TakeProfit >= SYMBOL_TRADE_FREEZE_LEVEL
 | |StopLoss-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 
 A compra é feita pelo preço Ask| A venda é feita pelo preço de compra
 ------------------------------------------------|----------------------------------
 TakeProfit >= Bid| TakeProfit<= Ask
 StopLoss<= Bid| StopLoss>= Ask
 TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL |Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
 Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL | StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL
*/
   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }
//--- FreezeLevel -> para ordem pendente e modificação
   double freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   freeze_level*=1.1;

Os cálculos não estão claros aqui:

freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;

freeze_level*=1,1;

Com que finalidade? E por que multiplicar *3,0 e *=1,1.

 
Sysmart:

O código é o seguinte:

Os cálculos aqui não estão claros:

freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;

freeze_level*=1,1;

Para que finalidade? E por que multiplicar *3,0 e *=1,1.

A principal tarefa é eliminar scalpers e pipsetters.

 

A função OnTradeTransaction é muito misteriosa para mim. Se possível, explique com o máximo de detalhes possível o que está acontecendo aqui:

void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obter o tipo de transação como um valor de enumeração 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transação for o resultado da adição da transação no histórico
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               m_need_delete_buy_stop  = true;
               m_need_delete_sell_stop = true;
              }
     }
  }
 

Na expressão:

      double tp=(InpTakeProfit==0)?0.0:price+ExtTakeProfit;
      if(tp!=0.0 && ExtTakeProfit<level) // verificar preço
         tp=price+ExtTakeProfit;

Acho que há um erro, deveria ser: tp=price+level;

 

Olá, meu amigo, obrigado pelo EA, experimentei-o na demonstração e ele funciona bem, abre e faz ordens de compra.


Mas quando tento usá-lo em uma conta real, ele é rejeitado. Alguma ideia para me ajudar, por favor, quero experimentá-lo em uma conta real.


Com meus agradecimentos

 
Mazyad AlAdwani :

Olá, meu amigo, obrigado pelo EA, eu o testei na demonstração e ele funciona bem, abro e faço ordens de compra.


Mas quando tento usá-lo em uma conta real, ele é rejeitado. Alguma ideia para me ajudar, por favor, quero experimentá-lo em uma conta real.


Com meus agradecimentos

Infelizmente, não posso ler mentes à distância. Além disso, um telepata em tempo integral está de férias. Portanto: forneça esses dados (e é uma boa prática fornecer dados técnicos em um recurso técnico)

  • moeda e saldo da conta de negociação
  • configurações do consultor
  • arquivo de registro (na guia Experts e na guia Journal)
 
Vladimir Karputov:

Infelizmente, não consigo ler mentes à distância. Além disso, um telepata em tempo integral está de férias. Portanto: forneça esses dados (e é uma boa prática fornecer dados técnicos em um recurso técnico)

  • moeda e saldo da conta de negociação
  • configurações do consultor
  • arquivo de registro (na guia Experts e na guia Journal)
  • moeda e saldo da conta de negociação
  • GPBUSD - 80 $


  • configurações do consultor


  • arquivo de registro (da guia Experts (Especialistas) e da guia Journal (Diário))

Agradeço antecipadamente e peço desculpas por não ter colocado tudo isso desde o início, pois sou novo no assunto, mas estou aprendendo.



 

Olá novamente, esperei que você resolvesse meu problema com o EA. Quero usá-lo em uma conta real. Alguma novidade?

 
Mazyad AlAdwani :

Olá novamente, esperei que você resolvesse meu problema com o EA. Quero usá-lo em uma conta real. Alguma novidade?

Aprenda a ler primeiro. Este é um fórum técnico e, se for solicitado que você execute algumas ações, você deverá executá-las.


Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Especialistas: Cidomo

Vladimir Karputov, 2020.06.03 05:08

Infelizmente, não consigo ler mentes à distância. Além disso, um telepata em tempo integral está de férias. Portanto: forneça esses dados (e é uma boa prática fornecer dados técnicos em um recurso técnico)

  • moeda e saldo da conta de negociação
  • configurações do consultor
  • arquivo de registro (na guia Experts e na guia Journal)

 
Vladimir Karputov:

Aprenda a ler primeiro. Este é um fórum técnico e, se for solicitado que você execute algumas ações, você deverá executá-las.



Desculpe-me. Enviei a imagem na primeira resposta, mas não percebi que ela foi excluída!


De qualquer forma, fiz um vídeo para que você possa vê-lo.