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
Position in diesem EA hinzufügen
Hallo,
zuerst muss ich mich entschuldigen, weil Englisch nicht meine Muttersprache ist.
Wie kann ich diesen EA modifizieren, um ihm zu sagen, dass er eine Position (0,1 Lots kaufen) am Ende des Balkens hinzufügen soll, wenn der RSI über 67 ist, und verkaufen soll, wenn der RSI unter 33 ist?
Zum Beispiel:
Zeit Schluss RSI
17:31 1,3855 69,3 ---> Kauf 0,1
17:32 1,3858 70,5 ---> kaufen 0,1
17:33 1.3849 66.8 ---> keine Aktion
17:34 1.3856 68.4 ---> kaufen 0.1
Gesamtposition +0,03
Dasselbe gilt für Leerverkäufe.
//+------------------------------------------------------------------+
//| Diese MQL wird von Expert Advisor Builder generiert.
//| Expert Advisor Builder für MetaTrader 4
//| |
//| Der Autor kann in keinem Fall für Schäden jeglicher Art haftbar gemacht werden. |
//| Verwendung auf eigene Gefahr. |
//| |
//+------------------- DIESE KOPFZEILE NICHT ENTFERNEN --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.1;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Aktuell;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; sonst Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Startfunktion |
//+------------------------------------------------------------------+
int start() {
int Auftrag = SIGNAL_NONE;
int Gesamt, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Auftrag = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);
double Buy1_2 = 67;
double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);
double Sell1_2 = 33;
//+------------------------------------------------------------------+
//| Variablenende |
//+------------------------------------------------------------------+
//Position prüfen
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Schließen
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal Ende(Beenden Kaufen) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
fortfahren;
}
//Trailing-Stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
fortfahren;
}
}
}
} sonst {
//Schließen
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
weiter;
}
//Trailing-Stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
fortfahren;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
wenn (Kauf1_1 > Kauf1_2) Auftrag = SIGNAL_BUY;
if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal Ende |
//+------------------------------------------------------------------+
//Kaufen
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Prüfen der freien Marge
if (AccountFreeMargin() < (1000 * Lots)) {
Print("Wir haben kein Geld. Freie Marge = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; sonst StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; sonst TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Fehler beim Öffnen der BUY-Order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Verkaufen
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Prüfen der freien Marge
if (AccountFreeMargin() < (1000 * Lots)) {
Print("Wir haben kein Geld. Freie Marge = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; sonst StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; sonst TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Fehler beim Öffnen der SELL-Order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
Herzlichen Dank für Ihre Hilfe
Panurgo
Wie kann man den Handel nach dem Gewinn des laufenden Tages beenden?
Hallo.
Ich habe ein Problem. Ich werde einen EA programmieren.
Wenn ein Gewinn von 20 PIP des Tages gemacht wird, so soll der EA keine Order bis zum nächsten Tag öffnen.
Bitte helfen Sie mir.
Danke
fxbeginner
Hallo!
Ich habe ein Problem. Ich werde einen EA programmieren.
Wenn ein Gewinn von 20 PIP des Tages genommen wird, so sollte der EA keine Bestellung bis zum nächsten Tag öffnen.
Bitte helfen Sie mir.Eine Idee wäre, den Handel nach der ersten Order des Tages nicht zuzulassen. Fügen Sie nach der Funktion ordersend() ein "trade = false;" ein.
Setzen Sie dann die Handelszulassung an jedem neuen Tag zurück:
if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- Dies ist ein neuer Tag
timeprev = iTime(Symbol(),PERIOD_D1,0);
trade = true; }
Wenn Sie dann Ihr Signal überprüfen:
if(trade) { Ihre Handelsbedingung hier }
Nur ein Beispiel ...
FerruFx
Versteckte Orders
Wie kann ich einen EA so programmieren, dass alle Kauf- oder Verkaufsstopp-Aufträge vor den neugierigen Augen der Makler verborgen werden. Der aktuelle EA hat Kaufstopps und Verkaufsstopps als ausstehende Aufträge.
Danke
LF
Wie programmiere ich einen EA, um alle Buy- oder Sell-Stop-Orders vor den neugierigen Augen der Broker zu verbergen? Der aktuelle EA hat Kaufstopps und Verkaufsstopps als ausstehende Aufträge.
Danke
LFZeichnen Sie den Buystop- und Sellstop-Wert innerhalb des EA auf. Sobald der Preis das Buystop-Niveau überschreitet, senden Sie eine Kauforder und umgekehrt für den Sellstop.
Zeichnen Sie den Buystop- und Sellstop-Wert innerhalb des EA auf. Sobald der Preis das Buystop-Niveau überschreitet, senden Sie einen Kaufauftrag und umgekehrt für den Sellstop.
Danke. Ich habe Ihnen eine PM geschickt
EA auffordern, die Arbeit einzustellen
Hallo zusammen,
Ich habe meinen ersten EA nach fast 7 Tagen Versuch und Irrtum, Ausschneiden und Einfügen und stundenlanger Recherche fast fertiggestellt....
Kann mir bitte jemand sagen, wie man einem EA eine Exit- oder Stop-Funktion zuweist?
Ich möchte, dass der EA alle laufenden und schwebenden Geschäfte löscht und nach Erreichen eines Eigenkapitals von 10.000 aussteigt. Unten sehen Sie den Teil des Codes, den ich bisher verwendet habe:
int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;
for (cnt = total ; cnt >=0 ; cnt-- )
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )
{if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if(OrderType()>OP_SELL)
OrderDelete(OrderTicket());
StopTrade=true;}
}
if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)Wie Sie sehen können, prüft der EA die Equity und setzt dann den bool-Wert der StopTrade-Variable auf true. Der EA bestätigt dann den Befehl und verarbeitet einen Zyklus lang nichts unter StopTrade != true, aber dann wird der bool-Wert der StopTrade-Variable zurückgesetzt und der Handel wird fortgesetzt, denke ich.
Erstens: Gibt es irgendeine Möglichkeit, das zu erreichen, was ich brauche, und zwar so, wie ich es tue?
Zweitens: Gibt es eine Funktion, mit der ich dem EA einfach sagen kann, dass er aufhören soll?
Für jede Hilfe bin ich dankbar.
Was ist falsch mit diesem Code?
Kann mir jemand sagen, warum ich einen Fehler mit diesem Befehl in meinem EA generiere?
buyOrder=OrderType();
else
Print("OrderSelect returned the error of ",GetLastError());
bTicket is assigned in this prior line:
if(bTicket<=0) Print("Error = ",GetLastError());
else Print("ticket = ",bTicket);DasVerschieben meines Beitrags hat nicht geholfen.
Ich kann die magische Zahl nicht verwenden, weil ich den gleichen EA auf 8 verschiedenen Paaren laufen lasse. Wo ist mein ursprünglicher Beitrag, damit ich ihn verfolgen kann?
Was ist falsch mit diesem Code?
Kann mir jemand sagen, warum ich mit diesem Befehl in meinem EA einen Fehler erzeuge?
buyOrder=OrderType();
else
Print("OrderSelect returned the error of ",GetLastError());
bTicket is assigned in this prior line:
bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);
if(bTicket<=0) Print("Error = ",GetLastError());
else Print("ticket = ",bTicket);Meine schwebende Order wird platziert und gibt die Ticketnummer zurück, die bTicket zugewiesen wurde, aber dann funktioniert bTicket nicht in meinem OrderSelect(). Ich erhalte einen Fehler 0 zurück. Ich habe versucht, durch SELECT_BY_POS zu referenzieren und die zurückgegebene Ticketnummer bTicket zuzuweisen, und es hat gut funktioniert, aber es gibt keine Möglichkeit zu wissen, was die Positionsnummer aller meiner Aufträge sein wird, nur um das Skript auszuführen. Jede Hilfe ist sehr willkommen.