Java - Работа с многомерными массивами и overhead
07 Aug : 17:07  от  hitman249

Как и в любом другом языке программирования при создании объекта, в частности сегодня обсуждаемого, - многомерного массива, создаются накладные расходы(overhead). 
 
- Всякий Java-объект имеет overhead 8 байт;
- Java-массив имеет дополнительный overhead 4 байта (для хранения размера);
- Ссылка имеет размер 4 байта;
- Размер всех объектов выровнен по 8 байт;
- Многомерный массив — это массив ссылок на массивы (а каждая ссылка напомню 4 байта). 
Посчитаем: итого 12 байт (объект 8 байт + overhead 4 байта).
 
Теперь смотрим на примере:
float[400][19765][4]
 
где
float[][][4] = (по 4 байта) 16 байт + overhead 12 байт = 28 байт,
выравниваем делением на 8 = 32 байта
 
считаем сколько эти массивы занимают памяти
400 * 19765 = 7 906 000 массивов * 32 байт = 252 992 000 байт = 241.3 мб
 
теперь считаем массив ссылок
float[][19765][]
19765 массивов-ссылок (по 4 байта) + overhead 12 байт = 79 072 байт 
(на 8 делится выравнивать не нужно)
 
всего таких массивов 400 * 79 072 байт =31 628 800 байт = 30.2 мб
 
и наконец сам массив
float[400][][]
400 (по 4 байта) + overhead 12 байт = 1612 байт, выравниваем до 8 = 1616 байт
 
Считаем:
252 992 000 + 31 628 800 + 1616 = 284 622 416 байт = 271.4 мб на пустой многомерный массив.
 
Как так получилось мы разобрались, теперь разбираемся как этого избежать.
Самый правильный вариант отсортировать массив по возрастанию.
float[4][400][19765]
 
Считаем:
31 628 800 байт + 1616 байт + 32 байта = 31 630 448 байт = 30.2 мб
Итог - сэкономлено 241,2 мб
 
А что получится, если использовать 1 массив?
 
Считаем:
(19765 * 400) + (400 * 4) = 7 906 000 + 1 600 = 7 907 600 * 4 + 12 (+ не забываем выровнить по 8) = 31 630 416 байт = 30.1 мб

В целом конечно разница не существенна, но лично рекомендую не создавать объекты небольших размеров в больших количествах, т.к. 3\4 будет просто оверхед, а 1\4 сами данные, которых даже меньше.
Технологии - Поиск паттернов
21 Jun : 15:23  от  hitman249

Наброски алгоритма поиска паттернов с удовлетворяющей точностью.
 
Поиск паттерна это всегда перемалывание огромного количества чисел, всяких разных комбинаций. Сегодня паттерн состоял из 100 чисел (вариаций цены), завтра он может быть из 50 чисел. Паттерн это фигура рисуемая графиком которая с достаточной вероятностью прогнозирует рост или падение цены. 
Чтобы робот научился видеть паттерны, они должны быть приведены в нечто среднее, равное. Робот не может видеть паттерн, пока его не смаштабируют до одинакового уровня. 
Эта задача стоит сейчас наиболее остро, от неё зависит ложносрабатывающий эффект.
Разумеется паттерны будут проверяться на показания других индикаторов и только наиболее убедительные будут торговаться.
Алгоритм на стадии формирования.
Forex - Как защитить свои деньги от мошенничества брокера?
04 Jun : 07:53  от  hitman249
Я уже неоднократно писал об этом в данном топике автоматизированный контроль честности брокера.
Лично мои мысли, роботы успешно зарабатывают в демо режиме, но удивительным образом не работают на реальном счёте. Вопрос - как такое может быть?
А ведь ответ напрашивается сам собой. На реальном счёте котировки подвержены деформации и отличаются от рыночных. Тем самым брокер рисует паттерн говорящий, что сейчас котировка с вероятностью в 60% пойдёт вверх, наш робот на это покупается и чудесным образом котировка рвет в низ.

Как этого избежать?
Избежать полностью этого не получится, но отпрыгнуть в сторону от проходящего поезда мы всегда можем.
Что у нас на вооружении ?
Сверка котировок с другими ДЦ, открытие ордера в обратную сторону в качестве защиты и Demo зеркала, с зеркальными отражениями тех же действий
Технологии - Прогнозирование изменения цен на дневном графике
01 Jun : 01:41  от  hitman249
если close < open, то Х = ( HIGH + LOW + CLOSE + LOW ) / 2;
если close > open, то Х = ( HIGH + LOW + CLOSE + HIGH ) / 2;
если close = open, то Х = ( HIGH + LOW + CLOSE + CLOSE ) / 2.

Где:
HIGH - максимальная цена;
LOW - минимальная цена;
CLOSE - Цена закрытия.

Прогнозируемая максимальная цена завтрашнего дня равна: HIGH+1 = X - LOW,
а прогнозируемая минимальная цена на завтра: LOW+1 = X - HIGH.

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

Если цена открытия не попадает в ожидаемый диапазон, то можно:
1) игнорировать прогноз для данного дня;
2) скорректировать диапазон, переместив ожидаемый минимум (максимум) чуть ниже (выше) ожидаемого максимума (минимум), если рынок открылся выше (ниже).
Технологии - Определение силы тренда
31 May : 01:33  от  hitman249
Формула Индикатора Демарка (DeMarker Indicator):

Рассчитываем DeMax ( i ):
Если HIGH ( i ) > HIGH ( i - 1 ) , то DeMax ( i ) = HIGH ( i ) - HIGH ( i - 1 ), иначе DeMax ( i ) = 0.


Рассчитываем DeMin ( i ):
Если LOW ( i ) < LOW ( i - 1 ), то DeMin ( i ) = LOW ( i - 1 ) - LOW ( i ), иначе DeMin ( i ) = 0.


Рассчитываем сам DMark ( i ):
DMark ( i ) = SMA ( DeMax, N ) / ( SMA ( DeMax, N ) + SMA ( DeMin, N ) ).


Где:
HIGH ( i ) - максимальная цена текущего бара;
LOW ( i ) - минимальная цена текущего бара;
HIGH ( i - 1 ) - максимальная цена предыдущего бара;
LOW ( i - 1 ) - минимальная цена предыдущего бара;
SMA - простое скользящее среднее;
N - количество периодов, используемых для расчета.

Из этого следует что, Индикатор Демарка (DeMarker Indicator) строится по следующему алгоритму:
если максимум текущего бара выше максимальной цены предыдущего бара, то выводится соответствующая разность. Если максимальная цена текущего бара равна или ниже максимума предыдущего бара, то выводится нулевое значение. Затем полученные таким образом за период результаты суммируются. Полученное число становится числителем индикатора Демарка и делится на ту же самую величину плюс сумма разностей между минимальными ценами предшествующего и текущего баров за период. Если минимум текущего бара ниже минимума предыдущего бара, то выводится соответствующая разность, в противном случае выводится нулевое значение.

Индикатор Демарка (DeMarker Indicator) колеблется в диапазоне от 0 до 1. Значения индикатора от 0.7 до 1 образуют зону перекупленности, а от 0 до 0.3 - зону перепроданности.


Пример медвежьего схождения.

Сигналы индикатора Демарка (DeMarker):
  • бычье расхождение / медвежье схождение - основной сигнал, указывающий на слабость действующего тренда);
  • в условиях флэта выход из зоны перекупленности (перепроданности) – сигнал на продажу (на покупку).
Forex - Снижение рисков
30 May : 13:20  от  hitman249
Так как forex очень высоколиквидный, необходимость ограничения рисков очевидна.
Робот рассчитан на минимальное плечо, что уже само по себе сокращает риски. Но также стоит задуматься и о стандартных методах. Таких как Stop Loss и Take Profit, правда в роботе они соответственно будут не прямыми наследниками MT4, а написаны силами Java языка, соответственно и реагировать на события они будут не совсем как оригинальные.

Робот рассчитан на долгую игру, приблизительно по стоп-лоссу будет 50 пунктов минимум, а по тейк-профиту в 2 раза больше. У каждого ордера и каждой копии робота эти значения будут выставляться случайным образом, чтобы брокер не мог выявить сигнатуру и соответственно успешно загонять робота по стоп-лоссу.

При таких условиях средний срок исполнения ордеров около 2х дней. Что означает, что если цена так и не пошла в нашу сторону, значит она скоро пойдёт против нас. В таком случае будет осуществляться закрытие стоп-лосса или если повезло больше и цена в плюсе, будет закрытие в тейк-профите.

Ограничение залога будет выставлено в 10%.
Forex - Непредсказуемость робота
30 May : 05:42  от  hitman249
Полагаю брокеры скоро найдут данный сайт. Успешно скачают робота, проанализируют его поведение и настроят свои фильтры на его сигнатуру. Поэтому нужно решать проблему до её рождения.

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

Только в этом случае сигнатура робота будет едва уловимой.
Forex - Стандарт доверия
28 May : 01:37  от  hitman249

2 процента людей — думает, 3 процента — думает, что они думают, а 95 процентов людей лучше умрут, чем будут думать.
— Бернард Шоу
(На картинке очень длинная шпилька в 1000 пунктов) Главное в этом вопросе совпадение котировок до предельного расхождения в 0,0001. Брокеры у которых расхождение более чем на 0,0003, скорее всего мошенничают. Брокеров дающих 5-тый знак в котировке(тотже Alpari), также обходим стороной. Шпилька у брокера обычно не случайна, но благодаря синхронизации можно успеть открыть ордер в другую сторону(стандартный способ защиты), либо закрыть ордер, если он плюсовой. Новостям которые рассылает брокер лучше не только не доверять но и полностью их игнорировать, часто брокер условно делит аудиторию по полам, рассылает первой новость, что такая-то валютная пара завтра пойдет вверх, а второй части аудитории, что эта же валютная пара пойдет, но уже в низ.
Forex - Что нужно учитывать при торговле
23 May : 15:19  от  hitman249
Дорога в 1000 верст начинается с первого шага

Трейдинг – это поле боя! Всегда есть 2 воюющих стороны. Умный воин ждет, кто будет побеждать и присоединяется к побеждающей стороне, т.е. когда идет расстановка сил между покупателями и продавцами, трейдер идет в ту или иную сторону!
А.Герчик


Основные правила торговли на акциях, которые будут переделаны под реалии рынка Forex и по возможности интегрированы в робота:
1 - Большие институты торгуют обычно большими ордерами первые 2 часа после открытия и последние 2 часа перед закрытием.
2 - S&P фьючерс очень хорошо держит уровни.
3 - Фармакологические и биологические самые чувствительные компании.
4 - Лучше за акцию чуть переплатить, но зайти по правильной цене, чем купить дешевле, но неправильно.
5 - Надо смотреть на потенциал акции, что она может сделать на дневном движении и как часто она это делает, оценивать потенциал по волатильности.
6 - Если пробивает дневной, недельный и месячный график, то потенциал движения большой.
7 - Некоторые акции определённым образом себя ведут на квартальных отчётах.
8 - Круглые цифры являются уровнями поддержки и сопротивления.
9 - Если на базе происходит сужение канала, то это точка для входа.
10 - Если дневной график закрылся и открылся на одном уровне, то это хороший сигнал.
11 - Легче торговать продолжение движения, чем остановку.
12 - Сильно растущий долгосрочный тренд нельзя шортить.
13 - Ложное пробитие очень часто бывает при маленьком объёме.
14 - Возле точных уровней многие будут пытаться зашортить, поэтому надо оценивать расстановку сил.
15 - Акция должна быть в горячем секторе и желательно ведущая.
16 - Надо искать чистые формации.
17 - 20-ти дневные скользящие средние очень неплохо работают для входа.
18 - Внимательно изучить объём, сопротивление и поддержку на дневных и месячных графиках.
19 - Если акции суждено идти вниз, то она пойдёт вниз даже на восходящем маркете, и наоборот.
20 - 3-5% Bid или Ask от внутридневного объёма это весомая цифра, а если 10% и более, то надо идти за продавцом/покупателем.
21 - Если Spread в акции больше 10 центов, то это достаточно много и лучше не заходить.
22 - Если где-то был уровень поддержки или сопротивления, то чаще всего там появится или крупный продавец или крупный покупатель.
23 - Когда акция подходит к уровню, где стоит много сильных продавцов, то иногда лучше её скинуть и подождать пока она пробьет уровень.
24 - Если акция сильно идёт вниз/вверх, а потом начинает тормозить, то, скорее всего, заканчивается потенциал и надо уходить.
25 - Минимум должно быть два сигнала для входа в позицию.
26 - Если акция внутри дня в Range, то, скорее всего она и на дневке в Range.
27 - Когда резкие палки и акция вылетела из уровня, то надо готовиться выходить.
28 - Надо чтобы график показывал то, что в дневном графике есть движение, а 5 минутный то, что он красивый. Внутри дня смотрим хорошую волатильность и плавность.
29 - Обращать внимание на то, чтобы акция хорошо держала уровни.
30 - Если акция закрывается возле High и на следующий день пробивает его, то она пойдёт очень хорошо.
31 - Если акция хорошо пробивает уровни, то она делает это постоянно, если она упирается в уровни, то, скорее всего, она будет и в будущем это повторять.
32 - Чем больше Gap, тем больше возможность в нём заработать.
33 - Надо обязательно смотреть в каком секторе находится акция, чтобы сектор был не мёртвым.
34 - Надо обязательно смотреть – куда идёт рынок и как при этом ведёт себя акция.
35 - Хорошим уровнем поддержки/сопротивления внутри дня является уровень закрытия предыдущего дня и уровень открытия дня торговли.
36 - На подъёме первым уровнем сопротивления может быть максимум или минимум красно