Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 159

 
hoz:

Есть функция. Вот её начала:

Суть вот в чём. Второй формальный параметр функции имеет умолчательное значение 0. А значит я могу вызывать согласно документации данную функцию, без второго параметра, т.к. он по умолчанию будет иметь значение 0.

Вызываю её так:

Компилятор ругается:

Почему?

Переместите её из библиотеки в код чего-там-делаете. Если ошибка уйдёт - значит проблемы с правильным подключением библиотеки в коде чего-там-делаете. В первую очередь.

Если не уйдёт - смотрите какие параметры передаёте в функцию. По идее должен быть параметр типа string с названием валютной пары. Передайте просто Symbol()

 
artmedia70:

Переместите её из библиотеки в код чего-там-делаете. Если ошибка уйдёт - значит проблемы с правильным подключением библиотеки в коде чего-там-делаете. В первую очередь.

Если не уйдёт - смотрите какие параметры передаёте в функцию. По идее должен быть параметр типа string с названием валютной пары. Передайте просто Symbol()



И на самом деле помогло.. Подумаю..

Так странно. А что смотреть в библиотеку, если передача параметров верная? Ошибка то явно написана. Или тут ничего конкретного нет? Знать бы что тут хоть нужно..

Эта функция заимствована, так что вылаживаю с контактами автора:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

Импортировал я её так:

#import "hoz_Base@Library.ex4"
    double ND (double v);
    string DToS (double v);
    string DToSByLots (double v);
    void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0);
#import

Вызов щяс такой:

fGet_MarketInfo (fs_Symbol);

Как решаются подобные задачи?

 
hoz: Как решаются подобные задачи?

Изучением документации. В компилируемые библиотеки параметры по умолчанию не передаются - при вызове функции нужно передавать ВСЕ параметры. Почитайте внимательно. Выдержка:

Так как импортируемые функции находятся вне компилируемого модуля, компилятор не может проверить правильность передаваемых параметров. Поэтому, во избежание ошибок выполнения, необходимо точно описывать состав и порядок параметров, передаваемых в импортируемые функции. Параметры, передаваемые в импортируемые функции (как из EX4, так и из DLL-модулей), не могут иметь значения по умолчанию.
 
TarasBY:

В компилируемые библиотеки параметры по умолчанию не передаются - при вызове функции нужно передавать ВСЕ параметры. Почитайте внимательно. Выдержка:

Так как импортируемые функции находятся вне компилируемого модуля, компилятор не может проверить правильность передаваемых параметров. Поэтому, во избежание ошибок выполнения, необходимо точно описывать состав и порядок параметров, передаваемых в импортируемые функции. Параметры, передаваемые в импортируемые функции (как из EX4, так и из DLL-модулей), не могут иметь значения по умолчанию.

Ах вот оно что. Век живи -век учись! Благодарю, буду знать.
 

Имеется потребность при запуске оптимизации в MT4 получать информацию о проходе во вкладке "Результаты оптимизации" аналогичной той, что формируется при разовом проходе во вкладке "Отчет".

Как это можно реализовать?

 

Решил познакомиться с библиотекой. Высосал часть кода с своего индикатора и всунул его в функцию, а функцию ету размножил и вставил в два файла библиотечных.

Первого назвал "indi.mqh", а второго просто - "djo.mq4".

int countbars(int& hist, int obrax, bool tikk)
{ 
 int z=0;
 static int PreBars=0; 
 static datetime BarTime=0;
 if (Bars == PreBars && tikk==false)return(-1);
 if (Bars < hist+obrax)  
 {
  if (Bars-obrax<=1) {Alert (" Недостатьньо історії");return(-1);}
  hist=Bars-obrax;
 }
 
 if (Bars-PreBars == 0 && BarTime==Time[0] && tikk==true) return(0);
 else  
 {
  if (Bars-PreBars == 1 && BarTime==Time[1]) z=1;
  else  z=hist;
 }
 PreBars = Bars;  
 BarTime=Time[0];
 return (z);
}

К сути: при обращении первому, все норм работает, как и запланировано;

 include <indi.mqh>

при замене первого вторым и обращении ко второму методом:

#import "djo.ex4"  int countbars(int& hist, int obrax, bool tikk);  #import

Но вообще ничего не работает, даже алерты - нигде после старт. А только что и терминал самозакрылся ))

Как я догадываюсь идет переинициализация всех констант каждый раз при обращении к импортированой функции ?

Где можно детально почитать про импорт в mql4, баги которые то ли пофиксили, то ли нет, и так далее ?

Спасибо я спать............

 
ALXIMIKS:

Решил познакомиться с библиотекой. Высосал часть кода с своего индикатора и всунул его в функцию, а функцию ету размножил и вставил в два файла библиотечных.

Первого назвал "indi.mqh", а второго просто - "djo.mq4".

К сути: при обращении первому, все норм работает, как и запланировано;

при замене первого вторым и обращении ко второму методом:

Но вообще ничего не работает, даже алерты - нигде после старт. А только что и терминал самозакрылся ))

Как я догадываюсь идет переинициализация всех констант каждый раз при обращении к импортированой функции ?

Где можно детально почитать про импорт в mql4, баги которые то ли пофиксили, то ли нет, и так далее ?

Спасибо я спать............

Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке. Нельзя передавать по ссылке элементы массивов. Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена. Для того чтобы указать, что параметр передается по ссылке, после типа данных необходимо поставить модификатор &. И вот ещё эксперименты.
 
Скажите.Вот у меня выдает звуковое сообщение при пересечении двух сколь средних. При открытии это звуковое сообщение повторяется столько раз, сколько пересечений было за всю историю. Вопрос. Как заставить выдавать сообщения только тех сигналов, которые были сгенерированы в настоящее время. То есть только только в то время и тот сигнал, который был получен буквально в настоящий момент...
 
Zolotai:
Скажите.Вот у меня выдает звуковое сообщение при пересечении двух сколь средних. При открытии это звуковое сообщение повторяется столько раз, сколько пересечений было за всю историю. Вопрос. Как заставить выдавать сообщения только тех сигналов, которые были сгенерированы в настоящее время. То есть только только в то время и тот сигнал, который был получен буквально в настоящий момент...
При открытии чего? Такое ощущение, что это индикатор. Решений много. Всё зависит от кода.
 
artmedia70:
При открытии чего? Такое ощущение, что это индикатор. Решений много. Всё зависит от кода.


Да код тут не при чем. Мне просто нужно правильное условие. Вопрос есть ли возможность узнать время текущего бара? Как вообще узнать время бара?
Причина обращения: