|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zitat:
Ich denke ich muß mir erst mal genauso eine Tabelle machen wie Du sie gemacht hast und danach noch mal von vorne anfangen. AVT |
|
|||
Man kann eine eigene String-Sortierfunktion erstellen. Ich habe es einmal für mich gemacht.
|
|
|||
Also ich geb's erst mal auf - Betonung auf erst mal.
Je mehr ich versuche, desto schlimmer wird es. Aber wenigstens hab ich dabei die Benutzung von struct verstanden (auch wenn sich damit nicht sortiern läßt). Danke erst mal für alle Anmerkungen, ich komme bestimmt noch mal auf dieses Thema zurück. AVT |
|
|||
Da man jede Zahl in einen String umwandeln kann, aber einen String aus Buchstaben nicht in eine Zahl, ist der Weg doch vorgezeichnet.
Es werden alle Zahlen in Strings gewandelt, in ein Array geschrieben und bei Bedarf der Weiterverwendung die Zahlenstrings wieder in numerische Zahlen gewandelt, ggf. sortiert, geändert oder was auch immer, um danach wieder in eine String zu wandeln. Ist nicht unbedingt ein eleganter Weg, aber manchmal muss man halt Umwege gehen, um ans Ziel zu gelangen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Aus Sicht der Datenstrukturierung, also eine Zeile wo unterschiedliche Datentype rein sollen, ist für mich die sauberste Lösung ein struct. Genau dafür wurde die Datenkapselung erfunden. wenn daten zusammen gehören dann legt man sie im besten falle auch zusammen ab. der code wird auch in der regel besser und übersichtlicher. Aus Sicht der Anforderung "sortieren" nach einer Membervariable wird es natürlich schon schwerer da mql seine Grenzen hat bzw die funktion ArraySort() kein compare-argument nimmt. In C++ wäre das sortieren eines struct-arrays anhand einer Membervariable nur ein Einzeiler mit Lambda-Funktion, in mql geht das eher nicht so direkt. Ansatz 1: Man schreibt einen Sortier-algo in mql welcher mit der gewünschten Membervariable gefüttert wird und danach die structs sortiert. ZB quick-sort entsprechend um/nachbauen. https://www.geeksforgeeks.org/quick-sort/ wenn es einfacher sein soll nimm Insertion sort oder Selection sort (sind aber eher nur effizient bei kleinen datenmengen) https://en.wikipedia.org/wiki/Sortin...m#Simple_sorts https://en.wikipedia.org/wiki/Insertion_sort https://en.wikipedia.org/wiki/Selection_sort Ansatz 2: man verzichtet auf den direkten zugriff per index und baut sich zb eine funktion um die sortier-position zu erhalten. man legt das struct-array fix an dann nutzt man diese Datenstruktur ohne dass sich die reihenfolge jemals ändert. will man den genauen sortier-index, muss die funktion diesen ermitteln und gibt dir den zeiger auf das korrekte struct zurück. alternativ legt man in dem struct ein integer an der die nr der sortierreihenfolge hält. man hat dann sowas wie ein alternativen index, der die sortier-position hat. dann müssen bei jeder änderung einer Membervariablen diese werte aktualisiert werden. man könnte evt auch mit einem zweiten array etwas bauen was mit seinem value wie ein wrapper bzw verkettete liste dann aufs ziel verweist, was wiederum dadurch statisch bleiben kann. Ich würde allerdings ganz klar Ansatz 1 bevorzugen da man dann ein sauberen Indexzugriff hat auf die Datenkapselung. Meiner Meinung nach die sauberste Form der Lösung, so nutze ich es selbst für solche Fälle, allerdings eben in einer anderen Sprache daher kann ich dir leider kein nützlichen Code geben. Aber ich denke zu Not: jeder vernünftige Freelancer bekommt das hin. Eine Variante per Stringumwandelungen geht sicher auch aber ist ebenso nicht ganz ohne Umwege. Denn abgesehen vom ganzen Umwandeln, sobald du ArraySort() nutzt, sortierst du immer nur eine deiner Spalten, es müssen aber die anderen Spalten auch sortiert werden und zwar im bezug auf den bestimmten anderen wert ohne den Zeilenbezug zu verlieren. so trivial stelle ich mir das ohne compare-argument im ArraySort() auch nicht vor. lieber daten sauber kapseln und ein Sortier-Algo für struct-arrays schreiben |
|
|||
https://docs.mql4.com/files/filewrite
Dann könnte man die Daten in ne Tabelle kopieren und dort sortieren oder was auch immer damit machen. |
|
|||
Danke für Deine Ausführungen, ich werde erst mal Deine Links abarbeiten (die Geeks-Seite ist super, gut zu verstehen), um eine Übersicht zu kriegen und dann mal genau über Deine Ansätze nachdenken.
Manchmal muß ich einfach mal 'ne Pause machen, damit all der alte Kram aus dem Kopf verschwindet und ich ganz unbelastet neu starten kann. AVT |
|
|||
Falls du dich selbst dran wagen solltest fang am besten erstmal mit einem einfachen sortier-algo wie insertion-sort an der ist noch ein bisschen schneller als selection-sort.
https://www.geeksforgeeks.org/insertion-sort/ Effizientere algos braucht man eh nur wenn es auf performance ankommt, dies kann man sich immer noch irgendwann nachrüsten sollte es zu langsam sein. bei kurzen arrays mit unter 50 Einträgen ist es auch fast egal was man nimmt. Am Ende müssen die Themen arrays, structs sowie der Sortier-algo kombiniert werden, da ist es natürlich zuvor gut wenn die Einzelkomponenten klar sind. Alles natürlich nur wenn du Ansatz 1 verfolgst. Ist immer etwas individuell wer mit welchem Weg am besten zum Ziel kommt. |
|
|||
Grundgerüst funzt jetzt
So, ich glaube ich habe es raus, ist noch nicht alles anklickbar, aber Geburtsjahr und Kosten funktionieren schon. Source im Anhang.
Bin gespannt, ob und was Ihr anzumerken habt. AVT |
|
|||
Liste komplett
So, die kleine Liste ist jetzt komplett, alles funktioniert. Kommentare habe ich alle drin gelassen. Ja, da kann man einiges kürzen, aber Sinn der Sache war ja erst mal, zu verstehen wie das geht.
@Ca$hDigger: ob da irgendwas von den Geekseiten reingeflossen ist, weiß ich nicht (jedenfalls nicht als function) aber Logik auf jeden Fall. Vielleicht hilft es ja irgendwem später mal. AVT |
Lesezeichen |
|
|