Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 6 Tagen
- Sundaytrad...
vor 6 Tagen
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 506
Gesamt: 506
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 10.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Mich wundert schon mal, dass das der Compiler nicht moniert:
... beim Print war alles wie ich es wollte
Da werden einem zweidimensionelen Array Wertepaare einer dreidimensionalen Struktur zugewiesen. Das sollt eigentlich nicht gehen.

Um es mal auszuschreiben, welche Array-Variablen es tatsächlich gibt:
... Super ich mach das erst mal so wie Du
Das sind insgesamt 15 Variablen, denen Werte zugewiesen werden sollten.

Was wird da eigentlich bei Deiner Schreibweise in das Array geschrieben?
traderdoc
Vielen Dank traderdoc !!
Ich denke ich muß mir erst mal genauso eine Tabelle machen wie Du sie gemacht hast und danach noch mal von vorne anfangen. AVT
  #12 (permalink)  
Alt 11.04.20
Mitglied
 
Registriert seit: Jun 2011
Ort: Minsk, Weißrussland
Beiträge: 87
Bobs befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
Habe ich zuerst gedacht, aber MT kann keine Strings sortieren, im Endeffekt wird alles sozusagen "sichtbar" sowieso ein String, zum Sortieren muß ich aber Zahlen haben und ich weiß nicht, ob mir dabei nicht der Beschreibungsstring verloren geht. AVT
Man kann eine eigene String-Sortierfunktion erstellen. Ich habe es einmal für mich gemacht.
  #13 (permalink)  
Alt 12.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

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
  #14 (permalink)  
Alt 13.04.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #15 (permalink)  
Alt 13.04.20
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
Die Werte gehören immer zeilenweise zusammen, fest stehen die Anzahl der Zeilen und der Indexname, veränderlich sind die Zahlen.
Wenn ich nun z.B. nach Trades sortiere, müssen ja die anderen Werte trotzdem noch zu dem betreffenden Index gehören,
das heißt, die gesamte Zeile rückt an eine andere Stelle.
Es gibt wie immer viele mögliche Wege

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
  #16 (permalink)  
Alt 13.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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.
  #17 (permalink)  
Alt 13.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Es gibt wie immer viele mögliche Wege
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
  #18 (permalink)  
Alt 13.04.20
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

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.
  #19 (permalink)  
Alt 14.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Smile 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
Angehängte Dateien
Dateityp: mq4 testSortArray.mq4 (52,6 KB, 2x aufgerufen)
  #20 (permalink)  
Alt 17.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Smile 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
Angehängte Dateien
Dateityp: mq4 testSortArray.mq4 (73,6 KB, 2x aufgerufen)
Thema geschlossen

Lesezeichen


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 00:21 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------