У попередній статті, Hard-Core Information - Details and Thoughts on Automated Real Offering of Quantitative Trading System (I. Problems and Difficulties), говорилося про деякі основні проблеми реальної торгівлі у валютному колі. У цій статті йдеться про основну мету пропозиції фірми.

Я думаю, що є чотири основні:

1. Реалізувати встановлену логіку стратегії

У цьому немає сумнівів. Коли є сигнал, необхідно виконати відповідні операції, відкриваючи і закриваючи позиції. Цей пункт вимагає, щоб ви не використовували лімітні ордери, інакше, якщо транзакція не може бути завершена, вам доведеться гнатися за ордером. Зрештою, чи варто гнатися за ордером .

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

Крім того, якщо ви використовуєте лімітні замовлення, ваш код буде складнішим, оскільки вам доведеться керувати невиконаними лімітними замовленнями, а потім переслідувати замовлення. А якщо заповнено лише частину лімітного замовлення? Чи залишилися лімітні ордери завжди висять? Або я повинен пропустити цю частину та видати інше ринкове замовлення? Така одноетапна операція генерує кілька транзакційних замовлень, і подальший перегляд також викликає труднощі та легко заплутатися. Тому краще просто використовувати ринковий ордер. Поки подання буде успішним, транзакція буде в основному гарантована. Якщо це справді стратегія, чутлива до прослизання, то торгуйте лише цілями з хорошою ліквідністю.

Крім того, для контрактів кредитне плече не слід змінювати за бажанням. Найкраще використовувати ідеальне кредитне плече для ретестування, а потім дисконтувати його на 20%. Не прогнозуйте суб'єктивно ринок і регулюйте кредитне плече вручну. Зміна позицій також є табу в автоматизованій торгівлі.

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

2. Зведіть до мінімуму ковзання

Про це було сказано в попередній статті. Ковзання неможливо усунути, його можна лише пом'якшити. Це вимагає від вас якомога швидше отримати інформацію про ринкову ціну, а також інформацію про різні кошти та позиції на біржовому рахунку, щоб ви могли швидко відповісти.

З точки зору загальної структури реальної пропозиції, існує багато підстратегій, і це вимагає своєчасного отримання різноманітної інформації, тому для розподілу завдань потрібен спеціальний ринковий центр веб-сокетів. Оснащено ринковим центром Plan B від Restful для резервного копіювання. Таким чином, якщо веб-сокет відключений і не може бути підключений, все одно буде відносно нова ціна, щоб визначити, чи потрібно залишити ринок. Під час бігу потрібно бути швидким. Краще бігти в неправильному напрямку, ніж застрягти в пробці і не знати, що чекає майбутнє.

3. Тривала експлуатація

Про це було сказано в попередній статті. Валютне коло працює 7*24, і ваш код неможливо закрити. Це вимагає, щоб код не переривався різними винятковими ситуаціями, і щоб був код для обробки різних неочікуваних ситуацій. Також не повинно бути багів на кшталт витоку пам'яті, інакше програма з часом вийде з ладу, а то й весь сервер вийде з ладу. На щастя, Python не схильний до таких проблем. Він має автоматичний механізм переробки пам’яті. Якщо це не працює, ви можете вручну перезапускати торгову програму кожен день або кілька днів. Це основні вимоги до розробки фонового коду, і їх легко досягти.

Як правило, для кількісної торгівлі використовується Python. Головною особливістю Python, мови сценаріїв, є динамічна компіляція, яка має дещо нижчу ефективність, оскільки її непросто налагодити, оскільки вона компілюється та виконується одночасно (але це не вплине на середньо- та низькочастотні транзакції на всі). Якщо в логіці коду прихована проблема, її може бути непросто виявити. Наприклад, якщо є 100 рядків коду та є проблема в рядку 99, але він щоразу запускається лише до рядка 95, тоді проблема не буде виявлена, оскільки помилку потрібно знайти після запуску до рядка 99 і запуску Але це може бути надто пізно, і програма безпосередньо вийде з ладу, якщо ви не спробуєте перехопити виняток.

Інша функція фактично включена в проблему, згадану вище. Оскільки Python строго типізований, неявні перетворення є рідкісними. Якщо ви надто довіряєте типам даних, надісланим із сервера, особливо цим числам, ви, ймовірно, зазнаєте збитків, оскільки іноді числа перетворюються на рядки. Різні валюти в обміні, різні версії API та однакові дані повернення від websocket і rest можуть бути різних типів. Тому, в принципі, ви повинні кожного разу примусово виконувати трансформацію або спочатку визначити, чи потрібно трансформувати.

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

Одним словом, все для довгострокової повністю автоматизованої та без втручання роботи реальної угоди.

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

4. Контроль ризиків

Це головний пріоритет вимог фірми до пропозиції.

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

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

Ось два рішення коротко, і я розповім про них детально пізніше, коли матиму час.

По-перше, найкраще мати жорсткий стоп-лосс, який схожий на стоп-лосс із фіксованим коефіцієнтом збитку. Наприклад, якщо велика валюта втрачає більше ніж 10%, а мала валюта втрачає 15%, позиція буде негайно закрита і втече.

Для методу жорсткого стоп-лоссу ціна стоп-лоссу повинна бути встановлена ​​на момент відкриття позиції. Таким чином, алгоритмічні стоп-лосс ордери (деякі також називаються умовними ордерами) слід подавати якомога швидше після відкриття позиції, і немає необхідності змінювати ціну на півдорозі. Таким чином біржа допоможе вам відстежувати ціну в режимі реального часу, а потім допоможе вам подати ринковий ордер для виходу з ринку після його активації. Таким чином може бути багато прослизання, але воно, швидше за все, буде більш стабільним і надійним, ніж стоп-лосс, який ви встановили самі. І навіть якщо щось піде не так, і він не спрацює, ви все одно можете піти на біржу претендувати на права (тому вам потрібно перейти до верхньої біржі) .

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

Другий момент - програма не буде відкривати позиції випадковим чином. Не відкривайте позиції безперервно, але думайте, що це не так, і в кінцевому підсумку відкривайте велику експозицію. Це нормально, якщо ціна не коливається протягом короткого періоду часу. Якщо вона раптом зміниться, це залежить від того, скільки позицій ви відкрили. Звичайно, це помилка низького рівня, але вона трапляється. Особливо після ітерації та оновлення коду на півдорозі, його можна не розглянути уважно.

У цьому випадку потрібно спочатку сповільнити темп відкриття позиції і дочекатися повернення результату відкриття позиції. Крім того, ви повинні перевірити та підтвердити інформацію про обліковий запис, перш ніж відкривати позицію безперервно. Звичайно, ви також можете записувати всі операції локально, що заощадить кількість запитів API та час для запитів на біржі. стан рахунку.

Також більш ефективно можна заздалегідь обмежити максимальне кредитне плече біржі. Це можна налаштувати самостійно. Binance за замовчуванням становить 20 разів, але ви можете змінити його на 3 або навіть 2 рази (звичайно, для цього потрібно, щоб ваша стратегія сама по собі не використовувала високе кредитне плече, інакше ви не зможете відкрити високе кредитне плече, коли потрібно). Тож яким би божевільним не був код, неможливо створити значну експозицію, поки ви спите. Це безпечніше.

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