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.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 02.09.17
Gesperrter Benutzer
 
Registriert seit: Aug 2016
Beiträge: 33
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
  #2 (permalink)  
Alt 02.09.17
Gesperrter Benutzer
 
Registriert seit: Aug 2016
Beiträge: 33
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?
  #3 (permalink)  
Alt 02.09.17
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
  #4 (permalink)  
Alt 03.09.17
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
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.... ;-)
  #5 (permalink)  
Alt 07.09.17
Gesperrter Benutzer
 
Registriert seit: Aug 2016
Beiträge: 33
Julia befindet sich auf einem aufstrebenden Ast
Standard Danke

Danke, ich werde es ausprobieren
  #6 (permalink)  
Alt 30.09.17
Gesperrter Benutzer
 
Registriert seit: Aug 2016
Beiträge: 33
Julia befindet sich auf einem aufstrebenden Ast
Standard Trendlinien

Hallo,

ich habe den Code nun in meinen EA eingebaut und das läuft auch.
ABER
ich möchte dann die generierte Variable "BUY_Stop" aus dem Code von Adlerauge als Wert für einen Startbefehl nutzen und zwar:

if(MA<BUY_Stop)MAlong=true;

Der erkennt aber nicht die Variable BUY_Stop aus dem oben angezeigten Code von Adlerauge ..... wie kann ich die Variable "BUY_Stop" aktivieren ?

Liebe Grüße
Julia
  #7 (permalink)  
Alt 01.10.17
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Wenn er die Variable nicht kennt, dann ist sie bei Dir als lokale Variable irgendwo zwischen 2 Schweifklammern deklariert, nicht aber als globale Variable (oben im EA, noch vor OnInit und OnTick).
Lokale Variablen "leben" nur innerhalb 2 Schweifklammern, während globale Variablen (Global variables of Client Terminal) im gesamten EA bekannt sind.

https://book.mql4.com/variables/globals
  #8 (permalink)  
Alt 02.10.17
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

... Ups, kleiner Fehler, den Link bitte vergessen, ich meinte nicht die global Variables of a Terminal, sondern ganz normale globabe Variablen. Die werden, wie schon geschrieben nicht zwischen 2 Schwifklammern sondern einfach oben im EA deklariert, und sind somit im ganzen EA verfügbar. Global Varibles of a Terminal wären in allen EAs im Terminal verfügbar, die brauchst Du hier aber nicht...
Thema geschlossen

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 +1. Es ist jetzt 12:38 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.
-----------------------------------------------------------------------------------------------------------------------------