Dividir as posições em aberto em grupos - página 12

 
Sergey Voytsekhovsky:
Parece ter funcionado. Tenho uma impressão negativa para cada TakeProfit, e uma impressão positiva para cada entrada no mercado. Sinto muito pela gíria coloquial, mas sou completamente autodidata e não tenho ninguém com quem me comunicar sobre este tópico.


E eu sou autodidata. De qualquer forma, eu estava cortando e cortando e cortando o código... Se não fosse o diálogo com você, eu teria encontrado esses problemas um pouco mais tarde...

Devo acrescentar ao código uma escolha de negócio antes de ler as propriedades.

    HistoryDealSelect(trans.deal);

Ou para verificar o sucesso da escolha.

    if(!HistoryDealSelect(trans.deal))
      Print(GetLastError());
 
Alexey Viktorov:

E eu sou autodidata. De qualquer forma, eu estava cortando e cortando e cortando o código... Se não fosse o diálogo com você eu teria encontrado esses problemas um pouco mais tarde...

É sempre bom conversar, e você descobrirá mais tarde se a conversa é útil ou não. Assim, as pessoas mais faladoras aumentam menosPolus por meio da média, mas diminuem o maxPolus. Isso é um pouco bocado bocado bocado.

Надо добавить в код выбор сделки перед чтением свойств.

или с проверкой успешности выбора.

Você está pensando alto ou é isso que você me recomenda fazer?

 

Com a função

bool  HistoryDealSelect( 
   ulong  ticket     // тикет сделки 
   );

Eu li uma coisa sobre isso, mas ainda não sei como usá-lo

Функция HistoryDealSelect() очищает в mql5-программе список сделок, доступных для обращений, и копирует в него одну единственную сделку, если выполнение HistoryDealSelect() завершилось успешно.
 

Próxima tarefa - convido os conhecedores a discutir.

Como ter um ticket de transação(fechou uma posição no TR) para devolver um ticket de posição que foi fechado por esta transação?

2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   take profit triggered #6571  buy 0.01 EURUSD 1.16343 tp: 1.16389 [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   deal #6572  sell 0.01 EURUSD at 1.16389 done (based on order #6572)
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   deal performed [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   order performed sell 0.01 at 1.16389 [#6572  sell 0.01 EURUSD at 1.16389]
2020.04.12 18:15:09.620 Core 1  2018.06.19 04:52:40   Закрыта позиция ---Тикет сделки--- 6572 ---Позицию в структуре ArrayDealOut пометить на удаление ------------

A questão é que tenho uma estrutura na qual as posições reais têm que ser armazenadas. Ao saírem do jogo, eles precisam ser limpos.

???

 
Sergey Voytsekhovsky:

Pelo menos é útil falar sobre algo, e você descobrirá mais tarde se a conversa é útil ou não. Assim, as pessoas mais falantes aumentam o minPolus calculando a média, mas diminuem o maxPolus. Isso é um pouco bocado bocado bocado.

Você está pensando alto ou é isso que você me recomenda fazer?

Não apenas recomendando-o, eu devolvi a linha recentemente eliminada em meu código.

 
Sergey Voytsekhovsky:

Com a função

Você tem que ter cuidado, li um recurso lá, ainda não sei como usá-lo.

Depende de onde você fizer a seleção. Não há perigo de que isso aconteça na OnTradeTransaction. Em geral, devemos adquirir o hábito de selecioná-lo antes de acessar as propriedades de um pedido, negócio ou posição.

E não esqueça que se após a seleção a execução mudar para alguma função e outra seleção for feita nela, então ao retornar a lista conterá a última opção selecionada.

 
Sergey Voytsekhovsky:

Próxima tarefa - convido os conhecedores a discutir.

Como ter um ticket de transação(fechou uma posição no TR) para devolver um ticket de posição que foi fechado por esta transação?

A questão é que tenho uma estrutura na qual as posições reais têm que ser armazenadas. Ao saírem do jogo, eles precisam ser limpos.

???

Bem, é bastante simples...

/*********************TradeTransaction function**********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD && trans.symbol == _Symbol)
   {
    if(!HistoryDealSelect(trans.deal))
      Print(GetLastError());
    /******************** Если открылась позиция********************/
    if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)
      Print("********** открытие сделка ", trans.deal, " позиция ", trans.position);
    /******************** Если закрылась позиция********************/
    if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_OUT)
     {
      if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_TP)
       {
        Print("********** закрытие по тейку сделка ", trans.deal, " позиция ", trans.position);
       }
      if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_SL)
       {
        Print("********** закрытие по стопу сделка ", trans.deal, " позиция ", trans.position);
       }
     }
   }
 }/*******************************************************************/
