Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1124

 
macleta:
Grazie,ndd è cosa?

Non ha seguito, non ha sostituito tutto. È una macro.

#define  ndd(A) NormalizeDouble(A, _Digits)
 
Alexey Viktorov:

Non ha tenuto il conto, non ha sostituito tutto. È una macro.

Grazie.
 
Potete dirmi per favore come conoscere l'ultima posizione aperta tramite il suo numero magico, forse c'è una funzione che restituisce il valore del lotto dell'ultima posizione aperta? Ne ho bisogno su mql5
 
astrologer Аполонов:
Per favore consigliate come trovare l'ultima posizione aperta per numero magico, forse c'è una funzione che restituisce il valore del lotto dell'ultima posizione aperta? Ne ho bisogno su mql5

Ci sono diversi modi, quindi chiarisci: il conto di trading è di tipo hedge o netting, nel qual caso hai bisogno di sapere della posizione: il consulente apre una posizione e ha bisogno di sapere i parametri della sua ultima posizione aperta?

 
astrologer Аполонов:
Potete dirmi per favore come conoscere l'ultima posizione aperta per numero magico, forse c'è una funzione che restituisce il valore del lotto dell'ultima posizione aperta? Ne ho bisogno su mql5

Esempio #1:

//+------------------------------------------------------------------+
//|                                             Trading engine 3.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.042
*/
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//---
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            if(deal_entry==DEAL_ENTRY_IN)
              {
               Print("Last DEAL IN volume: ",DoubleToString(deal_volume,2));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

In OnTradeTransaction catturiamo una transazione con il tipo

AGGIUNGI UNA TRANSAZIONE COMMERCIALE

Aggiungere la transazione alla cronologia. Questo viene fatto come risultato dell'esecuzione dell'ordine o delle transazioni di saldo del conto.

   if(type==TRADE_TRANSACTION_DEAL_ADD)


fare in modo che sia il nostro simbolo e la nostra magia:

      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)


Cerca un accordo di ACQUISTO o di VENDITA:

         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)


assicurarsi che questo commercio sia

DEAL_ENTRY_IN.

Ingresso nel mercato

            if(deal_entry==DEAL_ENTRY_IN)
File:
Test.mq5  10 kb
 
astrologer Аполонов:
Per favore consigliate come trovare l'ultima posizione aperta per numero magico, forse c'è una funzione che restituisce il valore del lotto dell'ultima posizione aperta? Ne ho bisogno su mql5

Opzione #2 - bypassare l'elenco degli articoli:

//+------------------------------------------------------------------+
//|                                             Trading engine 3.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.042
*/
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//---
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ulong    last_time   = 0;
   double   last_volume = 0.0;

   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            if(m_position.TimeMsc()>last_time)
              {
               last_time=m_position.TimeMsc();
               last_volume=m_position.Volume();
              }
           }
   if(last_volume>0.0)
      Print("Last POSITIONS volume: ",DoubleToString(last_volume,2));
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {

//---
  }
//+------------------------------------------------------------------+


Passare attraverso l'elenco delle posizioni

   for(int i=PositionsTotal()-1; i>=0; i--)


cerca il più lungo tempo di apertura della posizione in millisecondi

TimeMsc

Ottieneil tempo di apertura di una posizione in millisecondi dal 01.01.1970

            if(m_position.TimeMsc()>last_time)
              {
               last_time=m_position.TimeMsc();
               last_volume=m_position.Volume();
              }


controllare - se il volume è superiore a "0.0" - la posizione è stata trovata:

   if(last_volume>0.0)
      Print("Last POSITIONS volume: ",DoubleToString(last_volume,2));
File:
Test.mq5  6 kb
 
Alexey Viktorov:

Per la dimensione della perdita, ecco la funzione

Basta sostituire SL con TP

Apparentemente c'è un doppio rischio come percentuale dei fondi disponibili. Come posso impostare una quantità specifica di profitto in denaro, ad esempio 1,5?
double RiskLots(double risk, int TP)
{
  double RiskMony, Lot;
  double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
  double margin = SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_INITIAL);
  double FreeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
    long accountLeverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
    RiskMony = floor(FreeMargin*risk/100);
     Lot = NormalizeDouble(RiskMony*_Point/NormalizeDouble(TP*_Point*tickValue, _Digits), 2);
     //
  return(Lot);
}
 
Благодарю Vladimir Karputov:

Esempio #1:

In OnTradeTransaction catturiamo una transazione con il tipo

AGGIUNGI UNA TRANSAZIONE COMMERCIALE

Aggiungere la transazione alla cronologia. Questo viene fatto come risultato dell'esecuzione dell'ordine o delle transazioni di saldo del conto.


fare in modo che sia il nostro simbolo e la nostra magia:


guardare se si tratta di un'operazione di ACQUISTO o di VENDITA:


assicurarsi che questo commercio sia

DEAL_ENTRY_IN.

entrare nel mercato

 
macleta:
Apparentemente, questo è un doppio rischio come percentuale dei fondi disponibili. Come posso impostare una quantità specifica di profitto in denaro, ad esempio 1,5?

Bene, ecco la linea

    RiskMony = floor(FreeMargin*risk/100);
Basta mettere un numero invece di una formula e ...
 

Come convertire, posizione del mouse, durante, ma senza lanciare?

ChartTimeOnDropped