Erros, bugs, perguntas - página 2411

 
Aleksey Sergan:



Por favor, execute este código:Multimoeda iMA Trend 2.

Especificar "EURUSD,GBPUSD" nas definições ( parâmetro Símbolos).

Sobre a minha configuração

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

todos os SLs fecharam aos seus preços simbólicos. Ou seja, não há erro de sobreposição de preços.

 
Vladimir Karputov:

Por favor, execute este código:Multimoeda iMA Trend 2.

Especificar "EURUSD,GBPUSD" nas definições ( parâmetro Símbolos).

Sobre a minha configuração

todos os SLs fecharam aos seus preços simbólicos. Ou seja, não há erro de sobreposição de preços.

Obrigado, o erro foi localizado. Posto abaixo.

 
Andrey Barinov:

há dois erros.

№1. O seu erro. Algures no código. Está a definir SL para a posição EURUSD usando o preço GBPUSD. O terminal não deve ter nada contra ele.

№2. Bug no terminal. Se este SL for accionado a um preço que não existe na altura no fluxo EURUSD, utilizando o preço GBPUSD.

Andrey Barinov:

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Aparentemente, ao enviar um pedido de modificação, o campo de posição tem prioridade sobre o símbolo. Imprimirreq.position

Sim, acabou por ter razão, o meu erro é lógico:

na estrutura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

número de posição real para GBPUSD #4

quando OrderSend é executado, o testador estabelece uma paragem para o símbolo correspondente à posição #3, que é eurusd.

Insectos-teste:

- não verifica se m_request.position e m_request.symbol correspondem;

- estabelece uma paragem em 1,60704 para a posição de compra, o símbolo eurusd, que tem um preço actual de 1,30935;

- no tick seguinte estabelece uma paragem em 1,60704, embora o preço real seja 1,30935.

Obrigado a todos vós. Espero que os criadores da plataforma vejam o post.

 
Aleksey Sergan:

Sim, acabou por ter razão, o meu erro é lógico:

Na estrutura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

número de posição real para GBPUSD #4

quando OrderSend é executado, o testador estabelece uma paragem para o símbolo correspondente à posição #3, que é eurusd.

Insectos-teste:

- não verifica se m_request.position e m_request.symbol correspondem;

- estabelece uma paragem em 1,60704 para a posição de compra, o símbolo eurusd, que tem um preço actual de 1,30935;

- no tick seguinte estabelece uma paragem em 1,60704, embora o preço real seja 1,30935.

Obrigado a todos vós. Espero que os criadores da plataforma vejam o post.

A execução de uma paragem para uma posição de compra a 1,60704 ao preço actual 1,30935 não é um erro. Mas fixar uma paragem de compra ao nível de 1,60704 ao preço actual de 1,30935 é um erro.

 

Construir 2007

Função:

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

é suposto produzir o resultado financeiro da transacção na variável de lucro, mas acaba sempre por ser 0,0, e o valor na variável do lote está sempre correcto.

Há algum erro? - Ou estou a fazer algo de errado?

 
Andrey Dik:

Construir 2007

Função:

é suposto produzir o resultado financeiro da transacção na variável de lucro, mas acaba sempre por ser 0,0, e o valor na variável do lote está sempre correcto.

Há algum erro? - Ou estou a fazer algo de errado?

DEAL_ENTRY_OUT ou INOUT devem ser verificados. Os comércios _IN têm um lucro de 0

 
Andrey Barinov:

DEAL_ENTRY_OUT ou INOUT devem ser vigiados. Os comércios _IN têm um lucro de 0

Bem, o primeiro do final da lista é tirado, deve ser OUT

 
Andrey Dik:

Bem, é o primeiro do fim da lista, deve ser OUT

Se passar TimeCurrent() no endDate, substitua-o por TimeCurrent()+60 ou algo do género. Isso deve ajudar.

 
Andrey Barinov:

Se passar TimeCurrent() em endDate, substitua-o por TimeCurrent()+60 ou algo do género. Isto deve ajudar.

Não, ainda é 0,0.

 
Andrey Dik:

Não, ainda é 0,0.

Depois depurar. Imprimir bilhetes de transacção e ver no testador o que é realmente seleccionado ali. Adicionar um filtro por tipo de comércio.