MT-Pro Add on - Programmierung Stopp nach Ausbruch

    • MT-Pro Add on - Programmierung Stopp nach Ausbruch

      Moin,

      erstmal ein frohes Neues :)

      Ich hoffe dass mir hier jemand helfen kann.

      Ich möchte über das MT Pro Addon folgende, automatische SL-Versetzung im Bewegungshandel realisieren:

      Initialer Stopp auf dem alten P3, beim durchbrechen des alten P2, Stoppversetzung als "outsidebar mover", also Bar by Bar unter Berücksichtigung von Innenstäben.

      Hat jemand ne Idee wie man das anstellt? Ich bekomme es nicht hin ?(

      DANKE und beste Grüße
      Chris
    • Die Idee ist gut, aber leider kannst du das nur händisch umsetzen. Konkret wirst du einen Alarm für den Durchbruch des alten P2 setzen müssen und dann, wenn dieser Alarm ausgelöst wurde, musst du die Stopplogik verändern -> von Trend auf Bewegungshandel umschalten.

      Wenn du, statt den Alarm zu setzen, lieber selber zuschaust und auf den Durchbruch wartest, erreichst du das gleiche. Aber es kostet halt die Energie des permanenten Watchings mit all ihren Nachteilen!! Spätestens hier stellt sich die Frage nach der Zeiteinheit auf der du das Ganze realisieren möchtest.

      Also gib bitte mal etwas konkreter an, was du genau vor hast. Ich kenne zwar das MT Pro Addon nicht im Detail, aber womöglich kann ich unterscheiden zwischen dem, was im AT grundsätzlich geht und dem, was irgendein Addon kann.
    • Hi Matthias,

      vielen Dank für deine Antwort.

      Ich möchte nur die Bewegung handeln, einsteigen möchte ich per Stop bzw. Limit-Order aus der Korrektur (unscharf).
      Da es (nach meiner persönlichen Meinung) besser ist, den Stop auf dem letzen P3 zu lassen statt ihn direkt Bar by Bar (unter Berücksichtigung von Innenstäben) nachzuziehen, möchte ich erst nach dem Durchbruch den letzen P2 die Stop-Logik automatisch ändern.

      Ich hab mal eine kleine Zeichnung gemacht, die Bewegung in blau möchte ich handeln.
      Bilder
      • Stopp.jpg

        32,05 kB, 1.027×708, 7 mal angesehen
    • OK, die Frage nach der Zeiteinheit läßt du unbeantwortet, aber sei es mal drum. Es spielt letztlich für die Mechanik, die du erreichen möchtest, keine Rolle. Gleichwohl macht ein Bewegungshandel nach Innenstäben nicht automatisch auf jeder Zeiteinheit Sinn (vgl. Der Händler Band 3 - Hofners Erläuterungen im Fachteil).

      Wie schon gesagt, wirst du das nicht ohne eigenes Eingreifen - nämlich wenn der P2 durchbrochen wird - hinbekommen. Du kannst deinen Initial-Stop auf den P3 legen und dort wird er bleiben, weil du diesem Stopp nicht beibringen kannst, dass er auf den Durchbruch des P2 reagieren soll. Wie oben erwähnt könntest du dir einen Alarm auf den P2 legen und wenn dieser ausgelöst wird, müsstest du auf die neue Stopp-Logik umschalten -> Du selbst und von Hand!

      Ein anderer Weg, als Kompromiss, wäre die Nutzung des Soft-Stop auf Bar-by-Bar Logik (oder halt Innenstäbe - sofern das Addon das auch wirklich sauber kann). Dieser würde also auf Periodentief-/-hoch nachgezogen und würde aber erst bei einem Bruch per Schlusskurs dafür sorgen, dass nunmehr auch der Hard-Stopp herangezogen wird. Das führt zu einem ähnlichen Resultat, wie der Bewegungshandel nach Innenstäben - jedoch nicht extakt zum gleichen Resultat. Weitere ähnliche Resultate sind über die Nutzung von etwas trägeren Indikatoren wie Parabolic Sar oder SuperTrend zu erreichen. Man kann den AT ohne weiteres dazu bringen, den Stopp an solchen Indikatoren nachzuführen.

      Wenn man sich lang genug damit beschäftigt hat, wird irgendwann klar, dass man es Anfangs lieber etwas unschärfer haben möchte, um eben nicht vorzeitig rauszufliegen - aber später dann, in der nähe des Zieles, umso schärfer agieren möchte, damit die sauer verdienten Buchgewinne auch wirklich Realität werden. Insofern finde ich ja deine Idee grundsätzlich in Ordnung.

      Der von dir gewünschte Automatismus ist aber leider mit keinem Addon möglich. Das liegt am AT selbst. Es ist so, das eine einmal festgelegte Stopp-Logik von einem Programm (AT++) verwaltet wird und dieses Programm kennt nur diese eine Logik. Ein Umschalten auf eine andere Logik ist nur durch Beendigung des Programms und Neustart mit anderer Logik möglich - also eben nicht ohne Zutun des Händlers selbst.

      Es sei denn, man programmiert sich selbst eine komplette Strategie, welche den Veränderungen der Bedingungen Rechnung trägt. Dann geht natürlich alles. :)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Matthias ()

    • Ich hab das mal im Netz gefunden.
      Vielleicht hilfts.

      Quellcode

      1. [Description("markttechnischer Bewegungsstopp mit Beruecksichtigung von Innenstaeben")]
      2. [IsEntryAttribute(false)]
      3. [IsStopAttribute(true)]
      4. [IsTargetAttribute(false)]
      5. [OverrulePreviousStopPrice(false)]
      6. public class BewegungsstopMT : UserScriptedCondition
      7. {
      8. // Parameter defaults
      9. private InsideBarsMTToleranceUnit _toleranceUnit = InsideBarsMTToleranceUnit.Ticks;
      10. private int _toleranceValue = 0;
      11. // intern variables
      12. private double stopPrice = 0.0;
      13. private bool _isFirst = true;
      14. protected override void Initialize()
      15. {
      16. IsEntry = false;
      17. IsStop = true;
      18. IsTarget = false;
      19. Add(new Plot(Color.FromKnownColor(KnownColor.Black), "Occurred"));
      20. Add(new Plot(Color.FromArgb(255, 247, 149, 217), "Stop"));
      21. Overlay = true;
      22. CalculateOnBarClose = true;
      23. _isFirst = true;
      24. }
      25. protected override void OnBarUpdate()
      26. {
      27. CalculateStops();
      28. }
      29. private void CalculateStops()
      30. {
      31. if (CurrentBar < Close.Count - 3)
      32. return;
      33. if ( TradeDirection == PositionType.Long)
      34. {
      35. // aktueller Bar ist Innenstab --> Stop zurueckversetzen (tiefer)
      36. if (InsideBarsMT( Close,_toleranceUnit, _toleranceValue).IsInsideBar[0] == 1)
      37. stopPrice = CalculateLowBeforeOutsideBar();
      38. // aktueller Bar schliesst ueber Aussenstabhoch --> Stop auf Tief
      39. else if (Close[0] > InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarHigh[0])
      40. stopPrice = Low[0];
      41. // aktueller Bar schliesst unter Aussenstabtief --> Position Market schliessen
      42. else if (Close[0] < InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarLow[0])
      43. stopPrice = Low[0];
      44. if (_isFirst == true && (stopPrice == 0 || stopPrice > TradePrice))
      45. stopPrice = TradePrice - ATR(20)[0] * 1;
      46. else if ( stopPrice == 0)
      47. stopPrice = TradePrice - ATR(20)[0] * 1;
      48. }
      49. else if ( TradeDirection == PositionType.Short)
      50. {
      51. // aktueller Bar ist Innenstab --> Stop zurueckversetzen (hoeher)
      52. if (InsideBarsMT(Close, _toleranceUnit, _toleranceValue).IsInsideBar[0] == 1)
      53. stopPrice = CalculateHighBeforeOutsideBar();
      54. // aktueller Bar schliesst unter Aussenstabtief --> Stop auf Hoch
      55. else if (Close[0] < InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarLow[0])
      56. stopPrice = High[0];
      57. // aktueller Bar schliesst ueber Aussenstabhoch --> Position Market schliessen
      58. else if (Close[0] > InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarHigh[0])
      59. stopPrice = High[0];
      60. if (_isFirst == true && (stopPrice == 0 || stopPrice < TradePrice))
      61. stopPrice = TradePrice + ATR(20)[0] * 1;
      62. else if (stopPrice == 0)
      63. stopPrice = TradePrice - ATR(20)[0] * 1;
      64. }
      65. _isFirst = false;
      66. Stop.Set(stopPrice);
      67. }
      68. private double CalculateLowBeforeOutsideBar()
      69. {
      70. double retLow = 0;
      71. DataSeries outsidebarLows = InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarLow;
      72. double prevLow = outsidebarLows[0];
      73. for (int i = 0; i < outsidebarLows.Count(); i++ )
      74. {
      75. if (Low[i] < prevLow)
      76. {
      77. retLow = Low[i];
      78. break;
      79. }
      80. }
      81. return retLow;
      82. }
      83. private double CalculateHighBeforeOutsideBar()
      84. {
      85. double retHigh = 0;
      86. DataSeries outsidebarHighs = InsideBarsMT(_toleranceUnit, _toleranceValue).OutsideBarHigh;
      87. double prevHigh = outsidebarHighs[0];
      88. for (int i = 0; i < outsidebarHighs.Count(); i++)
      89. {
      90. if (High[i] < prevHigh)
      91. {
      92. retHigh = High[i];
      93. break;
      94. }
      95. }
      96. return retHigh;
      97. }
      98. public override void Recalculate()
      99. {
      100. _isFirst = true;
      101. CalculateStops();
      102. }
      Alles anzeigen

      edit: ich habe das mal als Code formatiert, wegen der Lesbarkeit

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Matthias () aus folgendem Grund: Formatierung

    • @Matthias
      Das mir der ZE habe ich überlesen, sorry. Macht aber im Grunde auch keinen Unterschied von der technischen Seite her.
      Schade, aber dann scheint es wohl wirklich nicht zu funktionieren, bleibt wohl nur das manuelle Eingreifen.

      Dennoch vielen Dank :)


      @dietsch
      Danke für den Code, das sieht mir auf den ersten Blick aber nach dem normalen "outsidebar mover" aus dem MT Pro Paket aus. Ich werde es aber bei Gelegenheit testen.
    • Ja das ist nur eine Condition für den markttechnischen Bewegungsstop. Die nützt für sich allein so gar nichts, weil sie ja Bestandteil des Addons ist. Dadurch, dass hier Quellcode vorliegt, hätte man aber theoretisch ein ausbaufähiges Gerüst um diese Condition etwas intelligenter zu machen und anzupassen. Ist allerdings fraglich, ob @Casey666 damit etwas anfangen kann. Ich könnte das nicht.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Matthias ()