Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1124

 
macleta :
Teşekkürler, bu nedir?

Takip etmedi, her şeyi değiştirmedi. Bu bir makro

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

Takip etmedi, her şeyi değiştirmedi. Bu bir makro

Teşekkür ederim.
 
Lütfen bana sihirli sayı ile son açık pozisyonu nasıl bulacağımı söyleyin, belki de son açık pozisyon için lotun değerini döndüren bir fonksiyon vardır? mql5 için gereklidir
 
astrologer Аполонов :
Lütfen bana sihirli sayı ile son açık pozisyonu nasıl bulacağımı söyleyin, belki de son açık pozisyon için lotun değerini döndüren bir fonksiyon vardır? mql5 için gereklidir

Birkaç yol vardır, bu nedenle belirtin: ticaret hesabının türü - riskten korunma veya netleştirme, bu durumda pozisyon hakkında bilgi edinmeniz gerekir: danışman pozisyonları açar ve son açık pozisyonunun parametrelerini bulması gerekir mi?

 
astrologer Аполонов :
Lütfen bana sihirli sayı ile son açık pozisyonu nasıl bulacağımı söyleyin, belki de son açık pozisyon için lotun değerini döndüren bir fonksiyon vardır? mql5 için gereklidir

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

OnTradeTransaction'da şu tipte bir işlem yakalarız

TRADE_TRANSACTION_DEAL_ADD

Tarihe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.

   if (type== TRADE_TRANSACTION_DEAL_ADD )


bunun bizim sembolümüz ve sihrimiz olmasını istiyoruz:

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


AL veya SAT TİCARETİ olmasını istiyoruz :

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


bu anlaşmayı arıyoruz

DEAL_ENTRY_IN

Market girişi

             if (deal_entry== DEAL_ENTRY_IN )
Dosyalar:
Test.mq5  10 kb
 
astrologer Аполонов :
Lütfen bana sihirli sayı ile son açık pozisyonu nasıl bulacağımı söyleyin, belki de son açık pozisyon için lotun değerini döndüren bir fonksiyon vardır? mql5 için gereklidir

Seçenek #2 - pozisyon listesini yineleyin:

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

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


Pozisyonlar listesinde gezinme

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


milisaniye cinsinden en uzun pozisyon açma süresini aramak

ZamanMsc

alır   01/01/1970 tarihinden itibaren milisaniye cinsinden pozisyon açılış süresi

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


kontrol edin - ses seviyesi "0.0" dan büyükse - o zaman konum bulundu:

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

Kayıp miktarı için, işte bir fonksiyon

SL'yi içindeki TP ile değiştirmek yeterlidir.

Görünüşe göre, burada ücretsiz fon yüzdesi olarak çift risk var. Parada belirli bir miktar kar nasıl belirlenir, örneğin 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 :

Örnek 1:

OnTradeTransaction'da şu tipte bir işlem yakalarız

TRADE_TRANSACTION_DEAL_ADD

Tarihe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.


bunun bizim sembolümüz ve sihrimiz olmasını istiyoruz:


AL veya SAT TİCARETİ olmasını istiyoruz :


bu anlaşmayı arıyoruz

DEAL_ENTRY_IN

Market girişi

 
macleta :
Görünüşe göre, burada ücretsiz fon yüzdesi olarak çift risk var. Parada belirli bir miktar kâr nasıl belirlenir, örneğin 1.5?

Peki, işte sıra

    RiskMony = floor (FreeMargin*risk/ 100 );
Formül yerine bir sayı girin ve ...
 

Nasıl dönüştürülür, fare konumu, ancak düşürmeden?

 ChartTimeOnDropped