초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1124

 
macleta :
고마워, ndd 이게 뭐야?

따르지 않고 모든 것을 대체하지 않았습니다. 이것은 매크로입니다

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

따르지 않고 모든 것을 대체하지 않았습니다. 이것은 매크로입니다

고맙습니다.
 
매직 넘버로 마지막 오픈 포지션 을 찾는 방법을 알려주세요. 아마도 마지막 오픈 포지션에 대한 로트 값을 반환하는 함수가 있지 않을까요? mql5에 필요합니다.
 
astrologer Аполонов :
매직 넘버로 마지막 오픈 포지션 을 찾는 방법을 알려주세요. 아마도 마지막 오픈 포지션의 로트 값을 반환하는 함수가 있지 않을까요? mql5에 필요합니다

여러 가지 방법이 있으므로 다음을 지정하십시오. 거래 계정 유형 - 헤지 또는 상계, 이 경우 포지션에 대해 알아야 합니다. 고문은 포지션을 열고 마지막 미결제 포지션의 매개변수를 찾아야 합니까?

 
astrologer Аполонов :
매직 넘버로 마지막 오픈 포지션 을 찾는 방법을 알려주세요. 아마도 마지막 오픈 포지션의 로트 값을 반환하는 함수가 있지 않을까요? mql5에 필요합니다

예 #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에서 우리는 다음 유형의 트랜잭션을 포착합니다.

TRADE_TRANSACTION_DEAL_ADD

역사에 거래를 추가합니다. 주문 실행 또는 계정 잔액 작업의 결과로 수행됩니다.

   if (type== TRADE_TRANSACTION_DEAL_ADD )


우리는 이것이 우리의 상징이자 마법이 되기를 바랍니다.

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


우리 는 BUY 또는 SELL TRADE 를 찾습니다.

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


우리는이 거래를 찾습니다

DEAL_ENTRY_IN

시장 진입

             if (deal_entry== DEAL_ENTRY_IN )
파일:
Test.mq5  10 kb
 
astrologer Аполонов :
매직 넘버로 마지막 오픈 포지션 을 찾는 방법을 알려주세요. 아마도 마지막 오픈 포지션의 로트 값을 반환하는 함수가 있지 않을까요? mql5에 필요합니다.

옵션 #2 - 위치 목록을 반복합니다.

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

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


위치 목록 순회

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


밀리초 단위로 가장 긴 포지션 오픈 시간을 찾고 있습니다.

시간Msc

수신   1970년 1월 1일부터 위치를 여는 시간(밀리초)

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


확인 - 볼륨이 "0.0"보다 큰 경우 - 위치가 발견되었습니다.

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

손실 금액에 대한 함수는 다음과 같습니다.

SL을 TP로 교체하면 충분합니다.

분명히 여기에는 무료 자금의 비율로 두 배의 위험이 있습니다. 예를 들어 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 :

예 #1:

OnTradeTransaction에서 우리는 다음 유형의 트랜잭션을 포착합니다.

TRADE_TRANSACTION_DEAL_ADD

역사에 거래를 추가합니다. 주문 실행 또는 계정 잔액 작업의 결과로 수행됩니다.


우리는 이것이 우리의 상징이자 마법이 되기를 바랍니다.


우리 는 BUY 또는 SELL TRADE 를 찾습니다.


우리는이 거래를 찾습니다

DEAL_ENTRY_IN

시장 진입

 
macleta :
분명히 여기에는 무료 자금의 비율로 두 배의 위험이 있습니다. 예를 들어 1.5와 같이 돈으로 특정 금액의 이익을 설정하는 방법은 무엇입니까?

자, 여기 라인이 있습니다

    RiskMony = floor (FreeMargin*risk/ 100 );
수식 대신 숫자를 입력하고 ...
 

변환하는 방법, 마우스 위치, 동안, 그러나 떨어지지 않고?

 ChartTimeOnDropped
사유: