Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 237

 
Sergey Likho:

Индикатор из МТ5 рисует линию двумя цветами. 

Значения линии находятся в одном буфере. 

Можно ли как-то определить цвет линии при запросе значений из индикатора?

Можно. Цвет линии хранится в буфере цвета. Если линия одна, то буфер значения 0, а буфер цвета 1. Соответственно в CopyBuffer ставите вторым параметром 1.
 
Ventura:

Если нельзя вывести окно параметров программно, то подскажите можно ли как-то инициализировать параметры

input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;
 
Евгений:
   

Что посоветуете?

Прежде ордера нужно отсеять по символу и магику. У Вас осталось два ордера. Выбираете тот, который хотите удалить по Вашему условию. Удаляете, остаётся один, меняете стоплос.

 
Aleksei Stepanenko
input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;

Алексей, я просил подсказать как вызвать функцию вычисления параметров ДО появления окна параметров, а не после.

Вопрос открыт: можно ли вызвать окно параметров ПРОГРАММНО ? Если нет, то можно ли проинициализировать параметры из функции ДО появления окна параметров.

Хотелось бы сделать типа того:

input double BuyStop = GetMyBuyStop();

Но выходит ошибка что справа может быть только константа (

 
Ventura:

Алексей, я просил подсказать как вызвать функцию вычисления параметров ДО появления окна параметров, а не после.

Вопрос открыт: можно ли вызвать окно параметров ПРОГРАММНО ? Если нет, то можно ли проинициализировать параметры из функции ДО появления окна параметров.

Хотелось бы сделать типа того:

input double BuyStop = GetMyBuyStop();

Но выходит ошибка что справа может быть только константа (

До появления окна параметров ничего нет, всё начинается только потом, когда окно уже загружено

 

Точно Виталий сказал!

Создайте панельку на графике, управляйте переменными оттуда.

 
Vitaly Muzichenko:

До появления окна параметров ничего нет, всё начинается только потом, когда окно уже загружено

Я это знаю, поэтому и жду совета профессионалов. Может быть это можно сделать нестандартными средствами, через Win API или ещё как-нибудь.

Неужели никак нельзя показать окно программно, из кода ?

 
Ventura:

Я это знаю, поэтому и жду совета профессионалов. Может быть это можно сделать нестандартными средствами, через Win API или ещё как-нибудь.

Неужели никак нельзя показать окно программно, из кода ?

Советник до его инициализации (а ввод параметров происходит ещё до инициализации) не доступен, не работает... Перед инициализацией советника вам доступно окно его параметров. Но оно вас не устраивает. Значит используйте иной ввод нужных значений - после инициализации советника. Вам доступно окно функции MessageBox(). Но оно вам мало чем поможет - там нет полей ввода значений - есть только кнопки согласия/несогласия/отмены.

Значит - вам нужно использовать собственное окно. И оно есть - вы его можете создать сами из объектов. Ищите в ObjectCreate(). Или используйте канвас. Но канвас не для простых поделок.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
ObjectCreate - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Советник до его инициализации (а ввод параметров происходит ещё до инициализации) не доступен, не работает... Перед инициализацией советника вам доступно окно его параметров. Но оно вас не устраивает. Значит используйте иной ввод нужных значений - после инициализации советника. Вам доступно окно функции MessageBox(). Но оно вам мало чем поможет - там нет полей ввода значений - есть только кнопки согласия/несогласия/отмены.

Значит - вам нужно использовать собственное окно. И оно есть - вы его можете создать сами из объектов. Ищите в ObjectCreate(). Или используйте канвас. Но канвас не для простых поделок.

Артём, спасибо, ждал именно Вашего совета. Пока ждал, сам искал возможные решения. Сегодня утром придумал как программно показать окно настроек !

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

Дальше дело техники. Выкладываю код, может кому пригодится:

extern double BuyStop, SellStop;

...

void SetParams()
  {
   BuyStop = CalcBuyStop();
   SellStop = CalcSellStop();
   int handle = WindowHandle(Symbol(), 0);
   PostMessageA(handle,WM_KEYDOWN,VK_F7,0);
  } 
 

Вот только рано я радовался. Окно с параметрами программно открыть удалось, но значения, которые я присвоил параметрам в процедуре, не сохранились (((

То есть при открытии окна параметров я вижу значения, указанные при инициализации, в моём случае нули.

Можно ли как-то сделать, чтобы в форму параметров передались вычисленные значения ?