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: 4058
Beiträge: 38479
Benutzer: 6.364
Aktive Benutzer: 244
Links: 80
Wir begrüßen unseren neuesten Benutzer: UZander
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- UZander
vor 13 Stunden
- harryb
vor einem Tag
- Blade-13
vor einem Tag
- Dumbinatio...
vor 2 Tagen
- Börnie

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 08.04.17
Mitglied
 
Registriert seit: Mar 2014
Beiträge: 39
Richi777 befindet sich auf einem aufstrebenden Ast
Standard

Erst mal vielen Dank nochmals. Ich habe es mittlerweile gecheckt und habe die Linie auch zum bewegen gebracht wie ich es will.
Jetzt stehe ich aber vor ein neuen Problem.
Ich habe mir über den Comment die "double Variabel" der Linie auslesen lassen und gesehen, dass diese Variabel eine wechselnde Zahlenfolge zeigt, statt den aktuellen Kurswert der Linie, was für mich wichtig wäre. Um z.B. mit der Line eine Order zu öffnen oder zu schließen würde ich den Kurswert der Linie benötigen um diese mit der aktuellen Ask- oder Bid-Line abzugleichen, damit ich eine Signal setzen kann. Soweit zumindest meine Logik. Glaube ich ..... Hilfe
...Wer hat eine Rat??? Woher bekomme ich den aktuellen Kurswert der zu bewegenden Linie her bzw. wie kann ich diese als richtige double Variabel speichern lassen?
Angehängte Grafiken
Dateityp: jpg mt4 1.JPG (24,6 KB, 15x aufgerufen)
  #12 (permalink)  
Alt 08.04.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Oh oh, dein Linienwert sieht ja mal garnicht richtig aus.
Ich frage mich, wie du diesen Wert angezeigt bekommst, also was steht da vom Code her?

Um den Preis der Linie abzufragen, kannst du
Code:
ObjectGetDouble(ChartID,"ObjectName",OBJPROP_PRICE);
benutzen. Also in deinem Fall
Code:
ObjectGetDouble(0,"Bid-Linie",OBJPROP_PRICE);
Und wegen den Nachkommastellen evtl noch
Code:
NormalizeDouble(ObjectGetDouble(0,"Bid-Linie",OBJPROP_PRICE),_Digits)
_Digits gibt dabei die Anzahl der Dezimalzeichen nach dem Komma vom aktuellen Chart.
  #13 (permalink)  
Alt 08.04.17
Mitglied
 
Registriert seit: Mar 2014
Beiträge: 39
Richi777 befindet sich auf einem aufstrebenden Ast
Standard

ich bitte um Entschuldigung wenn ich leider sagen muss, dass ich eher ein blutiger Anfänger bin was das programmieren angeht. Ich habe zwar schon in kurzer Zeit so einiges zum laufen gebracht aber mir fehlt noch viel dazu.
@next user....danke dir auch für die Hilfe aber damit kann ich derzeit nicht viel anfangen, weil das Code-schnipsel sind, wo ich nicht weis wo ich die einfügen soll oder wie ich damit den Wert auslesen kann. Ich sehe nur über den Comment für die Linie, dass wenn jedes mal die Linie (in meinen Fal)l nach unten bewegt sich eine Reihe von Zahlen wirrlos ändert.

Hier der Code als Beispiel:

PHP-Code:
extern double Lots           0.01;   

extern int    BuyOrder      30;  
extern int    CloseOrder    30
extern int    TrailingStop   55;      

extern bool   UseHourTrade   true;   
extern int    StartHour      0
              
EndHour        11
extern int    StartMin       1
              
EndMin         59
extern int    StartSec       1
              
EndSec         59

string        BidLine     ="Bid-Line"

string NL         "\n"

int Order

double Bid_Line Bid

    
extern color             Farbe       clrWhite;  
extern ENUM_LINE_STYLE   Linienstil   STYLE_SOLID;     
enum LinienRichtung  
    
{  
     
rauf   1// Linie trailt nach oben  
      
runter 0// Linie trailt nach unten  
    
};  
extern LinienRichtung runter 0;  


