Acho muito mais lógico colocar colchetes ou em uma linha ou em uma coluna. É muito difícil entender o código no qual não está claro onde um bloco começa ou termina. Bem, se o objetivo de tal formatação é esconder o sentido do código dos inimigos, então o objetivo é alcançado.
Está claro. De qualquer forma, qual é o objetivo da otimização do código? Ao reduzir o número de linhas? Vejo o único sentido em aumentar a velocidade do código, e isto pode ser alcançado reduzindo o número de chamadas de funções cíclicas, por exemplo. Ou pela exclusão de repetições de cálculo de indicadores. Aproximadamente assim.
Só vejo o interesse em aumentar a velocidade do código
De modo geral, a velocidade não é crucial em 90% dos casos. O objetivo é inicialmente fazer o código para que seja o mais fácil de construir e ler possível.
Então, se o tempo é crucial, otimizamos a velocidade.
int AnaliseFunc (string sy, int tf)
{
CurAsk =MarketInfo(Symbol(),MODE_ASK);
CurBid =MarketInfo(Symbol(),MODE_BID);
OpnPrice =iOpen(NULL,PERIOD_M5,0);
OpnPrice1=iOpen(NULL,PERIOD_M5,1);
ClsPrice1=iClose(NULL,PERIOD_M5,1);
if (sy=="" || sy=="0") sy=Symbol();
double
BB_1 =iCustom(sy,tf,"BB_MA",13,1,1,1),
BB_2 =iCustom(sy,tf,"BB_MA",13,1,1,2),
BB_3 =iCustom(sy,tf,"BB_MA",13,1,1,3),
AO1 =iAO(sy,tf,1),
AO2 =iAO(sy,tf,2),
AO3 =iAO(sy,tf,3),
AC1 =NormalizeDouble(iAC(sy,tf,1),8)*1000,
AC2 =NormalizeDouble(iAC(sy,tf,2),8)*1000,
AC3 =NormalizeDouble(iAC(sy,tf,3),8)*1000,
AC4 =NormalizeDouble(iAC(sy,tf,4),8)*1000,
AC5 =NormalizeDouble(iAC(sy,tf,5),8)*1000,
SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
DeM_1 =iDeMarker(sy,tf,14,1),
DeM_2 =iDeMarker(sy,tf,14,2),
Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
//---------------- Проверка на разворот BB_MA ------------------------------------------------------- if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0) // Найден разворот BB вверх
{
switch (tf)
{
case1: TrBBTurnUP_M1 =true; TrBBTurnDN_M1=false; // Флаг разворота вверх на М1case5: TrBBTurnUP_M5 =true; TrBBTurnDN_M5=false; // Флаг разворота вверх на М5case15: TrBBTurnUP_M15=true; TrBBTurnDN_M15=false; // Флаг разворота вверх на М15 case30: TrBBTurnUP_M30=true; TrBBTurnDN_M30=false; // Флаг разворота вверх на М30 case60: TrBBTurnUP_H1 =true; TrBBTurnDN_H1=false; // Флаг разворота вверх на H1case240: TrBBTurnUP_H4 =true; TrBBTurnDN_H4=false; // Флаг разворота вверх на H4case1440: TrBBTurnUP_D1 =true; TrBBTurnDN_D1=false; // Флаг разворота вверх на D1case10080: TrBBTurnUP_W1 =true; TrBBTurnDN_W1=false; // Флаг разворота вверх на W1case43200: TrBBTurnUP_MN =true; TrBBTurnDN_MN=false; // Флаг разворота вверх на MN
}
}
if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0) // Найден разворот BB вниз
{
switch (tf)
{
case1: TrBBTurnUP_M1 =false; TrBBTurnDN_M1=true; // Флаг разворота вниз на М1case5: TrBBTurnUP_M5 =false; TrBBTurnDN_M5=true; // Флаг разворота вниз на М5case15: TrBBTurnUP_M15=false; TrBBTurnDN_M15=true; // Флаг разворота вниз на М15 case30: TrBBTurnUP_M30=false; TrBBTurnDN_M30=true; // Флаг разворота вниз на М30 case60: TrBBTurnUP_H1 =false; TrBBTurnDN_H1=true; // Флаг разворота вниз на H1case240: TrBBTurnUP_H4 =false; TrBBTurnDN_H4=true; // Флаг разворота вниз на H4case1440: TrBBTurnUP_D1 =false; TrBBTurnDN_D1=true; // Флаг разворота вниз на D1case10080: TrBBTurnUP_W1 =false; TrBBTurnDN_W1=true; // Флаг разворота вниз на W1case43200: TrBBTurnUP_MN =false; TrBBTurnDN_MN=true; // Флаг разворота вниз на MN
}
}
//---------------------- Проверка на разворот Momentum -----------------------------------------------if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
{
switch (tf)
{
case1: TrMomTurnUP_M1 =true; TrMomTurnDN_M1=false; // Флаг разворота вверх на М1case5: TrMomTurnUP_M5 =true; TrMomTurnDN_M5=false; // Флаг разворота вверх на М5case15: TrMomTurnUP_M15=true; TrMomTurnDN_M15=false; // Флаг разворота вверх на М15 case30: TrMomTurnUP_M30=true; TrMomTurnDN_M30=false; // Флаг разворота вверх на М30 case60: TrMomTurnUP_H1 =true; TrMomTurnDN_H1=false; // Флаг разворота вверх на H1case240: TrMomTurnUP_H4 =true; TrMomTurnDN_H4=false; // Флаг разворота вверх на H4case1440: TrMomTurnUP_D1 =true; TrMomTurnDN_D1=false; // Флаг разворота вверх на D1case10080: TrMomTurnUP_W1 =true; TrMomTurnDN_W1=false; // Флаг разворота вверх на W1case43200: TrMomTurnUP_MN =true; TrMomTurnDN_MN=false; // Флаг разворота вверх на MN
}
}
if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
{
switch (tf)
{
case1: TrMomTurnUP_M1 =false; TrMomTurnDN_M1=true; // Флаг разворота вверх на М1case5: TrMomTurnUP_M5 =false; TrMomTurnDN_M5=true; // Флаг разворота вверх на М5case15: TrMomTurnUP_M15=false; TrMomTurnDN_M15=true; // Флаг разворота вверх на М15 case30: TrMomTurnUP_M30=false; TrMomTurnDN_M30=true; // Флаг разворота вверх на М30 case60: TrMomTurnUP_H1 =false; TrMomTurnDN_H1=true; // Флаг разворота вверх на H1case240: TrMomTurnUP_H4 =false; TrMomTurnDN_H4=true; // Флаг разворота вверх на H4case1440: TrMomTurnUP_D1 =false; TrMomTurnDN_D1=true; // Флаг разворота вверх на D1case10080: TrMomTurnUP_W1 =false; TrMomTurnDN_W1=true; // Флаг разворота вверх на W1case43200: TrMomTurnUP_MN =false; TrMomTurnDN_MN=true; // Флаг разворота вверх на MN
}
}
sempre matou a lógica de tal construção em operandos cíclicos :
completamente incompreensível ...
Se você não entender, eu só posso simpatizar com isso.
Se você me perguntar, a lógica padrão é mais clara e mais compreensível:
Acho muito mais lógico colocar colchetes ou em uma linha ou em uma coluna. É muito difícil entender o código no qual não está claro onde um bloco começa ou termina. Bem, se o objetivo de tal formatação é esconder o sentido do código dos inimigos, então o objetivo é alcançado.
Sempre fui morto por um ninho, se é - por que fazer tal ninho na fonte?
Se não estiver claro, eu só posso simpatizar.
Sua lógica não é padrão. Está errado.Correção, é apenas uma frase que se destaca :-)
--
Lógica não convencional não significa que esteja errada.
--
Quando o caminho da lógica não padrão é mais curto do que o da lógica padrão -- com condições iguais de entrada e saída --
então para o inferno com as normas!
Então eu sou a favor da lógica não-padronizada.
--
sim, o código de crocante é difícil de ler...
...embora eu tenha visto código muito curto e difícil de ler ...
para manutenção - a replicação deste código não é ideal .
Se você o escreve para circulação, geralmente você tem que cuidar de seus colegas para mantê-lo.
se você escrever código com a expectativa de que alguém o quebre!
Idealmente, é LOGIC passar pelo trabalho - escrever corretamente, mas fazer um código que não seja legível.
Eu não entendo onde está o furo? E por que o segundo? Se é o segundo, então onde está o primeiro?
O código que foi repreendido realmente não é super, é perfeito para confundir!
2 Vinin . Victor, por que chamar a função de seleção de pedidos o tempo todo? É mais fácil preencher todas as variáveis em um loop.
Eu acho que é muito bom:
int time;Na MQL, o comportamento dos && e || operadores é diferente do que em C++, portanto, faz sentido separar as condições.
2 Vinin - Victor, por que chamar a função de seleção de pedidos o tempo todo? É mais fácil preencher todas as variáveis em um loop.
...Depende.
Só vejo o interesse em aumentar a velocidade do código
De modo geral, a velocidade não é crucial em 90% dos casos. O objetivo é inicialmente fazer o código para que seja o mais fácil de construir e ler possível.
Então, se o tempo é crucial, otimizamos a velocidade.
Transferindo daqui para cá