Wie programmiert man? - Seite 132

 

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

 
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

 
LazyForex:
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

LF

Zeichnen 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.

 
Devil2000:
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:

bool StopTrade;

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?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

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);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

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?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

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.