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: 4978
Beiträge: 43264
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard Print() funktioniert nicht

Hallo,

ich programmiere gerade zu Übungszwecken einen einfachen EA. Zu Testzwecken benötige ich manchmal die Funktion Print(). Teste dann meistens in einem Script, nicht in einem EA (daher arbeite ich unten stehend mit OnStart(), nicht mit OnInit()).

Die Funktion Print() hat auch schon mal nachweislich funktioniert, jedoch funktioniert sie jetzt seltsamerweise nicht mehr (d.h. der auf der Konsole auszugebende, zu "printende" String wird nicht ausgegeben).

Zunächst habe ich folgenden Code versucht:


Code:
void OnStart()
  {
   test();
  }


//+------------------------------------------------------------------+


void test()
  {
   Print("TEST");
  }

Das Ausführen des oben stehenden Codes führt zwar nicht zu einer Fehlermeldung, jedoch auch nicht zu der erwarteten Ausgabe des Strings "Test" in der Konsole.

Stattdessen wird im Metaeditor ausgegeben:

EDIT:
Der UPLOAD HAT NICHT RICHTIG FUNKTIONIERT, SIEHE DAHER BILD 1 DES ANHANGS AM ENDE DIESES THREADS.



Und in der Konsole des MT Wird ausgegeben:

EDIT:
Der UPLOAD HAT NICHT RICHTIG FUNKTIONIERT, SIEHE DAHER BILD 2 DES ANHANGS AM ENDE DIESES THREADS.



Dann ist mir noch die Idee gekommen, Print() direkt aus dem Methodenrumpf von OnInit() aufzurufen. Darauf ergab sich dann der folgende Code:

Code:
void OnStart()
  {
   Print("test2");
  }

Das funktioniert dann allerdings auch nicht, es wird auf den beiden Konsolen (Metaeditor und MT) ein ähnlicher, fast identischer Text ausgegeben wie mit dem oben stehenden früheren Code. Jedoch nicht der erwartete String "test2".

Sieht jemand meinen Fehler?

Besten Dank für jeden konstruktiven Hinweis und grüße,

LQK
Angehängte Grafiken
Dateityp: jpg EA forum bild1.jpg (63,5 KB, 4x aufgerufen)
Dateityp: jpg EA forum bild2.jpg (44,0 KB, 3x aufgerufen)

Geändert von LQK (01.06.20 um 18:33 Uhr)
  #2 (permalink)  
Alt 01.06.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 LQK Beitrag anzeigen
Code:
void OnStart()
  {
   Print("test2");
  }
ruft Print nur bei jedem neuen (Preis-)Tick auf (dürfte schwierig sein heute, wenn fast alles geschlossen ist)
Ich setze so was dann testweise in OnInit. AVT
  #3 (permalink)  
Alt 01.06.20
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

"The Start event is a special event for script activation after it is loaded. This event is processed by OnStart handler. The Start event is not send to Expert Advisors or custom indicators."

https://docs.mql4.com/runtime/event_fire#start

Mit einem Skript sollte es außerhalb der Handelszeiten klappen.
  #4 (permalink)  
Alt 02.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
ruft Print nur bei jedem neuen (Preis-)Tick auf (dürfte schwierig sein heute, wenn fast alles geschlossen ist)
Ich setze so was dann testweise in OnInit. AVT
Ich weiß sicher, dass das Script schon mal funktioniert hat. Kann natürlich während der allgemeinen Marktöffnungszeiten gewesen sein und es hat deswegen funktioniert.

Habe es jetzt (Markt hat jetzt geöffnet) noch mal (Code wie oben stehend) ausgeführt und es hat wieder nicht funktioniert (selbes Problem wie gestern).

Habe es jetzt mal mit einem EA und OnInit() probiert, das geht aber auch nicht. Der EA enthält nur die OnInit() und diese soll einfach nur einen Teststring ausgeben lassen.

Es wird dann einfach nur der EA geladen, aber nichts auf der Console ausgegeben. Der Code ist:

Code:
void OnInit()
  {Print("TEST!!!!!");
//---
   
//---
   ;
  }

Hab jetzt mal noch testweise Print() in OnTick() eingebaut. Der EA läuft gerade noch. D.h. wenn irgendwann mal ein Tick kommt (woran sehe ich überhaupt, ob einer kam?) müsste die Console ja eigentlich was ausgeben (im Moment sieht es allerdings nicht danach aus).

Hier der Code:

Code:
void OnInit()
  {Print("TEST!!!!!");
//---
   
//---
   ;
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  Print("Da kam grad' ein Tick!");
//---
   
  }
//+------------------------------------------------------------------+


Grüße,
LQK
  #5 (permalink)  
Alt 02.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Post

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
"The Start event is a special event for script activation after it is loaded. This event is processed by OnStart handler. The Start event is not send to Expert Advisors or custom indicators."

https://docs.mql4.com/runtime/event_fire#start
Ich verstehe nicht, wie das damit zusammenhängt?


Zitat:
Mit einem Skript sollte es außerhalb der Handelszeiten klappen.
Stimmt, Pfingsten ist in den USA ja kein Feiertag. Demnach könnte es sein, dass die Märkte geöffnet hatten, als ich das Script gestern Abend ausprobiert habe.

