MT5 ve trans2quik.dll - sayfa 14

 
prostotrader :

O zaman ben seçenekleri yapana kadar bekle...

Şimdi sadece ellerimle takas ediyorum (haber bekliyorum)

Peki teşekkür ederim.

 

Daha hızlı çalışması için SetTickers() ayarlandı

 //+------------------------------------------------------------------+
//| Set Tickers  function                                            |
//+------------------------------------------------------------------+
bool SetTickers()
{
   int s_total = SymbolsTotal ( false );
   if (s_total > 0 )
  {
     ArrayResize (qfs_data, s_total);
     int s_cnt = 0 ;
     ulong fut_exp;
     string fut_name, t_name, spot_name;
     ulong cur_time = ulong ( TimeTradeServer ());
     for ( int i = 0 ; i < s_total;i++)
    {
      fut_name = SymbolName (i, false );
      fut_exp = GetExpiration(fut_name);
       if (fut_exp > ulong (cur_time))
      {
         for ( int j = 0 ; j < ArraySize (enum_tikers);j++)
        {
          t_name = EnumToString (enum_tikers[j]);
           if (t_name != "" )
          {
             if ( StringFind (fut_name, t_name) > - 1 )
            {
              spot_name = GetSpot(t_name);
               if (spot_name != "" )
              {
                s_cnt++;
                qfs_data[s_cnt - 1 ].tiker = fut_name;
                qfs_data[s_cnt - 1 ].base_tiker = spot_name;
                 if ( SymbolSelect (fut_name, true ) != true ) return ( false );
                 if ( SymbolSelect (spot_name, true ) != true ) return ( false );
                 break ;
              }  
            }
          }
        }
      }
    }
     if (s_cnt > 0 )
    {
       ArrayResize (qfs_data, s_cnt);
       return ( true );
    }  
  }
   return ( false );
}
 

Başka şeyler yapmak için fırsat yokken, karar verdim

MT5 bağlantısı üzerinde çalışmaya devam edin --> Quik

Genel olarak, MT5'te bir robotun nasıl yazılacağına ve Quik'te alım satım emirlerinin nasıl verileceğine bir çözüm buldum.

MT5'teki robot, vadeli işlemler veya hisse senetleri ile çalışacaktır.

Vadeli işlemlerin ortak çalışmasının yanı sıra - hisseler.

Çalışmak için bir FORTS gerçek hesabına (MT5) ve herhangi bir Broker'da Quick ile EBS'ye ihtiyacınız olacak.

Yaklaşık "balık" danışmanı

 //+------------------------------------------------------------------+
//|                                                     MT5_quik.mq5 |
//|                                      Copyright 2020 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
#define RET_ERROR  - 1
//---
struct INIT_QUIK
{
   uchar tr2q_path[ 100 ];
   uchar fut_class_code[ 20 ];
   uchar fut_symb_code[ 20 ];
   uchar fut_account[ 20 ];
   uchar spot_class_code[ 20 ];
   uchar spot_symb_code[ 20 ];
   uchar spot_account[ 20 ];
};
struct BOOK_DATA
{
   double price;
   long    volume;
};
struct MARKET_DATA
{
  BOOK_DATA fut_sell;
  BOOK_DATA fut_buy;
  BOOK_DATA spot_sell;
  BOOK_DATA spot_buy;
};
//---
input string QDll    = "D:\\Program Files\\QUIK-Junior" ; //Путь к rtans2quik.dll
input string FClCode = "SPBFUT" ;                         //Код класса фьючерса
input string FSCode  = "SRU0" ;                           //Код символа фьючерса
input string FAcc    = "SPBFUT00064" ;                     //Номер счета фьючерса;
input string SClCode = "TQBR" ;                           //Код класса СПОТа
input string SSCode  = "SBER" ;                           //Код символа СПОТа
input string SAcc    = "NL0011100043" ;                   //Номер счета СПОТа;
//---
#import "MT5_to_Quik.dll"
   int InitQuik(INIT_QUIK &a_str);                                                              
   int SetFutOrder( const double price, const long volume, const int ord_type, ulong &ticket);    
   int SetSpotOrder( const double price, const long volume, const int ord_type, ulong &ticket);
   int RemoveFutOrder( const ulong ticket);
   int RemoveSpotOrder( const ulong ticket);
   int ModifyFutOrder( const double price, const long volume, ulong &ticket);
   int ModifySpotOrder( const double price, const long volume, ulong &ticket);
#import
//---
INIT_QUIK init_quik;
MARKET_DATA m_data;
bool fut_book, spot_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   int result = StringToCharArray (QDll, init_quik.tr2q_path);
   if (result > 0 )
  {
    result = StringToCharArray (FClCode, init_quik.fut_class_code);
     if (result > 0 )
    {
      result = StringToCharArray (FSCode, init_quik.fut_symb_code);
       if (result > 0 )
      {
        result = StringToCharArray (FAcc, init_quik.fut_account);
         if (result > 0 )
        {
          result = StringToCharArray (SClCode, init_quik.spot_class_code);
           if (result > 0 )
          {
            result = StringToCharArray (SSCode, init_quik.spot_symb_code);
             if (result > 0 )
            {
              result = StringToCharArray (SAcc, init_quik.spot_account);
            }
          }
        }
      }
    }
  }
  result = InitQuik(init_quik);
   if (result == RET_ERROR) return ( INIT_FAILED );
//---
  fut_book = MarketBookAdd ( Symbol ());
   if ( SymbolSelect (SSCode, true ) == true )
  {
    spot_book = MarketBookAdd (SSCode);
  }
   else
  {
     Print ( "SPOT not selected!" );
     return ( INIT_FAILED );
  }  
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (fut_book == true ) MarketBookRelease ( Symbol ());
   if (spot_book == true ) MarketBookRelease (SSCode); 
}
//+------------------------------------------------------------------+
//| Expert Get Book function                                         |
//+------------------------------------------------------------------+
bool GetBook( const string a_symbol)
{
   MqlBookInfo book_data[];
   bool is_found = false ;
   if ( MarketBookGet (a_symbol, book_data) == true ) //getBook )
  {
     int size = ArraySize (book_data);
     if (size > 2 )                                 //Sell price exists
    {
       for ( int i = 0 ; i < size; i++)
      {
         if (book_data[i].type == BOOK_TYPE_BUY ) 
        {
           if (a_symbol == Symbol ())
          {
            m_data.fut_buy.price = book_data[i].price;
            m_data.fut_sell.price = book_data[i- 1 ].price;
            m_data.fut_buy.volume = book_data[i].volume;
            m_data.fut_sell.volume = book_data[i- 1 ].volume;
          }
           else
           if (a_symbol == SSCode)
          {
            m_data.spot_buy.price = book_data[i].price;
            m_data.spot_sell.price = book_data[i- 1 ].price;
            m_data.spot_buy.volume = book_data[i].volume;
            m_data.spot_sell.volume = book_data[i- 1 ].volume;
          }
           return ( true );
        }
      }  
    }  
  } 
   return ( false );
}
//+------------------------------------------------------------------+
//| Expert Book Event function                                       |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
   if ((symbol == Symbol ()) || (symbol == SSCode)) 
  {
     if (GetBook( Symbol ()) == true )
    {
       if (GetBook(SSCode) == true )
      {
         //TODO YOU TS
      }
    }
  }  
}
//+------------------------------------------------------------------+
 
prostotrader :

Başka şeyler yapmak için fırsat yokken, karar verdim

MT5 bağlantısı üzerinde çalışmaya devam edin --> Quik

Genel olarak, MT5'te bir robotun nasıl yazılacağına ve Quik'te alım satım emirlerinin nasıl verileceğine bir çözüm buldum.

MT5'teki robot, vadeli işlemler veya hisse senetleri ile çalışacaktır.

Vadeli işlemlerin ortak çalışmasının yanı sıra - hisseler.

Çalışmak için, herhangi bir Broker'da Quick ile FORTS real (MT5) ve EBS hesabına ihtiyacınız var.

Yaklaşık "balık" danışmanı

İyi anlaşma!

Bir balık ne yapabilir? :)

Kütüphane aracılığıyla piyasa hakkında bilgi almak mümkün müdür?

Daha fazla yorum, lütfen kodda!
 
Aleksey Vyazmikin :

İyi anlaşma!

Bir balık ne yapabilir? :)

Kütüphane aracılığıyla piyasa hakkında bilgi almak mümkün müdür?

Daha fazla yorum, lütfen kodda!

Evet, açıklanacak başka bir şey yok, bekleyen siparişleri olan bir fiş, MT5'te geri arama yok, ancak

Cephanemde bekleyen emirlerin olmasını istiyorum.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
prostotrader :

Evet, açıklanacak başka bir şey yok, bekleyen siparişleri olan bir fiş, MT5'te geri arama yok, ancak

Cephanemde bekleyen emirlerin olmasını istiyorum.

Geri aramalar OnChartEvent aracılığıyla organize edilebilir, ancak Delphi'den MT tablosuna bir tuş vuruşu gönderebilirsiniz.

 
Sergey Chalyshev :

Geri aramalar OnChartEvent aracılığıyla organize edilebilir, ancak Delphi'den MT tablosuna bir tuş vuruşu gönderebilirsiniz.

Merhaba Serezha

Teşekkürler, deneyeceğim.

Bir örneğiniz var mı?

 
prostotrader :

Merhaba Serezha

Teşekkürler, deneyeceğim.

Bir örneğiniz var mı?

Hazır bir çözüm yok, sadece denedim, şimdi bir örnek arayamıyorum, belki daha sonra.

Şimdilik buraya bir göz atın.

Обмен данными между советниками
Обмен данными между советниками
  • 2019.03.31
  • www.mql5.com
Есть ли возможность обмена данными между двумя советниками, которые работают одновременно с двумя разными инструментами...
 

Depoyu Quick'ten almanız gerektiğini unuttum, bu yüzden .... bu fikirden vazgeçtim.

 
prostotrader :

Depoyu Quick'ten almanız gerektiğini unuttum, bu yüzden .... bu fikirden vazgeçtim.

Peki, QUIK'ten, bir seçenek olarak gerekli bilgileri dosyadan atabilirsiniz.