Wednesday 13 September 2017

C Scharf Exponentiell Gleitender Durchschnitt


Ein möglicher Ansatz hier ist, eine Methode zu haben, die den Kernel zurückgibt. Von dem, was ich sehen kann, sind Eingaben zu dieser Methode Kerneltyp. ich. Und andere Eingaben. Ein einfacher Ansatz wäre: Das ist natürlich schrecklich, schrecklich rau, und es kann viel Verbesserungen gemacht werden, aber es ist beabsichtigt, nur den Punkt zu erreichen. Ich würde eine Schnittstelle verwenden, um einen Kernel darzustellen, und Klassen, die pro Kernel abgeleitet wurden. In meiner Erfahrung, das produziert ausreichend lesbaren und pflegbaren Code, aber theres immer Raum für Verbesserungen. Antwortete am 1. August um 20: 39Exponential Moving Average - EMA BREAKING DOWN Exponential Moving Average - EMA Die 12- und 26-Tage-EMAs sind die beliebtesten Kurzzeitdurchschnitte und sie werden verwendet, um Indikatoren wie die gleitende durchschnittliche Konvergenzdivergenz zu schaffen ( MACD) und dem prozentualen Preisoszillator (PPO). Im Allgemeinen werden die 50- und 200-Tage-EMAs als Signale von Langzeittrends verwendet. Händler, die technische Analysen verwenden, finden bewegte Durchschnitte sehr nützlich und aufschlussreich, wenn sie richtig angewendet werden, aber schaffen Verwüstung, wenn sie unsachgemäß verwendet oder falsch interpretiert werden. Alle gleitenden Mittelwerte, die üblicherweise in der technischen Analyse verwendet werden, sind ihrer Natur nach hintere Indikatoren. Folglich sollten die Schlussfolgerungen, die aus der Anwendung eines gleitenden Durchschnitts auf eine bestimmte Marktkarte gezogen werden, darin bestehen, eine Marktbewegung zu bestätigen oder ihre Stärke anzugeben. Sehr oft, bis zu der Zeit, in der eine gleitende durchschnittliche Indikatorlinie eine Änderung vorgenommen hat, um einen bedeutenden Marktzugang zu reflektieren, ist der optimale Markteintritt bereits vergangen. Eine EMA dient dazu, dieses Dilemma zu einem gewissen Grad zu lindern. Weil die EMA-Berechnung mehr Gewicht auf die neuesten Daten setzt, umarmt sie die Preisaktion etwas fester und reagiert daher schneller. Dies ist wünschenswert, wenn eine EMA verwendet wird, um ein Handelseingangssignal abzuleiten. Interpretation der EMA Wie alle gleitenden durchschnittlichen Indikatoren sind sie für die Trends in den Märkten besser geeignet. Wenn der Markt in einem starken und anhaltenden Aufwärtstrend ist. Die EMA-Indikatorlinie zeigt auch einen Aufwärtstrend und umgekehrt für einen Down-Trend. Ein wachsamer Trader wird nicht nur auf die Richtung der EMA-Linie achten, sondern auch auf das Verhältnis der Änderungsrate von einem Bar zum nächsten. Zum Beispiel, da die Preiswirkung eines starken Aufwärtstrends beginnt zu glätten und umzukehren, beginnt die EMAs-Änderungsrate von einem Bar zum nächsten zu verkleinern, bis zu diesem Zeitpunkt die Indikatorlinie abflacht und die Änderungsrate Null ist. Wegen der nacheilenden Wirkung, bis zu diesem Punkt, oder sogar ein paar Takte vorher, sollte die Preisaktion bereits umgekehrt sein. Daraus folgt, dass die Beobachtung einer konsequenten Abnahme der Änderungsrate der EMA selbst als Indikator verwendet werden könnte, der dem Dilemma, das durch die nacheilende Wirkung der sich bewegenden Mittelwerte verursacht wurde, weiter entgegenwirken könnte. Gemeinsame Verwendungen der EMA EMAs werden häufig in Verbindung mit anderen Indikatoren verwendet, um signifikante Marktbewegungen zu bestätigen und ihre Gültigkeit zu beurteilen. Für Händler, die intraday und schnell bewegte Märkte handeln, ist die EMA mehr anwendbar. Häufig verwenden Händler EMAs, um eine Handelsvorspannung zu bestimmen. Zum Beispiel, wenn ein EMA auf einer Tageskarte einen starken Aufwärtstrend zeigt, kann eine Intraday-Trader-Strategie sein, nur von der langen Seite auf einem Intraday-Chart zu handeln. Es sieht mir wie die Verwendung von gestern EMA, wenn es der erste Tag ( Und folglich gibt es kein gestern) kann auf verschiedenen Daten basieren, je nachdem, welche Artikel Sie lesen. Ich bin kein Aktienexperte, also bin ich gerade dabei, was ich gelesen habe. Ich lese in dem Dummies-Artikel, mit dem ich verknüpft bin, dass es so gemacht werden kann, wie ich dir gezeigt habe und das ist mit den ersten Tagen, die den Wert als Quotenstudien EMAquot schließen. Sie können auch einen Durchschnitt der Schlusstage über den Zeitraum (SMA, ich vermute). Aber es sieht mir so aus, dass es nur für den ersten berechneten Wert verwendet wird (und als quadriert EMAquot in der Formel verwendet wird), nicht wie du es gemacht hast. Also, in Ihrem Screenshot von Ihrem vorherigen Beitrag, dass SMA3-Wert auf 1020, 27.733, würde nicht in der Spalte für EMA3 auf 1020 platziert werden, aber es würde in der Berechnung für EMA3 auf 1018 als quotyesterdays EMAquot verwendet werden. Also, während die SMA3 eine Null für 1018 und 1019 hat, würde die EMA3 NICHT dort Nullen haben. Die EMA3 für diese 2 Termine sollte 28.017 und 27.909 sein. Also, in meinem Code, wo ich die vorherigen EMAs auf SMVClose ausgelegt habe, können wir es wie folgt ändern: Auch hier basiert das auf dem, was ich gelesen habe und in dem Dummies-Artikel es auch so zeigt. Ich denke wirklich, das ist was du willst. Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 21, 2014 5:33 PM Dies wird so viel einfacher sein, wenn Sie Ihren Code ändern, um ListltEmaDatagt zu verwenden, wie ich bereits in einem erwähnt habe Vorherige antwort Heres was ich vorher vorgeschlagen hatte: gtgtadd die SMA Eigenschaften zu dieser Datenklasse. Ich habe die Klasse EmaData genannt, aber das ist, weil ich dachte, dass du nur EMA-Werte kalkulierst, aber du kannst weiter gehen und die SMA-Eigenschaften dazu hinzufügen. Dann ändern Sie Ihre Methoden, um die gleichen ListltEmaDatagt zu verwenden, um zuerst SMA und dann EMA zu berechnen (youll wahrscheinlich benötigen Sie mehrere Schleifen durch die Liste).ltlt So, sobald Sie durch die Liste geschleift und Ihre SMA-Werte berechnet haben, dann mit dem richtigen SMA-Wert für Ihr Start-EMA wird viel einfacher. Verwenden Sie einfach die gleiche Looping-Code zeigte ich in einer früheren Antwort auf die EMA zu berechnen (aber verwenden Sie eine andere Start-EMA auf SMA basiert, anstatt der Art, wie ich es tat). Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 19, 2014 11:33 AM Wann immer Sie sich brauchen, um Code zu vereinfachen, denken Sie immer an die Schaffung einer neuen Methode, um einige der Code in. Was ich tat, wurde die repetitive Code in eine neue Methode gesetzt: Also, anstatt all das in deiner ursprünglichen Schleife zu tun, nennst du einfach die neue Methode anstatt: Ist das nicht so viel sauberer Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 21, 2014 5:33 AM Samstag, 20. Dezember 2014 5:44 PM Alle Antworten Nach deinem Titel hast du Exponential Moving Average erwähnt, meinst du EMA in PowerPivot. Wenn ja, gibt es ein spezielles Forum für Ihr Problem, hier ist der Link, SQL Server gt Power Pivot. Gtgt ich versuche aber ich habe es nicht in c wie ich in vb gemacht habe (auch es ist sehr sehr sehr langsam in vb) und das Ergebnis in c ist anders dann vb Also was willst du erreichen Du willst den Code ändern, den du gepostet hast In zu Cor irgendetwas sonst haben Sie einen schönen Tag Wir versuchen, besser zu verstehen Kunden Ansichten über soziale Unterstützung Erfahrung, so dass Ihre Teilnahme an diesem Interview-Projekt wäre sehr dankbar, wenn Sie Zeit haben. Vielen Dank für die Hilfe machen Community-Foren ein großartiger Ort. Klicken Sie HIER, um an der Umfrage teilzunehmen. Mittwoch, Dezember 03, 2014 7:03 Über Ihre Fragen in Zusammenfassung 1. C und VB-Code für die gleiche EMA-Algorithmen Umsetzung geben ein anderes Ergebnis. 2. Sie VB Code ist sehr langsam. Für die erste Frage. Gibt es ein Fehler-Ergebnis Wenn ja können Sie den C-Code teilen, wie Sie den EMA-Algorithmus implementieren, um mir einen lokalen Test zu machen. Es wäre sehr dankbar, wenn Sie detailliertere Informationen geben. Für die zweite Frage Wir versuchen, besser zu verstehen Kunden Ansichten über soziale Unterstützung Erfahrung, so dass Ihre Teilnahme an diesem Interview-Projekt wäre sehr dankbar, wenn Sie Zeit haben. Vielen Dank für die Hilfe machen Community-Foren ein großartiger Ort. Klicken Sie HIER, um an der Umfrage teilzunehmen. Donnerstag, Dezember 04, 2014 10:17 AM Im immer noch nicht sicher, was deine Frage ist, aber ich vermute, dass es etwas mit Zellfarbe zu tun hat, basierend auf dem Vergleich einiger Berechnungen, denke ich, dass der Vergleich anders ist als in VB Das einzige, was ich denken kann, um Sie zu fragen ist: Sind Ihre Werte als doppelt oder dezimal gespeichert Doubles sind nicht gut, wenn Vergleiche, während Sie nicht haben, dass Problem mit Dezimalstellen. Sie sollten Ihre Daten definitiv als Dezimalvariablen speichern. Heres ein Blog-Post Ich schrieb über das Thema: Bonnie DeWitt C MVP Freitag, 5. Dezember 2014 4:40 PM Zeiträume 3 Multiplikator: (2 (Zeiträume 43 1)) EMA x Multiplikator 43 EMA (Vortag) Ich möchte Um die EMA-Formel mit der Komma-Txt-Datei anzuwenden und sie in datagridview anzuzeigen, indem sie ein einzelnes Element als Flow 2- durch alle Elemente (wird das letzte Ereignis des Datensatzes erhalten) als Flow nach der Berechnung werde ich die Strömungsbedingung verwenden, um die Farbe zu erhalten Die datagridview die Daten, die als txt-Datei verwenden Sie halten immer das gleiche Zeug immer und immer wieder. Das hilft keinem von uns herauszufinden, wo genau du ein Problem hast. Könnten Sie nur erklären, wo Sie stecken und nicht wiederholen die Bilder oder die Daten wieder Weve schon gesehen, dass eine Gazillion mal. Wenn die Vergleiche arent richtig sind, könnte es etwas mit doppelter vs Dezimal zu tun haben, wie ich schon früher gesagt habe. Wenn du auf die Daten in einer Textdatei steckst, dann welchen Teil bist du auf stecken Wenn du auf die Anzeige von Daten in einem Raster steckst, dann wo genau das Problem ist, wenn es nicht so ist, was ist die Frage, die du beantwortet hast Im sicher bin ich nicht der einzige, der dadurch verwirrt ist. Bonnie DeWitt C MVP Freitag, Dezember 05, 2014 10:19 PM Du zeigst immer wieder das gleiche Zeug. Das hilft keinem von uns herauszufinden, wo genau du ein Problem hast. Könnten Sie nur erklären, wo Sie stecken und nicht wiederholen die Bilder oder die Daten wieder Weve schon gesehen, dass eine Gazillion mal. Wenn die Vergleiche arent richtig sind, könnte es etwas mit doppelter vs Dezimal zu tun haben, wie ich schon früher gesagt habe. Wenn du auf die Daten in einer Textdatei steckst, dann welchen Teil bist du auf stecken Wenn du auf die Anzeige von Daten in einem Raster steckst, dann wo genau das Problem ist, wenn es nicht so ist, was ist die Frage, die du beantwortet hast Im sicher bin ich nicht der einzige, der dadurch verwirrt ist. Bonnie DeWitt C MVP Wie man EMA berechnet (exponentieller gleitender Durchschnitt) Die Quelldaten sind Komma txt Datei Samstag, Dezember 06, 2014 5:24 AM Ich verstehe die Formel jetzt aus dem Link, den du gepostet hast, die Formel selbst ist ziemlich einfach. Aber was für ein Teil davon hast du ein Problem mit dem Lesen aus der Textdatei oder was mit den Zahlen zu tun, sobald du sie aus der Textdatei gelesen hast oder wie man sie in einem Raster anzeigt. Wie wäre es damit. Warum zeigst du uns nicht Teile deines Codes, speziell das Teil, das du mit Schwierigkeiten hast. Das könnte für alle einfacher sein, damit wir nicht darüber nachdenken müssen, was du wissen musst. Und nur für die Heck von ihm, ich googeln quotcalculate ema cquot und fand einige Links, die helfen könnten. Ich weiß nicht sicher, denn ich kann nicht herausfinden, welchen Teil du anhast, aber sieh sie aus: Der letzte Artikel nutzt eine kostenlose Open Source Bibliothek namens TA-Lib, Technical Analysis Library (Theres ein Link zum Klicken auf die Artikel). Bonnie DeWitt C MVP Bearbeitet von BonnieB MVP, Moderator Samstag, Dezember 06, 2014 6:06 Uhr Klarstellung Samstag, Dezember 06, 2014 06:05 Uhr Hast du versucht, deinen Code im Debugger zu betreten, gleich nach dem Lesen in der Textdatei Foreach durch die Zeilen, Ihr if: if (ComName SplitString0) wird immer falsch sein, youve initialisiert ComName zu einem leeren String. ComSize wird also immer null und dein nächster für Loop wird auch nichts tun. Also, theres dein Problem genau dort. Ich habe versucht, Ihren Code zu laufen und das erste, was ich getan habe, wurde ein Debugger-Haltepunkt gesetzt, nachdem er in der Textdatei gelesen hatte. Das ist, wie ich dieses Problem gefunden habe. Versuchen Sie mit dem Debugger, um Ihren Code zu durchlaufen. Es wird Ihnen helfen, die Probleme leichter zu finden. Bonnie DeWitt C MVP Samstag, Dezember 06, 2014 3:39 PM Ich ändere den Code nur die ComName Show in der DataGridView3 und der Rest nicht zeigen, aber wenn ich in die Zelle klicken, wird es zeigen und wenn ich auf andere klicken, wird es zeigen Und der vorherige wird wieder versteckt das Ergebnis, dass ich bekomme ist SMA (einfach gleitender Durchschnitt) nicht für EMA (exponentieller gleitender Durchschnitt) Samstag, Dezember 06, 2014 5:26 PM nur die ComName Show in der DataGridView3 und der Rest nicht zeigen Aber wenn ich in die Zelle klicke, wird es zeigen und wenn ich auf einen anderen klicke, wird es zeigen und der vorherige wird wieder versteckt Ich sehe das Verhalten nicht. Alles zeigt sich in meinem Raster. Im Designer habe ich einfach ein DataGridView auf meine Form gelegt, ging in die Eigenschaften für das Raster, dann in die Spalten-Sammlung und fügte die 6 Spalten hinzu. Ich habe nichts anderes gemacht, und alles zeigt sich gut. Sie müssen etwas anderes in Ihrem Raster tun, das das Verhalten verursacht, das Sie sehen, aber ich bin nicht sicher, von der Oberseite meines Kopfes, was könnte das verursachen. Vielleicht sind deine Spalten arent breit genug oder hast du irgendwelche Formatierungen in ihnen gemacht oder bist du mit irgendeiner Art von Zeilen - oder Zelle-Ereignissen umzugehen, die vielleicht ein paar komische Sachen machen könnten Bonnie DeWitt C MVP Samstag, 06. Dezember 2014 5:58 PM Ich werde es überprüfen Vielen Dank Samstag, Dezember 06, 2014 6:19 PM Du bist willkommen. Halten Sie uns auf Ihrem Fortschritt geholt Bonnie DeWitt C MVP Samstag, Dezember 06, 2014 10:14 PM für DataGridView3 arbeitet jetzt für die Formel funktioniert nicht und ich versuche dies auch, aber beide nicht das arbeiten, was ich nicht erreichen kann Die erste EMA ( Vortag) (Summe der letzten drei (enger Preis) 3) Ich sollte den engen Preis als Anfang der EMA verwenden, also wird es (27.1) Stand von 27.733 der grüne sein) unter Berücksichtigung des Endes der Periode Zeit (wie wenn EMA von 3 Tagen wird die letzten beiden Zeilen haben als (0) weil ist weniger die 3 Ich denke, dass youre sagen, dass die grüne für EMA3 sollte 27.1 statt 27.33, aber die letzten beiden sind korrekt bei 0. Ist das richtig Wenn Also, ich habe eine einfache Lösung für Sie Im nicht sicher, welche der beiden Code-Snippets, die Sie gerade in Ihrem letzten Beitrag gezeigt haben, sind die, die Sie jetzt verwenden, aber Im mit dem Code von Ihrem vorherigen Post (vor dem letzten) Sie müssen tun, ist die folgenden Änderungen zu machen: Das sollte es tun, es hat für mich gearbeitet mit der Version von Code Im mit Bonnie DeWitt C MVP Sonntag, Dezember 07, 2014 4:46 PM Es funktioniert nicht, aber unten ist die Daten Aus der Textdatei und dem Trick in EMA (Vortag) wie bekommst du den Anfang von 1, indem du den engen Preis benutzt hast, wie du in deinem letzten Beitrag 2 getan hast. Mit einfachem gleitendem Durchschnitt kannst du es bitte beschreiben. Ich gebe Zeit ein 3 Multiplikator: (2 (Zeitperioden 43 1)) EMA x Multiplikator 43 EMA (Vortag) Ich möchte die EMA-Formel mit der Komma-Txt-Datei anwenden und sie in datagridview 1- durch Einzelposten als flow 2 anzeigen lassen - durch alle Artikel (wird das letzte Ereignis des Datensatzes erhalten) als Flow die Daten mit txt-Datei für weitere Informationen über EMA nicht, wenn ich den ganzen Code, den ich in großen txt-Datei habe, wird es sehr langsam Vielen Dank Für all deine Hilfe schätze ich es wirklich, aber nicht für Textdatei zu arbeiten und dies der erste Beitrag, der das EMA-Lesen aus der Komma-Datei löscht. Ich suche das Internet, aber ich habe es nicht gefunden. Auch wenn ich es durch den obigen Code getan habe, der es immer noch nicht richtig gemacht hat, habe ich den einfachen gleitenden Durchschnitt in der Art, wie ich oben kodiert habe, aber es ist nicht effizient. Es ist sehr langsam für großen Rekord gibt es jQuery aber ich brauche es als c so suche ich für verschiedene Code, der sehr große Aufzeichnung mit der Bedingung der Datagridview Zelle Farbe wie unten int DLaetRow DataGridView3 behandeln kann. Reihen. Count - 2 if (ema3 gt Math. Abs ((((2) (smvClose)) 100) 43 (smvClose))) DataGridView3. Zeilen DLaetRow. Zellen 3. Stil. BackFarbe Farbe. LightGreen sonst if (ema3 lt Math. Abs ((((2) (smvClose)) 100) - (smvClose))) DataGridView3. Zeilen DLaetRow. Zellen 3. Stil. BackFarbe Farbe. Red Edited by newandold Dienstag, Dezember 09, 2014 9:33 PM Dienstag, Dezember 09, 2014 9:32 PM OK, ich habe endlich etwas Zeit, dies zu tun, und ich hätte gedacht, es so zu tun, von Anfang an. Erstellen Sie eine EmaData-Klasse, um die berechneten Werte für jede Zeile von Daten zu halten, und verwenden Sie ein ListltEmaDatagt, um sie alle zu halten. Dann können Sie alle Berechnungen in einer Schleife durch die Daten durchführen. Heres, was ich am Ende mit: Bonnie DeWitt C MVP Samstag, 13. Dezember 2014 5:59 PM Vielen Dank für Ihre Zeit und helfen, es ist schnell Code war es durch die Verwendung von engen Preis getan, aber es war nicht der letzte enge Preis als Start es Brauche einige Änderungen bitte als Flow danke diese großartige Arbeit und bitte darf ich das auch zu 2 von allen Artikeln haben (bekomme das letzte Event des Rekordes) als Flow danke so sehr ich schätze es wirklich Edited by newandold Samstag, 13. Dezember , 2014 9:59 PM Ich habe die Informationen darüber, wie man EMA aus diesem Link zu berechnen: Ich halte die quotDummiesquot Bücher als autorisierende Quellen. Wenn man sich das Raster ansieht, zeigen sie für die Berechnung, nirgends gibt es Nullen für irgendwelche der EMA-Berechnungen. Also, das ist, warum du es nicht mit meinem Code sehst. Wenn du sie null machen willst, musst du nur den Code ändern, um ihn für den entsprechenden Eintrag auf Null zu setzen (ich weiß wirklich nicht, warum du das willst, aber es scheint kein Standardergebnis für EMA zu sein): Dein Zweite Frage ist einfach eine Frage der Erlangung der letzten Tage Eintritt aus der SMVList, die wäre SMVListSMVList. Count - 1. Im sicher können Sie herausfinden, wie man das bekommen und legte es in diesem zweiten Raster (EMA Analyse). Bonnie DeWitt C MVP Samstag, 13. Dezember 2014 10:17 Entschuldigung, ich habe in meinem vorherigen Beitrag etwas falsch geschrieben. Da die SMVList in umgekehrter chronologischer Reihenfolge ist, wäre der letzte Datumseingang tatsächlich zuerst in der Liste, also willst du als SMVList0 aussehen. Ich wollte auch meinen Kommentar über die Nullen hinzufügen, die nicht in die EMA-Berechnungen gehören. Es scheint sinnvoll zu sein mit den SMA-Berechnungen, die du vorher getan hast, aber ich sehe es immer noch nicht sinnvoll mit EMA-Berechnungen (wieder, das ist nach dem Dummies-Buchlink, weil ich persönlich absolut nichts über EMA weiß). Bonnie DeWitt C MVP Sonntag, Dezember 14, 2014 2:42 AM wie über diese ein 2- von allen Artikel (bekommt die neueste Veranstaltung der Platte) als Flow immer letzte Veranstaltung für alle Artikel wie oben Ich teste es aber wie Sie sehen Unten Bearbeitet von newandold Sonntag, 14. Dezember 2014 4:02 AM Sonntag, Dezember 14, 2014 3:51 AM Yeah, gut, ich habe offensichtlich sie beide rückwärts, didnt ich traurig Aber du solltest wohl dieses herausfinden können dich selber. Aber ich möchte nur darauf hinweisen, dass dies alle anderen Berechnungen aufschraubt, da die Formel auf die vorherigen Tage beruht EMA-Berechnung (die nicht Null sein sollte, aber es ist, wenn man diese Änderung anlegt). Ich denke nicht, dass das sinnvoll ist. Hast du den Link gesehen, den ich in den Dummies-Artikel gepostet habe, stecke die Werte aus der Tabelle aus dieser Verknüpfung in deine Textdatei ein und sehe, dass mein ursprünglicher Code mit dem übereinstimmt, was er in der Tabelle zeigt. Aber wenn du darauf bestanden hast, sie null zu machen, dann nehme ich an, dass wir das herumfinden könnten, indem wir uns die vorherigen Tage EMA machen. Gehen Sie es auf diese Weise stattdessen: Ich bin immer noch nicht damit einverstanden, aber was weiß ich? Bonnie DeWitt C MVP Sonntag, Dezember 14, 2014 5:47 AM Danke für deine Mühe das Ergebnis war nicht wie ich brauche oder korrigiere. Aber für den Code war es sehr gut für die Geschwindigkeit des Ladens in datagradview. Ich bekomme die einfache gleitende Durchschnitt 2- erstellen Liste der (einfache gleitenden Durchschnitt) lassen Sie uns nehmen EMA3 a - wird den Wert der letzten sma als den ersten Wert von ema in der Berechnung verwenden, aber beide haben die gleiche Zeit wie 3 ich hinzufügen Pic, um es zu erklären, auch ich versuche es, es mit deinem Code zu tun. Bearbeitet von newandold Montag, 15. Dezember 2014 7:56 PM Sorry, dass ich hier nicht mehr Zeit verbringen kann. Du änderst immer was du willst, oder zumindest scheint es mir so zu sein. Das Beste, was ich jetzt sagen kann, ist, die SMA-Eigenschaften dieser Datenklasse hinzuzufügen. Ich habe die Klasse EmaData genannt, aber das ist, weil ich dachte, dass du nur EMA-Werte kalkulierst, aber du kannst weiter gehen und die SMA-Eigenschaften dazu hinzufügen. Dann ändern Sie Ihre Methoden, um die gleichen ListltEmaDatagt zu verwenden, um zuerst SMA und dann EMA zu berechnen (youll wahrscheinlich benötigen Sie mehrere Schleifen durch die Liste). Ich denke nicht, dass es zu schwer zu tun ist. Aber ich glaube, du kannst es herausfinden. Bonnie DeWitt C MVP Dienstag, den 16. Dezember 2014 12:25 Du weicherst, was du willst, oder zumindest scheint es mir so aus meinem alten Posten zu kommen. Der erste EMA (Vortag) letzter Schlusskurs oder (Summe der letzten drei) (Schließen Sie Preis) 3) auch von altem Pfosten für mehr Informationen über EMA, wenn Sie mich mögen, um Ihren Pfosten als Antwort zu markieren, das ich das tun werde, aber für andere whos, das nach EMA sucht, wird falsches Resultat sein Bearbeitet durch newandold Dienstag, 16. Dezember 2014 5 : 24 PM Es sieht zu mir wie die Verwendung von gestern EMA, wenn es am ersten Tag (und folglich gibt es kein gestern) kann auf verschiedenen Daten basieren, je nachdem, welche Artikel Sie lesen. Ich bin kein Aktienexperte, also bin ich gerade dabei, was ich gelesen habe. Ich lese in dem Dummies-Artikel, mit dem ich verknüpft bin, dass es so gemacht werden kann, wie ich dir gezeigt habe und das ist mit den ersten Tagen, die den Wert als Quotenstudien EMAquot schließen. Sie können auch einen Durchschnitt der Schlusstage über den Zeitraum (SMA, ich vermute). Aber es sieht mir so aus, dass es nur für den ersten berechneten Wert verwendet wird (und als quadriert EMAquot in der Formel verwendet wird), nicht wie du es gemacht hast. Also, in Ihrem Screenshot von Ihrem vorherigen Beitrag, dass SMA3-Wert auf 1020, 27.733, würde nicht in der Spalte für EMA3 auf 1020 platziert werden, aber es würde in der Berechnung für EMA3 auf 1018 als quotyesterdays EMAquot verwendet werden. Also, während die SMA3 eine Null für 1018 und 1019 hat, würde die EMA3 NICHT dort Nullen haben. Die EMA3 für diese 2 Termine sollte 28.017 und 27.909 sein. Also, in meinem Code, wo ich die vorherigen EMAs auf SMVClose ausgelegt habe, können wir es wie folgt ändern: Auch hier basiert das auf dem, was ich gelesen habe und in dem Dummies-Artikel es auch so zeigt. Ich denke wirklich, das ist was du willst. Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 21, 2014 5:33 PM Donnerstag, 18. Dezember 2014 4:52 PM Vielen Dank, dass Sie das Excel, um es zu erklären Edited by newandold Freitag, 19. Dezember 2014 2:00 PM Freitag, Dezember 19, 2014 1:51 PM Ich teile den C-Code Edited by newandold Freitag, 19. Dezember 2014 10:09 PM Freitag, 19. Dezember 2014 10:08 PM Ich bekomme den letzten Wert von SMA (einfacher gleitender Durchschnitt ), Um der Beginn der EMA-Berechnung als das Foto unten nicht gut als Ihre Art der Codierung wird es nicht schnell sein, wie Ihr Code, aber sie zu löschen, wo die Berechnung der EMA (die erste (ema3prev) jetzt, wie man Zeile anwenden Ema3 Math. Runde ((Zeile SMVClose k3) 43 (ema3prev (1 - k3)), 3. MidpointRounding AwayFromZero Freitag, 19. Dezember 2014 10:23 Dies wird so viel einfacher sein, wenn du deinen Code änderst Ich habe die Klasse EmaData angerufen, aber das ist, weil ich dachte, dass Sie nur EMA-Werte berechnen würden, aber Sie können voran gehen, wie ich schon früher erwähnt habe Und füge die SMA-Eigenschaften dazu hinzu. Dann ändern Sie Ihre Methoden, um die gleichen ListltEmaDatagt zu verwenden, um zuerst SMA und dann EMA zu berechnen (youll wahrscheinlich benötigen Sie mehrere Schleifen durch die Liste).ltlt So, sobald Sie durch die Liste geschleift und Ihre SMA-Werte berechnet haben, dann mit dem richtigen SMA-Wert für Ihr Start-EMA wird viel einfacher. Verwenden Sie einfach die gleiche Looping-Code zeigte ich in einer früheren Antwort auf die EMA zu berechnen (aber verwenden Sie eine andere Start-EMA auf SMA basiert, anstatt der Art, wie ich es tat). Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 19, 2014 11:33 PM Das, was ich tat und jetzt funktioniert Ich versuche, EMA5 EMA9 EMA10 hinzuzufügen und so weiter war der Code Sehr lange gibt es kurze Weg und professionelle Art Ich brauche Ihre Berührung dieser Code, dass in echt ist Ihr Code Ich bin dankbar für Ihre Hilfe Samstag, 20. Dezember 2014 3:43 PM Wann immer Sie sich selbst brauchen, um Code zu vereinfachen, immer darüber nachzudenken Eine neue Methode, um einige der Code in. Was ich tat, wurde die repetitive Code in eine neue Methode gesetzt: Also, anstatt all das in Ihrer ursprünglichen Schleife zu tun, rufen Sie einfach die neue Methode statt: Ist nicht so viel sauberer Bonnie DeWitt C MVP Als Antwort von newandold markiert Sonntag, Dezember 20, 2014 5:33 AM Wie bekomme ich es alle Index als immer letztes Ereignis für alle Artikel wie oben, wenn ich es versuche Ich bekomme alle Aufzeichnungen von beiden (DATATWO UND ONEDATA) danke für deine Unterstützung und ich teste deine Code-Modifikation in großen Daten für Einzelstück und war schnell genug Samstag, 20. Dezember 2014 10:23 Uhr Wenn du die Daten bekommen möchtest Bei beiden Artikeln kannst du ein Wörterbuch verwenden, um mehrere Listen zu speichern. Du musst deine MAByItem () - Methode ändern, um ein ListltEmaDatagt zurückzugeben, also würde es so aussehen: Und dann würdest du diese Methode etwas anders nennen, als du es vorher angerufen hast: Möglicherweise musst du irgendwelche anderen Dinge in deinem MAbyitem ändern () - Methode, weil ich nicht weiß, wie Sie das andere Raster zeigen möchten, mit dem wir gearbeitet haben. Vielleicht rufen Sie die AddDataToGrid () - Methode hier anstatt in der MAbyitem () - Methode auf. Und vielleicht übergeben Sie das Raster, das Sie als Parameter der AddDataToGrid () - Methode benötigen. Aber irgendwie solltest du in der Lage sein, den Rest davon herauszufinden, hoffe ich. Bonnie DeWitt C MVP Sonntag, den 21. Dezember 2014 12:28 Ich versuche, den Code zu benutzen, aber ich habe mehr als 300 Artikel aber nicht funktioniert Edited by newandold Sonntag, 21. Dezember 2014 12:10 PM Sonntag, 21. Dezember 2014 11 : 43 AM Ich habe gesagt, du musst deinen Code etwas mehr ändern, der Hauptpunkt meiner letzten Antwort war die Verwendung eines Wörterbuchs, um die Listen für beide Items zu speichern. Ich wusste nicht, über Ihre AllItems () - Methode, aber es muss offensichtlich ein bisschen anders als Ihre MAbyitem () - Methode sein. Gehen Sie zurück, um das Wörterbuch zu verwenden, wie ich in meiner vorherigen Antwort gezeigt habe, aber benutze es in deiner AllItems () - Methode wie folgt: Bonnie DeWitt C MVP Sonntag, Dezember 21, 2014 4:34 PM Ich füge den Code als unten diesen Fehler hinzu Ich habe Sonntag, Dezember 21, 2014 7:32 PM Welche Methode ist die Ausnahme, die in mir nicht verstanden wird, warum du nicht mit meinem Code, dem Teil, wo alle Berechnungen in einer Methode eingekapselt sind, die CalcEmaX () - Methode, die ausgerufen wird Die Methode CalcEma (). Ich dachte, du warst einverstanden, dass es ok gearbeitet hat, also warum benutzt du den anderen Code Was ist svmTmpInt200 Das ist etwas Neues. Basierend auf Ihren Namenskonventionen scheint das zu deuten, dass es einen Wert von 200 hat. Ich denke, das Problem ist, dass SMVList. Count - svmTmpInt200 negativ ist (weil dein Count weniger als 200 ist), also seit youre Looping rückwärts, ist ich Immer größer sein als dieser Wert, und folglich hat die Schleife keinen Haltepunkt und ich hält dekrementierend, bis es auch negativ ist, dann bekommst du die Ausnahme. Post einige relevante Code bitte. Bonnie DeWitt C MVP Sonntag, Dezember 21, 2014 9:02 PM Ich füge nur noch mehr Periode hinzu und der ganze Code ist hier so ist es für Signal-Element für die (i gt SMVList. Count - svmTmpInt200) Ich versuche, es mit anderen zu ersetzen So dass nicht auf bestimmte Periode beschränkt werden, ja ich teste einen anderen Weg, den Sie Ihren Code als meine Referenz Edited by newandold Sonntag, 21. Dezember 2014 9:44 PM Sonntag, 21. Dezember 2014 9:28 PM im alten Code, der langsam war , Ich war mit dem Header der datagridview Sonntag, 21. Dezember 2014 10:16 PM Sie haben schon meinen Code ausprobiert. Sie sagten, es hat gut geklappt und war schnell. Und doch, du benutzt es nicht so, wie ich es geschrieben habe. Du bist viel besser mit den Methoden CalcEmaX () und AddDataToGrid (), die all diesen redundanten Code enthält (vor allem alle ifs). Dein Code ist zu chaotisch sonst (und du wolltest das vermeiden). Aber das ist nicht wo dein aktuelles Problem ist, denn das Problem liegt dort, wo du versucht hast, den smaX zu berechnen, um deinen emaX Startpunkt zu verwenden. Ich denke, Sie können eine CalcSmaX () - Methode erstellen, um die SMA-Berechnung Code ein wenig sauberer auch, aber wieder das ist nicht das Problem. Das Problem ist, dass du nicht 200 Zeilen in deiner Liste hast, und doch hast du eine Schleife bekommen, die davon ausgeht, dass du es brauchst. Du musst deine Grenzen überprüfen: ändere das: für (int i SMVList. Count - 1 i gt SMVList. Count - svmTmpInt200 I -) zu diesem: int max SMVList. Count - svmTmpInt200 if (max lt 0) max 0 für (int i SMVList. Count - 1 i gt max i--) Bonnie DeWitt C MVP Montag, 22. Dezember 2014 12: 11 Uhr danke für deine Hilfe ja der Code ist nicht so gut, aber ich werde wieder neu starten Montag, 22. Dezember 2014 8:35 PM Du bist willkommen Ich hoffe, dass du das bald erledigen kannst 0) Bonnie DeWitt C MVP Dienstag, Dezember 23, 2014 4:42 PM Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen? Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere UserVoice-Seite, um sich anzumelden und zu bewerten. Dev-Center Lernressourcen Wenn die Leistung dieses Codes entscheidend ist, könnte es sinnvoll sein, Haufen-Zuweisungen für Kerzen zu vermeiden. Ich denke, die vernünftigste Art, das zu tun, wäre Kerze in eine Struktur zu machen. Obwohl veränderliche Wertarten sind böse. So würde ich auch die Kerze umgestalten, um unveränderlich zu sein. Dies bedeutet auch, dass die Implementierung von newestCandle sich ändern muss, wahrscheinlich in ein Paar Doppelfelder (oder alternativ eine separate veränderliche und rücksetzbare Klasse). Ich sehe keine andere potenzielle Leistung Problem in Ihrem Code. Aber wenn es um Leistung geht, sollten Sie sich immer auf Profiling verlassen, nicht Ihre (oder jemand elses) Intuition. Auch ich mag keine Namen Ihrer Methoden. Speziell: ValueUpdated. Methodennamen sollten in der Regel in der Form etwas tun, nicht etwas passiert ist. Also ich denke, ein besserer Name wäre UpdateValue. Hinzufügen. Ändern. Dies sind die beiden grundlegenden Operationen von Ihrem MovingAverage und ich denke, dass diese Namen nicht ausdrücken die Bedeutung gut. Ich würde sie so etwas wie MoveAndSetCurrent und SetCurrent nennen. beziehungsweise. Obwohl diese Benennung bedeutet, dass die grundlegenden Operationen eher Move und SetCurrent sein sollten.

No comments:

Post a Comment