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.

Handelssystemansatz Pivot-Points

Featured Replies

Geschrieben
Na ja, bei Forex schon (aber da ist das Ende mit 0:00 eher willkürlich, denn es läuft ja da gleich weiter). Da Pivot-Punkte aber auch und v.a. gut bei "Wir machen hier mal bissl Pause und eröffnen dann mit Gap"-Werten funktioniert (Dax z.B., und bei manchen MT-Brokern gibts ja auch Dax-CFDs) fände ich es gut, wenn man den Zeitpunkt der Berechnung einstellen kann und auch den Timeframe.

 

Cool wäre auch:

Die 3 verschiedenen Pivot-Punkte-Berechnungsvarianten einstellbar zu machen per Input-Variable, und die Linien separat zu benenennen (R1,R2,....) und ebenfalls einstellbar machen beim Indikator, also welche angezeigt werden sollen (reicht ja pro Linie ne boolsche Variable), denn R3 und S3 werden z.B. selten erreicht.

Und die Farben der Linien einstellbar !

Das mit den Namen ist ja schon, und die Farbe vom Indi kann man sowieso selber einstellen wie man will. Das was im Code steht ist ja nur der default-wert.

Für die restliche Kosmetik:

Was haltet ihr davon wenn wir 2 Varianten machen?

Einen für den EA, wo man nur die Berechnungsmethode einstellen kann, TimeFrame läuft dann über die Periode etc. (wär wesentlich schneller (ja ich weiß wir haben noch keine Performancetechnischen Probleme, aber trotzdem ;)

Und einen zum anzeigen der Lines, hier könn ma dann abgesetzte Linien machen mit Beschriftung im Chart etc. (also der ganze SchnickSchnack der dem EA voll egal ist ;)

 

 

Wolltest Du nichtt deswegen mal schauen, ob Du true/false zurückgeben kannst :wub:

Die Rückgabe von tbCloseOrder ist ein int, positiv bedeutet es hat geklappt, negativ bedeutet nicht, und dann ist der negative Rückgabewert der ErrorCode. Ich würd das auch gern so lassen, weil dann ist es konsistent mit den anderen Order Funktionen von der TradeBox.

 

Wegen OrdersTotal: ich weiß, diese "Fehler" fallen erst auf, wenn man live mehrere EAs laufen lässt, aber dann tun sie weh... :(

for (i=0; i<getOrdersTotal(MAGIC_NUMBER); i++)
{	  
  OrderSelect (i, SELECT_BY_POS);  
  bool exitErfolgreich = exits();   }

 

was ich ursprünglich gemeint hab:

Die Orders (von dem EA und andere) liegen in einer "zufälligen" Reihenfolge vor. Sagen wir die ersten 2 sind von dem EA, dann 2 andere, dann noch 2 von dem EA dann irgendwas. also (EA,EA,anders,anders,EA,EA,anders,...)

getOrdersTotal(MAGIC_NUMBER) returniert in dem Fall 4.

Die Schleife geht also die ersten 4 Orders durch und schaut ob sie geschlossen werden sollen. Die ersten zwei sind ok, dann kommen zwei fremde wo die exits() Funktion sagt "Nicht meine MagicNumber interessiert mich nicht" (und das is gut so ;) und dann denkt die Schleife sie is fertig, aber es sind noch 2 Orders vom EA vorhanden die nicht bearbeitet wurden.

 

Vorschlag:

for (i=0; i < OrdersTotal(); i++)
{	  
  OrderSelect (i, SELECT_BY_POS);  
  if(OrderMagicNumber() == MAGIC_NUMBER && OrderSymbol() == Symbol())
 {  
if(exits())
  i--; //nach dem schließen werden die Orders nachgerückt
 }  
}

Geschrieben
... dann denkt die Schleife sie is fertig, aber es sind noch 2 Orders vom EA vorhanden die nicht bearbeitet wurden.

 

M.E. stimmt das nicht ganz. Die Schleife geht doch alle 6 Orders durch, und inkrementiert daraufhin einen Zähler,

wenn die MN überienstimmt. Folglich bekomme ich 4 als Zahl zurück, oder?

 

Dann selektiere ich die erste Order => ist auch Ok,

dann wird in der Schleife erneut getOrdersTotal() aufgerufen und ich erhalte 3 zurück, nun selektiere

ich wieder die erste Order usw. Damit erspare ich mir das nachrücken der Orders, da ich getOrdersTotal()

mehrmals aufrufe.

 

Aber klar, in Deinem Beispiel, wird nicht immer die Order des aktuellen EAs selektiert, da gebe ich Dir recht.

Ich würde deswegen das ganze einfacher Codieren, da es eine wichtige Funktion im EA ist und folgende vielleicht

etwas besser zu verstehen sein wird.

 

Ich frage bei jedem Durchlauf, ob noch Orders zu der MN da sind und dann selektiere ich sie schon vor.

So spare ich mir das aufrücken der Order und den Zähler über die Orders, der das ganze nicht einfacher gestaltet

 

while (hasOrders(MAGIC_NUMBER))
{   
  bool exitErfolgreich = exits();   
}

 

bool hasOrders (int magicNumber)
{   
  for (int i=0; i< OrdersTotal(); i++)
  {
  // hier wird die Order für die weitere Verarbeitung bereits vorselektiert
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  
  if (OrderMagicNumber() == magicNumber)
	 return (true);
  }

  return (false);
}

 

Klar, die Funktionen sind voneinander abhängig, aber ich denke zum Verständnis ist das so besser.

Was meinst Du Mythos?

 

Was haltet ihr davon wenn wir 2 Varianten machen?

 

Hm ... gerne später oder wenn Du Lust hast, mach es einfach. Bringt für mich jetzt erstmal keinen Mehrwert.

Alles zusammen zu haben ist anfangs eher von Vorteil.

 

"Make it run, make it right, make ist fast" ... heißt es doch ... :wub:

Geschrieben

Von mir an dieser Stelle mal ganz großes Lob und vielen Dank an DarthTrader und alle anderen eifrig bastelnden User. Ich muss gestehen, dass mir vor lauter Quelltext schon etwas schwindelig geworden ist - liegt aber wohl eher daran, dass meine Systeme bisher ohne die ominöse TradeBox arbeiten und ich von daher erstmal verstehen muss, was wann wo wie passiert.

 

Eventuell ist es ja aber auch hilfreich, wenn ich ein paar Ideen aus der täglichen Praxis einbringe - eine wäre beispielsweise, dass man einen zeitlichen SL einführt. Sprich: wenn die ausgeführte Order (bspw. long bei Überschreiten des PP) weder ihren TP (bspw. R3) noch ihren SL (bspw. S1) erreicht, soll sie am nächsten Tag zum Handelsschluss geschlossen werden. Ist so etwas möglich (kenne den zeitlichen Verfall bisher nur bei Working Orders)?

 

Zu möglichen Trailing-Stopp-Ideen komme ich dann im weiteren Verlaufe des Projektes.

 

Hinweis dazu: auch bei mir geht es hier in erster Linie um den FDAX und nicht um den Forex-Markt, wobei natürlich das "Problem" der zeitlichen Basis für die Pivot-Berechnung hinfällig ist.

Geschrieben
M.E. stimmt das nicht ganz. Die Schleife geht doch alle 6 Orders durch, und inkrementiert daraufhin einen Zähler,

wenn die MN überienstimmt. Folglich bekomme ich 4 als Zahl zurück, oder?

 

Dann selektiere ich die erste Order => ist auch Ok,

dann wird in der Schleife erneut getOrdersTotal() aufgerufen und ich erhalte 3 zurück, nun selektiere

ich wieder die erste Order usw. Damit erspare ich mir das nachrücken der Orders, da ich getOrdersTotal()

mehrmals aufrufe.

aber du selektierst doch nicht die erste Order oder? du selektierst die i-te oder?

 

 

Ich frage bei jedem Durchlauf, ob noch Orders zu der MN da sind und dann selektiere ich sie schon vor.

So spare ich mir das aufrücken der Order und den Zähler über die Orders, der das ganze nicht einfacher gestaltet

 

while (hasOrders(MAGIC_NUMBER))
{   
  bool exitErfolgreich = exits();   
}

 

bool hasOrders (int magicNumber)
{   
  for (int i=0; i< OrdersTotal(); i++)
  {
  // hier wird die Order für die weitere Verarbeitung bereits vorselektiert
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  
  if (OrderMagicNumber() == magicNumber)
	 return (true);
  }

  return (false);
}

 

Es kann sein das ich was überseh oder nit ganz versteh, aber damit Selectierst du ja jedesmal die erste Order von deinem EA.

Das würde ja nur funktionieren wenn du diese dann auch wirklich schließt.

start() wird aber bei jedem Tick ausgeführt und du schließt ja nicht alle Orders gleichzeitig. Wenn es also eine Order gibt die nicht sofort wieder geschlossen wird, bleibst du hier in einer endlosschleife oder?

 

Zusätzlich gehst du damit die Orders ja immer wieder durch, wobei du eigentlich nur einmal durch die gesamte Liste gehen musst, und halt bei "deinen" Orders exit() aufrufst.

Geschrieben

An der Endlosschleife ist was dran ... :wub:

 

Verdammt.

 

Deine angesprochene Lösung gefällt mir in sofern nicht,

da sie die Programmstruktur etwas zerreißt. Der Code sollte m.E.

übersichtlich bleiben und nicht A calls B calls C und dann A calls C simulieren.

 

Aber klar, so ist es dann auch suboptimal. Habe ich überhaupt den Anwendungsfall, dass

ich mehrere Orders in einem Chart zu einem EA offen habe? Bei mir ist dass,

wie gesagt, bisher kaum bis gar nicht aufgetreten ...

 

Ok, neuer Versuch:

 

// Array mit den Tickets aller offenen Orders dieses EAs
int OpenedOrders [0];

// EXITS
for (i=0; i<ArraySize(OpenedOrders); i++)
{
  OrderSelect (OpenedOrders[i], SELECT_BY_TICKET);		   
  exits();   
}

// -----
// Speichert alle offenen Orders für eine MagicNumber mit dem zugehörigen
// OderTicket in einem globalen Array ab und gibt die gefundene Anzahl zurück.
// -----
int getOrdersTotal (int magicNumber)
{
  int ordersTotal = OrdersTotal();
  
  // Gefundene offene Orders auf 0 zurücksetzen
  ArrayResize (AllOpenOrders, 0);
  
  int ordersTotalForMN = 0;
  for (int i=0; i<ordersTotal; i++)
  {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  
  if ((OrderMagicNumber() == magicNumber) && (OrderSymbol() == Symbol())) 
  {
	 ordersTotalForMN++;
	 ArrayResize (AllOpenOrders, ArraySize(AllOpenOrders)+1);
	 AllOpenOrders [i] = OrderTicket();		
  }
  }

  return (ordersTotalForMN);
}

 

 

Das einzige, was die Orders wirklich unterscheidet ist doch das OrderTicket, also muss ich dieses speichern.

Hier mache ich dass in einem globalen Array, welches bei jedem Aufruf von getTotalOrder(..) neu berechnet

wird. So habe ich bei jedem Tick die anzahl der offenen Orders dieses EAs mit dieser MN und kann

darüber iterieren.

 

Ist das nun Ok? Ich bin schon etwas blind vor lauter Umstellung ... :-)

Geschrieben
Deine angesprochene Lösung gefällt mir in sofern nicht,

da sie die Programmstruktur etwas zerreißt. Der Code sollte m.E.

übersichtlich bleiben und nicht A calls B calls C und dann A calls C simulieren.

 

? Check i nit ;) Du iterierst jetzt schon über alle i von 0 bis X, ich hab eigentlich nur ein anderes X...

 

Aber klar, so ist es dann auch suboptimal. Habe ich überhaupt den Anwendungsfall, dass

ich mehrere Orders in einem Chart zu einem EA offen habe? Bei mir ist dass,

wie gesagt, bisher kaum bis gar nicht aufgetreten ...

Sobald du pyramidisierst, bzw. wenn man mehrere TP Level hat (so wie wir hier), aber nicht eine Order verkleinern will, sondern die TakeProfits gleich zu Beginn reinstellen.

Wenn man im EA immer nur eine Order offen hat, funktioniert dein 2. Vorschlag natürlich (abgesehen von der Endlosschleife)

 

Die Idee mit dem Array find ich gut. :wub: Aber wärs dann fürs "schöne Coden" nicht besser wenn du die Order nicht vorselektierst? Sondern einfach das Ticket der Order an exit() übergibst?

 

was anderes, weils sich irgendwie grad gut ergibt:

Wir könnten ein Template erstellen als Grundkonstrukt für solche "Standard EAs". Deines sieht ja schon sehr vielversprechend aus ;)

 

PS Die kleinen Unachtsamkeiten im Code lass ich unkommentiert, die merzt man eh beim ersten kompilieren aus ;)

an die unerfahrenen: der code ist nicht direkt verwendbar ;)

Geschrieben

Eine Sache ist mir noch eingefallen, die man beachten sollte. Ich versuche es mal anhand eines Beispiels zu erläutern und hoffe, dass ihr versteht, was ich meine.

 

Also: sagen wir mal, der EA soll beim Durchschreiten des Pivot Points 3 long Orders mit den Zielen R1, R2 und R3 eröffnen. Was passiert nun, wenn er wieder unter Pivot fällt und es wieder durchschreitet? Werden dann drei weitere Orders eröffnet? Das soll ja nicht, oder? Man müsste ihm also mitteilen, dass er diesen Tradeeinstieg für den aktuellen Tag bereits abgearbeitet hat.

 

Eventuell ist das bereits im Quelltext berücksichtigt - da habe ich aber noch leichten Nachholbedarf was das Verständnis angeht :wub:.

Geschrieben
Eine Sache ist mir noch eingefallen, die man beachten sollte. Ich versuche es mal anhand eines Beispiels zu erläutern und hoffe, dass ihr versteht, was ich meine.

 

Also: sagen wir mal, der EA soll beim Durchschreiten des Pivot Points 3 long Orders mit den Zielen R1, R2 und R3 eröffnen. Was passiert nun, wenn er wieder unter Pivot fällt und es wieder durchschreitet? Werden dann drei weitere Orders eröffnet? Das soll ja nicht, oder? Man müsste ihm also mitteilen, dass er diesen Tradeeinstieg für den aktuellen Tag bereits abgearbeitet hat.

 

Eventuell ist das bereits im Quelltext berücksichtigt - da habe ich aber noch leichten Nachholbedarf was das Verständnis angeht :wub:.

 

 

Danke für den Hinweis. Es ist noch nicht im Code berücksichtigt. Momentan wird eh nur immer eine Order

ausgeführt und noch nicht mehrere. Werde es bei Gelegenheit mal einbauen. Zurzeit liege ich aber krank

im Bett (also, nachdem ich das geschrieben hab, denn nur liegen geht auch nicht).

  • 4 Wochen später...
Geschrieben

Wollte mal Fragen, wer noch Lust / Interesse hat, am Ansatz des automatischen Handels der Pivot Points mitzuwirken. Ideen habe ich genug, nur an der technischen Umsetzung mangelt es (noch) :blink:.

 

Denke aber, dass man gemeinsam was erreichen kann - evtl. wird ja auch ein kleines Tutorial daraus, wie man Systeme bauen kann, die mehrere Orders abhandeln können. Bin dann auch gerne bereit den Quelltext zu kommentieren, damit der nächste Anfänger sich da reinwurschteln kann.

Geschrieben

Mit konkreten Ideen wäre ich auch weiterhin dabei. Nur haben sich alles Ideen

und Ansätze, die wir bisher hatten als nicht handelbar erwiesen. Zumindest

waren alle Tests für den A...

 

Meine Auffassung bei so etwas ist dann immer, dass ich zu anderen Themen

wechsle, die mehr Erfolg vermuten lassen, denn ich habe hier noch so viel

Material, dass es umzusetzen gilt.

 

Aber wie gesagt, wenn Du eine konkrete Vorgehensweise oder einen konkreten

Ansatz, mit wenig Freiheitsgraden, hast, dann her damit ... :blink:

Geschrieben
Das liegt aber jetzt nicht an mir, oder :blink:

 

Kiwee ist zwar das größte Projekt das läuft. Aber da mach ich mir selber wesentlich mehr Arbeit als du je könntest ;) Gutes Feedback hilft nur die Prioritäten richtig zu setzen.

 

Also nein, es liegt nicht an dir... (nicht nur an dir ;)

 

@dt: Hast du "genau" dieses System wo der source hier drin steht getestet? wenn ja wär es für die Mitleser sicher spannend wie die Tests genau ausgefallen sind, welche Parameter sich wie verhalten etc. Falls du Zeit und Lust hast die Tests rein zu stellen (bzw. die Ergebnisse)

Geschrieben
@dt: Hast du "genau" dieses System wo der source hier drin steht getestet? wenn ja wär es für die Mitleser sicher spannend wie die Tests genau ausgefallen sind, welche Parameter sich wie verhalten etc. Falls du Zeit und Lust hast die Tests rein zu stellen (bzw. die Ergebnisse)

 

Ich habe dieses und andere Systeme und Abweichungen getestet. Dieses System ist ja nicht vollständig beschrieben,

so dass man viel zu viele Freiheitsgerade hat, die es zu berücksichtigen gilt.

 

Leider habe ich momentan nicht die Zeit die Tests nochmal zu rekapitulieren, werde aber meinen Mist hier weiter

beitragen, wenn andere Ihre Tests gemacht haben, oder es konkretere Umsetzungsbeschreibungen gibt.

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.