Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 126

 
hoz:

Vou repetir a pergunta que fiz ontem. Não quero colocá-lo em uma linha separada. Se algo não estiver claro, responderei a todas as perguntas.

Ainda estou tendo dificuldades para fechar as posições necessárias. A situação é a seguinte:

1. o fechamento das posições está sendo rastreado.

2. Assim que a última posição tiver fechado na linha de chegada. ...todas as posições abertas e pendentes devem ser fechadas de uma só vez. Tudo é fechado por lotes, ou seja, grandes lotes ao mesmo tempo, e depois menores. Isto se destina apenas a ganhar experiência com pedidos.

A implementação é a seguinte:

No início() em cada tic-tac:

Estamos interessados em fechar ordens de mercado, uma vez que o pendente é eliminado conforme necessário. Aqui está o que temos:

Por alguma razão, algumas das ordens não estão sendo fechadas. Eu imprimo alguns segmentos quando os vejo, não entendo nada. Aqui está um exemplo:

No comentário você pode ver que lastOOTHist = 01:30: 00, embora isto não seja realmente correto. Se verificarmos a lastOOTHist na janela de resultados, veremos que

seus horários de fechamento são diferentes...

O que está errado aqui?

Você tem tudo misturado...

aqui mesmo:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Desimprimir os valores de todas as células da matriz antes do laço - talvez haja um cão lá dentro?

 
Forexman77:
Você pode me dizer como descobrir o tamanho do spread quando um comércio é aberto, ou melhor ainda, como obtê-lo exibido no log?

Imediatamente após a abertura de um comércio:

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
Sua propagação está no tronco.
 
Sepulca:

Imediatamente após a abertura do negócio:

Sua propagação está no tronco.



Muito obrigado! Fez um EA, no testador faz dinheiro, na demonstração é pior. Provavelmente fará ainda pior com o real. Não notei nenhuma diferença entre o spread e o real.

Quando eu estava observando visualmente a propagação, não vi mais de três pips. Minha idéia é que durante os movimentos mais fortes ela não é mostrada de forma alguma ou se amplia, então não tenho tempo suficiente para percebê-la.

A Alpari tem uma baixa propagação, mas presumo que aumente significativamente durante movimentos fortes. Na DukasCopi o spread é ainda menor, mas grandes comissões, elas ficam menores se a conta for de vários milhões de dólares.

Você já fez alguma pesquisa sobre o tamanho do spread, com movimentos acima de 50 pips por minuto? A que valor aumenta o spread médio com esses movimentos?

Perguntei à Alpari, eles não me responderam.

 
FAQ:


Quando você passa uma variável (array) para uma função por valor, uma variável local é criada dentro da função e você a declara no cabeçalho: myFunct(int my_var). Desta forma, as mudanças desta variável não podem ser vistas fora da função. E no caso de um array, o compilador irá lembrá-lo disso.

Se você quiser que as mudanças no valor da variável sejam visíveis fora (fora da função), passe as variáveis por referência : myFunct(int & my_var)


Mas sim. Afinal de contas, uma matriz é declarada globalmente. Mas a mudança dentro da função é local. É por isso que existem funções como microestruturas. A fim de implementar micro-problemas localmente.
 

Bom lucro para todos! Por favor, me diga como fazer o OrderOpenPrice() devolver o preço com cinco casas decimais. Se o terminal retornar 4 dígitos, se for 5, ele ainda retorna 4, arredondando o quinto.

 
ivan180976:

Bom lucro para todos! Por favor, me diga como fazer o OrderOpenPrice() devolver o preço com cinco casas decimais. Se o terminal retornar 4 dígitos, se for 5, ele ainda retorna 4, arredondando o quinto.


DoubleToStr(número, precisão)
 

Forexman77:
Forexman77:



Muito obrigado! Fez um EA, ganha dinheiro com o testador, é pior na demonstração. Provavelmente fará ainda pior com o real. Eu tenho observado o visual por três vezes.

Quando eu estava observando visualmente a propagação, não vi mais de três pips. Minha idéia é que durante os movimentos mais fortes ela não é mostrada de forma alguma ou se amplia, então não tenho tempo suficiente para percebê-la.

A Alpari tem uma baixa propagação, mas presumo que aumente significativamente durante movimentos fortes. Na DukasCopi o spread é ainda menor, mas grandes comissões, elas ficam menores se a conta for de vários milhões de dólares.

Você já fez alguma pesquisa sobre o tamanho do spread, com movimentos acima de 50 pips por minuto? A que valor aumenta o spread médio com esses movimentos?

Perguntei à Alpari, eles não me responderam.


A propósito, eu estava analisando a propagação apenas na sexta-feira, logo na Alpari:

As amarelas finas representam o spread máximo por barra (eu usei um minuto). Vermelho arrojado - spread mínimo por barra. Como você pode ver, durante o dia o spread varia de 5 a 14 pips em cinco dígitos. Mas depois das 21:00 o tempo de propagação do servidor não cai abaixo de 10 pontos, e no final do dia geralmente sobe até 52 pontos. Apanhei um momento interessante antes da forte mudança de preço, o spread aumenta acentuadamente:

 
artmedia70:

É um pouco empilhado...

bem ali:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Isso é apenas para facilitar a percepção. Quando eu estava escrevendo, mas de outra forma, sim, não é preciso. Mas isso também não me incomodará.

Ele não imprimirá nenhum valor de matriz:

artmedia70:

Desimprimir o valor de todas as células de uma matriz antes do laço - talvez o cãozinho esteja cavando lá?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

A saída está vazia...

 
hoz:

Ele não emite nenhum valor de matriz:


Não produz absolutamente nada...

Quão vazio? Não imprime nada, ou ainda há zeros nas células da matriz?
 

Por que você aumenta i no corpo do laço?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

e isto: i<=p, por que "ou igual a" ?