Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 265
Gesamt: 265
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #31 (permalink)  
Alt 15.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Nunja,
ich vermute mal, einfach die Trades zählen. D.h. eimal in der History und die aktive laufenden Trades. Summe > 1 dann Ende des Positionseröffnen für diesen Tag.

Natürlich gibt es einen Unterschied, ob nur ein Trade je Tag und ob ein noch laufender Trade von gestern oder älter mitgezählt werden soll oder nicht.

Aber das hast Du bestimmt längst selbst herausgefunden.

Gruß Joe

PS: Zu Deiner Grafik oben, hätte ich auch erstmal gesagt, dreh die Trades um. Da Du aber sicher mit SL arbeitest, was man da nicht sehen kann, spricht ja nichts dagegen es so zu machen.

Mich würde der Text der Doktorarbeit zum Traden interessieren. Falls es nicht geheim ist, kannst Du das Dokument ja mal an den Thread anhängen.
Hi Joe,

das mit dem Herausfinden ist so ne Sache...ich suche zwar in verschiedenen anderen EA's nach Lösungen, aber finde so gut wie keine. Vieles kann ich mir von der Logik her denken, aber es dann in der Bibliothek zu finden und zu verpacken...! Das ist die Schwierigkeit für mich...

Ich möchte eigentlich schon mit nem SL arbeiten...Vll sogar Trailing Stop...So ganz bin ich mir da nicht im reinen was as angeht...

Was die Arbeit des Doktors angeht, kann ich nichts verschicken...Ich habe mal in Spanien mit nem Kollegen gewohnt und als ich zurück musste (AG ist pleite gegangen) hatte er (der Kollege) bei seiner Heimreise quasi alles was aus Papier war vernichtet...Ergo war dieses "Heftchen" auch in der Tonne...Leider auch einiges anderes
Der Grundgedanke beim MA ist aber folgender...
Der Ausbruch in einen Trend erfolgt erst dann, wenn der MA in den vorherigen Perioden eine Richtung angezeigt hat...also MA1[1] > MA1[2] und das Low[1] der Kerze > MA1[1] liegt. Ebenso sollte der SK der dieser Kerze > sein als das opening...das wäre ein Kauf. Jeder Berührung des MA's ist ein Rauschen im Markt...Der Trend wird erst durch das o.g. Szenario bestätigt...
Es gab in diesem Heft auch noch einige andere System auf Basis des MA die schon was komplexer waren, aber leider kann ich dazu nichts mehr sagen...das ist alles schon ca 3 Jahre her...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #32 (permalink)  
Alt 16.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Na,
jetzt hast Du aber ein bissel geschummelt
In vielen EAs findest Du Schleifen, die auf HistoryTotal() und OrdersTotal() beruhen. That it's!

<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
int zähler=0
for(int i=HistoryTotal()-1;i>=0;i--) {
Dein weiterer Code selektiert den Trade bzgl i
Dein weiterer Code selektiert ob Sell oder Buy oder Beides, ggf. MagicNumber berücksichtigt
dann Zähler ggf. erhöhen
}
zähler hat die Anzahl dessen was Du brauchst
<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
Und schon wieder ein Problem gelöst.

Nun das Andere: Du schreibst:
Ausbruch = ( MA1[1] > MA1[2] && Low[1] > MA1[1] )

Ich versuche mal zu rekonstruieren:
MA1[1] kommt aus einem Buffer, also vermutlich von einem Indikator.
im EA würde ich das ungefähr so machen:

int peri=Period();
if(peri==PERIOD_H1) peri=PERIOD_H4;
double dMa1=iMA(Symbol(),peri,.....,1) //selbst komplettieren, da ich nicht
double dMa2=iMA(Symbol(),peri,.....,2)//weiß ob EMA,SMA,SMMA, etc...
dann geht
bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 );
bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 );

Das ist nur ein Beispiel, erinnert mich aber an ähnlichen Code den ich schon im Kopf hatte , weil das mit Trendtrading, wie kürzlich vom Kollegen hier empfohlen, was zu tun hat.

