MATLAB dll + VS 2010 + MT4 + Win7 не работает

 

Добрый день, господа!

Прошу помощи, уже отчаялся.

У меня есть скрипт в матлабе, который экспортируется в виде dll-библиотеки. К этой библиотеке написана обертка на VC++. И есть советник, который все это грузит.

Связка замечательно работает на MT5, но на MT4 выдает ошибку 126. Ситуация в целом аналогична описанной здесь https://www.mql5.com/ru/forum/991

Код из примера так же идет на MT5, но не дружит с MT4. Буду рад любой помощи, заранее спасибо!

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
Покажите импорт в МТ4.
 

вот полный код советника


//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#import "testMT2.dll"
void test1(double& Candles[],double& balance[],double& orderInfo[],double&  PointCost[],double& POint[],double& commands[]);

#import
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
double array[6];
int init()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
double Candles[120];
double balance[1];
double orderInfo[8];
double  PointCost[2] = {10,10};
double POint[2] = {0.0001,0.0001};
double commands[12];
balance[0] = AccountBalance();
      int T = OrdersTotal();
   int total1 = 0;
   int total2 = 0;
   int i;
   for(i = 0; i < T;i++)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderMagicNumber() == 123)
      {
         total1++;
         if (OrderType() == OP_BUY)
         {
            orderInfo[0] = 1;
            orderInfo[1] = Bid;
            orderInfo[2] = OrderStopLoss();
            orderInfo[3] = OrderTakeProfit();
         }
         else
         {
            orderInfo[0] = 2;
            orderInfo[1] = Ask;
            orderInfo[2] = OrderStopLoss();
            orderInfo[3] = OrderTakeProfit();
         }
         }
        
        
      if(OrderMagicNumber() == 1231)
      {
         total2++;
                  if (OrderType() == OP_BUY)
         {
            orderInfo[4] = 1;
            orderInfo[5] = Bid;
            orderInfo[6] = OrderStopLoss();
            orderInfo[7] = OrderTakeProfit();
         }
         else
         {
            orderInfo[4] = 2;
            orderInfo[5] = Ask;
            orderInfo[6] = OrderStopLoss();
            orderInfo[7] = OrderTakeProfit();
         }
    }    
   }
   Candles[0] = Time[0];
   Candles[1] = Open[0];
   Candles[2] = High[0];
   Candles[3] = Low[0];
   Candles[4] = Close[0];
   Candles[5] = Volume[0];
   Candles[6] = Time[0];
   Candles[7] = Open[0];
   Candles[8] = High[0];
   Candles[9] = Low[0];
   Candles[10] = Close[0];
   Candles[11] = Volume[0];
   test1(Candles, balance, orderInfo, PointCost, POint, commands);
   Print(commands[0],commands[1],commands[2],commands[3],commands[4],commands[5]);
   if(total1 < 1)
   {
      if(commands[0] == 1)
      {
         OrderSend(Symbol(),OP_BUY,commands[4],Ask,3,Ask+commands[2],Ask+commands[1],"test",123,0,Green);
      }
      else if(commands[0] == 2)
      {
         OrderSend(Symbol(),OP_SELL,commands[4],Bid,3,Bid+commands[2],Bid-commands[1],"test",123,0,Green);
      }
   }
   if(total2 < 1)
   {
      if(commands[6] == 1)
      {
          OrderSend(Symbol(),OP_BUY,commands[10],Ask,3,Ask+commands[8],Ask+commands[7],"test",123,0,Green);
      }
      else
      {
      if(commands[6] == 2)
      {
         OrderSend(Symbol(),OP_SELL,commands[10],Bid,3,Bid+commands[8],Bid-commands[7],"test",1231,0,Green);
      }
      }
   }
   else
   {
   for(i = 0; i < T;i++)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       
      if(OrderMagicNumber() == 1231)
      {
         break;
      }    
   }
     if( commands[8] == -1)
     {
         if( OrderType() == OP_BUY)
         {
             OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
         }
         else
         {
            OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
         }
     }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
 
А добавьте-ка .def файл и функции в проекте, как в dllSample.
 
Извините за глупый вопрос, но dllSample где посмотреть можно?
 
Скорее всего загрузчик DLL в MT4 "не видит" библиотек (других DLL) необходимых для загрузки testMT2.dll

Проверте зависимости testMT2.dll сделать это можно в MT5 - набросайте эксперта использующего DLL и посмотрите во вкладке "зависимости" диалога свойств эксперта.

Положите необходимые библиотеки в папку терминала.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5
 
IvanSD:
Извините за глупый вопрос, но dllSample где посмотреть можно?

<папка мт4>\experts\samples\dllsample

И да, дллку не забыли в libraries положить?

 

Спасибо большое, изучаю.

Библиотеку положил, def-файл описал. Замечу, если закомментировать код в библиотеке, относящийся к матлабу, все работает.

 
Попробовал, по-прежнему ошибка 126. Прописал все пути к матлабовским dllкам, но тоже не помогло.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
Причина обращения: