Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MA cross plus cci

Geschrieben

Hallo, habe über den expertbuilder einen EA auf Basis MA cross erstellt, der aber nicht läuft. Natürlich denke ich, dass ich alles richtig gemacht habe aber wer denkt das nicht. Vielen Dank für Eure Hilfe.

 

#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.2;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 15;
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 Buy1_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_HIGH, Current + 1);
double Buy2_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy2_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_HIGH, Current + 0);
double Sell1_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_LOW, Current + 1);
double Sell2_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell2_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_LOW, Current + 0);
double CloseBuy1_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_HIGH, Current + 1);
double CloseBuy2_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseBuy2_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_HIGH, Current + 0);
double CloseSell1_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_LOW, Current + 1);
double CloseSell2_1 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseSell2_2 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_LOW, 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 && CloseBuy2_1 < CloseBuy2_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 && CloseSell2_1 > CloseSell2_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 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;
  if (Sell1_1 > Sell1_2 && Sell2_1 < Sell2_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);
}
//+------------------------------------------------------------------+

 

Eine weitere Frage hierzu:

 

Wenn als zusätzliche Bedingung ein CCi gelten soll, füge ich diesen der Buy-/Sell-Strategie genauso hinzu wie den MA?

Wichtig ist, dass die orders ausgeführt werden sobald beide Bedingungen (MA cross und CCI cross) eingetreten sind, auch wenn sie nicht gleichzeitig eintreten!

Featured Replies

Geschrieben

Darf ich fragen was du dir genau vorstellst wie wir auf dieses Posting reagieren? Wir helfen gerne und alles, aber kompletter EA-Source mit der superaussagekräftigen Problemstellung "funktioniert nicht" ist nicht wirklich motivierend.

 

http://www.tom-next.com/community/topic/59329-hinweis-zur-besseren-formulierung/

Geschrieben
  • Autor

Sorry, wollte nicht demotivieren!

 

Der EA, den ich über den expertbuilder (Link zum Builder: http://sufx.core.t3-...lder/index.html ) erstellt habe, funktioniert nicht. Obwohl ich glaube, die Routine verstanden zu haben. Den code habe ich oben beigefügt verbunden mit der Frage, ob Euch Fehler auffallen.

Strategie hierzu:

Buy: cross 5 ema / 50 ema high

Sell: VICE VERSA ema low

 

Zur Frage am Ende meines Beitrages:

Das cross soll gehandelt werden sobald cci einen bestimmten Wert erreicht hat. Muss ich diese Bedingung im expertbuilder ebenfalls in die "Buy strategy" stellen?

Also ständen dort die Bedingungen

MA cross shift 1

MA cross shift 0

CCI cross shift 1

CCI cross shift 0

??

 

Vielleicht sind die Fragen ja banal oder ich habe sie falsch formuliert, sorry for that

Geschrieben

Der EA, den ich über den expertbuilder (Link zum Builder: http://sufx.core.t3-...lder/index.html ) erstellt habe, funktioniert nicht.

soweit klar. Aber damit ist noch keine Fehleranalyse möglich. Wir müssten jetzt hergehen und den EA compilieren, falls da kein fehler ihn backtesten (spätestens da müssten wir raten was der EA eigentlich tun soll)...

Das ist sehr viel sinnlose Zeit die vermutlich niemand aufbringen will, wenn du uns auch einfach sagen könntest "was nicht funktioniert". Kompiliert er nicht? Tut er nicht was er soll? Wenn ja was soll er denn tun und was genau tut er im moment?

 

Was du derzeit machst ist wie wenn ich mein Auto über Nacht (damit er nicht sieht obs überhaupt fährt) zum Mechaniker stelle mit einem Zettel an der Scheibe "Mein Auto hat ein Problem, danke".

Geschrieben
  • Autor
Verstehe, also bei der Kompilierung im Metaeditor erhalte ich keine Fehlermeldung und mit "Nichtfunktionieren" meine ich: er öffnet keine order.
Geschrieben

Verstehe, also bei der Kompilierung im Metaeditor erhalte ich keine Fehlermeldung und mit "Nichtfunktionieren" meine ich: er öffnet keine order.

 

Er öffnet keine Order obwohl er sollte oder er versucht Orders zu öffnen aber hat Probleme? Backtest oder live? Hast du dir schon den Inhalt der Logs (Reiter "Experten" und "Journal" im MT) angesehen?

 

 

(Das steht aber auch alles im schon erwähnten Link: http://www.tom-next.com/community/topic/59329-hinweis-zur-besseren-formulierung/)

Geschrieben

Genau das Journal wäre noch eine Möglichkeit vielleicht steht dort eine sinnvolle Fehlermeldung (Print-Fehlerausgabe ist ja vorhanden). Der Fehler kann auch im TimeFrame oder generell in den Backtestparametern liegen oder auch direkt am Code. Man sollte versuchen den Quelltext von Grund auf zu verstehen und das ist das grundlegende Problem bei den Expertbuildern, dass sie zwar teils simple funktionierende EAs generieren aber wenn mal was nicht geht, der Anwender die Gründe nicht nachvollziehen kann. Desweiteren entstehen durch das "generierte" Programmieren Codestrukturen die nicht gerade immer der Königsweg sind. Deshalb versuche immer zu lernen und alles im Code zu verstehen denn im Endeffekt will man ja auch sein Geld nicht jmd anvertrauen den man nicht kennt. Selbst wenn der EA dann im Backtest laufen sollte aber man nicht wirklich weiß was er macht, kann das beim Livetrading unter realen Bedingungen übel nach hinten losgehen. Ich selbst hab auch mit generierten Codes angefangen bis ich einsehen musst das diese schnell an die Grenzen der Möglichkeiten kommen. Habe dann versucht Stück für Stück die Inhalte zu verstehen bis ich dann zumindest die grobe Struktur der Codebereiche verstandenden habe und dann Codeblöcke kombiniert habe. Und jetzt bin ich langsam dabei, unter anderem dank der tollen Hilfe hier im Forum, immer mehr die Details zu verstehen. Es ist ein richtig gutes Gefühl zu wissen was der eigene EA im Detail macht bzw es ist sogar Bedingung ein EA verantwortungsvoll live laufen zu lassen. Das man genau weiss wann er was macht und das es für jede erdenkliche Situation eine nachvollziehbaren Progrmmierweg gibt um das eigene Kapital zu schützen ist wirklich ein besseres Gefühl. Jetzt bin ich aber abgedriftet hehe aber das wär so mein Standpunkt zu komplett generierten EAs.

Also zurück die Journalauswertung wäre zumindest schomal ein Anfang denn oft liegt es einfach an den Grundeinstellungen wie zB einfach zu wenig Handleskapital eingestellt oder ähnliches ;)

 

Viel Erfolg und Gruß

Geschrieben
  • Autor

Du hast völlig Recht mit dem was Du sagst, ohne Einschränkung... aber ich finde einfach keinen Zugang zu MQL4. Irgendetwas blockiert da bei mir obwohl ich eher der Rationale bin und auch mit Zahlen gut umgehen kann. Muss mal meinen Psychotherapeuten fragen woran das liegen könnte. Vielleicht wurden mir ja während der Schwangerschaft abstruse codes statt klassischer Musik vorgespielt.

 

Es wundert mich, dass es keinen deutschsprachigen Lernthread gibtshades.gif ! Oder stehe ich da alleine mit meinen Fragezeichen????white_flag.gif

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.