Und noch1x: GetPositionProperties

 

Hallo verehrte EA-Coder,

ich steck' mal wieder fest: ich öffne eine Position (die Bedigungen spielen hier keine Rolle), setze danach eine Variable glBuyPlaced oder glSellPlaced = true und
frage direkt danach auf diese Variable ab und will dann einen notstop usw setzen, was nicht funktioniert, weil GetPositionProperties keine Werte liefert.
Letzte Mal lernte ich, dass man das Symbol selecten muss, damit das funktioniert, das wurde mir hier schnell & gut erklärt und ich habe es entsprechend
eingebaut, aber es will nicht:

//+-----------------------------------------------------------------------------------+
//| condition when starting sell trade / wenn neuer Tick < alter Tick und diffSprung  |
//|   Index [0] ist der älteste Tick, Index [elements-1] der aktuellste               |
//+-----------------------------------------------------------------------------------+
   if((tick_array[elements-1].ask)<(tick_array[elements-10].ask) && diff<=downstep && glTradePlaced == false && glTradeClosed != true && (positionType != POSITION_TYPE_SELL || openPosition == false))
     {
      Print("Kurs gefallen >",DoubleToString(downstep,5)," Sell Position wird geöffnet");
      // Open sell market order
      request.action = TRADE_ACTION_DEAL;
      request.type = ORDER_TYPE_SELL;
      request.symbol = _Symbol;
      request.volume = TradeVolume;
      request.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      request.sl = 0;
      request.tp = 0;
      request.deviation = 10;
      bool sent = OrderSend(request,result);
      Print("Sell Position wurde geöffnet mit Order: ",result.order);
      Print("Sell Position wurde geöffnet mit Deal: ",result.deal);
      glTradePlaced = true;
      glSellPlaced = true;
     }
   if(glSellPlaced == true && initialsetst != true)
     {
       Print("Zeile 293: in glSellPlaced == true && initsetst != true");
      //int pos_total=PositionsTotal();
      //for(int p=0; p<pos_total; p++)
        //{
         //pos_symbol=PositionGetSymbol(p);
         //if(PositionSelect(pos_symbol))
         if(PositionSelect(_Symbol))
   {
            GetPositionProperties();
            // prüfen -> erst bei offener Position
            // ## 200123 eingefügt, weil notstopst sonst sofort zieht weil er 0 ist
            pos_ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
            pos_bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
            pos_spread=pos_ask - pos_bid;
            opriceplusspread = pos_oprice + pos_spread;
            Print(" ");
            Print("################################################");
            Print("ST: initialer notstop, initialsetst und winclose werden gesetzt:");
            notstopst = pos_oprice + sellslpips;        
            winclosest = pos_oprice - pos_spread - winpips;
            Print("init notstopst : ",DoubleToString(notstopst,5));
            Print("init winclosest:",DoubleToString(winclosest,5));
            Print("################################################");
            Print(" ");
            initialsetst = true;
           }
       // }
     }

Ihr seht, ich habe schon beides versucht, mit dem for-loop und, weil ich nur mit einer Position arbeite, mit dem einfachen Version if(PositionSelect(pos_symbol))..

Im Log sieht das leider so aus:

IL      0       17:38:20.693    Goldesel-fx_v8 (USDJPY,M1)      Kurs gefallen >-0.00001 Sell Position wird geöffnet
NP      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      Sell Position wurde geöffnet mit Order: 1033968686
DI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      Sell Position wurde geöffnet mit Deal: 0
RI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      Zeile 293: in glSellPlaced == true && initsetst != true
KF      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)       
KN      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      ########################################
DI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      ####### wir sind im sell trade ########
NP      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      pos_oprice: 0.00000
PI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      pos_spread: 0.01000
QI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      pos_orice + spread (st): 0.01000
DN      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      pos_cprice: 0.00000
MH      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      notstopst: 0.00000
JN      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      winclosest: 0.00000
FJ      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      adjustst: false
QR      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      adjustedst: false
CI      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      notstopstadjusted: 0.00000
CL      0       17:38:21.736    Goldesel-fx_v8 (USDJPY,M1)      ########################################

Der Print mit "Zeile 293" zeigt, dass der Code zum if(PositionSelect(pos_symbol)) kommt, aber die Funktion keine Werte liefert. Später, nach einigen Ticks, kommt was an.
Leider kann ich den Debugger nicht nutzen, das Ding steht nur beim "Warte auf Update" im Tester..

Wie immer vielen Dank & Grüße,

Christian

 

Ich kenne keine Funktion: GetPositionProperties()?

Such Dir mal diese Liste an und such Dir das richtige aus:  https://www.mql5.com/de/docs/trading

Hier sind die Eigenschaften einer Position und wie man sie abfragt: https://www.mql5.com/de/docs/constants/tradingconstants/positionproperties
Dokumentation zu MQL5: Handelsfunktionen
Dokumentation zu MQL5: Handelsfunktionen
  • www.mql5.com
Bevor Sie beginnen die Trade-Funktionen der Plattform zu nutzen, müssen Sie ein klares Verständnis der standardmäßigen Begriffe Order, Deal und Position besitzen. Eine Order ist die Anweisung an den Broker ein Finanzinstrument zu kaufen oder zu verkaufen. Es gibt zwei Haupt-Ordertypen: Markt und Pending. Zusätzlich gibt es Take Profit und Stop...
 

oh sorry, die ist selbst definiert in der global scope:

void GetPositionProperties()
  {
   pos_symbol     =PositionGetString(POSITION_SYMBOL);
   pos_comment    =PositionGetString(POSITION_COMMENT);
   pos_magic      =PositionGetInteger(POSITION_MAGIC);
   pos_oprice     =PositionGetDouble(POSITION_PRICE_OPEN);
   pos_cprice     =PositionGetDouble(POSITION_PRICE_CURRENT);
//pos_sl         =PositionGetDouble(POSITION_SL);
//pos_tp         =PositionGetDouble(POSITION_TP);
   pos_type       =(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   pos_volume     =PositionGetDouble(POSITION_VOLUME);
   pos_commission =PositionGetDouble(POSITION_COMMISSION);
   pos_swap       =PositionGetDouble(POSITION_SWAP);
   pos_profit     =PositionGetDouble(POSITION_PROFIT);
   pos_time       =(datetime)PositionGetInteger(POSITION_TIME);
   pos_id         =PositionGetInteger(POSITION_IDENTIFIER);
   pos_diffoc     =pos_oprice-pos_cprice;
   pos_ask        =SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   pos_bid        =SymbolInfoDouble(Symbol(),SYMBOL_BID);
   pos_spread     =pos_ask - pos_bid;
   opriceplusspread =pos_oprice + pos_spread;
   opriceminusspread =pos_oprice - pos_spread;
  }

.. und sollte es doch so eigentlich tun.

VG
 

Versuch mal PositionSelectByTicket(ticket) statt PositionSelect(_Symbol)?

Was ist das für eine Konto Hedging oder Netting?

 
Carl Schreiber:

Versuch mal PositionSelectByTicket(ticket) statt PositionSelect(_Symbol)?

Was ist das für eine Konto Hedging oder Netting?

Ok, das ist ein Versuch wert. Das ist ein Hedging, <gelöscht> default, eigentlich will ich ein netting, aber die meinen, die können das nicht umstellen.

 

Bei einem hedge konto musst du jedenfalls die position selektieren.

anderenfalls bekommst du keine werte raus


wenn du unbedingt ein netting willst, such dir einen vernünftigen broker

Jedenfalls kannst du mi der programmierung eines hedge kontos jedes netting auch bedienen
 
amando:

Bei einem hedge konto musst du jedenfalls die position selektieren.

anderenfalls bekommst du keine werte raus


wenn du unbedingt ein netting willst, such dir einen vernünftigen broker

Jedenfalls kannst du mi der programmierung eines hedge kontos jedes netting auch bedienen.

Ich selektiere ja oben die Position und bekomme dennoch nichts raus.

"Vernünftiger Broker".. sind das nicht alles Dark Rooms?

 
lindomatic:

Ich selektiere ja oben die Position und bekomme dennoch nichts raus.

"Vernünftiger Broker".. sind das nicht alles Dark Rooms?

 Ein, du selektierst die position nicht, so wie du das machst zumindest nicht

siehe hier

https://www.mql5.com/de/docs/trading/positionselectbyticket


Vernünftig wenn er nicht mal zwischen netting und hedge umschalten kann?

Dokumentation zu MQL5: Handelsfunktionen / PositionSelectByTicket
Dokumentation zu MQL5: Handelsfunktionen / PositionSelectByTicket
  • www.mql5.com
Wählt eine offene Position nach dem angegebenen Ticket für die weitere Arbeit aus. Gibt true bei einem erfolgreichen Beenden der Funktion zurück. Gibt false zurück, wenn das Beenden der Funktion fehlgeschlagen ist. Rufen Sie die Funktion GetLastError() auf, um Details zum Fehler zu bekommen. Die Funktion PositionSelectByTicket() kopiert Daten...
 
amando:

 Ein, du selektierst die position nicht, so wie du das machst zumindest nicht

siehe hier

https://www.mql5.com/de/docs/trading/positionselectbyticket


Vernünftig wenn er nicht mal zwischen netting und hedge umschalten kann?

danke für die Hilfen, schau' ich mir an.. mir fallen die Augen zu, die Tage weiter..

Get rich or die tryin'

 
lindomatic:

Hallo verehrte EA-Coder,

ich steck' mal wieder fest: ich öffne eine Position (die Bedigungen spielen hier keine Rolle), setze danach eine Variable glBuyPlaced oder glSellPlaced = true und
frage direkt danach auf diese Variable ab und will dann einen notstop usw setzen, was nicht funktioniert, weil GetPositionProperties keine Werte liefert.
Letzte Mal lernte ich, dass man das Symbol selecten muss, damit das funktioniert, das wurde mir hier schnell & gut erklärt und ich habe es entsprechend
eingebaut, aber es will nicht:

Ihr seht, ich habe schon beides versucht, mit dem for-loop und, weil ich nur mit einer Position arbeite, mit dem einfachen Version if(PositionSelect(pos_symbol))..

Im Log sieht das leider so aus:

Der Print mit "Zeile 293" zeigt, dass der Code zum if(PositionSelect(pos_symbol)) kommt, aber die Funktion keine Werte liefert. Später, nach einigen Ticks, kommt was an.
Leider kann ich den Debugger nicht nutzen, das Ding steht nur beim "Warte auf Update" im Tester..

Wie immer vielen Dank & Grüße,

Christian

Hallo Christian,

der Programmteil nach

if(PositionSelect(_Symbol))

wird nicht ausgeführt, also gibt PositionSelect ein "false" zurück.

Jetzt mußt du schauen warum das so ist. Für mich sieht es so aus, das PositionSelect  keine Position zu dem Symbol findet.

Also bitte schaue im Journal nach, ob auch wirklich schon eine Position geöffnet ist.

https://www.mql5.com/de/docs/trading/positionselect

Gruß

Thorsten

Dokumentation zu MQL5: Handelsfunktionen / PositionSelect
Dokumentation zu MQL5: Handelsfunktionen / PositionSelect
  • www.mql5.com
Wähl eine offene Position für die weitere Arbeit damit. Gibt true zurück, wenn die Durchführung der Funktion erfolgreich beendet wird.  Gibt false zurück wenn die Durchführung der Funktion erfolglos beendet wird. Für die Erhaltung der fehlerbezogenen Information, rufen Sie die Funktion GetLastError() auf. Bei einer unabhängigen Verrechnung von...
 
Thorsten Fischer:

Hallo Christian,

der Programmteil nach

wird nicht ausgeführt, also gibt PositionSelect ein "false" zurück.

Jetzt mußt du schauen warum das so ist. Für mich sieht es so aus, das PositionSelect  keine Position zu dem Symbol findet.

Also bitte schaue im Journal nach, ob auch wirklich schon eine Position geöffnet ist.

https://www.mql5.com/de/docs/trading/positionselect

Gruß

Thorsten

Hallo Thorsten =)

der Code kommt ja nur bis PositionSelect, wenn glSellPlaced == true gesetzt ist und das wird wiederum direkt nach dem Öffnen einer Position gesetzt;
vorausgesetzt, dass das, was oben mit der request.action geschieht, eine Position erzeugt? Es ist ja zunächst nur ein request und noch keine Position, richtig?
Order und Deal-Nummern sind direkt da, aber damit habe ich ja noch keine Position?
Allerdings wird direkt eine geschlossen, immer mit dem Spread als Verlust; sie wird direkt geschlossen, weil durch die 0-Werte der Positionen meine Entscheidungsbedingungen natürlich Quatsch sind und sofort mein Notstop und/oder Winclose zieht.
Aber doch, dann ja, es wird direkt eine Position geöffnet (und geschlossen), wie in der KontoHistory zu sehen ist.

Vielen Dank Dir auch und Grüße,
Christian

Grund der Beschwerde: