Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Frage zu OrderSelect()-Funktion

Geschrieben

...joa mai is däääs siaß...

 

Danke für das nette Willkommen! :tinozi:

 

Aber wie ich sehe hat sich in den letzten Monaten viel getan. So werde ich natürlich mein Bestes geben um durch meine Fragen und Antworten noch Einiges beizusteuern.

 

Habe auch schon die ersten paar Fragen um meine Wissenslücken zu füllen.

Die werde ich aber wahrscheinlich auf die anderen Kapitel verteilen müssen.

Eine wird aber vll schon hier gehen.

 

Wie ist die genaue Zählweise von Index und Ticket in der OrderSelect()-Funktion?!

Also 1,2,3 habe ich verstanden...Was wird damit ausgesagt?

(Damit meine ich nicht die Funktion)

 

Die Basics sind ja vorhanden. Jetzt muss nur noch die Fasade her und ein paar kleine Details

...und die möchte ich mir gerne hier abholen. Sofern das denn machbar ist :grins-:

 

Soll der MT5 mit C++ laufen?!

 

lg NC

Featured Replies

Geschrieben

Generell fängt es mit 0 an. Damit kannst du alle anderen Funktionen ausführen die dir Auskunft über die Order gibt bzw. die Order schließt die du ausgewählt hast z.B OrderType() oder OrderOpenPrice() usw.

Wobei du musst beachten, dass wenn du z.B 3 Order offen hast daher : 0, 1, 2. Und du nun die Order 1 schließt, dass dann die Order 2 ab sofort Order 1 ist und jetzt mit OrderSelect(1,....) ansprechbar ist

  • 3 Wochen später...
Geschrieben
  • Autor

Erstmal danke für die Antwort. Das Feld lichtet sich langsam :news:

 

Und wie würde das genau in der History laufen?

 

Ich möchte mir z.B. die letzte geschlossene Order aus der History aufrufen.

Damit möchte ich feststellen an welchem Tag die letzte Order ausgelöst wurde...

 

Kann ich da schreiben:

int CalcCurOrdClose()
 {
  int buys=0,sells=0;
//-----
  for(int i=OrdersHistoryTotal();i>0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
     if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)continue;
//-----
     if(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(OrderOpenTime()))
       {
        if(OrderType()==OP_BUY) buys++;
        if(OrderType()==OP_SELL) sells++;
        if(buys>0)  return(buys);
        else        return(sells);
       }
    }
//-----
  return(0);
 }

 

Oder sollte ich am Besten erst OrderType() aufrufen und danach die Variablen Dekrementieren(oder Inkrementieren)?

Oder habe ich da etwas übersehen. Im Moment hänge ich an diesem Problem und träume sogar teilweise davon. Ich denke sogar auf der Arbeit über die Lösung nach...

Vielleicht ist es ja das erste Zeichen für einen "HirnSchuß"?!

 

LG NC

Geschrieben
Ich möchte mir z.B. die letzte geschlossene Order aus der History aufrufen.

Damit möchte ich feststellen an welchem Tag die letzte Order ausgelöst wurde...

 

Willst du mit dem Code genau das machen? Also die Order aus der history erhalten die als letztes geschlossen wurde?

Weil was dein Code derzeit tut:

Wenn es eine Order gibt, die geschlossen ist und heute geöffnet wurde retouniert sie 1 sonst 0.

 

(und wieso heißt die Funktion "CalcCurOrdClose"? ;)

 

hth

Geschrieben
  • Autor
Willst du mit dem Code genau das machen? Also die Order aus der history erhalten die als letztes geschlossen wurde?

Weil was dein Code derzeit tut:

Wenn es eine Order gibt, die geschlossen ist und heute geöffnet wurde retouniert sie 1 sonst 0.

Diese Order würde ich verwenden, wenn der EA nur eine Order am Tag öffnen soll. Auch wenn es vielleicht ein zweites Signal am Tag gibt, dann soll dies nur die Sperre sein...

 

Aber wenn Du sagst dass er es macht, dann ist ja alles in Butter. Jedenfalls fast Alles. Denn im Backtest erkennt er es nicht.

Woran könnte das liegen?

Vielleicht weil er im Backtest keinen direkten Zugriff auf auf die History hat?!

 

(und wieso heißt die Funktion "CalcCurOrdClose"? ;)

 

Ich habe noch eine weiter CalcCurOrd()...die heißt aber Open...

CalcCurOrdOpen() soll für mich feststellen ob eine Order offen ist.

CalcCurOrdClose() soll schauen ob heute schon eine geschlossen wurde.

 

Aber erstmal danke für die sehr sehr sehr schnelle Antwort. Würde fast sagen "ExpressAnswer" :news:

 

LG NC

Geschrieben
Aber wenn Du sagst dass er es macht, dann ist ja alles in Butter. Jedenfalls fast Alles. Denn im Backtest erkennt er es nicht.

Woran könnte das liegen?

 

Mir fällt gerade was auf: Falls du am gleichen Tag Pending Orders offen hattest die aber geschlossen/gelöscht wurden, und er eine solche als erstes findet, dann gibt er auch 0 aus (weil buys ist immer noch 0 und sells detto)

 

Du solltest die Abfrage intern auf

if(OrderType() == OP_BUY || OrderType() == OP_SELL)
 return(1);

ändern, dann müsste es gehen.

 

Falls nicht: in welchem Szenario funktionierts nicht? (also welche Orders wurden an dem Tag geöffnet, geschlossen und gelöscht?

 

HTH

Geschrieben
  • Autor
Mir fällt gerade was auf: Falls du am gleichen Tag Pending Orders offen hattest die aber geschlossen/gelöscht wurden, und er eine solche als erstes findet, dann gibt er auch 0 aus (weil buys ist immer noch 0 und sells detto)

Wieso würde er eine PendingOrder die geschlossen/gelöscht wurde nicht erkennen? Der OrderType() wäre doch auch OP_BUY bzw. OP_SELL. Oder täusche ich mich da?

 

Du solltest die Abfrage intern auf

if(OrderType() == OP_BUY || OrderType() == OP_SELL)
return(1);

ändern, dann müsste es gehen.

 

Meinst Du mit intern...

if(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(OrderOpenTime()))
	{
	 if(OrderType()==OP_BUY || OrderType()==OP_SELL) return(1);
	 }
...

...also unter die Zeit-Funktionen?

 

Falls nicht: in welchem Szenario funktionierts nicht? (also welche Orders wurden an dem Tag geöffnet, geschlossen und gelöscht?

Im Backtest läuft es nicht so wie es laufen sollte:

Er öffnet eine Order und die wird geschlossen. Am gleichen Tag wird dann die nächste geöffnet...das sollte aber nicht so sein.

Jetzt lass ich ihn mal in der Demo laufen und nach jedem Schließen einer Order macht er die nächste auf, sofern die Bedingungen gegeben sind.

Kann es sein, dass die Schleifeneinstellung nicht funzt?!

 

Hier nochmal kurz die veränderte Funktion:

int CalcCurOrdClose()
 {
//---- 
  for(int i=OrdersHistoryTotal();i>0;i--)
 {
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)continue;
  if(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(OrderOpenTime()))
	{
	 if(OrderType()==OP_BUY || OrderType()==OP_SELL) return(1);
	}
 }
//----
  return(0);
 }

 

Danke für die Hilfe und Unterstützung :news:

Geschrieben
Der OrderType() wäre doch auch OP_BUY bzw. OP_SELL.

Nein es gibt noch OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP und OP_SELLSTOP.

 

 

 

Meinst Du mit intern...

if(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(OrderOpenTime()))
	{
	 if(OrderType()==OP_BUY || OrderType()==OP_SELL) return(1);
	 }
...

...also unter die Zeit-Funktionen?

jup.

 

Er öffnet eine Order und die wird geschlossen. Am gleichen Tag wird dann die nächste geöffnet...das sollte aber nicht so sein.

ich vermute mal das du damit eine Marketorder meinst die dann geschlossen wird und nicht gelöscht oder?

 

Mir ist noch ein Fehler aufgefallen, der vermutlich der Grund ist:

Der Index der Orders im Pool zählt bei 0 weg. Du prüfst nur alle > 0 ignorierst also die "letzte" Order

Geschrieben
  • Autor
Nein es gibt noch OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP und OP_SELLSTOP.

Das habe ich ja total vergessen dass es diese OrderType() auch noch gibt. Das kommt davon wenn man nicht damit arbeitet :news:

 

ich vermute mal das du damit eine Marketorder meinst die dann geschlossen wird und nicht gelöscht oder?

Ja, meine die MarketOrder die geschlossen wurde.

 

Mir ist noch ein Fehler aufgefallen, der vermutlich der Grund ist:

Der Index der Orders im Pool zählt bei 0 weg. Du prüfst nur alle > 0 ignorierst also die "letzte" Order

Also bekommt die letzte geschlossene Order die "0" zugewiesen...mh...gleich mal testen :news:

 

Danke bis hierher...

Bearbeitet von NikkChade

Geschrieben
  • Autor
Mir ist noch ein Fehler aufgefallen, der vermutlich der Grund ist:

Der Index der Orders im Pool zählt bei 0 weg. Du prüfst nur alle > 0 ignorierst also die "letzte" Order

 

Mythos...

 

Du bist der Oberbringer!!! :news: :news:

Ganz liebes DANKE an Dich.

 

Es funzt...wie geschmiert. Und deine o.g. Problemlösung hat geholfen.

Jetzt frag mich aber bitte nicht wie ich auf die vorherige Art gekommen bin.

Wahrscheinlich :news:...

 

Und wenn ich den Thread hier durchgehe, dann hatte mir auch schonmal Jemand das Spektakel näher gebracht und ich habe es nur nicht gerafft... :news:

 

Damit meine ich die Trixxie...Großes Danke auch an Dich!

 

Ich verbeuge mich vor Euch!!! :news:

 

Und das zeigt mir mal wieder:

Wenn Du zu nah vor etwas stehst, dann gehe ein Schritt zurück und betrachte das "Ganze"...die Lösung ist oft so einfach :news:

 

Also nochmal danke, dass Du dir die Zeit und Mühe gemacht hast.

 

LG aus München

NC

Bearbeitet von NikkChade

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.