Proqramlaşdırma ticarəti ilə bağlı əvvəlki üç məqaləyə baxın:

Sərt məlumat - Kvant ticarət sisteminin avtomatlaşdırılmış real ticarət detalları və düşüncələri (birinci Problemlər və çətinliklər)

Kvant ticarət sistemi - Avtomatlaşdırılmış real ticarət detalları və düşüncələri (iki Real ticarət məqsədi)

Kvant ticarət sistemi - Avtomatlaşdırılmış real ticarət detalları və düşüncələri (üçüncü Emal texnikaları)

Burada çox strategiyalı ticarət sistemindən, real ticarət kodunun ümumi strukturu içindəki bazar mərkəzindən daha da danışmaq istəyirəm.

Giriş

Ticarət bu sahədə, xüsusən də müqavilə ticarətində, müəyyən bir müddət keçdikcə bir neçə yüksək çarpan ticarət ustası peyda olur, yüz minlik sərmayəni asanlıqla on milyonlara çevirir. Ancaq bu insanlar demək olar ki, meteor kimi gecə səmasında parlayır, qısa müddətli parıltıdan sonra isə susur və görünməz olurlar.

Və başqa bir qrup, uzun müddət ticarət edən köhnə dostlar, bütün günü susqun, ağızlarında gələcəyin qeyri-müəyyənliyi, bazara hörmət, qara quşun istənilən vaxt düşməsi ilə bağlı umutsuz sözlər deyirlər, eyni zamanda çox aşağı qaldıra bilmək üçün ticarət edirlər, istiqamət divar başında oturan ot kimi sağa-sola yellənir, bir az da olsa peşəkarların qətiyyəti və cəsarəti yoxdur. Ancaq nə üçünsə bu insanlar bazarda aktiv qalır, qaldıra bilmək aşağı olsa da, mövqeləri hələ də kiçik deyil.

Ticarət dünyasında, bu insan emosiyalarının cəhənnəmində, ulduzları asanlıqla əldə etmək olur, amma uzun ömürlü olmağı tapmaq çətindir.

Bir sağ qalan kvant ticarətçisi olaraq, ticarətdə ən vacib məqamlardan birinin çox strategiyanı tanımaq olduğunu düşünürəm. Subyektiv ticarətdə çox strategiyaya nail olmaq daha çətindir, çünki insan resursları məhduddur (təşkilat kimi bir neçə ticarətçi işə götürmədikcə) 7*24 saat işləyən bazar da giriş nöqtələrini itirmək üçün asan olur. Ancaq proqramlaşdırılmış ticarət, daha asan həyata keçirilir. Proqramlaşdırma, insan beyin və gözünün qiymət tendensiyalarını tanıma qabiliyyətini itirir, amma icra gücü daha güclüdür, strategiyaları təkrarlayıb mövqeləri yayma qabiliyyəti də daha güclüdür, üstünlükləri və mənfi cəhətləri var.

Çoxlu obyektli, çox strategiyalı, çox parametrlidir, maliyyə mövqeyi təbii olaraq yayılır. Tək dəfəlik qazanc və ziyan artıq stimullaşdırıcı böyük dəyişikliklər olmur, əksinə maliyyə xəttinin mümkün qədər hamar olmasına çalışır.

Ümumi görünüş

Aşağıdakı şəkil mənim bir sıra real vaxt kodu arxitekturasının ümumi sxemidir.

图片

Bütün arxitektura iki hissəyə bölünür. Bir hissəsi müstəqil bazar mərkəzi, digər hissəsi isə strategiya məntiqinin həyata keçirilməsini təmin edən ticarət proqramıdır.

Adətən bir hesabı bir proqramı işə salmaq üçün istifadə edirəm, onların strategiya parametrləri və hesab açarları konfiqurasiya faylı ilə fərqlənir, beləliklə, tamamilə kodu paylaşa bilərik, kod versiyası da daha asan idarə olunur. Strategiyanın bəzi parametrləri biraz fərqli ola bilər, əsasən müəyyən əməliyyatları yaymaq üçün, birdən-birə eyni anda işləməmək üçün.

Əvvəlki strategiyalar az olanda, mən hər bir alt strategiyanı işə salmaq üçün bir Python proqramı istifadə edirdim, sonradan serverin yaddaşı çatmadığını gördüm. Çünki bir Python proqramı, yalnız özünün təxminən 60M yaddaş tutdu, əgər strategiyalar bir az artarsa, bir neçə hesabda kopyalandıqda, tez bir zamanda çoxlu yaddaş tutacaq. Daha güclü serverlərə pul xərcləmək mümkündür, lakin bu, idarə etmə və baxım üçün də çətindir. Nəhayət, indi belə bir şəkildə dəyişildi, hesabla bölündü, eyni strategiyalar müxtəlif valyutalarda (çox valyuta çox parametrlidir) bir qrup halında, sonra bir qrup strategiya bir Python tətbiqi oldu. İşlədikdə, bu kombinasiya modeli çoxlu hesablar və strategiyalar üçün yaxşıdır, kod idarəsi, real vaxt əməliyyatları da çox asandır.

Bir alt strategiya bir Python tətbiqi modelinin üstünlüyü odur ki, kod çox sadə ola bilər. Lakin, düşünün ki, əgər sizin strategiyanız 40 ən yaxşı böyük valyutaya gedərsə, sonra hər bir valyuta 3 fərqli strategiya işlədərsə, bu 120 alt strategiya olacaq, əgər daha üç hesab əlavə etsəniz, bu, 360 alt strategiyaya çevriləcək, bu model davam etməyə çətinlik çəkəcək.

Tətbiq az olduqda, əvvəlcə tmux kimi terminaldan istifadə edərək log məlumatlarının real vaxtda çıxmasını təmin edə bilərsiniz, proqramın işə düşdüyü başlanğıcda monitorinq etmək çox rahatdır. Sonrakı dövrdə kod stabil olduqda, pm2 kimi əməliyyat proqramlarından istifadə edin. Gələcəkdə dövrü olaraq log fayllarını analiz edin.

Çoxlu obyektli çox strategiyalı vəziyyətdə, müstəqil bazar mərkəzi standart olmalıdır. Əldə olunan müxtəlif bazar məlumatları bir neçə ticarət proqramı arasında paylaşılır, yəni yuxarıdakı şəkilin sol tərəfindəki strategiya modulları.

Bazar mərkəzi

Aşağıdakı şəkil daha ətraflı bir bazar mərkəzi modul sxemidir.

图片

Əvvəlcə konfiqurasiya faylı vasitəsilə əldə edilməsi lazım olan k xətti simvollarını təyin edə bilərsiniz, beləliklə, sonra növləri dəyişdirmək daha asan olacaq.

Əgər çox dövrlüdürsə, o zaman onların ortaq dövrü k xəttini əldə edə bilərsiniz, sonra hər bir strategiya öz tələblərinə uyğun olaraq yenidən nümunə götürə bilər.

Əgər bir az sadələşdirmək və birdəfəlik olmaq istəyirsinizsə, o zaman birbaşa 15 dəqiqəlik k xəttini əldə etmək daha yaxşıdır, çünki orta və aşağı tezlik strategiyaları, xüsusən də tendensiya izləyənlər üçün, 15 dəqiqədən aşağı dövrü olanlar, uzun müddətdə çox çətin qazanmaq olur.

Məsələn, 15 dəqiqəlik, 1 saatlıq, 4 saatlıq strategiyanız varsa, bazar mərkəzi yalnız 15 dəqiqəlik k xəttini əldə etməlidir. Əgər yenidən nümunə götürdükdən sonra böyük dövr k xəttinin uzunluğu kifayət deyilsə, o zaman işə salma anında 15 dəqiqəlik k xəttini məlumat bazasında daha çox saxlamaq lazımdır.

Çünki websocket yalnız ən son yeniləmələri k xətti məlumatlarını göndərir, əgər strategiyanızın istifadə etdiyi k xətti dövrü nisbətən uzundursa və geri dönüş vaxtı da uzun olsa, məsələn 4 saatlıq ma150, o zaman 600 saat (25 gün) məlumatdır, 15 dəqiqədə bir k xətti olarsa, 2400 k xətti tələb olunur. Bu, bazar mərkəzi işə düşdüyü zaman rest api vasitəsilə bir dəfəlik əldə edilərək saxlanmalıdır, sonra davamlı yenilənmənin əsası kimi.

Bütün bazar mərkəzini iki tətbiqə bölmüşəm. Əslində, bir tətbiqdə birləşdirmək də mümkündür, amma ayrı olmaq daha robustdur. Əvvəlcə PlanB-nin ikincil olduğunu söyləyim.

PlanB

Əvvəlki bir neçə məqalədə, bu əsasən PlanA-nın websocketinin düşməsi halının qarşısını almaq üçün olduğunu demişdim, müvəqqəti ehtiyat kimi istifadə olunur, xüsusən strategiyanın çıxış anlarında, qiymət artıq bir məsafəni geriyə getdiyində, hələ də mövqeyi tərk etmədiyinizdə, gözlənilmədən daha çox ziyan yaratmamaq üçün.

PlanB çox sadədir, əsasən public_get_ticker_price funksiyasını istifadə edərək, bütün daimi müqavilələrin ən son qiymətlərini bir dəfəlik əldə etməkdir. Bu da Binance-ın özünün topladığı ən son qiymət məlumatıdır.

Hazırda Binance-da təxminən 200-dən çox daimi müqavilə var, əgər bir-birini ayrı-ayrılıqda ən son qiymətləri əldə etsəniz, hər bir növün qiymətini 3 saniyədə bir yeniləmək üçün bir dəqiqə ərzində 4000-dən çox api çağırışı etməlisiniz, bu mütləq limitləri aşır, bu mümkün deyil. Ancaq öncəki funksiyanın api çəkisi yalnız 2-dir, əgər 3 saniyə bir dəfə, hər dəqiqə yalnız 40 api kvotasını sərf edir, tamamilə aşmağı düşünməyə ehtiyac yoxdur.

Mənim testimdən sonra, əsasən Binance bütün müqavilələrin qiymətlərini 1-2 saniyədə bir toplayır, buna görə də orta və aşağı tezlik strategiyaları üçün ehtiyat qiymətləri, 5 saniyəlik gecikmə tamamilə kifayətdir.

Əgər tələblər yüksək deyilsə, hətta bunu bütün müqavilələrin kobud k xəttini sintez etmək üçün istifadə edə bilərsiniz, websocket həllini tamamilə atlaya bilərsiniz. Bu k xəttləri ticarət üçün istifadə edilə bilməsə də, bütün bazar məlumatlarının skan edilməsi üçün istifadə edilə bilər, sonra özünüzün dizayn etdiyiniz strategiya alqoritmi əsasında, məsələn, hansısa ortalama yayılması, toplanması, sadə forma tanınması və s., subyektiv ticarətçilərə giriş siqnalı vermək mümkün olur. Əks halda, bu qədər valyuta ilə, necə başa düşmək olar. Əgər yüksək səviyyəli gündəlik ticarətçilər varsa, bu cür alətlər faydalı ola bilər, ticarəti dəstəkləmək üçün. Mən əvvəllər başqalarına bənzər alətlər yaratmışdım, bazar yaxşı olanda həqiqətən yaxşıdır, amma son vaxtlar bazarda heç bir hərəkət yoxdur.

Əlbəttə, yalnız çoxlu valyuta ticarət edərkən bu həllin praktik istifadəsi var. Əks halda, hər bir növün bazar BBO qiymətlərini birbaşa əldə etmək daha yaxşıdır.

Həmçinin unutmayın ki, ehtiyat qiymət məlumatları da əsas kodda tez-tez istifadə edilməlidir, məsələn, mövqenin uyğun olan fiat valyuta məbləğini hesablamaq, təqribi qazanc və ziyan nisbəti kimi çox dəqiq məlumat tələb etməyənlər. Çünki, tez-tez istifadə edilməyən kod parçaları və məlumatlar, artıq korlanmışdır, bunu bilmədən, yalnız istifadə zamanı aşkar edirsiniz ki, artıq gecdir. Kod yazmağı bilənlər bunu bilirlər, bu cür appendiks kodları asanlıqla təsadüfən pozulur və bununla bağlı heç bir məlumatınız olmur.

PlanA

Bazar mərkəzinin əsas kodu. Bu tətbiq əsasən 4 funksiyaya malikdir.

  1. Tarixi əsas k xəttini əldə edin. Yəni, məqalənin əvvəlində qeyd olunduğu kimi, hər dəfə işə saldıqda, bütün strategiyaların ehtiyacı olan hər bir k xəttinin mövcud olmasını təmin edin.

  2. websocket idarəsi. Bu modul biraz daha mürəkkəbdir, müxtəlif düşmə vəziyyətlərini, yenidən qoşulma və s. ilə başa çıxmalıdır. Hər dəfə ticarət mərkəzi yeni k xətti məlumatlarını göndərdikdə, məlumat bazasında k xəttinin ən son barının məlumatını yeniləyin.

  3. K xətti məlumatlarından başqa, hər bir növün dəqiqlik məlumatlarını yeniləməyi də bazar mərkəzində saxlayıram. Yəni public_get_exchangeinfo funksiyası ilə əldə olunan müxtəlif sifariş qiymətləri, sifariş sayı üçün minimal dəqiqlik, daha sonra istifadəsi asan olan lüğət tipinə çevrilir. Beləliklə, bütün strategiyalar paylaşa bilər.

  4. Son olaraq yoxlama, sadə bir sanity check kifayətdir. Əldə olunan k xəttinin ardıcıl olub olmadığını, itkin olmadığını yoxlayın, sonra mütəmadi olaraq rest api ilə əldə edilən k xəttləri ilə bir-bir müqayisə edin, PlanB ilə əldə olunan qiymətlərlə arasındakı fərqin çox böyük olub olmadığını yoxlayın və s. Ümumiyyətlə, çox müqayisə və yoxlama etmək, səhvləri erkən aşkar etmək üçün.

Bunlar, yəqin ki, mənim orta və aşağı tezlik strategiyaları bazar mərkəzi arxitekturasıdır. Əgər lazım olarsa, hesabın yenilənmə məlumatlarını websocket vasitəsilə əldə edə bilərsiniz. Ancaq bunu etmək biraz çətindir, əksər hallarda lazım olmur.