
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es ist OK, ohne SL und TP zu arbeiten.
Aber wir brauchen immer noch die Bedingung, die Order im Falle eines Gewinns zu schließen.
Bitte schauen Sie sich die erneuerte Funktion "iSignalClose" an, https://www.mql5.com/en/forum/124521/page2.
Jetzt ist es natürlich die Bedingung des virtuellen SL.
Aber wir brauchen immer noch die Bedingung des virtuellen TP.
Wir warten auf Ihre Antwort.
:)
Hallo AisWow, das ist großartige Arbeit. Ich danke dir.
Tut mir leid, dass ich gehen musste. Es war Sonntag, und Familienzeit am See und dann Abendessen.
Ich habe das Programm erst vor ein paar Minuten geöffnet, um all die Arbeit zu sehen, die Sie geleistet haben.
Wie kann ich Ihnen nur danken? Ich werde wohl ein wenig Zeit brauchen, um das zu verarbeiten.
Der Gedanke, dass das TP nicht besprochen wurde, war, dass ich eine Aussage oder Funktion nach der anderen zusammenstelle.
eine Anweisung oder Funktion nach der anderen. Ich verstehe nur langsam, wie man ein Programm aufbaut.
Ihre Herangehensweise an dieses Thema verkürzt das Programm und ist professionell. Danke, dass Sie das mit uns teilen.
Die TP und SL werden etwas komplizierter sein. Wie ich schon sagte, lerne ich das langsam.
Ich bin mir nicht sicher, welche Funktion als nächstes gemacht werden soll. Wenn ich darf, werde ich Sie über das Gesamtbild informieren.
1. Mit diesem Programm wollte ich weitere Positionen hinzufügen. Zum Beispiel die Ausgangsposition.
Diejenige, die bereits im Programm enthalten ist, und dann die Positionen 2, 3, 4 und 5.
Hinweis: Ich habe keine Backtests mit mehr als 5 Positionen durchgeführt.
2. Bei neuen Positionen muss der SL mit jeder Position angepasst werden. Wenn der SL erreicht ist, werden alle Positionen
aufgelöst.
3. Jede weitere Position wird um 1/2 ATR von der vorherigen Position abweichen. Ein Kauf wird 1/2 ATR höher sein,
während ein Verkauf um 1/2 ATR niedriger ist.
4. Der SL wird um 1/2 ATR angepasst, und zwar im Gleichschritt mit jeder zusätzlichen Position.
Hinweis: Es kommt der Zeitpunkt, an dem Sie sich in einem anständigen Trend befinden und der Preis über die 1/2 ATR hinausgeht.
Und keine weiteren Positionen mehr wünschen. Es gibt einen Zeitpunkt innerhalb dieses Trends, an dem der Kurs auch einen Punkt erreicht, an dem das niedrigste Tief der letzten zehn Balken höher ist als der letzte SL. In diesem Fall wird der SL um das niedrigste Tief der letzten 10 Balken angepasst. Und wird entsprechend angepasst, nachdem ein Tief aus dem Chart verschoben wurde. Wie Sie sehen können, ist der SL kein Trailing-Stop. Er wird um ATR*2 und dann um das niedrigste Tief der letzten zehn Tage angepasst. (Die erwähnte Situation war eine Kaufbedingung. Eine Verkaufsbedingung ist genau das Gegenteil).
Dies ist das System, das ich von Hand rückgetestet habe.
Ich hatte nicht den Luxus, Backtests mit Codes oder mit einem TP durchzuführen. Vielleicht kann ich in naher Zukunft einen Blick auf die
Preismuster. Aber im Moment habe ich die Gewinne laufen lassen und viele kleine Verluste in Kauf genommen.
Man hat mir gesagt, ich solle nicht versuchen, zu kompliziert zu sein. Dass ich in kleinen Programmen lernen sollte
und auf ihnen aufbauen. Und genau das versuche ich jetzt zu tun. Ich nehme an, der nächste Schritt wäre, zu lernen
zu lernen, wie man an zusätzlichen Positionen dreht. Dann lernen, wie man den SL anpasst.
Das Geldmanagement könnte bis zum Schluss aufgeschoben werden. Aber es ist so wichtig. Wenn Sie denken, dass ich in die falsche Richtung gehe, bin ich dankbar für
jede Anregung.
Ich hoffe, dass die bereits geleistete Arbeit nicht durch zusätzliche Schritte behindert wird.
Ich wusste nur nicht, welcher Schritt zuerst getan werden sollte, oder was danach kommen sollte.
Vielen Dank für alles.
Ich bewundere Ihre Verbesserungen. Ich werde sicher wiederkommen, auch mit weiteren Fragen. Es gibt viel zu lernen mit dem, was Sie gegeben haben.
Prost
Hallo Huckleberry,
Der beste Dank:
"
Hallo Ais
Wow, das ist eine tolle Arbeit. Danke.
"
Wirklich und wahrhaftig.
Jetzt werde ich die Berechnungen verbessern.
Genau, ich möchte die ATR nur bei einem neuen Balken berechnen.
So kann ich schneller testen und optimieren.
Und, das wichtigste, meine Absicht war, dass Sie in der Lage sein werden, das Programm leicht zu ändern.
Auch wenn Sie das Programm erweitern und neue Funktionen hinzufügen wollen.
Die Struktur wurde vor allem gemacht, um die Komplexität zu reduzieren.
Ich werde die gleiche Struktur in naher Zukunft für große Programme verwenden.
Was die Handelsstrategie betrifft, so habe ich sie nur flüchtig studiert.
Ich bin mir sicher, dass eine Vielzahl von Strategien funktionieren kann und muss.
Ich würde Ihnen gerne helfen, die Struktur zum besseren Verständnis zu studieren.
Beste Grüße und bis bald
P.S. In Zukunft werde ich nur noch mit virtuellen Takes und Stops arbeiten.
////////////////////////////////////////////////////////////////////< 1> // < Program : Property > //< > // #define 1 " " //< > // #define 2 " " //< > // </Program : Property > //< > // //< > // < Program : Content > //< > // //< > // < Structure 16 elements in 4 domains > //< > // < 1. Data 7 elements in 2 domains /> //< > // < 2. Code 9 elements in 2 domains /> //< > // </Structure 16 elements in 4 domains > //< > // //< > // < 1. Data 7 = 4 i 3 d - s > //< > // < 1.1. Input 7 = 4 i 3 d - s /> //< > // < 1.2. Buffer - = - i - d - s /> //< > // </1. Data 7 = 4 i 3 d - s > //< > // //< > // < 2. Code 9 / - i 82 l 4 o > //< > // < 2.1. Interface 6 / - i 71 l 4 o /> //< > // < 2.2. Special 3 / - i 11 l - o /> //< > // </2. Code 9 / - i 82 l 4 o > //< > // //< > // </Program : Content > //< >
////////////////////////////////////////////////////////////////////< 2> // < 1.1. Data : Input > //< > // //< > // < 1.1. Input 7 = 4 i 3 d - s > //< > // < 1. Strategy 4 = 2 i 2 d - s /> //< > // < 2. Trading 3 = 2 i 1 d - s /> //< > // </1.1. Input 7 = 4 i 3 d - s > //< > // //< > // < 1. Strategy 4 >=========================================//< > int iBaseLag = 20 ; //< > int iBaseBar = 1 ; //< > double dFactorTP = 2.0 ; //< > double dFactorSL = 2.0 ; //< > // </ 1. Strategy 4 >=========================================//< > // //< > // < 2. Trading 3 >==========================================//< > int iSlippage = 1 ; //< > int iMagic = 1 ; //< > double dLots = 0.1 ; //< > // </ 2. Trading 3 >==========================================//< > // //< > // //< > // //< > // </1.1. Data : Input > //< >
////////////////////////////////////////////////////////////////////< 3> // < 1.2. Data : Buffer > //< > // //< > // < 1.2. Buffer - = - i - d - s > //< > // </1.2. Buffer - = - i - d - s > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </1.2. Data : Buffer > //< >
////////////////////////////////////////////////////////////////////< 4> // < 2.1. Code : Interface > //< > // //< > // < 2.1. Interface 6 / - i 71 l 4 o > //< > // < 1. iNewBar - i 4 l 1 o /> //< > // < 2. iSignalOpen - i 15 l 1 o /> //< > // < 3. iSignalClose - i 15 l 1 o /> //< > // < 4. iGetTicket - i 7 l 1 o /> //< > // < 5. iTryOpen - i 15 l - o /> //< > // < 6. iTryClose - i 15 l - o /> //< > // </2.1. Interface 6 / - i 71 l 4 o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.1. Code : Interface > //< >
////////////////////////////////////////////////////////////////////< 5> // < 2.1.1. Code : Interface : iNewBar > //< > int iNewBar () // - i 4 l 1 o //< > { //< > static int iTime_0 = 0 ; //< > // //< > if ( iTime_0 < iTime ( 0 , 0 , 0 ) ) //< > { iTime_0 = iTime ( 0 , 0 , 0 ) ; return ( TRUE ) ; } //< > else { return ( EMPTY ) ; } //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.1.1. Code : Interface : iNewBar > //< >
////////////////////////////////////////////////////////////////////< 6> // < 2.1.2. Code : Interface : iSignalOpen > //< > int iSignalOpen () // - i 15 l 1 o //< > { //< > static int iFirstRun = 1 ; //< > if ( ( iNewBar () == TRUE ) || ( iFirstRun == 1 ) ) //< > { iFirstRun = 0 ; //< > int iIndexH = iHighest ( 0 , 0 , MODE_HIGH , //< > iBaseLag , iBaseBar ) ; //< > int iIndexL = iLowest ( 0 , 0 , MODE_LOW , //< > iBaseLag , iBaseBar ) ; //< > static double dHigh ; dHigh = High [ iIndexH ] ; //< > static double dLow ; dLow = Low [ iIndexL ] ; //< > } // if //< > // //< > double dAsk = MarketInfo ( Symbol () , MODE_ASK ) ; //< > if ( dAsk > dHigh ) return ( OP_BUY ) ; //< > // //< > double dBid = MarketInfo ( Symbol () , MODE_BID ) ; //< > if ( dBid < dLow ) return ( OP_SELL ) ; //< > // //< > return ( EMPTY ) ; //< > } //< > // </2.1.2. Code : Interface : iSignalOpen > //< >
////////////////////////////////////////////////////////////////////< 7> // < 2.1.3. Code : Interface : iSignalClose > //< > int iSignalClose () // - i 15 l 1 o //< > { //< > static int iFirstRun = 1 ; //< > if ( ( iNewBar () == TRUE ) || ( iFirstRun == 1 ) ) //< > { iFirstRun = 0 ; //< > static double dATR , dProfit , dLoss ; //< > dATR = iATR ( 0 , 0 , iBaseLag , iBaseBar ) ; //< > } // if //< > // //< > double dDelta = OrderOpenPrice () - OrderClosePrice () ; //< > // //< > if ( OrderType () == OP_BUY ) //< > { dProfit = -dDelta ; dLoss = dDelta ; } //< > else if ( OrderType () == OP_SELL ) //< > { dProfit = dDelta ; dLoss = -dDelta ; } //< > else return ( EMPTY ) ; //< > // //< > if ( dProfit > dATR * dFactorTP ) return ( TRUE ) ; //< > if ( dLoss > dATR * dFactorSL ) return ( TRUE ) ; //< > return ( EMPTY ) ; //< > } //< > // </2.1.3. Code : Interface : iSignalClose > //< >
////////////////////////////////////////////////////////////////////< 8> // < 2.1.4. Code : Interface : iGetTicket > //< > int iGetTicket () // - i 7 l 1 o //< > { //< > for ( int i = OrdersTotal () - 1 ; i >= 0 ; i -- ) //< > { //< > if ( OrderSelect ( i , SELECT_BY_POS ) == TRUE ) //< > if ( OrderMagicNumber () == iMagic ) //< > return ( OrderTicket () ) ; //< > } // for //< > return ( EMPTY ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.1.4. Code : Interface : iGetTicket > //< >
////////////////////////////////////////////////////////////////////< 9> // < 2.1.5. Code : Interface : iTryOpen > //< > int iTryOpen () // - i 15 l - o //< > { //< > int iCommand = iSignalOpen () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( iCommand == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Blue ; } //< > else { sType = "Sell" ; iColor = Red ; } //< > // //< > if ( iCommand == OP_BUY ) int iMode = MODE_ASK ; //< > else iMode = MODE_BID ; //< > double dPrice = MarketInfo ( Symbol () , iMode ) ; //< > // //< > OrderSend ( Symbol () , iCommand , dLots , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , 0 , 0 , "" , iMagic , 0 , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) //< > Alert ( sType , " Was a Big Success" ) ; //< > else Alert ( sType , " open exception " , iTrap ) ; //< > } //< > // </2.1.5. Code : Interface : iTryOpen > //< >
////////////////////////////////////////////////////////////////////< 10> // < 2.1.6. Code : Interface : iTryClose > //< > int iTryClose () // - i 15 l - o //< > { //< > int iCommand = iSignalClose () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( OrderType () == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Red ; } //< > else { sType = "Sell" ; iColor = Blue ; } //< > // //< > if ( OrderProfit () > 0 ) string sAct = "Take" ; //< > else sAct = "Stop" ; //< > double dPrice = OrderClosePrice () ; //< > // //< > OrderClose ( OrderTicket () , OrderLots () , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) //< > Alert ( sType , " closed with Hard " , sAct ) ; //< > else Alert ( sType , " close exception " , iTrap ) ; //< > } //< > // </2.1.6. Code : Interface : iTryClose > //< >
////////////////////////////////////////////////////////////////////< 11> // < 2.2. Code : Special > //< > // //< > // < 2.2. Special 3 / - i 11 l - o > //< > // < 1. init - i 1 l - o /> //< > // < 2. deinit - i 1 l - o /> //< > // < 3. start - i 9 l - o /> //< > // </2.2. Special 3 / - i 11 l - o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.2. Code : Special > //< >
////////////////////////////////////////////////////////////////////< 12> // < 2.2.1. Code : Special : Init > //< > int init () // - i 1 l - o //< > { //< > Alert ( "" , "Start " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.1. Code : Special : Init > //< >
////////////////////////////////////////////////////////////////////< 13> // < 2.2.2. Code : Special : Deinit > //< > int deinit () // - i 1 l - o //< > { //< > Alert ( "" , "Stop " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.2. Code : Special : Deinit > //< >
////////////////////////////////////////////////////////////////////< 14> // < 2.2.3. Code : Special : Start > //< > int start () // - i 9 l - o //< > { //< > // < 2.2.3.1. History data inspection 4 >`````````````````````````//< > static int iTrigger = 0 ; if ( iTrigger == 0 ) { //< > if ( ( iTime ( 0 , 0 , 0 ) == 0 ) //< > || ( iBars ( 0 , 0 ) < iBaseLag + iBaseBar ) ) //< > return ; else iTrigger = 1 ; } //< > // </2.2.3.1. History data inspection 4 >`````````````````````````//< > // //< > // < 2.2.3.2. Main routine 3 >````````````````````````````````````//< > int iTicket = iGetTicket () ; //< > // //< > if ( iTicket < 0 ) iTryOpen () ; //< > else iTryClose () ; //< > // </2.2.3.2. Main routine 3 >````````````````````````````````````//< > // //< > // < 2.2.3.3. Exception handler 2 >```````````````````````````````//< > int iTrap = GetLastError () ; //< > if ( iTrap > 0 ) Alert ( "Exception " , iTrap ) ; //< > // </2.2.3.3. Exception handler 2 >```````````````````````````````//< > } //< > // </2.2.3. Code : Special : Start > //< > ////////////////////////////////////////////////////////////////////< 0>
Adjust MetaEditor window to see 25 lines x 80 columns. Use <Page Up> and <Page Down> to scroll the content. Last edit: 2010.03.16 18:44 State: Ready