Изучаем язык программирования MQL4

Ugar

Гуру форума
В логике (A && B) то же самое что (!A || !B). Иногда полезно так перевернуть. Вот вариант:
Создать 2 флага, один свечи вверх, второй свечи вниз и сразу их поднять. Допустим надо 3 свечи подряд. Тогда создаём цикл на 3 свечи, перебираем их. Если свеча не вверх, сбрасываем флаг вверх, если свеча не вниз, сбрасываем флаг вниз. А если перебрали 3 бара, а флаг вверх не сброшен, значит все 3 свечи подряд вверх, а если флаг вниз не сброшен, значит вниз.
Остаётся добавить цикл перебора всех баров истории и счётчики найденных комбинаций.
 

UZver

Активный участник
Можно использовать и 1 цикл и счетчик.
Вот это не понял
как может быть
(да) и (да)= (не да) или (не да), может так надо
(да) или (да)= (не да) или (не да) или так
(да) и (да)= (не да) и (не да)

и зачем два флага - можно и переменную интегер
С>O и n>=0 ==> n=n+1;
С>O и n<=0 ==> n=1;
С<O и n<=0 ==> n=n-1;
С<O и n>=0 ==> n=-1;
 
Последнее редактирование:

UZver

Активный участник
И к gravity
вопрос - а вы если считаете серию из 5 свечек, то 6 и 7 свечек подряд для вас та же серия или новая?
Из вашего решения это не понятно
 

Ugar

Гуру форума
Можно использовать и 1 цикл и счетчик.
На самом деле в моём примере цикл используется в качестве счётчика. Да, существует много способов считать. На самом деле у новичков проблемы не только с написанием кода, но и в том что бы придумать хотя бы один способ решения. Со временем наберутся опыта и будут видеть несколько способов и выбирать тот что удобнее в конкретной ситуации.
 

Ugar

Гуру форума
вопрос - а вы если считаете серию из 5 свечек, то 6 и 7 свечек подряд для вас та же серия или новая?
Из вашего решения это не понятно
В условии задачи ничего не написано о том как разграничивать свечные комбинации. По идее, тогда считать все. То есть если 5 свечей в одну сторону, то в них 3 трёхсвечных комбинации.
Хотя конечно, это камень в огород BorisSedov. Задачи по программированию не должны трактоваться неоднозначно.
 

UZver

Активный участник
Да не прав я, не к тому вопрос отправил, надо к постановщику задачи обращаться - а чего именно хотел.
Но если считать через интегер направление свечи, то будем иметь базу
номер свечки/дата/время/ номер свечки в серии с направлением

В итоге можем выбрать
1) сколько раз серия дошла, например, до 5
2) найти максимальные свечки в сериях и посчитать частоту серий из 1, 2, 3х свечек и т.д.
 
  • Like
Реакции: Ugar

UZver

Активный участник
Так же вопрос, а что делать если С=О - серия прерывается, продолжается и как учитывать?
Из постановки задачи это явно не следует.
 

vladradon

Программист
Но если считать через интегер направление свечи, то будем иметь базу
номер свечки/дата/время/ номер свечки в серии с направлением

В итоге можем выбрать
1) сколько раз серия дошла, например, до 5
2) найти максимальные свечки в сериях и посчитать частоту серий из 1, 2, 3х свечек и т.д.
Мы в любом случае в цикле выбираем свечи по относительному смещению от текущей (нулевой) и по смещению можем узнать все данные по любой свече и по относительному смещению относительно смещению относительно нулевой свечи, можем узнать все данные по соседним свечам, которые участвуют в проверке на непрерывный рост и спад на заданное минимальное количество последовательно растущих или спадающих свечей.
Я не вижу смысла рассчитывать количество заданных комбинаций на всем доступном количестве баров графика - чисто для статистики - не актуально. Просчитать какое количество однонаправленных свечей в каждом направлении имеет возможный сигнал для входа - не имеет смысла.
 

UZver

Активный участник
Ну не скажите - последние 3-4 дня евра так красиво падала, да и бинарники часто статистику свеч считают.
 

vladradon

Программист
Ну не скажите - последние 3-4 дня евра так красиво падала, да и бинарники часто статистику свеч считают.
Это понятно, но зачем рассчитывать, к примеру, 10000 последних часовых баров, которые показывает график? Если в учет идут последние максимум 100...
 

UZver

Активный участник
Я отвечу вам цитатой
свечи без тела игнорировать.
Мы не знаем изначально сколько нужно.
И цикл всегда можно прервать, если нашли то, что нужно.
 
Последнее редактирование:

vladradon

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

vladradon

Программист
Свечи без тела автоматом отфильтруются при проверке их на HIGH и LOW, т.к при правильной проверке свечи без "тела" будут иметь нулевую разницу между опен и клоуз, а значит, при правильном написании проверок (if...),варианты с нулевыми телами из расчетов будут отсеяны.
 
  • Like
Реакции: Ugar

UZver

Активный участник
А кто решает какое написание условия if правильное?
и вопрос - мы игнорируем или начинаем с нуля, это есть две большие разницы.
А вдруг мы на бинарке торгуем и С=О - для нас изначально минус.
 

BorisSedov

Активный участник
Вообще-то серия – на то и серия, что в ней либо вверх все свечи либо вниз, какие-то промежуточные варианты не допускаются. Если при подсчете попадается свеча не в нужную сторону или без тела, то начинаем искать с текущей (новой) позиции. По второму моменту соглашусь – в условиях нет четкого описания, как учитывать серию, превышающую заданное во входных параметрах значение. Допустим было задано 6 свеч, а мы находим серию из 7 или более свеч подряд. Как учитывать такой случай? Предлагаю в таком случае считать серию из 7 или более свеч подряд не отвечающей условиям, так как нас интересует серия ровно из 6 свеч. Серия должна прерываться свечей в обратном направлении или свечей без тела.
Отдельно хочется отметить тот момент, что такие задачи носят только обучающий характер.
Главная цель таких задач – научить начинающего программиста свободно плавать в океане знаний.
 

vladradon

Программист
А кто решает какое написание условия if правильное?
Не корректный вопрос - не какое правильное написание параметров в if, а как правильно написать нужную проверку или комбинацию проверок так, чтобы не появились непредвиденные ошибки.
 

UZver

Активный участник
Не корректный вопрос - не какое правильное написание параметров в if, а как правильно написать нужную проверку или комбинацию проверок так, чтобы не появились непредвиденные ошибки.
Не корректный ответ - вопрос в том не как if писать, а писать математическое задание если, то - вопрос в постановке задачи и ее математическом описании, а if или switch и select case уже дело второе.
Что бы написать нужные проверки вначале нужно знать, а что именно проверяем.
 
Последнее редактирование:

vladradon

Программист
Что бы написать нужные проверки вначале нужно знать, а что именно проверяем.
Да, т.е. сначала нужно разработать алгоритм, на основании которого уже писать код, а не наоборот сначала писать код, а потом его анализировать , чтобы найти все косяки.)))
 
Последнее редактирование:
Верх