CN      0       19:20:27.920    !00 (GBPUSD.m,H1)       2020.02.03 12:01:20   ********** закрытие по стопу сделка 27 позиция 26
CG      0       19:20:27.920    !00 (GBPUSD.m,H1)       2020.02.03 12:01:20   ********** открытие сделка 28 позиция 28
HJ      0       19:20:28.023    Trade   2020.02.03 12:01:40   stop loss triggered #28  buy 0.1 GBPUSD.m 1.30698 sl: 1.30598 tp: 1.30798 [#29  sell 0.1 GBPUSD.m at 1.30598]
GE      0       19:20:28.023    Trades  2020.02.03 12:01:40   deal #29  sell 0.1 GBPUSD.m at 1.30598 done (based on order #29)
 JF      0       19:20:28.023    Trade   2020.02.03 12:01:40   deal performed [#29  sell 0.1 GBPUSD.m at 1.30598]
CD      0       19:20:28.023    Trade   2020.02.03 12:01:40   order performed sell 0.1 at 1.30598 [#29  sell 0.1 GBPUSD.m at 1.30598]
GI      0       19:20:28.023    Trade   2020.02.03 12:01:40   market buy 0.1 GBPUSD.m sl: 1.30512 tp: 1.30712 (1.30598 / 1.30612 / 1.30598)
FQ      0       19:20:28.023    Trades  2020.02.03 12:01:40   deal #30  buy 0.1 GBPUSD.m at 1.30612 done (based on order #30)
 QQ      0       19:20:28.023    Trade   2020.02.03 12:01:40   deal performed [#30  buy 0.1 GBPUSD.m at 1.30612]
ON      0       19:20:28.023    Trade   2020.02.03 12:01:40   order performed buy 0.1 at 1.30612 [#30  buy 0.1 GBPUSD.m at 1.30612]
KR      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   CTrade::OrderSend: market buy 0.10 GBPUSD.m sl: 1.30512 tp: 1.30712 [done at 1.30612]
RM      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   ********** закрытие по стопу сделка 29 позиция 28
FP      0       19:20:28.025    !00 (GBPUSD.m,H1)       2020.02.03 12:01:40   ********** открытие сделка 30 позиция 30
NK      0       19:20:28.295    Trade   2020.02.03 12:02:39   take profit triggered #30  buy 0.1 GBPUSD.m 1.30612 sl: 1.30512 tp: 1.30712 [#31  sell 0.1 GBPUSD.m at 1.30712]
IS      0       19:20:28.295    Trades  2020.02.03 12:02:39   deal #31  sell 0.1 GBPUSD.m at 1.30712 done (based on order #31)
 NE      0       19:20:28.295    Trade   2020.02.03 12:02:39   deal performed [#31  sell 0.1 GBPUSD.m at 1.30712]
KI      0       19:20:28.295    Trade   2020.02.03 12:02:39   order performed sell 0.1 at 1.30712 [#31  sell 0.1 GBPUSD.m at 1.30712]
IH      0       19:20:28.295    Trade   2020.02.03 12:02:39   market buy 0.1 GBPUSD.m sl: 1.30626 tp: 1.30826 (1.30712 / 1.30726 / 1.30712)
EI      0       19:20:28.295    Trades  2020.02.03 12:02:39   deal #32  buy 0.1 GBPUSD.m at 1.30726 done (based on order #32)
 LR      0       19:20:28.295    Trade   2020.02.03 12:02:39   deal performed [#32  buy 0.1 GBPUSD.m at 1.30726]
RL      0       19:20:28.295    Trade   2020.02.03 12:02:39   order performed buy 0.1 at 1.30726 [#32  buy 0.1 GBPUSD.m at 1.30726]
HR      0       19:20:28.297    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   CTrade::OrderSend: market buy 0.10 GBPUSD.m sl: 1.30626 tp: 1.30826 [done at 1.30726]
HS      0       19:20:32.663    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   ********** закрытие по тейку сделка 31 позиция 30
KP      0       19:20:32.663    !00 (GBPUSD.m,H1)       2020.02.03 12:02:39   ********** открытие сделка 32 позиция 32
 
Alexey Viktorov:

Depende de onde você fizer a seleção. Não há risco de que isso aconteça na OnTradeTransaction. Na verdade, devemos adquirir o hábito de selecioná-lo antes de acessar as propriedades de uma ordem, negócio ou posição.

E não esqueça que se após a seleção a execução for para alguma função e fizer outra escolha, então ao retornar na lista será aquela que foi selecionada por último.

Cara, como compreender tudo isso está além da abstração para mim.

Eu acabei de resolver o problema acima mencionado com a busca de um bilhete de uma posição fechada por um comércio conhecido - e eu o solicitei imediatamente da gráfica, então voltei para onde comecei - nem todos os TakeProfits aparecem na gráfica.

 
Alexey Viktorov:

É tão simples quanto isso...

Meu Deus, você teve "meu precioso" todo esse tempo e ficou tão modestamente em silêncio????

Muito obrigado.

Eu aprendi muito. Eu poderia ter simplesmente reposicionado, só isso.

 
Sergey Voytsekhovsky:

Oh meu Deus, você teve "meu precioso" todo esse tempo e tem estado tão modestamente em silêncio????

Muito obrigado.

Aprendi muito, mas teria acabado de reposicioná-lo e pronto.

Nada aconteceu. Eu só o escrevi para verificar e o passei pelo depurador de dados históricos. Aprenda a usar o depurador. É uma habilidade muito útil.

Comecei a programar em Excell a chamada VBA (visual VBA para aplicações) e aprendi sobre depuração lá. Depois disso, foi difícil para mim acostumar-me aos impressores para verificar os valores recebidos. E quando eles introduziram a depuração em mql5 eu estava tão feliz como uma criança que meu sofrimento tinha acabado.