//+------------------------------------------------------------------+   
void OnTick()  
  {  
  
ObjectDelete("Bid-Line"); 

   if (
runter == 0)  
     {  
      if (
Bid_LineBid)  
         
Bid_LineBid
           
     }  
  
   
ObjectCreate(NULL,"Bid-Line",OBJ_HLINE,0,1,Bid_Line); 
    
ObjectSetInteger(NULL,"Bid-Line",OBJPROP_COLOR,clrWhite);  
     
ObjectSetInteger(NULL,"Bid-Line",OBJPROP_STYLE,Linienstil); 
     
  
double AccountAccountEquity();
  
Comment(StringFormat("Account = %G  EUR \nLots = %G\n Bid-Line = %d",Account,Lots,Bid_Line)); 
  #14 (permalink)  
Alt 08.04.17
Mitglied
 
Registriert seit: Mar 2014
Beiträge: 39
Richi777 befindet sich auf einem aufstrebenden Ast
Standard

Ich habe den Fehler gefunden

Code:
 Comment(StringFormat("Account = %G  EUR \nLots = %G\n Bid-Line = %d",Account,Lots,Bid_Line));
Es wurde mir in Comment falsch angezeigt weil mein Wert als %d statt %G gesetzt war.
  #15 (permalink)  
Alt 08.04.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Kein Problem, fängt ja jeder klein an.
Zu meinem Codeschnipsel mal ein kleines Beispiel:
Code:
//Aktuellen Ask-Preis ermitteln
double a_ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

ObjectCreate(0,"Bid_Linie",OBJ_HLINE,0,0,a_ask);

//Aktuellen Preis der Linie ermitteln und speichern
double aktueller_LinienPreis = ObjectGetDouble(0,"Bid-Linie",OBJPROP_PRICE);
ObjectGetDouble liefert die aktuelle Preisposition deiner Linie. Den Rückgabewert speicherst du einfach in einer double-Variable.
Da du gefragt hast, wie du den Wert deiner Linie auslesen kannst, habe ich dir den Code gegeben. Aber wenn du nur, wie zu sehen, die Variable mit dem Wert nur mit Bid/Ask vergleichst, brauchst du den Wert ja nicht ermitteln.

Zu deinem Code, es wäre besser, wenn du ObjectDelete() und ObjectCreate() nicht ständig aufrufst.
OnTick() wird ja bei jeder Kursveränderung aufgerufen (bei jedem Tick halt). Es ist einfach sinnlos, sein Objekt zu löschen und neu zu zeichnen.
Vor allem rufst du ObjectDelete und ObjectCreate nicht erst nach einer Bedingung, sondern immer auf. Also auch wenn der Kurs in die andere Richtung geht, löscht und erstellst du deine Linie neu, obwohl diese sich nicht geändert hat.
An der stelle wäre es so besser:
Code:
void OnTick()  
{  
   if(runter == 0)  
   {  
      if(Bid_Line > Bid)
      {
         Bid_Line = Bid;
         ObjectMove(0,"Bid_Linie",0,0,Bid_Line);
      }   
   }
     
   double Account= AccountEquity();
   Comment(StringFormat("Account = %G  EUR \nLots = %G\n Bid-Line = %d",Account,Lots,Bid_Line));
}
Damit bewegst du deine Linie einfach nur, und das auch nur, wenn es nötig ist.

Außerdem würde ich dir mal die Funktion OnInit() empfehlen. Diese wäre gut, um alle Standard-Einstellungen und Initialisierungen vorzunehmen. Sie wird automatisch aufgerufen, sobald dein EA startet (wie der Name sagt "initialisieren").

Was deine Lots angeht, so können bei verschiedenen Symbolen(Währungspaare, Indices, ect.) unterschiedliche, minimale Lots sein(z.b beim einen 0.01, beim anderen 0.10).
Da solltest du deine Lot-Variable vielleicht besser mit
Zitat:
double lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
initialisieren. So hast du bei jedem Chart entsprechend die kleinst mögliche Lot-Größe.
  #16 (permalink)  
Alt 09.04.17
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 128
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

@Richi777
Den Wert der Linie auslesen brauchst Du nur, wenn Du eine Linie auch manuell verschieben können möchtest und der EA die verschobene Linie benutzen soll (in der Art, wie Du auch beim händischen Handel im MT4 den SL und den TP verschieben kannst).
Wenn Du das nicht möchtest, dann kannst Du es genau so machen, wie next_user geschrieben hat.
Thema geschlossen

Lesezeichen

Stichworte
hline, horizontale line, horizontale linie, linie, mql4, programmierung, programmierung metatrader, programmierung mql4, stop, trailing, trailingstop


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 19:10 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 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.
-----------------------------------------------------------------------------------------------------------------------------