Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 741

 
fxsaber:
Avete chiesto senza perversioni. E se l'hai fatto, allora...
Ecco perché è così.
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);
}
Oppure

Mi rendo conto che il post è vecchio, ma mi ha colpito solo ora con una scheggia.

Questo pezzo qui non è corretto, la commissione nel forex può essere zero

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

Grazie
 
Alexey Volchanskiy:

Mi rendo conto che il post è vecchio, ma mi ha colpito solo ora con una scheggia.

Questo pezzo qui non è corretto, la commissione nel forex può essere zero


In che modo non è corretto?
 


Problema con il costruttore di copie in MQL5

L'array dinamico this.arr, nel costruttore della copia, è visto dal debugger come unidimensionale.

Come risultato, la dimensione di ob2.arr è uguale a 0 nell'output.

Perché?

Lo stesso frammento funziona correttamente in MQL4.

Editor MT5

MetaEditor 5.0 1578

Editor MT4

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:

Il risultato è che la dimensione ob2.arr è 0 nell'output.

Perché?

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

Altrimenti state creando un nuovo oggetto.


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

Altrimenti succedono cose inutili.


Dubito che il vostro codice abbia funzionato correttamente in MQL4.

 
Buon giorno, potete dirmi come aprire un singolo ordine in sospeso?
Come faccio a fermare il ciclo se devo aprire un ordine in sospeso quando la baia è aperta?

Posso aprirne un mucchio finché il deposito non si esaurisce!

Non so come aprire un ordine in sospeso.

 
Akinak:
Buon giorno, potete dirmi come aprire un singolo ordine in sospeso?
Come faccio a fermare il ciclo se ho bisogno di aprire un ordine pendente quando la baia è aperta?

Posso aprirne un mucchio finché il deposito non si esaurisce!

Grazie in anticipo!


Prima devi scoprire "chi è".

 
Vladislav Andruschenko:


Prima devi scoprire "chi è".


Vladislav Andruschenko:


Prima devi scoprire "chi è".


for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS))
se(OrderSymbol()==Symbol())
se(OrderMagicNumber()==Magico)
se(b>0)
{
int tak=OrderSend(Symbol(),OP_SELLSTOP,Lots_work,SOPrase,Slip,0,0,",Magic,0,clrRed);
se(tak>0)
Stampa("SELLSTOP Ok");
else
Stampa("Errore SELLSTOP");
}
se(s>0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,",Magic,0,clrBlue);
se(tik>0)
Stampa("BUYSTOP Ok");
else
Stampa("Errore BUYSTOP");
}

}


 

Bene, quello che si fa nel ciclo è questo:

si apre una posizione - si apre un ordine, si aggiunge il numero di posizioni, il ciclo si ripete - all'infinito.

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");
              }
           }
  }
//+------------------------------------------------------------------+


Devi sapere cosa sono b e s

 
fxsaber:

Altrimenti state creando un nuovo oggetto.


Altrimenti succedono cose inutili.


Dubito che il tuo codice abbia funzionato correttamente in MQL4.

Nel codice reale - la funzione restituisce un oggetto.

Penso che il costruttore di copie dovrebbe creare una copia temporanea in questo caso.

Il codice funziona correttamente in MQL5 build 1545.

Nella nuova build, il costruttore di copie non può ridimensionare nemmeno un array unidimensionale: errore 4007.

Questo non è corretto secondo me.