Създаване на стратегия от нулата - подробно ръководство. Умен или глупав клиент? Създайте походова стратегия

увеселителен парк:
Ще ни трябват:
строителен спрайт
спрайт меню
СПРАЙТОВЕ НА РАЗЛИЧНИ БУТОНИ КАТО:
srite с надпис (строеж, строеж, строеж и т.н.)
прозорец, който се появява
чертеж на сграда,
1) ние ще добавим останалите сами
2) думата фалшификат - създадена от мен, т.к ще трябва да го фалшифицираме, за да съответства на нашия източник)
Да започваме:
1) създайте всичко, което е написано в точка I, с изключение на 1)
Нека създадем глобална променлива, наречена пари, задайте произволна първоначална сума пари
Ще създадем и обект за мишка и клавиатура
Нека създадем текст, да го наречем информация, да създадем винаги събитие и да създадем действие в него:
изберете информация в избора на действие изберете задайте текст в текста напишете това:
"пари: " &(глобален ("пари".
2) добавете меню, основната задача на менюто не е да пречи, а да помага на играча да се ориентира (как може да пречи? - лесно е, ако го поставите в средата на играта); преди да направим менюто, ние Ще създадем нов слой, който ще наречем меню, в неговите пропорции (настройки, опции) в елемента за показване, който пишем:


ще добавим спрайт в него и ще вземем изображението на менюто, което беше в материалите за предварителна продукция (точка I) и ще поставим нашето меню на уединено място, където няма да пречи, но ще се вижда на екрана
Да поставим и бутон от преддовършителни материали (точка I) с надпис BUILD (или нещо подобно)
нека го включим в менюто
Сега отидете в редактора на листа със събития
създайте събитие (#бла бла бла# - това е моето съобщение (обяснение) към вас, само че вместо бла бла бла ще има моят коментар за вас; >> - действие; ll - разделяне на прозорци например:

мишка&клавиатура ll върху обект щракване ll щракване с левия бутон към обект #вашият бутон на менюто с надпис BUILD (или нещо подобно)##останалото по-късно (вижте точка 3)#
3)сега най-трудната част(Разбих това на две точки, за да не е толкова сложно),
създайте спрайт от материали за предварително довършване „прозорец, който ще се появи“
след това създаваме празен спрайт, наречен p1, преместваме прозореца извън екрана и поставяме p1 на мястото, където трябва да се появи вашият прозорец, когато натиснете бутона за изграждане (или нещо подобно CHVER)
страхотно! Сега отидете на редактора на листа със събития
Нека запишем незавършеното събитие до края:
Текст ще зададе текст ще бла-бла-бла)
мишка&клавиатура ll върху обект щракване ll щракване с левия бутон към обект #вашият бутон на менюто с надпис BUILD (или нещо подобно)#>>
4)Втората част от най-трудната част:
нека създадем спрайт, където ще бъде начертано изображението на сградата (предварителни довършителни материали), нека го наречем h1
нека създадем празен спрайт, наречете го p2, сега го поставете на мястото, където трябва да се отвори прозорецът,
Нека създадем спрайт, също прозорец (предварителни довършителни материали), в прозореца ще напишем красиво името на сградата, нейната цена и описание (по избор) и ще я наречем i1
нека създадем друг празен спрайт, наречен p3, поставете го до p2, само така че да докосва p2 само с горния ляв ъгъл
Сега нека създадем няколко събития, но първо правим предишното събитие едно ново действие:
мишка&клавиатура ll върху обект щракнат ll щракнат с левия бутон към обект #бутона на вашето меню с надпис BUILD (или нещо подобно)#>> sistem ще създаде обект спрямо обект ll #вашият прозорец# #номер на слоя под менюто с име# # X ;Y-не променяй# към обект p1
>>системата ще създаде обект спрямо обект ll #вашият втори прозорец# #номер на слоя под менюто с име# #X;Y-не променяйте# към обект p2
Също така трябва да му върнем събитие:
копирайте събитието и го обърнете
ново събитие
мишка&клавиатура ll е над обект ll h1>>система ll създава обект спрямо обект ll i1 #номер на слоя под менюто на името# #X;Y-не променяй# към обект p3
Нека направим спрайт със сграда (използвайте предварително производствени материали) и я наречете къща
Нека създадем прозорец, където нашите сгради ще се показват, когато бъдат избрани в менюто, наречете го rlo
събития:
мишка&клавиатура ll щракване върху обект ll щракване с левия бутон към h1>>sistem ll създаване към обект спрямо обект ll къща #номер на слоя под менюто с име# #X;Y-не променяй# към обект rlo
>> системата ще извади от стойността ll #парична сума, която трябва да бъде отнета по време на строителството#
Сега беше невъзможно да се изгради събитие
Ще ви кажа предишния си метод на забрана (когато свърша с писането, ще проуча друг метод, който ме накара да посинявам, когато си спомних света на тематичния парк на играта)
събития:
къща ll при сблъсък с друг обект ll към къща
>> къща ще унищожи
>> система ще извади от стойността ll - #удвоете сумата пари, която е била отнета по време на строителството##забележка, която трябва да поставите - количество#
общо взето всичко.
III какво искам да кажа:

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

КаМиКаЗа:
Всички „системни“ изрази трябва да бъдат включени в тага „Код“.
Тогава мисля, че ще е по-добре.
Освен това ми се струва, че екранните снимки няма да навредят тук. А също и изходния код, за начинаещи.

увеселителен парк:
Не знам как да правя екранни снимки на събития.

Е, това не е необходимо.

iamnp:
theme_park , на клавиатурата има специален бутон - PrintScreen

увеселителен парк:
Знам, че някои хора просто го правят по различен начин, освен това всеки има свой собствен дух
и ако настроя всички тези спрайтове, малко хора ще разберат.
Е, може би някой ще даде плюс? Нищо чудно, че се борих?

бурлаченко:
За да бъде такъв урок интересен за всеки, той трябва да бъде форматиран по съответния начин, но тук „както и да било“.
И все пак, ако искате, малко по малко, когато имате време, моля, "разкрасете" го.

увеселителен парк:
добре, ще се прибера от училище и ще се приготвя.
PS. добавен източник

Серега Лебедев:

