Wie programmiert man? - Seite 291

 

letzte Kerze Detail

Hallo,

brauchen einen Indikator, um die letzte Kerze hoch, niedrig, offen und schließen Wert zeigen...

 
mladen:
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(total>2)

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.

 
Versuchen Sie etwas in dieser Art:
bool uniqueOnDay()

{

datetime startTime = iTime(NULL,PERIOD_D1,Time[0]);

datetime endTime = startTime+24*60*PERIOD_D1;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber) continue;

if (OrderOpenTime()endTime) continue;

return(false);

}

return(true);

}
Es wird geprüft, ob einer der geschlossenen Aufträge für das aktuelle Symbol am aktuellen Tag geöffnet wurde. Wenn am aktuellen Tag eine Order eröffnet wurde, wird false zurückgegeben (es wurde bereits eine Order an diesem Tag eröffnet), andernfalls wird true zurückgegeben (es wurde keine Order an diesem Tag eröffnet). Es prüft nicht die aktuell geöffneten Aufträge (nur die Historie), da ich davon ausgehe, dass Sie nicht mehr als einen geöffneten Auftrag haben wollen und das anders geprüft wird. Die Verwendung würde etwa so aussehen:

if (UniqueOnDay() && CurrentlyOpenedOrders==0) ...

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.

dresolo1:
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:
double workTema[][3];

#define _ema1 0

#define _ema2 1

#define _ema3 2

double iTema(double price, double period, int r, int instanceNo=0)

{

if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3; r = Bars-r-1;

//

//

//

//

//

double alpha = 2.0 / (1.0+period);

workTema[r][_ema1+instanceNo] = workTema[r-1][_ema1+instanceNo]+alpha*(price -workTema[r-1][_ema1+instanceNo]);

workTema[r][_ema2+instanceNo] = workTema[r-1][_ema2+instanceNo]+alpha*(workTema[r][_ema1+instanceNo]-workTema[r-1][_ema2+instanceNo]);

workTema[r][_ema3+instanceNo] = workTema[r-1][_ema3+instanceNo]+alpha*(workTema[r][_ema2+instanceNo]-workTema[r-1][_ema3+instanceNo]);

return(workTema[r][_ema3+instanceNo]+3.0*(workTema[r][_ema1+instanceNo]-workTema[r][_ema2+instanceNo]));

}[/PHP]

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)

lukibest:
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);

}

Dateien:
tema.mq4  3 kb
 

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);

}

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

 
svezir:
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.

Grund der Beschwerde: