Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 741

 
fxsaber:
Sie haben ohne Perversionen gefragt. Und wenn Sie das getan haben, dann...
Das ist der Grund, warum es so ist.
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}
Oder

Ich weiß, dass der Beitrag schon alt ist, aber er hat mich gerade jetzt wie ein Splitter getroffen.

Dieses Bit hier ist nicht korrekt, die Kommission in Forex kann Null sein

// На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
 
Artyom Trishkin:
ObjectGetValueByShift() (nur MT4), ObjectGetValueByTime() (MT4, MT5)

Dankeschön
 
Alexey Volchanskiy:

Ich weiß, dass der Beitrag schon alt ist, aber er hat mich gerade jetzt wie ein Splitter getroffen.

Dieses Bit hier ist nicht korrekt, die Kommission in Forex kann Null sein


Inwiefern ist sie falsch?
 


Problem mit dem Kopierkonstruktor in MQL5

Das dynamische Array this.arr im Kopierkonstruktor wird vom Debugger als eindimensional angesehen.

Daher ist die Größe von ob2.arr in der Ausgabe gleich 0.

Warum?

Das gleiche Fragment funktioniert korrekt in MQL4.

MT5-Editor

MetaEditor 5.0 1578

MT4-Editor

MetaEditor 5.0 1562

class obj
  {
public:
   double            arr[][2];
                     obj(){}
                     obj(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
     }
   obj operator=(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
      return &this;
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
obj Copy(obj &o)
  {
   return o;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   obj ob1,ob2;
   ArrayResize(ob1.arr,3);
   ob2=Copy(ob1);
   bool stop=true;
  }


 
Klimenko_a_e:

Das Ergebnis ist, dass die Größe ob2.arr in der Ausgabe 0 ist.

Und warum?

obj* Copy(obj &o)
  {
   return & o;
  };

Andernfalls erstellen Sie ein neues Objekt.


   void operator=(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
      return; // &this;
     }

Sonst passieren unnötige Dinge.


Ich bezweifle, dass Ihr Code in MQL4 korrekt funktioniert.

 
Guten Tag, können Sie mir bitte sagen, wie ich einen einzelnen schwebenden Auftrag eröffnen kann?
Wie stoppe ich die Schleife, wenn ich einen schwebenden Auftrag öffnen muss, während die Bucht offen ist???

Ich kann einen ganzen Haufen davon öffnen, bis das Pfand aufgebraucht ist!

Ich weiß nicht, wie man einen schwebenden Auftrag eröffnet.

 
Akinak:
Guten Tag, können Sie mir bitte sagen, wie ich einen einzelnen schwebenden Auftrag eröffnen kann?
Wie stoppe ich die Schleife, wenn ich einen schwebenden Auftrag öffnen muss, während die Bucht offen ist???

Ich kann einen ganzen Haufen davon öffnen, bis das Pfand aufgebraucht ist!

Vielen Dank im Voraus!


Zuerst müssen Sie herausfinden, "wer er ist".

 
Vladislav Andruschenko:


Zuerst müssen Sie herausfinden, "wer er ist".


Vladislav Andruschenko:


Zuerst müssen Sie herausfinden, "wer er ist".


for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS))
if(AuftragSymbol()==Symbol())
if(OrderMagicNumber()==Magic)
if(b>0)
{
int tak=OrderSend(Symbol(),OP_SELLSTOP,Lots_work,SOPrase,Slip,0,0,",Magic,0,clrRed);
if(tak>0)
Print("SELLSTOP Ok");
sonst
Print("SELLSTOP Fehler");
}
if(s>0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,",Magic,0,clrBlue);
if(tik>0)
Print("BUYSTOP Ok");
sonst
Print("BUYSTOP Fehler");
}

}


 

Nun, der Zyklus läuft folgendermaßen ab:

Sie eröffnen eine Position - Sie eröffnen einen Auftrag, die Anzahl der Positionen wird erhöht, der Zyklus wiederholt sich - bis ins Unendliche.

int OrderSTotal=OrdersTotal();
for(int i=0; i<OrderSTotal;i++)
  {
   if(OrderSelect(i,SELECT_BY_POS))
      if(OrderSymbol()==Symbol())
         if(OrderMagicNumber()==Magic)

           {
            if(b>0)
              {
               int tak=OrderSend(Symbol(),OP_SELLSTOP,Lots_work,SOPrase,Slip,0,0,"",Magic,0,clrRed);
               if(tak>0)
                  Print("SELLSTOP  Ok");
               else
                  Print("SELLSTOP  Error");
              }

            if(s>0)
              {
                int tik=OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,"",Magic,0,clrBlue);
               if(tik>0)
                  Print("BUYSTOP  Ok");
               else
                  Print("BUYSTOP  Error");
              }
           }
  }
//+------------------------------------------------------------------+


Sie müssen wissen, was b und s sind

 
fxsaber:

Andernfalls erstellen Sie ein neues Objekt.


Sonst passieren unnötige Dinge.


Ich bezweifle, dass Ihr Code in MQL4 korrekt funktioniert.

In echtem Code - die Funktion gibt ein Objekt zurück.

Ich denke, der Kopierkonstruktor sollte in diesem Fall eine temporäre Kopie erstellen.

Der Code funktioniert korrekt in MQL5 Build 1545.

In der neuen Version kann der Kopierkonstruktor nicht einmal die Größe eines eindimensionalen Arrays ändern: Fehler 4007.

Dies ist meiner Meinung nach nicht korrekt.