Как выиграть в крестики нолики?

Как выиграть в крестики-нолики?

Самой популярной является игра на девятиклеточном поле. Поле представляет собой три квадрата по горизонтали и три по вертикали.

Как всегда, сначала рисуют поле и выбирают крестик и нолик. Первый вопрос, который хотелось бы уточнить — это vожно ли выиграть у соперника, если ты крестик? Ответ утвердительный, так как крестик в этой схватке всегда ходит первым.

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

Как легко и быстро победить крестиком?

Самым выгодным первым шагом является позиция в центре поля. Эта ячейка дает преимущество игроку ходить не только прямо, но и по диагонали. У игрока появляется шанс выстроить три фигуры в ряд по:

  • диагонали — две линии;
  • вертикали — одна линия;
  • горизонтали — одна линия.

После второго шага противника на поле появится первый нолик. В зависимости от того, куда противник его поставил, выстраивается дальнейшая линия обороны.

Теоретически противник имеет два варианта:

  • поставить нолик в одну из четырех боковых крайних клеток;
  • поставить нолик в позицию ячеек, не проходящих через диагональ под номером 2, 4, 6, 8. Этот шаг может стать решающим для исхода сражения.

игра крестики нолики как победить

Теперь у игрока, ходящего крестиком, появляется большая вероятность победить, а не быть побежденным. Второй шаг — это выстраивание нападения. Нужно поставить крестик в свободную угловую ячейку. Необходимо, чтобы через нее проходила диагональ. Эта позиция побудит соперника выстроить линию защиты.

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

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

Стратегия победы заключается в построении линии из трех одинаковых фигур по горизонтали или по вертикали. Как легко увеличить шанс на выигрыш? Нужно поставить первую фигуру в центр или в угол.

Схема ходов для нолика

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

Первый шаг нолика (в случае, если оппонент не поставил свою фигуру в центр) — поставить нолик в ячейку номер 5. Дальнейшая тактика будет похожа на ту, которая была предписана крестикам. Если же ячейка номер 5 будет занята крестиком, нужно выбрать диагональные ячейки с номерами 1, 3, 7, 9.

Следующие удары оппонентов должны идти параллельно и не допустить построения ряда из трех фигур.

как ходить ноликом

Узнать, как постоянно выигрывать, можно с помощью изучения схемы.

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

Как только нолик походит в центр, противнику нужно быстро походить в противоположный от первого хода угол. В этом случае у нолика на выбор будет два шага. Какой из них будет выбран — таким и станет исход сражения. Допустим, нолик поставит фигурку не в угловую клетку. Тогда крестик начнет защищаться, и битва закончится дружбой. Но если позиция противника будет обозначена в угловой ячейке, крестики смогут сделать своего рода «вилку» и занять оставшийся угол.

как выиграть в крестики нолики

Как сделать так, чтобы крестик все время выигрывал? Нужно придерживаться следующей тактики:

  • занять центр;
  • заставить ноликов начать защиту;
  • построить «вилку» из крестиков.

Существует такая стратегия, когда нолик ставят в угол, а крестики выставляют по прямой. Тогда нолик начинают выстраивать по диагонали, но крестик и тут занимает последний свободный угол. В результате получается вилка.

Как выиграть в крестики-нолики 3×3 и больше клеточек?

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

В игре 3 на 3 клеточки главной причиной проигрыша одного из игроков является допущенный промах во время первого хода. Именно он определяет дальнейшую цепочку событий. Чтобы второй игрок имел фору и не проиграл, ему нужно в свой первый ход, который будет сделан после начального удара, поставить свою фигуру в центр поля или в один из углов. Это позволит ему занять стратегически важное место, и в случае необходимости с любой точки блокировать угрозу. В соревновании 3 на 3 самым важным является именно стратегия первого удара.

Интересной разновидностью боя являются трехмерные 3 на 3 на 3. Здесь соревнование ведется в кубе. Выигрыш присваивается тому игроку, который займет верхнее центральное поле. В этой борьбе не может быть ничьей. Победить можно, заняв центральное положение на поле, а также с помощью ходов, диаметрально противоположных друг другу.

Для усложнения соревнования и увеличения выигрыша, для игроков было придумано игровое поле Силвермэна размером 4 на 4 к. В этом бою целью игрока является составление прямой из четырех одинаковых фигур. Стратегия боя для первого игрока заключается в атаке и перекрывании ходов соперника. В этом варианте игры ничьей не бывает. Худшим вариантом для начала соревнования на поле 4 на 4 является противопоставление по диагонали. Но и в этом случае у первого игрока всегда есть шесть вариантов ходов. Как показывает практика и анализ боя, у игроков, сделавших первый ход в этой игре, есть огромные преимущества. Для того чтобы изменить условия и усложнить игру, главные диагонали для победы не считаются. В этом случае для выигрыша первый ход не нужно делать по главной диагонали.

На доске 4 на 4 можно играть в интересный вариант игры — «Безумные крестики-нолики». Здесь фигуры не ставят в привязку к игрокам. Выиграет тот, кто соберет первым ряд из любых четырех фигур.

Как играть в крестики-нолики 5 на 5 клеточек?

Игра 5 на 5 интересная, но принцип ее действия такой же, как и в игре на поле из девяти клеточек. Главная тактика соревнования — это составление вилок, которые не дадут противнику возможности построить ряд из 5 фигур. Чтобы игра была длинной и интересной, для первого игрока устанавливают специальные правила. Нельзя строить больше двух вилок, а также запрещено создавать вилки на площадке из клеточек 3 на 3 и 4 на 4. Соблюдение этих условий открывает перед вторым игроком шансы на победу. Примечательно, что в этом варианте соревнования можно пропустить один ход. Но, если и второй игрок пропустит ход, то игра заканчивается ничьей.

Индикатор крестики нолики, применяемый в MT4 и 5

Сразу необходимо сказать, что индикатор крестики нолики производит модификацию реальных баров на текущем графике. Он, если можно так выразиться, как бы сплющивает мелкие бары в своеобразные длинные столбики. По этой причине, в качестве источников для данных этот индикатор применяет один таймфрейм, к примеру, М5, а вырисовывает показатели на каком-либо другом.

При этом, без разницы на каком – на любом кроме исходного, график будет иметь один и тот же вид, так как при построении графика время в учет не берется.

График крестики нолики, как и обычные графики можно растягивать, сжимать и гибко настраивать, пользуясь для этого специальной линейкой расположенной на МТ4 справа от графика. Возле вертикального ряда чисел, расположены указатели-ползунки, относящиеся к обычным объектам графика, которые можно выделять и перемещать вдоль ряда цифр либо вниз, либо .

ТОП БРОКЕРОВ БИНАРНЫХ ОПЦИОНОВ ДЛЯ ПРОФЕССИОНАЛЬНОЙ ТОРГОВЛИ

1.Olymp Trade. НОВАЯ АКЦИЯ БРОКЕРА: ДЕПОЗИТ х 2
2.Binomo. ДАРИМ БЕСПЛАТНЫЕ ОПЦИОНЫ: ПОЛУЧИТЬ $150
3.FinMax. ПОЛУЧИТЕ 1 БЕЗРИСКОВУЮ СДЕЛКУ: ВЫБРАТЬ КРИПТОВАЛЮТУ

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

График индикатора крестики нолики

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

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

Кроме этого, возле графика расположено еще пару линеек с цифрами. Эти линейки, указывают на ожидаемые результаты торговли.

Индикатор крестики нолики имеет две задаваемые величины:

  • фиксированная величина потерь
  • и фиксированный лот.

Для этих величин, индикатор самостоятельно рассчитывает значения и показывает их в колонках цифр.

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

Скачать обновленный индикатор «крестики нолики» + инструкция

Настройка индикатора “Крестики-нолики”

 

  • Устанавливаем индикатор Forex “Крестики-нолики” с расширением ex4 в папку c:/program files/meta trader/experts/indicators, шаблоны, то есть файлы с расширением tpl устанавливаем в папку c:/program files/meta trader/templates

 

  • Выбираем нужный нам инструмент, например EUR/USD и переключаем таймфрейм на m1.

 

 Индикатор

 

  • Теперь следует зайти во вкладку “Сервис” – “Архив котировок”, найти там EUR/USD и закачать в терминал котировки только для минутных графиков.
Читайте также:  Форекс брокер Weltrade - официальный сайт, регистрация, условия Велтрейд и бонусы

 

 

 Индикатор

 

 

  • Далее необходимо зайти настройки терминала. Нажимаем “Сервис” – “Настройки”. Здесь необходимо изменить максимальное количество отображаемых в окне баров.

 

Делается это для того, чтобы терминал не тормозил и не зависал, поскольку такой вид отображения графиков достаточно “тяжеловесный” для торгового терминала. Каждый раз, когда вы меняете здесь настройки, необходимо перезагружать торговый терминал. Только тогда изменения вступят в силу.

 

 

Индикатор

 

 

  • Загружаем шаблон под названием box или xo. Делается это нажатием на иконку с шаблонами:

 

Индикатор

 

В итоге на графике все должно выглядеть следующим образом.

 

Крестики-нолики

 

 

Индикатор

 

 

Боксы

 

 

Индикатор

 

 

  • Далее необходимо поставить галочку в поле “Фиксированный масштаб”.

 

Делается это для того, чтобы можно было перетаскивать график в разные стороны, чтобы увидеть всю возможную информацию. По умолчанию, график можно перемещать только по горизонтали в соотношении с размерам диапазона вашего монитора, терминал сужает котировки. В индикаторе “Крестики-нолики” важен именно размер и правильное отображение. Шаблон с индикатором “Крестики-нолики” терминал не может ужать и часть информации становится недоступна. После того, как мы поставим галочку, то сможем перемещаться по графику в любую сторону.

 

 

Индикатор

 

 

Определение таймфрейма

 

Как уже говорилось, в данной методике тайм-фрейм просто не может быть определен, поскольку отсутствует всяческая привязка ко времени. Здесь мы можем изменять лишь расстояние, которое проходит цена. Заходим в свойства индикатора: “Графики” – “Список индикаторов”. Обратите внимание на параметр размер бокса. Можем его менять либо в сторону увеличения, либо в сторону уменьшения. По умолчанию стоит 5.

 

 

Индикатор

 

 

При размере бокса в 5, то, что мы видим на графике ниже, приблизительно напоминает часовой таймфрейм для валютной пары EUR/USD.

 

Если необходим анализ других диапазонов, следует просто менять размер боксов. Если H1 приблизительно соотносим с размером бокса в 5, то H4 в 20, D1 в 100 и так далее. Можно также изменить размер бокса до 2 или 3, что будет соотносимо 15 – 30-минутным графикам.

 

 

Индикатор

 

 

При необходимости можно изменить параметр Реверса. Он отвечает за изменение крестиков на нолики или на оборот, при прохождении определенного количества боксов в противоположном направлении. Делать это не рекомендуется, однако существуют модификации стратегии, где этот параметр может быть изменен.

 

 

Индикатор

 

Овладение индикатором “Крестики-нолики” поможет вам значительно увеличить заработок на Forex.

 

 

Купить индикатор Крестики-Нолики всего за 2 900 рублей

Купить “Крестики-Нолики”

 

 

 

Одного индикатора для торговли недостаточно!

 

Комбинация индикаторов намного эффективнее, ведь она устраняет недостатки каждого из инструментов, выдавая более точный результат по сделкам. Поэтому специально для Вас трейдеры Academyfx разработали профитную комбинацию индикаторов – это «Три экрана Элдера», «Price Action» и «Уровни поддержки/сопротивления», которая является основой стратегии «Форекс без Риска», с которой Вы подробно можете ознакомиться в разделе «ФБР».

 

Стратегию «Форекс без риска» можно освоить в 3 шага:

 

  • изучить уроки 1-5 по теме «Три экрана Элдера»;
  • изучить уроки 6-10 по теме «Price Action»;
  • изучить уроки 11-15 по теме «Поддержка/сопротивление».

 

Как добиться такого результата? 

 

fx1 212dc

Изучи успешно 15 уроков в разделе “Форекс без риска” и не рискуй своими деньгами!

 

Читать раздел “Форекс без риска”

 

Еще больше профита здесь:


Вилы Эндрюса – “дедовский” способ поиска торговых каналов
Советник на основе Parabolic SAR
КУНГ-ФУ VS. РОБОТ 008: МЯГКОСТЬ ЛИНИЙ ПРОТИВ ЖЕЛЕЗНОЙ ПРИБЫЛИ

Строим крестики-нолики на Форекс

К сожалению, в терминале MetaTrader4 по умолчанию можно использовать только три варианта отображения цены – бары, свечи и линии. Это значит, что в отличие от большинства Forex-методик для построения XO придётся использовать дополнительное программное обеспечение.

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

Разметка индикатора Cute_PointAndFigure

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

  • BoxSize и ReverseOn – величина одного бокса в пунктах и коэффициент реверсировки (чем он больше, тем меньше будет шума на графике);
  • X_O_view – весьма полезная функция, при помощи которой можно переключаться между классическим шаблоном XO и упрощённой разметкой (к сожалению, терминал MT4 несовершенен, поэтому X и O часто накладываются друг на друга, если это произошло, фигуры разумно заменить обычными цветными квадратами);

Cute_PointAndFigure с параметром ХО

  • ShowDaysMonths – включить/выключить обозначения чисел месяца. Дело в том, что иногда хочется узнать, на протяжении какого интервала формировалась та или иная последовательность боксов;
  • ShowGrid – отобразить/убрать вспомогательную сетку.

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

  

Введение

Существует множество типов графиков, которые представляют информацию о текущей ситуации на рынке. Многие из них пришли к нам из далёкого прошлого, и как раз одним из таких является график “Крестики-нолики” (Point and figure chart).

Этот тип графика был известен еще с конца XIX века. Его первоначальное название “книжный метод” употребил ещё Чарльз Доу в редакционной статье номера “Уолл-Стрит Джорнал” от 20 июля 1901 года. Хоть Доу и утверждал, что “книжный метод” уже существует пятнадцать лет (то есть дата его рождения 1886 год), но именно он зафиксировал его употребление и по сей день.

Несмотря на то, что Доу ограничился описанием этого метода в редакционных статьях, сейчас можно найти множество книг, в которых подробно раскрывается этот метод. Одной из таких книг, которую я бы посоветовал прочитать начинающим трейдерам, является книга Томаса Дж. Дорси “Метод графического анализа крестики-нолики” (оригинал “Point and Figure Charting: The Essential Application for Forecasting and Tracking Market Prices”).

 

Описание

График”Крестики-нолики” представляет собой совокупность вертикальных столбцов: крестиков “X” – символизирующих рост цен, и ноликов “O” – символизирующих падение. Особенность этого графика заключается в том, что он строится на основании цен, не учитывая при этом времени. Таким образом, убрав одно значение из данных (время) для построения ценовых графиков, мы получаем графики с каналами ровно в 45 градусов.

В построении графика “Крестики-нолики” участвуют две заранее оговоренные величины:

  • Коробка (box size) – количество пунктов изменения цены, которые регистрируются на графике как крестик или нолик (изначально это значение предполагало стоимость в долларах за акцию, но в дальнейшем переросло в пункты, что мы и будем использовать в нашем индикаторе).
  • Разворот (reversal) – величина противоположного движения цены в единицах величины коробки (box size), при котором происходит смена “Х” на “О” или наоборот (например, разворот равный 3 при величине коробки в 10 пунктов будет соответствовать 30 пунктам).

То есть мы выбираем точку отсчёта, и от этой точки, в случае изменения цены на величину коробки умноженную на параметр разворота, ставим крестик “Х” при увеличении цены, и нолик “О” при уменьшении. Далее, в случае продолжения движения в том же направлении на размер коробки, добавляем крестик “Х” столбца в случае увеличения и нолик “О” вниз столбца в случае уменьшения. Если же цена пошла в обратную сторону от предыдущего движения на величину коробки умноженной на параметр разворота, то формируется новый столбик и ставится крестик “Х” в случае увеличения и нолик “О” в случае уменьшения.

График “Крестики-нолики” обычно строится для удобства на клетчатой бумаге. Для более детального представления разберем небольшой пример построения графика. Пусть имеются данные:

ДатаЦена HighЦена Low
07.03.2013 12:00 – 07.03.2013 20:00 1.3117 1.2989
07.03.2013 20:00 – 08.03.2013 04:00 1.3118 1.3093
08.03.2013 04:00 – 08.03.2013 12:00 1.3101 1.3080
08.03.2013 12:00 – 08.03.2013 20:00 1.3134 1.2955

С учетом того, что размер коробки берем равным 10 и параметр разворота равным 3, построим график “Крестики-нолики”:

  • Сначала цена растет на 128 пунктов, пройдя от цены 1.2989 до цены 1.3117 – рисуем 12 крестиков.
  • Далее цена движется вниз от 1.3118 до 1.3093 на 25 пунктов, чего недостаточно для разворота, так что ничего не рисуем.
  • После мы видим, что цена падает еще до уровня 1.3080, и учитывая верхнее значение 1.3118 мы получаем движение в 38 пунктов – значит можем начать формировать новый столбец двумя ноликами (хоть цена и прошла на три размера коробки, рисуем два нолика, так как следующий столбец рисуется на один размер коробки ниже).
  • Далее цена растет с 1.3080 до 1.3134 на 54 пункта и падает до 1.2955 – это 179 пунктов. То есть мы получаем следующий столбец в четыре крестика и далее еще один с 16 ноликами вниз.

Изобразим это на рисунке:

Рис 1. Слева ценовой график в виде

Рис 1. Слева ценовой график в виде “Японских свечей”, справа график “Крестики-нолики”.

Читайте также:  Трендовые линии

Данный пример построения графика “Крестики-нолики” очень грубый и приведен для новичков, чтобы облегчить понимание.

 

Принцип построения

Существует несколько способов построения графика “Крестики-нолики”, и один из них уже был приведен выше. Отличия между этими способами построения заключаются в используемых данных. Например, можно использовать данные дня, не учитывая движения внутри самого дня, тем самым получая грубое построение. Или же мы можем учитывать данные о движении цены и внутри дня, тем самым добиваясь более детального и гладкого построения.

Чтобы сделать построение графика “Крестики-нолики” в индикаторе более плавным и точным, было решено использовать минутные данные для расчетов и построения, так как в течение минуты движение цены не очень существенно, и обычно равняется не более чем шести пунктам, а часто даже двум или трем. Таким образом будут использоваться данные о ценах открытия на каждом минутном баре.

Сам принцип построения достаточно прост:

  • Берется начальная точка – цена открытия первого минутного бара.
  • Далее, если цена проходит расстояние равное размеру коробки умноженной на показатель разворота или более, то рисуются соответствующие символы (“О” – в случае нисходящего движения и “Х” – в случае восходящего). Запоминаются данные для последующего построения о цене последнего символа.
  • В случае продолжения движения цены в том же направлении на размер коробки, рисуется соответствующий символ.
  • Далее, в случае разворота цены, отсчет производится не от самой большой цены валютной пары, а от цены последнего символа, то есть если цена не прошла больше 50% размера “Коробки”, то она просто игнорируется.

Давайте теперь определимся со стилем отрисовки графика “Крестики-нолики”. Язык MQL5 поддерживает семь стилей построения индикатора: линия, секция (отрезок), гистограмма, стрелка (символ), закрашиваемая область (канал с заливкой), бары и японские свечи.

Для идеального визуального представления подходит построение с использованием стрелок (символов), но для такого стиля нужно изменяемое количество индикаторных буферов (что попросту не поддерживается в MQL5), или неимоверно большое их количество, так как для построения каждого крестика или нолика в одном столбце нужен свой буфер. То есть если использовать такой стиль, то нужно четко определиться с волатильностью и располагать достаточными ресурсами памяти.

Так что для отображения индикатора были выбраны японские свечи, а точнее цветные японские свечи. Разными цветами предполагалось обозначить отдельно столбцы крестиков и ноликов. Тем самым индикатор обходится пятью буферами, что позволяет довольно экономично распорядиться ресурсами.

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

Рис 2. Внешний вид построения индикатора на паре EURUSD на дневном таимфрейме.

Рис 2. Внешний вид построения индикатора на паре EURUSD на дневном таимфрейме.

 

Алгоритм индикатора

Для начала нам следует определиться с входными параметрами индикатора. Так как график “Крестики-нолики” не учитывает данные времени, и мы используем для построения данные с минутных баров, то стоит определиться с количеством обрабатываемых данных, для того чтобы не использовать лишние ресурсы системы. Да и строить график “Крестики-нолики” на всей истории незачем.  Таким образом введем первый параметр – “History”. В нем будет учитываться количество минутных баров для расчета.

Далее нужно определиться с размером коробки и параметром разворота. Для этого введем переменные “Cell” (клетка) и “CellForChange” (клетки для изменения)  соответственно. Также введем параметр цвета крестиков “ColorUp” и ноликов “ColorDown”. И наконец, последний параметр – это цвет границ деления коробок”LineColor”.

// +++ Начало программы +++//+——————————————————————+//|                                                         APFD.mq5 |//|                                            Aktiniy ICQ:695710750 |//|                                                    ICQ:695710750 |//+——————————————————————+#property copyright “Aktiniy ICQ:695710750″#property link      “ICQ:695710750″#property version   “1.00”//— Рисование индикатора в отдельном окне#property indicator_separate_window#property indicator_buffers 5#property indicator_plots   1//— plot Label1#property indicator_label1  “APFD”#property indicator_type1   DRAW_COLOR_CANDLES#property indicator_style1  STYLE_SOLID#property indicator_color1  clrRed,clrGold#property indicator_width1  1//— Устанавливаем входные параметрыinputint   History=10000;
inputint   Cell=5;
inputint   CellForChange=3;
inputcolor ColorUp=clrRed;
inputcolor ColorDown=clrGold;
inputcolor LineColor=clrAqua;
//— Объявляем индикаторные буферыdouble CandlesBufferOpen[];
double CandlesBufferHigh[];
double CandlesBufferLow[];
double CandlesBufferClose[];
double CandlesBufferColor[];
//— Массив для копирования расчетных данных с минутных баровdouble OpenPrice[];
// Переменные для расчетовdouble PriceNow=0;
double PriceBefore=0;
//— Введем вспомогательные переменныеchar   Trend=0;      // Направление тенденции движения ценыdouble BeginPrice=0; // Начальная цена для отсчётаchar   FirstTrend=0; // Направление начальной тенденции рынкаint    Columns=0;    // Переменная для подсчёта столбцовdouble InterimOpenPrice=0;
double InterimClosePrice=0;
double NumberCell=0; // Переменная подсчёта клетокdouble Tick=0;       // Размер тикаdouble OldPrice=0;   // Значение последней расчётной цены//— Создаём массивы для временного хранения данных о ценах открытия и закрытия столбиковdouble InterimOpen[];
double InterimClose[];
// +++ Начало программы +++

Теперь перейдем к рассмотрению функции OnInit(). Тут будет произведено связывание индикаторных буферов с одномерными массивами. Также установим значение индикатора без отрисовки для его корректного отображения.

Вычислим значение вспомогательной переменной “Tick” (размер одного тика) для проведения расчетов. Так же зададим цветовую схему и установим направление индексации в индикаторных буферах как в таймсериях. Это нужно для удобства расчета значений индикатора.

// +++ Функция OnInit +++//+——————————————————————+//| Custom indicator initialization function                         |//+——————————————————————+intOnInit()
  {
//— indicator buffers mapping
   SetIndexBuffer(0,CandlesBufferOpen,INDICATOR_DATA);
   SetIndexBuffer(1,CandlesBufferHigh,INDICATOR_DATA);
   SetIndexBuffer(2,CandlesBufferLow,INDICATOR_DATA);
   SetIndexBuffer(3,CandlesBufferClose,INDICATOR_DATA);
   SetIndexBuffer(4,CandlesBufferColor,INDICATOR_COLOR_INDEX);
//— Устанавливаем значение индикатора без отрисовки
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//— Вычисляем размер одного тика
   Tick=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
//— Задаём цветовую схему
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,ColorUp);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,ColorDown);
//— Устанавливаем направление индексации в массивах как в таймсериях
   ArraySetAsSeries(CandlesBufferClose,true);
   ArraySetAsSeries(CandlesBufferColor,true);
   ArraySetAsSeries(CandlesBufferHigh,true);
   ArraySetAsSeries(CandlesBufferLow,true);
   ArraySetAsSeries(CandlesBufferOpen,true);
//— Проверим входной параметр на корректность
   if(CellForChange<2)       Alert("Параметр CellForChange должен быть больше 1, ввиду особенности построения графика"); //---    return(0);   } // +++ Функция OnInit +++

В итоге мы подошли к самому “сердцу” индикатора – функции OnCalculate(), в которой будет производиться его расчет. Расчеты значений индикатора разбиты на шесть базовых функций, которые будут вызываться из OnCalculate(). Рассмотрим их:

1.  Функция копирования данных

Эта функция выполняет копирование данных с минутных баров в массив для расчетов. Сначала изменяем размерность принимающего массива, а затем, посредством функции CopyOpen(), копируем в него цены открытия.

//+——————————————————————+//| Функция копирования данных для расчёта                           |//+——————————————————————+int FuncCopy(int HistoryInt)
  {
//— Изменяем размер массива для копирования расчетных данных
   ArrayResize(OpenPrice,(HistoryInt));
//— Копируем данные с минутных баров в массив
   int Open=CopyOpen(Symbol(),PERIOD_M1,0,(HistoryInt),OpenPrice);
//—
   return(Open);
  }

2.  Функция расчета числа столбцов

Эта функция вычисляет количество столбцов для построения графика “Крестики-нолики”.

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

  •  0 – неопределенный тренд.
  •  1 – восходящий тренд.
  • -1 – нисходящий тренд.

Неопределенный тренд будет использован только один раз для определения
начального движения цены. Направление движения цены будет определено в момент, когда абсолютное значение разницы между текущей ценой и начальной ценой превзойдет значение уровня “Коробки” умноженного на величину “Разворота”.

Если такое пробитие происходит вниз, то начальный тренд определяется как нисходящий
и делается соответствующая запись в переменную “Trend”. Определение восходящего тренда происходит аналогичным образом с точностью до наоборот. Также увеличивается значение переменной числа столбцов “ColumnsInt”.

После определения текущего тренда
происходит дальнейшая координация, и устанавливаются два условия для каждого из направлений. В случае продолжения движения в сторону текущего тренда на уровень “Коробки”, переменная “ColumnsInt” остается
без изменений. Если же происходит разворот цены на величину ‘Коробки” умноженной на значение “Разворота”, то это означает появление нового
столбца, и значение переменной “ColumnsInt” увеличивается на один.

И так далее, пока не будут определены все столбцы. 

Для округления количества клеток  в цикле используется функция MathRound(), которая позволяет округлять полученные значения до ближайших целых. При желании эту функцию можно заменить на MathFloor() (округление до нижнего целого) или MathCeil() (округление до верхнего целого), в зависимости от того какое нужно построение.

//+——————————————————————+//| Функция расчёта числа столбцов                                   |//+——————————————————————+int FuncCalculate(int HistoryInt)
  {
   int ColumnsInt=0;

//— Обнуляем вспомогательные переменные
   Trend=0;                 // Направление тенденции движения цены
   BeginPrice=OpenPrice[0]; // Начальная цена для отсчёта
   FirstTrend=0;            // Направление начальной тенденции рынка
   Columns=0;               // Переменная для подсчёта столбцов
   InterimOpenPrice=0;
   InterimClosePrice=0;
   NumberCell=0;            // Переменная подсчёта клеток//— Цикл для подсчёта количества основных буферов (цены открытия и закрытия столбцов)
   for(int x=0; x0)
           {
            NumberCell=fabs((BeginPrice-OpenPrice[x])/Tick)/Cell;
            NumberCell=MathRound(NumberCell);
            InterimOpenPrice=BeginPrice;
            InterimClosePrice=BeginPrice-(NumberCell*Cell*Tick);
            InterimClosePrice=NormalizeDouble(InterimClosePrice,Digits());
            Trend=-1;
           }
         //— Тренд
         if(((BeginPrice-OpenPrice[x])/Tick)<0)            {             NumberCell=fabs((BeginPrice-OpenPrice[x])/Tick)/Cell;             NumberCell=MathRound(NumberCell);             InterimOpenPrice=BeginPrice;             InterimClosePrice=BeginPrice+(NumberCell*Cell*Tick);             InterimClosePrice=NormalizeDouble(InterimClosePrice,Digits());             Trend=1;            }          BeginPrice=InterimClosePrice;          ColumnsInt++;          FirstTrend=Trend;         }       //--- Определение дальнейших действий при нисходящем тренде       if(Trend==-1)         {          if(((BeginPrice-OpenPrice[x])/Tick)>0 && (Cell)0 && (Cell*CellForChange)

3.  Функция раскраски столбцов

Смысл этой функции заключается в том, чтобы по заранее заданной цветовой схеме произвести раскраску столбцов соответствующим цветом. Для этого создаем цикл по количеству столбцов и, учитывая значение начального тренда (начального столбца), устанавливаем правильные цвета четным и нечетным столбцам.

//+——————————————————————+//| Функция раскраски столбцов                                       |//+——————————————————————+int FuncColor(int ColumnsInt)
  {
   int x;
//— Заполняем буфер цветов для отрисовки
   for(x=0; x0) CandlesBufferColor[x]=0;  // Все нечётные буферы цвета 0
        }
      if(FirstTrend==1)
        {
         if(x%2==0) CandlesBufferColor[x]=0; // Все нечётные буферы цвета 0
         if(x%2>0) CandlesBufferColor[x]=1;  // Все чётные буферы цвета 1
        }
     }
//—
   return(x);
  }

Читайте также:  Лучшие брокеры бинарных опционов 2018 - 2017

4.  Функция определения размеров столбцов

После того как мы определили количество используемых столбцов и установили цвета раскраски, нужно позаботиться об их вертикальном размере. Для этого создадим временные массивы”InterimOpen[]” и “InterimClose[]”, в которых мы будем хранить цены открытия и закрытия для каждого столбика. Размерность этих массивов установим равной количеству столбцов.

Далее следует цикл, который почти полностью повторяет цикл из функции FuncCalculate(). Его отличием является то, что в нем, кроме всего вышеизложенного, запоминаются цены открытия и закрытия для каждого из столбцов. Такое разделение было сделано для того, чтобы заранее знать количество столбцов на графике. Теоретически можно было изначально задать заведомо большее количество столбцов для выделения памяти массивов и обойтись всего одним циклом, но тем самым ресурсы памяти расходовались бы в большем объеме.

Теперь подробнее остановимся на определении размеров вертикальных столбцов. После того как цена прошла расстояние в нужное нам количество “Коробок”, мы подсчитываем их количество, округляя его до ближайшего целого. Далее к цене открытия столбца прибавляется суммарный размер “Коробок” текущего столбца и таким образом мы получаем цену закрытия столбца. Она же и становится последней используемой ценой, и дальнейшие действия проводятся с ней.

