English Русский 中文 Español 日本語 Português
Einen technischen Indikator selber machen

Einen technischen Indikator selber machen

MetaTrader 5Beispiele | 1 November 2022, 09:30
506 0
Aleksej Poljakov
Aleksej Poljakov

Einführung

Jeder technische Indikator basiert auf einem bestimmten Algorithmus zur Verarbeitung von Marktinformationen. In der Regel werden die Preise als Ausgangsdaten verwendet. In der Sprache der Mathematik ist der Indikator eine Funktion, die Preise in ein Endergebnis umwandelt. In diesem Artikel werde ich lineare Funktionen betrachten, die zur Erstellung eines Indikators verwendet werden können.


Regel 1.

Die Idee, die hinter allen linearen Indikatoren steht, ist recht einfach und lässt sich auf vier Schritte reduzieren:

  1. Auswahl einer vorher festgelegte Anzahl von Preisen;
  2. Multiplikation der Preise mit bestimmten Faktoren ;
  3. Zusammenfassung der erzielten Ergebnisse;
  4. Anzeige des resultierenden Werts auf einem Chart.

Es ist intuitiv klar, dass das Endergebnis und das Verhalten eines solchen Indikators von den Faktoren abhängen. Wie sollten diese Faktoren aussehen? Können es beliebige Werte sein oder unterliegen sie bestimmten Einschränkungen?

Die Indikatoren, die im Hauptchart gesetzt werden, können durch eine einfache Gleichung ausgedrückt werden (in diesem Fall verwenden wir ganze Zahlen als Faktoren):

Um die Faktoren in reelle Zahlen umzuwandeln, müssen wir eine einfache Transformation durchführen:

Dann reduziert sich die Hauptregel für solche Indikatoren auf eine einfache Aussage: „Die Summe der Faktoren muss gleich eins sein“. Mit anderen Worten:

Die Gleichung für den Indikator sieht recht einfach aus. Doch dahinter verbergen sich große Chancen. Versuchen wir, nach dieser Regel mehrere Indikatoren selbst zu erstellen.

Als Grundlage für unsere Experimente werde ich einen allgemein verbreiteten Indikator verwenden. Der einzige Unterschied ist der Eingabeparameter - eine String-Variable, in der die Folge der Faktoren gespeichert werden soll. Auf diese Weise können wir eine große Anzahl von Optionen mit einer Vorlage testen.

input string InpCoefficient="1,1,1,1,1";//variable for indicator ratios

Wir verwenden ein Komma als Trennzeichen zwischen den Zahlenwerten.

Folgenden Schritte führen wir innerhalb der Funktion OnInit() aus (der Code enthält auch ein geheimnisvolles „Zentrum“, dessen Zweck wir später herausfinden werden):

   string s[];                                                  //array for substrings with ratios
   size=StringSplit(InpCoefficient,StringGetCharacter(",",0),s);//get substrings and their number
   
   ArrayResize(coeff,size);  //prepare the array for indicator ratios
   double denom=0,center=0;  //variables for normalizing values and calculating the center of the indicator
   for(int i=0; i<size; i++) // set the ratios
     {
      coeff[i]=StringToDouble(s[i]);
      denom=denom+coeff[i];
     }

   if(denom==0) //if the normalization term is 0, then something is wrong
     {
      Alert("Wrong odds!");
      return(INIT_FAILED);
     }

   for(int i=0; i<size; i++) //normalize the ratios and calculate the indicator center
     {
      coeff[i]=coeff[i]/denom;
      center=center+coeff[i]*(i+1);
     }

   Print((int)MathRound(center));//display the count closest to the center of the indicator

Lassen Sie uns nun einige Beispiele betrachten.

Die erste Sequenz. Nehmen wir fünf Kurswerte mit den gleichen Faktoren: 1,1,1,1,1. Dies ist ein einfacher gleitender Durchschnitt. Die Indikatorgleichung lautet in diesem Fall (price[0] + price[1] + price[2] + price[3] + price[4])/5.

Die zweite Sequenz. Um diese Folge zu erhalten, nehmen wir fünf gleitende Durchschnitte mit Perioden von eins bis fünf und ermitteln ihren Durchschnitt. Das bedeutet, dass unsere Ausgangsdaten wie folgt aussehen werden:

price[0]/1 +
(price[0] + price[1])/2 +
(price[0] + price[1] + price[2])/3 +
(price[0] + price[1] + price[2] + price[3])/4 +
(price[0] + price[1] + price[2] + price[3] + price[4])/5.

Wenn wir sie zusammenzählen, erhalten wir die Faktoren unserer Folge: 137,77,47,27,12.

Die dritte Sequenz. Für diese Sequenz nehmen wir fünf gleitende Durchschnitte mit der Verschiebung um einen Schritt zurück. Dann werden wir ihren Durchschnitt ermitteln. Mit anderen Worten, wir erhalten als Ergebnis den Durchschnitt mehrerer gleitender Durchschnitte. Eröffnungskurs des Tages

(price[0] + price[1] + price[2] + price[3] + price[4])/5 +
(price[1] + price[2] + price[3] + price[4] + price[5])/5 +
(price[2] + price[3] + price[4] + price[5] + price[6])/5 +
(price[3] + price[4] + price[5] + price[6] + price[7])/5 +
(price[4] + price[5] + price[6] + price[7] + price[8])/5.

Das Ergebnis ist ein dreieckiges Fenster mit den Faktoren - 1,2,3,4,5,4,3,2,1.

Verschiedene mathematische Sequenzen können als Indikatorfaktoren verwendet werden. Nachstehend finden Sie Beispiele für einige weitere Indikatoren. Eine davon basiert auf Fibo-Zahlen: 34,21,13,8,5,3,2,1,1. Ein weiterer Indikator baut ebenfalls auf Fibo-Zahlen auf, aber er ist symmetrisch aufgebaut: 1,1,2,3,5,3,2,1,1. Der dritte Indikator basiert auf der Reihe des Pascalschen Dreiecks: 1,8,28,56,70,56,28,8,1.

Die Faktoren für den Indikator sind auch in der Enzyklopädie der Ganzzahligen Folgen zu finden. Im Jahr 2014 wurde ein Wettbewerb für die schönste neue Sequenz ausgeschrieben. Die Folgen A229037, A235265 and A235383 wurde zu den Gewinnern gekürt. Eine dieser Sequenzen erhielt sogar ihren eigenen Namen - „forest fire“ (Waldbrand). Diese Abfolge ist insofern interessant, als sie keine linearen Trends aufweist. Die auf ihrer Grundlage erstellten Indikatoren sehen folgendermaßen aus.

Wörter können auch in Indikatorfaktoren umgewandelt werden. Nehmen wir den Namen der beliebtesten Handelsplattform MetaTrader 5. Wir werden die Ordnungszahl jedes Buchstabens als Faktor nehmen. In diesem Fall ergibt sich die Reihenfolge: 13,5,20,1,20,18,1,4,5,18,5.
Diese Handelsplattform wird von MetaQuotes Software Corp. herausgegeben. Wenn wir die Leerzeichen und den Punkt weglassen, erhalten wir die Zahlenfolge: 13,5,20,1,17,21,15,20,5,19,19,15,6,20,23,1,18,5,3,15,18,16.

Die auf diesen Sequenzen basierenden Indikatoren sehen wie folgt aus.

Lassen Sie uns zum Schluss noch einen weiteren Indikator erstellen und ihn benennen... Oh, nun... Ich werde ihn nicht so nennen, sonst unterliegt der Artikel einer Altersbeschränkung. Nennen wir ihn einfach Crazy. Das Hauptmerkmal dieses Indikators ist, dass wir bei jedem neuen Aufruf zufällige Quoten verwenden.

Wenn wir die Kennzahlen des Indikators kennen, können wir eines seiner wichtigsten Merkmale ermitteln. Dazu müssen wir berechnen, auf welche Referenz der Gewichtszentrum des Indikators fällt. Zu diesem Zweck müssen wir die Referenznummer in die Indikatorgleichung einsetzen:

Je nach Zentrum und Zeitraum des Indikators können wir ihn einem der drei Typen zuordnen. ‚period‘ sei die Periodenlänge des Indikators.

  • Trend:            center < period/3
  • Glättung:      period/3 <  center < 2*period/3
  • Gegentrend:    2*period/3 <  center

    Regel Nr. 1a

    Wie wir sehen, führt die Befolgung der Regel Nr. 1 immer zu einem voll funktionsfähigen technischen Indikator. Aber hier stellt sich die Frage: Kann es negative Kennzahlen im Indikator geben? Hier kommt eine weitere Regel ins Spiel, die sich wie folgt anhört: Der absolute Wert eines jeden Faktors sollte kleiner sein als seine Summe. Oder in symbolischer Form für ganzzahlige und reelle Faktoren:

    Diese Einschränkung hängt mit der Stabilität des Indikators zusammen. Nehmen wir zum Beispiel mehrere Sequenzen, die von einem linear gewichteten gleitenden Durchschnitt stammen: 5,4,3,2,1 - blaue Linie, 5,4,3,2,-1 - grün, 5,4,3,-2,-1 - gelb und 5,4,-3,-2,-1 - rot.

    Wie wir sehen können, verhält sich die letzte Option im Vergleich zu den vorherigen recht frei — der Indikator hat an Stabilität verloren. Wenn der Indikator negative Werte aufweist, muss daher geprüft werden, ob sie der Regel Nr. 1a entsprechen.


    Kleine Pause

    Die Regel für Kennzahlen ermöglicht nicht nur die Erstellung neuer Indikatoren, sondern auch die Änderung der Standardoptionen. Nehmen wir als Beispiel einen exponentiellen gleitenden Durchschnitt. Die Gleichung ist einfach und jedem bekannt:

    Dies ist ein Beispiel für einen rekursiven Indikator, bei dem der aktuelle Wert vom vorherigen abhängt. Wenn wir die Rekursion erweitern, sieht die exponentielle Durchschnittsgleichung wie folgt aus:

    Hier haben wir eine geometrische Progression von unendlicher Länge.

    Ein kurzer Hinweis: Was wir umgangssprachlich als EMA-Periode bezeichnen, ist eigentlich eine einfache gleitende Durchschnittsperiode, deren Mittelpunkt mit dem Mittelpunkt des EMA übereinstimmt.

    Wir sollten versuchen, die Länge der Progression zu begrenzen. Dann erhalten wir einen Filter, den ich geometrisch nennen werde. Die interessanteste Eigenschaft dieses Filters ist, dass sein Verhalten sowohl vom Glättungsfaktor als auch von seiner Periode abhängt. Gleichzeitig wird der geometrische Filter mit zunehmender Periode dem Standard-EMA immer ähnlicher. Nehmen wir zum Beispiel den Faktor für die exponentielle Glättung mit a = 0.1. Dann kann die EMA-Periode wie folgt berechnet werden:

    Vergleichen wir nun das Verhalten des EMA und des geometrischen Filters mit demselben Faktoren, aber mit einer Periode von 10.

    Wenn wir die Periode des geometrischen Filters schrittweise erhöhen, sehen wir, wie er sich allmählich dem EMA nähert.

    Neben der geometrischen Progression gibt es auch eine arithmetische Progression. Im MetaTrader-Terminal ist die arithmetische Progression als linear gewichteter Durchschnitt implementiert. Wir nehmen kleine Änderungen vor und führen einen arithmetischen Progressionsschritt ein. Es ermöglicht uns, einen Indikator mit den Werten von SMA bis LWMA zu erhalten.

    Nun bleibt noch ein weiterer Schritt, der beide Möglichkeiten kombiniert, um als Ergebnis eine arithmetisch-geometrische Progression zu erhalten. Ich werde leicht vom mathematischen Kanon abweichen und zulassen, dass verschiedene Verläufe unterschiedliche Zeiträume haben. Als Ergebnis erhalten wir einen Indikator, dessen Verhalten sich in einem ziemlich großen Bereich ändern kann. Zumindest sind die Standardoptionen (SMA, LWMA und EMA) nicht in der Lage, die gleiche Flexibilität wie unser neuer Indikator zu bieten.


    Fensterfunktionen für Dummies

    Wir können die in der digitalen Signalverarbeitung verwendeten Fensterfunktionen als Indikatorfaktoren verwenden. Schauen wir uns eine ziemlich universelle Option an — das Fenster der Summe der Kosinuswerte. Die verallgemeinerte Gleichung für die Faktoren eines solchen Fensters sieht wie folgt aus:

    Versuchen wir nun, auf der Grundlage dieses Fensters eine eigene Lösung zu entwickeln, die für technische Indikatoren verwendet werden kann. Zu diesem Zweck schreiben wir ein Skript, das die Indikatorquoten berechnet.

    Alle Standard-Fensterfunktionen sind symmetrisch um ihren Mittelpunkt. Wir können es uns leisten, den Mittelpunkt der Fensterfunktion an den Anfang oder das Ende des Indikators zu verschieben. Auf der Grundlage derselben Funktion können wir dann einen Trend-, Glättungs- oder Gegentrendindikator erstellen. Eine solche Lösung wird, wenn auch implizit, in konventionellen Indikatoren verwendet: Der LWMA ist beispielsweise die Hälfte eines Dreiecksfensters, und der EMA ist ein abgeschnittenes Laplace-Fenster.

    ‚iPeriod‘ sei die Periodenlänge unseres zukünftigen Indikators. Dann kann der Indikator Mitte Werte von 1 bis iPeriode mit einer Schrittweite von 0.5 annehmen. Mit anderen Worten: iCenter kann die Werte 1, 1.5, 2, ... iPeriode annehmen.

       int period=MathMax(2,iPeriod),     //check indicator length for min. acceptable value
           step=(int)MathRound(2*iCenter);//number of steps to the center of the indicator by 0.5
    
       double center=0.5*step;      //indicator center
       if(center<1 || center>period)//check if the center has a valid value
          center=0.5*(period+1);
    
    

    Jetzt müssen wir nur noch die Breite des Fensters bestimmen und seinen Versatz ermitteln. Dieser Versatz ermöglicht es uns, den Mittelpunkt des Indikators und den der Fensterfunktion aufeinander abzustimmen.

       int width=(int)(2*center),//window function width
           shift=1;              //offset to match the centers of the indicator and the window
    
       if(2*center<=period)//if the center is shifted to the beginning of the indicator
         {
          width=2*period-(int)(2*center)+2;
          shift=period-(int)(2*center)+2;
         }
    

    Wir wollen uns auf ein Fenster fünfter Ordnung beschränken. Dann müssen wir bis zu fünf Faktoren C1 - C5 festlegen. Als Faktoren können beliebige Zahlen verwendet werden. In diesem Fall sollte die Bedingung unbedingt erfüllt sein, dass jeder nächste Faktor kleiner ist als das vorhergehende. Mit anderen Worten: C1 > C2 > C3 > C4 > C5. Die Erfüllung dieser Bedingung ist notwendig für die korrekte Berechnung des Normierungswertes.

    Wenn alle Faktoren der Fensterfunktion gleich Null sind, erhalten wir ein rechteckiges Fenster (SMA). Nachstehend sind einige weitere Optionen aufgeführt (Faktoren mit dem Wert Null werden weggelassen).

    Hann Fenster: C1 = 1.

    Fenster mit einer linearen Abnahme der Koeffizienten: C1 = 5, C2 = 4, C3 = 3, C4 = 2, C5 = 1.

    Fenster mit Fibonacci-Zahlen C1 = 8, C2 = 5, C3 = 3, C4 = 2, C5 = 1.

    Bei einigen Faktoren können wir Fensterfunktionen mit teilweise negativen Werten erhalten. Dadurch sehen sie wie ein normales Flachdachfenster aus: C1 = 3, C2 = 2.

    Fensterfunktionen für fortgeschrittene Nutzer

    Wir können ein verallgemeinertes adaptives Polynom verwenden, um Fensterfunktionen zu konstruieren. Die Gleichung sieht wie folgt aus:

    Eine Besonderheit dieses Polynoms ist, dass alle Parameter unabhängig voneinander sind. Die einzige Ausnahme ist, dass der Parameter C0 nicht kleiner sein darf als die Summe aller anderen Faktoren. Die Faktoren sollten mindestens Null sein und die Exponenten sollten größer sein (wenn der Exponent Null ist, erhält man ein rechteckiges Fenster, das man ohnehin mit dem C0-Faktor erhalten kann).

    Mit diesem Polynom können Sie sowohl bereits bekannte Fensterfunktionen als auch etwas Ungewöhnliches erhalten. Bei C0 = 1 ergibt sich zum Beispiel ein rechteckiges Fenster (SMA).

    Dreieckiges Fenster: C0 = 1, C1 = 1, P1 = 1.

    Welch-Fenster: C0 = 1, C1 = 1, P1 = 2.

    Außerdem können Sie etwas Ungewöhnliches bekommen. Fenster mit Fibo-Zahlen und linearem Wachstum des Grades (der C0-Faktor wird leer gelassen, dann wird er den Wert annehmen): C1 = 8, P1 = 1, C2 = 5, P2 = 2, C3 = 3, P3 = 3, C4 = 2, P4 = 4, C5 = 1, P5 = 5.


    Regel Nr. 2.

    Bisher haben wir uns mit Indikatoren beschäftigt, die auf dem Hauptchart platziert werden, und die Oszillatoren völlig vergessen. Die Regel, die allen Oszillatoren zugrunde liegt, ist sehr einfach: Die Summe der Oszillatorfaktoren ist Null.

    Ein funktionierender Oszillator ist am einfachsten zu erstellen, wenn er auf zwei Indikatoren basiert. Die Oszillatorgleichung lautet dann:

    In diesem Fall sollten die Indikatoren unterschiedlich sein. So sieht zum Beispiel ein Oszillator aus, der auf rechteckigen und dreieckigen Fenstern basiert: 1,1,1,1,1 und 1,2,3,2,1.

    Sie können auch die gleiche Fensterfunktion verwenden, aber mit unterschiedlichen Längen: 1,2,3,2,1 und 1,2,3,4,5,4,3,2,1.

    Es kann sich auch um denselben Indikator handeln, der ein paar Zähler zurückgesetzt wurde: 5,4,3,2,1 und 0,0,0,5,4,3,2,1 (die Nullen in der zweiten Folge bewirken eine Verschiebung um drei Zählzeiten):

    Die Oszillatoren werden sehr häufig in Handelsstrategien verwendet. So können beispielsweise alle Strategien, die die Schnittmenge zweier Indikatoren als Signal verwenden, auf einen Oszillator reduziert werden.
    Lassen Sie uns zum Beispiel einen einfachen EA schreiben. Mehrere Indikatorenpaare dienen als Signalquellen:

    • zwei einfache gleitende Durchschnitte
    • ein linear gewichteter Durchschnitt und dreieckiges Fenster;
    • MetaQuotes Indikator mit beiden Handelsplattformen (vergleichen wir, welche von beiden profitabler ist);
    • und natürlich: Crazy.

    Der EA wird Kaufpositionen eröffnen, wenn die Indikatorlinie mit einer kleinen Periodenlänge die Linie eines anderen Indikators nach oben kreuzt. Verkaufspositionen werden eröffnet, wenn sie sie nach unten durchbricht. Die Eröffnung einer Position in einer Richtung führt zur Schließung von Positionen in der entgegengesetzten Richtung. Diese Bedingungen sehen aus wie ein Wechsel des Vorzeichens des Oszillators auf der Grundlage der entsprechenden Indikatoren. 

    Testparameter: EURUSD H1, 2021.01.01 - 2021.12.31.
    Die Testergebnisse sind in der Tabelle aufgeführt. Im Falle von Crazy habe ich 5 Tests durchgeführt, die seine Eigenschaften berücksichtigen.

    TypInd Nettogewinn, $
    Bruttogewinn
    Bruttoverlust
    Positionen insgesamt
    SMA -112.15
    338.69
    -450.84
    340
    TMA 4.64
    422.06
    -417.42
    372
    MT4 -39.43
    402.26
    -441.69
    444
    MT5 -45.27
    395.20
    -440.47
    438
    Crazy 1 -82.13
    432.68
    -514.81
    640
    Crazy 2 -91.15 469.24   -560.39 662
    Crazy 3  -57.01 454.13   -511.14 612
    Crazy 4  -39.16 487.40 -526.56  673
    Crazy 5 -21.45 471.97 -493.42 666

    Wie wir sehen können, hat keine der Optionen beeindruckende Ergebnisse erzielt. Obwohl Crazy relativ gut war. Der Unterschied zwischen dem besten und dem schlechtesten Handel beträgt 4. Dieser Indikator ist wirklich verrückt.

    Mal sehen, ob wir unsere Strategie verbessern können. Schauen wir uns das Chart an - hier ist ein Beispiel für zwei Schnittpunkte, bei denen die rote Linie die blaue formal in derselben Richtung kreuzt.

    Aber das Verhalten der blauen Linie sieht anders aus. Fügen wir dem Hauptoszillator zwei zusätzliche Oszillatoren hinzu, die die Veränderungen der Werte der Indikatoren selbst verfolgen werden. Dann wird der EA in der Lage sein, einige Eingaben zu sortieren. Mal sehen, zu welchem Ergebnis diese Komplikation führen kann.

    TypInd Nettogewinn, $
    Bruttogewinn
    Bruttoverlust
    Positionen insgesamt
    SMA 45.64
    325.11
    -279.47
    138
    TMA 156.03
    466.26
    -310.23
    306
    MT4 -133.56
    296.25
    -429.81
    212
    MT5 -192.40
    273.05
    -465.45
    203
    Crazy 1 114.30
    564.00
    -449.70
    409
    Crazy 2 -93.57 421.01    -514.58 413
    Crazy 3  -31.83 445.27    -477.10 446
    Crazy 4  3.87 451.39 -447.52  431
    Crazy 5 -8.04 458.58 -466.62 409

    Wie wir sehen können, hat sich das Hinzufügen neuer Oszillatoren in einigen Fällen positiv ausgewirkt. In anderen Fällen hat sich das Ergebnis verschlechtert. Vielleicht ist es notwendig, bei solchen Strategien nicht nur qualitative, sondern auch quantitative Parameter zu berücksichtigen. In jedem Fall sollten solche Strategien weiter untersucht werden.

    Schlussfolgerung

    Wie Sie sehen, kann die Entwicklung eines technischen Indikators eine ziemlich spannende Erfahrung sein. Die Anlagen

    1. Basisindikator — eine Vorlage, die es Ihnen ermöglicht, Indikatoren auf der Grundlage ihrer Kennziffern zu erstellen.
    2. OEIS — ein Indikator, der auf den schönsten Sequenzen basiert. Alle Folgen besitzen Einschränkungen bezüglich der Periodenlänge.
    3. Crazy — ein Indikator, der zufällige Faktoren verwendet.
    4. Arithmetisch-geometrischer Filter — ein Indikator, der auf arithmetischen und geometrischen Progressionen basiert.
    5. Fensterfunktionen für Dummies — ein Skript, das die Berechnung einer Fensterfunktion auf der Grundlage eines Kosinuspolynoms ermöglicht. Das Skript speichert die ermittelten Faktoren in einer Textdatei im Ordner „Files“.
    6. Fensterfunktionen für Fortgeschrittene — ein Skript zur Berechnung von Indikatorfaktoren unter Verwendung eines verallgemeinerten adaptiven Polynoms. Das Berechnungsergebnis wird ebenfalls in einer Datei gespeichert.
    7. Basic Oscillator — Vorlage für einen Oszillator, der auf zwei Indikatoren basiert.
    8. EA Indicator — ein EA, der Positionen mithilfe von Oszillatoren eröffnet. Der Parameter Control bestimmt die Anzahl der zu analysierenden Oszillatoren.


    Übersetzt aus dem Russischen von MetaQuotes Ltd.
    Originalartikel: https://www.mql5.com/ru/articles/11348

    DoEasy. Steuerung (Teil 15): TabControl WinForms Objekt — mehrere Reihen von Registerkartenüberschriften, Methoden zur Behandlung von Registerkarten DoEasy. Steuerung (Teil 15): TabControl WinForms Objekt — mehrere Reihen von Registerkartenüberschriften, Methoden zur Behandlung von Registerkarten
    In diesem Artikel werde ich die Arbeit am Objekt TabControl WinForm fortsetzen — ich werde eine Tabulatorfeld-Objektklasse erstellen, es möglich machen, Tabulatorüberschriften in mehreren Zeilen anzuordnen und Methoden für die Handhabung von Objekttabs hinzufügen.
    Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 27): Der Zukunft entgegen (II) Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 27): Der Zukunft entgegen (II)
    Gehen wir nun zu einem vollständigeren Auftragssystem direkt auf dem Chart über. In diesem Artikel zeige ich einen Weg, das Auftragssystem zu reparieren, oder besser gesagt, es intuitiver zu gestalten.
    DoEasy. Steuerung (Teil 16): TabControl WinForms-Objekt — mehrere Reihen von Registerkarten-Kopfzeilen, Dehnung der Kopfzeilen zur Anpassung an den Container DoEasy. Steuerung (Teil 16): TabControl WinForms-Objekt — mehrere Reihen von Registerkarten-Kopfzeilen, Dehnung der Kopfzeilen zur Anpassung an den Container
    In diesem Artikel werde ich die Entwicklung von TabControl fortsetzen und die Anordnung von Tabulatorüberschriften auf allen vier Seiten des Steuerelements für alle Modi der Einstellung der Größe der Überschriften implementieren: Normal, Fixed und Fill To Right (rechts auffüllend).
    Marktmathematik: Gewinn, Verlust und Kosten Marktmathematik: Gewinn, Verlust und Kosten
    In diesem Artikel zeige ich Ihnen, wie Sie den Gesamtgewinn oder -verlust eines Handels einschließlich Provision und Swap berechnen können. Ich werde das genaueste mathematische Modell zur Verfügung stellen und es verwenden, um den Code zu schreiben und ihn mit der Norm zu vergleichen. Außerdem werde ich versuchen, in die Hauptfunktion von MQL5 zur Berechnung des Gewinns einzudringen und alle erforderlichen Werte aus der Spezifikation zu ermitteln.