Т.е. скрипт фактически от советника ниче не отличается. Может также работать долгое время, открывать и закрывать ордера?
Скрипт по определению выполняется один раз. Открывать/закрывать ордера он может только единожды, во время запуска. Вам, как я понимаю, может потребоваться довольно длительная работа программы по осуществлению торговой стратегии. И только при возникновении определённых условий работа программы должна быть прекращена. Думается, что это должен быть всё-таки эксперт.
Посмотрите, пожалуйста, вышепреведённый код. Он как раз реализует остановку по условию. И вновь запускается либо при удалении графика и повторном присоединении эксперта, либо при удалении самого эксперта с последующим присоединением вновь.
Задать глобальную переменную, проинициализировать ее например true. В начале функции start проверять ее на истинность, иначе return нах. После выполнения "определенного" условия присвоить ей false. Примерно так.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
Такая идея:
Записывать значение переменной в файл. При загрузке терминала, советник обращается к файлу и считывает значение переменной.
А для запуска советника, чтобы он снова работал - два варианта:
1) Перед новым включением советника вручную удалить прежний файл, советник создаст его по новой с записью текущего значения переменной.
2) В параметрах советника сделать флаг. И при новом включении советника менять в параметрах значение флага на новое (если до этого был параметр TRUE, меняем на FALSE и наоборот). В файле помимо значения переменной, пишем параметр флага. И если при новом включении флаг не совпадает - советник запускается, файл обнуляется и записываются текущие значения флага и переменной. Если флаг совпадает - файл не обнуляется, советник считывает прошлую запись из файла.
"Никогда не говори никогда". Как-то спотыкался... В файл надежнее ИМХО.
Переменные GlobalVariables
В клиентском терминале может работать несколько прикладных программ одновременно. В ряде случаев возникает необходимость передать какие-то сведения из одной программы в другую. Специально для этого в языке MQL4 созданы глобальные переменные клиентского терминала.
Глобальная переменная клиентского терминала - переменная, значение которой доступно из всех прикладных программ, запущенных на клиентском терминале (сокращённо - GV-переменная).
Обратите внимание, глобальная переменная клиентского терминала и глобальная переменная - это разные переменные с похожими названиями. Областью видимости глобальных переменных является одна программа, в которой эта переменная объявлена, а областью видимости глобальных переменных клиентского терминала - все программы, одновременно запущенные в клиентском терминале.
Свойства GV-переменных
В отличие от других переменных, GV-переменная может быть не только создана из любой программы, но и удалена. Значение GV-переменной сохраняется на жёстком диске компьютера и после закрытия клиентского терминала. Однажды объявленная GV-переменная существует в клиентском терминале в течение 4 недель с момента последнего обращения. Если в течение указанного срока ни одна из программ не обращалась к GV-переменной, то она удаляется клиентским терминалом. GV-переменная может иметь только тип double.
Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)
Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)
:)
Сам пользуюсь файлами.... Но когда нескольким экспертам надо мгновенно передать новое значение параметра, лучше глобальной переменной не найти...
Т.е. скрипт фактически от советника ниче не отличается. Может также работать долгое время, открывать и закрывать ордера?
Скрипт по определению выполняется один раз. Открывать/закрывать ордера он может только единожды, во время запуска. Вам, как я понимаю, может потребоваться довольно длительная работа программы по осуществлению торговой стратегии. И только при возникновении определённых условий работа программы должна быть прекращена. Думается, что это должен быть всё-таки эксперт.
Посмотрите, пожалуйста, вышепреведённый код. Он как раз реализует остановку по условию. И вновь запускается либо при удалении графика и повторном присоединении эксперта, либо при удалении самого эксперта с последующим присоединением вновь.
Задать глобальную переменную, проинициализировать ее например true. В начале функции start проверять ее на истинность, иначе return нах. После выполнения "определенного" условия присвоить ей false. Примерно так.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
Остается запись/чтение переменной в файл. Но скрипт для таких целей не вариант.
Все это несложно, думаю если на заказ не более 10-15$. Желающие найдутся.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
Выше я привёл пример кода. Там используеся глобальная переменная клиентского терминала. Она ни в коем случае не теряется при перезагрузке.
Она ни в коем случае не теряется при перезагрузке.
"Никогда не говори никогда". Как-то спотыкался... В файл надежнее ИМХО.
У варианта с глобальной переменной есть недостаток.
При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.
Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.
Такая идея:
Записывать значение переменной в файл. При загрузке терминала, советник обращается к файлу и считывает значение переменной.
А для запуска советника, чтобы он снова работал - два варианта:
1) Перед новым включением советника вручную удалить прежний файл, советник создаст его по новой с записью текущего значения переменной.
2) В параметрах советника сделать флаг. И при новом включении советника менять в параметрах значение флага на новое (если до этого был параметр TRUE, меняем на FALSE и наоборот). В файле помимо значения переменной, пишем параметр флага. И если при новом включении флаг не совпадает - советник запускается, файл обнуляется и записываются текущие значения флага и переменной. Если флаг совпадает - файл не обнуляется, советник считывает прошлую запись из файла.
"Никогда не говори никогда". Как-то спотыкался... В файл надежнее ИМХО.
Переменные GlobalVariables
В клиентском терминале может работать несколько прикладных программ одновременно. В ряде случаев возникает необходимость передать какие-то сведения из одной программы в другую. Специально для этого в языке MQL4 созданы глобальные переменные клиентского терминала.
Глобальная переменная клиентского терминала - переменная, значение которой доступно из всех прикладных программ, запущенных на клиентском терминале (сокращённо - GV-переменная).
Свойства GV-переменных
В отличие от других переменных, GV-переменная может быть не только создана из любой программы, но и удалена. Значение GV-переменной сохраняется на жёстком диске компьютера и после закрытия клиентского терминала. Однажды объявленная GV-переменная существует в клиентском терминале в течение 4 недель с момента последнего обращения. Если в течение указанного срока ни одна из программ не обращалась к GV-переменной, то она удаляется клиентским терминалом. GV-переменная может иметь только тип double.
....
Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)
Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)
:)
Сам пользуюсь файлами.... Но когда нескольким экспертам надо мгновенно передать новое значение параметра, лучше глобальной переменной не найти...
int start()
{
OrderSend("GBPUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
return;
}
можете объяснить почему этот советник не торгует?