iamnp, къде отиват тези екранни снимки по-късно?

КаМиКаЗа:

Към клипборда.
Отидете на който и да е текстов редактори изпълнете операцията "Поставяне" или натиснете Ctrl+V.

В тази статия едва ли ще засегна нещо непознато. Всички изчисления са прости и разбираеми за всеки, който знае какво е Ajax. Вече написах статия за това как да комбинирам клиент със сървър в игри в реално време (). В тази статия разглеждам същите проблеми, които се отнасят за походовите игри.

И така, какво е походова игра? Следното определение може да се намери в Уикипедия походова стратегия - е жанр компютърни игри, чиято основна характеристика е, че играчите се редуват да правят ходове, за разлика от стратегията в реално време. Бих опростил малко това определение:

  • Стратегия стъпка по стъпка - е походова стратегическа игра.
  • Стратегическа игра - Това е жанр игри, в които ключът към постигането на победа е планирането и стратегическото мислене..
  • Походова игра - е жанр от игри, чиято основна характеристика е, че играчите се редуват да правят ходове.
Походовите игри включват:
  • Походови стратегии
  • Игри на карти
  • Настолни игри (шах, го, монопол и др.)
Отбелязвам, че походовите игри налагат по-малко ограничения върху сложността на протокола за взаимодействие в сравнение с игрите в реално време. а именно времето за реакция на конкретно събитие не играе ключова роля. На играча обикновено се дават 10 секунди, за да вземе решение. Дори ако пингът е гигантски, да речем 3 секунди, тогава играчът все още има 7 секунди за размисъл. Освен това пингът може да скача и скача, но това изобщо не ни интересува (в игрите в реално време тази ситуация практически убива всеки протокол).

Обикновено (в 95% от походовите игри) точно един играч взема решението във всеки един момент. Следователно броят на исканията, на които трябва да отговорим адекватно, се стеснява.

Ето защо, когато създаваме протокол, ще се фокусираме предимно върху лекотата на неговото внедряване и поддръжка. Това ще ни позволи да реализираме повече печалба за по-кратко време.

Горното разсъждение се основава на 2-месечното развитие на определена игра с карти.

Умен или глупав клиент?

Първо, нека решим колко „умен“ може да бъде нашият клиент. Обсъждам дали си струва да дублирам логиката на приложението (правилата на играта) на клиента. Разбира се, сървърът трябва да е интелигентен, за да предотврати потенциално хакване на приложението. Но струва ли си да преподавате бизнес логика на клиента?

Това пряко зависи от това колко тежи пълното количество данни за състоянието на вашата игра. Ако това количество данни е голямо, отнема много време за събиране на сървъра и се прехвърля към клиента, тогава има смисъл да внедрите част от логиката на клиента, за да разтоварите сървъра. Например в Civilization индикаторът за използваната памет винаги е извън класациите. Можете ли да създадете нещо подобно, като оставите само потребителския интерфейс на клиента?

От друга страна, колкото по-умен е клиентът, толкова по-скъпа ще бъде разработката на играта. Нека отбележа, че времето за разработка на сървъра не зависи по никакъв начин от ерудицията на клиента. Дори ако клиентът е супер-дупер-мега умен, ако потребителят иска да презареди прозореца на браузъра, сървърът ще трябва да събере и събере всички данни за играта, за да ги прехвърли на клиента. А ла „Зареждане на запазена игра“. Заключение: Интелигентният клиент може да ускори приложение, но винаги ще изисква допълнителни ресурси за разработване на приложението.

Предлагам следното тест:

1. Обемът на канала позволява ли?

Оценете средното тегло на пълното количество данни за състоянието на играта. След това умножете по средния брой заявки към сървъра за секунда. Ако полученото число надвишава капацитета на канала за изходящи данни, тогава глупавият клиент е неприемлив. Ако този брой надвишава 20% от изходящия канал, тогава трябва да помислите дали ще работи?

2. Трудоемко ли е?

Оценете сложността на алгоритъма за събиране на данни за играта (за части от секундата). Тук вземете предвид всички заявки към базата данни. След това умножете по средния брой заявки към сървъра за секунда. Ако времето надвишава една секунда, тогава глупав клиент е неприемлив. Ако това число надвишава 200 ms, тогава трябва да помислите дали ще издържи?

Продължение:

Здравейте всички! Сега ще ви кажа как да направите прост RTS (RTS - стратегия в реално време, т.е. стратегия в реално време) да отворите хамак 8.1 (работоспособността не е гарантирана на 8.0) да създадете обект objControl, тоест това ще бъде нашия основен обект, създайте събитие за създаване ( Създаване) Добавяне на събитие => Създаване (Добавяне на събитие => Създаване) събитието за създаване се извършва само веднъж - когато създавате, щракнете върху контролния раздел вдясно вертикално менюи щракнете с десния бутон върху Execute code и напишете кода (най-добре е да не копирате кода, а да го напишете сами, много по-лесно е да запомните):

200?"200px":""+(this.scrollHeight+5)+"px");">startx=0; //Деклариране на променлива за началната точка на x
начало=0; //Деклариране на променлива за началото на точката от y
draw_rect=false; //Не рисувайте правоъгълник за избор


Променлива: част от паметта, която съдържа информация. Те имат собствено име, с което можете да се свържете с тях. Променливите в GML могат да съдържат реално число или низ. Например маса е променлива, дървена или стъклена стойност
Сега създаваме стъпково събитие (Стъпка, Добавяне на събитие => Стъпка) и изпълняваме операцията отново (щракнете с десния бутон върху Изпълнение на кода):

200?"200px":""+(this.scrollHeight+5)+"px");">
if mouse_check_button_pressed(mb_left) //Ако е натиснат LMB
{
draw_rect=вярно; //Чертаем правоъгълник
startx=mouse_x; //Старт x позиция = мишка x позиция
starty=mouse_y; //Начална позиция = позиция на мишката
с всички избрани=false; //Това все още не е декларирана променлива, ще разберем какво ще прави по-късно
}

If mouse_check_button_released(mb_left) //Ако LMB е освободен
{
draw_rect=false; //Не рисуваме правоъгълник
за (i=0;i<=instance_number(par);i+=1) //Читайте про цикл for ниже
{
ii=instance_find(пар,i); //Търсим обект, който все още не е изработен
if(collision_rectangle(startx,starty,mouse_x,mouse_y,ii,true,false)) //Ето нашия правоъгълник за сблъсък (контакт)
{
ii.selected=true;
}
}
}

Кодът е голям и сложен, докато научаваме за условния оператор if:
Кодът с if се изпълнява по следния начин:

200?"200px":""+(this.scrollHeight+5)+"px");">
ако (условие)
{
действие
}

Може също да съдържа оператор else (в противен случай), например:

200?"200px":""+(this.scrollHeight+5)+"px");">ако (условие)
{
действие
}
друго
{
действие 2
}

И for е оператор за цикъл, той се изпълнява по следния начин:

200?"200px":""+(this.scrollHeight+5)+"px");">
за (<переменная> ; <выражение> ;<действие переменной>)
{
<действия>
}


Операторът for е много мощно нещо, помага много в трудни ситуации

Оператор - действия, вградени в даден език, например, най-често срещаните са int, if, else, string, switch, for, case, break, exit и т.н., и т.н.

Сега също създаваме събитие за рисуване (draw) и пишем по същия начин:

200?"200px":""+(this.scrollHeight+5)+"px");">ако draw_rect=true
{
алфа=.8;
draw_rectangle_color(startx,starty,mouse_x,mouse_y,c_green,c_green,c_green,c_green,true);
}

Тук всичко е лесно, ето същото само на руски:
ако трябва да начертаем правоъгълник, тогава избираме прозрачност и рисуваме правоъгълник
ето ги аргументите

200?"200px":""+(this.scrollHeight+5)+"px");">draw_rectangle_color(x1,y1,x2,y2,цвят 1, цвят 2, цвят 3, цвят 4, контур)


outline - дали ще бъде изчертан само ръбът (true) или запълненият правоъгълник (false).
Намерихме нова дума - константа, това е числов израз или код, заменен с дума, хамакът има вградени константи:

200?"200px":""+(this.scrollHeight+5)+"px");">вярно - 1
невярно - 0
пи - 3,1415...


Е, разбрахме го, сега трябва да създадем нов обект - родителски обект, който ще се свързва с децата си. Нека го наречем par (за да промените името, трябва да промените кода в събитието стъпка на контролния обект), напишете в събитието за създаване:

200?"200px":""+(this.scrollHeight+5)+"px");">selected=false; //Тук е нашата променлива, дали обектът е избран

Това е всичко. Сега, разбира се, имаме нужда от обект, който може да се движи, наричаме го objTest и записваме кода в събитието за създаване:

200?"200px":""+(this.scrollHeight+5)+"px");">gox=x; //Къде да отида...
goy=y; //от y
избрано=false; //Не сме избрани =)
object_set_parent(self,par) //Тук е изборът на родител

Ново действие:

200?"200px":""+(this.scrollHeight+5)+"px");">object_set_parent(ind,obj)

Задава родителския обект на обекта с име ind.
И нов оператор: self, това означава, че действието ще премине към себе си
Не се страхувайте, има още малко в събитието стъпка:

