FORTS: Yeni başlayanlara yardımcı olmak için - sayfa 3

 

Sık kullanılan ve kullanışlı özellikler:  

Seans limitleri için fiyatı kontrol etme:

 //+------------------------------------------------------------------+
//| Expert Check price range function                                |
//+------------------------------------------------------------------+
bool CheckPriceRange( const string a_symbol, const double price )
{
   double min_price = SymbolInfoDouble ( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MIN );
   double max_price = SymbolInfoDouble ( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MAX );
   if ( ( price >= min_price ) && ( price <= max_price ) )
  {
     return ( true );
  }
   return ( false );
}
 

Sık kullanılan ve kullanışlı özellikler:  

Yeniden tasarlanan GetPositionPrice() işlevi:

 //+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
   double price_in = 0 ;
   double volume_in = 0 ;
   double price_out = 0 ;
   double volume_out = 0 ;
   double price = 0 ;
   double volume = 0 ;
//---  
   ulong pos_id = ulong ( PositionGetInteger ( POSITION_IDENTIFIER ) );
    
   if ( pos_id > 0 )
  {
       if ( HistorySelectByPosition ( pos_id ) )
      {
         int deals = HistoryDealsTotal ();
      
         for ( int i = 0 ; i < deals; i++ )
        {
           ulong deal_ticket = HistoryDealGetTicket ( i );
           ulong order_ticket = ulong ( HistoryDealGetInteger ( deal_ticket, DEAL_ORDER ) );
        
           if ( order_ticket > 0 )
          {
             ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY ( HistoryDealGetInteger ( deal_ticket, DEAL_ENTRY ) );
              
             if ( deal_entry == DEAL_ENTRY_IN )
            {
              price = HistoryDealGetDouble ( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble ( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
             else
             if ( deal_entry == DEAL_ENTRY_OUT )
            {
              price = HistoryDealGetDouble ( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble ( deal_ticket, DEAL_VOLUME );
                                
              price_out += price * volume;
              volume_out += volume;  
            }
          }
        }
//---  
        price = price_in - price_out;
        volume = volume_in - volume_out;
//---
         if ( volume > 0 )
        {       
           return ( NormalizeDouble ( price / volume, _Digits ) );
        }
      }
       else
      {
         Print ( "GetPositionPrice: Невозможно получить историю позиции по символу " , aSymbol );
      }
    }
     else
    {
       Print ( "GetPositionPrice: Невозможно определить идентификатор позиции по символу " , aSymbol );
    }
   return ( 0 );
} 
 

İşlevde küçük bir düzenleme (evrensellik için)

yerine:

 if ( volume_in > 0 )
{
   return ( NormalizeDouble ( price_in / volume_in, _Digits ) );
}

şu şekilde yapın:

 if ( volume_in > 0 )
{
   int symb_digits = int ( SymbolInfoInteger ( aSymbol, SYMBOL_DIGITS ) );
   return ( NormalizeDouble ( price_in / volume_in, symb_digits ) );
}
 
1241. gerçek hesap oluşturun. bekleyen bir emir verilmişse ve kısmen doldurulmuşsa, daha sonra değiştirildiğinde, emir durumu ORDER_STATE_PLACED olarak değişmez ve ORDER_STATE_PARTIAL aynı kalır.
 

gerçek bir hesap açar ve forumlarda buna yatırım erişimi gönderirim, o zaman sorunlar olabilir mi? Yoksa her şey temiz mi?


 
Merhaba! Bu konuda açıklanan özellikleri dikkate alan basit bir ticaret sistemi şablonu veya FORTS için bir Uzman Danışman örneği var mı? FORTS siparişleri ile düzgün çalışması gerekir.
 

"Tavsiye :

FORTS için Expert Advisors tasarlarken Tick olayını kullanmanızı önermem ancak

BookEvent'i kullanmak daha iyidir "

Neden daha iyi olduğu açıklanmıyor, belki bazı durumlarda daha iyi, diğerlerinde onTick daha iyi. detaylandırmak mümkün mü.

 
Alexander :

"Tavsiye :

FORTS için Expert Advisors tasarlarken Tick olayını kullanmanızı önermem ancak

BookEvent'i kullanmak daha iyidir "

Neden daha iyi olduğu açıklanmıyor, belki bazı durumlarda daha iyi, diğerlerinde onTick daha iyi. detaylandırmak mümkün mü.

Yazar banyoda ve burada yakında ondan bir cevap beklemeyeceksiniz.

İşte bunun hakkında ne düşünüyorum:

Tick olayı yalnızca Bid, Ask, Last değiştiğinde gelir. Ayrıca, Tick olayı kümülatiftir (geliştiricilerin dediği gibi), birkaç fiyat değişikliği için bir Tick gelebilir.

BookEvent olayı, emir defterindeki emirlerde herhangi bir değişiklik olduğunda ve işlemler yapıldığında meydana gelir. BookEvent etkinliği çok daha sık geliyor.

Sipariş defterinde likiditeyi analiz etmeye gerek yoksa OnTick() kullanmak daha iyidir.

Çok likit cihazlarda BookEvent olayı çok sık gelir ve işleyicide ağır hesaplamalar veya birkaç ağır gösterge varsa, bir döngü olarak çalışır.

EA ayrıca OnTimer gibi başka olay işleyicileri de içeriyorsa, bu olayları atlamayla karşılaşabilirsiniz. OnTradeTransaction ve OnTrade olaylarını bilmiyorum, belki atlanabilirler.

yardımdan:

İşlem kuyruğunun uzunluğu 1024 elemandır. OnTradeTransaction() sonraki işlemi işlemek için çok uzun sürerse, kuyruktaki eski işlemler yenileri tarafından zorlanabilir.

 
Sergey Chalyshev :

Yazar banyoda ve burada yakında ondan bir cevap beklemeyeceksiniz.

Evet, uzun zaman önce Mikhail'i hamamdan çıkardılar... Burada ava'sını değiştirdi.
 
Alexey Kozitsyn :
Evet, uzun zaman önce Mikhail'i hamamdan çıkardılar... Burada ava'sını değiştirdi.
Peki ya Ava? Foruma yazma şansı yok, sonsuz bir yasak.
Neden: