Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Expert-Advisors (http://www.expert-advisor.com/forum/forumdisplay.php?f=25)
-   -   adx kreutzt aber passiert nichts... (http://www.expert-advisor.com/forum/showthread.php?t=98)

horst85 04.06.10 18:56

adx kreutzt aber passiert nichts...
 
hey.. also mein problerm ist folgendes:

ich will das ein trade ausgeführt wird wenn sich die adx linien d+ und d- kreutzen.... mal unabhängig davon in welche richtung. desweiteren soll es eine rolle spielen ob der rsi nun aufsteigend oder absteigend ist.
soweit der soll zustand.

der ist zustand sieht aber wie folgt aus:

es werden keine einzigen orders geöffnet! also hab ich gedacht es liegt nur an der rsi bedingung. wenn ich diese also lösche, werden überall wild orders geöffnet .... überall.. nur nicht da wo sich der adx kreutzt!

ich habe vom programmieren direkt nicht wiklich plan, deshalb habe ich sie bei Expert Advisor Builder for MetaTrader 4 gebaut.

als code kam da in der betreffenden zeile folgendes raus:

double Buy1_1 = iADX(NULL, PERIOD_M15, 14, PRICE_CLOSE, MODE_MINUSDI, Current + 0);
double Buy1_2 = iADX(NULL, PERIOD_M15, 14, PRICE_CLOSE, MODE_PLUSDI, Current + 0);
double Buy2_1 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, Current + 1);
double Buy2_2 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, Current + 0);

...

ein buy soll hiernach dann geöffnet werden wenn d+ = d- und rsi aktuell höher liegt als der rsi der 15 min vorher (das ganze soll auf 15m zugeschnitten sein) ... ich gehe doch davon das das die beiden linien auch gleich sind wenn sie sich kreutzen... wäre ja unlogisch wenn nicht.

wäre total genial wenn mir mal wer erklärt wieso dieser advisor nicht der logik folgt =)

edit:
mir ist grad aufgefallen das weiter untem im code ja noch sone zeile ist, in der steht wie diese einzelnen variablen miteinander agieren müssen der so. nur dummerweise find ich nun genau die datei des advisors net mehr die ich hierfür bräuchte.. habe mittlerweile zuviele auf dem pc. ;)

Bohne 05.06.10 14:46

Da fehlt aber noch ne ganze menge

double Buy1_1 = iADX(NULL, PERIOD_M15, 14, PRICE_CLOSE, MODE_MINUSDI, Current + 1);
double Buy1_2 = iADX(NULL, PERIOD_M15, 14, PRICE_CLOSE, MODE_PLUSDI, Current + 0);
double Buy2_1 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, Current + 1);
double Buy2_2 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, Current + 0);

Ich glaube hier ist schon der erste fehler, ich kann das immer erst beurteilen wenn ich den ganzen code vor augen habe.

Jetzt ist die Frage soll die Orderausführung sofort passierren oder erst wenn der Balken in dem Timframe zu ende ist... Poste wenn dan die ganze orderstrategie rein, ich glaube so wir das nix :-) bis jetzt hast du ja nur die Variablen deklariert.

....

du darfst auch nie im einer prgrammstruktur schreiben, gleich, enweder >= oder <= . Klar ist der der punkt beim kreuzen gleich. Stell di mal vor, du hast kurz ein verbindungsfehler, was ja auch of passiert und in der zwischenzeit kreuen sich sie beider inids.!!??!!!
POste mal das komplette teil hier hoch...

Simon 09.07.10 23:46

Hallo,
Ich habe fast das gleiche Problem wie "horst85"... ich habe mir auch ein Programm bei "Expert Advisor Builder for MetaTrader 4 " gebaut.
Das Programm basiert auf dem Ichimoku Indikator.
Nun das Problem...
die Positionen sollen "long" geöffnet werden, wenn die "Tenkan-sen" Linie von unten die "Kijun-sen" Linie schneidet und TP gehen wenn die "Tenkan-sen" Linie die "Kijun-sen" Linie von oben schneidet. Das gleiche bei "short" nur andersherum. Dies passiert aber nicht so, wie ich es gerne hätte :-(
vielleicht könntet ihr mir bei meinem Programm helfen.?!?
danke im voraus...
L.G. Simon

Simon 09.07.10 23:48

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

#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 = 1.0;
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 Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+

double Var1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);

double Buy1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);
double Buy1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);

double Sell1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double Sell1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);

double CloseBuy1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);
double CloseBuy1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);

double CloseSell1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double CloseSell1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);


//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
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) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+

if (CloseBuy1_1 <= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

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;
continue;
}
//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;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+

if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL;


//+------------------------------------------------------------------+
//| 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;
continue;
}
//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;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 >= Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 >= Sell1_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else 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("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else 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("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+

Bohne 10.07.10 11:04

Lass mich mal raten, Postioenseröffnung geht aber die schließung will nicht. Oder was meinst du mit funktioniert nicht. Du muss das problemchen schon ein wenig genauer beschreiben.
LG
Bohne

Simon 10.07.10 17:11

Ja so in etwa...
also: Die Positionen öffnen sich, allerdings auch nicht immer richtig, werdeen dann aber nicht geschlossen.
Das Zweite ist, das der Ea manchmal 200 positionen gleichzeiting öffnet, die dann innerhalb von sekunden alle geschlossen werden und so den spread als verlust verbuchen.
danke für die schnelle antwort.

LG Simon

Simon 10.07.10 17:42

das mit dem öffnen und schließen der positionen hab ich jetzt hinbekommen.
bleibt nur noch die frage mit den ca. 200 positionen die sich manchmal einfach so öffnen.
LG Simon

Simon 12.07.10 17:55

Das Problem mit den zu vielen Positionen kommt immer dann vor, wenn die linien sich nicht direkt kreuzen, sondern gleich sind.

Kennt jemand abhilfe?

Danke im voraus...
Lg simon

und das verbesserte Programm...

Simon 12.07.10 17:57

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

#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.01;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = True;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 30;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+

double Var1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);

double Buy1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double Buy1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);

double Sell1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double Sell1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);

double CloseBuy1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double CloseBuy1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);

double CloseSell1_1 = iIchimoku(NULL, 0, 7, 22, 44, MODE_TENKANSEN, Current + 0);
double CloseSell1_2 = iIchimoku(NULL, 0, 7, 22, 44, MODE_KIJUNSEN, Current + 0);


//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
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) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+

if (CloseBuy1_1 <= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

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;
continue;
}
//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;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+

if (CloseSell1_1 >= CloseSell1_2) Order = SIGNAL_CLOSESELL;


//+------------------------------------------------------------------+
//| 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;
continue;
}
//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;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 >= Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 <= Sell1_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else 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("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else 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("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+

Bohne 12.07.10 20:01

versuch mal
--> extern bool EachTickMode = False;
Wenn er immer Prüfen soll, dann geht das ja auch nicht. Die Adx linie kreuzt sich auch an einem Bar bis 1000 mal, deswegen kann man das auch nicht immer dirkt prüfen sonder man mus ein kurssstab abwarten...
Ich hoffe mal das es daran liegt, ansonsten muss ich dich allein emit der suche belassen, keine zeit mir das ding anzuschauen ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:28 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum