Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 6 Tagen
- Sundaytrad...
vor einer Woche
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 24.07.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Hier ein Tipp, welchen du evlt. noch nicht bekommen hast, dir aber vielleicht all diese Probleme erspart:

EasyLanguage

EasyLanguage ist eine vereinfachte Form einer Programmiersprache, aber bestimmt für 80-90 % der allgemeinen Tradingansätze ausreichend.

Plattformen, welche das könnten sind z.B.:
-TradeStation
-MultiCharts
-???

Können evlt. was kosten oder sind vielleicht bei dem einen oder anderen Broker mit dabei, weiß ich aber leider nicht, kannst du aber selbst gerne rausfinden.
Wenn du einen Broker gefunden haben solltest, welcher dir eine auf EasyLanguage-Basierende Plattform kostenlos zur Verfügung stellt, dann schreib es hier mal ruhig rein. Könnte ja sein, dass wir so noch ein paar Leute auf die dunkle, einfachere Seite der Macht führen

Hier noch ein Link zu einem Buch übers Trading mit EasyLanguage: https://www.amazon.de/Tradestation-M.../dp/0471353531

Gruß und viel Erfolg dabei!
  #12 (permalink)  
Alt 24.07.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Sorry, ich kann mir vorstellen, dass meine Fragen schon irgendwie dämlich ankommen.
Nicht die Fragen, nur die Art, wie Du mit den Hilfen der anderen Leute umgehst. Etliche Leute haben Dir immer wieder Beispiele zu Deinem Code gegeben, ja teilweise sogar fertigen Code! Aber anstatt Dich mit diesen Beipielen zu beschäftigen und Dich zu fragen, wo der Unterschied zu Deinem Code ist und warum, ignorierst Du das.
Warum stellst Du Fragen, wenn Dich die Antworten nicht interessieren?

Zitat:
Z.B. Repainting wenn man Indis oder Preise auf Bar 0 vergleicht.
Um es mal ganz einfach und deutlich zu sagen:
Man benutzt NIEMALS Bar 0 für Schlußkurse, weil das die aktuelle Bar ist.
Aktuell heißt, diese Bar ist gerade dabei, ihre Gestalt anzunehmen - also einen oberen Docht und eine unterer Lunte und einen Körper zu erzeugen. Und solange diese Bar nicht beendet ist, verändert sich alles an ihr außer dem Eröffnungskurs (das ist der allerste Kurs dieser Bar). Was die anderen Wert der Bar sind, weißt man erst in dem Moment, wenn die Zeit für die Bar abgelaufen ist und der Eröffnungskurs der nächsten Bar feststeht. Erst dann kann man für die ehemalige Bar 0 (die jetzt Bar 1 ist, weil es eine neue Bar 0 gibt) sagen, wo denn der Höchst-/Tiefst- und Schlußkurs gewesen wäre <= wäre weil man das während sich die Bar entwickelt nicht wissen kann.
Das hat nichts, aber auch gar nichts mit Repainting zu tun, sondern damit daß die Bar sich während ihrer Laufzeit verändert!!

Zitat:
Die ganze Dramatik mit Digits und NormalizeDouble etc., was es zur Wissenschaft macht, nen einfachen SL hin zu bekommen.
Das ist kein Wissenschaft, sondern einfache Logik. Ein Symbol, das mit 5 Stellen nach dem Komma arbeitet (_Digits=5), braucht exakt diese 5 Stellen nach dem Komma. Zum genauen Berechnen wird aber ein Double-Wert genommen (weil das in der Computersprache nun mal so üblich ist) und so ein Double-Wert hat viel mehr Stellen nach dem Komma als nur 5. So, und damit unser Symbol mit seinen 5 Stellen nach dem Komma arbeiten kann (es braucht ja exakt diese 5 Stellen), muß der berechnete Double-Wert eben auf 5 Stellen gekürzt werden - das machen wir mit NormalizeDouble(errechneterDouble-Wert,_Digits) - oder auf Deutsch: kürze den errechneten Wert auf 5 Kommastellen.
Zitat:
Überall gibts unzählige Code-Beispiele, aber irgendwie keine richtige Erklärung warum man es so machen soll und nicht anders.
Wenn Du alles anders machen willst, als man es Dir vorschlägt, dann mußt Du Dich nicht wundern, wenn das nicht klappt. Es gibt genug Leute hier, die mehr wissen als andere - und wenn diese sich die Mühe machen, Hilfestellung zu geben, dann sollte man darauf vertrauen, daß sie wissen wovon sie reden.
Zitat:
Hab weiß ich viel Zeit mit dem Hedge-EA gebraucht, um dann festzustellen, dass dieses Prinzip dem MT4 oder dem Broker nicht gefällt, so dass sie einem Steine in den Weg schmeißen, indem sie immer wieder das Öffnen neuer Orders verhindern. Mit Sicherheit wär das an volatilen Tagen ne Goldgrube gewesen, wenn er, wie er sollte, ständig Long und Short im Markt wäre. Was auch immer ich versucht habe, um meine Gewinn-Chancen zu erhöhen, hat immer wieder irgendwelche Probleme bereitet. Man hätt natürlich einfach nen Experten anheuern können, aber wer weiß, was da wieder für Überraschungen kommen, die man vorher nicht im Geringsten ahnen kann.
Suche die Fehler nicht immer bei anderen.
Schon das Grundprinzip ist falsch, aber da Du ja Dein eigenes Ding auf Teufel komm raus durchziehen willst, ist es unnütz, das zu diskutieren.
Und einen Experten anheuern kannst Du nur dann, wenn Du ganz exakte Vorgaben machst - bei Deiner Vorgehensweise kann wahrscheinlich auch der beste Experte nichts ausrichten. Aber dann ist der natürlich wieder Schuld.

So, mehr habe ich nicht anzumerken. AVT
  #13 (permalink)  
Alt 25.07.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Was ich meinte, ist, dass Vieles eben nicht so umgesetzt werden kann, wie ich es mir vorstelle. Das passiert doch Jedem mal...


Ich hoffe mal, dass das so funktioniert. Gibts nen anderen Weg, festzustellen, aus welcher Richtung z.B. der CCI oder ein andere Oszillator oder Indikator oder was auch immer kommt? Das würde bestimmt so manches Fehlsignal vermeiden.

Man könnte vielleicht versuchen, festzustellen, aus welcher Richtung der Kurs kommt. Aber die Indikatoren sollen ja Diesen "filtern", und so umrechnen, dass aus dem Kursverlauf eben eindeutige Handelssignale dargestellt und erkannt werden können...
Code:
//=============================================================================================================
 // C O M M O D I T Y   C H A N N E L   I N D E X
//=============================================================================================================


double CCI=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price,1);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// CCI down Curve

int CCI_Bar_do=2;
double CCI_do=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_do );

// Wenn "normaler" CCI kleiner als obere Linie ist, und CCI_do(Bar2) größer als "normaler" CCI ist...
if( CCI<CCI_IL_2 && CCI_do>CCI ){

// und CCI_do (noch Bar2) auch kleiner als obere Linie ist, soll Kerze des CCI_Bar_do um 1 erhöht werden,
// bis er nicht mehr kleiner als die obere Linie ist.
  if( CCI_do<CCI_IL_2 )CCI_Bar_do++;}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// CCI up Curve

int CCI_Bar_up=2;
double CCI_up=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_up );

// Wenn "normaler" CCI größer als untere Linie ist, und CCI_up(Bar2) kleiner als "normaler" CCI ist...
if( CCI>CCI_IL_1 && CCI_up<CCI ){

// und CCI_up (noch Bar2) auch größer als untere Linie ist, soll Kerze des CC_Bar_up um 1 erhöht werden,
// bis er nicht mehr größer als die untere Linie ist.
   if( CCI_up>CCI_IL_1 )CCI_Bar_up++;}
Code:
//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================

if(iT_Tr==iT_NB){

  if(Hour()>=From_Hour&&Minute()>=From_Min&&Hour()<=Till_Hour&&Minute()<=Till_Min){
  
    double SPR=Ask-Bid; //aktueller Spread
    if(NormalizeDouble(SPR<=Max_Spr*_Point,_Digits)){

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

      bool SH=false;
      bool LO=false;
      for(int i=OrdersTotal()-1;i>=0;i--){
        if(OrderSelect(i,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
            if(OrderMagicNumber()==MN_Sel)SH=true;
            if(OrderMagicNumber()==MN_Buy)LO=true;}}}
            
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


      if(open_Sel==true&&SH==false){
    
        if( CCI<CCI_IL_2  &&CCI_do>CCI_up&&  RSI<RSI_IL_2  &&  RVI_Ma<RVI_Si  &&  WPR<WPR_IL_1 ){
    
          if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_Sel,Blue);
          if(IsTradeContextBusy()==true)Sleep(Sl_MS);
          
          Print( "Sended Sel:", "-CCI_do=",CCI_do , "-CCI_up=",CCI_up , "-CCI_Bar_do=",CCI_Bar_do , "-CCI_Bar_up=",CCI_Bar_up );
          
          CCI_Bar_do=2;
         
          CCI_Bar_up=2;
          
          Print( "Sended Sel:", "-CCI_Bar_do=",CCI_Bar_do , "-CCI_Bar_up=",CCI_Bar_up );
          
          }}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


      if(open_Buy==true&&LO==false){
    
        if( CCI>CCI_IL_1  &&CCI_up>CCI_do&&  RSI>RSI_IL_1  &&  RVI_Ma>RVI_Si  &&  WPR>WPR_IL_2 ){

          if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_Buy,Blue);
          if(IsTradeContextBusy()==true)Sleep(Sl_MS);
          
          Print( "Sended Buy:", "-CCI_up=",CCI_up , "-CCI_do=",CCI_do , "-CCI_Bar_up=",CCI_Bar_up , "-CCI_Bar_do=",CCI_Bar_do );
          
          CCI_Bar_up=2;
          
          CCI_Bar_do=2;

          Print( "Sended Buy:", "-CCI_Bar_up=",CCI_Bar_up , "-CCI_Bar_do=",CCI_Bar_do );
          
          }}
Versucht es vielleicht mal manuell: Öffnet nen Sell und nen Buy möglichst gleichzeitig, selber Einsatz. Wenn einer davon nen bestimmten Gewinn (sagen wir mal beide Spreads + ein paar Zerquetschte) erreicht hat, schließt Ihr ihn, und öffnet in die selbe Richtung sofort wieder ne Order, dies mal aber mit höherem Einsatz. Erreicht der wieder einen Gewinn, der größer als die bisherigen Spreads und Spesen waren, macht Ihr beide dicht. Wenn der Broker und/oder MT4 es erlaubt, macht Ihr das selbe Spiel wieder von vorn.
Angehängte Dateien
Dateityp: mq4 iTime_ucdc_CCI_RSI_RVI_WPR_MT4_EA.mq4 (41,0 KB, 1x aufgerufen)
  #14 (permalink)  
Alt 27.07.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Habs heute so versucht, aber er hat in 7 Stunden überhaupt nix gemacht. Keine einzige Order geöffnet und irgendwelche Fehler gabs glaub ich auch nicht. Geht wohl, wenn überhaupt, nur mit ner Scleife.
Code:
double CCI=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price,1);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// CCI down Curve

int CCI_Bar_do=2;
double CCI_do=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_do );

// Wenn "normaler" CCI kleiner als obere Linie ist, und CCI_do(Bar2) größer als "normaler" CCI ist...
if( CCI<CCI_IL_2 && CCI_do>CCI ){

// und CCI_do (noch Bar2) auch kleiner als obere Linie ist, soll Kerze des CCI_Bar_do um 1 erhöht werden,
// bis er nicht mehr kleiner als die obere Linie ist.
  if( CCI_do<CCI_IL_2 )CCI_Bar_do++;}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// CCI up Curve

int CCI_Bar_up=2;
double CCI_up=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_up );

// Wenn "normaler" CCI größer als untere Linie ist, und CCI_up(Bar2) kleiner als "normaler" CCI ist...
if( CCI>CCI_IL_1 && CCI_up<CCI ){

// und CCI_up (noch Bar2) auch größer als untere Linie ist, soll Kerze des CC_Bar_up um 1 erhöht werden,
// bis er nicht mehr größer als die untere Linie ist.
   if( CCI_up>CCI_IL_1 )CCI_Bar_up++;}
Angehängte Dateien
Dateityp: mq4 iTime_ucdc_CCI_RSI_RVI_WPR_MT4_EA.mq4 (40,5 KB, 0x aufgerufen)
  #15 (permalink)  
Alt 27.07.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Hallo.

Habs heute so versucht, aber er hat in 7 Stunden überhaupt nix gemacht. Keine einzige Order geöffnet und irgendwelche Fehler gabs glaub ich auch nicht. Geht wohl, wenn überhaupt, nur mit ner Scleife.
[/CODE]
Na ja, und wie so eine Schleife prinzipiell funktioniert weisst Du doch inzwischen!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #16 (permalink)  
Alt 31.07.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Gestern hat mein EA mal wieder 2stellig Gewinn gemacht. Hier und da noch ein paar Ergänzungen und einiges an Feinschliff, und ich werd ihn wohl nächstes Jahr auf nen Forex-Live-Konto los lassen.

Es sind nur noch Commodity Channel Index und Stochastic drin. Die beiden müssten noch mal genau eingestellt werden.

Um möglichst Seitwärtsbewegungen zu vermeiden, soll er auf Bar1 Price High, Price Close und Price Low jeweils voneinander abziehen. Bevor eine Order raus geschickt wird, soll geprüft werden, ob diese Abstände >= wie die int Werte sind, die man in den GV eintragen kann.
Code:
extern string esMDHtC1="Min Distance";
extern string esMDHtC2="Price High";
extern string esMDHtC3="to";
extern string esMDHtC4="Price Close";
extern int MD_Hi_Cl=8;

extern string esMDHtL1="Min Distance";
extern string esMDHtL2="Price High";
extern string esMDHtL3="to";
extern string esMDHtL4="Price Low";
extern int MD_Hi_Lo=8;

extern string esMDCtL1="Min Distance";
extern string esMDCtL2="Price Close";
extern string esMDCtL3="to";
extern string esMDCtL4="Price Low";
extern int MD_Cl_Lo=8;
Irgendwo nach start() werden die Abstände berechnet.
Code:
double HP=iHigh(Symbol(),TF_Trading,1);
double CP=iClose(Symbol(),TF_Trading,1);
double LP=iLow(Symbol(),TF_Trading,1);

double HP_CP=HP-CP;
double HP_LP=HP-LP;
double CP_LP=CP-LP;
Jetzt meine Frage: wie kann man mit NormalizeDouble() diese Abstände möglichst schnell und einfach mit den Werten in den GV vergleichen? Reicht eine einzige NormalizeDouble() Funktion aus, um alle 3 zu vergleichen? Oder muss jeder der Abstände in einer extra NormalizeDouble() Funktion verglichen werden?
Angehängte Dateien
Dateityp: mq4 iT_CCI_STO_HCL_MT4EA.mq4 (38,1 KB, 1x aufgerufen)
  #17 (permalink)  
Alt 07.08.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

CCI und Stochastic scheinen sehr empfindlich zu sein. Dabei sollen Indikatoren ja eigentlich Seitwärtsphasen auslassen.

Relative Strength Index und Relative Vigor Index scheinen da besser zu sein. Hat Jemand Tipps zu denen?

Um Einstiegssignale zu bestätigen, sollen je nach Buy/Sell Ask/Bid mit ClosePrice1 verglichen werden. Es soll erst geöffnet werden, wenn ein einstellbarer Abstand (derzeit 8) überschritten wurde. Aber ich weiß nicht, obs so gut ist, ClosePrice1 mit Bid oder Ask zu vergleichen, bzw. mit den ganzen Berechnungen Vergleiche anzustellen.
Code:
// Distance Ask/Bid zu OpenPrice0
extern string esDABOP1="Distance";
extern string esDABOP2="Ask/Bid";
extern string esDABOP3="to";
extern string esDABOP4="Close Price Bar 1";

extern int Dist_Ask_CP=8; // Zum Testen
extern int Dist_CP_Bid=8; // 8
Code:
double CP=iClose(Symbol(),TF,1); // Mit Ask / Bid vergleichen


// Für Sell ClosePrice1 - Bid rechnen.
double CP_Bid=CP-Bid;


// Für Buy Ask - ClosePrice1 rechnen.
double Ask_CP=Ask-CP;


// Für Sell CP - Dist_CP_Bid(GV). Ergebnis ergibt sozusagen eine "Linie".
// Wenn CP_Bid darunter ist, darf Sell geöffnet werden.
double CP_DCPB=NormalizeDouble( CP - Dist_CP_Bid*_Point,_Digits );


double CP_DACP=NormalizeDouble( CP + Dist_Ask_CP*_Point,_Digits );
Code:
if(  RSI<RSI_IL_2  &&  RVI_Ma<RVI_Si  &&  CP_Bid<CP_DCPB  ){... -Send Sell



if(  RSI>RSI_IL_1  &&  RVI_Ma>RVI_Si  &&  Ask_CP>CP_DACP ){... -Send Buy-
Angehängte Dateien
Dateityp: mq4 RSI_RVI_CPAB_MT4EA.mq4 (35,6 KB, 1x aufgerufen)
  #18 (permalink)  
Alt 07.08.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Dabei sollen Indikatoren ja eigentlich Seitwärtsphasen auslassen.
Indikatoren berechnen das was sie berechnen sollen, bzw. du sie berechnen lässt. Nicht mehr und auch nicht weniger. Ob die Indikatioren die du gewählt hast (RSI Stoch CCi ... ) Fehlsignale geben liegt einmal am Indikator selbst (da gibt's auch bessere), an der Periodenlänge mit der du sie anwendest und an dem Zweck den du ihnen in deinem Tradingsystem gibst. Das Problem dabei ist, du musst sowohl ein gutes Verständnis von den Indikatioren, deren Anwendungsbereich und der sinnvollen Nutzung in deinem Tradingsystem haben......
Thema geschlossen

Lesezeichen


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 +2. Es ist jetzt 11:42 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.
-----------------------------------------------------------------------------------------------------------------------------