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

 
macleta:
Danke,ndd ist was?

Ich bin nicht nachgekommen und habe nicht alles ersetzt. Es ist ein Makro.

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

Ich habe nicht den Überblick behalten und nicht alles ersetzt. Es ist ein Makro.

Danke. (lacht)
 
Können Sie mir bitte sagen, wie ich die letzte offene Position anhand ihrer magischen Zahl ermitteln kann? Vielleicht gibt es eine Funktion, die den Lot-Wert der letzten offenen Position zurückgibt? Ich brauche es auf mql5
 
astrologer Аполонов:
Bitte teilen Sie mir mit, wie ich die letzte offene Position anhand der magischen Zahl herausfinden kann. Vielleicht gibt es eine Funktion, die den Lot-Wert der letzten offenen Position zurückgibt? Ich brauche es auf mql5

Es gibt mehrere Möglichkeiten, also klären Sie bitte: Handelt es sich bei dem Handelskonto um ein Hedge- oder ein Netting-Konto? In diesem Fall müssen Sie über die Position Bescheid wissen: Eröffnet der Berater eine Position und muss er die Parameter seiner letzten offenen Position kennen?

 
astrologer Аполонов:
Können Sie mir bitte sagen, wie ich die letzte offene Position anhand der magischen Zahl ermitteln kann? Gibt es vielleicht eine Funktion, die den Lot-Wert der letzten offenen Position zurückgibt? Ich brauche es auf mql5

Beispiel #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 fangen wir eine Transaktion mit dem Typ

HANDEL_TRANSAKTION_GESCHAEFT_HINZUFUEGEN

Fügen Sie die Transaktion der Historie hinzu. Dies geschieht als Folge der Ausführung von Aufträgen oder von Kontobewegungen.

   if(type==TRADE_TRANSACTION_DEAL_ADD)


sicherstellen, dass es unser Symbol und unser Zauber ist:

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


Suchen Sie nach einem BUY- oder SELL-Geschäft:

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


stellen Sie sicher, dass dieser Handel

DEAL_ENTRY_IN.

Markteintritt

            if(deal_entry==DEAL_ENTRY_IN)
Dateien:
Test.mq5  10 kb
 
astrologer Аполонов:
Bitte teilen Sie uns mit, wie man die zuletzt eröffnete Position anhand der magischen Zahl herausfinden kann. Gibt es vielleicht eine Funktion, die den Lot-Wert der zuletzt eröffneten Position zurückgibt? Ich brauche es auf mql5

Option #2 - Umgehung der Artikelliste:

//+------------------------------------------------------------------+
//|                                             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)
  {

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


Gehen Sie die Liste der Positionen durch

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


Suche nach der längsten offenen Zeit einer Position in Millisekunden

ZeitMsc

Ermittelt den Zeitpunkt derEröffnung einer Position in Millisekunden seit dem 01.01.1970

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


prüfen - wenn die Lautstärke größer als "0.0" ist, wurde die Position gefunden:

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

Für die Verlustgröße gibt es folgende Funktion

Ersetzen Sie einfach SL durch TP

Offensichtlich besteht ein doppeltes Risiko im Verhältnis zu den verfügbaren Mitteln. Wie lege ich einen bestimmten Gewinnbetrag in Geld fest, z.B. 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:

Beispiel #1:

In OnTradeTransaction fangen wir eine Transaktion mit dem Typ

HANDEL_TRANSAKTION_GESCHAEFT_HINZUFUEGEN

Fügen Sie die Transaktion der Historie hinzu. Dies geschieht als Folge der Ausführung von Aufträgen oder von Kontobewegungen.


sicherstellen, dass es unser Symbol und unser Zauber ist:


prüfen, ob es sich um einen KAUF oder VERKAUF handelt:


stellen Sie sicher, dass dieser Handel

DEAL_ENTRY_IN.

Markteintritt

 
macleta:
Offenbar handelt es sich dabei um das doppelte Risiko in Prozent der verfügbaren Mittel. Wie lege ich einen bestimmten Gewinnbetrag in Geld fest, z.B. 1,5?

Nun, hier ist der Text

    RiskMony = floor(FreeMargin*risk/100);
Setzen Sie einfach eine Zahl anstelle einer Formel ein und ...
 

Wie konvertiert man, Mausposition, während, aber ohne zu werfen?

ChartTimeOnDropped