Часы реального времени MQL4 (секунда за секундой) - страница 5

 
7bit:

Это всего лишь горстка строк в mql4 (конечно, вам нужны DLL, разрешенные для вызова API windows, но вам не нужно ничего устанавливать):

У меня этот скрипт в избранном, и когда мне нужны тики, я просто перетаскиваю его на график.


У меня также есть вариант этого скрипта без цикла, который посылает только один тик, а затем выходит, и я привязал его (one_tick.mq4) к горячей клавише ALT+T, и теперь я могу посылать тик на активный график, просто нажав ALT-T. Мне это нужно для некоторых моих советников stat-arb, когда я экспериментирую в выходные, чтобы заставить start() запускать их вычисления и построение графиков (я могу перемещать линии на графике, чтобы изменить интервал, а затем мне нужен новый тик, чтобы обновить их вычисления).


7 Я никогда не использовал импорт dll, поэтому не могли бы вы объяснить следующее.

+ Нужно ли включать файлы dll в папку Meta Trader Client?

+ Как мы можем включить этот советник из клиента MT?

Приведите, пожалуйста, примеры импорта DLL в Meta Trader.

 
spidermagos:


7 Я никогда не использовал импорт dll, поэтому не могли бы вы объяснить следующее.

+ Нужно ли включать файлы dll в папку Meta Trader Client?

+ Как мы можем включить этот советник из клиента MT?

Приведите, пожалуйста, примеры импорта DLL в Meta Trader.

Мне очень жаль сообщать вам, что вы не сможете извлечь из этого никакой пользы (или даже понять, для каких целей это можно использовать), пока не научитесь читать текст длиннее 140 символов.

Для начала вы могли бы попытаться извлечь смысл из текста, который вы только что процитировали в своем последнем сообщении. Вы обнаружите, что я описал его как скрипт, а не как советник, более того, к вашему большому удивлению, вы обнаружите, что я написал, что нет необходимости устанавливать какие-либо dll, и вы даже сможете найти те части текста, где я объяснил, как его следует использовать.

 
7bit:

Мне жаль сообщать вам, что вы совершенно не сможете использовать его (или даже понять, для какой цели он может быть использован), пока не научитесь читать текст длиннее 140 символов.

Для начала вы могли бы попытаться извлечь смысл из текста, который вы только что процитировали в своем последнем сообщении. Вы обнаружите, что я описал его как скрипт, а не как советник, более того, к вашему большому удивлению, вы обнаружите, что я написал, что нет необходимости устанавливать какие-либо dll, и вы даже сможете найти те части текста, где я объяснил, как его следует использовать.

Я восхищаюсь вашим высокомерием, вашим знанием английского языка и, возможно, вашим примером кодирования.

Но решение проблемы без предоставления решения - это просто уход от вопроса.

7 bit вместо того, чтобы подвергать сомнению мои способности и технику чтения, почему бы вам не написать всю программу и не доказать свою правоту. вместо того, чтобы философствовать!

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

 

вы можете просто сложить 2 и 2.

Используйте код 7bit для генерации фальшивых тиков в сочетании с кодом, который я разместил, и у вас есть все, что вам нужно.

И кстати, 7bit кажется одним из лучших программистов, которые участвуют в этом форуме...

//z

 

spidermagos:

Я восхищаюсь вашим высокомерием

Спасибо.


spidermagos:

почему бы вам не написать всю программу и не доказать свою правоту. вместо того, чтобы философствовать!

Скрипт завершен и работает автономно, точно в рамках спецификаций, которые я дал.

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

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

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

Запустите эти программы в разных графиках.

 
Ais:

Запустите эти программы на разных графиках.


Ais ; 7bit прав, это не будет работать! функция запуска - тик за тиком

Для решения этой проблемы необходим импорт dll. ...

т.е. вызов скриптов из индикаторов

 
7bit:

Спасибо.


Скрипт завершен и работает автономно, точно в рамках спецификаций, которые я дал.

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

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



7bit - как можно вызвать скрипт из индикатора?

Можете ли вы привести пример?

 
spidermagos:

Насколько я понимаю, функция Start() работает тик за тиком.

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

Если да, пожалуйста, помогите мне.

спасибо

привет, вы можете использовать отдельное приложение для отправки тиков вместо скрипта (есть несколько бесплатных; погуглите "mt4 tick sender") и заставить его генерировать тики каждые 200 мс или около того...Затем убедитесь, что часы вашего компьютера часто синхронизируются, и используйте TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 вместо TimeCurrent(), потому что с генерируемыми тиками вы "только" заставляете Start() выполняться, TimeCurrent() НЕ будет обновляться, если тик не приходит от вашего брокера.. таким образом вы будете получать время вашего брокера секунда за секундой. это работает как для индикаторов, так и для советников. забавно, но есть несколько брокеров, у которых серверы не синхронизированы по времени, они отстают на несколько секунд, но только временная метка, к сожалению, не цена, разные свечи, M1 полностью отличается иногда, когда есть импульс, lol
 

Сначала поместите логику, которую вы имеете в start, в функцию.

Затем сделайте цикл while в init() с sleep и вызовите функцию оттуда. Помните, что sleep - это миллисекунды.

Это позволит вам контролировать время, а не ждать изменения цены.

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

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