Jump to content

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


Recommended Posts

Paukas

не пойму как именно нужно проверять закрытие ордера?

 

return value of 'OrderClose' should be checked

 

 

OrderClose(MaxTicket,OrderLots(),Bid,0,Red);
Все есть здесь

https://docs.mql4.com/ru/trading/orderclose

False или true

Edited by Paukas
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

AntFX

 

не пойму как именно нужно проверять закрытие ордера?
 
return value of 'OrderClose' should be checked
OrderClose(MaxTicket,OrderLots(),Bid,0,Red);

 

Когда чего-то не понимаешь, почитай наконец справку!  :rtfmk:

 

Возвращаемое значение

Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().


1

Link to post
Share on other sites
ToB. CyxoB

Когда чего-то не понимаешь, почитай наконец справку!  :rtfmk:

 

Возвращаемое значение

Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

спасибо, конечно, за "помощь", но придется повторить вопрос:

 

я не понимаю КАК именно проверять, если мне просто нужно закрыть ордер.

 

if (OrderClose(MaxTicket,OrderLots(),Bid,0,Red)==TRUE.....а дальше что? 

Link to post
Share on other sites
AntFX

 

 

я не понимаю КАК именно проверять, если мне просто нужно закрыть ордер.

Если не понимаешь, значит предупреждение не для тебя, но чтобы оно исчезло вместо OrderClose(...) можешь подставить bool check=OrderClose(...), это уберет предупреждение


1

Link to post
Share on other sites
ToB. CyxoB

Если не понимаешь, значит предупреждение не для тебя, но чтобы оно исчезло вместо OrderClose(...) можешь подставить bool check=OrderClose(...), это уберет предупреждение

вот теперь понял! спасибо. 

Link to post
Share on other sites
ToB. CyxoB

Подскажите, как программно менять размер окна графика? 

и все таки... 

Link to post
Share on other sites
ZeleBoba

и все таки... 

можно только получить эти значения, они read only.

 

CHART_WIDTH_IN_BARS

Ширина графика в барах

int  r/o

CHART_WIDTH_IN_PIXELS

Ширина графика в пикселях

int  r/o

Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
Rumpelstiltskin

и все таки... 

 

Можно попробовать WinApi воспользоваться. Но это тема для отдельной дискуссии, не касается MQL, можно поискать в codebase на сайте mql, наверное, кто-то делал подобное. А зачем нужно менять размер окон?

Link to post
Share on other sites
ToB. CyxoB

Можно попробовать WinApi воспользоваться. Но это тема для отдельной дискуссии, не касается MQL, можно поискать в codebase на сайте mql, наверное, кто-то делал подобное. А зачем нужно менять размер окон?

нет. спасибо. это слишком сложно. Я думал можно проще - нажал кнопочку на экране, он увеличился, нажал еще раз - вернулся обратно. Это нужно для того чтобы посмотреть на пару глобально...при мультивалютной торговле на экране много мелких окон, как окошки амбразуры, :) через какое-то время теряешь ориентир....нужно взглянуть на все поле сверху...есть мульти раб столы, но еще удобнее было бы равернуть окна с кнопки. (руками слишком долго)

...

упс...неожиданно нашелся компромиссный вариант - растягивать окно кнопкой "завернуть"! :) кривовато(ибо не растягивает на ВСЕ экраны...а мне нужно на один), но лучше чем ничего...

Link to post
Share on other sites
ToB. CyxoB

можно только получить эти значения, они read only.

 

CHART_WIDTH_IN_BARS

Ширина графика в барах

int  r/o

CHART_WIDTH_IN_PIXELS

Ширина графика в пикселях

int  r/o

может быть можно открывать новый?  

Link to post
Share on other sites
ZeleBoba

может быть можно открывать новый?  

Да, конечно можно. Закрыть старый, открыть новый. Но тогда надо все настройки старого применить к новому и если были объекты, индикаторы, подокна и т.п. создать и настроить заново ((


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
ToB. CyxoB

Да, конечно можно. Закрыть старый, открыть новый. Но тогда надо все настройки старого применить к новому и если были объекты, индикаторы, подокна и т.п. создать и настроить заново ((

тогда лучше оставить , как есть...

Link to post
Share on other sites
ToB. CyxoB

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

Link to post
Share on other sites
ToB. CyxoB

Подскажите, что за фишка ? (взято из чужого советника)

сначала идет 

 

void OnTick()  {
   pro();
}
 
а потом 
 
void pro() 
{  ...и сама программа..
 
 
 
Что дает такая комбинация? 
чем она отличается от void start ()
Link to post
Share on other sites
STre

 

Подскажите, что за фишка ? (взято из чужого советника)

сначала идет 

 

void OnTick()  {
   pro();
}
 
а потом 
 
void pro() 
{  ...и сама программа..
 
 
 
Что дает такая комбинация? 
чем она отличается от void start ()

 

Отличия OnTick и OnStart прекрасно описаны в документации https://docs.mql4.com/basis/function/events

Имплементация вынесена в отдельную функцию - вероятно используется где-то еще, OnTimer, например.

Link to post
Share on other sites
ToB. CyxoB

Отличия OnTick и OnStart прекрасно описаны в документации https://docs.mql4.com/basis/function/events

Имплементация вынесена в отдельную функцию - вероятно используется где-то еще, OnTimer, например.

Какие катастрофически разные у нас с вами представления о "прекрасном". 

Прочитал справку - пустота...

 

постарайтесь адекватно отвечать на вопросы. Мой уровень - 3-й класс, 2-я четверть. Если вы уже защитили докторскую, не нужно на них отвечать "читайте справку" - это бессмысленно. Если они для вас настолько элементарные, что кроме как "читать справку" у вас другого нет ответа -    просто игнорируйте их. Они не вашего уровня. Тут нужна учительница начальных классов, которая о докторской и не мечтает, зато понимает, что если справка не помогает, то надо "деткам" на пальцах рассказать очень простые вещи.

 

Без обид. 

Link to post
Share on other sites
Rumpelstiltskin

 

Подскажите, что за фишка ? (взято из чужого советника)

сначала идет 

 

void OnTick()  {
   pro();
}
 
а потом 
 
void pro() 
{  ...и сама программа..
 
 
 
Что дает такая комбинация? 
чем она отличается от void start ()

 

OnStart вызывается только в скриптах, когда надо выполнить какое-то разовое действие

OnTick вызывается только в советниках, когда надо выполнять действия на приход котировки

Link to post
Share on other sites
Circle

OnStart вызывается только в скриптах, когда надо выполнить какое-то разовое действие

OnTick вызывается только в советниках, когда надо выполнять действия на приход котировки

Еще OnStart() был в советниках написанных где то до 600 билда, если не ошибаюсь. 

...

Для Сухова, не мучайтесь, во всех советниках используйте OnTick().

А вызов одной или нескольких функций из другой это есть приемы структурного (процедурного) программирования.

Например:

void OnTick()

{

   int res=Func1();

   if (res=1) Func2();

   if (res=2) Func3();

 

}


Что такое форекс? Это там где деньги лежат. 

Link to post
Share on other sites
ToB. CyxoB

Еще OnStart() был в советниках написанных где то до 600 билда, если не ошибаюсь. 

...

Для Сухова, не мучайтесь, во всех советниках используйте OnTick().

А вызов одной или нескольких функций из другой это есть приемы структурного (процедурного) программирования.

Например:

void OnTick()

{

   int res=Func1();

   if (res=1) Func2();

   if (res=2) Func3();

 

}

во блин...а я все по привычке использовал start, и ведь работало! и работает...в советниках!! 

 

 

а приемы структурного (процедурного) программирования  это вопрос только облегчения визуального восприятия кода, или есть и функциональный аспект? 

Link to post
Share on other sites
Circle

во блин...а я все по привычке использовал start, и ведь работало! и работает...в советниках!! 

 

 

а приемы структурного (процедурного) программирования  это вопрос только облегчения визуального восприятия кода, или есть и функциональный аспект? 

OnStart и сейчас работает, оставили для совместимость со старыми кодами.

...

И облегчает восприятие и функциональность улучшает и уменьшает трудозатраты программиста.

Если в коде встречается часто повторяемые однотипные действия то лучше все это оформить в виде отдельной функции.

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


Что такое форекс? Это там где деньги лежат. 

Link to post
Share on other sites
AntFX

Без копипаста все равно не обойтись - ведь систему классов нужно запускать как-то каждый раз однотипно ) Правда это уже шаблон, а не копипаст...

Edited by AntFX

1

Link to post
Share on other sites
Rumpelstiltskin

Без копипаста все равно не обойтись - ведь систему классов нужно запускать как-то каждый раз однотипно ) Правда это уже шаблон, а не копипаст...

Можно написать движок, который будет подгружать конфигурационный xml и все запускать.

Тогда выглядеть будет все примитивно, как-то так:

 

В OnInit

CServiceManager::Init("moving_averages.xml");

 

В Deinit

CServiceManager::Deinit();

 

В OnTick

CServiceManager::OnTick();

 

В ХМЛ только имена классов, которые надо создавать и параметры.

Link to post
Share on other sites
STre

Можно написать движок, который будет подгружать конфигурационный xml и все запускать.

Тогда выглядеть будет все примитивно, как-то так:

 

В OnInit

CServiceManager::Init("moving_averages.xml");

 

В Deinit

CServiceManager::Deinit();

 

В OnTick

CServiceManager::OnTick();

 

В ХМЛ только имена классов, которые надо создавать и параметры.

 

Я сделал без XML. Просто есть CManager класс, который вызывается в OnInit, OnTick, OnTimer и т.д. одной строчкой. Туда параметром передается поинтер на класс, в котором описывается логика конкретного советника или индикатора. В этом классе имплементировано только то, что ему надо. А manager уже разруливает когда что вызвать, что делать на закрытии ордеров, открытии, тиках, эвентах разных и т.д.

Копи-паст получается минимальный. Буквально минута, чтобы создать новый советник или индиктор + время на саму логику.

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

OnStart и сейчас работает, оставили для совместимость со старыми кодами.

...

И облегчает восприятие и функциональность улучшает и уменьшает трудозатраты программиста.

Если в коде встречается часто повторяемые однотипные действия то лучше все это оформить в виде отдельной функции.

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

С классами пока не сталкивался, а повторяющиеся элементы обязательно оформлены в пользовательские функции.  Тут я молодец!  :)

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...