Sipariş numaralandırma döngüsünün organizasyonu - sayfa 12

 
Artyom Trishkin :

Kızartma tavası ne için?

- Örneğin, bir yumurtayı kızartmak için.

- Yani konuşma omlet hakkında değil, bir tava hakkında ...


ooh - harika - iki saldırgan boğuştu ... yandı - yoksa böyle sıkıcı ...

 
Artyom Trishkin :

Kızartma tavası ne için?

- Örneğin, bir yumurtayı kızartmak için.

- Yani konuşma omlet hakkında değil, bir tava hakkında ...

Gördün mü? Seninle benim neredeyse ölümcül bir kavgaya tutuştuğumuza şimdiden inanıyorum.

Her nasılsa bu tartışmayı sürdürmek için zaten tembeldim. Neden her milisaniyede siparişleri sıralamak gerektiğini anlayamıyorum. Yumurta kızartmak bunlardan biri mi?

 
Alexey Viktorov :

Gördün mü? Seninle benim neredeyse ölümcül bir kavgaya tutuştuğumuza şimdiden inanıyorum.

Her nasılsa bu tartışmayı sürdürmek için zaten tembeldim. Neden her milisaniyede siparişleri sıralamak gerektiğini anlayamıyorum. Yumurta kızartmak bunlardan biri mi?

Evet ..., topuğun sağından yakaladı ... :)
Her birini söylemiyorum. Ancak çoğu zaman - ortamdaki bir değişikliği zamanında tespit etmek için.
 
iyi, ben böyle oynamıyorum ... çürümüş ... hayal kırıklığına uğramış ...
 

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

Sipariş numaralandırma döngüsünün organizasyonu

fxsaber , 2017.10.06 02:00

 bool IsChange( const bool InitFlag = false )
{
   static int PrevTotal = 0 ;
   static int PrevHistoryTotal = 0 ;
  
   const int Total = OrdersTotal ();
   const int HistoryTotal = OrdersHistoryTotal ();    
  
   if (InitFlag)
  {
    PrevTotal = Total;
    PrevHistoryTotal = HistoryTotal ;    
  }
  
   return (!InitFlag && ((Total != PrevTotal) || ( HistoryTotal != PrevHistoryTotal)));
}

Tarihe başvurmadan sürüm.

 struct HISTORY_UNIT
{
   long Ticket;
   int Type;
   double Lots; 
    
  HISTORY_UNIT( void ) : Ticket(:: OrderTicket ()), Type(:: OrderType ()), Lots(:: OrderLots ())
  {
  }

   bool operator !=( const HISTORY_UNIT &Unit ) const
  {
     return (( this .Ticket != Unit.Ticket) || ( this .Type != Unit.Type) || ( this .Lots != Unit.Lots));
  }
      
   bool IsChange( void )
  {
     const HISTORY_UNIT Tmp;
     const bool Res = ( this != Tmp);
    
     if (Res)
       this = Tmp;
      
     return (Res);
  }
};

// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChange( void )
{
   static HISTORY_UNIT History[];  

   const int Total = OrdersTotal ();  
   bool Res = ( ArraySize (History) != Total);

   for ( int i = 0 , j = Res ? ArrayResize (History, 0 , Total) : 0 ; i < Total; i++)      
     if ( OrderSelect (i, SELECT_BY_POS ))
    {
       if (Res || (Res = History[j].IsChange()))
         ArrayResize (History, j + 1 , Total);
      
      j++;
    }
  
   return (Res);
}

Bu sürüm özellikle bir VPS'deki MT5 için geçerlidir, çünkü. MT5, History ile çok yavaş çalışır ve hesaplama açısından pahalıdır.

 
fxsaber :

Tarihe başvurmadan sürüm.

Bu sürüm özellikle bir VPS'deki MT5 için geçerlidir, çünkü. MT5, History ile çok yavaş çalışır ve hesaplama açısından pahalıdır.


Bu durumda, normal OnTrade()'i kullanmak daha iyidir.

ticaret

Bir olay meydana geldiğinde fonksiyon çağrılır.   Liste değiştiğinde gerçekleşen ticaret   verilen siparişler   ve   açık pozisyonlar ,   Sipariş Geçmişi   ve   işlem geçmişi . Herhangi bir alım satım eylemi (bekleyen bir emir vermek, bir pozisyon açmak/kapatmak, stop vermek, bekleyen emirleri tetiklemek vb.) emirlerin ve anlaşmaların geçmişini ve/veya pozisyonların ve mevcut emirlerin listesini buna göre değiştirir.

 
Sergey Chalyshev :

Bu durumda, normal OnTrade()'i kullanmak daha iyidir.

Maalesef yapamazsınız. Bu konu hakkında.

 
Bu ifadeye çok az kişi itiraz edebilir.

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

Hatalar, hatalar, sorular

fxsaber , 2018.01.23 09:39

Başarısız ve başarılı bir OrderSend'den sonra mevcut ticaret ortamı tamamen yeniden okunmalıdır. Bu kural her zaman geçerli olmalıdır.

Bu evrensel bir kuraldır. Ancak çok azı bunun MT5'teki uygulamasını düşünüyor. Bu nedenle, en basit TS için bir şablon yazdım (neredeyse hepsi kod tabanındadır)

 // Шаблон большинства ТС

#include <Trade/Trade.mqh>

// Сигнал на покупку
bool BuySignal( const string Symb ) { return ( true ); }

// Сигнал на продажу
bool SellSignal( const string Symb ) { return ( false ); }

// Находит позицию соответствующего типа
bool PositionsScan( const string Symb, const ENUM_POSITION_TYPE Type )
{
   for ( int i = PositionsTotal () - 1 ; i >= 0 ; i--)
     if (( PositionGetSymbol (i) == Symb) && ( PositionGetInteger ( POSITION_TYPE ) == Type))
       return ( true );    
    
   return ( false );  
}

// Торговое действие на сигнал
bool Action( const string Symb, const ENUM_POSITION_TYPE Type, const double Lots = 1 )
{
   static CTrade Trade;    
   bool Res = true ;    
  
   // Закрыли противоположные сигналу позиции
   while ((PositionsScan(Symb, ( ENUM_POSITION_TYPE )( 1 - Type))) && (Res = Trade.PositionClose( PositionGetInteger ( POSITION_TICKET ))));

   // Открыли позицию по сигналу
   return (Res && !PositionsScan(Symb, Type) && (Type ? Trade.Sell(Lots, Symb) : Trade.Buy(Lots, Symb)));
}

// Шаблон торговой стратегии
void Strategy( const string Symb )
{
   if (BuySignal(Symb))
    Action(Symb, POSITION_TYPE_BUY );
   else if (SellSignal(Symb))
    Action(Symb, POSITION_TYPE_SELL );
}

void OnTick ()
{
  Strategy( _Symbol );
}

Nedense bazı kişiler aynı araçlar için daha fazla kod yazarlar. Ama aslında, bu kod da aynı şeyi yapıyor. Çoğu TS, yalnızca BuySignal ve SellSignal'in yazılmasını gerektirir. Başka bir şeye gerek yok.

Örnek bir şablon özel olarak SB kullanılarak yazılmıştır. Bu nedenle, soru MT5 uzmanları içindir, kod doğru mu?

 
fxsaber :
Bu ifadeye çok az kişi itiraz edebilir.

Bu evrensel bir kuraldır. Ancak çok azı bunun MT5'teki uygulamasını düşünüyor. Bu nedenle, en basit TS için bir şablon yazdım (neredeyse hepsi kod tabanındadır)

Nedense bazı kişiler aynı araçlar için daha fazla kod yazarlar. Ama aslında, bu kod da aynı şeyi yapıyor. Çoğu TS, yalnızca BuySignal ve SellSignal'in yazılmasını gerektirir. Başka bir şeye gerek yok.

Örnek bir şablon özel olarak SB kullanılarak yazılmıştır. Bu nedenle, soru MT5 uzmanları içindir, kod doğru mu?

İşte bu açıklama:

Başarısız ve başarılı bir OrderSend'den sonra mevcut ticaret ortamı tamamen yeniden okunmalıdır. Bu kural her zaman geçerli olmalıdır.

Başarısız olandan sonra neden her şeyi çekelim? Emirlerin ve pozisyonların geçmişiyle neden uğraşasınız ki ? Mevcut siparişler ve pozisyonlar da mı? Şu anda ihtiyacınız olan fiyatları ve verileri güncellemek için yeterli değil mi?

 
Artyom Trishkin :

Başarısız olandan sonra neden her şeyi çekelim? Emirlerin ve pozisyonların geçmişiyle neden uğraşasınız ki ? Mevcut siparişler ve pozisyonlar da mı? Şu anda ihtiyacınız olan fiyatları ve verileri güncellemek için yeterli değil mi?

Kelimenin tam anlamıyla anlarsanız, Piyasa İzleme'den her bir sembolün geçmiş tik geçmişini de okuyabilirsiniz. Ama bence aslında ifadenin anlamını anlıyorsunuz.

Görünüşe göre kod bu ifadeyi uyguluyor. Bu nedenle, MT5'i anlayan herkes için bir soru vardı: kod doğru mu?

Neden: