Musala Soft Logo Конкурс по програмиране на Musala Soft и PC Magazine Bulgaria PC Magazine Bulgaria Logo
  Състезателна система
Сезон 2010 - 2011
Сезон 2009 - 2010
Сезон 2008 - 2009
Сезон 2007 - 2008
Сезон 2006 - 2007
Сезон 2005 - 2006
Сезон 2004 - 2005
Сезон 2003 - 2004
Сезон 2002 - 2003
Правила
Задача 1
Задача 2
Задача 3
Задача 4
Задача 5
Задача 6
Класиране
Финален кръг
Сезон 2001 - 2002
Сезон 2000 - 2001
Валутен Пазар - Анализ

Очевидно успех при решаването на тази задача не може да бъде постигнат от програми, които имат "пасивно" поведение или се държат абсолютно случайно на пазара. В таблицата дадена по-долу са показани освен резултатите на 12-те финалисти на конкурса и резултатите на 4 програми написани от Журито специално за да се провери изказаното по-горе твърдение. Програмата, която се държи по най-пасивния възможен начин - нито купува, нито продава - естествено води до най-лош резултат. Успехът на тази програма зависи само от разликата във фиксинга в първия и последния момент на периода, т.е. тя е "обречена" на определен резултат който може и да е печалба, но може и да е много голяма загуба). Само един от финалистите има по-лош резултат от резултата на тази програма.

По-добре се справя програма, която регулярно купува не голямо количество долари. По-този начин тя си гарантира закупуването на едно "средно" количество долари. При условие, че тестовите примери съдържат стойности на фиксинга между 1.5 и 2.5 (съвсем реалистични по отношение на текущия пазар), то средната стойност на фиксинга е 2, очакваният среден резултат е по 500 000$ на тест или сумарно 4 000 000$. Регулярното купуване на малки количества оправдава очакванията за "среден" резултат. Но и това не е истинското поведение на една програма, с която можем да се опитаме да "играем" на реалния валутен пазар. Тази програма е по-добра от програмите само на двама от финалистите.

1Иван Станишев27,844,338
2Илиян Илиев24,755,862
3Владимир Молотков15,055,772
4Антон Димитров8,372,091
5Валентин Михов6,609,758
6Мартин Чилев6,333,598
7Иван Георгиев5,184,880
8Николай Николов4,802,199
 rand buy/buy/sell < 100k4,645,228
 rand buy/sell < 100k4,347,813
9Николай Тодоров4,112,811
10Андрей Николов4,109,259
 always $5004,092,482
11Владимир Недев4,007,030
 always $0 - buy at the end4,000,781
12Радослав Герганов3,749,983

Очевидно за по-добър резултат е необходимо да се играе активно - да се купува при падане на фиксинга и да се продава при покачването му. Двете програми, които без специални анализи реализират споменатата "активност" водят до по-добър резултат от програмите на четирима от финалистите. Изводът е, че за да се печели е необходимо внимателно анализиране на поведението на фиксинга, откриване на тенденции и активно използване на тези тенденции.

Задачата на Журито беше да подбере различни поведения на фиксинга, за да може да провери програмата на кой от участниците най-добре се справя с различни такива поведения. Ето какво беше скрито в данните за 8-те теста, с които бяха проверявани програмите на финалистите:
  • Тест 1. Логаритмично нарастващ фиксинг.
  • Тест 2. Логаритмично намаляващ фиксинг.
  • Тест 3. Поведението на фиксинга беше пресмятано от силно изменяща се функция, която в съвременната математика се нарича "wavelet".
  • Тест 4. Данните за този тест са взети от реални банкови курсове на валути за период от близо 6 години.
  • Тест 5. Този тест е получен като линейна комбинация на тестовете 1 и 3 с тежести ? и ? съответно.
  • Тест 6. Данните в този тест, представени на графика, изглеждат като накачени една за друга букви "J", т.е. - лек спад, последван от продължително покачване, отново лек спад и продължително покачване и т.н.
  • Тест 7. Квадратично нарастване (cx2) до средата на периода и огледално намаляване до края.
  • Тест 8. Квадратично нарастване (cx2) до средата на периода, рязко спадане и квадратично нарастване (-dx^2).
Както се вижда от таблицата, програмата на победителя Иван Станишев е доста близко да "средния" резултат в 3 от тестовете, в 2 от тях е далеч под средното (тест 3 може даже да се нарече провал), но в 3 от тестовете (1, 2 и 6) прави сериозен удар. Как е постигнат този резултат. Ето и обяснението на победителя:
"Решението ми се състои от 4 части, които са 2 по 2 еквивалентни, като през първият ден (Иван нарича отделните моменти на периода за дни, к.м.) не извършвам никаква операция.
1,2. Определям максималният скок на долара преди текущия момент. Ако моментният курс се е променил значително спрямо предишния, тогава: ако доларът е поевтинял, купувам долари за 75% от наличните ми левове, съответно ако е поскъпнал продавам 75% от доларите. Тази операция е малко рискована, тъй като няма гаранция, че курсът няма да продължи да се повишава (намалява) като при това положение се получи "загуба".
3,4. Определям дали има "трайно" повишение (намаление) на фиксинга. Тук понятието "трайно" не е много лесно да се дефинира. Аз съм приел, че трайно значи поне 3 дни. Основната ми идея беше да избегна "трионообразните" случаи когато фиксингът се повишава, намялва, повишава и т.н. всеки ден. Определям периода, в който фиксингът само намалява или само се увеличава до текущия ден. Пресмятам средното намаление (повишение) за този период и чрез него пресмятам първата очаквана стойност за следващия ден. Ако определеният период е повече от един месец, то гледам само данните от последния месец. За тях правя интерполация на Лагранж и чрез нея определям втората очаквана стойност. Сега от получените две очаквания определям средното и го приемам за истина. Нека сега сме имали трайно понижение. Ако очакваната стойност е по-ниска от текущата то купувам за известен процент лева долари и записвам за колко процента съм купил във файла SPAD.TMP. При продължаващо спадане на курса чета от файла колко процента съм купил предният ден, увеличавам този процент два пъти и отново купувам долари, като записвам новият процент. Ако очакваната стойност е по-висока, то купувам много по-голям процент долари. В другият случай - трайно повишение - ако очакваната стойност е по-висока то продавам известен процент и отново го записвам във файл. При продължаващо повишение увеличавам процента два пъти, продавам такъв процент долари и отново запомням този процент. Ако се очаква понижение то аналогично продавам много по-голям процент долари. И накрая ако няма скок или трайно понижение или повишение на фиксинга (това се получава при трионообразна редица), тогава ако предходният ден цената е била по-висока, то купувам за голям процент от левовете си долари, иначе продавам също толкова голям процент долари."

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

Резултатът на втория в класирането - Илиян Илиев - показва, че не е невъзможно да се води борба и с уейвлетното поведение на фиксинга. Именно на тестове 3 и 5 Илиян прави своя удар, който му донесе второто място в класирането. Много интересно е да се наблюдават резултатите от работата на програмата на третия в класирането - Владимир Молотков. Както се вижда от таблицата в програмата на Владимир видимо има някакъв дефект. Тази програма се държи "лошо" и записва рекордни неуспехи на тестовете с устойчиви тенденции - 1, 2 и 6. Това "нелогично" поведение, обаче му носи невероятен успех на уейвлетния тест 3 (интересното е, че това не става на производния от него тест 5). Изводът, който можем да направим е, че понякога най-добрият начин да се борим с хаоса на пазара може да се окаже абсолютно нелогичното поведение.

За въпроси можете да ни пишете на адрес: konkurs@musala.com.

Supported by Musala Soft Ltd.

Copyright 2000-2010 by Musala Soft Ltd. All rights reserved.