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
letzte Kerze Detail
Hallo,
brauchen einen Indikator, um die letzte Kerze hoch, niedrig, offen und schließen Wert zeigen...
Warum wird dann nicht ein Trailing-Stop verwendet? Ich meine, das würde fast 100 % (fast) das tun, was Ihre ursprüngliche Idee ist, und es ist viel, viel einfacher zu codieren
Das Problem ist (ich glaube, ich habe es nicht richtig formuliert oder war nicht 100%ig korrekt), dass die Stopps (vorerst jedenfalls) während des gesamten Handels gleich bleiben. Wie wäre es mit einem Ansatz wie diesem, wenn zwei Trades offen sind, kann ein Code die Anzahl der offenen Aufträge überprüfen, wenn es über 1 (im Grunde 2) ist, dann haben beide Trades ihre Take-Profits auf einen bestimmten Betrag geändert, die höher war als vorher. Im Grunde genommen findet hier eine Art Hedging statt.
Vielen Dank!
madmax3
[langtitle=pl]Proszę o pomoc w napisaniu EA działającego n[/langtitle]
[lang=pl]Witam czy bugł by ktoś mi to dopracować był rym wdzięczny : Chciałbym rzeby kupywał LevelRSIbuy=20; a sprzeawał jak dojdzie LevelRSIsell=80; i żeby dało się ustawiać pozostałe żeczy kt�re są pod extern int MagicNumber
#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 = True;
extern double Lots = 0.1;
extern int Slippage = 1;
extern bool UseStopLoss = True;
extern int StopLoss = 10;
extern bool UseTakeProfit = True;
extern int TakeProfit = 5;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern int LevelRSIbuy=20;
extern int LevelRSIsell=80;
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 Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
//+------------------------------------------------------------------+
//| 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) |
//+------------------------------------------------------------------+
if (False) Auftrag = SIGNAL_BUY;
if (False) Auftrag = 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);
}
//+------------------------------------------------------------------+[/lang]
Ich versuche, diesen Code zu verwenden, um den Take-Profit der offenen Geschäfte zu erhöhen (wenn es zwei offene Geschäfte gibt).
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);total=OrdersTotal(); btw.
Ich kann es immer noch nicht zum Laufen bringen, irgendwelche Vorschläge?
Danke!
madmax3
Hilfe Begrenzung der Anzahl der täglichen Trades auf 1
Ich bin neu in der Programmierung und brauche Hilfe in MQL4. Ich habe einige Coder-Guides studiert und herausgefunden, wie ich Trades basierend auf meiner Handelsstrategie öffnen und schließen kann. Meine Schwierigkeit besteht darin, die Anzahl der täglichen Trades auf 1 zu begrenzen. Ich möchte nicht mehr als 1 Trade pro Tag öffnen (entsprechend der Serverzeit). Ich möchte also die offenen und geschlossenen Aufträge überprüfen, um festzustellen, ob heute ein Auftrag eröffnet wurde. Wenn heute ein Auftrag eröffnet wurde, dann eröffne keine weiteren Aufträge für den Tag.
Bitte helfen Sie mir.
PS: es wird vorausgesetzt, dass Ihr EA einen MagicNumber-Parameter hat (genau dieser Name)
PPS: es funktioniert auf Zeitrahmen bis zum Tag. Auf Wochen- und Monatscharts funktioniert er nicht.
Ich bin neu in der Programmierung und brauche Hilfe in MQL4. Ich habe einige Coder Guides studiert und herausgefunden, wie man Trades basierend auf meiner Handelsstrategie öffnet und schließt. Meine Schwierigkeit besteht darin, die Anzahl der täglichen Trades auf 1 zu begrenzen. Ich möchte nicht mehr als 1 Trade pro Tag öffnen (entsprechend der Serverzeit). Ich möchte also die offenen und geschlossenen Aufträge überprüfen, um festzustellen, ob heute ein Auftrag eröffnet wurde. Wenn heute eine Order eröffnet wurde, dann eröffne keine weiteren Orders für den Tag. Bitte helfen Sie mir.
[langtitle=pl] Funktion Tema in Tema(close,period) umwandeln[/langtitle]
Witam
Jeszcze raz bo cos sie zle wkleilo. Jak przekazac wartosc funkcji Tema do Var1. Jak robie tak jak w kodzie ponizej to Var1 jest puste.
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property indicator_width1 2
//---- input parameters
extern int EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")");
switch(Apply_To_Price)
{
case 1:
{txt="Open";break;}
case 2:
{txt="High";break;}
case 3:
{txt="Low"; break;}
case 4:
{txt="Median"; break;}
case 5:
{txt="Typical"; break;}
case 6:
{txt="WghtdClose"; break;}
default:
{txt="Close";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period;
}
if (counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
So wie hier (TEMA) ...
Wenn Sie es wie eine Funktion haben wollen, dann sollte es etwa so aussehen:Ich füge auch einen Beispielindikator bei. Der Vorteil der Übergabe eines Wertes anstelle des Preistyps ist, dass man auf diese Weise tema auf jeden beliebigen Wert anwenden kann (es muss kein tema eines Preises sein, es kann z.B. tema eines anderen Indikators sein)
Witam
Jeszcze raz bo cos sie zle wkleilo. Jak przekazac wartosc funkcji Tema do Var1. Jak robie tak jak w kodzie ponizej to Var1 jest puste.
[PHP]
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Dunkelblau
#property indicator_width1 2
//---- Eingabeparameter
extern int EMA_period=4;
//---- Puffer
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//---- Indikatoren
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexPuffer(0,Var1);
SetIndexPuffer(1,TemaPuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")");
switch(Apply_To_Price)
{
case1:
{txt="Open";break;}
case 2:
{txt="Hoch";break;}
case 3:
{txt="Niedrig"; break;}
case 4:
{txt="Mittelwert"; break;}
case 5:
{txt="Typisch"; break;}
case 6:
{txt="WghtdClose"; break;}
default:
{txt="Close";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
int gezählte_Balken=IndikatorGezählt();
if (gezählte_Balken==0)
{
limit=Balken-1;
limit2=limit-EMA_period;
Grenze3=Grenze2-EMA_Zeitspanne;
}
if (gezählte_Takte>0)
{
limit=Balken-gezählt_Balken-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
Hilfe bei HAMMER-Code bitte
Hallo,
Ich beginne neu in mql4. Ich versuche mit dem folgenden Indikator schwarze und weiße Hämmer in Candlesticks auszuwählen. Allerdings, in der Tabelle manchmal Candlesticks erhalten falsche Identifizierung Text (weiße Hammer Kerze wird als schwarze Hammer Kerze und umgekehrt identifiziert). Bitte helfen Sie mir in dieser Situation, vielen Dank im Voraus.
#property indicator_chart_window
int limit;
//---- Puffer
string hammer[200000];
//+------------------------------------------------------------------+
//| CuStom Indikator-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| CuStor Indikator Deinitialisierungsfunktion
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT);
//----
return(0);
}
//+------------------------------------------------------------------+
//| CuStom Indikator Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int N;
int N1;
int N2;
String Text;
int gezählte_Balken=IndicatorCounted();
limit=Balken-gezählt_Balken;
for(N = 1; N < limit; N++) {
hammer[N]= CharToStr(N);
N1 = N + 1;
N2 = N + 2;
//----
//---- Prüfung auf mögliche Fehler
if(gezählte_Balken<0) {
Alert("NO Bars..");
return(-1);
}
// Prüfung auf Hammer White
if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10))) {
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// Prüfung auf Hammer Black
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))) {
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
} // Ende der for-Schleife
return(0);
}
//+------------------------------------------------------------------+
Hallo,
Ich bin neu in mql4 starten. Ich versuche, mit dem folgenden Indikator schwarze und weiße Hämmer in Candlesticks zu erkennen. Allerdings, in der Tabelle manchmal Candlesticks erhalten falsche Identifizierung Text (weiße Hammer Kerze wird als schwarze Hammer Kerze und umgekehrt identifiziert). Bitte helfen Sie mir in dieser Situation, vielen Dank im Voraus.
#property indicator_chart_window
int limit;
//---- Puffer
string hammer[200000];
//+------------------------------------------------------------------+
//| CuStom Indikator-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| CuStor Indikator Deinitialisierungsfunktion
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT);
//----
return(0);
}
//+------------------------------------------------------------------+
//| CuStom Indikator Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int N;
int N1;
int N2;
String Text;
int gezählte_Balken=IndicatorCounted();
limit=Balken-gezählt_Balken;
for(N = 1; N < limit; N++) {
hammer[N]= CharToStr(N);
N1 = N + 1;
N2 = N + 2;
//----
//---- Prüfung auf mögliche Fehler
if(gezählte_Balken<0) {
Alert("NO Bars..");
return(-1);
}
// Prüfung auf Hammer White
if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10))) {
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// Prüfung auf Hammer Black
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))) {
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
} // Ende der for-Schleife
return(0);
}
//+------------------------------------------------------------------+Hallo Svezir,
Habe diesen Indikator für Kerzenmuster, vielleicht hilft er ja.