É possível evitar muitos "ors" (|||) em condições que causem a mesma ação? - página 4

 

borilunad:

Os cálculos mais complexos não diminuem tanto quanto as funções que verificam os vários dados de mercado necessários e as posições abertas em cada tick.

Santa verdade, MarketInfo é um dos piores problemas de teste. Normalmente escrevo em dois blocos para tais casos, se possível, fazendo consultas "reais" apenas para o modo de comércio real. Isto é especialmente eficaz para dados não medidos (no testador), por exemplo:

int spread;

int init()
{
...

   if(IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
 
}

int start()
{
...

   if (!IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
}

Você também pode enviar em bloco se(!IsTesting()) todos os tipos de RefreshRates(), consultas a MODE_BID e MODE_ASK (substituindo-as por Bid e Ask rápidos) e assim por diante.

 
alsu:

Santa verdade, MarketInfo é um dos piores problemas de teste. Normalmente escrevo em dois blocos para tais casos, se possível, fazendo consultas "reais" apenas para o modo de comércio real. Isto é especialmente eficaz para dados não medidos (no testador), por exemplo:

Você também pode enviar em bloco se(!IsTesting()) todos os tipos de RefreshRates(), consultas a MODE_BID e MODE_ASK (substituindo-as por Bid e Ask rápidos) e assim por diante.

Não me refiro à função MarketInfo que tenho no início de minha partida, mas às funções que verificam vários parâmetros do mercado e as posições abertas que são especificadas nas condições necessárias para a tomada de ações. Além disso, eu não preciso de MODE_BID e MODE_ASK, porque eu sempre uso Bid e Ask.
 
pako:

Muito obrigado, Pako! Como eu não adivinhei, é tão fácil! Jantarei agora e farei o que puder e verificarei a velocidade da passagem.

E isto eu não entendo o que você quer dizer. De onde você tirou esses números? E se você estiver interessado em nomes variáveis curtos, prefiro os curtos aos longos. Ou o que mais? Sim, acabamos de notar que você acrescentou dois colchetes antes do clo e no final após o clo à minha fórmula. Isso não é nada necessário, perturba o cálculo. Mas obrigado a todos da mesma forma!

<--- 10.444 = 8.087 > 3.908 é isso em que idioma?

Feito, verificado, funcionou, mas o resultado ainda não me agradou, praticamente não reduziu o tempo da corrida! Amanhã vou tentar fazer tudo o que puder, talvez então haja alguma diferença.

Mas de qualquer forma o principal é que graças a você, Pako, Aleksey, Victor e outros eu aprendi outro importante método de escrita de código, pelo qual sou extremamente grato!

 

Eu uso uma função em tais casos.

Por exemplo:

...
if (Request()) Action;

bool Request()
{
 if (A) return(true);
 if (B) return(true);
 if (C) return(true);
 if (D) return(true);
 return(false);
}
 
borilunad:
Eu sempre uso o Bid and Ask.

Então você precisa de RefreshRates()))
 
icas:

Eu uso uma função em tais casos.

Por exemplo:

Pelo que entendi, você tem a opção de cumprir todas as condições, enquanto para mim apenas uma condição é suficiente, e mesmo que mais condições sejam cumpridas, o que é improvável, já que são muito diferentes, não chegará a isso, pois uma condição será acionada. Se eu me enganei, justifique! Fico sempre feliz em ouvir algo novo! Obrigado!
 
alsu:

Então você precisa de RefreshRates()))
Sim, eu tenho RefreshRates() no início, ou isso não é suficiente?
 
borilunad:
Sim, eu tenho RefreshRates() no início, ou isso não é suficiente?
Tudo depende de quanto tempo o cálculo leva para ser executado. Pode haver uma situação, quando durante este período o preço foi atualizado e, portanto, Ask e Bid se tornam irrelevantes. Portanto, é melhor chamar a RefreshRates() adicionalmente antes de executar negócios (mais precisamente, antes do cálculo do preço para eles).
 
borilunad:
Sim, eu tenho RefreshRates() no início do Start, ou isso não é suficiente?
Não vale a pena utilizar o RefreshRates no início do Start, pois Ask e Bid ainda não se tornaram obsoletos.
 
alsu:
Tudo depende de quanto tempo os cálculos levam para ser executados. Pode haver uma situação em que o preço tenha sido atualizado durante este período e, portanto, Ask e Bid se tornam irrelevantes. É por isso que é melhor chamar a RefreshRates() adicionalmente antes de executar negócios (ou melhor, antes de calcular os preços para eles).

Então você precisa de RefreshRates() antes de cada série de condições? Porque eu pensei que há também RefreshRates() em cada função de execução, onde se verifica a existência de erros, para repetir a ordem, e isso é suficiente. Então vou tentar colocar mais RefreshRates() e ver o que acontece! Obrigado!

E Pap'e Yozh, meus agradecimentos também!