MT5とtrans2quik.dll。 - ページ 14

 
prostotrader:

じゃあ、オプションに入るから待っててね...。

今は手持ちでトレードするのみ(ニュース待ち)。

OK、ありがとうございます。

 

SetTickers()の動作を高速化しました。

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

他のことをする機会がない中で、私は、このたび

MT5→Quikでの作業を継続するため。

MT5でロボットを書き、Quikに取引注文を 出す方法を見つけました。

MT5のロボットは、先物または株式で動作します。

また、共同作業の先物-株式も。

動作にはFORTSのリアル 口座(MT5)と、任意のブローカーでQuickを使用したEBSが必要です。

Expert Advisorのおおよその "魚"

//+------------------------------------------------------------------+
//|                                                     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:

他のことをする機会がない中で、私は、このたび

MT5→Quikでの作業を継続するため。

MT5でロボットを書き、Quikに取引注文を 出す方法を見つけました。

MT5のロボットは、先物または株式で動作します。

また、共同作業の先物-株式も。

動作にはFORTSのリアル 口座(MT5)と、任意のブローカーでQuickを使用したEBSが必要です。

Expert Advisorのおおよその "魚"

お疲れ様でした。

魚に何ができるのか?:)

図書館を通じて市場情報を入手することは可能ですか?

もっとコメントを、コードに書いてください
 
Aleksey Vyazmikin:

いい仕事してますね~。

魚に何ができるのか?:)

図書館を通じて市場情報を入手することは可能ですか?

もっとコメントを、コードに書いてください

まだ説明することはありません。MT5にはコールバックがないので、保留中の注文に 問題があります。

保留を武器にしたい。

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

まだ説明することはありません、保留中の注文に 問題があります、MT5にはコールバックはありません。

で、保留中の注文を持ちたい。

コールバックはOnChartEventで整理すると、delphiからMTチャートにキープレスを送ることができます。

 
Sergey Chalyshev:

コールバックはOnChartEventで整理することができ、また、delphiからMTチャートのキーストロークを送ることができます。

Seryozhさん、こんにちは。

ありがとうございます、やってみます。

その実例は?

 
prostotrader:

こんにちは、Seryozhさん。

ありがとうございます、試してみます。

例はありますか?

私は既製のソリューションを持っていない、私はちょうどそれを試してみました、私は今、例を見つけることができません、多分後で。

とりあえずここを見て ください。

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

クイックからデポを取るのを忘れたので......。それはあきらめた。

 
prostotrader:

クイックからデポを取るのを忘れたので......。それはあきらめた。

QUIKでは、オプションで必要な情報をファイルで送信することが可能です。

理由: