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

 

여러 Expert Advisors는 서로 다른 창에서 하나의 기기에서 작업해야 합니다.

PositionTotal()이 자신의 위치만 계산하도록 하는 방법이 있습니까? 그런 다음 한 고문 이 포지션을 열 자마자 다른 고문도 이미 포지션에 있다고 믿습니다.

MagicNumber를 다르게 넣어도 도움이 되지 않습니다.

 
dimnik :

여러 Expert Advisors는 서로 다른 창에서 하나의 기기에서 작업해야 합니다.

PositionTotal()이 자신의 위치만 계산하도록 하는 방법이 있습니까? 그런 다음 한 고문 이 포지션을 열 자마자 다른 고문도 이미 포지션에 있다고 믿습니다.

MagicNumber를 다르게 넣어도 도움이 되지 않습니다.

기적은 일어나지 않습니다. 마법사가 다르기 때문에 고문의 위치가 구별되어야합니다. 코드가 있을까요?
 
Vitalie Postolache :
기적은 일어나지 않습니다. 마법사가 다르기 때문에 고문의 위치가 구별되어야합니다. 코드가 있을까요?

첫 번째(공동 실험을 위한 테스트):

#include <Trade\Trade.mqh>

CTrade  trade;

int OnInit ()
  {
   trade.SetAsyncMode( true );
   trade.SetExpertMagicNumber(111);
   return ( INIT_SUCCEEDED );
  }

void OnTick ()
  {

   if ( PositionsTotal ()== 0 )
   {
      trade.Buy( 1 );
   }
  
  }

두 번째(동일, 다른 마술사 사용):

#include <Trade\Trade.mqh>

CTrade  trade;

int OnInit ()
  {
   trade.SetAsyncMode( true );
   trade.SetExpertMagicNumber( 222 );
   return ( INIT_SUCCEEDED );
  }

void OnTick ()
  {

   if ( PositionsTotal ()== 0 )
   {
      trade.Buy( 1 );
   }
  
  }

게다가 내가 수동으로 포지션을 청산하자마자 어드바이저는 즉시 이것을 보고 동시에 새로운 포지션을 엽니다. 두 번째가 활성화되지 않은 상태에서 하나가 열리면 두 번째는 더 이상 열리지 않습니다.

 
dimnik :

여러 Expert Advisors는 서로 다른 창에서 하나의 기기에서 작업해야 합니다.

PositionTotal()이 자신의 위치만 계산하도록 하는 방법이 있습니까? 그런 다음 한 고문 이 포지션을 열 자마자 다른 고문도 이미 포지션에 있다고 믿습니다.

MagicNumber를 다르게 넣어도 도움이 되지 않습니다.

모든 포지션을 거치고 자신의 포지션만 닫는 어드바이저의 예 - 오직 심볼과 매직에 의해서만:

//+------------------------------------------------------------------+
//|                                                     CloseALL.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade         m_trade;                       // trading object
CPositionInfo  m_position;                   // trade position object
//--- input parameter
input ulong     m_magic= 159753698 ;             // magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   CloseAll();
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Close All                                                        |
//+------------------------------------------------------------------+
void CloseAll()
  {
   Print ( __FUNCTION__ );
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of open positions
       if (m_position.SelectByIndex(i))
         if (m_position. Symbol ()== Symbol () && m_position.Magic()==m_magic)
            m_trade.PositionClose(m_position.Ticket());
  }
//+------------------------------------------------------------------+


추가: 헤지 거래 계정에서 일하고 있기를 바랍니다???

 
dimnik :

게다가 내가 수동으로 포지션을 청산하자마자 어드바이저는 즉시 새로운 포지션을 엽니다.

그리고 물론, PositionTotal 은 마법이나 다른 것으로 위치를 구별하지 않고 계정에 총계를 제공합니다. 0에서 PositionsTotal() -1까지 위치를 반복하고 마술을 보고 계산해야 합니다.

아, 제가 글을 쓰는 동안, 그들은 그것이 어떻게 되어야 하는지 이미 정확히 보여주었습니다(:
 
dimnik :

여러 Expert Advisors는 서로 다른 창에서 하나의 기기에서 작업해야 합니다.

PositionTotal()이 자신의 위치만 계산하도록 하는 방법이 있습니까? 그런 다음 한 고문 이 포지션을 열 자마자 다른 고문도 이미 포지션에 있다고 믿습니다.

MagicNumber를 다르게 넣어도 도움이 되지 않습니다.

PositionsTotal()은 어떤 식으로든 마법으로 필터링하지 않습니다. 이렇게 하려면 위치를 정렬할 때 "우리의" 위치만 우리의 기능으로 간주해야 합니다.
 


Добавлено: я надеюсь Вы работает на торговом счетё hedge???

아니, 헤지가 아닙니다. 따라서 PositionTotal()은 자신의 위치만 고려할 수 없습니까?

이 경우 CTrade 클래스 가 다른 클래스와 별도로 자신의 위치를 고려할 수 있습니까?

 
dimnik :

아니, 헤지가 아닙니다. 따라서 PositionTotal()은 자신의 위치만 고려할 수 없습니까?

이 경우 CTrade 클래스 가 다른 클래스와 별도로 자신의 위치를 고려할 수 있습니까?

각 기호에 대한 네팅에는 하나 이상의 위치가 있을 수 없습니다. 동시에 다음 규칙이 Magic에 적용됩니다 .

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

매직넘버

블라디미르 카르푸토프 , 2016.12.25 12:38

그물에 누가 마지막이고 슬리퍼 인지 - 즉, 포지션의 마법은 이 악기의 마지막 거래와 동일할 것입니다..

우리는 다음을 확인합니다:

//+------------------------------------------------------------------+
//|                                             ReplacementMagic.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
#property description "Что происходит с magic на netting"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                       // trading object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if ( AccountInfoInteger ( ACCOUNT_MARGIN_MODE )== ACCOUNT_MARGIN_MODE_RETAIL_HEDGING )
     {
       Print ( "Этот пример только для netting!" );
       return ( INIT_FAILED );
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   static int counter=- 10 ;
   if (counter% 300 == 0 )
     {
       //--- генерируем Magic
       ulong m_magic= MathRand ();
       Print ( "new Magic: " , IntegerToString (m_magic));
       //--- устанавливаем новый Magic
      m_trade.SetExpertMagicNumber(m_magic);
       //--- определим лот
       double lots= 0.0 ;
       if ( MathRand ()% 2 == 0 )
         lots= 0.01 ;
       else
         lots= 0.02 ;

       //--- определяем, что открывать: Buy или Sell
       if ( MathRand ()% 2 == 0 ) // значит Buy
        {
         m_trade.Buy(lots);
        }
       else // значит Sell
        {
         m_trade.Sell(lots);
        }
     }
   counter++;
  }
//+------------------------------------------------------------------+
//| 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 )
     {
       for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of open positions
         if (m_position.SelectByIndex(i))
             if (m_position. Symbol ()== Symbol ())
              {
               //string text=ChartGetString(0,CHART_COMMENT)+"\n"+
               //            "Magic: "+IntegerToString(m_position.Magic());
               //Comment(text);
               Print ( "Обнаружена позиция с Magic: " + IntegerToString (m_position.Magic()));
              }
     }
  }
//+------------------------------------------------------------------+



파일:
 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 
마지막 하나 또는 여러 트랜잭션의 결과를 찾는 방법을 알려주십시오.
사유: