Alle Inhalte von Mythos
-
Texas Hold'em KI
Ja, geht weiter. Leider aufgrund dieser externer Einflüsse derzeit deutlich langsamer als gehofft. Im Moment bastel ich ein bissl an der GUI und dem Game-Modus wodurch man die gesamte Grundlogik einfach auf Korrektheit prüfen kann, andererseits dann auch sieht was die Strategien können... Neue Erkenntnisse gibts vorerst noch nicht.
-
Verbindung von Indikatoren
Nicht ganz:iHighest gibt dir den offset des Bars mit dem höchsten Wert. Im Array "High" sind die Höchststände der einzelnen Bars gespeichert. Somit bekommst du mit dem code einfach nur das höchste Hoch innerhalb der Periode. MaxH = High[ArrayMaximum(AroonBuffer,period,i)]; Zerleg diese Zeile mal in die Einzelteile (mithilfe der Doku), dann wirds du schnell merken warum das nicht funktioniert. Also Schritt für Schritt: Was macht ArrayMaximum und was liefert dir High[...] ?
-
Verbindung von Indikatoren
Genau, du musst die Inputparameter die du als Parameter haben willst einfach per extern auch als Inputparameter definieren... (schöner Satz oder? ;) Und dann im Code statt den "hardcodierten" Werten die Variablen verwenden.
-
Verbindung von Indikatoren
Grüß euch. ich befürchte ihr stellt euch das viel zu kompliziert vor. Arvidsson: Du hast fast Recht mit der Aussage "Es ist genau das Gleiche". Solang die Berechnung innerhalb der Schleife nicht auf Werte zurückgreift die sich während der Ausführung ändern, ist es genau das gleiche. Zur Verdeutlichung, bei der folgenden Berechnung MUSS die schleife die Werte in dieser Richtung durchlaufen weil im jeweils nächsten Durchlauf ein Resultat des vorigen Durchlaufs verwendet wird. int values[6]; values[0]= 1; for(int i= 0;i < 5;i++) { values[i+1]= values[i]+i; } Sind die Berechnungen der einzelnen Durchläufe aber unabhängig dann ist es komplett egal in welcher Reihenfolge man durchläuft. In unserem Fall füllt man die Werte eines Arrays aufgrund von Werten die alle bereits vor Beginn der Schleife feststehen und nicht geändert werden -> Somit komplett unabhängige Berechnungen. Was jedoch nicht gleich ist, ist die anzahl der Durchläufe: Bleiben wir beim Beispiel limit = 5 for(int i = limit; i >= 0; i--) i startet bei 5 und läuft bis 0 also für die Werte 5,4,3,2,1,0 wird die Schleife ausgeführt for(int i= 0;i < limit;i++) hier startet i bei 0, wenn i = 5 ist ist die Bedingung i Das ist in dem Fall der einzige Unterschied. Bzgl Werte von hinten nach vorne schreiben oder umgekehrt: Es ist in dem Fall wie gesagt egal ob ich zuerst den 0ten Wert an die Stelle 0 schreibe und dann den 5ten an die Stelle 5, oder zuerst den 5ten an die Stelle 5 und dann den 0ten an die Stelle 0. Am Ende steht Wert 0 an der Stelle 0 und Wert 5 an der Stelle 5. HTH
-
Verbindung von Indikatoren
schreib einfach mal schritt für schritt was passiert. - Welche werte durchläuft i jeweils? - Welche Werte stehen nach der Schleife im Array? - Hat die Durchlaufrichtung der Schleife etwas mit dem iMAOnArray zu tun?
-
Verbindung von Indikatoren
Hi, eine kleine Bitte: Wenn du jedesmal den gesamten Code einbindest, schließ ihn in detail-tags ein damit der Thread nicht unnötig aufgeblasen wird. bzgl. der Forschleife: das ist eigentlich eine super Gelegenheit um es selber zu lernen. Versuch mal rauszufinden was der Unterschied zwischen den Varianten ist. Dazu benötigt man nur minimales Programmierwissen ;)
-
Verbindung von Indikatoren
Ich empfehle die Referenz des iMA: http://docs.mql4.com/indicators/iMA Du wirst wie gesagt iMAOnArray brauchen ;)
-
Verbindung von Indikatoren
frag einfach mal den compiler ;) der schreit dann entsprechend laut...
-
Verbindung von Indikatoren
sieht auf den ersten Blick nicht falsch aus. Tut es denn was es soll?
-
Verbindung von Indikatoren
Es sieht auf jeden Fall schon viel richtiger aus ;) Ein paar Punkte hast du noch übersehen: der MABuffer muss auch noch als Indexbuffer gesetzt werden damit sich MQL um die Größe und Reihung kümmert. Also IndicatorBuffers(7) und mittels SetIndexBuffer setzen.beim aufruf von iCustom hast du den Offset vergessen (Ist glaub ich der letzte Parameter). Der Indikator wird immer "am aktuellen Bar" aufgerufen, und berechnet die Werte für alle Bars der Vergangenheit die sich geändert haben. IN der aktuellen Form würdest du für die gesamte History den MAWert des aktuellen Bars verwendenBei ArrayMax und ArrayMin verwendest du barOffset was nicht definiert ist, ich vermute du meinst hier "i" Kein Problem, jeder hat einmal angefangen ;) hth
-
Verbindung von Indikatoren
Jein, ich war vorm Fernseher, aber hab nicht fußball gschaut. 0:1 klingt jetzt eh no nit so schlimm :D @Arvidsson: Du vermischt hier die Deklaration einer Funktion und ihren aufruf. int ArrayMaximum(double array[], int count=WHOLE_ARRAY, int start=0) ist die Deklaration, sie gibt an das diese Funktion einen int-Wert zurückgibt, und als Parameter ein double-array (wegen den [] nicht wegen dem Wort "array"), einen int und noch einen int will. Zusätzlich haben Parameter 2 und 3 jeweils einen Defaultwert der verwendet wird wenn er im Code weggelassen wird. Beim Funktionsaufruf schreibst du die Datentypen (int,double,...) nicht mehr dazu und auch die Defaultwerte gehören hier nicht mehr hin. Details dazu gibt es hier: http://book.mql4.com/basics/functions Um den MA in deinen Aroon zu bringen würde ich folgende Vorgehensweise vorschlagen: Der Indikator erhält einen weiteren Buffer der die MA-Werte enthält. Sprich bei jedem start() musst du für die geänderten Bars den MA-Wert (per iMA) in das entsprechende Buffer-array schreiben Von diesem Buffer-array kannst du dann mittels bufferArray[ArrayMaximum(bufferArray,ArPer,barOffset)] das Maximum bzw. entsprechend das Minimum für den Bereich ausrechnen mit dem er Aroon dann arbeiten kann. bzgl. Fisher: gleiches Thema, schau dir am besten nochmal die Kapitel über Arrays und Funktionen durch, dann erklärt sich vieles von allein. hth Edit: ja wenn du einen selbstgeschriebenen Indikator statt dem "StandardMA" verwenden willst, musst du ihn via iCustom einbinden. Details zu iCustom: http://docs.mql4.com/indicators/icustom
-
Verbindung von Indikatoren
Hi, mMn die beste Variante ist es jeweils einen indikator zu machen der ggf. auf den anderen über iCustom zugreift. Also einen eigenen Aroon machen der auf den MA zugreift (hier benötigst du kein iCustom) und dann einen eigenen Fisher der über iCustom auf den eigenen Aroon zugreift.
-
Verbindung von Indikatoren
Hallo und willkommen bei Tom-Next, ich versuche es mal der Reihe nach: 1. Was bedeutet dieser code: IndicatorBuffers(6); SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); Ein Indikator besteht aus mehreren "Buffern" in die Werte geschrieben werden können. Ein Buffer ist hier nichts anderes als eine Liste von Werten wobei jedem Bar im Chart genau 1 Wert zugeordnet ist. Diese werden dann verwendet um den Indikator zu zeichnen. Wie genau sie verwendet werden wird extra definiert. Im Code hier wird zuerstmal festgelegt das dieser Indikator 6 Buffer verwendet. D.h. für jeden Bar im Chart gibt der Indikator 6 Werte an. Damit man jetzt für jeden Bar einen Wert zuweisen kann, muss man die entsprechende Datenstruktur haben. In MQL4 läuft das über Arrays. Weiter oben im Code werden die 6 Arrays für die Buffer deklariert: //---- indicator buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double HighBarBuffer[]; double LowBarBuffer[]; double ArOscBuffer[]; Man beachte das hier keine Größenangabe vorkommt. Durch das verknüpfen des Arrays mit dem Buffer: SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); Kümmert sich MQL4 selbst darum das die Arrays die richtige Größe haben und bei neuen Bars die Werte entsprechend umpositioniert werden. In der start() funktion des Indikators ist garantiert das wir zB mit ind_buffer1[barOffset] immer Zugriff auf denBufferwert beim Bar mit Offset "BarOffset" haben. 2. Wo wird im Aroon auf den aktuellen Kurs zugegriffen: Genau genommen nur in 2 Zeilen: HighBarBuffer[i] = Highest(NULL, 0, MODE_HIGH, ArPer, i); //Periods from HH LowBarBuffer[i] = Lowest(NULL, 0, MODE_LOW, ArPer, i); //Periods from LL Hier wird der entsprechende Buffer auf das HighestHigh bzw. LowestLow der letzen ArPer-Bars gesetzt. Im weiteren Verlauf werden diese 2 Bufferwerte dann weiterverwendet, aber hier ist der einzige Zugriff auf den aktuellen Kurs. Um hier nicht das Höchste Hoch des Kurses sondern eines eigenen Arrays zu erhalten verwendet man am Besten http://docs.mql4.com/array/ArrayMaximum bzw. für das LowestLow http://docs.mql4.com/array/ArrayMinimum 3. Fisher: Hier ist der Zugriff auf den Kurs in dieser Zeile: for (int i = limit; i >= 0; i--) wma0[i] = iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_CLOSE, i); indem der LWMA auf den Price Close angewendet wird. Hier müsste man stattdessen mittels http://docs.mql4.com/indicators/imaonarray den WMA des gewünschten Arrays verwenden. hth
-
Push-Kurse: Frage zu Websockets
Websockets sind ja jetzt eher noch nicht so weit verbreitet. Angeblich kann IE10 bereits Websockets, aber ich würde mal vermuten das es hier hackt. Was spricht gegen Chrome/Firefox? IE ist was neue Technologien angeht (und leider auch bei etablierten Dingen) immer ein massiver Unsicherheitsfaktor.
-
MC PM vote für MPI - Multicomputer
Der Voting Link hat dem link-rewrite scheinbar Probleme gemacht. Wir lassen das prüfen. Damits jetzt lesbar ist hab ich es zu einem "normalen" Link gemacht.
-
Bid Preis anzeigen lassen
Bei variablem Spread AFAIK gar nicht. Der Spread wird leider in der History leider nicht mitgespeichert. Deswegen muss man bei Backtests auch sehr aufpassen mit welchem Spread der BT gefahren wird.
-
Darwin's FX Builder - automatisiertes Finden neuer Trading Systeme - FREE TO USE
Erstmal auch von mir ein "Servus" ;) vorab: ich find das Projekt super, vor allem als Student hat man massig Zeit für sowas und sollte diese auch entsprechend nutzen! Ich bin ehrlich gesagt gerade ein bissl verwirrt bzgl. dem "was macht das Ding genau". Du schreibst es gibt hier überhaupt kein Overfitting, aber gleichzeitig benötigt man Rechenpower um optimale Systeme zu finden. Das ist mMn ein Widerspruch in sich: Entweder du musst backtests und optimierungen fahren (was Rechenpower benötigt) und hast damit ein fitting und die Gefahr des Overfittings ODER es gibt keinerlei Optimierung und das System läuft Out-Of-The-Box dann brauchst du keine Rechenleistung und hast kein Overfitting. Aber ich seh keinen Weg für eine Mischung. Die Taktik "1 Jahr optimieren, aufs nächste Testen" und das für mehrere Jahre, klingt ja an sich gut. Aber wie entscheidest du das Regelwerk welches hier genutzt wird? Wenn ich zB sage ich hab 3 Typen von Systemen "kreuzende SMAs", "kreuzende EMAs", "Abstand von SMAs + Kreuzung von Kalman". Und lass alle 3 mit ihren freien Parametern durch das "1 Jahr optimiern, aufs nächste Jahr testen" - System laufen. Dann schau ich welches der 3 Systeme in den letzten 5 Jahren erfolgreich war und wähle es aus. Ist hier overfitting ausgeschaltet? Nein, denn ich habe ja das "beste" System gewählt. Zugegeben, es ist besser als das klassische Overfitting das die perfekten Equity-curves liefert. Aber wenn du Unmengen an "Systemtypen" derart rechnen lässt, hast du erst recht wieder ein Overfitting auf den Systemtyp der in den letzten Jahren perfekt gepasst hat. Das soll jetzt nicht heißen das so ein System nicht funktionieren kann, ich gebe nur zu Bedenken das (sofern ich es richtig verstanden haben) hier trotzdem (over)fitting stattfindet und man sich dessen bewusst sein muss. Ich bin generell eher skeptisch gegenüber Systemen die zu einem großen Teil vollautomisch festgelegt werden, sei es die Wahl von Parametern rein aufgrund einer Optimierung oder die Auswahl von Systemknoten aufgrund von Backtestingergebnissen. Warum ich das alles schreibe: Ich bin selber eigentlich reiner Programmierer und hab mich viel mit dem Thema vollautomischer Handel beschäftigt. Und als reiner Coder/Systemtechniker/Algorithmiker besteht die Gefahr alles zu sehr algorithmisch zu sehen. Aber vor allem beim Trading und Handelssystemen ist meiner Erfahrung nach echte Tradingerfahrung (also Screentime) nicht zu ersetzen. Ein System das vollautomatisch erfolgreiche Handelssysteme baut mag es theoretisch geben, aber ich habe inzwischen sehr starke Zweifel daran :D (und ja, ich hab versucht es zu finden, nein ich habs nicht gefunden aber auf dem Weg extrem viel gelernt). In diesem Sinne viel Erfolg und lass dich nicht demotivieren! (Aber mit der Vorbestellung der eigenen Insel vielleicht noch ein bissl warten ;) lg mythos
-
Suche / Biete
was es nicht alles gibt... btw. "perfect SEO"... kann ja sein das die Seite super schnell gefunden wird. Aber nach dem SEO war scheinbar kein Geld mehr für gutes Design etc verfügbar
-
Analyse Goldkurs
El cheffe läuft sowieso außer Konkurrenz. :D Btw. Liebe grüße aus Kreta. Shots kommen wenn wir retour sind.
-
Bitcoin-Geschäfte nach einem Jahr steuerbefreit
http://www.heise.de/newsticker/meldung/Berichte-Finanzministerium-erkennt-Bitcoins-an-1937531.html Keine Ahnung was das im Endeffekt bedeutet. Aber klingt nach einem Schritt in Richtung Bitcoins. Hier noch der Originalbeitrag aus der FAZ: http://www.faz.net/aktuell/finanzen/devisen-rohstoffe/digitale-waehrung-deutschland-erkennt-bitcoins-als-privates-geld-an-12535059.html
-
Rette das Video
funktioniert leider nit in allen browsern. aber sonst ziemlich cool :D
-
Texas Hold'em KI
Ja, linear ist deutlich besser als UnitValue :D Es scheint als würden Strategien mit anderen Wertberechnungen nicht dauerhaft erfolgreich sein. Zur super-thight Strategie: Ich hab jetzt eine Strategie mit reingeworfen die Preflop nur mitgeht wenns mindestens den Erwartungswert von AKs hat, und erhöht ca. ab Damenpäarchen. In den weiteren Runde geht die Strategie dann immer mit und erhöht wenn der eigene Erwartungswert über dem Tischwert liegt. Ohne zu bluffen und mit LinearValue ist die Strategie zumindest gegen die anderen Strategien erfolgreich. Gewinnt zwar nur 4% aller Spiele, aber das reicht scheinbar. Aber eine Strategie die schneller mitgeht und erhöht, mit 30% Bluff und LinearValue hat einen ca. 5fachen Chipcount... Derzeit analysieren die strategien übrigens keine Daten der anderen Spieler. Sie spielen wirklich nur die Karten. Auch die Position am Tisch bleibt derzeit unberücksichtigt.
-
Texas Hold'em KI
Aufgrund der Frage hab ich mal die Erwartungswerte ein bissl verglichen. Und es scheint die Unit-Value Bewertung doch nicht optimal zu sein. bzw. je nachdem wie man es sieht. Da aufgrund der geringen W! straight etc. einen sehr hohen Wert haben, ist bei dieser Bewertung zB J10s höher bewertet als ein Assenpaar. Bei der linearen Bewertung ist es andersrum. Wenn ich so drüber nachdenke ist vermutlich die lineare Bewertung doch "logischer" weil die nächsthöhere Hand sollte immer gleichviel mehr Wert sein, egal obs von Königspaar auf Assenpaar wechselt oder von Straße mit König Hoch auf Ass Hoch geht... thx für den Hinweis.
-
Texas Hold'em KI
Nach freizeitbedingter langer Pause gehts wiedermal ein Stück weiter: Wertberechnung: Hier hab ich mich erstmal für die "UnitValue" entschieden. Sprich ich hab jeder Hand den Wert 1/Wahrscheinlichkeit gegeben. Mit einem offset sodass Hände mit gleicher W! aber unterschiedlichen Werten um 1/Wahrscheinlichkeit herum gestreut sind. Dadurch ist der Erwartungswert vor dem Erhalten der Karten gleich 1 (ich verwende die W! für 7 Karten). Warum kann ich ehrlich gesagt nicht genau begründen. Ich hatte das Gefühl das diese Berechnung die "sinnvollste" ist ;) Strategien: Ich hab mal mit einem "Framework" für Strategien angefangen. Sprich es gibt ein Baseclass die gewisse Grundfunktionen zur Verfügung stellt. Diese hat auch schon einen Parameter "bluffProbability". Sprich die Baseclass kann auf "isBluffing" gesetzt werden wodurch sie dann die gesamte restliche Runde erhöht. Keine Ahnung ob das ein guter Ansatz für Bluffs ist, aber es ist mal ein Ansatz ;) Ich hab jetzt mal eine erste simple Strategie implementiert. Diese hat 6 Parameter jeweils für PreFlop, Flop und River/Turn 2 : thresholdCall und thresholdRaise. Wenn EigenerErwartungsWert > TischErwartungswert*threshold ist wird die Aktion ausgeführt. Liegt der Wert unter thresholdCall wird gefolded (außer man kann checken versteht sich). Programm: Zusätzlich zum Adminmode gibt es jetzt einen Strategychecker. Hier lass ich 9 zufällige Strategien gegeneinander Spielen. Nach 1000 games kommen die Strategien mit einem gewissen Mindestchipcount in die nächste Runde, von der besten Strategie wird ein zufälliger "Nachkomme" (als eine Strategie mit ähnlichen Parametern) erzeugt und mitaufgenommen. Der Rest wird mit zufälligen Strategien aufgefüllt. Erste interessante Erfahrung hierbei: Strategien mit geringer Bluffwahrscheinlichkeit überleben zwar 1-2 Runden, aber auf Dauer scheinen nur Strategien zu überleben die mindestens 30% Bluffwahrscheinlichkeit haben. (Geblufft wird aber nur falls man auch callen würde). Die erfolgreichste Strategie jetzt gerade blufft mit 42%. Soweit mal wieder ein kurzer Zwischenstand. Falls jemand ideen für Strategien (vorerst rein Kartenbasiert) hat immer her damit ;)
- Kantox - Peer to Peer FX Hedging