Erstellen Sie Ihre eigene MetaTrader-Erweiterung (dll) - Seite 9

 

DLL wird nicht mit neuen Ticks aktualisiert

Im Anschluss an meinen vorherigen DLL-Beitrag (#81) habe ich jetzt ein zusätzliches Problem; wenn die DLL so aufgerufen wird:

int start()

{

double Raten[][6];

int MaximumRecords = ArrayCopyRates( Raten, Symbol(), 0 );

for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = EMPTY; }

GetSMAArray( Raten, MaximumRecords, Perioden, OutPut );

return(0);

}

funktioniert gut, da es wie erwartet im Diagramm dargestellt wird, aber leider wird es nicht mit neuen, eingehenden Ticks aktualisiert - es wird nur bei seinem ersten Aufruf dargestellt. Welchen weiteren Code kann ich hinzufügen, damit die DLL bei eingehenden Ticks aktualisiert wird? Fast alle meine Recherchen ergaben Variationen der Verwendung von

ExtCountedBars = IndicatorCounted();

um eine while-Schleife zur Berechnung zu zwingen, aber diese beziehen sich alle auf Berechnungen in der .mq4-Datei selbst. Ich möchte die DLL zur Neuberechnung zwingen. Zweitens möchte ich, dass diese Neuberechnung nur bei Abschluss eines Balkens und nicht bei jedem Tick erfolgt.

 

Die For-Schleife sollte sein

for(int zz=MaximumRecords-1;.................

10 Datensätze nehmen die Positionen 0 bis 9 in einem Array ein

 
Tzuman:
For-Schleife sollte sein

for(int zz=MaximumRecords-1;.................

10 Datensätze nehmen die Positionen 0 bis 9 in einem Array ein

Ich fürchte, das hat nicht geholfen, die DLL wird immer noch nicht mit neuen Ticks aktualisiert.

 

Mistigri's Beispielvideo nicht verfügbar

Hallo zusammen,

Könnte jemand das Beispielvideo von Mistigri im Internet zur Verfügung stellen?

 
jocinet:
Hallo zusammen, könnte jemand das Beispielvideo von Mistigri im Internet zur Verfügung stellen?

Mistigri hat es wieder verfügbar gemacht unter:

Projekte | PsNouvion

 

Ein Pfad für C#-Entwickler: MT4/5 -> C# DLL

Diejenigen C#-Entwickler, die eine DLL für Metatrader in C# statt in C++ schreiben möchten, haben jetzt einen Weg, dies zu erreichen. Es gibt einen sehr interessanten Artikel mit dem Titel "Exposing C# code to MQL5 using unmanaged exports", den ich gerade gelesen habe.

Lesen/überfliegen Sie den Artikel und lesen Sie den Abschnitt 2.5 aufwärts.

Freigabe von C#-Code für MQL5 unter Verwendung von nicht verwalteten Exporten - MQL5-Artikel

Lesen Sie die Anweisungen, laden Sie dann die Vorlage für C# "Unmanaged Export Library" herunter und legen Sie die Zip-Datei im richtigen Verzeichnis ab (indem Sie den Anweisungen auf dieser Seite folgen):

C# Projekt Vorlage für Unmanaged Exports

Laden Sie VS und wählen Sie die Vorlage "Unmanaged Export Library". Folgen Sie den Codebeispielen. Hoffentlich hilft das jemandem!

 

Kritischer Fehler, aber kein Absturz und so schreibe ich die DLL

Endlich kann ich meine dll mit MistigriFX Sample Debug (kurz MFX_SD) auf Visual Studio 2008 Express schreiben.

Allerdings habe ich ein komisches Problem:

Es gibt kein Problem, wenn ich drei MFX_SD mit verschiedenen Perioden in den Chart einfüge. Wenn ich jedoch drei weitere MFX_SD an das zweite Diagramm mit unterschiedlichen Periodeneingaben anhänge, erhalte ich zwei Fehlermeldungen (Aufruf der Funktion 'GetSMAArray' von der dll 'Mistigri FX Sample 1.dll', kritischer Fehler") und der Experte funktioniert nicht mehr.

Ich sehe also zwei Charts, in einem Chart laufen alle drei MFX_SD gut jeden Tick, in einem anderen sehe ich nur einen MFX_SD, der jeden Tick läuft und die anderen beiden nicht.

Haben Sie einen Rat für mich?

Beigefügt ist, wie ich die dll in Visual Studio 2008 schreiben. Ich schreibe dies in Textdokument, so dass Sie es von Ihrem Visual Studio lesen können.

Wenn Sie irgendeinen Fehler haben, verfluchen Sie sich bitte selbst, wenn Sie den Rat von einem unerfahrenen Programmierer wie mir befolgen .

Vielen Dank im Voraus.

 

Kritischer Fehler behoben

Nach mehreren Versuchen habe ich endlich die "kritischen Fehlermeldungen" gelöst (siehe meinen vorherigen Beitrag).

Es hat nichts mit der Art und Weise zu tun, wie ich die .dll gemacht habe, aber es hat mit der fehlenden Logik in der GetSMAArray-Funktion in den MFX_SD-Codes zu tun.

Hier ist MFX_SD-Codes, die ich markieren Sie die fehlende Logik.

for ( int i = 0; i < MaximumRecords; i++)

{

double Summe = 0.0;

for ( int k = 0; k < Period ; k++ )

{

Sum += Raten[MaximumRecords-i-1-k].close;

}

Ergebnis[MaximumRecords-i-1] = Summe / Periode ;

}

Angenommen, wir haben Period = 2, MaximumRecord = 75, und i = 74. Das ergibt einen Fehler bei der Berechnung:

Summe += Raten[MaximumRecords-i-1-k].schließen;

weil das Ergebnis von MaximumRecord - i - 1 - k gleich -1 ist. Der einzige Wert für Raten [-1] ist Null, so dass auch der Wert von Summe gleich Null ist. Und da wir den SMA berechnen, müssen wir die Summe durch Period teilen, was Null geteilt durch 2 ist.

Wenn Sie das nicht glauben, hängen Sie mehrere MFX_SD an einen 1-Minuten-Chart mit unterschiedlichen Eingabeperioden, aber eine der MFX_SD muss die Eingabeperiode = 1 haben. Sehen Sie sich das MT-Terminal-Fenster an und klicken Sie auf die Registerkarte Experte. Sie werden eine kritische Fehlermeldung sehen und der Experte funktioniert nicht mehr. Wenn Sie sich jedoch den Chart ansehen, läuft nur MFX_SD mit Periode = 1 weiter.

Ich denke, was MistigriFX versucht zu zeigen, in seinem Video war, wie man dll und Übergabe Arrays zu dll. Wenn er in seiner SMA-Logik korrigieren muss, wäre es ein Video, das ernsthaft Kopfschmerzen zu sehen. Das ist, warum er zeigen uns mit nicht-korrekt, aber ein einfaches Beispiel für einfache MA.

Glücklich dll machen.

 

MT4 Erweiterung - Ihr Kurs

Hallo codersguru,

könnten Sie mir bitte einige Links zu Ihrem Kurs geben,

oder pdf-Handbuch.

Ich würde jede Literatur benötigen, um mehr darüber zu lernen.

Vielen Dank!

Mit freundlichen Grüßen

Ivan

 

...

Im Ordner experts\samples\DLLSample von metatrader (jeder metatrader installiert es dort) gibt es ein Beispiel (mql und C++-Quellcode, mit Projekt und def-Datei), das alles ist, was Sie über dll-Aufrufe wissen müssen (alle möglichen Parametertypen, die von metatrader zur dll und zurück "Kommunikation" unterstützt werden, sind dort abgedeckt) Der Rest ist bis zu Ihrem Wissen von C/C++.

holesovsky:
Hallo codersguru,

Könnten Sie mir bitte einige Links zu Ihrem Kurs geben,

oder ein pdf-Handbuch.

Ich würde jegliche Literatur benötigen, um mehr darüber zu erfahren.

Vielen Dank!

Mit freundlichen Grüßen

Ivan