Benötige Hilfe bei der Kodierung

 

Hallo

ich versuche, einen sehr einfachen EA zu programmieren, aber ich bin kein Programmierer und ich habe noch nie einen EA gemacht.

Ich habe das MACD Sample von MT4 genommen und einige Teile bearbeitet und den ganzen Rest gelöscht, von dem ich dachte, dass ich ihn nicht brauche.

Ich bin sicher, dass mein Code wirklich schrecklich ist.

Ich möchte, dass der EA wie folgt funktioniert:

Mein benutzerdefinierter Indikator ELine hat zwei Linien, die sich in Schritten bewegen. Manchmal ist eine höher als die andere, manchmal sind sie die gleichen.

Wenn eine Linie die andere kreuzt, möchte ich, dass der EA eine Long-Position oder eine Short-Position einnimmt, je nachdem, welche Linie nach oben kreuzt.

Es gibt immer eine offene Position, außer beim Start des EAs.

Wenn ich versuche, es zu kompilieren, sagt es "if" - Semikolon erwartet (20,7)

Dann sollte im nächsten Schritt immer eine bereits bestehende Position geschlossen werden, wenn eine neue eröffnet wird, aber das konnte ich bis jetzt nicht programmieren.

Könnte jemand bitte die Fehler in meinem Code korrigieren und mir vielleicht sagen, wie ich die Positionen immer schließen kann, wenn der EA eine neue Position eröffnet?

Herzlichen Dank!

Dateien:
el1.mq4  2 kb
 

Hallo

ich habe dieses Problem nun gelöst. Ich konnte den EA kompilieren und habe versucht, ihn zu testen. Aber leider kauft und verkauft er nichts !

Ansonsten scheint er zu funktionieren, dies ist das Journal:

14:16:18 EL1 inputs: Lots=0.1; Timeframe=240;

14:16:18 ELine GBPUSD,H4: entfernt

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: erfolgreich geladen

Und dies ist der EA Code:

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

extern double Lots = 0.1;

extern int Zeitrahmen = 240;

string strDirCurrent="keine";

string strDirPrevious="none";

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

// Prüfung der aktuellen Richtung

if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="lang";

if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="short";

// Vergleich mit der vorherigen Richtung und Eröffnung einer Position, wenn es eine Änderung gab

if(strDirCurrent=="long" && strDirPrevious=="short")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green);

if(strDirCurrent=="short" && strDirPrevious=="long")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red);

strDirPrevious=strDirCurrent;

}

// das Ende.

Jede Hilfe ist sehr willkommen !!

Danke

Eric

 

Hallo,

wenn ich NUL L in NULL ändere, erhalte ich keine Fehler bei der Kopilierung

 

wenn Sie im Entwicklungskurs auf diesem Board nachsehen, finden Sie "My_First_EA", ein Codind mit sich kreuzenden MAs

Ich konnte keine Ergebnisse beim Testen deines EAs erzielen und ich bin auch sehr neu im EA-Proramming. Entschuldigung

 

Danke Balue. Das Leerzeichen in NULL ist nur vom Kopieren und Einfügen, in meinem Code ist es richtig geschrieben. Und es kompiliert auch (die zweite Version).

Ich kenne den MQL-Kurs (auch wenn ich noch nicht ganz durch bin).

Ich habe einen ähnlichen EA für ADX geschrieben, um ihn zu testen, und dort funktioniert er. Nur wenn ich versuche, meine benutzerdefinierten Indikator zu verwenden, tut es nicht handeln.

 

Bitte fügen Sie Ihren Indikator bei, damit wir ein Backtesting durchführen können

Hallo

Toller Code - ich würde ihn gerne backtesten - bitte geben Sie uns Ihre icustom Eline.

Ich habe Ihren Code umfangreich modifiziert.

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

 

Behoben, hoffe ich

Probleme behoben. Versuchen Sie dies

Wir müssen noch an der Geldverwaltung arbeiten usw.

Dateien:
el1.mq4  4 kb
 

Danke, jetzt bekomme ich das:

2006.01.17 18:59:10 2006.01.12 08:20 EL1: Ungültige Doppelzahl als Parameter 7 für OrderSend-Funktion

2006.01.17 18:59:10 2006.01.12 08:10 EL1: Kommentar für OrderSend-Funktion muss ein String sein

2006.01.17 18:59:09 EL1: erfolgreich geladen

und der Fehler wiederholt sich etwa eine Million mal ;-)

aber ich denke, dieser Fehler ist leicht zu beheben.

 

Versuchen Sie dies

Ich teste den Code nicht - wenn Sie mir den Indikator geben, werde ich ihn testen - eigentlich werde ich ihn ziemlich bald mit einem anderen Indikator testen. Trotzdem hoffe ich, dass dies hilft.

Dateien:
el1_1.mq4  5 kb
 

Ich versuche immer noch zu reparieren - warte einfach, ich werde jetzt posten

Immer noch am Reparieren

 

Behoben - hoffentlich

Ihnen fehlte eigentlich nur ein Take-Profit-Wert (tp).

Brauchen Sie nicht ein tp und ein stoploss?

Viel Glück

Dateien:
el1_2.mq4  5 kb