Ich finde es viel logischer, Klammern entweder in eine Zeile oder in eine Spalte zu setzen. Es ist sehr schwierig, Code zu verstehen, bei dem nicht klar ist, wo ein Block beginnt oder endet. Nun, wenn der Zweck einer solchen Formatierung darin besteht, den Sinn des Codes vor Feinden zu verbergen, dann ist das Ziel erreicht.
In MQL verhalten sich die Operatoren && und || anders als in C++, daher ist es sinnvoll, die Bedingungen zu trennen.
FION:
2 Vinin - Victor, warum rufen Sie die Funktion zur Auswahl der Bestellung immer wieder auf? Es ist einfacher, alle Variablen in einer Schleife zu füllen.
Das ist klar. Welchen Sinn hat die Code-Optimierung überhaupt? Bei der Reduzierung der Anzahl der Zeilen? Ich sehe den einzigen Sinn darin, die Geschwindigkeit des Codes zu erhöhen, was z.B. durch die Verringerung der Anzahl von Aufrufen zyklischer Funktionen erreicht werden kann. Oder durch Ausschluss von Wiederholungen der Indikatorberechnung. Ungefähr so.
Ich sehe nur den Sinn darin, die Geschwindigkeit des Codes zu erhöhen
Im Großen und Ganzen ist die Geschwindigkeit in 90 % der Fälle nicht entscheidend. Es geht darum, den Code zunächst so zu gestalten, dass er so einfach wie möglich zu erstellen und zu lesen ist.
Wenn dann die Zeit entscheidend ist, optimieren wir die Geschwindigkeit.
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
}
}
immer die Logik einer solchen Konstruktion in zyklischen Operanden getötet:
völlig unverständlich ...
Wenn Sie das nicht verstehen, kann ich das nur nachempfinden.
Wenn Sie mich fragen, ist die Standardlogik klarer und verständlicher:
Ich finde es viel logischer, Klammern entweder in eine Zeile oder in eine Spalte zu setzen. Es ist sehr schwierig, Code zu verstehen, bei dem nicht klar ist, wo ein Block beginnt oder endet. Nun, wenn der Zweck einer solchen Formatierung darin besteht, den Sinn des Codes vor Feinden zu verbergen, dann ist das Ziel erreicht.
Mich haben verschachtelte if's schon immer gestört - warum sollte man solche Verschachtelungen an der Quelle vornehmen?
Wenn das nicht klar ist, kann ich das nur verstehen.
Ihre Logik ist nicht Standard. Das ist falsch.Korrektur, es ist nur eine Phrase, die heraussticht :-)
--
Eine unkonventionelle Logik bedeutet nicht, dass sie falsch ist.
--
wenn der Weg der Nicht-Standard-Logik kürzer ist als der der Standard-Logik -- bei gleichen Eingangs- und Ausgangsbedingungen --
dann zum Teufel mit den Normen!
Dann bin ich für eine nicht standardisierte Logik.
--
ja, der Crunch-Code ist schwer zu lesen...
... obwohl ich sehr kurzen und schwer lesbaren Code gesehen habe ...
für die Wartung - die Replikation dieses Codes ist nicht ideal.
Wenn Sie es für den Umlauf schreiben, kümmern Sie sich normalerweise um Ihre Mitarbeiter, um es zu erhalten.
wenn Sie Code mit der Erwartung schreiben, dass jemand ihn kaputt macht!
Im Idealfall ist es LOGISCH, sich die Mühe zu machen - man schreibt zwar korrekt, aber macht einen Code, der nicht lesbar ist.
Ich verstehe nicht, wo die Panne ist? Und warum die zweite? Wenn es der zweite ist, wo ist dann der erste?
Der Code, der gescholten wurde, ist wirklich nicht super, er ist perfekt, um zu verwirren!
2 Vinin . Victor, warum rufen Sie die Auftragsauswahlfunktion immer wieder auf? Es ist einfacher, alle Variablen in einer Schleife einzugeben.
Ich denke, das ist ziemlich gut:
int time;In MQL verhalten sich die Operatoren && und || anders als in C++, daher ist es sinnvoll, die Bedingungen zu trennen.
2 Vinin - Victor, warum rufen Sie die Funktion zur Auswahl der Bestellung immer wieder auf? Es ist einfacher, alle Variablen in einer Schleife zu füllen.
...Es kommt darauf an.
Ich sehe nur den Sinn darin, die Geschwindigkeit des Codes zu erhöhen
Im Großen und Ganzen ist die Geschwindigkeit in 90 % der Fälle nicht entscheidend. Es geht darum, den Code zunächst so zu gestalten, dass er so einfach wie möglich zu erstellen und zu lesen ist.
Wenn dann die Zeit entscheidend ist, optimieren wir die Geschwindigkeit.
Übertragung von hier nach dort