200?"200px":""+(this.scrollHeight+5)+"px");">ако разстояние_до_точка(gox,goy) > 20
{
mp_potential_step(gox,goy,6,solid);
}
if(selected=true) && mouse_check_button_pressed(mb_right)
{
gox=mouse_x;
goy=mouse_y;

Формиране на стратегия
Не можете да вярвате на аматьори:
плановете им може неочаквано да се осъществят,
и никой не е готов за това.

(А. Кънингам)

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

Този път ще преминем от аркадни игри към по-сериозен жанр - стратегии. Тук ще трябва да овладеем цяла поредица от нови механизми, но и тук няма да има нищо сложно. В тази статия ние Нека да проучим структурата на походова стратегия(и също стратегия в реално време- още по-лесно е да го направите с LKI-Creator) и ние ще направим игра като пример, предназначена обаче само за мулти-потребителрежим (и също редактор на картиза нея). С режима за един играч ще се занимаваме в следващия брой на рубриката ни – посветена на основите на изкуствения интелект.

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

Е, можете да намерите материалите от миналите ни класове на нашия CD, в специално създадения за целта раздел „Игра Направи си сам“.

Формулиране на проблема

Нека напишем стратегическа игра, състояща се от битка между две фантастични армии. Целта на битката е да се заловят няколко обелиски, поставен на картата. Преди битката разгръщаме нашите войски, състоящи се от 6 мечоносци, 4 стрелци с лък, 2 рицари, 2 магьосниции 1 призрак, в рамките на предоставената ни територия. Освен тях на картата има и неутрални дракони.

Характеристики на бойците
Боец Движение Хитове Обхват Щета защита Възможности
Фехтовач4 8 1 7 2 -
Стрелец4 5 7 5 1 -
рицар3 15 1 9 4 Изцеление, Рицарски удар
Магьосник3 12 5 6 0 Огнена топка
Призрак4 7 2 5 5 Регенерация
Драконът6 30 2 12 5 Полет

Характеристиките на бойците са представени в таблицата. Лечение- това е правото да излекуваш съседен воин (с изключение на призрак) до пълно здраве веднъж на битка. Рицарски удар- правото да нанасяте тройни щети веднъж на игра. Огнена топка- атаката на магьосника премахва точките на живот не само от непосредствената цел, но и от околните квадрати. Регенерация- възстановяване на 1 удар на ход. Полет- право на придвижване през препятствия.

Играта се играе в мултиплейър режим, във версията Hot Seat (игра от един компютър, обръща се един по един). След като играчите се обърнат, неутралните дракони правят своя ход, атакувайки всеки враг в радиус от 7 клетки.

Партито приключва, когато едната страна или превземе повече от половината обелиски, присъстващи на картата, или умре напълно.

Първоначално картата беше зададена в редактора на карти. Има обелиски, дракони и препятствия (обекти, през които не можете да се движите или атакувате).

Подготовка за работа

Преди да започнем, ще трябва да преинсталираме пакета LKI-Създател. Факт е, че в сравнение с последния път в него са направени много промени и допълнения.

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

Важно е:предишната версия на LKI-Creator имаше някои проблеми със съвместимостта с новите версии на Delphi. В тази версия те са елиминирани.

Вземете файла с програмни текстове и снимки от нашия компактдиск (раздел „Игра със собствените си ръце“) и го разархивирайте в директорията на проекта.

Сега можете да изтеглите необходими файлове оттук .

Трябва да имаме три поддиректории. One - Units - съхранява DirectX библиотеки и модули на пакета LKI-Creator. В друга - Проект - ще работим; снимките, които ще ни трябват, се поставят там предварително и предишна версиянашата аркада. В третата - Escort - готова програма, която трябва да успеем.

Сега нека инсталираме (преинсталираме) LKI-Creator. В менюто на Delphi отворете елемента Component и изберете Install Component. Ако вече сте инсталирали този пакет, останете в раздела В съществуващ пакет, в противен случай отидете в раздела В нов пакет и попълнете празните редове, както е показано на фигурата (в горния ред най-лесният начин е да изберете LKI2dEngine. pas файл с помощта на бутона Преглед и в долната част просто запишете LKI). След това щракнете върху OK и изберете Инсталиране. Сега трябва да видите раздела LKI в горния панел на Delphi.

Сега остава само да качим нашия проект. В менюто Файл изберете Отваряне, отворете файла Project\Obelisk.dpr…

Къде е картата, Били? Имаме нужда от карта!

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

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

Вероятно вече се досещате как ще изглежда - поставяме обект на карта в прозореца на проекта и след това го регистрираме в собствеността Картанашия двигател.

Така е... но имаме повече от един клас карти. Нека да разгледаме по-отблизо...

Видове карти

Картата се състои от нещо пейзажИ обектиинсталиран на него. Пейзажът най-често (но не винаги) е разделен на клетки, наречени плочки- плочки.

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

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

Има и карти без плочки. LKI-Creator поддържа два типа: графика и пачуърк.

Графична карта е карта, на която само няколко ключови точки имат значение, плюс може би специални зони (например непроходими), а останалото е просто модел, който няма ефект на играта. Ето как често се правят звездни карти, както, да речем, в Master of Orion: звездите и черните дупки са ключови точки, останалото е фон. В този режим понякога правят глобални карти, например за ролева игра.

Пачуърк картата е разделена на зони, а вътре в зоната всички точки са еднакви; не можете да се движите по „пачуърка“. Това е добре за глобални стратегии, където една провинция е минималната единица територия.

Примерни карти от различни игри с указание на вида са на снимките.

Така че мнозинството двуизмеренкартите (триизмерни - специална статия) могат да бъдат разделени на четири класа:

  • Правоъгълна- TLKIRectMap. Това е карта с плочки, клетките са квадрати. Такава карта, например, в Civilization III.
  • Шестоъгълна- TLKIHexMap. Карта с плочки с шестоъгълни клетки. Използва се в много военни игри и не само: това е, например, как традиционно се прави бойната карта на Heroes of Might & Magic.

    Тези два вида карти са потомци на общия клас TLKITileMap.

  • Графовая- TLKGraphMap. Тази карта има фон (свойство на фона)и ключовите точки, подчертани в него, са статични обекти. Позицията на други обекти на тази карта се изразява или чрез обикновени координати (като космически кораб в междузвездното пространство), или чрез препратка към обект (същия кораб в орбита на планета). Това са картите Master of Orion, Arcanum (глобален) и т.н.
  • Пачуърк- TLKIClusterMap. Той има фоново свойство, като това на графиката, и второ свойство - маска, който определя коя точка към кой регион принадлежи и собствеността Граници, който определя връзките между „шредовете“. Ето как са подредени картите например в Medieval: Total War или Victoria.

Важно е:класовете на картата са описани не в модула LKI2dEngine, а в LKI2dMap.

Ъгли на наклон

Но ако мислите, че това изчерпва възможностите на LKI-Creator за показване на карти, тогава много грешите.

Картата може да бъде представена изглед отгореили изометричен- погледнете под ъгъл спрямо вертикалата. Например картата на Civilization III или Heroes of Might & Magic IV е изометрична, но Civilization I приема изглед отгоре надолу.

Обикновено изометрията се използва за подредени карти, докато графичните карти се използват с изглед отгоре, тъй като мащабът на графичните карти обикновено е по-малък. Но има и изключения: например в Medieval: Total War има пачуърк изометрична карта.

Свойството map е отговорно за изометричността Изометричнои два параметъра, които задават ъгъла, под който гледа нашата камера: ФиИ Тета.

Първият е отговорен за въртенето на картата спрямо вертикалната ос: например, ако я зададете на 45 градуса (измерва се в градуси), тогава клетката с правоъгълна решетка ще бъде ориентирана с ъгъл нагоре, както в Civilization . При Phi=0 една от страните на клетката ще бъде хоризонтална.

Вторият контролира наклона на камерата спрямо вертикалата. За удобство се дава като отношение на хоризонталните и вертикалните единици за дължина. Да кажем, че ако искаме нашата клетка да бъде начертана наполовина по-висока, отколкото широка, трябва да настроим Theta на 2.

С карта с плочки не ни е позволено да избираме тези ъгли произволно: в крайна сметка (все още) нямаме 3D. Те пряко зависят от параметрите на плочките. Например, ако имаме ромбовидна ос с ъгъл нагоре, а вертикалната ос е наполовина по-малка от хоризонталната ос, тогава трябва да зададем параметрите 45 и 2.

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

Стави

Пачуърк карта, изглед отгоре.

Картите с плочки имат друг проблем - свързването на плочки. Контролира се от параметъра TileBorderStyle. Най-често това tileStraight, режим, в който плочките просто се напасват една към друга без никакви ръбови ефекти, или tileBorder, в който са начертани линии, разделящи една плочка от друга - границите на клетките (в последния случай не забравяйте да дефинирате цвятрешетки в параметър TileBorderColor).

Но има по-хитър вариант, когато еднакви плочки са съседни една на друга без промени, а различни се използват с помощта на специална „преходна“ плочка. Това обикновено се прави, ако картата се състои основно от широки пространства от един тип територия, да речем големи зелени площи, и отделна клетка не е важна и не трябва да се забелязва от играча. Това е картата Heroes of Might Magic. Но ако всяка клетка се обработва отделно, както в Civilization, тогава този метод не е подходящ и е по-добре ясно да се разделят клетките една от друга. „Стопена“ технология (наричана още маска) се определя от стойността на TileBorderStyle, равна на tileMasked. За тяхното устройство ще говорим друг път - това е доста сложна тема.

Плочка

Елемент на карта - обект на клас TLKITile- има проста структура. Първоначално съдържа: координати, спрайта, който го рисува, кода на типа плочка (който определя какво имаме тук - хълм, пустиня, път, море?) и способност за крос-кънтри (това е от значение в повечето игри). Последният е броят единици за движение, изразходвани за движение през тази плочка земяотряд. За непроходими плочки това е отрицателно число.

Друг параметър - Обекти, списък с обекти, разположени на тази плочка (тип TLKIGameObject).

За да разберете върху коя клетка е щракнато, картата има метод MouseTile(x,y) връща избраната плочка.

Методите за плочки включват IsNeighbour(плочка, разстояние). Тази функция връща true, ако плочката е не повече от клетките на разстоянието от дадената плочка (по подразбиране този параметър е равен на единица, т.е. ако просто напишете IsNeighbour(Tile), функцията ще върне true за непосредствено съседната плочка За квадратни мрежи тези плочки, които граничат диагонално, също се считат за „съседи“.

Функции Първи съседИ NextNeighborсе използват за проверка на всички клетки, съседни на дадена. Първият от тях сочи към съседна клетка, а вторият може да бъде извикан само след извикване на първия и издава следващите съседи един по един.

Изброяване на съседи

// Причиняване на увреждане на клетка

процедура TObeliskTile.Damage(dmg: цяло число);

ако(Objects.Count > 0) и// Може да имаме

// не повече от един обект на клетка

(Objects.ID > 0) // Пасивни обекти

// не е повреден

Dec(Обекти.Хитове,

// Автоматично изваждане на защита от щети

Max(0,dmg-(Обекти като TObeliskGameObject).Защита);

ако Objects.Hitsthen Die; // Премахваме мъртвите

// Атака с огнена топка

процедура TObeliskTile.Fireball;

варСъсед: TObeliskTile;

Neighbor:= Първи съсед като TObeliskTile;

Neighbor.Damage(6);

Neighbor:= NextNeighbour като TObeliskTile;

доСъсед = нула; // Докато свършат съседите

Пример е в страничната лента „Изброяване на съседи“. Тази процедура изчислява огненото кълбо, удрящо клетка и всички нейни съседи.

Това е интересно: за нейната работа няма никакво значение, имаме шестоъгълна решетка или квадратна.

Често се нуждаем от някои други параметри и обикновено класът на плочките, които изграждат картата - потомък TLKITile. Така че в примера - TObeliskTile е наследен от TLKITile.

Важно е:Ако поставим карта с плочки в нашия екран на играта, координатите, както и методите TLKIGameObject, свързани с разстоянието, по подразбиране започват да измерват разстоянието в плочки, а не в точки. Координатите на бутони, икони и др. продължават да се измерват в пиксели! Но този режим може да бъде изключен - това може да бъде полезно за стратегии в реално време.

Избор на карта

И така, нека започнем с правоъгълна решетка (TLKIRectMap), изометрично картографиране (ъглови параметри 0, 1.5). Нека решетката бъде начертана (стил tileBorder). Нека кажем на двигателя, че тази конкретна карта трябва да бъде показана. Досега всички необходими действия са извършени без писане на нито един ред код.

Тези операции трябва да се направят предиинициализация на двигателя, както и декларация на шрифта.

Ще декларираме фигурите, както преди, като спрайтове.

Редактор на карти

Пачуърк карта, изометрична.

Тук има доста трудности. Абсолютно същия двигател, същите декларации за плочки... Интерфейсът, като избиране на плочка, зареждане/запазване и т.н., може да се направи лесно стандартни средства Delphi: никой не ни кара да го превеждаме на режим на цял екран. Тук няма да анализираме това - всичко е в примерния файл. Примерният код е използван съзнателно най-простият начин; Ако желаете, можете например да направите палитрата с обекти и палитрата с плочки графични.

Редакторът има само две функции, които не са ни познати. Първият е доста прост: това е нова функция на мишката, създадена специално за карти с плочки. функция TLKIRectMap.SelectTileвръща указател към точната плочка, върху която е щракнато, за да можем лесно да се справим с щракването.

Но вторият нов продукт заслужава по-внимателно разглеждане.

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

Нека да разгледаме кода („Напиши карта“).

Записване на карта

процедура TObeliskMap.Save;

вар i,j: цяло число;

InitSave(FName);

WriteStr(Име на карта);

Write(Map.Width, SizeOf(Map.Width));

Write(Map.Height, SizeOf(Map.Height));

за i:=0 да сеКарта. Ширина-1 направи

за j:=0 да сеКарта.Височина-1 направи

Write(Map.Tiles.Code, SizeOf(integer);

Ето как работи. Първо трябва да отворите файла, като използвате специална процедура InitSave, чийто единствен параметър е името на файла. След това запазваме заглавката за контрол на типа, като използваме специална процедура WriteHeader. След това записваме всичко необходимо, използвайки процедурата WriteStrза низове и за всички други полета - Пишете(вторият му параметър е размерът на записаните данни в байтове). Можете да напишете свои собствени процедури за обектни полета, ако е необходимо Запазванесъс заглавен запис. Накрая затваряме файла с процедурата FinSave.

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

RegisterUserName(tpMap, "TObeliskMap");

TpMapе константа, която също трябва да декларирате. Приравнете го на, да речем, 1. И в конструктора на обекта TObeliskMap присвоете стойността на тази константа на параметъра TypeID.

Защо цялата тази врява? Освен съвпадение на типове, вие получавате едно много важно предимство.

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

Този код автоматично ще инициализира новото поле като празно, ако не е записано във файла. И можете да напишете файл, като просто добавите реда WriteStr(Name) в самия край.

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

Хайде да играем

На първо място, трябва да създадем нов клас, извлечен от TLKIGameObject. Ще ни липсват свойствата на стария. В новия клас трябва да добавите полета за основните характеристики: обхват, движение и т.н.

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

На нашия екран ще приложим бутони TLKIButton под формата на стрелци, мечоносци, магьосници, призраци, рицари.

Първо имаме подредбата. Нека дефинираме зоната на разположение за едната страна като горните три „линии“ на картата, за другата - като долните три „линии“.

Кодът работи по следния начин. При натискане на някой от бутоните се активира инсталацията на съответния боец; Щракването върху незаето квадратче в зоната за разположение поставя фигурата там и деактивира бутона. Веднага след като всички бутони са деактивирани, ходът се прехвърля на врага.

В началото на всеки нов ход всички бутони се включват отново: това се прави, за да е по-лесно човек да забележи на кого още не е приличал. Съответно, щракването върху бутона избира фигурата и веднага щом бъде направен ход, бутонът изчезва. Друг бутон - „Краен ход“ - се появява само след фазата на поставяне.

Последният път вече направихме операции за активиране и деактивиране на интерфейсни елементи, така че няма да анализираме подробно тази операция - вижте примерния код.

Ход на фигура

// Ако избраната клетка е заета от врага, ние атакуваме,

// ако е свободно, ние се движим, ако сме заети със собствените си

// или препятствие - игнорирайте клика

Плочка:= Map.MouseTile(MouseX, MouseY);

ако(Плочка = нула)// Кликнете извън прозореца на играта

тогаваизход;

// Движещ се

ако(Tile.Objects.Count = 0)

и(Dist(Self)

и неПреместен тогава

// Да проверим дали можем да стигнем до там

ако не HasWay (плочка) тогаваизход;

MoveObj(ID, Tile.x, Tile.y);

// Играта е походова - движете се веднага

Преместено:= вярно;

//

акоНападнат тогава

Icon.IsVisible:= невярно;

// Атака

ако(Tile.Objects.Count > 0)

и(Dist(Self)

и неНападнат тогава

Obj:= Tile.Objects;

// Нападаме само врагове

ако Obj.Side = Страна тогаваизход;

Obj.Damage(dmg);

Атакувано:= вярно;

// Ако преместването е завършено, премахнете иконата

акоПреместен тогава

Icon.IsVisible:= невярно;

Ходът се обработва по следния начин (вижте „Ход на фигура“). Щракнатата клетка се намира. Ако върху него има враг и той е в обсега, той е наранен; ако е празен и в обсега, фигурата се движи (ако препятствията позволяват); ако е заето, но не от враг, щракването се игнорира .

Когато и двете страни се приближиха, драконите действаха. Те действат много просто: те избират най-близкия не-дракон, който е в рамките на 7 квадрата от тях и атакуват. Вижте кода на Dragon Actions.

Драконови действия

// Проверка на плочки в рамките на 7 квадрата от дракона

за i:= Max(0, x - 7) да сеМин. (максимален размер, x + 7) направи

за j:= Макс (0, y - 7) да сеМин. (максимален размер, y + 7) направи

ако (Map.Tiles.Objects.Count > 0) и

(Map.Tiles.Objects.Code>1)

// 0 - код за препятствия, 1 - дракон

тогава започвам

// Избор на точка за преместване

ако x=i тогавабрадва:=i

другоако x>i тогавабрадва:=i+2

другобрадва:= i-2;

ако y=j тогава ay:=j

другоако y>j тогава ay:= j+2

друго ay:= j-2;

MoveObj(NO, ax, ay);

// Да атакуваме

Map.Tiles.Damage(12);

// Прекъсване на цикъла: не повече от една атака

// всеки дракон на рунд

Накрая остава само да проверите дали повече от половината обелиски са заети от войски на едната страна - и ако са, тогава спрете играта и обявете победителя!


И така, имаме стратегическа игра. Въпреки това, за пълното щастие, това, което липсва, на първо място, е изкуственият интелект, който ще направи възможно да се даде на играта режим за един играч (ние не считаме най-простата процедура за контролиране на дракони). Това ще направим следващия път. Ще се видим след месец!

В следващите броеве

В следващите броеве ще говорим за:

  • системи за частици за показване на дим, искри и др.;
  • работа с прозрачност;
  • триизмерни двигатели;
  • основи на AI;
  • отстраняване на грешки в програмата;
  • създаване на план за игра и скрипт,
  • писане на проектен документ;
  • игрови баланс;
  • мислене чрез игрови герои и техните реплики;
  • работа с Photoshop и 3D пакети;
  • анимации;
  • музика и озвучаване;
  • и още много.

Напълно възможно е да научите как да направите всичко това със собствените си ръце. Скоро ще видите това.

Пишете ни…

За тези, които смятат, че пакетът може да бъде допълнен с нещо: първо, не забравяйте, че няма Финална версияпакет, но само този, който изпълнява функциите, описани в нашите статии. Може би някои от вашите идеи вече са реализирани и чакат своя ред (вижте страничната лента „В бъдещи издания“). И във всеки случай: когато ни предлагате идея, опитайте се да обосновете защо вашето предложение е полезно за много игри наведнъж, а не само за вашата конкретна.

За самостоятелна работа

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

  • разделяйте препятствията на разрушими (дървета и храсти) и неразрушими (скали) и се уверете, че огнените топки и дъхът на дракона изгарят растителността;
  • създайте ями (кафява клетка) или огън, който пламти за няколко хода (червена клетка) на мястото, където е била задействана огнената атака;
  • позволи на мечоносците и рицарите да покриват своите съседи, давайки им +1 към защитата;
  • направете движението на фигурите на екрана гладко.

Ами ако в реално време?

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

  • не е необходимо поле Скорост на игратав класа TObeliskObject- използвайте Speed ​​​​от основния двигател (скоростта на движение по екрана е равна на скоростта на играта);
  • целочисленото изчисляване на разстоянията е деактивирано;
  • кодът за движение на фигурата се пренаписва, като се вземе предвид фактът, че е необходимо да се начертае траектория около препятствията;
  • Премахва се бутонът "край на хода".

Това е всичко. Ще се опитате ли да го направите сами?

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

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

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

Основни етапи на създаване на стратегия

Ако вземете произволно 5-7 индикатора и се опитате да създадете работещо превозно средство от тях, тогава едва ли ще излезе нещо полезно. Първо трябва да обмислите основната идея на стратегията и едва след това да преминете към избора на инструменти. Може да се предложи следната последователност от действия:

  • ако системата е създадена от нулата, тогава първата стъпка е да се работи върху идеята. На този етап просто трябва да решите какъв ще бъде вашият стил на търговия, например дали транзакциите ще се извършват по тенденцията или срещу нея, или може би стратегията е планирана изключително за пробив. Все още не мислим за конкретни неща;
  • След като изберете подходящия стил на търговия, можете да започнете да изяснявате детайлите. Преди да изберете инструменти, трябва ясно да определите работещите валутни двойки и времеви рамки, време за търговия и т.н.;

важно! Когато избирате времева рамка, не е препоръчително да отивате твърде малка, особено ако търговецът няма опит в спекулациите на малки времеви интервали. За начинаещи обикновено е по-добре да не слизате под H1-H4; можете да прочетете повече за избора на оптималния времеви интервал.

  • следващият етап е изборът на подходящи инструменти и тук изобилието от избор може да изиграе лоша шега на търговеца, защото той има на разположение десетки индикатори, възможността да използва свещник, вълна, технически и фундаментален анализ. От цялото това разнообразие трябва да изберете няколко инструмента, които най-добре отговарят на желания от вас стил на търговия;
  • Едно от основните правила на всяка стратегия е, че полученият сигнал трябва да бъде потвърден от няколко филтъра, но е препоръчително да ограничите броя им. Например, за индикаторните стратегии е нежелателно броят на индикаторите да надвишава 3-4, в противен случай ще има объркване в сигналите и ако планирате да работите с технически анализ, тогава индикаторите ще играят спомагателна роля;
  • разработени са правила за поддържане на позицията, резултатът трябва да бъде алгоритъм от действия за всеки сценарий;
  • последният етап е да стартирате превозното средство първо на сметка с история, а след това на демо сметка, или още по-добре, на реална центова сметка. Основната цел е да се тества жизнеспособността на стратегията в реални условия, а реална сметка (дори цент) ще ви позволи да почувствате цялата гама от емоции, от еуфория до горчивина на загубите.

Можете също така да посъветвате да не се закачате за сложността на превозното средство. Практиката показва, че прекомерната сложност изобщо не е показател за ефективност. как по-проста система, толкова по-лесно е да търгувате.

Какво трябва да бъде включено в автомобила

Създаването на стратегия е малко като строителен комплект; просто трябва да изберете правилните части. Когато създавате превозно средство, можете и трябва да използвате:

  • показатели. Освен това не трябва да преследвате нито техния брой, нито прекомерната сложност, дори при напълно механични превозни средства са достатъчни 3-5 броя;
  • графични модели - добре познатите знамена, знамена, триъгълници, глава и рамене, двойни дъна и върхове все още работят добре;
  • графични конструкции;
  • Фибо нива;
  • елементи на фундаментален анализ - сега е трудно да се правят пари само от новини, но е необходимо да се вземе предвид икономическият календар в търговията. Поне просто преместете транзакциите на рентабилност преди публикуването на важна статистика за САЩ или Европа или дори напълно затворете печалбата.

Съществуват и редица техники, чиито ползи са съмнителни:

  • Мартингейл е първоначално непечеливша тактика, единственият шанс за успех е, че преди загубата ще можете да възстановите сумата на депозита и да спечелите малко;

  • Също така е нежелателно да се използва заключване, освен ако не е абсолютно необходимо; тогава е доста трудно да напуснете замъка;
  • Също така е по-добре да не използвате сигнали отвън. Сигналите отвън означават, например, сравнение на броя на продавачите/купувачите, различни индекси на настроението на повечето търговци и т.н. Но има и редица ресурси, които можете да слушате, например Autochartist дава добри сигнали въз основа на графични модели;
  • Също така е по-добре да не използвате елементи на вълнов анализ (поне за начинаещи). Въпреки че тук има изключения, например търговията с Wolfe Waves се основава именно на вълнов анализ, но не е особено сложна.

Разработване на проста индикаторна стратегия

Да приемем, че основната идея на стратегията е да се търгува изключително в посока на тенденцията. Освен това ще влезете на пазара не в момента на появата на тенденция, което е доста рисковано, а след завършване на малка корекция.

Стратегията трябва да работи на почти всяка валутна двойка; това е необходимо, защото поради голямата времева рамка сигналите няма да се появяват много често. Така че ситуацията ще бъде оценена с помощта на 5-7 валутни двойки едновременно. Що се отнася до времевата рамка, D1 е подходяща; ние изхождаме от факта, че Forex в началния етап е само допълнение към основната работа, следователно ще търгуваме на ежедневни свещи.

Сега трябва да решите как точно ще се определи моментът за влизане. Има много опции за идентифициране на тенденция:

  • визуално - но гледането на очи няма да ви позволи да разработите ясни правила за търговия;
  • използване на една или повече подвижни средни;
  • според стойността на индикатора ADX, ако е повече от 30, тогава има силна тенденция, по-малко от 20, пазарът е спокоен;
  • използване на графични конструкции;
  • Bollinger Bands ви позволява да прецените силата на тренда по разстоянието между горната и долната граница на канала.

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

Основната идея на търговията ще бъде следната: изчакваме да се появи движението на тренда, след това следва корекция в рамките на един ден, след края й се сключва сделка. Ако всичко това е представено под формата на ясни правила, тогава алгоритъмът на действията ще изглежда така (използвайки примера за покупки):

  • първо проверяваме ценовата позиция спрямо MA, цената трябва да е над линията;
  • След това трябва да намерим движение на тренда, имаме нужда от свещ с голямо тяло и малки сенки (препоръчително е стойността на сянката да не надвишава 10-15% от размера на тялото на свещта);
  • тя трябва да бъде последвана от свещ с малък дневен диапазон (разстояние от High до Close). Цената на затваряне не трябва да достига ниво от 50% от предходния ден - в този ден се извършва корекция на цената.

В този случай корекцията може да се извърши според 2 сценария:

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

Що се отнася до поддържането на позицията и защитните поръчки, стоп загубата трябва да бъде поставена поне отвъд средата на свещта с голямо тяло. За да получите целевото ниво, достатъчно е да отделите стойността на същата свещ от нивото на покупка, можете да използвате плаващ стоп.

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

Влизане в началото на тренда

TS, предложен по-горе, пропуска част от движението на тренда, но не изисква много време за анализ на пазара. Ако е възможно да наблюдавате поведението на цената за деня, тогава можете да опитате да яздите тенденцията в самото начало на нейното формиране. Така че основната идея на стратегията е да влезете на пазара, след като цената започне да напуска хоризонталния канал.

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

Това не е революционен подход; Бил Уилямс използва нещо подобно в своя прочут Алигатор. Така че този показател дори може да се вземе като основа на TS.

Ако добавим Alligator със стандартни настройки към H1, виждаме, че той дава много фалшиви сигнали; нашата задача е да ги отсеем. За да направим това, ще влезем на пазара с чакаща поръчка и нивото на нейното поставяне ще се определи с помощта на фрактали.

В резултат на това работният процес ще изглежда така (използвайки примера за покупки):

  • Търсим плоска област на графиката (всички линии на алигатора са хаотично преплетени една с друга);
  • След това имате нужда от фрактална свещ (и тя трябва да бъде разположена над линиите, без дори да ги докосвате с долната сянка);
  • стоп поръчка за покупка се поставя точно над нейния максимум, а защитна поръчка се поставя отвъд долната граница на зоната на консолидация;
  • TP е или фиксиран (50-70 p), или използвайте плаващ стоп. Като цяло е доста трудно да се предскаже силата на движението на тенденцията, така че е по-добре да използвате плаващ стоп, отколкото фиксиран TP или да определите целевото ниво, като използвате същия технически анализ.

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

Пример за проста комбинирана система

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

Ще се интересуваме от ясно изразено движение на тренда, което може да се определи и визуално. След това просто трябва да разтегнете нивата на Фибо към него, това е необходимо, за да определите потенциалните нива за завършване на корекцията. Най-значимото ниво на корекция е 38,2%; разрешено е да се търгува при отскоци от 50% и 61,8%.

Но фактът, че цената докосва нивото на Фибо, не е достатъчен; необходимо е потвърждение. Stochastic може да се справи доста добре с тази задача (можете да опитате да използвате RSI за същата цел). Например, за транзакция за покупка, цената трябва да е близо до нивото на корекция, а Stochastic по това време трябва да е в зоната на свръхпродаденост.

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

Фибо нивата и осцилаторът са само минимумът, необходим за получаване на сигнал. Ако желаете, можете да усложните системата, като въведете допълнителни филтри.

Стратегии, базирани на технически анализ

Ако техническият анализ се използва в неговата чиста форма, тогава задачата става малко по-проста; вече не е необходимо да се разработва превозно средство от нулата. Има редица техники и инструменти, чиято ефективност е проверена през годините, а търговецът може само да избере подходящите и да ги използва в конструкциите.
По принцип за успешна търговия е достатъчно:

  • трендови линии - изграждаме ги на различни времеви рамки, започвайки от най-високата и постепенно слизайки към работната;
  • Фибо нива, те трябва да бъдат разтегнати до значителни ценови движения в историята. Нивата на корекция от 38.2, 50 и 61.8% ще бъдат от ключово значение, практиката показва, че корекцията най-често завършва на тези точки;
  • MT4 също така прилага редица други инструменти за технически анализ, например вили Andrews, набор от инструменти на Gann, няколко вида канали и др.

Но за сравнително точна прогноза нивата на Фибо и линиите на тренда са достатъчни; областите на концентрация на нива и линии обикновено действат като подкрепа/съпротива. Търговията може да се извършва както за пробив, така и за отскок от нива и линии.

Що се отнася до допълнителните филтри, можете да добавите модели на свещници и някакъв индикатор за търсене на отклонения (същият Stochastic или MACD). Можете да прочетете повече за използването на технически анализ.

Филтри за системи за търговия

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

Има редица филтри, които ще отговарят на почти всяка стратегия:

  • ситуация на по-високи времеви рамки. Ако, например, стратегията се изпълнява на H1 според механична стратегия, тогава няма да е излишно да погледнете какво се случва на H4 и D1;
  • среден дневен диапазон, което означава разстоянието, което цената изминава средно на ден; когато търгувате в рамките на деня, това ще помогне за филтрирането на редица сигнали. Нека си представим, че през деня цената се движи средно със 100-120 пипса, ако в един от дните цената до вечерта вече е преминала 90-100 пипса в една посока и TS дава сигнал за влизане на пазара в същата посока, тогава има смисъл да се игнорира, статистиката казва, че трафикът е малко вероятно да продължи през този ден;

важно! Спазването на това правило ще доведе до факта, че някои печеливши сделки ще бъдат пропуснати, но съотношението печеливши/губещи сделки ще се увеличи.

  • Броят на свещите след формирането на сигнала също има значение, има дори филтър от 5 свещи, на който ще се спрем по-подробно.

Когато TS даде сигнал, тогава в идеалния случай ситуацията трябва да започне да се развива в наша полза почти веднага след приключване на сделката (което означава на следващите 1-3 свещи). Ако това не се случи, тогава колкото повече време е минало от сключването на сделката, толкова по-малко влияние върху пазара ще имат онези фактори, които са имали значение, когато търговецът е влязъл на пазара. Тяхното влияние избледнява с времето.

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

Това условие важи за почти всички времеви рамки (с изключение на m1-m5). Разбира се, все още има възможност цената, като се движи около една марка, да се движи в правилната посока, но нашият избор е стабилност. По-добре е да пожертвате няколко печеливши сделки, но избягвайте 3-5 непечеливши.

Обобщаване

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

Изборът на подходящо превозно средство не е труден, освен това можете да намерите добри работещи системи в публичното пространство. Можете също така да се притеснявате за създаването на своя собствена стратегия, особено след като това не изисква познаване на езици за програмиране, просто трябва да имате представа и поне основни познания за това как работи пазарът и какви индикатори се използват за какви цели.

Самият процес напомня сглобяването на конструктор - първо поставяме проблем, а след това просто избираме необходимите инструменти за решаването му. След като проверите историята, можете да продължите към TS теста на демо или центова сметка.


Връх