Jump to content


Photo

"Tom-Next Codingconvention"


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
9 replies to this topic

#1 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,482 posts
  • 16713 thanks

Posted 27 January 2009 - 03:00 PM

Da ich absolut keine Ahnung habe, wo der Thread am besten hingehört, start ich ihn einfach mal im Allgemein.

@ FinGeR @ Mythos @ Krümel @all

Wollen wir uns gleich auf einen Standard einigen?
Bei dem "Drive", den wir hier in den letzten Wochen verzeichnen, ist abzusehen, dass sich früher oder später mehr Leute zu dem Thema MT4/ entwicklung EA etc melden. Ich denke darunter werden auch Programmierer sein. Wir haben mit Alex das Thema schon mal im Kleinen durchexerziert und alle fanden es sinnvoll, eine Kennzeichnungeinzuführen.
Sollten sich später weitere Entwickler melden, die bei dem einen oder anderen Projekt mitwirken wollen, dann könnten die diese Standards gleich übernehmen.


Ich start einfach mit einer Diskussionsgrundlage:

Dateinamen (wie von FinGeR vorgeschlagen):
Der erste Buchstabe identifiziert den Typ:
Indikatoren ... "iMeinIndikator.mql4"
Experts ... "eMeinEA.mql4"
Script ... "sMeinScript.mql4"
Includedatei ... "hMeineInclude.mql4"
Library ... "lMeine Lib.mql4" (das ist ein kleines L)

Zum Code selber:
  • " /* */ " Kommentare werden nur zum debuggen verwendet und bleiben nicht dauerhaft im Code.
  • Vor jeder Funktion gibt es einen Kommentarblock, der kurz die Aufgabe der FUnktion beschreibt, und Information über die Parameter und den Rückgabewert enthält.
  • Kommentare und Variablennamen werden grundsätzlich in englisch/deutsch geschrieben (an sich wird immer englisch verwendet, ich finde aber, das man in einer deutschen Community auch ruhig sich auf deutsch einigen sollte)
  • Alle Funktionen aus einer library beginnen mit einem eindeutigen Identifier der Library (wie zB "tb" für TradeBox)
Zu den Variablen/Funktionsnamen im speziellen:
  • durch #define definierte Konstante in Großbuchstaben mit Underlines
  • globale Variablen durchgehend klein, mit underlines und einem Underline am Schluss
  • lokale Variablen durchgehend klein mit underlines ohne abschließendem underline
  • Funktionsnamen mit kleinem Anfangsbuchstaben und rest Kapitälchen
  • Parameter beginnen mit großem Anfangsbuchstaben und Kapitälchen (oder underlines?)
Zum allgemeinen Stil:
  • Variablen werden direkt bei der Deklaration initialisiert, auch wenn es eine Dummy-initialisierung ist.
  • es sollten sprechende Variablennamen verwendet werden (int i,j,k; ist nicht sprechend ;)
  • Es ist auf korrekte Einrückung zu achten (if und zugehörige else immer auf der gleichen Einrückungsstufe, innerhalb von Blöcken wird eingerückt etc.)
  • zwischen Funktionen zur leichteren Lesbarkeit "//------"
Das ist soweit eigentlich ein Auszug aus der Codingconvention für C++ wie ich es gelernt hab auf der Uni ;)
Bis jetzt hab ich damit recht gute Erfahrungen gemacht.
Aber ist wie gesagt nur eine Diskussiongrundlage. :laugh:
Ich denke diese Codingconvention sollte auch keine Liste von Ver- und Geboten sein, sondern nur eine Liste von Empfehlungen wodurch gemeinsamer Code bzw. hier veröffentlichter Code für die anderen schneller lesbar wird.
So Sachen wie "Funktionen dürfen nicht mehr als 75 Zeilen haben" etc. würd ich sagen lassen wir weg ;)

kleines Beispiel:

#import "lTradeBox.ex4"  int tbSendOrder(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit, string comment,int magic, datetime expiration,int max_retries= -1);#import#define MAGIC_NUMBER 1#define ALLOWED_SLIPAGE 3extern int ParameterEins = 0;extern string NameOfSymbol = "EURUSD";double global_stop_=0;//----------------------------------------------------------------------------// berechnet den neuen Stop und macht Requotes// @param foo: beschränkt die Anzahl der Requotes// @param bar: der neue Stop// @return: Wert des neuen Stopsdouble newStop(int foo, double bar){  int lokale_variable=0;  double temp_stop=1.0;  if(bar < 0)  {	Print("RTFM");	return(0);  }  else  {	temp_stop= bar;  }    for(lokale_variable= 0; lokale_variable < foo; lokale_variable++)  {	RefreshQuotes();	temp_stop= MathMin(temp_stop,Bid);  }  return(temp_stop);}//----------------------------------------------------------------------------int start(){  global_stop_= newStop(1,global_stop_);  tbSendOrder(Symbol(),OP_SELLSTOP,1,Bid,ALLOWED_SLIPAGE,global_stop_,0,"Demo Order",MAGIC_NUMBER,0,-1);  return(0);}

  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 1 Member:
Krawummska

#2 Krümel

Krümel

    User

  • *_skilled
  • 1,757 posts
  • 3754 thanks

Posted 27 January 2009 - 03:14 PM

Ich bin da relativ leidenschaftslos, da ich schon fast alles benutzen durfte/musste inklusive der ungarischen Notationsabwandlung von Microsoft. :laugh:
Spricht man hier.
Eine Vereinheitlichung erleicht in jedem Fall das Codeverständnis und die Möglichkeit, den Code untereinander zu diskutieren, vorausgesetzt, jeder Coder hält sich dran und die Codenutzer lesen die Namensregeln auch mal ;).
  • 0
Wer nichts weiß, muss alles glauben.

Wichtig:
Alle von mir gemachten Aussagen und Antworten auf Fragen entsprechen lediglich meiner persönlichen Meinung und stellen keinerlei Rechts- oder Anlageberatung dar.

Thanked by 1 Member:
Krawummska

#3 whipsaw

whipsaw

    Founder

  • Management
  • 13,622 posts
  • 41351 thanks
  • Wohnsitz:Germany

Posted 27 January 2009 - 04:17 PM

Ich start einfach mit einer Diskussionsgrundlage:


:laugh:


Da ich absolut keine Ahnung habe, wo der Thread am besten hingehört, start ich ihn einfach mal im Allgemein.


Ich glaube, im Augenblick ist er hier gut aufgehoben, oder? Später werden wir ihn in's Lab verschieben, da es primär ein Thema ist, womit sich die Coder beschäftigen.
Danke an der Stelle für die Mühe, die Du Dir gemacht hast.

Eine Vereinheitlichung erleicht in jedem Fall das Codeverständnis und die Möglichkeit, den Code untereinander zu diskutieren, vorausgesetzt, jeder Coder hält sich dran und die Codenutzer lesen die Namensregeln auch mal ;).


Sehe ich auch so.
Ich denke es ist den Versuch wert. Möglicherweise ist es zu früh, zu umständlich, schläft wieder ein... Ich weiss es nicht.
Schön wäre es dennoch, wenn wir gemeinsam an Projekten arbeiten, dass wir das in der bzw. einer für alle Entwickler passenden Form anwenden.
Ein Anfang ist gemacht und das ist, was zählt. Wie heißt es so schön, "Rom wurde auch nicht an einem Tag erobert".

Danke Mythos für den Vorschlag, Krümel für das Feedback!


Ich bin da relativ leidenschaftslos, da ich schon fast alles benutzen durfte/musste inklusive der ungarischen Notationsabwandlung von Microsoft. :sad:
Spricht man hier.



Ich hätte jetzt etwas anderes erwartet... :laugh:

Bei der ungarischen Notation handelt es sich um eine von Programmierern verwendete Namenskonvention zur Wahl von Bezeichnern für Variablen, Funktionen usw.

Der Name rührt zum einen daher, dass der Erfinder der Konvention, Charles Simonyi, ein Ungar ist, zum anderen daher, dass die „ungarisch“ notierten Bezeichner tatsächlich eine gewisse Ähnlichkeit zum Ungarischen aufweisen und für Neulinge oft „fremdländisch“ klingen.


Quelle: wikipedia
  • 0

12.5 / E 12° 30' 0'' | 48.6833 / N 48° 41' 0'' CAVEAT EMPTOR

Nanex©2012 - Market Events and Phenomena [ Link ]

 

 

 metatrader-wiki.com

247-365.info
... 24/7 up2the minute news 365 days a year

Community Feeds powered by 



DDOS vs. LLOD

 

 


Thanked by 1 Member:
Krawummska

#4 titanfx

titanfx

    Floor Broker

  • Developer
  • 365 posts
  • 1773 thanks

Posted 27 January 2009 - 07:13 PM

Ich würde bei der Unterscheidung zwischen EA´s und Scripts usw keine Dateinamensänderung vornehmen, sondern im Header es eindeutig zu erwähnen
z.b
//+------------------------------------------------------------------+//|											   Test_Indikator.mq4 |//|										Copyright © 2009, titanfx |//+------------------------------------------------------------------+//| Indikator										   Version: 1.1 |//|------------------------------------------------------------------|//| kurze Beschreibung											   |//+------------------------------------------------------------------+
oder
//+------------------------------------------------------------------+//|											   Test_Indikator.mq4 |//|										Copyright © 2009, titanfx |//+------------------------------------------------------------------+//| ../indicators/Test_Indikator.mq4					Version: 1.1 |//|------------------------------------------------------------------|//| kurze Beschreibung											   |//+------------------------------------------------------------------+

  • 0

Thanked by 1 Member:
Krawummska

#5 titanfx

titanfx

    Floor Broker

  • Developer
  • 365 posts
  • 1773 thanks

Posted 27 January 2009 - 07:16 PM

und auf die Dateiendung achten
bei include files include_file.mqh,
der Rest file.mq4 (nicht file.mql4) :laugh:
  • 0

Thanked by 1 Member:
Krawummska

#6 whipsaw

whipsaw

    Founder

  • Management
  • 13,622 posts
  • 41351 thanks
  • Wohnsitz:Germany

Posted 27 January 2009 - 07:22 PM

Jede Stimme zählt

oder

//+------------------------------------------------------------------+//|											   Test_Indikator.mq4 |//|										Copyright © 2009, titanfx |//+------------------------------------------------------------------+//| ../indicators/Test_Indikator.mq4					Version: 1.1 |//|------------------------------------------------------------------|//| kurze Beschreibung											   |//+------------------------------------------------------------------+


:laugh:
  • 0

12.5 / E 12° 30' 0'' | 48.6833 / N 48° 41' 0'' CAVEAT EMPTOR

Nanex©2012 - Market Events and Phenomena [ Link ]

 

 

 metatrader-wiki.com

247-365.info
... 24/7 up2the minute news 365 days a year

Community Feeds powered by 



DDOS vs. LLOD

 

 


Thanked by 1 Member:
Krawummska

#7 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,482 posts
  • 16713 thanks

Posted 27 January 2009 - 07:43 PM

Ich würde bei der Unterscheidung zwischen EA´s und Scripts usw keine Dateinamensänderung vornehmen, sondern im Header es eindeutig zu erwähnen


i bin für beides. Dann weiß man sofort wenn man ein file herunterläd bzw. nur online den Dateinamen sieht.
Eine allgemeine Kurzbeschreibung im Header find ich super!


und auf die Dateiendung achten
bei include files include_file.mqh,
der Rest file.mq4 (nicht file.mql4) :laugh:


stimmt sorry, hab beim tippen nit mitgedacht ;)
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 1 Member:
Krawummska

#8 titanfx

titanfx

    Floor Broker

  • Developer
  • 365 posts
  • 1773 thanks

Posted 27 January 2009 - 09:14 PM

Was ich noch sinnvpll finde - die Zeilenlänge zu begrenzen.
Bei mir begrenze ich Pragrammcode in der Zeile auf 90 Symbolen
und wenn die Befehlszeile zu lang ist, einfach den Rest der Befehlszeile in die nächste Zeile
übertragen, so dass die Zeilenenden bündig stehen.
Das ist ist auch hilfreich, wenn man den Programmcode ausdrucken möchte.
z.B:
//---- macd counted in the 1-st additional buffer				// max. Lange 90 Symbolen    for(int i=0; i<limit; i++)	  MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,																MODE_EMA,PRICE_CLOSE,i);//---- signal line counted in the 2-nd additional buffer		 // max. Lange 90 Symbolen    for(i=0; i<limit; i++)	  SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

  • 0

Thanked by 1 Member:
Krawummska

#9 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,482 posts
  • 16713 thanks

Posted 27 January 2009 - 09:19 PM

Was ich noch sinnvpll finde - die Zeilenlänge zu begrenzen.


Stimmt, das sollte auch in die "Empfehlungsliste" ;)
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 2 Members:
whipsaw , GoSPvC

#10 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 07 September 2010 - 02:35 PM

Hab diesen Thread erst gerade entdeckt; und er kommt meiner perfektionistischen Ader sehr entgegen. Hab mit vor einiger Zeit eine "eigene" Convention gebastelt. Mit eingeflossen sind die Ungarische und die abgeleitete Microsoft, sowie eigene Layout-Regeln: (Ist für TS5/Equilla entstanden!!!)

Ich mache das per "Präfix - Gruppe-Name-Bezeichnung - Postfix"
z.B. "ldBollingerBandPrice":
- Präfix: ld = lokal double
- Gruppe: Bollinger
- Bezeichnung: Band
- Postfix: Price

oder "liBollingerBandPeriod":
das selbe, nur daß die Variable einen int-Wert enthält und
die Funktion des Wertes ist nicht wie oben Price = Bid, Ask, Last, Open, High, Low, Close oder entsprechend im Chart auf der rechten Skala darzustellen
sondern Period = Periodenangabe, Timebase- oder Timelevel-Angabe.

Ein paar weitere Postfixe, die ich verwende sind: Flag (bei bool oder digital), Count (z.B. in for-next-Schleifen), Date, Time. Bei etwas komplizierteren Berechnungen ist finde ich die Variablen-Funktionen Cash, Lots, Price, Range, Value, Period, und Points sehr hilfreich.

Das ganze ist am Anfang wirklich sehr gewöhnungsbedürftig und es kommt einem sehr aufwendig vor, aber: Wenn man nach einiger Zeit einen älteren Code überarbeiten muß oder einen Fehler sucht und man an diese Schreibweise gewöhnt ist, kann man sich enorm viel Zeit sparen.

Die Variablennamen werden hald wirklich richtig lang. Das ist aber meiner Erfahrung nach der einzige Nachteil.
  • 0
Gruß,
Michi

Thanked by 7 Members:
Krawummska , Rumpel , TraderFox , whipsaw , ronner , Bull68 , Vola

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users