Це цікаво

Аналіз графіків бінарних опціонів або як я в черговий раз довів собі, що халяви не існує

Нещодавно я натрапив на цікаве відео з розряду «Щоб швидко стати багатим потрібно всього лише…». Відео починається пафосним перераховуванням солідної пачки грошей і демонструванням пристойного рахунку. Далі хлопець показує стратегію, яка заснована на фразі «Ну ось дивіться на графік, тут видно».

 

Однак я людина скромна, а тому вирішив перш ніж піти за своїми лярдами спочатку перевірити дану стратегію математично і програмно. Нижче ви можете подивитися, що з цього вийшло.

Опишу спочатку «Стратегію» (Я не впевнений, що можу скинути посилання на відео тут, але зроблю це в коментарях при необхідності). Хлопець пропонував нам переключити графік на японські свічки а потім просто ставити на той самий курс, яким попередня свічка закрилася. Тобто якщо минулий відрізок в 5 хвилин закрився в мінус, то і зараз ставимо на мінус. У разі ж програшу в наступний раз подвоюємо ставку.

Ех, як же мені подобаються розумники зі стратегією Мартінгейла. Але перейдемо до справи.

 

Почнемо з декомпозиції задачі:

 

  1. Необхідно написати скрипт, який перетворює графік в рядок виду OOGGO, де O — Orange, G — Green. Тобто падіння і зростання.
  2. Далі необхідно на цій рядку змоделювати стратегію і зібрати статистику.
  3. Проаналізувати результати і зробити висновок.

 

Пишемо аналізатор графіка

 

На сайті графік представляє з себе SVG елемент. Звичайно, ми можемо аналізувати його прямо там, однак для початку я волію працювати у себе у власному проекті. Зрештою, нам би спочатку переконатися в дієвості стратегії, а вже потім писати робота, який методами click() буде фарм наше багатство»

 

Коментарі відразу після коду.

 

function turnToString(img) {
 var canvas = document.createElement('canvas'); //(1)
 var ctx = canvas.getContext('2d');

 canvas.width = img.width;
 canvas.height = img.height;
 ctx.drawImage(img, 0, 0, img.width, img.height);

img.remove();
 document.body.appendChild(canvas); 

 var result = [];
 var isLocked = false;
 var imgData = ctx.getImageData(0,0,canvas.width,canvas.height).data;

 for(var i = 0;i<canvas.width;i++) {
 var mainColor = "N";
 for(var j = 0;j<canvas.height;j++) { //(2)
 var colorIndexes = getColorIndexes(i,j,canvas.width);
 var redPartIndex= colorIndexes[0];
 var greenPartIndex= colorIndexes[1];

 if (imgData[redPartIndex] > 120) {
 mainColor = "O";
break;
}
 if (imgData[greenPartIndex] > 120) {
 mainColor = "G";
break;
}
}

 if (isLocked == false && mainColor == "G") { //(3)
result.push("G");
 isLocked = true;
}
 if (isLocked == false && mainColor == "O") {
result.push("O");
 isLocked = true;
}
 if (mainColor == "N") {
 isLocked = false;
}

 console.log("Yet another line")

}
 return result.join("");
}

 

Код getColorIndexes, отримує індекси кольорів потрібного пікселя.

 

function getColorIndexes(x,y,width) {
 var R = 4*(width*y + x);
 return [R,R+1,R+2];
}

 

Нагадаю, масив Uint8ClampedArray , що повертається функцією getImageData — це просто набір кольорів і альфа каналів пікселів поспіль. Він може містити мільйони позицій, проте швидкості роботи переживати не доводиться, оскільки в гуглі працюють чудові хлопці, які зробили з V8 машину з обробки структур даних.

 

Все просто.
1) Замінюємо картинку на канвас. Сміливо втручаємося в DOM, так як це локальний проект, і в такому вигляді куди-небудь перекочувати він не зможе ніяк.
2) Итеруємся через масив пікселів по стовпцях. Дивимося на червону і зелену складові пікселя в KGB RGB. Якщо вони перевищують певний рівень (З великим запасом), значить зупиняємо прохід через стовпець. Main color присвоюємо потрібну букву.
3) Дивимося, чи була дана свічка вже врахована. Ознакою учтенности вважаємо isLocked рівний true. Якщо ж колір не був виявлений і мінлива зберегла початкове значення «N», значить ми натрапили на проміжок між свічками, що означає необхідність скинути значення isLocked

 

Profit! Тепер ми можемо завантажити графік!

Я навіть вивів результати під відповідними свічками і, як ми можемо бачити, все працює в штатному режимі.

 

Емуляція стратегії

 

Перейдемо до другої частини. Тепер наше завдання отриманий рядок пропустити через функцію, яка буде емулювати дану стратегію.

 

function basicProfitAnalisis(mask) {
 var maskInUse = mask;
 var result = [0,0];
 var currentBet = 50;
 var baseBet = 50;
 var maxBet = baseBet;
 var totalSum = 0;
 var multiplier = 0.82;

 for(var i = 1;i<maskInUse.length;i++) {
 if (maskInUse[i] == maskInUse[i-1]) {
 result[0]++; //Лічильник перемог.
 totalSum += currentBet*multiplier;
 currentBet = baseBet;
 } else {
 result[1]++; //Лічильник поразок.
 totalSum -= currentBet;
 currentBet *= 2;
 if (currentBet > maxBet) {
 maxBet = currentBet;
}
}
}

 document.getElementById("betsWon").innerHTML += result[0];
 document.getElementById("betsLost").innerHTML += result[1];
 if (totalSum >= 0) {
 document.getElementById("pureChange").innerHTML += `<font 
color='green'>${totalSum}</font>`;
 } else {
 document.getElementById("pureChange").innerHTML += `<font color='red'>${totalSum} 
</font>`;
}
 document.getElementById("maxBet").innerHTML += maxBet;

 setCookie("totalSum", parseInt(getCookie("totalSum"))+totalSum, 365);
}

 

Цей код зовсім простий. Ітеруємося за отриманою рядку, починаючи з другого символу. Кожен раз порівнюємо поточний символ з попереднім. Якщо він не дорівнює йому, значить ми програли — віднімаємо суму ставки з поточного зміни початкової суми і подвоюємо ставку. Якщо ж ми виграли, додаємо до зміни ставку, помножену на коефіцієнт (Найбільший на цьому сайті — 0.82, його і візьмемо) і скидаємо ставку до базового рівня. Потім просто виводимо результат і додаємо суму в кукі, щоб не рахувати вручну.

 

Також пам’ятаємо про те, що математика і Теорія Ймовірностей люблять жартувати жарти. Дуже люблять жартувати жарти. Ну дуже люблять жартувати жарти. А тому ведемо облік максимальної ставки через maxBet (Це, мабуть, самий цікавий пункт статистики, який може вас здивувати. А може і ні).

 

Ну що ж, запустимо той же графік, на якому перевіряли коректність роботи функції-аналізатора.

Хм. Трохи не пощастило, буває. Ще.

Як там кажуть? Другий раз — збіг?

Третій зразок закономірність… Але мені-то, звичайно, просто не щастить. Так завжди.

Але він показував гроші, не міг же він брехати.

А може він ці гроші на таких як я заробив?

Про! Всі бачили? Чакра удачі відкрилася. Зараз ось ще трохи пограю і піду вибирати особняк і дружину — модель.

Ви знаєте, гроші не головне.

 

Статистика і висновки.

 

Ясна річ, я не можу завантажити сюди всі тести, які я проводив, але ось статистика за останнім 10-й:

 

  • Позитивних тестів: 1 з 10.
  • Виграно грошей: 2663.
  • Зміна початкової суми при нескінченно великому рахунку: -274484.
  • Максимальна ставка: 819 200 (!!!).

Так чому ж це не працює?

Насправді, ринок в стабільній стадії — це настільки складна структура, де на ціноутворення може впливати те, якою пастою чистить зуби Сатья Наделла, що на таких коротких проміжках, як 5 хвилин, можна взагалі говорити про випадковість. А у випадку, вибачте, взагалі важко вигравати.

 

Тобто в даному випадку ми маємо чисту стратегію Мартінгейла. Проте за цієї стратегії не можна вигравати. Це не філософський камінь. Граючи з нею досить довго, ми просто перерозподіляємо рух грошей, що виграємо дуже часто, але мало, а програємо рідко, але багато. У кращому випадку маточікуваннч такої системи дорівнює 0. Проте ж в рулетці, наприклад, існує крім червоного і чорного ще й зеро, що знижує шанс вгадати колір до 48.65% (Зеро — 2.7%). У трейдерів теж є своє «Зеро» — коефіцієнт. Він сильно відрізняється від активу до активу. Я взяв максимальний — 0.82 для курсу долар/євро. Однак навіть з ним вихід в плюс стає неможливим.

 

Вже сам той факт, що казино або будь-яка подібна організація існує, говорить нам про те, що в середньому компанія отримує більше грошей, ніж віддає.

 

Але як же так? адже це виглядало так правдоподібно на відео! Так, виглядало. Точно також, як літак виглядає як найбільш небезпечний вид транспорту для більшості. Або як завдання мають тенденцію виглядати простими і очевидними постфактум. На жаль, але ось з таким листом лише підтверджених когнітивних спотворень, людина є вельми посереднім спостерігачем. Саме тому ми формалізуємо різні процеси, придумуємо суворі алгоритми, активно співпрацюємо з комп’ютером у вирішенні завдань.

 

Всім нам хочеться вірити, що десь там є спосіб заробляти гроші і/або славу, нічого не роблячи, а наш мозок лише послужливо домальовує нам картину світу в якому це реально. Ми буквально хочемо бути обдуреними.

 

Система не зможе існувати, якщо не буде мати механізмів самопідтримки і регулювання. Всі ми давно знаємо, чому не можна надрукувати багато грошей для всіх. Така система просто завалилася! Тому і не можна стати багатим, лежачи на дивані. Ви повинні перетворити свій час, сили і мотивацію в те, що хочете одержати.

 

Це така проста істина, але більшість продовжує вірити в незліченну безліч шахрайських і околомошеннических схем, казино і лотереї.

Дисклеймер

Попрошу особливо відзначити, я не сказав, що на тих же бінарних опціонах неможливо заробити. Я лише мав на увазі, що не існує в природі легких стратегій для цього. Ви зможете стабільно заробляти тільки якщо навчитеся проводити технічний аналіз, будете мати набір компаній, за акціями яких ви близько знайомі (У різних компаній свої особливості руху акцій), будете вміти управляти ризиками… Можна всьому цьому навчитися швидко? А літак можна навчитися садити за пару днів?

 

Ну і наостанок про когнітивні викривлення.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close