Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 658

 
Vladimir Karputov:
Controlliamo con un semplice consigliere...
Non c'è bisogno di controllare. La logica è la stessa di MQL4: Profitto, Commissione e Swap sono entità separate.
 
fxsaber:
Non c'è bisogno di controllare. La logica è la stessa di MQL4: Profitto, Commissione e Swap sono entità separate.
Per favore mostratemi il codice, il codice diretto in mql5 e preferibilmente senza alcuna perversione
 
Vladimir Karputov:
Ora controlliamo con un semplice EA...

Vladimir, il punto è che il quattro lo faccio:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Come si fa in cinque?

 
Vitaly Muzichenko:

Vladimir, il punto è che il quattro lo faccio:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Come si fa in cinque?

Aggiungere all'inizio.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
O riscrivere pesantemente il tutto.
 
Vitaly Muzichenko:
Per favore, mostratelo tramite codice, ecco un codice diretto in mql5 e preferibilmente senza perversioni.
Questo è quasi impossibile! Estratto da SB, codice diretto
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
  {
   return(PositionGetDouble(POSITION_PROFIT));
  }
 
fxsaber:
È quasi impossibile! Estratto da SB, codice diretto
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
Ho dimenticato di metterlo nella documentazione, ma questo"POSITION_COMMISSION" funziona?
 
new-rena:
Ho dimenticato di metterlo nella documentazione, ma questo"POSITION_COMMISSION" funziona?
L'avete chiesto senza perversioni. E se con loro, allora

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2016.07.19 12:40

La proprietà POSITION_COMMISSION nel tester (RoboForexEU-MetaTrader 5) restituisce sempre zero commissioni.

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }

Anche POSITION_COMMISSION (== 8) manca nell'aiuto e nel meta-editor (evidenziazione), ma è familiare al compilatore. La commissione di posizione non è difficile da determinare con un altro metodo (di lavoro). Proprietà POSITION_COMMISSION - un rudimento?


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

Forum sul trading, sistemi di trading automatico e test di strategia

Domande dai principianti

fxsaber, 2016.10.29 16:23

Non sto imponendo la libreria MT4Orders. Ma forse sarebbe più facile chiamare il buon vecchio OrderCommission?

Funziona ancora non solo su conti di copertura ma anche su conti netti.

 
Vladimir Karputov:
Controlliamo ora con un semplice Expert Advisor...

Qui:POSITION_PROFIT mostra il profitto della posizione

POSIZIONE_PROFITTO

. Non tiene conto di swap e simili.

 
Vitaly Muzichenko:

Vladimir, il punto è che il quattro lo faccio:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Come si fa in cinque?

La commissione è così imprevedibile che può essere determinata solo in uno scambio chiuso. Per una posizione aperta, puoi solo scoprire il profitto corrente (che non tiene conto né dell'impatto dello swap né dell'impatto delle commissioni) e lo swap. Ecco il codice:

Mettete un breakpoint sulla linea " m_trade.PositionClose(Symbol();" ed eseguite il test sulla storia. Quando il tester si ferma al punto di rottura, confronta le cifre nelle colonne Profit e Swap con le cifre non scritte nel log del tester.

File:
3.mq5  5 kb
 
Vladimir Karputov:

Qui:POSITION_PROFIT mostra il profitto della posizione

. Non tiene conto di swap e simili.

Ok. Ce l'abbiamo.

Lasoluzione di fxsaber è buona, l'ho applicata.

In pratica, ho trasferito il mio programma MQL4 a MQL5 quasi senza problemi.

I dettagli sono descritti sopra.

Grazie mille!