Wenn Du im Programmieren geübt bist, dann ist auch bei Dir das Proggi im Kopf fast fertig, bevor Du mit der Umsetzung anfängst.

Gruß Joe
PS: und bitte nicht schummeln
  #33 (permalink)  
Alt 16.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Na,
jetzt hast Du aber ein bissel geschummelt
In vielen EAs findest Du Schleifen, die auf HistoryTotal() und OrdersTotal() beruhen. That it's!

<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
int zähler=0
for(int i=HistoryTotal()-1;i>=0;i--) {
Dein weiterer Code selektiert den Trade bzgl i
Dein weiterer Code selektiert ob Sell oder Buy oder Beides, ggf. MagicNumber berücksichtigt
dann Zähler ggf. erhöhen
}
zähler hat die Anzahl dessen was Du brauchst
<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
Und schon wieder ein Problem gelöst.

Nun das Andere: Du schreibst:
Ausbruch = ( MA1[1] > MA1[2] && Low[1] > MA1[1] )

Ich versuche mal zu rekonstruieren:
MA1[1] kommt aus einem Buffer, also vermutlich von einem Indikator.
im EA würde ich das ungefähr so machen:

int peri=Period();
if(peri==PERIOD_H1) peri=PERIOD_H4;
double dMa1=iMA(Symbol(),peri,.....,1) //selbst komplettieren, da ich nicht
double dMa2=iMA(Symbol(),peri,.....,2)//weiß ob EMA,SMA,SMMA, etc...
dann geht
bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 );
bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 );

Das ist nur ein Beispiel, erinnert mich aber an ähnlichen Code den ich schon im Kopf hatte , weil das mit Trendtrading, wie kürzlich vom Kollegen hier empfohlen, was zu tun hat.

Wenn Du im Programmieren geübt bist, dann ist auch bei Dir das Proggi im Kopf fast fertig, bevor Du mit der Umsetzung anfängst.

Gruß Joe
PS: und bitte nicht schummeln

Hi Joe,

du hast noch vergessen, dass der Candle ebenfalls die Richtung des Tre3nds haben soll...der MA ist ein einfacher auf SK Basis ohne verschiebung...von anderen Formen wie EMA oder WMA etc halte ich nicht so viel...Mag sicherlich klappen , aber ich bin ein Freund des KISS...Keep it simple stupid...
Einen Trend zu handeln ist einfacher als einen Tradingmarkt...geht zwar auch, aber eigentlich ist es anders angenehmer...
Für mich ist es glaube ich schon sehr schwer Übung ins Programmierung zu bekommen. Mal sehen wie lange es dauert bis ich mal wirklich was auf die Beine stellen kann und vor allem stolz darauf bin, dass es klappt wie ich es mir vorstelle...

VG sendet

Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #34 (permalink)  
Alt 16.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Wenn Du Deinen letzten Programmstand als File anhängst, kann ich ja mal drüberlesen.

Wenn Du MA[x] schreibst, darf der Leser davon ausgehen, das Du einen EMA meinst

bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 && Low[0] > dMa1 );
bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 && High[0] < dMa1 );

Hauptsache, Du hast es nicht vergessen

Das Teil müßte ja schon halbwegs laufen.
Laß mal schauen was Du fabriziert hast,
Joe
  #35 (permalink)  
Alt 16.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Wenn Du Deinen letzten Programmstand als File anhängst, kann ich ja mal drüberlesen.

Wenn Du MA[x] schreibst, darf der Leser davon ausgehen, das Du einen EMA meinst

bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 && Low[0] > dMa1 );
bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 && High[0] < dMa1 );

Hauptsache, Du hast es nicht vergessen

Das Teil müßte ja schon halbwegs laufen.
Laß mal schauen was Du fabriziert hast,
Joe
Müsste das nicht...
bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 && Low[1] > dMa1 );
bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 && High[1] < dMa1 );
...sein?
Ich meinte in allen Fällen den SMA.
Fabriziert habe ich es in meinem Kopf, nur alles da rein zu bekommen,d ass es auch wirklich klappt...das wäre mein Ziel...
Kann der dMa1 nicht auch folgendermaßen verglichen werden?

bool AusbruchLong = (dMa1[1] > dMa1[2] && Low[1] > dMa1[1] && Close[1] > Open[1]);
bool AusbruchShort = (dMa1[1] < dMa1[2] && High[1] < dMa1[1] && Open[1] > Close[1]);

Ich werde mich morgen vormittag mal dran setzen und mal was posten...Auf der Arbeit darf ich leider nicht ;-)
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #36 (permalink)  
Alt 17.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Mast83 Beitrag anzeigen
Kann der dMa1 nicht auch folgendermaßen verglichen werden?

bool AusbruchLong = (dMa1[1] > dMa1[2] && Low[1] > dMa1[1] && Close[1] > Open[1]);
bool AusbruchShort = (dMa1[1] < dMa1[2] && High[1] < dMa1[1] && Open[1] > Close[1]);
Ja, wenn Du zuvor Deine SMA's in den Buffer(Array) dMa[x] reinschiebst geht das sicher, aber zu aufwendig für das Proggi, da es bei jedem neuen Bar das Array neu bearbeiten muß.
Da ist es besser und universeller dMa1..2 mal schnell mit iMA(...MODE_SMA...) zu füttern.
Daher meine Umstellung zu Deinem ursprünglichen Proggi.

Gruß Joe
  #37 (permalink)  
Alt 17.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Oh man ich schaffe das iwie nicht...komme nicht mehr weiter...
Ich verhake mich da total...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #38 (permalink)  
Alt 18.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

So schaut esw nun erst mal aus:

//+------------------------------------------------------------------+
//| Marcs erster EA.mq4 |
//| Der Marc |
//| Es gibt gar keinen Link dazu |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keinen Link dazu"


extern double dLots=0.02;
extern int iStopLoss=250;
extern int iTakeProfit=250;
extern int iSlippage=30;
extern int iMaxTrades=1;
extern int iMagicNumber=112233;

int iTradeSignal=0;
int iOpenBuySignal=10;
int iCloseBuySignal=-10;
int iOpenSellSignal=20;
int iCloseSellSignal=-20;
int iNoSignal=-1;


double dMovingAvg1=0;

int iTotalTrades;
int iOrderOpenStatus;
int iErrorNumber;

string strErrorMessage;

//-------------------------------------------------------------------------------------------
int start()

{
int peri=Period();
if(peri==PERIOD_H1);
double dMa1=iMA (Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,0);
bool AusbruchLong = (( Low[1] > dMa1[1]) && (Open[1] < Close[1]) && (dMa1[1] > dMa1[2] ));
bool AusbruchShort = (( High[1] < dMa1[1]) && (Close[1] < Open[1] && (dMa1[1] < dMa1[2] ));


// Buy-Order ausführen
iTotalTrades=OrdersTotal();
if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades))
{
double dBSL=Ask-(iStopLoss*Point)
double dBTP=Ask+(iTakeProfit*Point);
iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,dLots, High[1], iSlippage, dBSL, dBTP, "Marcs erster EA",iMagicNumber, TimeCurrent()+7200,Green);
if (iOrderOpenStatus<0)
{
iErrorNumber=GetLastError();
Print ("Order fehlgeschlagen!: ", iErrorNumber);
return;
}
}

// Sell-Order ausführen
iTotalTrades=OrdersTotal();
if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades))
{
double dSSL=Bid+(iStopLoss*Point)
double dSTP=Bid-(iTakeProfit*Point);
iOrderOpenStatus=OrderSend (Symbol(), OP_SELLSTOP,dLots, Low[1], iSlippage, dSSL, dSTP, "Marcs erster EA",iMagicNumber,TimeCurrent()+7200,Red);
if (iOrderOpenStatus<0)
{
iErrorNumber=GetLastError();
Print ("Order fehlgeschlagen!: ", iErrorNumber);
return;
}
}


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


Ich muss jetzt noch heraus finden in wie weit die Möglichkeit besteht die Handelszeit einzusachränken...Beispielsweise ab 07:00 - 21:00...
Gibt es ein Forum wo evtl verschiedene Systeme mal auseinander genommen werden und wo der Quellcode intensiv diskutiert bzw beschrieben wird?

VG und Danke Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #39 (permalink)  
Alt 18.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

ich bekomme übrigens bei dem Quellcode oben noch weitere Fehlerhinweise auf nicht definierte Variablen...jeweils bei den TakeProfits und Stoploss...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #40 (permalink)  
Alt 19.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Hallo,
viele, viele Fehler in Syntax und was dem MA angeht auch. Du kannst kein MA Array benutzen, wenn Du keines erzeugst. Daher hatte ich die beiden benötigten MA-Werte auch über die Methode iMA(...) erzeugt, aber nicht als Array. Wenn Du bastelst, dann bitte nur Stück für Stück. Beim ersten neu auftretenden Fehler, siehst Du wenn Du compilierst, nicht einfach weitermachen, sondern erst den Fehler suchen(Zeile und Fehler wird ja unten angezeigt) und fixen und lernen(Syntax von C lernen).

//+------------------------------------------------------------------+
//| Marcs erster EA.mq4 |
//| Der Marc |
//| Es gibt gar keinen Link dazu |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keinen Link dazu"


extern double dLots=0.02;
extern int iStopLoss=250;
extern int iTakeProfit=250;
extern int iSlippage=30;
extern int iMaxTrades=1;
extern int iMagicNumber=112233;

int iTradeSignal=0;
int iOpenBuySignal=10;
int iCloseBuySignal=-10;
int iOpenSellSignal=20;
int iCloseSellSignal=-20;
int iNoSignal=-1;


double dMovingAvg1=0;

int iTotalTrades;
int iOrderOpenStatus;
int iErrorNumber;

string strErrorMessage;

//-------------------------------------------------------------------------------------------
int start(){
int peri=Period();
if(peri==PERIOD_H1){
double dMa.1=iMA(Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,1);
double dMa.2=iMA(Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,2);
bool AusbruchLong = ( Low[1] > dMa.1 && Open[1] < Close[1] && dMa.1 > dMa.2 );
bool AusbruchShort = ( High[1] < dMa.1 && Close[1] < Open[1] && dMa.1 < dMa.2 );


// Buy-Order ausführen
iTotalTrades=OrdersTotal();
if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades)){
double dBSL=Ask-(iStopLoss*Point);
double dBTP=Ask+(iTakeProfit*Point);
iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,dLots, High[1], iSlippage, dBSL, dBTP, "Marcs erster EA",iMagicNumber, TimeCurrent()+7200,Green);
if (iOrderOpenStatus<0){
iErrorNumber=GetLastError();
Print ("Order fehlgeschlagen!: ", iErrorNumber);
return;
}
}

// Sell-Order ausführen
iTotalTrades=OrdersTotal();
if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades)){
double dSSL=Bid+(iStopLoss*Point);
double dSTP=Bid-(iTakeProfit*Point);
iOrderOpenStatus=OrderSend (Symbol(), OP_SELLSTOP,dLots, Low[1], iSlippage, dSSL, dSTP, "Marcs erster EA",iMagicNumber,TimeCurrent()+7200,Red);
if (iOrderOpenStatus<0){
iErrorNumber=GetLastError();
Print ("Order fehlgeschlagen!: ", iErrorNumber);
return;
}
}
}
return(0);
}
//+------------------------------------------------------------------+

Ob der Code so sinnvoll ist habe ich nicht verifiziert, aber offensichtliche Syntax-Fehler sind raus und IMA gefixt.

Gruß Joe
PS: Ich hoffe nicht das Du am saufen bist. Vielleicht mal den Spruch ändern?
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------