POSITION_PROFIT bestimmen

 

Hallo, 

gibt es eine Möglichkeit den Profit einer undefinierte Anzahl an Positionen die unter einer Magic_Number laufen zu bestimmen. 

Derzeit Öffne ich die besagten Positionen aber der Profit wird komplett falsch ausgegeben. 

z.b. 

MAGIC_NUMBER = 100


Position_1 = 1€

Position_1 = 1€

Position_1 = 1€

Position_1 = 1€


Profit gesamt  = 2€


Für die Profitberechnung nehme ich folgenden Code: 

  if(
         (
            PositionMagic == 100
         )
         ||
         (
            Comment_ == IntegerToString(100)
         )
      )
        {
         HistorySelect(POSITION_TIME,TimeCurrent());
         for(int k=0; k<HistoryDealsTotal(); k++)
           {
            ulong deal_ticket=HistoryDealGetTicket(k);
            if(HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID) == Positions_ID)
              {
               deal_commission=HistoryDealGetDouble(deal_ticket, DEAL_COMMISSION)*2;
               break;
              }
           }
         PositionProfit100 = PositionProfit + PositionSwap + deal_commission;
         PositionPrice100 = PositionPrice;
         PositionOpen100 = true;
         PositionTime100 = iTime(_Symbol,PERIOD_CURRENT,0);
        }


wenn jemand eine Zielführende Lösung anbietet Zahle ich auch dafür =)


Grüße 

 
Du musst dir mal klar werden was du auslesen willst. In der history wirst du keine position finden. Und du selektiertst falsch
 
hey, danke für die Antwort. 

Ich möchte den Profit auslesen. 

Wenn ich z.b. Verschiedene Positionen mit definierten Magic_Numbers öffne funktioniert das addieren der Profite super. 

Aber jetzt habe ich eine Magic_Number mit vielen Positionen und da wird der Profit nicht richtig ausgegeben. 

Aber wie soll man die laufenden Positionen addieren?
 
 Och,als, schau dir mal an was positionen deals und orders sind. Du selektierst deals in der history, da wirst du nicht finden was du suchst. Und eine position hat zwar swap aber niemals commission, die hat ein deal. Dafür hat der deal keinen swap, der steht dann wieder in der Order history
 

okay, danke. 

Es geht speziell um folgendes bsp.:



1.


magic == 100

1 Position geöffnet.

Profit wird richtig berechnet.

Funktioniert.



2.


magic == 100

3 Position geöffnet.

Profit wird nicht richtig berechnet.

Funktioniert nicht. 




gibt es eine andere Möglichkeit die Offnen Positionen für eine Magic_Number zu berechnen?

 

Mit dem code den du hier zeigst berechnest du überhaupt keinen profit aus position.

ich weis nicht wo der code her ist, aber der ist definitiv falsch

Lies mal hier

https://www.mql5.com/en/articles/211


und hier


https://www.mql5.com/en/docs/constants/tradingconstants/positionproperties


und hier


https://www.mql5.com/en/forum/204807

Orders, Positions and Deals in MetaTrader 5
Orders, Positions and Deals in MetaTrader 5
  • www.mql5.com
Creating a robust trading robot cannot be done without an understanding of the mechanisms of the MetaTrader 5 trading system. The client terminal receives the information about the positions, orders, and deals from the trading server. To handle this data properly using the MQL5, it's necessary to have a good understanding of the interaction between the MQL5-program and the client terminal.
 

Immer das gleiche anstatt den Leuten mal mit fertigen Code weiter zu  helfen, wird man hin und her geschickt und auch noch kritisiert, hier Janis, probier mal folgenden Code, der rechnet dir den Profit aus fuer alle offenen Trades welche die gleiche Magicnummer haben:


   int BuytradesOpen=0;
   int SelltradesOpen=0;
   double ProfitSellTrades=0;
   double ProfitBuyTrades=0;
   double OpenProfitGesamt=0;
   //---
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
       ulong OrderTicket=PositionGetTicket(i); 
       //---
       string OrderSymbol=PositionGetString(POSITION_SYMBOL);
       if(OrderSymbol != Symbol())continue;
       //---
       ENUM_POSITION_TYPE OrderType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
       double OrderOpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);
       double OrderClosePrice=PositionGetDouble(POSITION_PRICE_CURRENT);
       datetime OrderOpenTime=(datetime)PositionGetInteger(POSITION_TIME);
       double OrderLots=PositionGetDouble(POSITION_VOLUME);
       int    DIGITS=(int)SymbolInfoInteger(OrderSymbol,SYMBOL_DIGITS);
       double POINT=(double)SymbolInfoDouble(OrderSymbol,SYMBOL_POINT); 
       double OrderStopLoss=PositionGetDouble(POSITION_SL);
       double OrderTakeProfit=PositionGetDouble(POSITION_TP);
       double OrderProfit=PositionGetDouble(POSITION_PROFIT);
       double OrderSwap=PositionGetDouble(POSITION_SWAP);
       int Nr=int(PositionGetInteger(POSITION_MAGIC));
       //---

       if(OrderOpenTime>0 && OrderTicket>0 && Magicnummer==Nr)
         {
           if(OrderType==POSITION_TYPE_BUY)
           {
             BuytradesOpen++;
             ProfitBuyTrades+=OrderProfit;
             ProfitBuyTrades+=OrderSwap;
           }
           if(OrderType==POSITION_TYPE_SELL)
           {
             SelltradesOpen++;
             ProfitSellTrades+=OrderProfit;
             ProfitSellTrades+=OrderSwap;
           }
           OpenProfitGesamt+=OrderProfit;
           OpenProfitGesamt+=OrderSwap;
         }
   }

Print("Offene Profit zu Magicnummer= ",OpenProfitGesamt);

Und jeder der aehnliche Sachen sucht findet den Code hier vielleicht wieder mit Googlesuche.

Staendig spielen die Leute den Lehrer und sagen einen alles moegliche was man wo suchen soll statt mal einfach weiter zu helfen mit bisjen Code, so nach dem Motto das waere ja zu einfach, nur weil die Leute zu faul sind richtig weiter zu helfen aber Hauptsache die haben etwas gesagt.

 
Email Account #:

Immer das gleiche anstatt den Leuten mal mit fertigen Code weiter zu  helfen, wird man hin und her geschickt und auch noch kritisiert, hier Janis, probier mal folgenden Code, der rechnet dir den Profit aus fuer alle offenen Trades welche die gleiche Magicnummer haben:


Und jeder der aehnliche Sachen sucht findet den Code hier vielleicht wieder mit Googlesuche.

Staendig spielen die Leute den Lehrer und sagen einen alles moegliche was man wo suchen soll statt mal einfach weiter zu helfen mit bisjen Code, so nach dem Motto das waere ja zu einfach, nur weil die Leute zu faul sind richtig weiter zu helfen aber Hauptsache die haben etwas gesagt.

Immer das gleiche von den Neueinsteigern, sie nutzen nicht die vorgefertigten Codestücke auf der Plattform.

Beschweren sich, dass ihnen nicht geholfen wird, weil sie selber ein Stück weit die Suche nicht nutzen wollen.

Jeder erwartet, dass für ihn persönlich immer der passende Code "bereitgestellt" wird.