//+——————————————————————+//| Функция определения размеров столбцов                            |//+——————————————————————+int FuncDraw(int HistoryInt)
  {
//— Определяем размеры временных массивов
   ArrayResize(InterimOpen,Columns);
   ArrayResize(InterimClose,Columns);
//— Обнуляем вспомогательные переменные
   Trend=0;                 // Направление тенденции движения цены
   BeginPrice=OpenPrice[0]; // Начальная цена для отсчёта
   NumberCell=0;            // Переменная подсчёта клеток
   int z=0;                 // Переменная для индексов временных массивов//— Цикл для заполнения основных буферов (цены открытия и закрытия столбцов)
   for(int x=0; x0)
           {
            NumberCell=fabs((BeginPrice-OpenPrice[x])/Tick)/Cell;
            NumberCell=MathRound(NumberCell);
            InterimOpen[z]=BeginPrice;
            InterimClose[z]=BeginPrice-(NumberCell*Cell*Tick);
            InterimClose[z]=NormalizeDouble(InterimClose[z],Digits());
            Trend=-1;
           }
         //— Тренд
         if(((BeginPrice-OpenPrice[x])/Tick)<0)            {             NumberCell=fabs((BeginPrice-OpenPrice[x])/Tick)/Cell;             NumberCell=MathRound(NumberCell);             InterimOpen[z]=BeginPrice;             InterimClose[z]=BeginPrice+(NumberCell*Cell*Tick);             InterimClose[z]=NormalizeDouble(InterimClose[z],Digits()); // Нормализуем количество знаков после запятой             Trend=1;            }          BeginPrice=InterimClose[z];         }       //--- Определение дальнейших действий при нисходящем тренде       if(Trend==-1)         {          if(((BeginPrice-OpenPrice[x])/Tick)>0 && (Cell)0 && (Cell*CellForChange)

5.  Функция разворота массивов

Функция осуществляет разворот полученных данных массива столбцов, чтобы в дальнейшем произвести отображение графика программным путем справа налево. В цикле осуществляется разворот массива с присваиванием значений “High” и “Low” для свечей. Это делается, потому что индикатор отображается только для тех свечей, для которых значения всех индикаторных буферов не равны нулю.

//+——————————————————————+//| Функция разворота массивов                                       |//+——————————————————————+int FuncTurnArray(int ColumnsInt)
  {
//— Переменная для разворота массивов
   int d=ColumnsInt;
   for(int x=0; xCandlesBufferOpen[x])
        {
         CandlesBufferHigh[x]=CandlesBufferClose[x];
         CandlesBufferLow[x]=CandlesBufferOpen[x];
        }
      if(CandlesBufferOpen[x]>CandlesBufferClose[x])
        {
         CandlesBufferHigh[x]=CandlesBufferOpen[x];
         CandlesBufferLow[x]=CandlesBufferClose[x];
        }
     }
//—
   return(d);
  }

6.  Функция для рисования горизонтальных линий

Эта функция делает разграничение на “Коробки” при помощи построения горизонтальных линий (объектов). В начале функции определяются максимальные и минимальные значения цен из массива расчетных данных, а далее, учитывая эти значения, из начальной точки происходит поэтапное построение линий и вниз.

//+——————————————————————+//| Функция для рисования горизонтальных линий                       |//+——————————————————————+int FuncDrawHorizontal(bool Draw)
  {
   int Horizontal=0;
   if(Draw==true)
     {
      //— Создаём горизонтали (строчки для разделения столбиков)
      ObjectsDeleteAll(0,ChartWindowFind(),OBJ_HLINE); // Удаляем все старые горизонтали
      int MaxPriceElement=ArrayMaximum(OpenPrice);     // Определяем максимальный уровень цены
      int MinPriceElement=ArrayMinimum(OpenPrice);     // Определяем минимальный уровень цены
      for(double x=OpenPrice[0]; x<=OpenPrice[MaxPriceElement]+(Cell*Tick); x=x+(Cell*Tick))         {          ObjectCreate(0,DoubleToString(x,Digits()),OBJ_HLINE,ChartWindowFind(),0,NormalizeDouble(x,Digits()));          ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_COLOR,LineColor);          ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_STYLE,STYLE_DOT);          ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_SELECTED,false);          ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_WIDTH,1);          Horizontal++;         }       for(double x=OpenPrice[0]-(Cell*Tick); x>=OpenPrice[MinPriceElement]; x=x-(Cell*Tick))
        {
         ObjectCreate(0,DoubleToString(x,Digits()),OBJ_HLINE,ChartWindowFind(),0,NormalizeDouble(x,Digits()));
         ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_COLOR,LineColor);
         ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_STYLE,STYLE_DOT);
         ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_SELECTED,false);
         ObjectSetInteger(0,DoubleToString(x,Digits()),OBJPROP_WIDTH,1);
         Horizontal++;
        }
      ChartRedraw();
     }
//—
   return(Horizontal);
  }

Теперь, когда все базовые функции описаны, рассмотрим порядок их вызова в OnCalculate():

  • Запускаем функцию копирования данных для вычислений (при условии, что нет еще рассчитанных баров).
  • Вызываем функцию расчета числа столбцов.
  • Определяем цвета столбцов.
  • Определяем размеры столбцов.
  • Вызываем функцию для разворота данных в массивах.
  • Вызываем функцию для построения горизонтальных линий, которые будут разграничивать столбцы на “Коробки”.

// +++ Основные расчеты и построение +++//+——————————————————————+//| Custom indicator iteration function                              |//+——————————————————————+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime &time[],
                constdouble &open[],
                constdouble &high[],
                constdouble &low[],
                constdouble &close[],
                constlong &tick_volume[],
                constlong &volume[],
                constint &spread[])
  {
//— Переворачиваем массив для удобства получения значения последней цены
   ArraySetAsSeries(close,true);
//—
   if(prev_calculated==0)
     {
      //— Запускаем функцию копирования данных для расчёта
      int ErrorCopy=FuncCopy(History);
      //— В случае ошибки выводим сообщение
      if(ErrorCopy==-1)
        {
         Alert(“Не удалось провести копирование. Данные еще подгружаются.”);
         return(0);
        }
      //— Вызываем функцию расчета числа столбцов
      Columns=FuncCalculate(History);
      //— Вызываем функцию раскраски столбцов
      int ColorCalculate=FuncColor(Columns);
      //— Вызываем функцию определения размеров столбцов
      int z=FuncDraw(History);
      //— Запускаем функцию разворота массивов
      int Turn=FuncTurnArray(Columns);
      //— Запускаем функцию рисования горизонталей
      int Horizontal=FuncDrawHorizontal(true);
      //— Запоминаем в переменную значений последней цены закрытия
      OldPrice=close[0];
     }
//— Если цена изменилась по отношению к предыдущей на размер коробки, //— то происходит перерасчёт индикатора
   if(fabs((OldPrice-close[0])/Tick)>Cell)
      return(0);
//— return value of prev_calculated for next call
   return(rates_total);
  }
// +++ Основные расчеты и построение +++

Вот и закончился основной код индикатора. Но так как индикатор имеет свои недостатки ввиду наличия сложных массивов, иногда его приходится перезагружать.

Для этого была применена функция OnChartEvent() для обработки событий нажатия на клавиши “С” – очистка и “R” – перерисовка.
Очистка производится путем присваивания нулевого значения одному из индикаторных буферов. Функция перерисовки графика представляет собой повторение предыдущих расчетов и присваивание значений индикаторным буферам.

// +++ Дополнительные действия для клавиш “С” – очистка и “R” – перерисовка +++//+——————————————————————+//| ChartEvent function                                              |//+——————————————————————+voidOnChartEvent(constint id,
                  constlong &lparam,
                  constdouble &dparam,
                  conststring &sparam)
  {
//—
   if(id==CHARTEVENT_KEYDOWN)
     {
      //— 67 – Код клавиши “C”, очищает индикаторный буфер
      if(lparam==67)
        {
         for(int x=0; x

Теперь можно вздохнуть с облегчением, на этом описание алгоритма и кода индикатора закончились, и далее мы приступим к рассмотрению некоторых паттернов графика “Крестики-нолики”, которые формируют сигналы для совершения сделок.

 

Стандартные сигналы

Торговля и анализ графиков “Крестики-нолики” осуществляется обычно двумя способами: по паттернам (моделям) и линиям поддержки и сопротивления. Характерной особенностью последних является то, что их построение осуществляется под углом 45 градусов (в проектируемом индикаторе это не всегда так, ввиду того что он использует для построения стиль японские свечи, которые меняют свой размер в зависимости от размера основного графика что может искажать угол).

Теперь поговорим подробнее о самих паттернах:

  1. Паттерны “Двойная вершина” и “Двойное дно”.

    “Двойная вершина” образуется, когда цена идет , затем разворачивается, образуя некоторый столбец из ноликов, а затем снова идет , при этом переходя предыдущий столбец крестиков на одну “Коробку”. Формирование такого паттерна является сигналом для совершения покупки.

    “Двойное дно” – паттерн напоминает “Двойную вершину”, только все происходит наоборот. Существует некоторое падение (столбец ноликов), далее следует столбец из крестиков, а затем образуется еще один столбец из ноликов, который при этом опускается на одну “Коробку” ниже предыдущего столбца ноликов, тем самым формируя сигнал на продажу.

    Рис 3. Паттерны

    Рис 3. Паттерны “Двойная вершина” и “Двойное дно”.

  2. Паттерны “Тройная вершина” и “Тройное основание”.

    Эти паттерны встречаются гораздо реже, но являются сильным сигналом. По своему содержанию они напоминают “Двойную вершину” и “Двойное дно”, являясь их продолжением. Перед тем как подать сигнал, они повторяют предшествующие движение.

    “Тройная вершина” образуется, когда цена достигает дважды одного ценового диапазона, а на третий раз прорывает его , что дает сигнал для совершения покупки.

    “Тройное основание” – это противоположная “Тройной вершине” модель, которая образуется когда цена снижается дважды на один и тот же уровень и на третий раз достигает гораздо более низкого уровня, что дает сигнал для совершения продажи.

    Рис 4. Паттерны

    Рис 4. Паттерны “Тройная вершина” и “Тройное основание”.

  3. Паттерны “Прорыв симметричного треугольника” и вниз.

    Все мы помним фигуры технического анализа. Паттерн “Прорыв симметричного треугольника” напоминает фигуру “Симметричный треугольник” из технического анализа. Если прорыв происходит (как показано на рисунке слева) – это сигнал к покупке, а если наоборот вниз – то сигнал к продаже (на рисунке справа).

    Рис 5. Паттерны

    Рис 5. Паттерны “Прорыв симметричного треугольника” и вниз.

  4. Паттерны “Бычья катапульта” и “Медвежья катапульта”.

    “Катапульты” также напоминают модели технического анализа “Восходящий треугольник” и “Нисходящий треугольник”. Суть их сигналов схожа – как только цена прорывает треугольник в параллельной стороне, то дается сигнал к покупке или продаже. В случае “Бычьей катапульты” прорыв происходит и это сигнал к покупке (рисунок слева), а в случае “Медвежьей катапульты” прорыв проходит вниз, и это сигнал к продаже (рисунок справа).

    Рис 6. Паттерны

    Рис 6. Паттерны “Бычья катапульта” и “Медвежья катапульта”.

  5. Паттерн “45-градусная трендовая линия”.

    “45 градусная трендовая линия” создает линию поддержки или сопротивления, и в случае пробоя этой линии мы получаем сигнал к продаже (как на рисунке справа) или к покупке (как на рисунке слева).

    Рис 7. Паттерн

    Рис 7. Паттерн “45-градусная трендовая линия”.

Мы рассмотрели стандартные модели и сигналы графика “Крестики-нолики”. Теперь найдем некоторые из них на графике индикатора, который был размещен в начале статьи:

Рис 8. Определение паттернов на графике

Рис 8. Определение паттернов на графике “Крестики-нолики”.

 

Источники

  • https://1000sovetov.ru/article_igra-v-krestiki-noliki-kak-oderzhat-pobedu
  • http://InfoFx.ru/torgovye-metody/indikator-krestiki-noliki-dlya-mt4-i-5/
  • https://pro-ts.ru/indikatory-foreks/452-indikator-krestiki-noliki
  • http://myoption.ru/Krestiki-noliki-nestandartnye-grafiki-na-Foreks
  • https://www.mql5.com/ru/articles/656

[свернуть]
Помогла статья? Оцените её
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...