Wieso sollte das Script allerdings funktionieren, wenn die Märkte geschlossen haben? Einen funktionstüchtigen EA braucht ich ja normalerweise während die Märkte geöffnet haben, nicht, während sie geschlossen haben.
  #6 (permalink)  
Alt 02.06.20
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von LQK Beitrag anzeigen
Ich verstehe nicht, wie das damit zusammenhängt?
Kann es nicht ganz genau sagen da ich in MT5 unterwegs bin aber es klingt so als wäre das StartEvent bei MT4 nur für Skripte aber nicht für EA/Indis nutzbar.

Zitat:
Zitat von LQK Beitrag anzeigen
Wieso sollte das Script allerdings funktionieren, wenn die Märkte geschlossen haben? Einen funktionstüchtigen EA braucht ich ja normalerweise während die Märkte geöffnet haben, nicht, während sie geschlossen haben.
Weil ein Skript kein EA ist, es verarbeitet keine Ticks.
"A script is a program coded in MQL4 and executed by the client terminal only once. Scripts are intended to perform operations that should be executed only once."
https://book.mql4.com/basics/programms
  #7 (permalink)  
Alt 02.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Kann es nicht ganz genau sagen da ich in MT5 unterwegs bin aber es klingt so als wäre das StartEvent bei MT4 nur für Skripte aber nicht für EA/Indis nutzbar.
Ich verstehe in dem Fall noch nicht mal, was das mit einem Start-Event zu tun hat. Was für ein Start-Event? Das Ereignis "Start" welches sich beim Starten eines Scripts oder EA ergibt?

Wie gesagt, das Script hat schon mal funktioniert, so vor 1-2 Wochen. Weiß aber den Tag und die Uhrzeit nicht mehr und somti nicht ob der Markt des Charts auf dem ich den EA geöffnet habe (Forex) zu dem Zeitpunkt geöffnet hatte oder nicht. War aber auch im MT-Konto und auch im Broker-Konto nicht eingeloggt, frage mich somit, ob "Markt offen oder nicht" überhaupt eine Rolle gespielt haben kann.

Habe jetzt mal nachgesehen, wann die Scriptdatei zuletzt geändert wurde. Könnte sein, dass der Test des Scripts als es funktioniert hat an einem Dienstag kurz vor oder kurz nach 19 Uhr war.


Zitat:
Weil ein Skript kein EA ist, es verarbeitet keine Ticks.
"A script is a program coded in MQL4 and executed by the client terminal only once. Scripts are intended to perform operations that should be executed only once."
https://book.mql4.com/basics/programms
Tja, ich habe jedenfalls von vorhin bis jetzt den EA laufen lassen und es kam bislang keine Ausgabe. Konnte bislang die Ausgabe nicht kommen weil kein Tick kommen konnte, da ich gar nicht eingeloggt bin?

Wenn Print() wirklich einen Tick benötigt, ist das ja schon ungünstig. Erstmal macht es die Sache, wie jetzt, kompliziert, zweitens kann es ja auch bei einem Script jederzeit passieren, dass man mal einen print() braucht. Aber wie gesagt, das Script hat definitiv schon mal funktioniert, habe seitdem auch nichts am Quellcode geändert (der erste gepostete Code im EP).

Hier noch mal der andere Code:
Code:
void OnStart()
  {
   test();
   Print("test2");
 
}


//+------------------------------------------------------------------+


void test()
  {

   Print("TEST");
   //Print(TimeCurrent());

}

---

Schade, dass in MQL die Umsetzung einer so einfachen Sache an so viele Randbedingungen geknüpft ist.

Hat nicht jemand Lust es selbst auszuprobieren, und den Code der funktioniert hat zu posten?

Grüße,
LQK
  #8 (permalink)  
Alt 02.06.20
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

OnStart ist die Initialisierung für Skripte, wird 1x gestartet wenn Skript gestartet. Der Code sollte aufgerufen werden egal ob Märkte offen oder nicht. Ein Skript sollte daher immer funktionieren, zu MT4 im speziellen kann ich aber nichts sagen aber da sollte es nicht grundlegend anders sein als bei MT5.

Bei EAs ist es anders da brauchst du für Ticks offene Märkte... Das sind ja die Basics, im Link ist doch alles erklärt zu script,ea,indi und dessen Event-Funktionen
  #9 (permalink)  
Alt 02.06.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Das hier im Anhang ist ein Skript, das ne ganze Menge ausgibt.
1. im Editor öffnen
2. speichern unter "Skripts"
3. komplieren
4. auf einen Chart ziehen
5. Ansicht - Terminal wählen
6. unter "Experten" Meldungen lesen

Und das funktioniert! AVT
Angehängte Dateien
Dateityp: mq4 SymbolInfos.mq4 (1,9 KB, 5x aufgerufen)
  #10 (permalink)  
Alt 03.06.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Bin Alles Andere als nen Profi, aber ich könnte mir vorstellen, dass er unter Experten nix ausgibt, weil der ganze Code überhaupt nix tut. Er hat keine Aktionen zu machen und deswegen auch keinen Grund, irgendwas zu printen. Wie ich soll das beschreiben... Die ganze Datei wird nicht gestartet, weil es nix zu tun gibt.

Thema geschlossen

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 20:32 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.
-----------------------------------------------------------------------------------------------------------------------------