Características da linguagem mql5, subtilezas e técnicas - página 19

 
Artyom Trishkin:

Como posso determinar a hora de abertura da última posição e a hora de fechamento da última posição?

Em geral, gostaria de conhecer os princípios gerais e algoritmos de obtenção de informações sobre posições abertas/fechadas em mql5.

O que deve ser considerado, que peculiaridades existem neste momento?

A questão é que estou usando a sintaxe MQL4, que é 1000 vezes mais fácil e compreensível do que a sintaxe MQL5 para trabalhar com a parte de negociação.

Você sabe muito bem como é fácil e clara a sua tarefa pode ser resolvida em três linhas na MQL4. É por isso que é exactamente assim que eu faço.

Para respostas a todas as perguntas relativas à MQL5, estou a pesquisar o código fonte da biblioteca. Todas as nuances que eu conheço foram consideradas lá.

Neste momento podemos afirmar que as posições de Hedge e Netting são muito diferentes. Por exemplo, em Netting você pode sempre ter apenas uma posição por meses, enquanto você está constantemente negociando. Portanto, a posição de Netting no entendimento MT5 normal é algo mal concebido e, consequentemente, inconveniente. Assim, para esta Rede, podemos criar a nossa própria essência de posição. No MT4 você também pode ter posições de Netting, mas com uma interação muito mais clara.

Abra uma posição para 1 lote. Depois feche a 0,99, e deposite a mesma quantia. E assim por diante, várias vezes.

Hedge é conveniente não porque você pode ter posições multidirecionais, mas porque você pode ter várias posições em um símbolo de UMA direção. É exactamente assim que eu vejo o trabalho confortável com posições em sistemas de Netting. Não como no MT5.

Idealmente, quando se trabalha com contas Netting, deve-se ter sempre uma tabela que corresponda totalmente às contas MT4. Porque só estas tabelas lhe dão uma compreensão instantânea do que aconteceu e como aconteceu na conta de negociação. Não as estatísticas do MT5.

Quanto ao MT5-Hedge, tudo é simples. Por pouco, no entanto, ainda não desenterrei. Portanto, não sei.

 
fxsaber:
Nem sempre é possível conhecer os níveis de SL/TP de uma posição fechada.

Da cotação também decorre que as posições TP na MT5 são sempre uma ordem de mercado. Não marque a contrapartida do limite - veja acima.

Agora, isto é interessante... Preciso de ter a certeza de que a última posição fechada foi fechada com lucro.

Há alguma maneira de ter a certeza?

 
Artyom Trishkin:

Agora, isto é interessante... Estou enfrentando a necessidade de saber com certeza que a última posição fechada foi fechada com lucro.

Há alguma maneira de saber isto com certeza?

Estou a fazer o que me aconselham:

//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Take Profit               |
//+------------------------------------------------------------------+
bool IsClosedByTP (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "tp"
  if(StringFind (last_comment, "tp", 0) > -1)
    return (true);
  //--- Если нет строки "tp"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss                 |
//+------------------------------------------------------------------+
bool IsClosedBySL (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "sl"
  if(StringFind (last_comment, "sl", 0) > -1)
    return (true);
  //--- Если нет строки "sl"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе     |
//+------------------------------------------------------------------+
string LastDealComment (const string symbol)
{
  int    total_deals  = 0;  // Всего сделок в списке выбранной истории
  string deal_symbol  = ""; // Символ сделки
  string deal_comment = ""; // Комментарий сделки
                            //--- Если история сделок получена
  if(HistorySelect (0, TimeCurrent ()))
  {
    //--- Получим количество сделок в полученном списке
    total_deals = HistoryDealsTotal ();
    //--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
    for(int i = total_deals - 1; i >= 0; i--)
    {
      //--- Получим комментарий сделки
      deal_comment = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_COMMENT);
      //--- Получим символ сделки
      deal_symbol = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_SYMBOL);
      //--- Если символ сделки и текущий символ равны, остановим цикл
      if(deal_symbol == symbol)
        break;
    }
  }
  //---
  return (deal_comment);
}
 
Andrey Dik:

Estou a fazer o que me aconselham.

OK, como sei se a última troca causou o fechamento ou a reversão de uma posição?

Se a posição é fechada ou invertida, então faz sentido verificar os seus dados, que serão necessários para a lógica do conselheiro: volume, facto de fechar no take ou stop, etc...

Caso contrário, se o fato de fechar na tomada foi detectado na última negociação, mas a posição permaneceu, então não faz sentido verificar os dados sobre a última posição fechada (ainda existe).

Em geral, é claro, é difícil mudar rapidamente para a lógica do sistema de ordem MT5 depois das quatro - tantas perguntas surgem quando se pensa na lógica de comportamento da EA, que depende dos dados da última posição fechada - nas quatro é tudo transparente - a posição tem o seu próprio tipo, e é a última - é adequada - pegar nos dados e usá-los. Mas aqui... cobertura, rede ... e nós precisamos do mesmo resultado... e depois começamos a pensar de uma forma diferente...

 
Artyom Trishkin:

OK, então como você sabe se a última negociação levou a um fechamento ou a uma inversão de posição?

1. Se a posição for fechada ou invertida, então faz sentido verificar os seus dados, que serão necessários para a lógica do Expert Advisor: o volume, o facto de fechar no take ou stop, etc...

Caso contrário, se o facto de fechar na posição de take profit foi detectado na última posição, mas a posição permaneceu, então não faz sentido verificar os dados da última posição fechada (ainda existe).

Em geral, é claro, é difícil mudar rapidamente para a lógica do sistema de ordem MT5 depois das quatro - tantas perguntas surgem quando se pensa na lógica do comportamento do conselheiro, que está ligada aos dados da última posição fechada - nas quatro é tudo transparente - a posição tem o seu próprio tipo, e é a última - cabe, pegamos os dados e os usamos. Mas aqui... cobertura, rede ... e nós precisamos do mesmo resultado... e depois começamos a pensar por todo o lado...

1. Verificar tipo de transação, IN, OUT ou IN/OUT

2. Se uma posição já foi fechada por SL ou TP, já está fechada, não é necessário verificar o tipo de negócio.

 
Andrey Dik:

1. Verificar o tipo de transação, IN, OUT ou IN/OUT

2. Se a posição é fechada por SL ou TP, não está mais lá, está fechada, você não precisa verificar o tipo de comércio.

É válido para a rede? Ou para uma sebe? Não é possível ter várias posições em uma direção em uma conta de hedge? Ou é uma posição, e ....? O que é "e"? ... Merda... Eu não sei o que é "e"... Há muitas perguntas, as respostas ainda não estão na minha cabeça.
 
Artyom Trishkin:
É verdade para a rede? Ou também é verdade para a cobertura? Não pode haver várias posições em uma direção em uma conta de hedge? Ou é uma posição, e ....? O que é "e"? ... Merda... Eu não sei o que é "e"... Muitas perguntas, ainda sem respostas.

Para a sebe também.

Ao longo dos anos o meu cérebro tem sido afiado para a rede. Ordem->Transacção->Posição. Pode haver muitos negócios em uma posição (em uma cobertura há apenas um negócio, me corrija se eu estiver errado), você pode dizer o que aconteceu com a posição pelo tipo de negócio.

Em uma sebe é claro que é mais fácil de entender, mas mais difícil de acompanhar. Claro, esta é a minha opinião pessoal.

 
Andrey Dik:

Para uma sebe também.

Ao longo dos anos o meu cérebro tem sido afiado para a rede. Ordem->Transacção->Posição. Pode haver muitos negócios em uma posição (em uma cobertura há apenas um negócio, me corrija se eu estiver errado), você pode dizer o que aconteceu com a posição pelo tipo de negócio.

Em uma sebe é claro que é mais fácil de entender, mas mais difícil de acompanhar. IMHO, claro.

Eu compreendo, obrigado. Eu vou descobrir.
 
Artyom Trishkin:

Agora, isto é interessante... Preciso de ter a certeza de que a última posição fechada foi fechada com lucro.

Há alguma maneira de saber isto com certeza?

Quando você encontrar o último negócio DEAL_ENTRY_OUT e selecionar todo o histórico da posição HistorySelectByPosition nesta lista, há 2 negócios e 2 ordens, abrindo uma posição e fechando-a. A ordem com base na qual o fechamento ocorreu contém ORDER_PRICE_OPEN. Em seguida, você verifica o tipo de posição e o tipo de ordem que foi usada para fechá-la. Se o tipo de ordem é o oposto, significa que foi um fechamento. Assim, o preço da ordem é o preço que devemos procurar, com uma pequena correcção: se o lucro da ordem é > 0, então este é o preço do TP, se for < 0, então a posição fechou no SL.

Se levarmos em conta o comentário ao pedido, não devemos confiar nele.

 
Alexey Viktorov:

Quando você encontrar a última negociação DEAL_ENTRY_OUT e selecionar todo o histórico da posição HistorySelectByPosition nesta lista há, para contas hadge 2 negociações e 2 ordens, abrindo uma posição e fechando-a. A ordem com base na qual o fechamento ocorreu contém ORDER_PRICE_OPEN. Em seguida, você verifica o tipo de posição e o tipo de ordem que foi usada para fechá-la. Se o tipo de ordem é o oposto, significa que foi um fechamento. Assim, o preço da ordem é o preço que devemos procurar, com uma pequena correcção: se o lucro da ordem é > 0, então este é o preço do TP, se for < 0, então a posição fechou no SL.

Se confiássemos no comentário à ordem, eu não o faria.

E quanto ao SL? Como você determina o que foi fechado com lucro na rede de arrasto SL?