Jump to content

Общие вопросы по языку MQL


Recommended Posts

STre

Так нельзя перебирать ордера для закрытия. Надо вот так.

for(int i=OrdersTotal()-1;i>=0;i--)

 

Иначе вы одновременно идете по циклу и удаляете. Цикл ломается...

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то ест

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

Vladero

Подскажите, можно ли вне функций советника, в начале файла, прописывать что-то, помимо объявления переменных?

Хочу сделать объявление переменных/массивов, только если они будут нужны, в зависимости от значения внешней переменной-переключателя. Примерно так:

​extern bool a=true; //Использовать функцию Х?
if (a==true)
 {
   int d=1;
   double TT[10];
 }
...

Так будет работать?

Link to post
Share on other sites
AntFX
Так будет работать?

Так не будет, но можно так

 

#ifdef A_TRUE

 

int d=1;

double TT[10];

 

#endif 

 

Чтобы этот кусок потом включить, нужно вверху написать

 

#define A_TRUE

 

Включить или выключить кусок кода в зависимости от значения переменной не получится.

Edited by AntFX

1

Link to post
Share on other sites
ToB. CyxoB

Подскажите простую вещь, пожалуйста...))

 

как в enum поместить разные значения 1.2.3.4.... в одну переменную ?  mql4 

Link to post
Share on other sites
AntFX

 

 

как в enum поместить разные значения 1.2.3.4.... в одну переменную ?  mql4 

Каждому значению в enum должно соответствовать строго одно число


1

Link to post
Share on other sites
ToB. CyxoB

Каждому значению в enum должно соответствовать строго одно число

а как тогда мне сделать перебор параметров переменной в свойствах советника? как выбрать 1 или 2 или 3? 

Link to post
Share on other sites
AntFX

а как тогда мне сделать перебор параметров переменной в свойствах советника? как выбрать 1 или 2 или 3? 

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


1

Link to post
Share on other sites
ToB. CyxoB

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

 

перечисление значений? мне нужно чтобы переменная А могла принимать значения 1,2 или 3....

Link to post
Share on other sites
AntFX

перечисление значений? мне нужно чтобы переменная А могла принимать значения 1,2 или 3....

можешь написать так

 

enum abc{Один=1, Два=2, Три=3};

 

или так

 

enum abc2{_1=1, _2=2, _3=3};
 
элементом в перечислении (enum) должен быть идентификатор. он не может начинаться с числа (то есть элемент 1, 2 или 3 создать не получится)
Edited by AntFX
  • Thanks 1

1

Link to post
Share on other sites
ToB. CyxoB

 

можешь написать так

 

enum abc{Один=1, Два=2, Три=3};

 

или так

 

enum abc2{_1=1, _2=2, _3=3};
 
элементом в перечислении (enum) должен быть идентификатор. он не может начинаться с числа (то есть элемент 1, 2 или 3 создать не получится)

 

 

и в коде, везде где у меня было if abc2==1.... теперь будет   if abc2==_1 ?

Link to post
Share on other sites
AntFX
и в коде, везде где у меня было if abc2==1.... теперь будет   if abc2==_1 ?

переменную вполне можно использовать как целочисленную, она может принимать любые целочисленные значения по сути (наск. я помню)

 

Но если говорить о правильном стиле программирования, то этого лучше не делать... Элементам перечисления нужно давать осмысленные имена и применять только их в коде. Причем, желательно английские... А если нужно ограничить пользователя в установке других чисел в настройке кроме 1, 2 и 3 то использовать не перечисление, а обычную переменную int, и проверять в OnInit, что значение установлено в нужных рамках. Если значение отличается от нужного, выдавать сообщение в журнал и выгружать советник ( return(INIT_FAILED) ).

Edited by AntFX

1

Link to post
Share on other sites
ToB. CyxoB

переменную вполне можно использовать как целочисленную, она может принимать любые целочисленные значения по сути (наск. я помню)

 

Но если говорить о правильном стиле программирования, то этого лучше не делать... Элементам перечисления нужно давать осмысленные имена и применять только их в коде. Причем, желательно английские... А если нужно ограничить пользователя в установке других чисел в настройке кроме 1, 2 и 3 то использовать не перечисление, а обычную переменную int, и проверять в OnInit, что значение установлено в нужных рамках. Если значение отличается от нужного, выдавать сообщение в журнал и выгружать советник ( return(INIT_FAILED) ).

 

цель: дать пользователю выбрать одно из двух значений: 0 или 1.  Назначить переменной abc значение 0 или 1.

 

У меня пока ничего не получилось.

enum abc{_0=0, _1=1};
и далее в коде

if (abc==_0) {Print("0 ",_0);}
if (abc==_1) {Print("1 ",_1);}

ошибка....неизвестный токен

Edited by ToB. CyxoB
Link to post
Share on other sites
AntFX

 

 

ошибка....неизвестный токен

abc это тип, а не переменная. ты как будто вчера родился... 


1

Link to post
Share on other sites
ToB. CyxoB

abc это тип, а не переменная. ты как будто вчера родился... 

не вчера...сегодня!  :)  никогда в жизни не пользовался этими enum-ами...  

 

напиши короткий пример, пожалуйста, законченный. 

Справку читал. не помогло))) 

объявили тип...аbc...а нафига он мне нужен? мне переменная нужна и ее значения! 

Link to post
Share on other sites
AntFX

enum ENUM_ABC {_0=0, _1=1};

 

и далее в коде

 

ENUM_ABC abc=_0;

 

if (abc==_0) {Print("0 ",_0);}

if (abc==_1) {Print("1 ",_1);}

Edited by AntFX

1

Link to post
Share on other sites
ToB. CyxoB

 

enum ENUM_ABC {_0=0, _1=1};

 

и далее в коде

 

ENUM_ABC abc=_0;

 

if (abc==_0) {Print("0 ",_0);}

if (abc==_1) {Print("1 ",_1);}

 

Спасибо)

Link to post
Share on other sites
  • 3 weeks later...
yrik735

Альтернатива есть ?

int OnCalculate(const int rates_total,

                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
Для советника
Link to post
Share on other sites
AntFX

 

 

Альтернатива есть ? int OnCalculate ... Для советника
 

В советниках используется OnTick()


1

Link to post
Share on other sites
  • 2 weeks later...
Atani

Подскажите как правильно прописать адрес для вызова программы через "kernel32.dll"

 

 

 

 

#import "kernel32.dll"
int WinExec(uchar &lpCmdLine[],uint uCmdShow);
 
#define SW_HIDE 0
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
          
          }
      uchar ucParam[];                           // определяем строковый массив
      string sParam = "C:\Xnwiew.exe";        // адрес
      ArrayResize(ucParam, StringLen(sParam)+1); // резервируем память для строкового массива
      StringToCharArray(sParam, ucParam);        // переносим текст в строковый массив
      
      int result = WinExec(ucParam,SW_HIDE);     // запуск программы
      if (result<32)
          Alert("Запуск программы не удалось. Код ошибки: ",result);
      return;
  }

 
 
  uchar ucParam[];                           // определяем строковый массив
      string sParam = "C:\Xnwiew.exe";        // Вот пишу этот адрес, но ничего не происходит, как задать его?
      ArrayResize(ucParam, StringLen(sParam)+1); // резервируем память для строкового массива
      StringToCharArray(sParam, ucParam);        // переносим текст в строковый массив
      
      int result = WinExec(ucParam,SW_HIDE);     // запуск программы
      if (result<32)
          Alert("Запуск программы не удалось. Код ошибки: ",result);
      return;

 

Link to post
Share on other sites
  • 2 weeks later...
Neona

Здравствуйте! Подскажите пожалуйста, в  MQL4 приказ о покупке и выбор ордера выглядят так:

 

OrderSend(NULL,OP_BUY,0.5,Ask,10,SL_b,0,NULL,0,0,clrNONE);

 

OrderSelect(12345,SELECT_BY_POS)

 

Как эти приказы пишутся в  MQL5 ???

Link to post
Share on other sites
AntFX

 

 

Как эти приказы пишутся в  MQL5 ???
 

Добрый день! Вот здесь в справке все подробно описано с примерами.


1

Link to post
Share on other sites
Стяжатель

У меня такой вопрос. Не могу разобраться с временем в котировках. Как нивелировать влияние часового пояса и переход с летнего времени на зимнее? 

Link to post
Share on other sites
Стяжатель

Еще вопрос. Есть такая функция Push. Отправляет на мобильный терминал сообщение о событиях. С этой функцией кто то работал? Насколько все происходит без сбоев?

Link to post
Share on other sites
Ugar68

Еще вопрос. Есть такая функция Push. Отправляет на мобильный терминал сообщение о событиях. С этой функцией кто то работал? Насколько все происходит без сбоев?

Сбои бывают. Хотя бы надо понимать что интернет не всегда стабилен на мобильниках. Бывает что приходит с опозданием. Бывает не приходит совсем, но это обычно связано с тем что вовремя не обновил мобильный терминал, или он завис. Всё это достаточно редко. В основном работает стабильно.

Я ещё пользуюсь отправкой смс. Мне кажется это надёжнее. Работает даже если телефон находится там, где нет мобильного интернета. Но и это не всегда работает стабильно. Один раз я получил смс с билайна в Казахстане, на мегафон в России с задержкой в полтора месяца. Как раз те кто отправлял, уже у меня гостили. Вместе поржали.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
Secret Looser

Здравствуйте. Пишу на MQL4 мультивалютного советника, который работает на минутках и анализирует одновременно больше 10 валютных пар (кластерный анализ). И вот проблема: при тестировании терминал съедает около 4 ГБ оперативки, после чего вылетает с ошибкой. Получается протестировать максимум за пол года (тогда съедает 3.5 ГБ и работает).

 

Я так понимаю, он при тестировании загружает в оперативку всю минутную историю по всем используемым парам. Можно ли как-то этого избежать? Пробовал CopyRates - не помогло.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...