Wie programmiert man? - Seite 179

 
Roger09:
Ich habe es mehrmals mit dem Alpari-Account versucht, keine Fehler. Nur einmal, als ich das Skript in das Verzeichnis für Experten legte und als EA startete.

Es liegt daran, dass ich Sie nach Verzeichnissen gefragt habe.

Entschuldigung.

Ich glaube, ich habe das Problem herausgefunden. Ich benutze Windows Vista und normalerweise führe ich "als Administrator" aus. Ich habe es ohne das versucht und es scheint jetzt gut zu funktionieren.

 

Übergabe eines Arrays von MT4 .mq4 an C++ DLL

Bitte um Hilfe.

Ich habe ein Problem bei der Übergabe eines einzelnen Arrays, das 8 Indikatorwerte enthält, an eine C++ DLL. Es ist sehr einfach, aber ich scheine -1 zu erhalten, wenn ich die

Forexindex() Funktion aufrufe, die eigentlich die importierte Funktion gepModel ( d [] ) aus der DLL aufruft. Die ForexIndex Funktion sollte 0 oder 1 aus der DLL zurückgeben.

Ich vermute, dass ich etwas in der .mq4-Datei in der Forexindex() falsch mache. Jede Hilfe wird sehr geschätzt werden. Unten ist der einfache Code. Die C++ DLL-Datei ist in Ordnung, sie lässt sich ohne Fehler kompilieren, also liegt das Problem bei der mq4-Datei.

================================MQ4 file====================

#import "JadeClass.dll"

int gepModel( double& d[] );

#import

int start()

{

........

........

........

ForexIndex();

.......

......

......

.....

}

int ForexIndex()

{

int myindex;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;

int gezählte_Balken=IndicatorCounted();

if (gezählte_Balken<0) return(-1);

if (gezählte_Balken>0) gezählte_Balken--;

int pos=Balken-gezählt_Balken;

MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0);

Rsi = iRSI(NULL,PERIOD_M5,10,0,0);

Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0,0);

Vol = iVolume(NULL,PERIOD_M5,0);

while(pos>=0)

{

ind[0] = MA_Close;

ind[1] = MA_High;

ind[2] = MA_Low;

ind[3] = MA_Open;

ind[4] = Macd;

ind[5] = Rsi;

ind[6] = Stoch;

ind[7] = Vol;

myindex = gepModel(ind);

pos--;

}

Print( " Myindex = " , myindex);

return (myindex);

}

=========================DLL Quellcode ===========================

#include "stdafx.h"

#include "JadeClass.h"

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

// Das eine und einzige CJadeClassApp-Objekt

CJadeClassApp theApp;

MT4_EXPFUNC int __stdcall gepModel(double d[]);

MT4_EXPFUNC int __stdcall gepModel(double d[]); { MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ Die Def-Datei für DLL-Quellcode ===================

JadeClass.def : Deklariert die Modulparameter für die DLL.

LIBRARY "JadeClass"

EXPORTE

; Explizite Exporte können hier stehen

gepModel

========================================

 

Ich brauche Hilfe beim Hinzufügen von Code für nur einen Handel pro Signal

Ich lerne gerade den mq4-Code und habe viele Stunden damit verbracht, herauszufinden, wie man nur einen Handel pro Signal codiert. Ich habe versucht, ein paar Möglichkeiten, aber nicht bekommen, es zu machen nur einen Handel. Beispiel wäre, wenn der TP getroffen wird, würde es eine andere gleiche Seite Handel, weil das Signal noch gut ist. Ich möchte es zu warten, bis die Reverse-Signal und dann in diesem Handel setzen. Ich habe die EA hier ohne meine Änderungen angehängt. Vielen Dank im Voraus für Ihre Hilfe. Marty

Dateien:
 
martypatty:
Ich lerne gerade mq4-Code und habe viele Stunden damit verbracht, herauszufinden, wie man nur einen Handel pro Signal codieren kann. Ich habe versucht, ein paar Möglichkeiten, aber nicht bekommen, es zu machen nur einen Handel. Beispiel wäre, wenn der TP getroffen wird, würde es eine andere gleiche Seite Handel platzieren, weil das Signal noch gut ist. Ich möchte es zu warten, bis die Reverse-Signal und dann in diesem Handel setzen. Ich habe die EA hier ohne meine Änderungen angehängt. Vielen Dank im Voraus für Ihre Hilfe. Marty

Ich habe vor kurzem auf mql4.com herausgefunden, wie man das macht, nachdem ich Probleme mit zu vielen geöffneten Trades auf einem Bar hatte. Die Artikel auf mql4 haben mir anfangs sehr geholfen, außerdem haben sie eine Code-Datenbank, die Ihnen gute Beispiele bietet, mit denen Sie arbeiten können. Verwenden Sie einfach die Suchfunktion und klicken Sie auf die Schaltfläche "Als Beiträge anzeigen". Das erspart Ihnen das Durchsuchen vieler Seiten eines Themas, nur um die eine Antwort zu finden, die Sie brauchen. Für Ihr Problem verwenden Sie einfach diesen Code:

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS double STD_MA_Buffer[]; ist in der Sektion der globalen Variablen definiert.

 

Bitte reparieren Sie meinen EA

Ich habe eine Idee, aber ich kann es zu mql4 Code zu schreiben, können Sie mir helfen???

Dies ist mein Problem

Dies ist meine Systemdefinition:

A. if orders=0 >> OP buy && OP sell

B. Gitter durch + oder - Bedingung erstellen

z.B. wenn OPbuy + Raster = OPbuy

wenn OPbuy - Raster = OPsell

dasselbe für OPsell

C. wenn Gewinn > 0 && Gewinn > Mindestgewinn ( Gewinnsperre )

Stop einer beliebigen Order ( OPbuy || OPsell ) und Verschieben des Trailing Equity oder des Profit Point

D. Schließen nach Gewinn, kann nach Equity oder nach Punkt erfolgen

E. .mq4 Format, weil ich wissen möchte, wo mein Fehler liegt

ich habe ein Problem mit Punkt B. Bitte helfen Sie mir

 
mazgen:
Ich habe eine Idee, aber ich kann es zu mql4 Code zu schreiben, können Sie mir helfen????

Das ist mein Problem

Dies ist meine Systemdefinition:

A. if orders=0 >> OP buy && OP sell

B. Raster durch + oder - Bedingung erstellen

z.B. wenn OPbuy + Raster = OPbuy

wenn OPbuy - Raster = OPsell

dasselbe für OPsell

C. wenn Gewinn > 0 && Gewinn > Mindestgewinn ( Gewinnsperre )

Stop einer beliebigen Order ( OPbuy || OPsell ) und Verschieben des Trailing Equity oder des Profit Point

D. Schließen nach Gewinn, kann nach Equity oder nach Punkt erfolgen

E. .mq4 Format, weil ich wissen möchte, wo mein Fehler liegt

Ich habe ein Problem mit Punkt B. Bitte helfen Sie mir

Wie wäre es, den Quellcode anstelle von ex4 zu senden?

 
figurelli:
Was über senden Quellcode insted von ex4 ?

Zeigen Sie mir einfach, wie man es codiert,

dies ist mein letzter DetailStatement

fix this.rar

Ich hoffe, es kann meine EA, das Problem, dass Schleife auf OP verkaufen, warum???

 

Frage zurTrendlinie

Neu zu codieren und nur Dinge für die Praxis zu tun, wollte ich eine Trendlinie an der aktuellen Bar zu stoppen. Was ich kam mit war einfach die Farbe der es an der aktuellen bar auf die Hintergrundfarbe zu ändern. Im Grunde genommen wird die Linie einfach über den Balken hinaus in den Hintergrund eingeblendet und verschwindet an diesem Punkt.

Jetzt frage ich die Experten, wie man das richtig macht. Ich weiß, dass es viele Möglichkeiten gibt, die gleiche Sache zu erreichen, so bin ich nur auf der Suche, um einige andere Ideen auf, was ich getan haben könnte, in dem Bemühen, mehr zu lernen sehen.

Vielen Dank

 

Sehr merkwürdiges MQL-Code-Verhalten

Hallo zusammen,

Metatrader Version: 4.00 Build 224 (15. Mai 2009)

Metaeditor Version: 4.00 Build 224 (14 Mai 2009)

Ich bin auf einen sehr merkwürdigen Fehler in MQL gestoßen, der mich völlig verblüfft hat, so sehr, dass ich mir meinen gesamten alten Code noch einmal ansehe, um sicherzustellen, dass er so geschrieben ist, dass dieses Problem vermieden wird.

Ich hoffe, dass jemand Licht ins Dunkel bringen kann, was genau hier los ist.

Hier ist der Code, ein einfacher Indikator, der im Wesentlichen nichts tut. Allerdings habe ich im init()-Abschnitt einen Aufruf an 2 Funktionen platziert, wenn die Chart-Periode H1 ist.

Die beiden Funktionen sind in jeder Hinsicht identisch, außer in einer Hinsicht. Die eine hat ein statisches int-Array definiert und die andere ein nicht-statisches int-Array. Die Funktionen geben lediglich die Größe des lokal definierten Arrays aus, weisen den Arrayelementen einige Werte zu und geben sie dann aus.

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

Wenn man sich den Code ansieht, sollte es keine Umstände geben, unter denen sich die beiden Funktionen unterschiedlich verhalten.

Wenn ich den Indikator jedoch an einen M5-Chart anhänge und dann zum H1-Zeitrahmen wechsle, erhalte ich die folgende Ausgabe.

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0

2009.05.23 18:12:47 afunc EURUSD,M5: uninit Grund 3

2009.05.23 18:12:47 afunc EURUSD,M5: deinitialisiert

2009.05.23 18:12:45 afunc EURUSD,M5: initialisiert

2009.05.23 18:12:43 afunc EURUSD,M5: erfolgreich geladen

Beachten Sie, dass, obwohl ich in afunc() 'int array[4]' definiert habe, die Größe dieses Arrays tatsächlich NULL ist und ich den Elementen des Arrays keine Werte zuweisen kann. Diese Funktion funktioniert offensichtlich nicht wie erwartet.

Beachten Sie, dass ich 'static int array[4]' in afunc_static() definiert habe und die Größe korrekt als 4 angezeigt wird, ebenso wie die Werte, die ich den Elementen des Arrays zugewiesen habe. Diese Funktion funktioniert einwandfrei.

Fazit. Wenn Sie ein nicht-statisches Array in einer Funktion definieren und diese Funktion nicht von Ihrem Indikator aufgerufen wird, könnten Sie ein Problem haben.

Wenn Sie anschließend den Zeitrahmen des Diagramms wechseln und dann die Funktion aufrufen, wird die Größe aller lokal definierten Arrays in der Funktion auf Null gesetzt, unabhängig davon, wie Sie die Größe der Arrays definiert haben.

Die einzige Möglichkeit, dieses Problem zu umgehen, besteht meines Erachtens darin, dafür zu sorgen, dass alle lokal definierten Arrays in Ihren Funktionen als statische Arrays definiert sind. Ich weiß, dass das verrückt ist, aber ich sehe keine andere Möglichkeit, das Problem zu vermeiden.

Ich würde mich wirklich über jede Rückmeldung zu diesem Thema freuen.

Mit freundlichen Grüßen,

Laurence.

Dateien:
afunc.mq4  1 kb
 
Grund der Beschwerde: