Limpeza no testador - página 4

 
Roman Shiredchenko #:

Os abates durante a compensação podem ser desconsiderados.

Exemplo. Você abre uma operação de compra a 50, no momento da compensação o preço é de 70. Durante a compensação sua operação será excluída e você receberá 20 tugrik, após a compensação sua operação será aberta a 70.

Se você fechá-lo a 100, então o terminal mostrará um comércio com um lucro de 50 rebocadores.

O problema geralmente ocorre quando se escreve uma rede de arrasto ou CU. Suponha que queiramos colocar uma CUE de +5 quando o comércio for 15+.

Então, se pegarmos os números do exemplo, acontece que antes de limpar nossa parada será +5 pontos e depois de limpar será -5 pontos. Mas se uma negociação for fechada na parada, ainda teremos lucro de 5 rodadas.

Portanto, a limpeza pode ser desconsiderada no testador.

 
Aleksandr Slavskii #:

Realmente simples, e o mais importante, confiável.


Eu perdoarei o autor pelo fora de tópico, mas você tem uma receita para determinar quando a limpeza está terminada?

O problema é o seguinte: o corretor de abertura, durante a compensação elimina as ordens pendentes, e o campo de compensação não as define novamente.

Eu não sei sobre futuros, mas na liquidação de ações termina em momentos diferentes.

Portanto, não fui capaz de determinar o momento em que a compensação termina para uma segurança específica.

Eu apenas envio um pedido com temporizador para fazer um pedido até que ele abra.

Eu não gosto desta abordagem e não tenho outra.

Tudo bem - discutir e debater juntos - o tópico está aberto a todos!!!!!
 
Aleksandr Slavskii #:

Os abates durante a compensação podem ser desconsiderados.

Exemplo. Você abre uma operação de compra a 50, no momento da compensação o preço é de 70. Durante a compensação sua operação será excluída e você receberá 20 tugrik, após a compensação sua operação será aberta a 70.

Se você fechá-lo a 100, então o terminal mostrará um comércio com um lucro de 50 rebocadores.

O problema geralmente ocorre quando se escreve uma rede de arrasto ou CU. Suponha que queiramos colocar uma CUE de +5 quando o comércio for 15+.

Então, se pegarmos os números do exemplo, acontece que antes de limpar nossa parada será de +5 pontos e depois de limpar será de -5 pontos. Mas se uma negociação for fechada na parada, ainda teremos lucro de 5 rodadas.

É por isso que podemos desconsiderar a limpeza no provador.

Oh! Que interessante... terá que ir mais fundo e experimentá-lo! :-)

escreveu (retirado do artigo) f-i-ção exatamente fora da contagem das negociações sobre a história, sobre os fatos (é quem tem posição em mais) - contagem consecutiva menos e exibi-la na tela - tipo de compensação da CONTA, certamente não pode ser tudo correto quando se negocia - apenas olhando para ela agora ...

Assim, para fechar a posição com precisão, por exemplo, levando em conta a compensação anterior, se ela foi negativa - então devemos comparar os valores do lucro fechado e da perda anterior na compensação.

//+------------------------------------------------------------------+
//|                 УЧЕТ КЛИРИНГА
//+------------------------------------------------------------------+
double Calc_Clearing() // вычисление лота
  {
   bool ord;
   double TotalLot=0;
    for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
       //  && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) <= 0)
           {
            TotalLot+=HistoryDealGetDouble(ticket,DEAL_VOLUME);
           }
         else
           {
            break;
           }
        }
     }
   return TotalLot == 0 ? TotalLot: TotalLot;
  }

encontrou um erro - conserte-o:

TotalLot+=HistoryDealGetDouble(ticket,DEAL_PROFIT);

como resultado, esta é a imagem na tela acima antes desta inserção:

   Comment(" SPREAD текущий по символу ", _Symbol, " составляет: ", SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
    "      СВЕРКА по клирингу:  ", NormalizeDouble(Calc_Clearing(),0));

reconciliação de compensação

porque ainda não houve nenhuma perda de compensação:

09.11.2021: todos os "out" estão no plus:


 
Roman Shiredchenko #:

Terrível! Há muito de errado para comentar.

Vamos colocar isto de outra forma.

Por que você precisa do histórico da transação se você está interessado na posição?

Imho, é suficiente escrever o preço da última posição em uma variável para cada nova operação, e quando chegar a compensação, ajustar a CU pela diferença entre o preço escrito na variável e o preço do último tick antes da compensação.

Exemplo:

lote = 1;

posição_dupla = 0;

primeiro comércio ao preço 30, posição_ final = 30;

segundo comércio ao preço de 60, posição_ final = 45;

terceiro comércio ao preço 90, posição_ final = 60;


Ou seja, você tem uma posição aos 60 com um volume de 3.

Suponhamos que a compensação tenha chegado ao preço de 70, o lucro é igual a 30 tugriks.

duplo preço_de-liberdade = 70;

Após a compensação, a posição aberta ao preço 70, mas temos que lembrar que o preço real desta posição éend_position == 60; portanto, este é o preço para calcular a rede de arrasto ou CUE a partir de.

Assim, durante a compensação, preencha a variável

corretor duplo = 0;

corrector =clearing_price-end_position;

Suponha que você tenha uma partida CU quando a troca for +20 pips, respectivamente, acrescente à função CU que a partida CU é: 20 -corretor;

E também a CU é colocada mais, elas também devem ser corrigidas pelo valor corretivo.

Após o fechamento de qualquer corretor de posição = 0;


Mas isto só funcionará se não houver fechamentos ou preenchimentos parciais após a limpeza. Se houver, temos que fazer de outra forma.

 
Aleksandr Slavskii #:

Realmente simples, e o mais importante, confiável.


Eu perdoarei o autor pelo fora de tópico, mas você tem uma receita para determinar quando a limpeza está terminada?

O problema é o seguinte: o corretor de abertura, durante a compensação elimina as ordens pendentes, e o campo de compensação não as configura novamente.

Eu não sei sobre futuros, mas na liquidação de ações termina em momentos diferentes.

Portanto, não fui capaz de determinar o momento em que a compensação termina para uma segurança específica.

Eu apenas envio um pedido com temporizador para fazer um pedido até que ele abra.

Não gosto desta abordagem e não tenho nenhuma outra.

Eu também tenho uma abertura, mas em futuros. Tenho o mesmo problema com o fim da clareira, não sei como determiná-lo, apenas levo 19:05.

Você pode colocar os adiamentos até a data, não apenas por hoje. Pelo menos no futuro.

 
Aleksandr Slavskii #:

1. O horror! Há muito de errado para comentar.

Vamos colocar isto de outra forma.

Por que você precisa do histórico da transação se você está interessado na posição?

Imho, é suficiente escrever o preço da última posição em uma variável para cada nova operação, e quando chegar a compensação, ajustar a CU pela diferença entre o preço escrito na variável e o preço do último tick antes da compensação.

Exemplo:

lote = 1;

posição_dupla = 0;

primeiro comércio ao preço 30, posição_ final = 30;

segundo comércio ao preço de 60, posição_ final = 45;

terceiro comércio ao preço 90, posição_ final = 60;


Ou seja, você tem uma posição aos 60 com um volume de 3.

Suponhamos que a compensação tenha chegado ao preço de 70, o lucro é igual a 30 tugriks.

duplo preço_de-liberdade = 70;

Após a compensação, a posição aberta ao preço 70, mas temos que lembrar que o preço real desta posição éend_position == 60; portanto, este é o preço para calcular a rede de arrasto ou CUE a partir de.

Assim, durante a compensação, preencha a variável

corretor duplo = 0;

corrector =clearing_price-end_position;

Suponha que você tenha uma partida CU quando a troca for +20 pips, respectivamente, acrescente à função CU que a partida CU é: 20 -corretor;

E também a CU é colocada em mais alguns pontos, eles também devem ser corrigidos pelo valor do corretor.

Após o fechamento de qualquer corretor de posição = 0;


2. Mas isto só funcionará se não houver fechamentos ou preenchimentos parciais após a limpeza. Se houver, devemos fazer de outra forma.

1. Obrigado pela programação. Quero procurar sem corretor por enquanto, pois tenho adições e arrasto com boo + ex. 30 pips, também após o arrasto pode haver fechamentos parciais de acordo com a lógica operacional do robô. Isto é, após abrir uma posição inicial, memorizo o preço aberto, após as adições - média - novamente memorizo o NOVO preço aberto da posição. E, em essência, a compensação e a fixação de um novo preço de abertura por parte do corretor não importará.

Entendo corretamente que esta abordagem também pode ocorrer de acordo com a lógica comercial acima escrita neste meu posto...

Além disso, se o preço atual do ativo permitir, a transferência de SL para BU + 30 pips do preço acumulado da posição previamente memorizado.

E quem se importa com o preço atual da posição aberta para os futuros, estabelecido por seu corretor?


2.

"Mas isto só funcionará se não houver fechamentos ou preenchimentos parciais após a limpeza. Se houver, isso precisa ser feito de maneira diferente. "

Eu preenchi... antes e depois - até transferir para BU + 30 pips - é realmente necessário ler o preço médio atual de todas as ordens de mercado através de arrays, porque precisaremos

...precisaríamos do preço de abertura de uma ordem de mercado e do número e volume de contratos para cada ordem... para exibir o preço médio para eles no total - onde significa a transferência para uma CU - para calcular...


Um preço médio = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), aqui acontece que eu não traduzi SL em BU + 30 pips em todas as posições agregadas - é necessário escrever todos esses valores em arrays ou o quê? Se abrirmos a N-ésima fatia de ordem de mercado, devemos elevar esta cadeia inteira para calcular a média de todas elas?

Ou podemos brincar com ele de alguma forma:

HistoryOrderSelect ()
HistoryOrderGetTicket ()

Mas surge a questão de como tomar o início e o fim do ciclo das ordens de mercado ACTUAL que participam da formação da posição agregada ACTUAL?

 
Roman Shiredchenko #:

VOLUME_Price = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), então acontece que eu ainda não traduzi SL em BU + 30 pips em todas as posições agregadas - devo escrever todos esses valores em arrays? Se abrirmos a N-ésima ordem de mercado, temos que trazer toda a cadeia a fim de calcular a média de todos eles?

Infelizmente, este é exatamente o caso.

 

Roman Shiredchenko #:

Preço_médio = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), então acontece que eu não traduzi SL em BU + 30 pips em todas as posições agregadas - todos esses valores devem ser escritos em arrays ou o quê? Se abrirmos a N-ésima fatia de ordem de mercado, devemos elevar esta cadeia inteira para calcular a média de todas elas?

Ou podemos brincar com ele de alguma forma:

Mas aí surge a questão, como tomar o início e o fim do ciclo de ordens de mercado ACTUAL que participam da formação da posição total ACTUAL?

É suficiente para armazenar o último preço médio.

 
JRandomTrader #:

É suficiente manter o último preço médio.

OK, mas se eu reabastecer, por exemplo, com qualquer volume - como posso contá-lo ATUALMENTE?
 
Roman Shiredchenko #:
OK, e se eu acrescentar, por exemplo, qualquer volume - como contá-lo ATUALMENTE?

Eu lhe mostrei. Pegue este último preço médio e volume da posição, o preço do novo comércio e seu volume. Tudo será calculado corretamente.

Razão: