Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 577
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну я бы оформил всё это в функцию, и вызывал бы её когда мне это нужно - хоть на каждом тике (если оправдано и необходимо), хоть на открытии новой свечи - раз в час например, если на Н1 работаем.
С функцией удобно конечно. Код я разобрал что к чему. Теперь стало понятно. Буду думать, как его привести к тем целям, которые я хочу и понять, когда и на каком этапе вынимать нужные данные.
Если бы это было прям "верх безрассудства", оно было бы запрещено.
WinAPI значительно расширяет возможности MQL. А наделать глупостей можно и без dll.
А вот пример передачи строки в буфер обмена:
Отлично, ещё и с комментариями.
Благодарю.
Ещё вопрос.
Нельзя - ли сделать эмуляцию клика "мышки" по заданным координатам?
Отлично, ещё и с комментариями.
Благодарю.
Ещё вопрос.
Нельзя - ли сделать эмуляцию клика "мышки" по заданным координатам?
Отлично, ещё и с комментариями.
Благодарю.
Ещё вопрос.
Нельзя - ли сделать эмуляцию клика "мышки" по заданным координатам?
Можно.
Ну я бы оформил всё это в функцию, и вызывал бы её когда мне это нужно - хоть на каждом тике (если оправдано и необходимо), хоть на открытии новой свечи - раз в час например, если на Н1 работаем.
Артем, я же правильно понимаю, что если у нас идет цикл:for(int i=0; i<copy_bars; i++) и в него вложен for(int j=0; j<copy_bars; j++) , где if(j==i) continue; ,
то это будет значить, что подсчет идет параллельно и если у нас грубо 5 свечей, то сравнение будет идти:
1 с 1 - выбрасываем.
1 с 2й, 1 с 3й, 1 с 4й, 1 с 5й.
далее запустится цикл, где будет:
2я с 1й, 2я с 3й, 2я с 4й, 2я с 5й.
и так далее.
Так же будет?
Артем, я же правильно понимаю, что если у нас идет цикл:for(int i=0; i<copy_bars; i++) и в него вложен for(int j=0; j<copy_bars; j++) , где if(j==i) continue; ,
то это будет значить, что подсчет идет параллельно и если у нас грубо 5 свечей, то сравнение будет идти:
1 с 1 - выбрасываем.
1 с 2й, 1 с 3й, 1 с 4й, 1 с 5й.
далее запустится цикл, где будет:
2я с 1й, 2я с 3й, 2я с 4й, 2я с 5й.
и так далее.
Так же будет?
Да.
Еще вопрос: Если нам не нужно сравнивать текущую свечу, то разве нам не нужно запускать счет с 1, а не с нуля?
или надо понимать, что тут 0 - это свеча 1, 1 - это свеча 2 и т.д.?
Еще вопрос: Если нам не нужно сравнивать текущую свечу, то разве нам не нужно запускать счет с 1, а не с нуля?
или надо понимать, что тут 0 - это свеча 1, 1 - это свеча 2 и т.д.?
Тут ноль - это начало массива. А в массив мы пишем свечи от первой, до ..., не "до", а в нужном нам количестве:
1 - это номер свечи, с которой начинаем копирование, а copy_bars - это количество свечей, которое нужно скопировать.
Поэтому в массиве array[] у нас содержится в ячейке с индексом 0 нужная нам свеча - либо 1, либо 1+copy_bars-1. в зависимости от направления индексации массива array[] (ArraySetAsSeries() задаёт направление индексации, которое можно проверить при помощи ArrayGetAsSeries(), ArrayIsSeries())
Тут ноль - это начало массива. А в массив мы пишем свечи от первой, до ..., не "до", а в нужном нам количестве:
1 - это номер свечи, с которой начинаем копирование, а copy_bars - это количество свечей, которое нужно скопировать.
Поэтому в массиве array[] у нас содержится в ячейке с индексом 0 нужная нам свеча - либо 1, либо 1+copy_bars-1. в зависимости от направления индексации массива array[] (ArraySetAsSeries() задаёт направление индексации, которое можно проверить при помощи ArrayGetAsSeries(), ArrayIsSeries())
Ох уж это программирование. Чем дальше в лес....
я проверил сначала просто через Алерт, что он выдает. Выходит, что все наоборот, т.е. ближайшая к текущей свеча имеет максимальный номер.
Потом проверил через:
bool series=ArrayIsSeries(dataCandle);
Alert (series);
и Скрипт выдал "false"
по моей логике, если false, это не с того конца, то true будет с того, что надо.
Я прописал:
ArraySetAsSeries (dataCandle, true); //смена направления
bool series=ArrayIsSeries(dataCandle); //заново проверяю что получилось
Alert (series); //вывожу результат на экран.
Но все равно после этого я получаю "false" .
В чем мой косяк?
Ох уж это программирование. Чем дальше в лес....
я проверил сначала просто через Алерт, что он выдает. Выходит, что все наоборот, т.е. ближайшая к текущей свеча имеет максимальный номер.
Потом проверил через:
bool series=ArrayIsSeries(dataCandle);
Alert (series);
и Скрипт выдал "false"
по моей логике, если false, это не с того конца, то true будет с того, что надо.
Я прописал:
ArraySetAsSeries (dataCandle, true); //смена направления
bool series=ArrayIsSeries(dataCandle); //заново проверяю что получилось
Alert (series); //вывожу результат на экран.
Но все равно после этого я получаю "false" .
В чем мой косяк?
dataCandles - это структура. Массив, куда мы пишем сами свечи из истории - array[]. Вот его и нужно сделать как таймсерию чтобы его индексация совпадала с индексацией свечей на графике. Т.е., Нулевая ячейка массива array[] соответствовала бы ближайшим свечам к текущей дате.
Т.е., 1. копируем в массив array[] свечи, 2. делаем его таймсерией, потом считываем с него значения в структуру.
Можно было бы обойтись и без массива array[] - сразу писать данные прямо с графика в структуру, но я так предложил для совместимости с пятёркой - в ней можно так копировать напрямую только в индикаторе, используя high[i], low[i] и прочие данные, но в скрипте, или советнике, нам всё равно придётся сначала скопировать нужный отрезок истории в массив, что я сразу и сделал.