MT5和trans2quik.dll - 页 14

 
prostotrader:

然后等待我进入选项...

现在我只用手交易(等待消息)。

好的,谢谢。

 

调整了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)和任何经纪商的快速EBS。

专家顾问的近似 "鱼"

//+------------------------------------------------------------------+
//|                                                     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)和任何经纪商的快速EBS。

专家顾问的近似 "鱼"

好样的!

一条鱼能做什么?:)

是否有可能通过图书馆获得市场信息?

更多的评论,请在代码中提出!
 
Aleksey Vyazmikin:

好生意!

鱼能做什么?:)

是否有可能通过图书馆获得市场信息?

更多的评论,请在代码中提出!

现在还没有什么可解释的,我有一个挂单 的问题,因为MT5中没有回调。

我想在我的阿森纳中拥有待定的订单。

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

现在还没有什么可以解释的,挂单 有问题,MT5中没有回调。

而我们希望有待处理的订单。

回调可以通过OnChartEvent来组织,你可以从delphi发送一个按键到MT图表。

 
Sergey Chalyshev:

回调可以通过OnChartEvent来组织,你也可以从delphi发送MT图表上的击键。

嗨,谢尔日。

谢谢你,我会试试的。

而你有一个例子吗?

 
prostotrader:

你好,谢尔盖。

谢谢,我会试一试的。

你有一个例子吗?

我没有任何现成的解决方案,我只是试了一下,现在找不到一个例子,也许以后会有。

暂时先看这里

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

忘了从Quick那里取车厂,所以....放弃了这个问题。

 
prostotrader:

忘了从Quick那里取车厂,所以....放弃了这个问题。

那么从QUIK可以通过文件发送所需的信息,作为一种选择。