Добре дошли в Свободен Български ФОРЕКС форум.
Страница 1 от 5 123 ... ПоследнаПоследна
Резултати от 1 до 10 от общо 46
  1. #1

    Написване на собствен робот за автоматизирана търговия

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

    За самите стратегии няма да говорим в тази тема. Има си други теми, в които ще обсъждаме една или друга стратегия. Тука ще говорим и ще обсъждаме как да създадем СОБСТВЕН РОБОТ, който да търгува по тези стратегии. Нарочно наблягам на думичките СОБСТВЕН РОБОТ, защото те са най-важният аспект от една печеливша търговия. Причината е повече от ясна - всеки един програмист си има собствен стил на програмиране, и в общия случай избягва да използва чужд код в своите проекти. Това донякъде е обяснимо - чуждия код трудно се проследява, и още по-трудно може да бъде приет на сляпо доверие. А доверието към написания код е най-важната характеристика на всеки един търговски робот.

    От тука идва и заключението, че всеки един трейдер-програмист трябва сам да си нашише СОБСТВЕН РОБОТ, на който да има 100% доверие поради факта, че сам си го е писал и сам си знае какво е заложил като логика в него. Следователно няма как да си споделяме кодове един на друг, въпреки че не е невъзможно, но можем да си споделяме идеи и алгоритми, за което всъщност е създадена и тази тема.

    Аз лично ще споделям някои кодове и ще създавам специална тема за всеки един споделен клас, но ясно осъзнавам, че едва ли някой ще ги използва в собствените си роботи. Въреки това всеки би могъл да има полза от споделените кодове, най-малкото ако ги разгледа и почерпи от тях идеи за собствените си кодове. Затова препоръчвам и на вас да споделяте поне част от вашите кодове, като така взаимно ще си помагаме за прецизирането на един или друг аспект от кодовете на собствените ни роботи.

  2. #2
    Започвам с най-важните ГЛОБАЛНИ ХАРАКТЕРИСТИКИ на желания от нас СОБСТВЕН РОБОТ за автоматизирана търговия. Разбира се в началния момент от време всичките тези характеристики ще са само в сферата на желанията, които ще ги удовлетворяваме едно по едно, но ако още от самото начало не си изясним всичките желания, рискуваме в бъдеще да изпаднем в ситуацията да захвърлим целия написан код и да започнем да го пишем от самото начало. Това се случва доста често при сложни софтуерни проекти, затова със съставянето на списък от ВСИЧКИ НАШИ ЖЕЛАНИЯ искам да избегна точно този проблем.

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

    1. Робота трябва да е НАШ СОБСТВЕН РОБОТ и при това трябва да е ЕДИН ЕДИНСТВЕН
    2. Трябва да се използва ОБЕКТНО ОРИЕНТИРАНО ПРОГРАМИРАНЕ
    3. Робота трябва да работи в много нишки, независимо че е много трудно да се организира това.
    4. В робота трябва да има вграден бенчмарк на бързодействието на отделните негови участъци от код, както и възможност за работа в DEBUG MODE.
    5. Робота трябва да може да се компилира и да работи както под МТ4, така и под МТ5.
    6. Робота трябва да поддържа подробни логове и статистики за всяка една търговска операция, включая за всеки един тик, пристигнал по всеки един финансов инструмент на брокера.
    7. Тези логове и статистики се изпращат и на специален сървър, който натрупва информация за търговията на много на брой копия на робота по различни акаунти в различни брокери.
    8. В робота не трябва да има никакви настройки, освен възможноста за дистанционен контрол, влизащ моментално в сила без рестарт на робота.
    9. Робота трябва да може да работи правилно независимо от това на кой символ или таймфрейм го пускаме
    10. В робота се съдържат хиляди стратегии или по-точно всички наши стратегии, които някога сме открили
    11. Робота сам избира на кои стратегии ще даде капитал за търговия в зависимост от представянето им в миналото
    12. Money Management-a на робота е напълно автоматизиран и не се нуждае от никакви настройки
    13. Портфелния мениджмънт на робота е напълно автоматизиран и не се нуждае от никакви настройки
    14. При добавянето или при тегленето на пари от акаунта робота трябва автоматично да се адаптира към новото състояние.
    15. В свободното си време робота сам търси нови търговски стратегии по всички символи на брокера и най-добрите от тях ги включва в базата си с данни, която поддържа
    16. Търговията се извършва със сумарната клиентска позиция на всички стратегии, търгуващи вътре в робота.
    17. Следят се спредовете и слипиджите на брокера, прави се статистика по време, и на базата на нея се подбират оптимални точки за вход и изход.
    18. Робота трябва автоматично да се адаптира към всяка една промяна в настройките на търговския сървър.
    19. Робота трябва безпогрешно да отработва всяка една форсмажорна ситуация, като например спиране на връзката със сървъра или неговото временно забиване.
    20. Робота трябва да има защита от копиране и/или открадване. Той трябва да работи само тогава, когато се увери, че това е наш акаунт.

    Искам да спомена и за най-важната характеристика на нашия бъдещ робот, и тя е 100%-овото ДОВЕРИЕ, което ние трябва да имаме в него. Наличието на това доверие ще ни позволи да пуснем робота да търгува веднага след написването на поредния нов клас и неговото дебъгване за изчистване на софтуерните грешки.

    ПП: Този постинг в бъдеще ще го допълвам с аспектите и функционалноста, която обсъждаме и добавяме към нашия робот. Със сигурност ще се появят такива предвид факта, че ние искаме 100%-ова автоматизация не само на търговсктата дейност, но и на ресърча на нови търговски стратегии.

  3. #3
    Наблюдател
    Регистриран
    12.12.2019
    Мнения
    32
    Аз така като го гледам това , това са 6 месеца подбор на кадри и обучение, 50 програмиста , 10 човека поддържащ екип (пм и тестери) и 2 години работа тестове и т.н.
    Само точка 15 означава да се напише нов стратеджи куант , с вграден тестер , данни, правила, оптимизации, генетични алгоритми и статистики.
    В крайна сметка , когато това е готово.. ще прави точно това което правим и сега , но ще елиминира нацяло човека . Незнам дали това е добре и не мога да преценя каква бизнес стойност има този мащабен проект.


    Може би аз ако имах твоите възможности бих тръгнал от създаването на собствен стратеджи куант - малко по-кадърно направен и по гъвкав.Не че и това не е сериозен проект който ще изисква екип и т.н. но не е ракетна наука и е постижимо. После бих го пуснал безплатно(или на някаква символична цена) и бих копирал всяка топ стратегия на сървъра си(както предполагам тия от SQ правят). По този начин ще се впрегне някаква огромна външна клиентска мощ за генериране. После генерирания формат може да се направи предаврително удобен за интегриране в нещо друго. И чак тогава може би бих мислил за останалите точки.

  4. #4
    Да, на пръв поглед проекта изглежда страшен, но никой не е казал, че трябва да го направим целия, за да го пуснем в експлоатация. Точно обратното - с някаква базова функционалност може да заработи само в рамките на 1-2 месеца, и да се пусне да търгува, а после лека полека ще се усъвършенства ако трябва години наред.

    Тебе най-много те плаши часта със тестването на стратегии във фонов режим, но нея можем да я оставим последна. Останалото не е чак толкова страшно, още повече че аз този проект го замислям от много време и имам доста класове, които от раз мога да ги наместя на вярното място. Специално по вградения тестер аз нямам избор - трябва да го напиша, защото нямам друг софтуер за търсене на стратегии, който да работи със зигзаци. Този тестер обаче няма да е чак толкова сложен. Измислил съм елегантен начин тестера да остане сравнително прост и в същото време да върши много работа.

    Много мислих по въпроса дали да ползвам готовия код на Strategy Quant или да започна да си пиша мой собствен, и стигнах до извода, че с мой код ще стане по-бързо и по-лесно. От Strategy Quant ще вземам само функцията с търговската логика, а всичко останало ще си е мое. Ще напиша един базов клас на търговска стратегия, който после ще го наследявам и с няколко реда ще дописвам само конкретните търговски правила на всяка една стратегия. И след това в бъдеще с усъвършенстването на базовия клас всъщност ще усъвършенствам и всички вече работещи стратегии.

    Основната идея е всички стратегии вместо да отварят и затварят сделки, да записват в глобалното пространство само едно integer число със стойности -1, 0 и +1. Тоест Long, без позиция и Short. Всичко останало ще го прави една единствена инстанция на търговския клас, който ще изчислява сумарната позиция на всички стратегии, и ще добавя/отнема лотове към вече отворените такива. Така няма да има състезание за достъп до Trading Context на МетаТрадер-а, пък и ще се реализира икономия от спред и маржин.

  5. #5
    Наблюдател
    Регистриран
    12.12.2019
    Мнения
    32
    Така е, плаши ме и то поради две причини :
    1. Докато работят във фонов режим , те някак си не търгуват а все едно се бактестват. Трябва да обират реални слипиджи, реални спредове ,реални суапове, реални тикове. Според дори трябва да търгуват на реален сървър, в краен случай поне на демо.
    2.Представи си че напишем някаква супер сложна система обаче допуснем някаква грешка някъде.Системата ще си работи , всичко уж ще е ок, но ние някога някъде при някакви условия ще правим различни неща.И може никога да не го разберем дори тъй като ще имаме хиляди системи, стотици хиляди сделки логове и т.н.

  6. #6
    Добре де, представи си обратната ситуация. Пак имаме хиляди стратегии с хиляди логове, но разпиляни по хиляди роботи, всеки един от които е различна версия и с различни бъгове в тази версия. Откриваме един бъг и какво - ще го поправяме на 1000 места ли с 1000 прекомпилирания и 1000 подмени на роботи по различните сървъри по света?

    Аз този проблем го имам и в момента - 7-8 акаунта с по 30 SQ робота в тях, и вече изпаднах в ситуацията да не мога да ги поддържам (преглеждам, пренастройвам, подменям и т.н.). Затова съм ги изоставил на самотек, но от това губя пари, защото няма кой да следи и да подменя счупилите се стратегии.

    Така или иначе искам сам да си напиша търговската логика, защото в тази на SQ има много недомислици и дори бъгове, които вече открих. Например някои параметри, които са изтеглени в променливи, въпреки това SQ на някои места в кода ги забива като константи. Променяш стойноста на параметъра в променливата, но си остава стойноста на константата в кода. Има и друг проблем на SQ роботите - те правят търговските операции така, все едно че няма други роботи в Metatrader-а. Тоест вземат контрола на нишката и на Trading Context и го държат много дълго време в много на брой повтарящи се опити да направят сделката. Ами другите роботи какво да правят в този момент? Искам да променя тази логика на друга - правиш опит за сделка и се отказваш независимо дали опита е успешен или не. Следващия опит ще е на следващия тик или дори по-късно, когато дойде по-нисък спред.

    Специално за спреда аз вече съм сложил една логика, която да не допуска търговски операции при висок спред. Дотук добре, но SQ роботите въобще пропускат сделката, защото на следващите тикове вече са си загубили сигнала. Тези неща много добре трябва да се обмислят и прецизират, защото те ще са сърцето на нашата търговия, а в момента имаме сериозен проблем. Също така и със стоповете - трябва да се поддържат 2 вида стопове - далечен авариен, който ще се вижда от брокера, и по-близък реален, който ще го знае само нашата програма. Идеята е никога да не се стига до аварийния стоп, освен при форсмажор (скъсан интернет, рестарт на MetaTrader-a и други редки ситуации).

  7. #7
    По принцип най-лесния метод за отработка на търговски операции не в един, а в много на брой тикове с подбор на най-добрия тик, се състои именно в идеята, която вече написах. Имаме желано състояние (желан от стратегията брой лотове) и реално състояние (реален брой лотове). Желания брой лотове непрекъснато може да се променя нагоре или надолу, тъй като той представлява сума от желанията на много стратегии. Търговския алгоритъм така ще манипулира реалния брой лотове, щото той с минимални закъснение да догонва желания брой. Няма обаче да се втеляваме всичко да става в един единствен тик. Ще има закъснение и изчакване на тик с по-нисък спред.

    На пръв поглед това забавяне губи точноста на отработването на сделките на всяка една стратегия, но това не е опасно в статистически план. Да, някои единични сделки ще станат по-губещи или по-печеливши, но в статистически план крайния резултат на ефекта от закъснението ще е нулев, или по-скоро дори положителен, защото подбираме тикове с нисък спред.

    Ако приемем, че например имаме стратегия със сделки със средна продължителност от 24 часа, и ПМО-то на стратегията е 24 пипа, то тогава ние имаме средностатистически ръст от 1 пип на час. Е как тогава едно закъснение от 20-30 секунди или дори 5 минути може да повлияе на крайния статистически резултат?

    Това мое разсъждение е изтествано на практика още преди 15 години. Тогава Иво Сеизов караше дилърите да покриват големите сделки буквално на секундата, а аз твърдях, че няма смисъл толкова да бързаме. И за да разрешим спора, накарахме дилърите да записват цената на сделката на клиента и цената, на която те са успели да я покрият със закъснение, стигащо до 1 минута, че и повече. И след около 100 сделки се оказа, че средностатистическата разлика е по-малка от 1 пип, въпреки че при някои единични сделки имаше разлика от по 20-30 пипа.

    В заключение:
    Аз твърдя и съм дълбоко убеден, че известно закъснение при отваряне или затваряне на сделките няма да промени средностатистическия резултат от търговията, но за сметка на това може да ни даде редица екстри и най-вече облегчения при написването на кода на търговската логика. Като цяло кода ще стане по-прост, по-разбираем и по-лесен за дебъгване. Неговата логика ще е елементарна - прави се опит за търговска операция и се приключва, независимо дали операцията е успешна или не. Следващия опит ще е не на следващия тик, а например след 50 милисекунди. Въобще нашите роботи няма да работят на OnTick(), а на OnTimer() с период 50 ms.

  8. #8
    Наблюдател
    Регистриран
    12.12.2019
    Мнения
    32
    Ние ще имаме 1000 робота генерирани и тествани с техните си кодове и те ще работят с техните си кодове.Т.е. всичко това се очаква да работи. Съгласен съм че кодовете са им абсурдно написани но...

    Търговската логика за която говориш също е страшничка.
    1.трябва да имаш всички системи като обекти .
    2.всичките им сделки с цени на отваряне стоплос тейкпрофит , меджик нъмбъри и т.н.
    3.Всичките им исторически сделки
    4.Всички суапове
    5.Всичките им логове
    6.някакъв интерфейс за управление и мониторинг

    Първо очевидно че това ще ангажира голям брой обекти, голям брой памети , не е ясно МТ как заема и освобождава памети нищо чудно да се окаже че всички тия обекти остават завинаги в паметта и нищо не ги чисти.
    Втория момент е че ние постоянно ще имаме някакви списъци от сделки които трябва да се пазят и в бази данни тъй като във всеки момент може нещо да стане със системата.Погледнато реално това си е направо 1:1 с един трейдинг сървър.Посто клиентите са заменени с експерти , и евентуално ще отсъства комуникационната логика тъй като всичко ще е на едно място.Преди време работих в една компания, където един доста солиден екип прави трейдинг сървър в продължение на 2 години докато го изчисти да работи добре.

    Но най- главния проблем пак остава екзекюшъна.
    Ясно е че ако ще се търгува сериозно , ще трябва да се договорят условия с конкретен брокер всичко да излиза на бридж към ЛП.Тогава обаче маркет екзекюшъна винаги ще ти дава различен резултат.
    твоята система : идва тик-> изпълнява се логиката-> отваря се сделка на този тик
    в реалната ситуация : идва тик->изпълнява се логиката и се изпраща рекуест за позиция->отива в брокера->изпраща се към ЛП ->сключва се сделка на цената която е там в момента->връща се към брокера инфо за сделката->връща се към нас инфо за сделката.
    Само при супер спокоен пазар опен цената при теб ще е = опен цената в брокера.Но кръглия час при който търгъва SQ никога не е спокоен защото се отварят различни борси, излизат новини ..
    Абсолютно същото се случва и с екзекюшъна на всички стопове и тейкпрофити.

  9. #9
    Напълно съм съгласен с тебе. За съжаление автоматизираната търговия наистина представлява нещо много сложно, ако трябва да я направим дурако устойчива и способна да се справи с всеки един сложен аспект от реалноста. Но така или иначе ние сме се хванали на хорото и се опитваме да го играем колкото се може по-добре.

    Бързия и лесен начин е да ползваме готови SQ роботи и само да се опитаме да ги натъпчем много на брой в един експерт, но това е свързано с дълъг списък от недостатъци. Като временно решение е допустимо, но не ни разрешава проблема със затруднената поддръжка на вече търгуващите роботи. Така че това можем да го направим само като първа стъпка с цел да тече някаква търговия, докато разработваме истинския универсален робот.

    При всички случаи аз ще се пробвам с този универсален робот, за да видя как ще потръгнат нещата и накъде ще задуха вятъра. Развиването му и усъвършенстването ще става по пътя на най-малкото съпротивление. И докато се появи някакъв работоспособен вариант, ще продължавам да си търгувам със SQ роботи.

  10. #10
    Наблюдател
    Регистриран
    12.12.2019
    Мнения
    32
    Цитат Първоначално публикувано от Mateev Виж публикацията
    По принцип най-лесния метод за отработка на търговски операции не в един, а в много на брой тикове с подбор на най-добрия тик, се състои именно в идеята, която вече написах. Имаме желано състояние (желан от стратегията брой лотове) и реално състояние (реален брой лотове). Желания брой лотове непрекъснато може да се променя нагоре или надолу, тъй като той представлява сума от желанията на много стратегии. Търговския алгоритъм така ще манипулира реалния брой лотове, щото той с минимални закъснение да догонва желания брой. Няма обаче да се втеляваме всичко да става в един единствен тик. Ще има закъснение и изчакване на тик с по-нисък спред.

    На пръв поглед това забавяне губи точноста на отработването на сделките на всяка една стратегия, но това не е опасно в статистически план. Да, някои единични сделки ще станат по-губещи или по-печеливши, но в статистически план крайния резултат на ефекта от закъснението ще е нулев, или по-скоро дори положителен, защото подбираме тикове с нисък спред.

    Ако приемем, че например имаме стратегия със сделки със средна продължителност от 24 часа, и ПМО-то на стратегията е 24 пипа, то тогава ние имаме средностатистически ръст от 1 пип на час. Е как тогава едно закъснение от 20-30 секунди или дори 5 минути може да повлияе на крайния статистически резултат?

    Това мое разсъждение е изтествано на практика още преди 15 години. Тогава Иво Сеизов караше дилърите да покриват големите сделки буквално на секундата, а аз твърдях, че няма смисъл толкова да бързаме. И за да разрешим спора, накарахме дилърите да записват цената на сделката на клиента и цената, на която те са успели да я покрият със закъснение, стигащо до 1 минута, че и повече. И след около 100 сделки се оказа, че средностатистическата разлика е по-малка от 1 пип, въпреки че при някои единични сделки имаше разлика от по 20-30 пипа.

    В заключение:
    Аз твърдя и съм дълбоко убеден, че известно закъснение при отваряне или затваряне на сделките няма да промени средностатистическия резултат от търговията, но за сметка на това може да ни даде редица екстри и най-вече облегчения при написването на кода на търговската логика. Като цяло кода ще стане по-прост, по-разбираем и по-лесен за дебъгване. Неговата логика ще е елементарна - прави се опит за търговска операция и се приключва, независимо дали операцията е успешна или не. Следващия опит ще е не на следващия тик, а например след 50 милисекунди. Въобще нашите роботи няма да работят на OnTick(), а на OnTimer() с период 50 ms.
    Пракиката е показала че забавянето понякога дори може да подбри резултата.
    Мен ме притеснява обаче че съм се сблъсквал с доста експерти които печелят на бактест а за същия период губят на реален акаунт и всичко това е от екзекюшъна.

 

 

Информация за темата

Потребители разглеждащи тази тема

В момента има 1 потребител (и), разглеждащ (и) тази тема. (0 потребител (и) и 1 гост (и))

Разрешения за писане

  • Вие не може да да публикувате нови теми
  • Вие не може да публикувате мнения
  • Вие не може да публикувате прикачени файлове
  • Вие не може да редактирате вашите мнения
  •