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
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.
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.
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
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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!