Jeder Programmierer-Experte, der bereit ist, dies in ein MQ4 umzuwandeln?
- Profilinitialisierungsroutine für Innen
- Definiert die Eigenschaften des Innenprofils und die Innenparameter
- TODO: Fügen Sie den minimalen und maximalen Wert der numerischen Parameter und die Standardfarbe des Geschäfts hinzu
Funktion Init ()
Indoor: Name (CUMULATIVE VOLUME INDEX);
innen: Beschreibung (KUMULATIVE VOLUME INDEX);
Innen: Erforderliche Quelle (Kern.Bar);
innen: typ (kern.Oscillator);
indoor.parameters: addGroup (Selector);
Hauswährung = {USD, EUR, GBP, CHF, JPY, AUD, NZD, CAD};
lokales i;
indoor.parameters: Zeichenfolge hinzufügen (Währung, Basiswährung, Währung [1]);
für i = 1, 8, 1 tun
indoor.parameters: String-Alternative (Währung, Währung, Währung) hinzufügen;
Ende
indoor.parameters: addGroup (Style);
Parameter für Innenräume: Farbe hinzufügen (Farbe, Farbe des CVI, Farbe des CVI, Kern.rgb (255, 0, 0))
Ende
- Initialisierungsroutine für Inneninstanzen
- Verarbeitet Innenparameter und erstellt einen Ausgabestrom
- TODO: Verfeinern Sie die Berechnung der ersten Periode für jeden Ausgabestrom.
- TODO: Berechnen Sie alle Konstanten, erstellen Sie Instanzen alle nachfolgenden Indiors und laden Sie alle erforderlichen Bibliotheken
- Parameterblock
lokal zuerst;
lokale Quelle = Null;
- Stre Block
lokaler Ausgang = {};
Landeswährung;
lokales Laden = {};
lokale Liste = {};
lokale Anzahl;
lokale RawList, RawCount;
local SourceData = {};
lokales Pauto = (% a% a% a)(% a% a% a);
lokale Farbe;
lokaler Gastgeber;
lokaler Versatz;
lokaler Wochentag
lokaler MA = {};
- Routine
Funktion Vorbereiten (NameNur)
Methode = Instanz.Parameter.Methode;
Farbe = Instanz.Parameter.Farbe;
Währung = Instanz.Parameter.Währung;
host = core.host;
Offset = Host: Ausführen (getTradingDayOffset);
weekoffset = host: Ausführen (getTradingWeekOffset);
Quelle = Instanz.Quelle;
first = source: first ();
Lokaler Name = Profil: ID () .. (.. Quelle: Name () .., .. Währung ..);
Instanz: Name (Name);
lokale crncy1, crncy2;
RawList, RawCount = getInstrumentList ();
lokales i;
lokale FLAG = falsch;
Zählung = 0;
für i = 1, RawCount, 1 tun
FLAG = falsch;
crncy1, crncy2 = string.match (RawList, pauto);
if (crncy1 == Currency) oder (crncy2 == Currency) dann
FLAG = wahr;
Ende
wenn FLAG dann
Count = Count 1;
List [Count] = RawList
Ende
Ende
für i = 1 gilt Count, 1 do
SourceData = core.host:execute(getSyncHistory, List, source: barSize (), source: isBid (), 0, 200 i, 100 i);
Laden = wahr;
Ende
if (nicht (nameOnly)) dann
CVI = Instanz: addStream (CVI, core.Line, Name, CVI, Color, zuerst)
Ende
Ende
Funktion getInstrumentList ()
lokale Liste = {};
lokale Zählung = 0;
lokale Zeile, Aufzählung;
enum = core.host:findTable (bietet): enumerator ();
row = enum: next ();
während row ~ = nil tun
count = count 1;
list [count] = row.Instrument;
row = enum: next ();
Ende
Rückkehrliste, Anzahl;
Ende
lokales Vorrücken = 0;
lokale Abnahme = 0;
- Innenberechnungsroutine
- TODO: Fügen Sie Ihren Code für die Berechnung der Ausgabewerte hinzu
Funktion Update (Zeitraum, Modus)
wenn Zeitraum lt; zuerst oder nicht source: hasData (period) dann
Rückkehr;
Ende
Vorschub = 0;
Abnehmend = 0;
für i = 1 gilt Count, 1 do
wenn dann geladen wird
Rückkehr;
Ende
Ende
lokales i;
lokales p;
für i = 1 gilt Count, 1 do
p = Initialisierung (i, Periode)
Berechnen Sie (i, p, Punkt);
Ende
Ende
Funktion Berechnen (i, p, Punkt)
wenn nicht p dann
Rückkehr;
Ende
local Num = {0,0,0,0,0,0,0,0};
lokales j;
lokale crncy1, crncy2;
crncy1, crncy2 = string.match (List, pauto);
wenn crncy1 == Währung dann
if SourceData.close gt; SourceData.close [p-1] dann
Advancing = Advancing SourceData.volume;
elseif SourceData.close lt; SourceData.close [p-1] dann
Declining = Declining SourceData.volume;
Ende
elseif crncy2 == Währung dann
if SourceData.close gt; SourceData.close [p-1] dann
Declining = Declining SourceData.volume;
elseif SourceData.close lt; SourceData.close [p-1] dann
Advancing = Advancing SourceData.volume;
Ende
Ende
CVI [Zeitraum] = CVI [Zeitraum-1] (Vorrücken - Abnehmen);
Ende
- Die Funktion wird aufgerufen, wenn der asynchrone Vorgang abgeschlossen ist
Funktion AsyncOperationFinished (Cookie)
lokales i;
für i = 1 gilt Count, 1 do
wenn cookie == 100 ich dann
Laden = wahr;
elseif cookie == 200 ich dann
Laden = falsch;
Instanz: UpdateFrom (0);
Ende
Ende
return core.ASYNC_REDRAW;
Ende
Funktion Initialisierung (i, Periode)
lokale Kerze;
Kerze = core.getcandle (Quelle: barSize (), Quelle: Datum (Periode), Offset, Wochentag)
wenn geladen oder SourceData: size () == 0 dann
falsch zurückgeben ;
Ende
wenn Zeitraum lt; source: zuerst () dann
falsch zurückgeben;
Ende
local p = core.findDate (SourceData, Candle, false);
- Kerze wird nicht gefunden
wenn p lt; 0 dann
falsch zurückgeben;
sonst p zurückgeben;
Ende
Ende