Помогите "чайнику"! - страница 2

 
portos писал (а) >>

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

Скрипт по определению выполняется один раз. Открывать/закрывать ордера он может только единожды, во время запуска. Вам, как я понимаю, может потребоваться довольно длительная работа программы по осуществлению торговой стратегии. И только при возникновении определённых условий работа программы должна быть прекращена. Думается, что это должен быть всё-таки эксперт.

Посмотрите, пожалуйста, вышепреведённый код. Он как раз реализует остановку по условию. И вновь запускается либо при удалении графика и повторном присоединении эксперта, либо при удалении самого эксперта с последующим присоединением вновь.

 
Figar0 писал(а) >>

Задать глобальную переменную, проинициализировать ее например true. В начале функции start проверять ее на истинность, иначе return нах. После выполнения "определенного" условия присвоить ей false. Примерно так.

У варианта с глобальной переменной есть недостаток.

При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.

Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.

 
portos писал(а) >>

У варианта с глобальной переменной есть недостаток.

При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.

Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.

Остается запись/чтение переменной в файл. Но скрипт для таких целей не вариант.

Все это несложно, думаю если на заказ не более 10-15$. Желающие найдутся.

 
portos писал (а) >>

У варианта с глобальной переменной есть недостаток.

При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.

Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.

Выше я привёл пример кода. Там используеся глобальная переменная клиентского терминала. Она ни в коем случае не теряется при перезагрузке.

 
Sergo писал(а) >>

Она ни в коем случае не теряется при перезагрузке.

"Никогда не говори никогда". Как-то спотыкался... В файл надежнее ИМХО.

 
portos >>:

У варианта с глобальной переменной есть недостаток.

При повторной загрузке метатрейдера например по причине перезагрузки компьютера, советник инициализируется по новой.

Т.е. нужна переменная, которая сохраняет значение даже при перезагрузке компьютера.

Такая идея:

Записывать значение переменной в файл. При загрузке терминала, советник обращается к файлу и считывает значение переменной.

А для запуска советника, чтобы он снова работал - два варианта:

1) Перед новым включением советника вручную удалить прежний файл, советник создаст его по новой с записью текущего значения переменной.

2) В параметрах советника сделать флаг. И при новом включении советника менять в параметрах значение флага на новое (если до этого был параметр TRUE, меняем на FALSE и наоборот). В файле помимо значения переменной, пишем параметр флага. И если при новом включении флаг не совпадает - советник запускается, файл обнуляется и записываются текущие значения флага и переменной. Если флаг совпадает - файл не обнуляется, советник считывает прошлую запись из файла.

 
Figar0 писал(а) >>

"Никогда не говори никогда". Как-то спотыкался... В файл надежнее ИМХО.

Переменные GlobalVariables


В клиентском терминале может работать несколько прикладных программ одновременно. В ряде случаев возникает необходимость передать какие-то сведения из одной программы в другую. Специально для этого в языке MQL4 созданы глобальные переменные клиентского терминала.

Глобальная переменная клиентского терминала - переменная, значение которой доступно из всех прикладных программ, запущенных на клиентском терминале (сокращённо - GV-переменная).


Обратите внимание, глобальная переменная клиентского терминала и глобальная переменная - это разные переменные с похожими названиями. Областью видимости глобальных переменных является одна программа, в которой эта переменная объявлена, а областью видимости глобальных переменных клиентского терминала - все программы, одновременно запущенные в клиентском терминале.

Свойства GV-переменных


В отличие от других переменных, GV-переменная может быть не только создана из любой программы, но и удалена. Значение GV-переменной сохраняется на жёстком диске компьютера и после закрытия клиентского терминала. Однажды объявленная GV-переменная существует в клиентском терминале в течение 4 недель с момента последнего обращения. Если в течение указанного срока ни одна из программ не обращалась к GV-переменной, то она удаляется клиентским терминалом. GV-переменная может иметь только тип double.

 
kharko писал(а) >>

....

Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)

 
Figar0 писал(а) >>

Спасибо конечно). Знаю я это все. Вот только после одного случая предпочитаю обходиться без этих GV. С файлом понятнее и прозрачнее, хотя согласен архаично, но как по мне надежнее, знаешь когда значение сохранено, результат операции сохрания можно проконтролировать, знаешь что и через X недель оно не исчезнет, переменную можно перенести вместе с экспертом и т.д. Каждому свое, а может просто я уже програмирование больше 10 лет назад изучал, старый стал, как экскременты мамонта и методы использую соответствующие:)

:)

Сам пользуюсь файлами.... Но когда нескольким экспертам надо мгновенно передать новое значение параметра, лучше глобальной переменной не найти...

 

int start()
{
OrderSend("GBPUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
return;
}

можете объяснить почему этот советник не торгует?

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