Как получить доступ к GlobalVariables MT4 из других приложений? - страница 2

 
Integer:
Глабольные переменные в памяти не находятся, они из файла читаются и сразу в файл записываются.

О-как!!! Хорошо. А я сразу маны почитал, стал ковырять gvariables.dat и чего-то усомнился в этом. То есть, Вы хотите сказать, что  при открытом терминале каждый тик  gvariables.dat обновляется? Если это так, то как же??, как же?? его расковырять??? Подскажите, пожалуйста!!!
 
Не на каждом тике, записывается в файл при выполнении GlobalVariableSet(), а вот считывается ли из фала при каждом вызове GlobalVariableGet() не знаю. Скорее всего нет - считываются, но можно поэкспериментировать. Создать переменную, скопировать файл, удалить переменную, вернуть файл на место и попробовать снова получить переменную если она существует, значит из фала читается, если не существует, значит из памяти. Кстати и скопировать и токрыть закрыть файл получилось.


...........

Попробовал - записывается в файл только при создании или изменении значения, а GlobalVaribaleGet() - из памяти берет.
 
Integer:
Не на каждом тике, записывается в файл при выполнении GlobalVariableSet(), а вот считывается ли из фала при каждом вызове GlobalVariableGet() не знаю. Скорее всего нет - считываются, но можно поэкспериментировать. Создать переменную, скопировать файл, удалить переменную, вернуть файл на место и попробовать снова получить переменную если она существует, значит из фала читается, если не существует, значит из памяти. Кстати и скопировать и токрыть закрыть файл получилось.


...........

Попробовал - записывается в файл только при создании или изменении значения, а GlobalVaribaleGet() - из памяти берет.
Получается, если даже в файле поменять содержимое переменной, то MT об этом знать скорей всего не будет и читать будет из памяти старое значение?
Надо поразмыслить и пощупать получше что к чему.....
А еще такой важный вопрос. А не возникнет ли проблем с изменением gvariables.dat? На каком уровне защита этого файла построена? Возможно, терминал может отслеживать контрольную сумму или еще что-то, что бы быть уверенным что файл в порядке? Изменишь файл, а он ошибку выдавать будет или вообше улетит.
 
VBAG:

Спасибо Вам за столь обстоятельный ответ. Я относительно недавно занимаюсь с MT4 и хочу, прежде чем броситься с головой программировать советники, хочу до конца понять ограничения и возможности.
Сразу выяснился серьезный недостаток применения DLL для передачи информации от своего приложения в MT4:
-если DLL вызывается из советника, подгруженного на одном инструменте, то информация из моего приложения будет обработана только в момент прихода тика поэтому инструменту. Нет тика - нет информации, а на других инструментах жизнь продолжается, а сигнал к ним не пришел, поскольку тика на советник не поступало. При такой схеме, существует потенциальная возможность задержки сигнала.
В этой связи, возникает вопрос. Возможен ли вызов одной DLL из разных советников одновременно? При такой возможности можно развесить советники, которые будут обращаться к одной DLL по разным инструментам, что позволит снизить вероятность задержки сигнала. Кузяво как-то?...
Интересно, есть ли альтернативные способы загнать извне сигнал в MT4?
А на круг получается, что проще всего будет банально из советника читать сигнал и реал-тайм файла. Как вы думаете?

Информация может быть обработана не только в момент прихода тика по инструменту. Делается это элементарно - бесконечный цикл, в котором мы с заданной частотой (достаточно раз в секунду, но можно и чаще) передаем обновленные цены в приложение и получаем от этого приложения приказы. Весь обмен - через разделяемую память. Задержек нет.
Вызов DLL из разных советников возможен. Более того, у них даже будет одна область переменных! То есть советники смогут обмениваться друг с другом сигналами через переменные, объявленные внутри DLL.
Эту идею реализовать могу, делал нечто похожее.
Пишите - favoritefx@mail.ru
 
VBAG писал (а):

Получается, если даже в файле поменять содержимое переменной, то MT об этом знать скорей всего не будет и читать будет из памяти старое значение?
Надо поразмыслить и пощупать получше что к чему.....
А еще такой важный вопрос. А не возникнет ли проблем с изменением gvariables.dat? На каком уровне защита этого файла построена? Возможно, терминал может отслеживать контрольную сумму или еще что-то, что бы быть уверенным что файл в порядке? Изменишь файл, а он ошибку выдавать будет или вообше улетит.
Скорее всего нету такого контроля, но предпочел бы не трогать этот файл - на глобальных переменных обычно серьезные вещи в экспертах держаться, мало ли что, и приплыли...
 
Integer , Вы имеете ввиду системные вещи самого терминала или пользвательские? Просто согласитесь, это было бы красиво писать напрямую свои данные в gvariables.dat или в память.
 
favoritefx, Спасибо, за предложение и за помощь. Действительно, эсли тактировать самому вызов DLL-ки можно, то задержек не будет. Как лучше  организовать этот вызов, в цикле while? У меня с Омегой этот фокус не прошел(хотя, возможно где-то была ошибка).  
 
VBAG писал (а):
Integer , Вы имеете ввиду системные вещи самого терминала или пользвательские? Просто согласитесь, это было бы красиво писать напрямую свои данные в gvariables.dat или в память.


Не совсем понял про системные и пользовательские, скорее подразумевал терминал. Думаю, что наилушим вариантом была бы dll для обмена данными, без самодеятельности.
 
VBAG:
favoritefx, Спасибо, за предложение и за помощь. Действительно, эсли тактировать самому вызов DLL-ки можно, то задержек не будет. Как лучше организовать этот вызов, в цикле while? У меня с Омегой этот фокус не прошел(хотя, возможно где-то была ошибка).
С MQL4 все прекрасно работает!
Реализовывать работу нужно примерно так:
while (!isStopped())
{
   Sleep(SomeTime);
   RefleshRates();
   Action=SomeDLLFunction(Bid,IndikatorsValues,Orders[]);
   case (action)
   какие то де�ст�ия....
}
 
Да, конечно, самодейтельность надо отставить на второй план, и реализовывать обмен данными для начала простыми и надежными методами. Основная цель-торговля, а не эксперименты по программированию. Буду пробовать. Теперь все стало понятно. Благодарю вас за прояснение ситуации.