FORTS: Verimsiz İşlemler için Ücret - sayfa 2

 
Sergey Chalyshev :

Tabii ki, resmi açıklamalar zarar vermez.

Tam olarak tatmin etmek için, bunun gibi yeterli dokunma işlevi yoktur:

  AccountInfoInteger ( ACCOUNT_TRANSACTION_SESSION ) // - количество транзакций за текущую сессию.

Borsa işlem sayısını sayarsa, muhtemelen bu verileri terminalde alabilirsiniz.

MQ geliştiricilerinden bu özelliği eklemelerini istememiz gerekiyor.

Evet çok güzel olurdu.

ben kendim düşünüyorum...

 
Михаил :

Evet çok güzel olurdu.

kendimi düşünüyorum...

SD'ye bir teklif yazdı.
 

Cevap geldi!

Верно, объем заявки, сделки - не важен.

 С уважением,
Глеб Кочнев
Техническая поддержка ПАО Московская Биржа
+ 7 ( 495 ) 733 - 95 - 07 | help@moex.com

 
 
--- Первоначальное сообщение ---
С: 
Отправленные: 25.11 . 2015 0 : 16 : 09
По: help@moex.com
Копия: 
Тема: Re[ 2 ]: Сбор за неэффективные Транзакции (N602821N)
 

Добрый день, Глеб!

Осталось выяснить следующий ньюанс.

Из формулы по расчёту неэффективных транзакций
не ясен параметр "l"
l – балл для Сделки, заключенной с указанием одного из Разделов (определенный по типу Сделки в соответствии с Таблицей 1 ).
Имеется ввиду, что формула не учитывает объём сделки?
Т.е 1 сделка - 40 баллов и неважно каким объёмом она была совершена?

Михаил

Pekala, şimdi her şey açık. Bu düşünülebilir.

 #property copyright "Copyright 2015, Mikalas"
#property link        "https://www.mql5.com"
#property version    "1.00"
//
input double   TrPoint    = 1 ;     //Балл за транзакцию
input ulong    DealPoint  = 40 ;   //Балл за сделку
input ulong    SesTrCount = 620 ;   //Транзакций за сессию 
//
double ord_count, trans_count;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  ord_count = NormalizeDouble ( double ( SesTrCount ) * TrPoint, 0 );
  SetTransactions();
   return ( INIT_SUCCEEDED ); 
}
//+------------------------------------------------------------------+
//| Expert Set start day time function                               |
//+------------------------------------------------------------------+
datetime SetStDayTime()
{
   MqlDateTime   dt_str; 
   TimeTradeServer ( dt_str );
//---
   if ( ( dt_str.day_of_week == 0 ) || ( dt_str.day_of_week == 6 ) ) return ( datetime ( 0 ) );  
//---
   string time_str = IntegerToString ( dt_str.year ) + "." + IntegerToString ( dt_str.mon ) +
                     "." + IntegerToString ( dt_str.day ) + " 19:00:00" ;
   ulong cur_day = ulong ( StringToTime ( time_str ) );                     

   if ( ( dt_str.hour >= 19 ) && ( dt_str.hour <= 23 ) )
  {
     return ( StringToTime ( time_str ) );
  }
   else
  {
     ulong one_day = 24 * 60 * 60 ;
//---      
     if ( dt_str.day_of_week == 1 )
    {
      cur_day -= one_day * 3 ;
    }
     else
    {
      cur_day -= one_day;
    }
     return ( datetime ( cur_day ) );
  }  
   return ( datetime ( 0 ) );
}
//+------------------------------------------------------------------+
//| Expert calc deals fee function                                   |
//+------------------------------------------------------------------+
double GetExgangeFee( const datetime start_time )
{
   double all_fee = 0.0 ;
   ulong deal_ticket;
//---  
   if ( HistorySelect ( start_time, TimeTradeServer () ) )
  {
     int deals_total = HistoryDealsTotal ();
//---   
     if ( deals_total > 0 )
    {
       for ( uint i = 0 ; i < uint ( deals_total ); i++ )
      {
        deal_ticket = HistoryDealGetTicket ( i );
//---        
         if ( deal_ticket > 0 )
        {
           ulong order_ticket = ulong ( HistoryDealGetInteger ( deal_ticket, DEAL_ORDER ) );
          
           if ( order_ticket > 0 )
          {
            all_fee += HistoryDealGetDouble ( deal_ticket, DEAL_COMMISSION );
          }  
        }
      }
       return ( MathAbs ( all_fee ) );
    }  
  }
   return ( 0 );
}
//+------------------------------------------------------------------+
// Expert Set transactions function                                  |
//+------------------------------------------------------------------+
void SetTransactions()
{
   datetime start_time = SetStDayTime();
   double tr_bonus = GetExgangeFee( start_time );
//---
   if ( tr_bonus > 0.0 )
  {
     double bonus = tr_bonus * double ( DealPoint ); 
    ord_count = NormalizeDouble ( double ( SesTrCount ) * TrPoint + bonus, 0 );
  }   
}
//Осталось "организовать" счётчик транзакций ( trans_count )
//и при установке, удалении или модификации ордера, считать кол-во транзакций.
//А во время клиринга обнулять счётчик транзакций.
//Перед установкой ордера проверять

/*if ( trans_count < ord_count )
{
  //Установка ордера
}*/
//Функцию SetTransactions() вызывать после каждой сделки и при инициализации
 

Oturumun başlama zamanını alma işlevini biraz kendi yolumda yeniden yaptım:

 //+------------------------------------------------------------------+
//| Get start session time function Serj                             |
//+------------------------------------------------------------------+
datetime GetTimeStartSession()
  {
   MqlDateTime   dt_str;
   datetime one_day= 86400 ;
   TimeTradeServer (dt_str);
   int hour=dt_str.hour;
   dt_str.hour= 19 ; dt_str.min= 0 ; dt_str.sec= 0 ;
   datetime time_start= StructToTime (dt_str);
   
   switch (dt_str.day_of_week)
     {
       case 6 : time_start-=one_day; break ;
       case 0 : time_start-=(one_day* 2 ); break ;
       case 1 : if (hour< 19 ) time_start-=(one_day* 3 ); break ;
       default : if (hour< 19 ) time_start-=one_day; break ;
     }
   return (time_start);
  }
//+------------------------------------------------------------------+

6 kat daha hızlı çalışır

 2015.11 . 27 08 : 20 : 52.374 Speed Test Time Session (UTRY- 12.15 ,H1) session start time: 2015.11 . 26 19 : 00 : 00
2015.11 . 27 08 : 20 : 52.374 Speed Test Time Session (UTRY- 12.15 ,H1) Serj Время выполнения = 89 mcs
2015.11 . 27 08 : 20 : 52.374 Speed Test Time Session (UTRY- 12.15 ,H1) session start time: 2015.11 . 26 19 : 00 : 00
2015.11 . 27 08 : 20 : 52.374 Speed Test Time Session (UTRY- 12.15 ,H1) Mikalas Время выполнения = 563 mcs

Beğenirseniz yeni başlayanlar için şubenize taşıyabilirsiniz.

kontrol edilecek komut dosyası:

Dosyalar:
 
Sergey Chalyshev :

Oturumun başlama zamanını alma işlevini biraz kendi yolumda yeniden yaptım:

6 kat daha hızlı çalışır

Beğenirseniz yeni başlayanlar için şubenize taşıyabilirsiniz.

kontrol edilecek komut dosyası:

Çok beğendim teşekkürler çok hızlı.
 
Михаил :

Bugün 208.10 ruble için bir "mutluluk mektubu" aldım.

2121 işlem yapılmıştır.

Aynı zamanda, bu işlem günü için alınan/satılan:

Borsa komisyonu: 30 ruble.

İşlem başına puan = 40

Yukarıdaki formüllere dayanarak, elimizde:

İşlemler = 2121 - (30 * 40) - 2000 = -1079

Yani, para cezası vermek için 1079 işlemi "almadım".

Borsa kardeşimizi kandırıyor, sadece 2000 işlem sınırına mal oluyor ve ardından "fenerden" para cezası veriyor

(belki, elbette, bu bir komisyoncu hırsızlığıdır).

Büyük olasılıkla, bir yerde hesaplamalarda bir hata yaptınız.

Ancak işlem geçmişiniz ve ayrıntılı günlükleriniz olmadan bunu doğrulamak mümkün değildir.

 
Andrey Khatimlianskii :

Büyük olasılıkla, bir yerde hesaplamalarda bir hata yaptınız.

Ancak işlem geçmişiniz ve ayrıntılı günlükleriniz olmadan bunu doğrulamak mümkün değildir.

Terminal günlüklerinden işlem sayısını sayamayacağımı mı düşünüyorsunuz?

P/S Her şeyi borsanın teknik desteğine gönderdim.

Добрый день, Глеб!

01.12 . 2015 г. я получил от Вас (Биржи) штраф за
неэффективные транзакции. За данный торговый день (с 19 : 00 27.12 . 2015 по 18 : 45 30.12 . 2015 ),
я произвёл 2121 транзакцию, при этом было куплено/продано 5 MIX- 12.15 и 50 MXI- 12.15

1 . На каком основании выставлен штраф в 208 , 10 руб, если я, исходя из формул биржи,
"недобрал" 1079 транзакций до штрафа?

2 . Если не сложно, покажите на моём конкретном примере, как Вы (Биржа) насчитали 208 , 10 руб.

Во вложенном файле логи моего терминала с произведёнными транзакциями.


Михаил

Cevabı yayınlayacağım.

 
Михаил :

Terminal günlüklerinden işlem sayısını sayamayacağımı mı düşünüyorsunuz?

P/S Her şeyi borsanın teknik desteğine gönderdim.

Bence sen de insansın ve yanılabilirsin. Bu doğru değil? )

Cevap bekleyelim bakalım ne diyecekler.

 
Andrey Khatimlianskii :

Büyük olasılıkla, bir yerde hesaplamalarda bir hata yaptınız.

Ancak işlem geçmişiniz ve ayrıntılı günlükleriniz olmadan bunu doğrulamak mümkün değildir.

Evet, yanılmışım.

Daha önce borsa ertesi gün para cezası veriyordu, ancak şimdi aynı gün.

Yanlış işlem gününü aldım :(

Ve (bugün) işlem sayısı 2081'e ulaştı ve bu da 208.10 ruble para cezasına yol açtı.

Her şey doğru.

 
Михаил :

Evet, yanılmışım.

Daha önce, borsa ertesi gün para cezası verdi, ancak şimdi aynı gün.

Yanlış işlem gününü aldım :(

Ve (bugün) işlem sayısı 2081'e ulaştı ve bu da 208.10 ruble para cezasına yol açtı.

Her şey doğru.

Yine de, bu rakam formülünüze "uymuyor".