Alle Inhalte von Kuby-D
-
Zuweisen und abfragen von Orderinformationen...
Aaaaaaaaaaaah Ich dachte ich hätte das Problem mit meiner einzelnen "if(OrderType() == OP_BUY)" abfrage gelöst, aber mit so einer true/false Zuweisung macht es natürlich erst richtig Sinn. Jetzt kann ich auch meinen Positionen verschiede Magicnumbers zuweisen und abfragen... Danke dir Vielmals!
-
Zuweisen und abfragen von Orderinformationen...
Hallo! Ich denke mal die nachfolgenden Probleme sind für halbwegs erfahrene Trader nicht schwer zu lösen, dennoch bringen sie mich seit Stunden zur Verzweiflung! Es geht genau genommen um das Abfragen wie viele Positionen und Order sich im Markt befinden bzw. schon geschlossen wurden und wie ich auf bestimmte Order zugreifen kann. Hier mal ein konkretes Beispiel: //---Longorder setzen-------------------------------------------------------- if( Ask < LastHigh && Ask > LastLow && BuyOrderTicket == 0 ) { double PendingPrice = LastHigh; PendingPrice = NormalizeDouble(PendingPrice, Digits); double BuyStopLoss = LastLow; BuyOrderTicket = OrderSend(Symbol(),OP_BUYSTOP,LotSize,PendingPrice,UseSlippage,BuyStopLoss,TakeProfit,"Buy Stop Order",MagicNumber,0,Green); } //---Longorder löschen------------------------------------------------------- OrderSelect(BuyOrderTicket,SELECT_BY_TICKET); if( Ask < LastLow && OrderType() == OP_BUYSTOP && OrderCloseTime() == 0 && BuyOrderTicket > 0 ) { bool Closed = OrderDelete(BuyOrderTicket,Red); BuyOrderTicket = 0; } //---Longtrade schließen----------------------------------------------------- OrderSelect(BuyOrderTicket,SELECT_BY_TICKET); if( Bid <= LastLowH4 && OrderType() == OP_BUY && OrderCloseTime() == 0 && BuyOrderTicket > 0 ) { double CloseLots = OrderLots(); double ClosePrice = Bid; Closed = OrderClose(BuyOrderTicket,CloseLots,ClosePrice,UseSlippage,Red); BuyOrderTicket = 0; } Man korrigiere mich wenn ich falsch liege, aber beim Setzen der Order überprüfe ich mit "BuyOrderTicket == 0" ob sich aktuell auch keine Order im Markt befindet. Denn mit "BuyOrderTicket = OrderSend(..." wird diesem integer ja erst ein Wert zugewiesen. Wenn später die Order wieder gelöscht wird (entweder bereits ausgeführt mit "OrderClose" oder noch nicht ausgeführt mit "OrderDelete" dann wird danach auch der integer "BuyOrderTicket" = 0 gesetzt. Soweit so gut... Das riesen Problem an der Sache ist, dass wenn der Kurs in den Stop läuft, löscht sich die Order ohne "BuyOrderTicket" = 0 zu setzen. So wird dann keine neue Order mehr gesetzt... Also: Wie kann ich Abfragen ob sich zurzeit eine offene Order (OrderType() == OP_BUYSTOP) oder eine ausgeführtePosition (OrderType() == OP_BUY) im Markt befindet? Wenn ich es richtig verstanden habe, greife ich mit der Zeile "OrderSelect(BuyOrderTicket,SELECT_BY_TICKET);" anschließend auf die Order mit dem Ticket "BuyOrderTicket " zu. Aber: Was ist wenn ich mehrer Positionen mit diesem Ticket im Markt habe, ich habe das Gefühl, dass nur auf meine etzte Position zugegriffen wird... Und: Stimmt es das ich mit "if(OrderType() == OP_BUY)" frage ob sich gerade eine laufende Kaufposition- und mit "if(OrderType() == OP_BUYSTOP)" eine offene Longorder im Markt befinden? Ich bin mit da nicht so sicher... ich habe mit diesen if-Abfragen echt noch nachholbedarf... Ich freue mich über jeden Tipp den ich bekommen kann!
-
Bollinger Bänder
Es Geht! Geile Sache. Die Bands heißen MODE_UPPER und MODE_LOWER, daran lag es... An den MagicNumbers versuche ich mich gleich mal. Danke dir vielmals!
-
Bollinger Bänder
Hallo! Ich bin neu in der Community und habe ebenfalls eine Frage zum Bollinger Band. Ich weiß, dass der Chat hier schon etwas alt ist, aber ich wollte nicht extra einen neuen aufmachen. Ich beschäftige mich erst seit Kurzem mit der MQL4 und würde gerne mein erstes Programm schreiben. Eigentlich nichts besonderes, es soll einfach nur einen Shorttrade gesetzt werden wenn der Kurs über dem oberen Bollinger Band ist (+ggf Longtrade schließen) und einen Longtrade wenn er sich unter dem unteren Bollinger Band (+ggf Shorttrade schließen) befindet. Das Ergebnis ist, dass so lange wie der Kurs zwischen den BB´s ist nichts passiert (so weit so gut), aber sobalt er auserhalb kommt öffent und schließt er abwechselnt Buy und Short Positionen im Sekundentakt. Hier mal der Code: extern double LotSize = 0.1; extern double StopLoss = 50; extern double TakeProfit = 100; extern int Slippage = 90; extern int MagicNumber = 123; int BuyTicket; int SellTicket; double UsePoint; int UseSlippage; int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(),Slippage); } int start() { double BBunten = iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0); double BBoben = iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_HIGH,0); // Kaufstrade erstellen if( BBunten >= Bid && BuyTicket == 0) { OrderSelect(SellTicket,SELECT_BY_TICKET); // Verkaufstrade schließen if(OrderCloseTime() == 0 && SellTicket > 0) { double CloseLots = OrderLots(); double ClosePrice = Ask; bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red); } double OpenPrice = Ask; // Stop und Limit errechnen if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint); if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); SellTicket = 0; } // Verkaufstrade erstellen if( BBoben <= Ask && SellTicket == 0) { OrderSelect(BuyTicket,SELECT_BY_TICKET); // Kaufstrade schließen if(OrderCloseTime() == 0 && BuyTicket > 0) { CloseLots = OrderLots(); ClosePrice = Bid; Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlippage,Red); } OpenPrice = Bid; // Stop und Limit errechnen if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint); if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } return(0); } double PipPoint(string Currency) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01; else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001; return(CalcPoint); } int GetSlippage(string Currency, int SlippagePips) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips; else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10; return(CalcSlippage); } Wenn die Variable BuyTicket bzw ShortTicket > 0 ist, weiß der MT ja, dass ein Trade offen ist und sollte ihn dann schließen... Nur bei der Zeile "if( BBoben <= Ask && SellTicket == 0)" bin ich mir ziemlich unsicher, da ich nicht genau weiß ob man das so schreiben kann... Würde mich über jeden Tipp freuen. Und seid nicht so streng mit mir, wie gesagt bin ja erst neu hier.