Ввод внешних данных в скрипт.

 

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

Глобал-е перем-е использовать не рацо. Наверно возможно подцепить OCX или DLL, но неизвестно какую и как это сделать.

Спасибо.

 

А #property show_inputs в начале скрипта и переменные с объявлением extern не то?

 
Sergey_Murzinov >>:

А #property show_inputs в начале скрипта и переменные с объявлением extern не то?

Спасибо, не знал. Тоже пригодится. Однако не совсем то. Запрос на ввод данных должен появляться уже в процессе выполнения скрипта. Хотелось бы что-то подобное, как делается в VBS или JS (prompt() ). Пока сойдет даже с одной строкой.

 
Можно еще при помощи MessageBox ответами на вопросы типа "Да-Нет" задать нужное направление выполнения проги.
 
Scriptong >>:
Можно еще при помощи MessageBox ответами на вопросы типа "Да-Нет" задать нужное направление выполнения проги.

Это понятно. Однако нужно конкретные данные вводить - цифры, буквы. Вроде это д.б. в VB... dll или ocx.В принципе, насколько я понимаю, надо в include всего пару строк написать.

Кстати, а нельзя-ли запустить VB-script или JavaScript на выполнение и оттуда данные передать в MQL. Там такие окна элементарно делаются, но с DDE там полная непонятка.

 

Еще об элементах управления. В MQL их катастрофически не хватает.

На данный момент нужно только одно поле ввода. А дальше?

Дальше нужны чекбокс, радио буттон, раскрывающиеся списки - в общем, стандартные для всех программ элементы управления. Что с ними делать - ума не приложу. ДЛЛ писать с такими вещами не рацо. Эт на каждый чих ее переделывать надо. Уходить во внешний мир и работать через API - ИМХО, не все через API подцепишь. Это надо бросать МТ4 и целиком через API работать. Но тогда проще напрямую с сервером брокера.

Ну вот такая задачка, например: скрипт или советник анализирует состояние рынка и хочет купить продать. Мы ему не очень доверяем и хотим контролировать ситуацию. Для этого на экран программа должна вывести подготовленную информацию, а мы должны, ну например, ввести размер позы и передвинуть стоп или отменить сделку - как еще, советник не знает наших планов на бабки. Да и вообще, не всегда автопилоту видней. :) А м.б. мы уще хотим настройки программы поменять по ходу пьесы, не прерывая процесс. В Win-программах это все элементарно, а здесь как?

В общем если подходить системно, нужны модальные окна произвольной конфигурации в основном окне МТ4, и окна контроля с элементами управления для управления выполнением скриптов - советников.

Однако пока нужно только одно поле.

 

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

#import "AutoItX3.dll"
void AU3_Init();
int  AU3_RunWait(string szRun, string szDir, int  nShowFlags);

int start()
{
  AU3_Init();
  int ret=AU3_RunWait("c:\\Program Files\\AutoIt3\\AutoIt3.exe Input.au3","G:\\MT\\experts\\scripts\\",0);
  Print("Задали "+ret);
}  

Сбрасываем скрипт на график. Он запускает внешнюю программу AutoIT3.exe (нужно есссесссно ее предварительно установить), которой на вход кормится исходный файл (на ее языке программирования).

Текст запускаемого AutoIT-файла который должен лежать в G:\MT\experts\scripts\Input.au3 (или в другом месте - но тогда нужно поправить путь в MQL-вызове):

#include <GuiConstants.au3>

GuiCreate("Вызов из MT4", 450, 60) ; создали окно

$text = GuiCtrlCreateInput("1235", 20, 20, 260, 20) ; создали поле для ввода
$b_Enter = GuiCtrlCreateButton("Задать", 280, 20, 60, 20) ; создали кнопку "Задать"
$b_Exit = GuiCtrlCreateButton("Выйти", 340, 20, 100, 20) ; создали кнопку "Выйти"

GuiSetState() ; показали окно ввода

While 1
$msg = GUIGetMsg() ; ждем событий из окна ввода
Select
Case $msg = $GUI_EVENT_CLOSE ; нажали X
ExitLoop
Case $msg = $b_Exit ; нажали кнопку "Выйти"
ExitLoop
Case $msg = $b_Enter ; нажали кнопку "Задать"
MsgBox(0, 'Задали', GUICtrlRead($text))
Exit(GUICtrlRead($text))
EndSelect
WEnd

Открывается окошко, в котром можно ввести нужную цифру (у меня на скрине -45). По нажатию кнопочку Задать введенная цифра помещается в код возврата, который можно получить в MQL-скрипте.


Этот способ позволяет ввести и передать в MQL-скрипт только целые числа. К сожалению, на этом мои изыскания в AutoIT и его связке с МТ закончились :(

В AutoIT можно делать ну почти все, что нужно для работы с формами, файлами, внешними DLL, закачкой файлов из инета и т.п. Его бейсикоподобный язык при изучении особых трудностей не вызывает (примеров - масса). Форму можно построить с использованием практически всех контролов (закладки, чек и радио боксы, списки и деревья, спин-кнопки, прогресс-бары, картинки и avi-шки.....) Дело за малым - нужно научится обмениваться данными между MQL и AutoIT (через память, обычные или INI-файлы, реестр...).

Может ктото из сообщества сумеет довести начатое мною до удобоваримого для применения вида?

 

Да можно проще, конечно. Если данных немного, то можно через .

Если данных много, то можно тоже через глобальные переменные, но в длинном списке разбираться трудно.

 
YUBA >>:

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

Глобал-е перем-е использовать не рацо. Наверно возможно подцепить OCX или DLL, но неизвестно какую и как это сделать.

Спасибо.

подумайте вариант с применением этой библиотеки 'Interception'

перехватывает мышь и клаву, я ее применил для превращения мелких окошек графиков в радио-баттоны

фантазия мне подсказывает что для вашей задачи можно ввод делать с клавы и контролировать его через Алерт или текстовыми метками (OBJ_LABEL)

 

Я считаю, так. - подцепить VBA к МТ ( м. прочим уже стандарт для многих приложений) или Javа, ну VBS или JAva- апплеты и нет проблем. Здесь какой-то дурдом, ИМХО, кривой язык, кривой функциоал, ИМХО, (Хотят Си-образный - договорись с Borlandom или MS) Почему все хотят выпендриться и не используют то, что есть? - не понимаю. Нужно то данне с сервера получать - и все.

Как бы с сервером напрямую сконнектится и пошли все с этим МТ4 и MQL.. Жалко, однако, столько полезного пропадет.

Всем ответившим - огромное спасибо.

Теперь другая задача - прямая связь с сервером. Минуя МТ. Ну его на. Хотя жалко, очень жалко.

Из того-же екселя или ассеса или оракла можно делать что угодно, а если добавить HTML ( вкупе с той же java например), то воще( стандарты надо использовать, а не свои языки придумывать. :) ).

Проще надо быть, товарищи, Проще. :) И народ потянется. :)

Кстати, на ММВБ, РТС все это возможно без проблем. Однако там сейчас не работа, - падаем,- шорты запрещены т. Миловидовым. Здесь - не знаю, новичек типа. :) И воще у меня демо-депо. :)), пока. :)

 
ForexTools >>:

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

Сбрасываем скрипт на график. Он запускает внешнюю программу AutoIT3.exe (нужно есссесссно ее предварительно установить), которой на вход кормится исходный файл (на ее языке программирования).

Текст запускаемого AutoIT-файла который должен лежать в G:\MT\experts\scripts\Input.au3 (или в другом месте - но тогда нужно поправить путь в MQL-вызове):

#include <GuiConstants.au3>

GuiCreate("Вызов из MT4", 450, 60) ; создали окно

$text = GuiCtrlCreateInput("1235", 20, 20, 260, 20) ; создали поле для ввода
$b_Enter = GuiCtrlCreateButton("Задать", 280, 20, 60, 20) ; создали кнопку "Задать"
$b_Exit = GuiCtrlCreateButton("Выйти", 340, 20, 100, 20) ; создали кнопку "Выйти"

GuiSetState() ; показали окно ввода

While 1
$msg = GUIGetMsg() ; ждем событий из окна ввода
Select
Case $msg = $GUI_EVENT_CLOSE ; нажали X
ExitLoop
Case $msg = $b_Exit ; нажали кнопку "Выйти"
ExitLoop
Case $msg = $b_Enter ; нажали кнопку "Задать"
MsgBox(0, 'Задали', GUICtrlRead($text))
Exit(GUICtrlRead($text))
EndSelect
WEnd

Открывается окошко, в котром можно ввести нужную цифру (у меня на скрине -45). По нажатию кнопочку Задать введенная цифра помещается в код возврата, который можно получить в MQL-скрипте.


Этот способ позволяет ввести и передать в MQL-скрипт только целые числа. К сожалению, на этом мои изыскания в AutoIT и его связке с МТ закончились :(

В AutoIT можно делать ну почти все, что нужно для работы с формами, файлами, внешними DLL, закачкой файлов из инета и т.п. Его бейсикоподобный язык при изучении особых трудностей не вызывает (примеров - масса). Форму можно построить с использованием практически всех контролов (закладки, чек и радио боксы, списки и деревья, спин-кнопки, прогресс-бары, картинки и avi-шки.....) Дело за малым - нужно научится обмениваться данными между MQL и AutoIT (через память, обычные или INI-файлы, реестр...).

Может ктото из сообщества сумеет довести начатое мною до удобоваримого для применения вида?

Все понял. Спасибо. Но вообще все через задницу. Зависит от знания WinAPI. Такие общепринятые вещи должны быть встроены, иначе это не язык, а дерьмо. Ну откуда мне, дураку, знать в какой ДЛЛ находится это окно ввода. :)

Вопрос к разработчикам: Почему в VB или Cбильдер это все делается элементарно без знания API?, а здесь такие сложности.

Однако, злой я сегодня. После встречи с одноклассниками. :)

Причина обращения: