Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Brauche Hilfe mit iCustom Funktion für diesen EA kann einen benutzerdefinierten Indikator aufrufen.
Hallo, alle,
Ich würde gerne diesen (Entry.mq4) indi zu diesem (swb grid 4.1.0.3_EA) EA mit
iCustom Funktion hinzufügen, damit ich und wir diesen Indikator in der Strategie des EAs verwenden können.
der EA verwendet bereits 3 MT4 Indikatoren Bollinger Bands, Stochastic und RSI und haben
Schalter, so dass Sie entweder einen oder alle von ihnen zu verwenden, durch die Auswahl TRUE oder FALSE wählen können
und ich würde gerne diesen 4. indi(Entry.mq4) zum EA hinzufügen.
Ich würde es sehr schätzen, wenn mir jemand helfen könnte.
Vielen Dank.
die EA und indi beigefügt unten.
Noob MQL4 Hilfe benötigt, um dieses Array zu verstehen
Hallo, Programmierer
Könnte mir jemand etwas über Arrays beibringen?
Oder vielleicht habe ich mehr Probleme, diese Schleife zu verstehen, da sie sich auf dieses Array bezieht.
#property copyright "Unfinished POS by Agent86"
double v1[];
double v2[];
double val1;
double val2;
int start()
{
while(i>=0)
{
val1=iFractals(NULL, 0, MODE_UPPER,i);
wenn (val1 > 0)
{
v1=Hoch;
}
sonst
{
v1=v1;
}
val2=iFractals(NULL, 0, MODE_LOWER,i);
wenn (val2 > 0)
{
v2=Niedrig;
}
sonst v2=v2;
i--;
}
return(0);
}
Es handelt sich um ein einfaches Fraktal, und dennoch kann ich mich scheinbar nicht auf irgendwelche Elemente im Array beziehen.
Ich möchte in der Lage sein, i++ irgendwie zu inkrementieren und Print (v1); oder drucken Sie den vorherigen Wert vor der 0 oder EMPTY_VALUE.
Wenn ich damit überhaupt in die richtige Richtung gehe.
Ich habe Probleme.
Print (v1): immer == 0 und druckt 0
Ich verstehe das irgendwie, weil es eigentlich eine Schleife bis -1 ist, was == 0 ist.
Wie und wo kann ich die Print-Anweisungen platzieren, damit ich sehen kann, was vor sich geht?
Ich habe eine Vielzahl von Methoden ausprobiert und i=0 neu initialisiert, um eine alternative Schleife zu versuchen, so dass ich mich auf v1-Elemente beziehen könnte, aber alle Versuche sind fehlgeschlagen.
Im Grunde möchte ich die vorherigen Fraktale anzeigen oder sie als A hoch, B niedrig usw. für eine mögliche zukünftige Verwendung in einem ABCD-Schema Typ EA markieren.
Im Moment möchte ich hauptsächlich v1 ausdrucken, damit ich sehen kann, was es tut.
Vielleicht könnte ich etwas entwickeln, um ein vorheriges Fraktal wie A_high und/oder B_low oder ein ähnliches Schema auszuwählen.
Bin ich damit auf dem falschen Weg?
Bitte um Rat
Danke
Ich würde stattdessen mit einer FOR-Schleife arbeiten. While-Schleifen können zu Blockierungen führen, wenn Sie vergessen, das i-- einzuschließen. Da Sie die genaue Anzahl der Takte kennen, ist es einfacher zu verwenden, und außerdem wird i niemals < 0 sein. Das hilft, Verwirrung zu vermeiden.
For (int i=Balken-1;i>0;i--) {
// Code
}
Versuchen Sie, alle Array-Werte auf 0 zu setzen, gehen Sie dann zurück und weisen Sie die Indikatorwerte zu. Versuchen Sie auch ein print() direkt nach der Zuweisung Ihres Indikatorwerts. Sehen Sie, ob es überhaupt etwas zurückgibt.
Meiner Meinung nach ist es am besten, dem Array eine bestimmte Größe zuzuweisen. Sagen wir, 1000 Positionen. Es ist unwahrscheinlich, dass Sie so viele benötigen, und es wird die Berechnungen, die Sie durchführen, reduzieren. Alles, was Sie dann tun müssen, ist eine Schleife durch die letzten 999 Bars auf 0 und Werte zuweisen. Ich glaube mich zu erinnern, dass MT4 Probleme mit Array-Initialisierungen und so weiter hat.
Array-Fragen
Ich würde stattdessen mit einer FOR-Schleife arbeiten. While-Schleifen können zu Blockierungen führen, wenn Sie vergessen, das i-- einzuschließen. Da Sie die genaue Anzahl der Takte kennen, ist es einfacher zu verwenden, plus die i wird nie < 0. Es hilft, Verwirrung zu vermeiden.
For (int i=Bars-1;i>0;i--) {
// Code
}
Versuchen Sie, alle Array-Werte auf 0 zu setzen, gehen Sie dann zurück und weisen Sie Indikatorwerte zu. Versuchen Sie auch ein print() direkt nach der Zuweisung Ihres Indikatorwerts. Sehen Sie, ob es überhaupt etwas zurückgibt.
Meiner Meinung nach ist es am besten, wenn Sie dem Array eine bestimmte Größe zuweisen. Sagen wir, 1000 Positionen. Es ist unwahrscheinlich, dass Sie so viele benötigen, und es wird die Berechnungen, die Sie durchführen, reduzieren. Alles, was Sie dann tun müssen, ist eine Schleife durch die letzten 999 Bars auf 0 und Werte zuweisen. Ich glaube mich zu erinnern, dass MT4 Probleme mit Array-Initialisierungen und dergleichen hat.Ok, danke, ich werde es versuchen.
Obwohl die while-Anweisungen gut funktionieren, helfen sie mir nicht dabei, die Array-Elemente zu erhalten, die ich ausdrucken/anzeigen möchte usw.
Ich werde an dem arbeiten, was Sie gesagt haben, und einige Tests durchführen und mich wieder melden.
Danke
Ich würde stattdessen mit einer FOR-Schleife arbeiten. While-Schleifen können zu Blockierungen führen, wenn Sie vergessen, das i-- einzuschließen. Da Sie die genaue Anzahl der Takte kennen, ist es einfacher zu verwenden, plus die i wird nie < 0. Es hilft, Verwirrung zu vermeiden.
For (int i=Bars-1;i>0;i--) {
// Code
}
Versuchen Sie, alle Array-Werte auf 0 zu setzen, gehen Sie dann zurück und weisen Sie die Indikatorwerte zu. Versuchen Sie auch, direkt nach der Zuweisung Ihres Indikatorwerts ein print() auszuführen. Sehen Sie, ob es überhaupt etwas zurückgibt.
Meiner Meinung nach ist es am besten, wenn Sie dem Array eine bestimmte Größe zuweisen. Sagen wir, 1000 Positionen. Es ist unwahrscheinlich, dass Sie so viele benötigen, und es wird die Berechnungen, die Sie durchführen, reduzieren. Alles, was Sie dann tun müssen, ist Schleife durch die letzten 999 Bars auf 0 und Werte zuweisen. Ich glaube mich zu erinnern, dass MT4 Probleme mit Array-Initialisierungen und dergleichen hat.Es wird immer noch nur das Array mit allen 0-Einträgen gedruckt.
Seltsam
Argent86,
Es gibt einige Fehler in Ihrem Code:Hier ist, was Sie versuchen, ohne diese Probleme zu tun
Zugriff aus MQ4 auf eine dll-Funktion mit: Variablen-Argumenten-Listen
Hallo,
weiß jemand, ob es möglich ist, eine DLL-Funktion zu importieren, die als Argument eine Variablen-Argumenten-Liste verwendet?
z.B. vprintf - C++ Referenz
int vprintf ( const char * format, va_list arg );
wenn ja, wie würde man das machen?
Vielen Dank
MJ
Wie rufe ich eine Funktion ohne Rückgabewert auf?
Hallo Jungs und Mädels.
An einer Stelle in meinem Programm möchte ich eine Funktion aufrufen.
Allerdings hat die Funktion keinen Rückgabewert (void). Also wie rufe ich die Funktion auf,
so dass der Code innerhalb der Funktion genau an der Stelle ausgeführt wird, an der ich sie aufrufe,
als ob er an dieser Stelle selbst geschrieben worden wäre?
Ich habe einige Beispiel-Code unten.. wo ich einige Parameter zu überprüfen, und wenn Ok, ich möchte die Funktion ausführen...
Hoffe jemand kann mir dabei helfen, tx im Voraus, Jonkie76
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (Kurs >= PRICE_CLOSE)
call function ; // An dieser Stelle möchte ich die Funktion aufrufen, wie mache ich das?
sonst
Alert("Nichts tun"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNKTIONEN
//===================================================================+
//----------------------- CLOSE ORDER FUNKTION ----------------------+
void subCloseOrder()
{
int
i,
gesamt = 0,
ticket = 0,
err = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<AnzahlDerVersuche;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
sonst
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy-Fehler
{
Sleep(5000);
weiter;
}
sonst //normaler Fehler
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}
Es ist sehr einfach. Sie brauchen es nur aufzurufen, da es etwas zurückgeben würde, nur brauchen Sie kein Ergebnis zu speichern, da es beim Typ void überhaupt kein Ergebnis gibt. (gibt nichts zurück) So:
int start()
{
//----
if (Price >= PRICE_CLOSE)
subCloseOrder(); // At this point I'd like to call the function.How do I do that?
else
Alert("Do nothing"); //
//----
return(0);
}
Verwenden Sie stattdessen "void". Zum Beispiel so:
{
...
//
//
// no need to place return at the end, but if you want then use "just" return, like this
//
//
return;
}Void bedeutet, dass die Funktion keinen Wert zurückgibt und somit effektiv zu einer Prozedur und nicht zu einer Funktion wird.
Hallo Jungs und Mädels.
An einem bestimmten Punkt in meinem Programm möchte ich eine Funktion aufrufen.
Die Funktion hat jedoch keinen Rückgabewert (void). Wie kann ich also die Funktion aufrufen?
so dass der Code innerhalb der Funktion genau an der Stelle ausgeführt wird, an der ich sie aufrufe,
als ob er an dieser Stelle selbst geschrieben worden wäre?
Ich habe einige Beispiel-Code unten.. wo ich einige Parameter zu überprüfen, und wenn Ok, ich möchte die Funktion ausführen...
Hoffe jemand kann mir dabei helfen, tx im Voraus, Jonkie76
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (Kurs >= PRICE_CLOSE)
call function ; // An dieser Stelle möchte ich die Funktion aufrufen, wie mache ich das?
sonst
Alert("Nichts tun"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNKTIONEN
//===================================================================+
//----------------------- CLOSE ORDER FUNKTION ----------------------+
void subCloseOrder()
{
int
i,
gesamt = 0,
ticket = 0,
err = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<AnzahlDerVersuche;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
sonst
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy-Fehler
{
Sleep(5000);
weiter;
}
sonst //normaler Fehler
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}