Paukas 3,907 Share Posted July 13, 2016 (edited) не пойму как именно нужно проверять закрытие ордера? return value of 'OrderClose' should be checked OrderClose(MaxTicket,OrderLots(),Bid,0,Red); Все есть здесьhttps://docs.mql4.com/ru/trading/orderclose False или true Edited July 13, 2016 by Paukas Quote Link to post Share on other sites
AntFX 6,474 Share Posted July 13, 2016 не пойму как именно нужно проверять закрытие ордера? return value of 'OrderClose' should be checked OrderClose(MaxTicket,OrderLots(),Bid,0,Red); Когда чего-то не понимаешь, почитай наконец справку! Возвращаемое значение Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Quote 1 Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 13, 2016 Когда чего-то не понимаешь, почитай наконец справку! Возвращаемое значение Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). спасибо, конечно, за "помощь", но придется повторить вопрос: я не понимаю КАК именно проверять, если мне просто нужно закрыть ордер. if (OrderClose(MaxTicket,OrderLots(),Bid,0,Red)==TRUE.....а дальше что? Quote Link to post Share on other sites
AntFX 6,474 Share Posted July 13, 2016 я не понимаю КАК именно проверять, если мне просто нужно закрыть ордер. Если не понимаешь, значит предупреждение не для тебя, но чтобы оно исчезло вместо OrderClose(...) можешь подставить bool check=OrderClose(...), это уберет предупреждение Quote 1 Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 13, 2016 Если не понимаешь, значит предупреждение не для тебя, но чтобы оно исчезло вместо OrderClose(...) можешь подставить bool check=OrderClose(...), это уберет предупреждение вот теперь понял! спасибо. Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 14, 2016 Подскажите, как программно менять размер окна графика? и все таки... Quote Link to post Share on other sites
ZeleBoba 662 Share Posted July 14, 2016 (edited) и все таки... можно только получить эти значения, они read only. CHART_WIDTH_IN_BARS Ширина графика в барах int r/o CHART_WIDTH_IN_PIXELS Ширина графика в пикселях int r/o Edited July 14, 2016 by ZeleBoba Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
Rumpelstiltskin 765 Share Posted July 14, 2016 и все таки... Можно попробовать WinApi воспользоваться. Но это тема для отдельной дискуссии, не касается MQL, можно поискать в codebase на сайте mql, наверное, кто-то делал подобное. А зачем нужно менять размер окон? Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 14, 2016 Можно попробовать WinApi воспользоваться. Но это тема для отдельной дискуссии, не касается MQL, можно поискать в codebase на сайте mql, наверное, кто-то делал подобное. А зачем нужно менять размер окон? нет. спасибо. это слишком сложно. Я думал можно проще - нажал кнопочку на экране, он увеличился, нажал еще раз - вернулся обратно. Это нужно для того чтобы посмотреть на пару глобально...при мультивалютной торговле на экране много мелких окон, как окошки амбразуры, через какое-то время теряешь ориентир....нужно взглянуть на все поле сверху...есть мульти раб столы, но еще удобнее было бы равернуть окна с кнопки. (руками слишком долго) ... упс...неожиданно нашелся компромиссный вариант - растягивать окно кнопкой "завернуть"! кривовато(ибо не растягивает на ВСЕ экраны...а мне нужно на один), но лучше чем ничего... Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 14, 2016 можно только получить эти значения, они read only. CHART_WIDTH_IN_BARS Ширина графика в барах int r/o CHART_WIDTH_IN_PIXELS Ширина графика в пикселях int r/o может быть можно открывать новый? Quote Link to post Share on other sites
ZeleBoba 662 Share Posted July 15, 2016 может быть можно открывать новый? Да, конечно можно. Закрыть старый, открыть новый. Но тогда надо все настройки старого применить к новому и если были объекты, индикаторы, подокна и т.п. создать и настроить заново (( Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 Да, конечно можно. Закрыть старый, открыть новый. Но тогда надо все настройки старого применить к новому и если были объекты, индикаторы, подокна и т.п. создать и настроить заново (( тогда лучше оставить , как есть... Quote Link to post Share on other sites
Paukas 3,907 Share Posted July 15, 2016 и все таки... https://forum.mql4.com/ru/25105 Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 https://forum.mql4.com/ru/25105 Спасибо, конечно, но разворачивать окно полностью программно смысла нет.. для этого есть стандартная кнопка Виндовса. Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 Подскажите, что за фишка ? (взято из чужого советника) сначала идет void OnTick() { pro(); } а потом void pro() { ...и сама программа.. Что дает такая комбинация? чем она отличается от void start () Quote Link to post Share on other sites
STre 7 Share Posted July 15, 2016 Подскажите, что за фишка ? (взято из чужого советника) сначала идет void OnTick() { pro(); } а потом void pro() { ...и сама программа.. Что дает такая комбинация? чем она отличается от void start () Отличия OnTick и OnStart прекрасно описаны в документации https://docs.mql4.com/basis/function/events Имплементация вынесена в отдельную функцию - вероятно используется где-то еще, OnTimer, например. Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 Отличия OnTick и OnStart прекрасно описаны в документации https://docs.mql4.com/basis/function/events Имплементация вынесена в отдельную функцию - вероятно используется где-то еще, OnTimer, например. Какие катастрофически разные у нас с вами представления о "прекрасном". Прочитал справку - пустота... постарайтесь адекватно отвечать на вопросы. Мой уровень - 3-й класс, 2-я четверть. Если вы уже защитили докторскую, не нужно на них отвечать "читайте справку" - это бессмысленно. Если они для вас настолько элементарные, что кроме как "читать справку" у вас другого нет ответа - просто игнорируйте их. Они не вашего уровня. Тут нужна учительница начальных классов, которая о докторской и не мечтает, зато понимает, что если справка не помогает, то надо "деткам" на пальцах рассказать очень простые вещи. Без обид. Quote Link to post Share on other sites
Rumpelstiltskin 765 Share Posted July 15, 2016 Подскажите, что за фишка ? (взято из чужого советника) сначала идет void OnTick() { pro(); } а потом void pro() { ...и сама программа.. Что дает такая комбинация? чем она отличается от void start () OnStart вызывается только в скриптах, когда надо выполнить какое-то разовое действие OnTick вызывается только в советниках, когда надо выполнять действия на приход котировки Quote Link to post Share on other sites
Circle 147 Share Posted July 15, 2016 OnStart вызывается только в скриптах, когда надо выполнить какое-то разовое действие OnTick вызывается только в советниках, когда надо выполнять действия на приход котировки Еще OnStart() был в советниках написанных где то до 600 билда, если не ошибаюсь. ... Для Сухова, не мучайтесь, во всех советниках используйте OnTick(). А вызов одной или нескольких функций из другой это есть приемы структурного (процедурного) программирования. Например: void OnTick() { int res=Func1(); if (res=1) Func2(); if (res=2) Func3(); } Quote Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 Еще OnStart() был в советниках написанных где то до 600 билда, если не ошибаюсь. ... Для Сухова, не мучайтесь, во всех советниках используйте OnTick(). А вызов одной или нескольких функций из другой это есть приемы структурного (процедурного) программирования. Например: void OnTick() { int res=Func1(); if (res=1) Func2(); if (res=2) Func3(); } во блин...а я все по привычке использовал start, и ведь работало! и работает...в советниках!! а приемы структурного (процедурного) программирования это вопрос только облегчения визуального восприятия кода, или есть и функциональный аспект? Quote Link to post Share on other sites
Circle 147 Share Posted July 15, 2016 во блин...а я все по привычке использовал start, и ведь работало! и работает...в советниках!! а приемы структурного (процедурного) программирования это вопрос только облегчения визуального восприятия кода, или есть и функциональный аспект? OnStart и сейчас работает, оставили для совместимость со старыми кодами. ... И облегчает восприятие и функциональность улучшает и уменьшает трудозатраты программиста. Если в коде встречается часто повторяемые однотипные действия то лучше все это оформить в виде отдельной функции. А еще лучше создать отдельный модуль или класс (это уже из ООП) часто используемых функций и уже потом в последующих разработках его использовать, а не применять копи-паст повторяющегося кода. Я например заметил если у меня возникает желание сделать копи-паст, то я уже на автомате начинаю думать можно ли все это оформить в виде отдельной функции. Quote Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
AntFX 6,474 Share Posted July 15, 2016 (edited) Без копипаста все равно не обойтись - ведь систему классов нужно запускать как-то каждый раз однотипно ) Правда это уже шаблон, а не копипаст... Edited July 15, 2016 by AntFX Quote 1 Link to post Share on other sites
Rumpelstiltskin 765 Share Posted July 15, 2016 Без копипаста все равно не обойтись - ведь систему классов нужно запускать как-то каждый раз однотипно ) Правда это уже шаблон, а не копипаст... Можно написать движок, который будет подгружать конфигурационный xml и все запускать. Тогда выглядеть будет все примитивно, как-то так: В OnInit CServiceManager::Init("moving_averages.xml"); В Deinit CServiceManager::Deinit(); В OnTick CServiceManager::OnTick(); В ХМЛ только имена классов, которые надо создавать и параметры. Quote Link to post Share on other sites
STre 7 Share Posted July 15, 2016 (edited) Можно написать движок, который будет подгружать конфигурационный xml и все запускать. Тогда выглядеть будет все примитивно, как-то так: В OnInit CServiceManager::Init("moving_averages.xml"); В Deinit CServiceManager::Deinit(); В OnTick CServiceManager::OnTick(); В ХМЛ только имена классов, которые надо создавать и параметры. Я сделал без XML. Просто есть CManager класс, который вызывается в OnInit, OnTick, OnTimer и т.д. одной строчкой. Туда параметром передается поинтер на класс, в котором описывается логика конкретного советника или индикатора. В этом классе имплементировано только то, что ему надо. А manager уже разруливает когда что вызвать, что делать на закрытии ордеров, открытии, тиках, эвентах разных и т.д. Копи-паст получается минимальный. Буквально минута, чтобы создать новый советник или индиктор + время на саму логику. Edited July 15, 2016 by STre Quote Link to post Share on other sites
ToB. CyxoB 324 Share Posted July 15, 2016 OnStart и сейчас работает, оставили для совместимость со старыми кодами. ... И облегчает восприятие и функциональность улучшает и уменьшает трудозатраты программиста. Если в коде встречается часто повторяемые однотипные действия то лучше все это оформить в виде отдельной функции. А еще лучше создать отдельный модуль или класс (это уже из ООП) часто используемых функций и уже потом в последующих разработках его использовать, а не применять копи-паст повторяющегося кода. Я например заметил если у меня возникает желание сделать копи-паст, то я уже на автомате начинаю думать можно ли все это оформить в виде отдельной функции. С классами пока не сталкивался, а повторяющиеся элементы обязательно оформлены в пользовательские функции. Тут я молодец! Quote Link to post Share on other sites
Recommended Posts
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.