Wednesday 25 October 2017

Fortran 90 Gleitender Durchschnitt


Fortran Jobs Der Nachfrage-Trend von Job-Anzeigen zitiert Fortran als Anteil aller IT-Jobs mit einem Spiel in der Kategorie Programmiersprachen. Fortran Gehaltstabelle Diese Grafik zeigt den dreimonatigen gleitenden Durchschnitt für Gehälter, die in permanenten IT-Jobs zitiert wurden und zitiert Fortran in Großbritannien. Fortran Gehalt Histogramm Diese Tabelle bietet ein Gehalt Histogramm für IT-Arbeitsplätze zitiert Fortran über die 3 Monate bis 31 Januar 2017 innerhalb Großbritanniens. Fortran Top 22 Stellenangebote Die folgende Tabelle zeigt die Nachfrage und stellt einen Leitfaden für die in den IT-Arbeitsplätzen zitierten mittleren Gehälter dar, die Fortran innerhalb des Vereinigten Königreichs in den drei Monaten bis zum 31. Januar 2017 zitieren. Die Spalte Rangänderung gibt Anzeichen für die Veränderung der Nachfrage Innerhalb jedes Standortes auf der Grundlage der gleichen 3 Monate Zeitraum im vergangenen Jahr. Rang Änderung auf der gleichen Zeit Letztes Jahr Matching Permanent IT Job-Anzeigen Median Gehalt Letzte 3 MonateIntroduction zu Fortrans Intrinsische Funktionen Zuweisung: Lesen Sie Kapitel 4 und Beispiel trig. f. Lange bevor es wissenschaftliche Taschenrechner gab, erkannten Wissenschaftler und Ingenieure, dass sie einfache Wege benötigten, um Ergebnisse von gemeinsamen Funktionen wie Sinus, Kosinus, natürlicher Logarithmus und vieles mehr zu erhalten. Diese Bedürfnisse wurden mit jedem Fortran-Standard berücksichtigt, was zu einer langen Liste von eingebauten Funktionen (intrinsische Funktionen), um Ihr Leben zu erleichtern. Ich werde nicht alle Funktionen in der aktuellen Norm (Fortran 90), sondern gibt Ihnen einige wichtige in diesem und späteren Diskussionen. Die Syntax für die Verwendung von intrinsischen Funktionen kann Ihnen sehr vertraut sein, da sie auch in Spreadsheets erscheinen. Wenn ich die Grße einer Geschwindigkeit in Kasten A1 und den Winkel zwischen der Geschwindigkeit und der x-Achse (im Bogenmaß) in Kasten A2 eingebe, kann ich die x-Komponente der Geschwindigkeit in Kasten A3 mit der Formel A1COS ( A2). In Fortran könnte dieses Ergebnis mit einer Zuweisungsanweisung wie velxvelcos (angrad) erhalten werden. Bevor wir weitergehen, brauchen wir eine einfache Definition. Im obigen Beispiel ist angrad ein Argument der Funktion cos. Some Basisintrinsische Funktionen abs (x) - Absoluter Wert von x iabs (I) - Absoluter Wert einer ganzen Zahl I (vor-90 Fortran abs hat keine ganzzahligen Argumente.) Sin (X) - Liefert den Sinus von x (x ist keine Ganzzahl) cos (x) - Liefert den Cosinus von x (x ist keine Ganzzahl) tan (x) - Liefert den Tangens von x Exp (x) - Berechnet den natürlichen Logarithmus von x (x ist keine ganze Zahl und gt 0) log10 (x) - berechnet die Basis. (X ist nicht eine ganze Zahl) log (x) - berechnet e (2.7183) Logarithm von x (x ist keine ganze Zahl und gt 0) asin (x) - Liefert den arcsine (inversen Sinus) von x (x ist real) acos (x) - Liefert den Arkusinus (inverser Cosinus) von x (x ist (X) - Gibt die Quadratwurzel von x zurück (x ist keine ganze Zahl und gt 0) nint (x) - Liefert den nächsten Knoten Integer zur reellen Zahl x min (x1, x2) - Gibt das Minimum von x1, x2 zurück. (Argumente müssen vom selben Typ sein) max (x1, x2) - Gibt das Maximum von x1, x2 zurück. (Argumente müssen vom gleichen Typ sein) Die Max - und Min-Funktionen sind ungewöhnlich, da sie eine beliebige Anzahl von Argumenten annehmen. Die generischen Formulare min und max waren nicht ein zwingendes Teil des Fortran 77-Standards, sondern befinden sich in Fortran 90. In vielen Fortran-77-Codes sehen Sie Funktionen: amax1 (x1, x2) - Liefert das Maximum von x1, x2. Als reelle Zahl (Argumente sind real) amax0 (i1, i2) - Gibt das Maximum von i1, i2 zurück. Als reelle Zahl (Argumente sind ganzzahlig) max0 (i1, i2.) - Liefert das Maximum von i1, i2. Als Ganzzahl (Argumente sind Integer) max1 (x1, x2.) - Liefert das Maximum von x1, x2. Als Integer (Argumente sind real) Ähnliche Formen erschienen für min. Darüber hinaus sind log und log10 optionale Formulare in Fortran 77. Ältere Programme verwenden oft alog und alog10, um den Funktionsnamen mit einem Buchstabencharakteristikum eines echten anstatt eines ganzzahligen Wertes zu starten. Im Allgemeinen war Fortran 77 davon abhängig, dass Sie speziell eine Funktion auswählen, die für die Argumenttypen und die Art des zurückzugebenden Wertes geeignet ist. Während zum Thema Fortran 90 intrinsische Funktionen, ist es wert, zwei, die Sie in den Beispielbereichen gesehen haben, zu bemerken. Und eine verwandte Funktion, die in Programmen, die auf einer Reihe von Maschinen. (X) - Gibt die kleinste positive Zahl zurück, die auf dem aktuellen Computer für ein reales Argument dargestellt werden kann x Riesige (x) - Gibt die größte positive Zahl zurück, die auf dem aktuellen Computer für das reelle Argument x precision (x) - Returns dargestellt werden kann Die auf dem aktuellen Rechner für das reale Argument zur Verfügung steht x Einige Kommentare zur Geschwindigkeit Sie müssen erkennen, dass trigonometrische, log und exp intrinsische Funktionen relativ teuer sind in Bezug auf die benötigte Zeit. Wenn Sie den Wert von sin (0.1) häufig benötigen, verwenden Sie die Funktion einmal in einer Zuordnung wie: sin0p1 sin (0.1) und verwenden dann die neue Variable sin0p1, wo sin (0.1) benötigt wird. Die hohen Kosten von exp und log werden ebenfalls berücksichtigt In der Benutzung des Bedieners. Normalerweise führt ein Ausdruck wie xy dazu, dass der Compiler Code entsprechend exp (ylog (x)) einfügt. Allerdings sind die meisten Compiler intelligent genug zu erkennen, dass, wenn y eine Ganzzahl ist, können sie eine oder mehrere Multiplikationen (x2xx, x3xxx, etc.). Solche Compiler enthalten die Logik, um den Break-Even-Punkt, ausgedrückt als Größe von y, zwischen einer solchen Multiplikation und der Kombination von exp und log zu kennen. Es ist immer schneller zu programmieren x2 als x2.0, also seien Sie vorsichtig in Ihrer Wahl der Typen für Exponenten. Geschwindigkeit ist auch ein Faktor in der Existenz der sqrt intrinsic Funktion. Dies ist ein spezieller Algorithmus für die Berechnung der Quadratwurzel einer Zahl, die immer schneller als die Erhöhung der Zahl auf die 0,5 Leistung ist. Wenn die Option existiert, verwenden Sie sqrt (x) anstatt x0.5. Nach meiner Erfahrung ist sqrt (sqrt (x)) schneller als x0.25. Während wir auf dem Thema Geschwindigkeit sind, sollten wir die relative Geschwindigkeit der anderen Operationen überprüfen. Hinzufügen und Subtrahieren sind immer am schnellsten. Multiplizieren kommt an zweiter Stelle. Divide ist langsamer als multiplizieren, aber deutlich schneller als sqrt. Wenn Sie durch eine Variable x häufig (mehr als 2 oder 3 Mal) zu teilen, ist es eine gute Idee, eine andere Variable sagen, rx mit der Gleichung rx1.x, dann multiplizieren mit rx, wo Sie durch x geteilt haben würde. Ein Beispielprogramm mit intrinsischen Funktionen Starten Sie das Beispielprogramm trig. f für Beispiele für intrinsische Funktionen und als nützlichen Beginn zu Ihrer letzten Hausaufgabe. Testen Sie Ihr Wissen über dieses Material mit einigen Fragen zu überprüfen. Eine Ebene nach oben HomeMoving-Mittelwerte - Einfache und exponentielle Bewegungsdurchschnitte - Einfache und exponentielle Einführung Die gleitenden Mittelwerte glatten die Preisdaten, um einen Trend-Indikator zu bilden. Sie prognostizieren nicht die Kursrichtung, sondern definieren die aktuelle Richtung mit einer Verzögerung. Moving Averages Lag, weil sie auf vergangenen Preisen basieren. Trotz dieser Verzögerung, gleitende Durchschnitte helfen, glatte Preis-Aktion und Filter aus dem Lärm. Sie bilden auch die Bausteine ​​für viele andere technische Indikatoren und Overlays, wie Bollinger Bands. MACD und dem McClellan-Oszillator. Die beiden beliebtesten Arten von gleitenden Durchschnitten sind die Simple Moving Average (SMA) und die Exponential Moving Average (EMA). Diese Bewegungsdurchschnitte können verwendet werden, um die Richtung des Trends zu identifizieren oder potenzielle Unterstützungs - und Widerstandswerte zu definieren. Here039s ein Diagramm mit einem SMA und einem EMA auf ihm: Einfache gleitende durchschnittliche Berechnung Ein einfacher gleitender Durchschnitt wird gebildet, indem man den durchschnittlichen Preis eines Wertpapiers über einer bestimmten Anzahl von Perioden berechnet. Die meisten gleitenden Mittelwerte basieren auf den Schlusskursen. Ein 5-tägiger einfacher gleitender Durchschnitt ist die fünftägige Summe der Schlusskurse geteilt durch fünf. Wie der Name schon sagt, ist ein gleitender Durchschnitt ein Durchschnitt, der sich bewegt. Alte Daten werden gelöscht, wenn neue Daten verfügbar sind. Dies bewirkt, dass sich der Durchschnitt entlang der Zeitskala bewegt. Unten ist ein Beispiel für einen 5-tägigen gleitenden Durchschnitt, der sich über drei Tage entwickelt. Der erste Tag des gleitenden Durchschnitts deckt nur die letzten fünf Tage ab. Der zweite Tag des gleitenden Mittelwerts fällt den ersten Datenpunkt (11) und fügt den neuen Datenpunkt (16) hinzu. Der dritte Tag des gleitenden Durchschnitts setzt sich fort, indem der erste Datenpunkt (12) abfällt und der neue Datenpunkt (17) addiert wird. Im obigen Beispiel steigen die Preise allmählich von 11 auf 17 über insgesamt sieben Tage. Beachten Sie, dass der gleitende Durchschnitt auch von 13 auf 15 über einen dreitägigen Berechnungszeitraum steigt. Beachten Sie auch, dass jeder gleitende Durchschnittswert knapp unter dem letzten Kurs liegt. Zum Beispiel ist der gleitende Durchschnitt für Tag eins gleich 13 und der letzte Preis ist 15. Preise der vorherigen vier Tage waren niedriger und dies führt dazu, dass der gleitende Durchschnitt zu verzögern. Exponentielle gleitende Durchschnittsberechnung Exponentielle gleitende Mittelwerte reduzieren die Verzögerung, indem mehr Gewicht auf die jüngsten Preise angewendet wird. Die Gewichtung des jüngsten Preises hängt von der Anzahl der Perioden im gleitenden Durchschnitt ab. Es gibt drei Schritte, um einen exponentiellen gleitenden Durchschnitt zu berechnen. Berechnen Sie zunächst den einfachen gleitenden Durchschnitt. Ein exponentieller gleitender Durchschnitt (EMA) muss irgendwo anfangen, so dass ein einfacher gleitender Durchschnitt als die vorherige Periode039s EMA in der ersten Berechnung verwendet wird. Zweitens, berechnen Sie die Gewichtung Multiplikator. Drittens berechnen Sie den exponentiellen gleitenden Durchschnitt. Die folgende Formel ist für eine 10-tägige EMA. Ein 10-Perioden-exponentieller gleitender Durchschnitt wendet eine 18,18 Gewichtung auf den jüngsten Preis an. Eine 10-Perioden-EMA kann auch als 18.18 EMA bezeichnet werden. Eine 20-Periode EMA wendet eine 9,52 wiegt auf den jüngsten Preis (2 (201) .0952). Beachten Sie, dass die Gewichtung für den kürzeren Zeitraum mehr ist als die Gewichtung für den längeren Zeitraum. In der Tat, die Gewichtung sinkt um die Hälfte jedes Mal, wenn die gleitende durchschnittliche Periode verdoppelt. Wenn Sie uns einen bestimmten Prozentsatz für eine EMA zuordnen möchten, können Sie diese Formel verwenden, um sie in Zeiträume zu konvertieren, und geben Sie dann diesen Wert als den EMA039s-Parameter ein: Nachstehend ist ein Kalkulationstabellenbeispiel für einen 10-tägigen einfachen gleitenden Durchschnitt und ein 10- Tag exponentiellen gleitenden Durchschnitt für Intel. Einfache gleitende Durchschnitte sind geradlinig und erfordern wenig Erklärung. Der 10-Tage-Durchschnitt bewegt sich einfach, sobald neue Preise verfügbar sind und alte Preise fallen. Der exponentielle gleitende Durchschnitt beginnt mit dem einfachen gleitenden Mittelwert (22.22) bei der ersten Berechnung. Nach der ersten Berechnung übernimmt die Normalformel. Da ein EMA mit einem einfachen gleitenden Durchschnitt beginnt, wird sein wahrer Wert erst nach 20 oder späteren Perioden realisiert. Mit anderen Worten, der Wert auf der Excel-Tabelle kann sich aufgrund des kurzen Rückverfolgungszeitraums von dem Diagrammwert unterscheiden. Diese Kalkulationstabelle geht nur zurück 30 Perioden, was bedeutet, dass der Einfluss der einfachen gleitenden Durchschnitt hatte 20 Perioden zu zerstreuen. StockCharts geht mindestens 250 Perioden (typischerweise viel weiter) für seine Berechnungen zurück, so dass die Effekte des einfachen gleitenden Durchschnitts in der ersten Berechnung vollständig abgebaut sind. Der Lagfaktor Je länger der gleitende Durchschnitt ist, desto stärker ist die Verzögerung. Ein 10-Tage-exponentieller gleitender Durchschnitt wird die Preise sehr eng umringen und sich kurz nach dem Kursumschlag wenden. Kurze gleitende Durchschnitte sind wie Schnellboote - flink und schnell zu ändern. Im Gegensatz dazu enthält ein 100-Tage gleitender Durchschnitt viele vergangene Daten, die ihn verlangsamen. Längere gleitende Durchschnitte sind wie Ozeantanker - lethargisch und langsam zu ändern. Es dauert eine größere und längere Kursbewegung für einen 100-Tage gleitenden Durchschnitt, um Kurs zu ändern. Die Grafik oben zeigt die SampP 500 ETF mit einer 10-tägigen EMA eng ansprechender Preise und einem 100-tägigen SMA-Schleifen höher. Selbst mit dem Januar-Februar-Rückgang hielt die 100-tägige SMA den Kurs und kehrte nicht zurück. Die 50-Tage-SMA passt irgendwo zwischen den 10 und 100 Tage gleitenden Durchschnitten, wenn es um den Verzögerungsfaktor kommt. Simple vs Exponential Moving Averages Obwohl es klare Unterschiede zwischen einfachen gleitenden Durchschnitten und exponentiellen gleitenden Durchschnitten, ist eine nicht unbedingt besser als die anderen. Exponentielle gleitende Mittelwerte haben weniger Verzögerungen und sind daher empfindlicher gegenüber den jüngsten Preisen - und den jüngsten Preisveränderungen. Exponentielle gleitende Mittelwerte drehen sich vor einfachen gleitenden Durchschnitten. Einfache gleitende Durchschnitte stellen dagegen einen wahren Durchschnittspreis für den gesamten Zeitraum dar. Als solches können einfache gleitende Mittel besser geeignet sein, um Unterstützungs - oder Widerstandsniveaus zu identifizieren. Die gleitende Durchschnittspräferenz hängt von den Zielen, dem analytischen Stil und dem Zeithorizont ab. Chartisten sollten mit beiden Arten von gleitenden Durchschnitten sowie verschiedene Zeitrahmen zu experimentieren, um die beste Passform zu finden. Die nachstehende Grafik zeigt IBM mit der 50-Tage-SMA in Rot und der 50-Tage-EMA in Grün. Beide gipfelten Ende Januar, aber der Rückgang in der EMA war schärfer als der Rückgang der SMA. Die EMA erschien Mitte Februar, aber die SMA setzte weiter unten bis Ende März. Beachten Sie, dass die SMA über einen Monat nach der EMA. Längen und Zeitrahmen Die Länge des gleitenden Mittelwerts hängt von den analytischen Zielen ab. Kurze gleitende Durchschnitte (5-20 Perioden) eignen sich am besten für kurzfristige Trends und den Handel. Chartisten, die sich für mittelfristige Trends interessieren, würden sich für längere bewegte Durchschnitte entscheiden, die 20-60 Perioden verlängern könnten. Langfristige Anleger bevorzugen gleitende Durchschnitte mit 100 oder mehr Perioden. Einige gleitende durchschnittliche Längen sind beliebter als andere. Die 200-Tage gleitenden Durchschnitt ist vielleicht die beliebteste. Wegen seiner Länge ist dies eindeutig ein langfristiger gleitender Durchschnitt. Als nächstes ist der 50-Tage gleitende Durchschnitt für den mittelfristigen Trend ziemlich populär. Viele Chartisten nutzen die 50-Tage-und 200-Tage gleitenden Durchschnitte zusammen. Kurzfristig war ein 10 Tage gleitender Durchschnitt in der Vergangenheit ziemlich populär, weil er leicht zu berechnen war. Man hat einfach die Zahlen addiert und den Dezimalpunkt verschoben. Trendidentifikation Die gleichen Signale können mit einfachen oder exponentiellen gleitenden Mittelwerten erzeugt werden. Wie oben erwähnt, hängt die Präferenz von jedem Individuum ab. Die folgenden Beispiele werden sowohl einfache als auch exponentielle gleitende Mittelwerte verwenden. Der Begriff gleitender Durchschnitt gilt für einfache und exponentielle gleitende Mittelwerte. Die Richtung des gleitenden Durchschnitts vermittelt wichtige Informationen über die Preise. Ein steigender Durchschnitt zeigt, dass die Preise im Allgemeinen steigen. Ein sinkender Durchschnittswert zeigt an, dass die Preise im Durchschnitt sinken. Ein steigender langfristiger gleitender Durchschnitt spiegelt einen langfristigen Aufwärtstrend wider. Ein sinkender langfristiger gleitender Durchschnitt spiegelt einen langfristigen Abwärtstrend wider. Das Diagramm oben zeigt 3M (MMM) mit einem 150-Tage-exponentiellen gleitenden Durchschnitt. Dieses Beispiel zeigt, wie gut bewegte Durchschnitte arbeiten, wenn der Trend stark ist. Die 150-Tage-EMA sank im November 2007 und wieder im Januar 2008. Beachten Sie, dass es einen Rückgang von 15 nahm, um die Richtung dieses gleitenden Durchschnitts umzukehren. Diese nachlaufenden Indikatoren identifizieren Trendumkehrungen, wie sie auftreten (am besten) oder nach deren Eintritt (im schlimmsten Fall). MMM setzte unten in März 2009 und dann stieg 40-50. Beachten Sie, dass die 150-Tage-EMA nicht auftauchte, bis nach diesem Anstieg. Sobald es jedoch tat, setzte MMM die folgenden 12 Monate höher fort. Moving-Durchschnitte arbeiten brillant in starken Trends. Doppelte Frequenzweichen Zwei gleitende Mittelwerte können zusammen verwendet werden, um Frequenzweiche zu erzeugen. In der technischen Analyse der Finanzmärkte. John Murphy nennt dies die doppelte Crossover-Methode. Doppelte Crossover beinhalten einen relativ kurzen gleitenden Durchschnitt und einen relativ langen gleitenden Durchschnitt. Wie bei allen gleitenden Durchschnitten definiert die allgemeine Länge des gleitenden Durchschnitts den Zeitrahmen für das System. Ein System, das eine 5-Tage-EMA und eine 35-Tage-EMA verwendet, wäre kurzfristig. Ein System, das eine 50-tägige SMA - und 200-Tage-SMA verwendet, wäre mittelfristig, vielleicht sogar langfristig. Eine bullische Überkreuzung tritt auf, wenn der kürzere gleitende Durchschnitt über dem längeren gleitenden Durchschnitt kreuzt. Dies wird auch als goldenes Kreuz bezeichnet. Eine bärische Überkreuzung tritt ein, wenn der kürzere gleitende Durchschnitt unter dem längeren gleitenden Durchschnitt liegt. Dies wird als ein totes Kreuz bekannt. Gleitende Mittelübergänge erzeugen relativ späte Signale. Schließlich setzt das System zwei hintere Indikatoren ein. Je länger die gleitenden Durchschnittsperioden, desto größer die Verzögerung in den Signalen. Diese Signale funktionieren gut, wenn eine gute Tendenz gilt. Allerdings wird ein gleitender Durchschnitt Crossover-System produzieren viele whipsaws in Abwesenheit einer starken Tendenz. Es gibt auch eine Dreifach-Crossover-Methode, die drei gleitende Durchschnitte beinhaltet. Wieder wird ein Signal erzeugt, wenn der kürzeste gleitende Durchschnitt die beiden längeren Mittelwerte durchläuft. Ein einfaches Triple-Crossover-System könnte 5-Tage-, 10-Tage - und 20-Tage-Bewegungsdurchschnitte beinhalten. Das Diagramm oben zeigt Home Depot (HD) mit einer 10-tägigen EMA (grüne gepunktete Linie) und 50-Tage-EMA (rote Linie). Die schwarze Linie ist die tägliche Schließung. Mit einem gleitenden Durchschnitt Crossover hätte dazu geführt, dass drei Peitschen vor dem Fang eines guten Handels. Die 10-tägige EMA brach unterhalb der 50-Tage-EMA Ende Oktober (1), aber dies dauerte nicht lange, wie die 10-Tage zog zurück oben Mitte November (2). Dieses Kreuz dauerte länger, aber die nächste bärige Crossover im Januar (3) ereignete sich gegen Ende November Preisniveaus, was zu einer weiteren Peitsche führte. Dieses bärische Kreuz dauerte nicht lange, als die 10-Tage-EMA über die 50-Tage ein paar Tage später zurückging (4). Nach drei schlechten Signalen, schien das vierte Signal eine starke Bewegung als die Aktie vorrückte über 20. Es gibt zwei Takeaways hier. Erstens, Crossovers sind anfällig für whipsaw. Ein Preis oder Zeitfilter kann angewendet werden, um zu helfen, whipsaws zu verhindern. Händler könnten verlangen, dass die Crossover 3 Tage dauern, bevor sie handeln oder verlangen, dass die 10-Tage-EMA über die 50-Tage-EMA zu bewegen, um einen bestimmten Betrag vor handeln. Zweitens kann MACD verwendet werden, um diese Frequenzweichen zu identifizieren und zu quantifizieren. MACD (10,50,1) zeigt eine Linie, die die Differenz zwischen den beiden exponentiellen gleitenden Mittelwerten darstellt. MACD wird positiv während eines goldenen Kreuzes und negativ während eines toten Kreuzes. Der Prozentsatz-Oszillator (PPO) kann auf die gleiche Weise verwendet werden, um Prozentunterschiede anzuzeigen. Beachten Sie, dass MACD und das PPO auf exponentiellen gleitenden Durchschnitten basieren und nicht mit einfachen gleitenden Durchschnitten zusammenpassen. Diese Grafik zeigt Oracle (ORCL) mit dem 50-Tage EMA, 200-Tage EMA und MACD (50.200,1). Es gab vier gleitende durchschnittliche Frequenzweichen über einen Zeitraum von 12 Jahren. Die ersten drei führten zu Peitschen oder schlechten Trades. Ein anhaltender Trend begann mit der vierten Crossover als ORCL bis Mitte der 20er Jahre. Erneut bewegen sich die durchschnittlichen Crossover-Effekte groß, wenn der Trend stark ist, erzeugen aber Verluste in Abwesenheit eines Trends. Preis-Crossover Moving-Durchschnitte können auch verwendet werden, um Signale mit einfachen Preis-Crossover zu generieren. Ein bullisches Signal wird erzeugt, wenn die Preise über dem gleitenden Durchschnitt liegen. Ein bäres Signal wird erzeugt, wenn die Preise unter dem gleitenden Durchschnitt liegen. Preis-Crossover können kombiniert werden, um innerhalb der größeren Trend Handel. Der längere gleitende Durchschnitt setzt den Ton für den größeren Trend und der kürzere gleitende Durchschnitt wird verwendet, um die Signale zu erzeugen. Man würde bullish Preiskreuze nur dann suchen, wenn die Preise schon über dem längeren gleitenden Durchschnitt liegen. Dies würde den Handel im Einklang mit dem größeren Trend. Wenn zum Beispiel der Kurs über dem gleitenden 200-Tage-Durchschnitt liegt, würden sich die Chartisten nur auf Signale konzentrieren, wenn der Kurs über dem 50-Tage-Gleitender Durchschnitt liegt. Offensichtlich würde ein Schritt unterhalb der 50-Tage gleitenden Durchschnitt ein solches Signal vorausgehen, aber solche bearish Kreuze würden ignoriert, weil der größere Trend ist. Ein bearish Kreuz würde einfach einen Pullback innerhalb eines größeren Aufwärtstrends vorschlagen. Ein Cross-Back über dem 50-Tage-Gleitender Durchschnitt würde einen Preisanstieg und eine Fortsetzung des größeren Aufwärtstrends signalisieren. Die nächste Tabelle zeigt Emerson Electric (EMR) mit dem 50-Tage EMA und 200-Tage EMA. Die Aktie bewegte sich über und hielt über dem 200-Tage gleitenden Durchschnitt im August. Es gab Dips unterhalb der 50-Tage-EMA Anfang November und wieder Anfang Februar. Die Preise schnell zurück über die 50-Tage-EMA zu bullish Signale (grüne Pfeile) in Harmonie mit dem größeren Aufwärtstrend. Im Indikatorfenster wird MACD (1,50,1) angezeigt, um Preiskreuze über oder unter dem 50-Tage-EMA zu bestätigen. Die 1-tägige EMA entspricht dem Schlusskurs. MACD (1,50,1) ist positiv, wenn die Schließung oberhalb der 50-Tage-EMA und negativ ist, wenn die Schließung unterhalb der 50-Tage-EMA liegt. Unterstützung und Widerstand Der Gleitende Durchschnitt kann auch als Unterstützung in einem Aufwärtstrend und Widerstand in einem Abwärtstrend dienen. Ein kurzfristiger Aufwärtstrend könnte Unterstützung nahe dem 20-tägigen einfachen gleitenden Durchschnitt finden, der auch in Bollinger-Bändern verwendet wird. Ein langfristiger Aufwärtstrend könnte Unterstützung nahe dem 200-tägigen einfachen gleitenden Durchschnitt finden, der der populärste langfristige bewegliche Durchschnitt ist. Wenn Tatsache, die 200-Tage gleitenden Durchschnitt bieten kann Unterstützung oder Widerstand, nur weil es so weit verbreitet ist. Es ist fast wie eine sich selbst erfüllende Prophezeiung. Die Grafik oben zeigt die NY Composite mit dem 200-Tage einfachen gleitenden Durchschnitt von Mitte 2004 bis Ende 2008. Die 200-Tage-Support zur Verfügung gestellt, mehrmals während des Vorhabens. Sobald der Trend mit einem Doppel-Top-Support-Pause umgekehrt, der 200-Tage gleitenden Durchschnitt als Widerstand um 9500 gehandelt. Erwarten Sie keine exakte Unterstützung und Widerstandswerte aus bewegten Durchschnitten, vor allem längeren gleitenden Durchschnitten. Märkte werden durch Emotionen, die sie anfällig für Überschreitungen. Statt genauer Ebenen können gleitende Mittelwerte verwendet werden, um Unterstützungs - oder Widerstandszonen zu identifizieren. Schlussfolgerungen Die Vorteile der Verwendung von bewegten Durchschnitten müssen gegen die Nachteile gewogen werden. Moving-Durchschnitte sind Trend nach, oder nacheilende, Indikatoren, die immer einen Schritt hinter sich. Dies ist nicht unbedingt eine schlechte Sache. Immerhin ist der Trend ist dein Freund und es ist am besten, in die Richtung des Trends Handel. Die gleitenden Durchschnitte gewährleisten, dass ein Händler dem aktuellen Trend entspricht. Auch wenn der Trend ist dein Freund, verbringen die Wertpapiere viel Zeit in Handelsspannen, die gleitende Durchschnitte ineffektiv machen. Einmal in einem Trend, bewegte Durchschnitte halten Sie in, sondern geben auch späte Signale. Don039t erwarten, an der Spitze zu verkaufen und an der Unterseite mit bewegten Durchschnitten kaufen. Wie bei den meisten technischen Analysetools sollten die gleitenden Mittelwerte nicht allein verwendet werden, sondern in Verbindung mit anderen komplementären Tools. Chartisten können gleitende Durchschnitte verwenden, um den Gesamttrend zu definieren und dann RSI zu verwenden, um überkaufte oder überverkaufte Niveaus zu definieren. Hinzufügen von Bewegungsdurchschnitten zu StockCharts Diagrammen Gleitende Durchschnitte sind als Preisüberlagerungsfunktion auf der SharpCharts-Workbench verfügbar. Mit dem Dropdown-Menü Overlays können Benutzer entweder einen einfachen gleitenden Durchschnitt oder einen exponentiellen gleitenden Durchschnitt auswählen. Der erste Parameter wird verwendet, um die Anzahl der Zeitperioden einzustellen. Ein optionaler Parameter kann hinzugefügt werden, um festzulegen, welches Preisfeld in den Berechnungen verwendet werden soll - O für die Open, H für High, L für Low und C für Close. Ein Komma wird verwendet, um Parameter zu trennen. Ein weiterer optionaler Parameter kann hinzugefügt werden, um die gleitenden Mittelwerte nach links (vorbei) oder nach rechts (zukünftig) zu verschieben. Eine negative Zahl (-10) würde den gleitenden Durchschnitt auf die linken 10 Perioden verschieben. Eine positive Zahl (10) würde den gleitenden Durchschnitt auf die rechten 10 Perioden verschieben. Mehrere gleitende Durchschnitte können dem Preisplot überlagert werden, indem einfach eine weitere Überlagerungslinie zur Werkbank hinzugefügt wird. StockCharts-Mitglieder können die Farben und den Stil ändern, um zwischen mehreren gleitenden Durchschnitten zu unterscheiden. Nachdem Sie eine Anzeige ausgewählt haben, öffnen Sie die erweiterten Optionen, indem Sie auf das kleine grüne Dreieck klicken. Erweiterte Optionen können auch verwendet werden, um eine gleitende mittlere Überlagerung zu anderen technischen Indikatoren wie RSI, CCI und Volumen hinzuzufügen. Klicken Sie hier für ein Live-Diagramm mit mehreren verschiedenen gleitenden Durchschnitten. Verwenden von Moving-Averages mit StockCharts-Scans Hier sind einige Beispiel-Scans, die die StockCharts-Mitglieder verwenden können, um nach verschiedenen gleitenden Durchschnittssituationen zu scannen: Bullish Moving Average Cross: Diese Scans suchen nach Aktien mit einem steigenden 150-Tage-einfachen gleitenden Durchschnitt und einem bullishe Kreuz der 5 Tag EMA und 35-Tage EMA. Der 150-Tage gleitende Durchschnitt steigt, solange er über seinem Niveau vor fünf Tagen handelt. Ein bullish Kreuz tritt auf, wenn die 5-Tage-EMA bewegt sich über dem 35-Tage-EMA auf überdurchschnittlichen Volumen. Bearish Moving Average Cross: Diese Scans sucht nach Aktien mit einem fallenden 150-Tage einfachen gleitenden Durchschnitt und einem bärischen Kreuz der 5-Tage EMA und 35-Tage EMA. Der 150-Tage gleitende Durchschnitt fällt, solange er unter seinem Niveau vor fünf Tagen handelt. Ein bäriges Kreuz tritt auf, wenn die 5-Tage-EMA unterhalb der 35-Tage-EMA auf überdurchschnittlichem Volumen bewegt. Weitere Studie John Murphy039s Buch hat ein Kapitel gewidmet gleitende Durchschnitte und ihre verschiedenen Verwendungen. Murphy deckt die Vor-und Nachteile der gleitenden Durchschnitte. Darüber hinaus zeigt Murphy, wie bewegte Durchschnitte mit Bollinger Bands und kanalbasierten Handelssystemen funktionieren. Technische Analyse der Finanzmärkte John MurphyAPPENDIX 5 Intrinsische Funktionen in Fortran 90 Es gibt eine große Anzahl von intrinsischen Funktionen und fünf intrinsische Subroutinen in Fortran 90. Ich behandle die numerischen und mathematischen Routinen sehr kurz, da sie nicht von Fortran 77 und geändert werden Sollte daher gut bekannt sein. Dieser Abschnitt basiert auf Abschnitt 13 der ISO-Norm (1991), der eine formalere Behandlung enthält. Wir folgen der Anordnung der verschiedenen Funktionen und Subroutinen im Standard, erklären aber direkt in der Liste. Für eine detailliertere Behandlung verweisen wir auf Metcalf und Reid (1990, 1993). Wenn ein Parameter unten optional ist, wird er in Kleinbuchstaben angegeben. Wenn eine Argumentliste mehrere Argumente enthält, kann die Funktion entweder durch positionsbezogene Argumente oder durch ein Schlüsselwort aufgerufen werden. Das Schlüsselwort muss verwendet werden, wenn ein vorheriges Argument nicht enthalten ist. Schlüsselwörter sind normalerweise die Namen, die unten angegeben werden. Wir haben nicht immer alle natürlichen Beschränkungen auf die Variablen gegeben, zum Beispiel, dass der Rang nicht erlaubt ist, negativ zu sein. Die Funktion PRÄSENT (A) gibt. TRUE zurück. Wenn das Argument A in der Anrufliste ist,.FALSE. Im anderen Fall. Die Verwendung ist im Beispielprogramm in Kapitel 8 des Haupttextes dargestellt. Von Fortran 77 sind ABS, AIMAG, AINT, ANINT, CMPLX, CONJG, DBLE, DIM, DPROD, INT, MAX, MIN, MOD, NINT, REAL und SIGN erhältlich. Darüber hinaus wurden die Fortschritte von CEILING, FLOOR und MODULO zu Fortran 90 hinzugefügt. Nur das letzte ist schwer zu erklären, was am einfachsten mit den Beispielen von ISO (1991) möglich ist. Folgende Funktionen von Fortran 77 können einen Art-Parameter verwenden In AINT (A, Art). Nämlich AINT, ANINT, CMPLX, INT, NINT und REAL. Eine historische Tatsache ist, dass die numerischen Funktionen in Fortran 66 spezifische (verschiedene) Namen in unterschiedlichen Genauigkeiten haben mussten, und diese expliziten Namen sind immer noch die einzigen, die verwendet werden können, wenn ein Funktionsname als Argument übergeben wird. Es folgt eine vollständige Tabelle aller numerischen Funktionen. Die Namen, die mit einem Stern gekennzeichnet sind, dürfen nicht als Argumente verwendet werden. Einige Funktionen, wie INT und IFIX, haben zwei spezifische Namen, die entweder verwendet werden können. Auf der anderen Seite haben einige Funktionen keinen spezifischen Namen. Im folgenden Beispiel verwende ich C für komplexe Gleitkommawerte, D für Gleitkommawerte in doppelter Genauigkeit, I für Ganzzahlen und R für Gleitpunktwerte in Einzelpräzision. Trunkierung ist gegen Null, INT (-3,7) wird -3. Aber die Rundung ist korrekt, NINT (-3,7) wird -4. Die neuen Funktionen FLOOR und CEILING schneiden auf minus bzw. plus unendlich ab. Die Funktion CMPLX kann ein oder zwei Argumente haben, wenn zwei Argumente vorhanden sind, müssen diese vom gleichen Typ sein, aber nicht COMPLEX. Die Funktion MOD (X, Y) berechnet X - INT (XY) Y. Die Vorzeichenübertragungsfunktion SIGN (X, Y) nimmt das Vorzeichen des zweiten Arguments an und setzt es auf das erste Argument ABS (X), wenn Y gt 0 und - ABS (X) wenn Y lt 0. Positive Differenz DIM ist eine Funktion, die ich nie benutzt habe, aber DIM (X, Y) gibt X-Y, wenn dies positiv und Null im anderen Fall ist. Inneres Produkt DPROD andererseits ist eine sehr nützliche Funktion, die das Produkt von zwei Zahlen in der Einzelpräzision als doppelte Präzisionszahl gibt. Es ist schnell und genau. Die beiden Funktionen MAX und MIN sind insofern eindeutig, als sie eine beliebige Anzahl von Argumenten haben können, aber mindestens zwei. Die Argumente müssen vom gleichen Typ sein, sind aber nicht zulässig vom Typ COMPLEX. Genau wie in Fortran 77. Alle trigonometrischen Funktionen arbeiten im Bogenmaß. Die folgenden sind verfügbar: ACOS, ASIN, ATAN, ATAN2, COS, COSH, EXP, LOG, LOG10, SIN, SINH, SQRT, TAN und TANH. Eine historische Tatsache ist, dass die mathematischen Funktionen in Fortran 66 spezifische (verschiedene) Namen in verschiedenen Präzisionen haben mussten, und diese expliziten Namen sind immer noch die einzigen, die verwendet werden können, wenn ein Funktionsname als Argument übergeben wird. Es folgt eine vollständige Tabelle aller mathematischen Funktionen. Im folgenden Beispiel verwende ich C für komplexe Gleitkommawerte, D für Gleitkommawerte in doppelter Genauigkeit, I für Ganzzahlen und R für Gleitpunktwerte in Einzelpräzision. Der Zweck der meisten dieser Funktionen ist offensichtlich. Beachten Sie, dass sie alle nur für Gleitkommazahlen und nicht für Ganzzahlen definiert sind. Sie können daher die Quadratwurzel von 4 als SQRT (4) nicht berechnen. Aber stattdessen können Sie NINT (SQRT (REAL (4))). Bitte beachten Sie auch, dass alle komplexen Funktionen den Hauptwert zurückgeben. Die Quadratwurzel ergibt ein echtes Ergebnis für ein reales Argument in einfacher oder doppelter Genauigkeit und ein komplexes Ergebnis für ein komplexes Argument. So gibt SQRT (-1.0) eine Fehlermeldung (normalerweise bereits zur Kompilierzeit), während Sie die komplexe Quadratwurzel mit den folgenden Anweisungen erhalten können. Das Argument für die üblichen Logarithmen muss positiv sein, während das Argument für CLOG von Null verschieden sein muss. Der Modul für das Argument für ASIN und ACOS muss höchstens 1 sein. Das Ergebnis wird in - pi2, pi2 bzw. 0, pi liegen. Die Funktion ATAN gibt einen Wert in - pi2, pi2 zurück. Die Funktion ATAN2 (Y, X) arctan (y, x) liefert einen Wert in (-pi, pi, falls Y positiv ist, ist das Ergebnis positiv Wenn X negativ ist, ist das Ergebnis negativ, wenn X Null ist, ergibt das Ergebnis plus oder minus pi2, wobei X und Y nicht gleichzeitig gleich Null sein dürfen Die natürliche Begrenzung für die mathematischen Funktionen ist die begrenzte Genauigkeit und Reichweite, was bedeutet, dass zB EXP zu Unterströmungen oder Überläufen bei ziemlich gewöhnlichen Werten des Arguments führen kann Die trigonometrischen Funktionen erhalten sehr niedrige Genauigkeit für große Argumente Diese Einschränkungen ACHAR arbeitet mit dem Standard-ASCII-Zeichensatz, während CHAR mit der Darstellung in dem Computer arbeitet, den Sie verwenden Routinen vergleichen zwei Strings mit Sortierung nach ASCII. Wenn ein String kürzer als der andere ist, werden Leerzeichen am Ende der kurzen Zeichenfolge hinzugefügt. Wenn eine Zeichenfolge ein Zeichen außerhalb des ASCII-Zeichensatzes enthält, ist das Ergebnis implementierungsabhängig. LEN (STRING) gibt die Länge einer Zeichenfolge zurück. Der Variablen STRING muss kein Wert zugewiesen werden. Die erste gibt die Art des aktuellen Arguments zurück, das vom Typ INTEGER, REAL, COMPLEX, LOGICAL oder CHARACTER sein kann. Dem Argument X muss kein Wert zugewiesen werden. Die zweite gibt eine Ganzzahl mit der angeforderten Anzahl von Ziffern zurück, und die dritte gibt die Art für Gleitkommazahlen mit numerischer Genauigkeit mindestens P-Ziffern und einen Dezimal-Exponentenbereich zwischen - R und R zurück. Die Parameter P und R müssen skalare ganze Zahlen sein. Mindestens einer von P und R muss angegeben werden. Das Ergebnis von SELECTEDINTKIND ist eine Ganzzahl von Null und aufwärts, wenn die gewünschte Art nicht verfügbar ist, erhalten Sie -1. Wenn mehrere implementierte Typen die Bedingung erfüllen, wird diejenige mit dem kleinsten Dezimalbereich verwendet. Wenn es noch mehrere Typen oder Arten gibt, die die Bedingung erfüllen, wird diejenige mit der kleinsten Artzahl verwendet. Das Ergebnis von SELECTEDREALKIND ist auch eine Ganzzahl von Null und aufwärts, wenn die gewünschte Art nicht verfügbar ist, wird -1 zurückgegeben, wenn die Präzision nicht verfügbar ist, -2, wenn der Exponentbereich nicht verfügbar ist und -3 wenn keine der Anforderungen stehen zur Verfügung. Wenn mehrere implementierte Typen die Bedingung erfüllen, wird diejenige mit der kleinsten Dezimalgenauigkeit zurückgegeben, und wenn mehrere davon vorhanden sind, wird diejenige mit der kleinsten Zahl zurückgegeben. Beispiele finden Sie in Kapitel 2 des Haupttextes. Beispiele für Arten in ein paar verschiedenen Implementierungen (NAG und Cray) sind in Anlage 6 angegeben. LOGIKAL (L, Art) wandelt zwischen verschiedenen Arten von logischen Variablen. Logische Variablen können auf verschiedene Weise implementiert werden, beispielsweise mit einer physikalischen Darstellung, die ein Bit (nicht empfohlen), ein Byte, ein Wort oder sogar ein Doppelwort belegt. Dieser Unterschied ist wichtig, wenn COMMON und EQUIVALENCE mit logischen Variablen in einem Programm in der traditionellen Weise der Fortran-66-Programmierung missbraucht wurden. 8. Numerische Abfragefunktionen: Diese Funktionen arbeiten mit einem bestimmten Modell von Integer - und Gleitkommarithmetik, siehe ISO (1991), Abschnitt 13.7.1. Die Funktionen geben Eigenschaften von Zahlen der gleichen Art wie die Variable X zurück. Die real und in einigen Fällen integer sein kann. Funktionen, die Eigenschaften des aktuellen Arguments X zurückgeben, sind in Abschnitt 12 unten, Fließkomma-Manipulationsfunktionen verfügbar. BITSIZE (I) liefert die Anzahl der Bits gemäß dem Modell der Bitdarstellung in der Norm ISO (1991), Abschnitt 13.5.7. Normalerweise erhalten wir die Anzahl der Bits in einem (ganzen) Wort. Das Modell für die Bitdarstellung in der Norm ISO (1991), Abschnitt 13.5.7 wird verwendet. TRANSFER (SOURCE, MOLD, size) gibt an, dass die physikalische Darstellung des ersten Arguments SOURCE so behandelt werden soll, als ob es Typ und Parameter als zweites Argument MOLD hatte. Aber ohne es zu konvertieren. Der Zweck besteht darin, eine Möglichkeit zu geben, eine Menge eines bestimmten Typs über eine Routine zu verschieben, die nicht genau diesen Datentyp aufweist. 12. Fließkomma-Manipulationsfunktionen: Diese Funktionen arbeiten in einem bestimmten Modell von Integer - und Gleitkommarithmetik, siehe Norm ISO (1991), Abschnitt 13.7.1. Die Funktionen geben Zahlen zurück, die sich auf die tatsächliche Variable X des Typs REAL beziehen. Funktionen, die Eigenschaften für die Zahlen der gleichen Art wie die Variable X zurückgeben, sind unter Abschnitt 8 (Numerische Abfragefunktionen). DOTPRODUCT (VECTORA, VECTORB) bildet ein Skalarprodukt aus zwei Vektoren, die dieselbe Länge haben müssen (gleiche Anzahl von Elementen). Bitte beachten Sie, dass, wenn VECTORA vom Typ COMPLEX ist das Ergebnis SUM (CONJG (VECTORA) VECTORB). MATMUL (MATRIXA, MATRIXB) bildet das Matrixprodukt zweier Matrizen, die konsistent sein müssen, d. H. Die Dimensionen wie (M, K) und (K, N) haben. Wird in Kapitel 11 des Haupttextes verwendet. 14. Array-Funktionen: ALL (MASK, dim) gibt einen logischen Wert zurück, der angibt, ob alle Relationen in MASK. TRUE sind. . Nur die gewünschte Dimension, wenn das zweite Argument gegeben ist. ANY (MASK, dim) gibt einen logischen Wert zurück, der angibt, ob eine Relation in MASK. TRUE ist. . Nur die gewünschte Dimension, wenn das zweite Argument gegeben ist. COUNT (MASK, dim) gibt einen numerischen Wert zurück, der die Anzahl der Beziehungen in MASK ist, die. TRUE sind. . Nur die gewünschte Dimension, wenn das zweite Argument gegeben ist. MAXVAL (ARRAY, dim, mask) gibt den größten Wert im Array zurück. Von denen, die die Beziehung im dritten Argument MASK befolgen, wenn diese gegeben ist, nur entlang der gewünschten Dimension, wenn das zweite Argument DIM gegeben ist. MINVAL (ARRAY, dim, mask) gibt den kleinsten Wert im Array zurück. Von denen, die die Beziehung im dritten Argument MASK befolgen, wenn diese gegeben ist, nur entlang der gewünschten Dimension, wenn das zweite Argument DIM gegeben ist. PRODUCT (ARRAY, dim, mask) gibt das Produkt aller Elemente im Array zurück. Von denen, die die Beziehung im dritten Argument MASK befolgen, wenn diese gegeben ist, nur entlang der gewünschten Dimension, wenn das zweite Argument DIM gegeben ist. SUM (ARRAY, dim, mask) gibt die Summe aller Elemente im Array zurück. Von denen, die die Beziehung im dritten Argument MASK befolgen, wenn diese gegeben ist, nur entlang der gewünschten Dimension, wenn das zweite Argument DIM gegeben ist. Ein Beispiel ist in Anhang 3, Abschnitt 10 gegeben. ALLOCATED (ARRAY) ist eine logische Funktion, die angibt, ob das Array zugeordnet ist. LBOUND (ARRAY, dim) ist eine Funktion, die die untere Dimensionsgrenze für den ARRAY zurückgibt. Wenn DIM (die Dimension) nicht als Argument angegeben wird, erhalten Sie einen Integer-Vektor, wenn DIM enthalten ist, erhalten Sie den Integer-Wert mit genau diesem unteren Dimensionslimit, für das Sie gefragt haben. SHAPE (SOURCE) ist eine Funktion, die die Form eines Arrays SOURCE als Integer-Vektor zurückgibt. SIZE (ARRAY, dim) ist eine Funktion, die die Anzahl der Elemente in einem Array zurückgibt. Wenn DIM nicht angegeben ist, und die Anzahl der Elemente in der relevanten Dimension, wenn DIM enthalten ist. UBOUND (ARRAY, dim) ist eine Funktion ähnlich LBOUND, die die oberen Dimensionsgrenzen zurückgibt. MERGE (TSOURCE, FSOURCE, MASK) ist eine Funktion, die zwei Arrays verbindet. Es gibt die Elemente in TSOURCE, wenn die Bedingung in MASK ist. TRUE. Und FSOURCE, wenn die Bedingung in MASK. FALSE ist. Die beiden Felder TSOURCE und FSOURCE müssen vom gleichen Typ und der gleichen Form sein. Das Ergebnis ist auch diese Art und diese Form. Auch MASK muss die gleiche Form haben. Ich gebe hier ein ziemlich vollständiges Beispiel für die Verwendung von MERGE, das auch RESHAPE aus dem nächsten Abschnitt verwendet, um geeignete Testmatrizen zu bauen. Beachten Sie, dass die beiden Subroutinen WRITEARRAY und WRITELARRAY Testroutinen sind, um Matrizen zu schreiben, die im ersten Fall vom Typ REAL sind, im zweiten Fall vom Typ LOGICAL. Die folgende Ausgabe wird erhalten PACK (ARRAY, MASK, Vektor) packt ein Array an einen Vektor mit der Steuerung von MASK. Die Form des logischen Arrays MASK muss mit dem für ARRAY übereinstimmen oder MASK muss ein Skalar sein. Wenn VECTOR enthalten ist, muss es ein Array von Rang 1 (d. h. ein Vektor) mit mindestens so vielen Elementen sein, wie diejenigen, die in MASK wahr sind und denselben Typ wie ARRAY haben. Wenn MASK ein Skalar mit dem Wert. TRUE ist. Dann muss VECTOR die gleiche Anzahl von Elementen wie ARRAY haben. Das Ergebnis ist ein Vektor mit so vielen Elementen wie diejenigen in ARRAY, die den Bedingungen gehorchen, wenn VECTOR nicht enthalten ist (d. h. alle Elemente, wenn MASK ein Skalar mit dem Wert. TRUE ist). In dem anderen Fall ist die Anzahl der Elemente des Ergebnisses so viele wie in VEKTOR. Die Werte sind die zugelassenen, d. h. die Werte, die die Bedingung erfüllen, und werden in der gewöhnlichen Fortran-Reihenfolge sein. Wenn VECTOR enthalten ist und die Anzahl seiner Elemente die Anzahl der zugelassenen Werte übersteigt, werden die fehlenden Werte, die für das Ergebnis erforderlich sind, von den entsprechenden Stellen in VECTOR genommen. Das folgende Beispiel basiert auf der Modifikation des einen für MERGE. Aber ich gebe jetzt nur die Ergebnisse. SPREAD (SOURCE, DIM, NCOPIES) gibt ein Array des gleichen Typs wie das Argument SOURCE zurück, wobei der Rang um eins erhöht wird. Die Parameter DIM und NCOPIES sind ganzzahlig. Wenn NCOPIES negativ ist, wird stattdessen der Wert Null verwendet. Wenn SOURCE ein Skalar ist, wird SPREAD zu einem Vektor mit NCOPIES-Elementen, die alle denselben Wert wie SOURCE haben. Der Parameter DIM gibt an, welcher Index erweitert werden soll. Er muss im Bereich 1 und 1 liegen (Rang von SOURCE). Wenn SOURCE ein Skalar ist, dann muss DIM eins sein. Der Parameter NCOPIES ist die Anzahl der Elemente in den neuen Dimensionen. Zusätzliche Diskussion findet sich in der Lösung der Übung (11.1). UNPACK (VECTOR, MASK, ARRAY) streut einen Vektor zu einem Array unter der Kontrolle von MASK. Die Form des logischen Arrays MASK muss mit der für ARRAY übereinstimmen. Das Array VECTOR muß den Rang 1 haben (d. h. es ist ein Vektor) mit mindestens so vielen Elementen wie diejenigen, die in MASK wahr sind. Und muss auch den gleichen Typ wie ARRAY haben. Wenn ARRAY als Skalar angegeben wird, wird es als ein Array mit der gleichen Form wie MASK und den gleichen skalaren Elementen betrachtet. Das Ergebnis ist ein Array mit der gleichen Form wie MASK und demselben Typ wie VECTOR. Die Werte sind diejenigen von VECTOR, die akzeptiert werden (d. h. diejenigen, die die Bedingung in MASK erfüllen), genommen in der gewöhnlichen Fortran-Reihenfolge, während in den verbleibenden Positionen in ARRAY die alten Werte beibehalten werden. RESHAPE (SOURCE, SHAPE, pad, order) konstruiert ein Array mit einer bestimmten Form SHAPE ausgehend von den Elementen in einem gegebenen Array SOURCE. Wenn PAD nicht enthalten ist, dann muss die Größe von SOURCE mindestens PRODUCT (SHAPE) sein. Wenn PAD enthalten ist, muss es den gleichen Typ wie SOURCE haben. Wenn ORDER enthalten ist, muss es ein INTEGER-Array mit der gleichen Form wie SHAPE sein und die Werte müssen eine Permutation von (1,2,3 N) sein, wobei N die Anzahl der Elemente in SHAPE ist. Muss es kleiner oder gleich 7 sein. Das Ergebnis hat natürlich eine Form SHAPE und die Elemente sind die in SOURCE. Möglicherweise ergänzt mit PAD. Die verschiedenen Dimensionen wurden bei der Zuordnung der Elemente permutiert, wenn ORDER eingefügt wurde, ohne jedoch die Form des Ergebnisses zu beeinflussen. Einige einfache Beispiele sind im vorigen und im nächsten Abschnitt sowie im Anhang 3, Abschnitt 9 aufgeführt. Ein komplizierteres Beispiel, das auch die optionalen Argumente veranschaulicht, folgt. Die Ausgabe des obigen Programms ist wie folgt. Die Shift-Funktionen geben die Form eines Arrays unverändert zurück, bewegen aber die Elemente. Sie sind ziemlich schwierig zu erklären, so empfehle ich, auch die Norm ISO (1991) zu studieren. CSHIFT (ARRAY, SHIFT, dim) führt durch SHIFT-Positionen nach links, wenn SHIFT positiv und nach rechts, wenn es negativ ist. Wenn ARRAY ein Vektor ist, wird die Verschiebung auf natürliche Weise durchgeführt, wenn es ein Array mit höherem Rang ist, dann ist die Verschiebung in allen Abschnitten entlang der Dimension DIM. Wenn DIM fehlt, wird es als 1 betrachtet, in anderen Fällen muss es eine skalare ganze Zahl zwischen 1 und n sein (wobei n dem Rang von ARRAY entspricht). Das Argument SHIFT ist eine skalare Ganzzahl oder ein Integer-Array vom Rang n-1 und die gleiche Form wie das ARRAY. Außer entlang der Dimension DIM (die wegen des unteren Ranges entfernt wird). Verschiedene Abschnitte können daher in verschiedenen Richtungen und mit verschiedenen Stellungen verschoben werden. EOSHIFT (ARRAY, SHIFT, boundary, dim) führt nach links, wenn SHIFT positiv und nach rechts, wenn es negativ ist. Anstelle der ausgeschobenen Elemente werden neue Elemente aus BOUNDARY genommen. Wenn ARRAY ein Vektor ist, wird die Verschiebung auf natürliche Weise durchgeführt, wenn es sich um ein Array höherer Ordnung handelt, ist die Verschiebung auf allen Abschnitten entlang der Dimension DIM. Wenn DIM fehlt, wird es als 1 betrachtet, in anderen Fällen muss es einen skalaren Integerwert zwischen 1 und n haben (wobei n dem Rang von ARRAY entspricht). Das Argument SHIFT ist eine skalare Ganzzahl, wenn ARRAY den Rang 1 hat. Im anderen Fall kann es sich um eine skalare Ganzzahl oder ein ganzzahliges Array mit dem Rang n-1 und mit derselben Form wie das Array ARRAY handeln Wegen des niedrigeren Ranges). Entsprechendes gilt für BOUNDARY, das den gleichen Typ wie das ARRAY haben muss. Wenn der Parameter BOUNDARY fehlt, haben Sie die Wahl der Werte Null,.FALSE. Oder Leerzeichen, abhängig vom Datentyp. Verschiedene Abschnitte können somit in verschiedenen Richtungen und mit verschiedenen Stellungen verschoben werden. Ein einfaches Beispiel für die beiden obigen Funktionen für den Vektorfall folgt sowohl dem Programm als auch dem Ausgang. Es folgt ein einfaches Beispiel für die beiden obigen Funktionen im Matrixfall. Ich habe hier RESHAPE verwendet, um eine geeignete Matrix zu erstellen, um mit der Arbeit zu beginnen. Das Programm wird hier nicht wiedergegeben, sondern nur die Hauptaussagen. TRANSPOSE (MATRIX) transponiert eine Matrix, die ein Array von Rang 2 ist. Es ersetzt die Zeilen und Spalten in der Matrix. MAXLOC (ARRAY, mask) gibt die Position des größten Elements im Array zurück. Wenn MASK nur für diejenigen enthalten ist, die die Bedingungen in MASK erfüllen. Das Ergebnis ist ein Integer-Vektor Es wird in der Lösung der Übung (11.1) verwendet. MINLOC (ARRAY, mask) gibt die Position des kleinsten Elements im Array zurück. Wenn MASK nur für diejenigen enthalten ist, die die Bedingungen in MASK erfüllen. Das Ergebnis ist ein Integer-Vektor ASSOCIATED (POINTER, target) ist eine logische Funktion, die angibt, ob der Zeiger POINTER mit einem Ziel verknüpft ist, und wenn ein bestimmter TARGET enthalten ist, gibt er an, ob er genau diesem Ziel zugeordnet ist. Wenn sowohl POINTER als auch TARGET Zeiger sind, ist das Ergebnis. TRUE. Nur wenn beide mit demselben Ziel verknüpft sind. Ich verweise den Leser auf Kapitel 12 des Haupttextes, Pointer. Eine Subroutine, die das Datum, die Zeit und die Zeitzone zurückgibt. Mindestens ein Argument muss gegeben werden. DATE muss eine skalare Zeichenfolgenvariable mit mindestens 8 Zeichen sein und dem Wert CCYYMMDD für Jahrhundert, Jahr, Monat und Tag zugewiesen werden. Alle werden numerisch mit Leerzeichen angegeben, wenn das System das Datum nicht enthält. ZEIT muss auch eine skalare Zeichenkettenvariable mit mindestens 10 Zeichen sein und ihr wird ein Wert hhmmss. sss für die Zeit in Stunden, Minuten, Sekunden und Millisekunden zugewiesen. Alle werden numerisch mit Leerzeichen angegeben, wenn das System keine Uhr enthält. ZONE muss eine skalare Zeichenfolgenvariable mit mindestens 5 Zeichen sein und dem Wert hhmm für Vorzeichen, Zeit in Stunden und Minuten für die lokale Zeitdifferenz mit UTC (die zuvor Greenwich Mean Time genannt wurde) zugeordnet. Alle werden numerisch mit Leerzeichen angegeben, wenn das System keine Uhr enthält. In Schweden erhalten wir also 0100 im Winter und 0200 im Sommer, in Nowosibirsk bekommen wir 0700. Die Variable VALUES ist stattdessen ein Integer-Vektor mit mindestens 8 Elementen, der einfachste Weg, die Ergebnisse von DATEANDTIME bei den Berechnungen in einem Programm zu verwenden. Wenn das System nicht das Datum oder die Zeit, die Sie den Wert - HUGE (0). Das ist die kleinste ganze Zahl im Modell, als Ausgang. Der Vektor enthält die folgenden Elemente: Jahr, Monat, Tag, Zeitdifferenz in Minuten. Stunden, Minuten, Sekunden und Millisekunden. Subroutine, die die Systemzeit zurückgibt. Mindestens ein Argument muss gegeben werden. COUNT ist eine skalare Ganzzahl, die für jeden Zyklus bis zu COUNTMAX um eins erhöht wird. Wo es wieder anfängt. Wenn keine Systemuhr vorhanden ist, wird - HUGE (0) zurückgegeben. COUNTRATE ist eine skalare Ganzzahl, die die Anzahl der Zyklen pro Sekunde angibt. Ist keine Systemuhr vorhanden, wird der Wert Null zurückgegeben. COUNTMAX ist eine skalare Ganzzahl, die den maximalen Wert angibt, den COUNT erreichen kann. Wenn keine Systemuhr vorhanden ist, wird stattdessen Null zurückgegeben. Eine Unterroutine, die die Folge von Bits in Position FROMPOS kopiert und die Länge LEN zum Ziel TO hat, die in Position TOPOS startet. Die verbleibenden Bits werden nicht geändert. Alle Mengen müssen ganze Zahlen sein und alle außer TO müssen INTENT (IN) haben, während TO soll INTENT (INOUT) haben und vom gleichen Typ wie FROM sein. Die gleiche Variable kann FROM und TO sein. Einige natürliche Einschränkungen gelten für die Werte von LEN, FROMPOS und TOPOS und Sie müssen auch den Wert von BITSIZE berücksichtigen. Aus einem Startwert, der als Integer-Vektor gespeichert ist, kann eine Folge von Pseudozufallszahlen erzeugt werden. Die Subroutinen bieten eine tragbare Schnittstelle zu einer implementierungsabhängigen Zufallszahlenfolge. Diese Subroutine gibt in der Gleitkommazahl Variable HARVEST eine (oder mehrere, wenn HARVEST ein Array ist) Zufallszahlen zwischen 0 und 1. Diese Subroutine setzt den Zufallszahlengenerator zurück oder gibt Informationen darüber. Es sind keine Argumente vorzusehen. Die Ausgangsvariable SIZE muss eine skalare Integerzahl sein und die Anzahl der Integer (N) geben, die der Prozessor für den Startwert verwendet. Die Eingangsgröße PUT ist ein ganzzahliger Vektor, der die vom Anwender gelieferten Startnummern in den Zufallszahlengenerator setzt. Die Ausgangsgröße GET (auch ein Integer-Vektor) liest den aktuellen Startwert. Beispiel: Ein einfaches Beispiel für die Verwendung dieser Funktionen ist jetzt verfügbar.

No comments:

Post a Comment