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

 

Birkaç Uzman Danışman, farklı pencerelerde tek bir cihaz üzerinde çalışmalıdır.

PositionsTotal() öğesinin yalnızca kendi konumlarını saymasını sağlamanın bir yolu var mı? Ve sonra bir danışman bir pozisyon açar açmaz, diğerleri de zaten pozisyonda olduklarına inanırlar.

MagicNumber farklı koymak, yardımcı olmuyor.

 
dimnik :

Birkaç Uzman Danışman, farklı pencerelerde tek bir cihaz üzerinde çalışmalıdır.

PositionsTotal() öğesinin yalnızca kendi konumlarını saymasını sağlamanın bir yolu var mı? Ve sonra bir danışman bir pozisyon açar açmaz, diğerleri de zaten pozisyonda olduklarına inanırlar.

MagicNumber farklı koymak, yardımcı olmuyor.

Mucizeler gerçekleşmez. Sihirbazlar farklı olduğundan, danışmanın pozisyonları ayırt edilmelidir. Bir kod olacak mı?
 
Vitalie Postolache :
Mucizeler gerçekleşmez. Sihirbazlar farklı olduğundan, danışmanın pozisyonları ayırt edilmelidir. Bir kod olacak mı?

İlki (test, sadece ortak bir deney için):

#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 );
   }
  
  }

İkincisi (aynı, farklı bir sihirbazla):

#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 );
   }
  
  }

Üstelik pozisyonu manuel olarak kapatır kapatmaz danışmanlar bunu anında görüyor ve aynı anda yeni pozisyonlar açıyor. İkincisi aktif değilken biri açılırsa, ikincisi artık açık değildir.

 
dimnik :

Birkaç Uzman Danışman, farklı pencerelerde tek bir cihaz üzerinde çalışmalıdır.

PositionsTotal() öğesinin yalnızca kendi konumlarını saymasını sağlamanın bir yolu var mı? Ve sonra bir danışman bir pozisyon açar açmaz, diğerleri de zaten pozisyonda olduklarına inanırlar.

MagicNumber farklı koymak, yardımcı olmuyor.

Tüm pozisyonlardan geçen ve sadece KENDİ pozisyonlarını kapatan bir danışman örneği - sadece sembolü ve Sihri ile:

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


Eklendi: Umarım hedge ticaret hesabı üzerinde çalışıyorsunuzdur???

 
dimnik :

Üstelik pozisyonu manuel olarak kapatır kapatmaz danışmanlar hemen yeni bir pozisyon açıyor.

Ve elbette, PositionsTotal pozisyonları sihir veya başka bir şeyle ayırt etmez, hesaptaki toplam sayılarını verir. 0'dan PositionsTotal() -1'e kadar olan pozisyonlar arasında dolaşmak, büyüyü izlemek ve saymak gerekir.

Ah, ben yazarken zaten tam olarak nasıl olması gerektiğini göstermişler (:
 
dimnik :

Birkaç Uzman Danışman, farklı pencerelerde tek bir cihaz üzerinde çalışmalıdır.

PositionsTotal() öğesinin yalnızca kendi konumlarını saymasını sağlamanın bir yolu var mı? Ve sonra bir danışman bir pozisyon açar açmaz, diğerleri de zaten pozisyonda olduklarına inanırlar.

MagicNumber farklı koymak, yardımcı olmuyor.

PositionsTotal() hiçbir şekilde büyülere göre filtreleme yapmaz. Bunu yapmak için, pozisyonları sıralarken sadece "bizim" olanları fonksiyonumuz olarak düşünmek gerekir.
 


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

Hayır, Hedge değil. Yani PositionTotal() sadece kendi pozisyonlarını hesaba katamayacak mı?

CTrade sınıfı bu durumda pozisyonlarını diğerlerinden ayrı olarak dikkate alabilecek mi?

 
dimnik :

Hayır, Hedge değil. Yani PositionTotal() sadece kendi pozisyonlarını hesaba katamayacak mı?

CTrade sınıfı bu durumda pozisyonlarını diğerlerinden ayrı olarak dikkate alabilecek mi?

Her sembol için ağda BİRDEN FAZLA pozisyon olamaz. Aynı zamanda Magic için şu kural geçerlidir :

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

sihirli sayı

Vladimir Karputov , 2016.12.25 12:38

Netleştirmede, sonuncusu kim ve spor ayakkabılar - yani, pozisyonun büyüsü bu enstrüman için son anlaşma ile aynı olacak..

Kontrol ediyoruz:

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



Dosyalar:
 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 
Son bir veya birkaç işlemin sonucunu nasıl öğreneceğimi söyle?
Neden: