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: 4499
Beiträge: 40891
Benutzer: 6.885
Aktive Benutzer: 242
Links: 80
Wir begrüßen unseren neuesten Benutzer: mann013
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Stunden
- mann013
vor 23 Stunden
- schlafmuet...
vor 4 Tagen
- BodoM
vor 6 Tagen
- tisas
vor 6 Tagen
- slaw4ik

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 129
Gesamt: 130
Team: 0
Team:  
Benutzer:  LQK
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt vor einer Woche
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 58
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!
Mit Zitat antworten
  #12 (permalink)  
Alt vor einer Woche
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 390
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
Mit Zitat antworten
  #13 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 969
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)
Mit Zitat antworten
  #14 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 969
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)
Mit Zitat antworten
  #15 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.386
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.
Mit Zitat antworten
  #16 (permalink)  
Alt vor 3 Tagen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 969
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)
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 22:06 Uhr.





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