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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3774
Beiträge: 37849
Benutzer: 5.957
Aktive Benutzer: 504
Links: 80
Wir begrüßen unseren neuesten Benutzer: jimydirektsaft
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 12 Stunden
- jimydirekt...
vor 23 Stunden
- Geri78
vor einem Tag
- Phil7
vor einem Tag
- daijiro051...
vor 2 Tagen
- bauerbi

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

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Aug 2016
Beiträge: 21
Julia befindet sich auf einem aufstrebenden Ast
Standard Trendlinie Trendstrahl im EA MT4 definieren und als Signal verwenden

Hallo Jungs,

ich möchte in einem EA einen Trendstrahl definieren und als Signalgeber verwenden also wenn der Kurs den Strahl unterschreitet oder berührt wieder Long gehen bzw Short. Die Richtung eines Strahls kann man ja bekanntlich durch die Festlegung zweier Punkte definieren. Diese möchte ich vor dem Start des EAs eingeben - Hier im Beispiel für den DAX:

oben im EA:
input string ___TRENDSTRAHL___="___Definiere X(Zeit) und Y(Kurs) Werte ___";
input double X_Wert1=15.10.2017 15:01;
input double Y_Wert1=12050;
input double X_Wert2=15.10.2017 17:05;
input double Y_Wert2=12085;


und unten im EA:
if(Kurs<=Trendstrahl)MAlong=true;

--------------------------------------------------------------------------

FRAGE 1:
Wie gebe ich die X Werte (Datum und Uhrzeit) so ein,dass der
EA für die definition des Trendstrahls verwenden kann? Ist das so richtig?

FRAGE 2:
Wie definiere ich überhaupt den Trendstrahl, damit dieser erkannt wird?


--------------------------------------------------------------------------

DANKE
Liebe Grüße
Julia
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Aug 2016
Beiträge: 21
Julia befindet sich auf einem aufstrebenden Ast
Standard Frage

Oder kann ich einen Trendstrahl einzeichnen, und dann einfach nur die Trendlinien Nummer eingeben? Also einzeichnen, dann in ObjektEigenschaften den Namen festlegen z.B.: "Trendline 47225"
Und im EA gebe ich dann den Namen der Trendlinie ein?

Aber wie kann man das machen dass das in die Formel
if(Kurs<=Trendstrahl)MAlong=true;
passt?
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Benutzerbild von ping
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 31
ping befindet sich auf einem aufstrebenden Ast
Standard

Hi Julia,

unter ForexFabrik.de kann ich dir die Antwort geben und auch gleich das fertige Tool liefern. Also wenn du nicht schon dort einen Account hast, dann melde dich dort an und stell deine Frage noch mal dort.

ciao ping
__________________
In Wirklichkeit ist die Realität ganz anders!
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 87
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hallo Julia,
ich schreib Dir mal, wie ich es mache.
Dazu musst Du zunächst im MT4 unter Extras -> Optionen -> Objekte
ein Häkchen in das Kästchen "Objekt nach Hinzufügen auswählen" setzen.
Mit dem untenstehenden Code kannst Du dann Deine Trendlinie bei laufendem EA in den Chart einzeichnen. Du kannst sie in Ruhe ausrichten und korrigieren. Erst wenn Du sie deselektiert kast (Doppelklick auf die Trendlinie), wird der Code sie erkennen und den aktuellen Wert berechnen, vorausgesetzt die Trendlinie hat die von Dir vordefinierte Farbe und den von Dir vordefinierten Linienstil.
Die Trendlinie wird dann auch in "Trendlinie-BUY-Stop" bzw. "Trendlinie-SELL-Stop" umbennant.
Wenn Du eine zweite BUY-Stop-Linie oder eine zweite SELL-Stop-Linie zeichnen solltest, wird eine automatisch gelöscht.
Wenn Du eine bestehende BUY- bzw. SELL-Stop-Linie in Farbe oder Linienstil änderst, wird sie nicht mehr als solche erkannt.

PHP-Code:
 extern ENUM_LINE_STYLE Linien_Stil_Stop  STYLE_SOLID;    // BUY-Stop,  SELL-Stop
 
extern color Farbe_Stop Blue;    // BUY-Stop,  SELL-Stop
 
 
static double BUY_Stop    0;
 static 
double SELL_Stop    0;
 static 
string Trendlinie_BUY_Stop;
 static 
string Trendlinie_SELL_Stop;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   
return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
   {
 if (
StringLen(Trendlinie_BUY_Stop) > &&
    (
ObjectGet (Trendlinie_BUY_StopOBJPROP_COLOR)   != Farbe_Stop || ObjectGet(Trendlinie_BUY_StopOBJPROP_STYLE)   != Linien_Stil_Stop))
     { 
StringInit(Trendlinie_BUY_Stop00);
        
BUY_Stop 0;
     }
 if (
StringLen(Trendlinie_SELL_Stop) > &&
    (
ObjectGet (Trendlinie_SELL_StopOBJPROP_COLOR)   != Farbe_Stop || ObjectGet(Trendlinie_SELL_StopOBJPROP_STYLE)   != Linien_Stil_Stop))
     { 
StringInit(Trendlinie_SELL_Stop00);
        
SELL_Stop 0;
     }

 
short   anzahl_Trendlinie_BUY_Stop 0;
 
short   anzahl_Trendlinie_SELL_Stop 0;

 for (
int i=0ObjectsTotal(); i++) 
   {
    
string akt_Objekt ObjectName(i);

    if (
akt_Objekt == Trendlinie_BUY_Stop)
      { 
anzahl_Trendlinie_BUY_Stop++;   continue; }
    if (
akt_Objekt == Trendlinie_SELL_Stop)
      { 
anzahl_Trendlinie_SELL_Stop++;   continue; }

       if (
ObjectType(akt_Objekt) == OBJ_TREND   && ObjectGet(akt_Objekt,OBJPROP_SELECTED) == false && ObjectGet(akt_Objekt,OBJPROP_COLOR) == Farbe_Stop && ObjectGet(akt_Objekt,OBJPROP_STYLE) == Linien_Stil_Stop)
         { if (
ObjectGet_lineare_Interpolation(akt_Objekt0) > Ask)
            { 
anzahl_Trendlinie_BUY_Stop++;
               { if (
anzahl_Trendlinie_BUY_Stop 1)
                  { 
ObjectDelete(NULL,akt_Objekt); anzahl_Trendlinie_BUY_Stop 1; }
                 else 
Trendlinie_BUY_Stop akt_Objekt;
            } continue; }
           if (
ObjectGet_lineare_Interpolation(akt_Objekt0) < Bid)
            { 
anzahl_Trendlinie_SELL_Stop++;
               { if (
anzahl_Trendlinie_SELL_Stop 1)
                  { 
ObjectDelete(NULL,akt_Objekt); anzahl_Trendlinie_SELL_Stop 1; }
                 else 
Trendlinie_SELL_Stop akt_Objekt;
            } continue; }
         }
      }

       if (
anzahl_Trendlinie_BUY_Stop == 1)
      { 
BUY_Stop   NormalizeDouble(ObjectGet_lineare_Interpolation(Trendlinie_BUY_Stop0),Digits);
        if (
StringFind(Trendlinie_BUY_Stop,"Trendlinie-BUY-Stop",0) == -1)
         { 
Objekt_umbenennen(Trendlinie_BUY_Stop,"Trendlinie-BUY-Stop");
           
Trendlinie_BUY_Stop                 "Trendlinie-BUY-Stop";
         }
      }
    if (
anzahl_Trendlinie_SELL_Stop == 1)
      { 
SELL_Stop  NormalizeDouble(ObjectGet_lineare_Interpolation(Trendlinie_SELL_Stop0),Digits);
        if (
StringFind(Trendlinie_SELL_Stop,"Trendlinie-SELL-Stop",0) == -1)
         { 
Objekt_umbenennen(Trendlinie_SELL_Stop,"Trendlinie-SELL-Stop");
           
Trendlinie_SELL_Stop                 "Trendlinie-SELL-Stop";
         }
      }
    
Comment(
     
"aktueller Wert BUY-Stop: ",BUY_Stop,"\n"
     "aktueller Wert BUY-Stop: "
,SELL_Stop,"\n"
           
);
   }

double ObjectGet_lineare_Interpolation(string s_Akt_Objektint i_ZR)
{
 
double d_Preis_Linie 0;
 
double d_Preis_Schritt 0;
 
datetime date_Akt_Kerze iTime(NULLi_ZR0);
 if (
i_ZR == 0i_ZR Period();
 
int    e_objekt_typ ObjectType(s_Akt_Objekt);

       
datetime date_Trendlinie_Time1    = (datetime)(ObjectGet(s_Akt_ObjektOBJPROP_TIME1));
       
double      d_Trendlinie_Price1   ObjectGet(s_Akt_ObjektOBJPROP_PRICE1);
       
datetime date_Trendlinie_Time2    = (datetime)(ObjectGet(s_Akt_ObjektOBJPROP_TIME2));
       
double      d_Trendlinie_Price2   ObjectGet(s_Akt_ObjektOBJPROP_PRICE2);
   
       if (
date_Trendlinie_Time1 date_Trendlinie_Time2 && date_Trendlinie_Time1 date_Akt_Kerze)
          
d_Preis_Linie 0;
       
//       int      i_Shift_Trendlinie_Time0 = 0;
       
int      i_Shift_Trendlinie_Time1 0;
       
int      i_Shift_Trendlinie_Time2 0;
       if (
date_Trendlinie_Time1 <= date_Akt_Kerzei_Shift_Trendlinie_Time1 iBarShift(NULLi_ZRdate_Trendlinie_Time1);
        else 
i_Shift_Trendlinie_Time1 = (int)(-((date_Trendlinie_Time1 date_Akt_Kerze) / (i_ZR 60)));
       if (
date_Trendlinie_Time2 <= date_Akt_Kerzei_Shift_Trendlinie_Time2 iBarShift(NULLi_ZRdate_Trendlinie_Time2);
        else 
i_Shift_Trendlinie_Time2 = (int)(-((date_Trendlinie_Time2 date_Akt_Kerze) / (i_ZR 60)));
   
       if (
i_Shift_Trendlinie_Time1 i_Shift_Trendlinie_Time2)
         { 
d_Preis_Schritt          = (d_Trendlinie_Price2 d_Trendlinie_Price1) / (i_Shift_Trendlinie_Time1 i_Shift_Trendlinie_Time2);
           
d_Preis_Linie            NormalizeDouble ((d_Trendlinie_Price1 d_Preis_Schritt i_Shift_Trendlinie_Time1), Digits);
         }
       if (
i_Shift_Trendlinie_Time1 i_Shift_Trendlinie_Time2)
         { 
d_Preis_Schritt          = (d_Trendlinie_Price1 d_Trendlinie_Price2) / (i_Shift_Trendlinie_Time2 i_Shift_Trendlinie_Time1);
           
d_Preis_Linie            NormalizeDouble ((d_Trendlinie_Price2 d_Preis_Schritt i_Shift_Trendlinie_Time2), Digits);
         }
 return(
d_Preis_Linie);
}

string Objekt_umbenennen(string s_alter_Name,string s_neuer_Name)
{
       
int    e_objekt_typ ObjectType(s_alter_Name);
       
color           col_objekt_farbe = (color)(ObjectGet(s_alter_NameOBJPROP_COLOR));
       
double          d_preis_1        ObjectGet(s_alter_NameOBJPROP_PRICE1);
       
double          d_preis_2        ObjectGet(s_alter_NameOBJPROP_PRICE2);
       
datetime        date_time_1      = (datetime)(ObjectGet(s_alter_NameOBJPROP_TIME1));
       
datetime        date_time_2      = (datetime)(ObjectGet(s_alter_NameOBJPROP_TIME2));
       
short           e_Linien_Stil    = (short)(ObjectGet(s_alter_NameOBJPROP_STYLE));
       while (
ObjectGet (s_alter_NameOBJPROP_COLOR) == col_objekt_farbeObjectDelete(NULL,s_alter_Name);
       
ObjectCreate(NULL,s_neuer_Name,OBJ_TREND,0,date_time_1,d_preis_1,date_time_2,d_preis_2);
       
ObjectSetInteger(NULL,s_neuer_Name,OBJPROP_COLOR,col_objekt_farbe);
       
ObjectSetInteger(NULL,s_neuer_Name,OBJPROP_STYLE,e_Linien_Stil);
 return(
s_neuer_Name);

Bei Überschreitung des Wertes BUY-Stop bzw. Unterschreitung des Wertes SELL-Stop kannst Du dann eine Order öffnen (der Code dafür ist hier nicht entlhalten)
Das Ganze geht natürlich genauso für BUY-Limit und SELL-Limit. Ich benutze dafür einen anderen Linien-Stil.

...noch eine kleine Anmerkung: auf Dauer würde ich es nicht auf OnTick(), sondern auf OnTimer() (mindestens alle 60 Sekunden) und auf OnChartEvent() laufen lassen, sonst verbraucht es unnötig Ressoursen.

Gutes Gelingen.... ;-)
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Aug 2016
Beiträge: 21
Julia befindet sich auf einem aufstrebenden Ast
Standard Danke

Danke, ich werde es ausprobieren
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
ea, mql4, programmierung, programmierung metatrader, programmierung mql4, trendlinie, trendstrahl


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 09:27 Uhr.



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