Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   MQL4 Starthilfe (http://www.expert-advisor.com/forum/showthread.php?t=5964)

Lampe 07.01.18 17:39

MQL4 Starthilfe
 
Sehr geehrte Damen und Herren,

ich möchte gerne in diesem Thread Fragen stellen um MQL4 überhaupt erstmal in seinem Aufbau zu verstehen.

Es geht mir bei allen Fragen nicht darum den richtigen Code an sich zu kriegen sondern vorallem darum zu verstehen, warum und wieso etwas funktioniert oder nicht funktioniert.

Vermutlich werdet ihr euch bei einigen Fragen an den Kopf fassen, seht es mir nach.

Frage 1

Ich möchte überprüfen, wieviele Orders im Markt sind, und einen Kommentar oben Links im Chart ausgeben, wenn die Orderanzahl größer oder gleich 1 sind.

Ich möchte also KEIN Kommentar wenn die Orderanzahl 0 ist.

Code:

void OnTick()
  {
 
  int Anzahl = OrdersTotal();

  if(Anzahl>=1);
          {
          Comment ("eine Order");
          }
  }

Er ignoriert meine "if Zeile" und zeigt den Kommentar immer oben links im Chart an.

Wo liegt mein Denkfehler?

traderdoc 07.01.18 18:32

Na ja, nun ist ein ; zu viel an Bord.

Code:

void OnTick() {
  int Anzahl = OrdersTotal();
  if (Anzahl >= 1) {
      Comment ("eine Order");
  }
}

Und gleich von vornherein angewöhnen, einen schön strukturierten Code zu schreiben.

traderdoc

Lampe 07.01.18 19:16

Danke Doc, ich hab gehofft das du dich hier beteiligt.. :D

Dann war nur ein ; zuviel... das lässt mich hoffen.

Ich möchte nun den Code von oben etwas ausbauen.

Dafür habe ich den Code so umgestellt das bei OrdersTotal == 0 das Comment "keine Order" ausgegeben wird, und "Order", sobald eine besteht.

Um dieses Meisterwerk zu testen möchte ich wieder per if Bedingung, eine Buy Order setzen wenn wie oben, der OrdersTotal == 0.

Ich möchte also immer wenn KEINE Order besteht eine senden.

Code:

//+------------------------------------------------------------------+
//| Expert tick function                                            |
//+------------------------------------------------------------------+
void OnTick()
{
 
  int Anzahl = OrdersTotal();
  if (Anzahl == 0)
      {
      Comment ("keine Order");
      }
  else Comment ("Order");
 
  if (Anzahl == 0) 
      {
      int OrderSenden = OrderSend(NULL,OP_BUY,0.1,Ask,10,100,200,NULL,12,0,clrGreen);
      }
}

Er sendet aber keine Order raus, und als Fehlercode bekomme ich Ordersend Error 130.

Wo liegt der Fehler?

MfG
Lampe

Lampe 07.01.18 21:08

//Update zur vorherigen Frage


Ich habe die Fehler gefunden.

1. viel mir auf das ich beim StoppLoss das "-" Zeichen vergessen habe

Das brachte jedoch noch nicht den gewünschten Erfolg.

2. viel mir auf das ich bei SL und TP auch den Wert dazu schreiben muss von wo die Werte berechnet werden müssen.

Die korrekte OrderSend Zeile lautet also wie folgt:

Code:

int OrderSenden = OrderSend(NULL,OP_BUY,0.1,Ask,10,Ask-100,Ask+200,NULL,12,0,clrGreen);
Wer weiß, vielleicht hilft dieses Update ja auch einem anderen Anfänger weiter.

Feierabend.

MfG
Lampe

Lampe 08.01.18 13:53

Sehr geehrte Damen und Herren,

heute möchte ich mich mit einer weiteren allgemeinen Frage an euch richten und hoffe, auf deine, Mithilfe..

Ich habe Verständnisprobleme was das bearbeiten von Orders angeht, und benötige einen Denkanstoß.

Nehmen wir an ich habe 2 StopOrders gesetzt, eine Buy_Stop und eine Sell_Stop.
Und möchte nun, sobald eine der beiden Orders ausgelöst wird, die jeweilige andere Stop_Order löschen.

Das sieht wie folgt aus:

Zitat:

int Buy_Stop_Order=OrderSend(Parameter..);
int Sell_Stop_order=OrderSend(Parameter..);
Er speichert mir doch jetzt sofern die Order beim Broker eingegangen ist in den Variabelen "Buy_Stop_Order" und "Sell_Stop_Order einen Wert, ich glaube es ist die Ticketnummer.

Kannst du, mir bitte einen kurzen Anstoß geben wie ich von diesem Punkt aus weiter machen kann?

Hilfreich wäre auch eine kurze einfache Beschreibung der OrderSelect Funktion.

Ich bin für jeden Ratschlag dankbar.

MfG
Lampe

Trader6666 08.01.18 18:52

moin,

würd sagen das du einfach die Orders nach dem Typ abfragst und das Ergebnis mit nem Bool wert ausgibst, sobald eine von denen keine Limit oder Stoporder ist, kannst du die bestehende dann eben löschen...du musst die Orders nicht zwingend in eine Variable speichern, bei der Ordererstellung kann man auch einen Kommentar zu der jeweiligen Order setzten. Dann fragst du einfach die OrderComment() ab und wenn einer fehlt ,die LimitStop Order auswählen und dann löschen, so grob gesagt...

Lampe 08.01.18 21:42

Hallo Trader666,

vielen Dank für deine Antwort. Ich hab mich zwischenzeitlich auch weiter eingelesen und denke ich werds hin bekommen. Jedenfalls bin ich guter Hoffnung.

Bis hierher erstmal Dankeschön!

Feierabend.

Mit freundlichen Grüßen
Lampe

Lampe 09.01.18 12:10

Sehr geehrte Damen und Herren,

heute möchte ich mich mit einer sehr einfachen Frage an euch wenden und hoffe, du nimmst dir kurz die Zeit, für eine Antwort.

Folgendes:

Wenn ich im Strategietester, eine Strategie Backteste und das Journal aufrufe, gibt er mir dort verschiedene Informationen.

Es gibt ganz linkt beispielsweise ein rotes Dreieck das für einen Error steht und somit einen Fehler anzeigt.

Es gibt aber auch ein gelbes Dreieck wie beispielsweise in folgender Zeile:
Code:

Gelbes Dreieck! 2018.01.09. 12:03:15.322 2018.01.05. 22:57:30 Tester:order#7 is closed
Meine Simple Frage:
Dient diese Zeile und das gelbe Dreieck mit Ausrufezeichen lediglich dazu mich über eine Ausführung zu Informieren?
In diesem Fall hätte es keine weitere Bedeutung für mich.

Oder ist diese Zeile ebenfalls ein Hinweis darauf, das irgendwie in irgendeiner Form, ein Fehler aufgetreten ist?

Ich würde mich über eine kurze Antwort von dir sehr freuen.

MfG
Lampe

Lampe 10.01.18 21:01

Ich habe eine weitere Frage.

Für eine For Schleife wird häufig folgende Zeile verwendet:

Zitat:

for (int i = OrdersTotal()-1; i >= 0; i--)
Warum verwendet man diese -1 hinter OrdersTotal?
Das i–– am Ende besagt doch das man jeweils um eins herunterzählt, aber wieso verringert man bereits am Anfang die Orderanzahl um -1?

Wäre sehr nett wenn mir jemand die Frage kurz beantworten könnte.

Mit freundlichen Grüßen
Lampe

mocwoc 11.01.18 19:57

OrdersTotal -1
 
Hi Lampe,

der Grund für die "-1" in dem Ausdruck

Code:

for (int i = OrdersTotal()-1; i >= 0; i--)
liegt darin, dass die Orders indiziert, sprich mit einer laufenden Nummer versehen sind. Nur fängt MQL nicht mit 1 zu zählen an, sondern mit 0.

Wenn Du also 5 Orders im Markt hast, dann haben die die Indexnummer 0,1,2,3 und 4. Die Anzahl der Orders ist aber 5. Beim Herunterzählen fängst Du also mit 4 an und hörst bei 0 auf. Deshalb die -1.

Ähnliches gilt auch für frei definierte Arrays, IndexBuffers, TimeSeries, etc.

Cheers, mocwoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:05 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum