Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задания / Диссертация - РАЗРАБОТКА МОДЕЛЕЙ, АЛГОРИТМОВ.docx
Скачиваний:
123
Добавлен:
27.05.2015
Размер:
9.85 Mб
Скачать
      1. Стандартные классы системы

В стандартном мире (модуль StandardWorld.pas) выделяют следующие роли (Рис. 2.17):

Стандартная роль (TFMStandardParticipantRole) – абстрактный класс, который служит основой для других, более сложных ролей. Он дает возможность использовать планы, стратегии, а также следит за периодичностью работы объекта через специальный класс Рабочие часы (TFMSWorkingHours).

Трейдер (TFMSTraderRole) – класс стандартного рыночного трейдера. Трейдер совершает сделки на рынке через брокера, руководствуясь текущей стратегией принятия решений. Алгоритм главного цикла работы трейдера представлен в приложении Приложение 15([TFMSTraderRole]: procedure Step() ).

Брокер (TFMSBrokerRole) – класс стандартного брокера. Брокер является связующим звеном между рынком и трейдером. Он получает запросы от трейдеров, обрабатывает их и либо выполняет сам, либо перенаправляет их рынку. Алгоритм главного цикла работы брокера представлен в приложении Приложение 15([TFMSBrokerRole]: procedure Step() ).

Рис. 2.17. UML диаграмма взаимосвязи стандартных ролей в модуле FMSStandardRoles

Компания (TFMCompanyRole) – класс стандартной компании. Компания ведёт экономическую деятельность, нанимает сотрудников, выпускает акции на рынок и выплачивает дивиденды владельцам акций. Компания хранит информацию о своём экономическом благосостоянии, ведёт бухучет, книгу доходов и расходов и т.п. Алгоритм главного цикла работы компании представлен в приложении Приложение 14.

Рынок, биржа (TFMSMarketRole) – класс стандартной биржи. Биржа получает запросы от рынка и находит совпадения между запросами на покупку и продажу акций. Для каждой пары совпадающих запросов она производит транзакцию. Блок-схема алгоритма работы биржи представлена на рисунке Рис. 2.18. На этой схеме важную роль играет блок нахождения совпадений между ордерами. Приведу сокращённую версию этого алгоритма (Листинг 2.1):

Рис. 2.18. Блок-схема алгоритма работы класса биржи TFMSMarketRole.Step()

Листинг 2.1. Алгоритм нахождения совпадений между ордерами.

procedure TFMSShareTypeAccount.FindBuySellMatches();

begin

// Заполняем списки ордеров FSortedBuyRequests и FSortedSellRequests // реальными данными и сортируем записи в них по цене.

FSortedBuyRequests.Assign(FBuyRequests);

FSortedSellRequests.Assign(FSellRequests);

FSortedBuyRequests.SortByPrice;

FSortedSellRequests.SortByPrice;

// Пока хотя бы один список не пуст выполняем данный цикл.

while (FSortedBuyRequests.Count <> 0) and

(FSortedSellRequests.Count <> 0) do

begin

if FSortedBuyRequests[0].Price < FSortedSellRequests[0].Price then

begin

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

CkeckIfTransactionRequestIsValid(FSortedBuyRequests[0], trtBuyShare);

// Удаляем ордер из списка, так как для него точно

// не найдётся совпадения.

FSortedBuyRequests.Delete(0);

end

else

begin

// Совпадение найдено. Совершаем транзакцию.

GetMarket.CommitTransaction(FSortedBuyRequests[0], FSortedSellRequests[0]);

// В большинстве случаев ордер исполняется только частично, так как // трейдеры заказывают различное количество акций для покупки и // продажи. Проблем это не вызывает, просто частично выполненные // ордера остаются в списке, а полностью выполненные ордера удаляются // из него.

if FSortedBuyRequests[0].Status = trsSucceded then

FSortedBuyRequests.Delete(0);

if FSortedSellRequests[0].Status = trsSucceded then

FSortedSellRequests.Delete(0);

end;

end;

// Проверяем, не просрочены ли оставшиеся ордера. Если да, то // закрываем их и отправляем обратно с соответствующей пометкой.

if FSortedSellRequests.Count <> 0 then

for I := 0 to FSortedSellRequests.Count - 1 do

CkeckIfTransactionRequestIsValid(FSortedSellRequests[I], trtSellShare);

if FSortedBuyRequests.Count <> 0 then

for I := 0 to FSortedBuyRequests.Count - 1 do

CkeckIfTransactionRequestIsValid(FSortedBuyRequests[I], trtBuyShare);

// Обновляем статистические данные по биду и аску.

UpdateBidAskSpread;

end;

Более подробно взаимосвязь стандартных ролей с другими классами представлена в приложении Приложение 7.

В разрабатываемом программном комплексе «FIMAS» роль задаёт только последовательность принятия решений экономическим субъектом. Непосредственно алгоритм принятия решений по каждому неоднозначному вопросу определяетсястратегией принятия решений.

Например, для роли трейдера были разработаны алгоритмы следующих стратегий:

  • стандартная стратегия трейдера;

  • стратегия маркет-мейкера;

  • стратегия трейдера-новичка;

  • стратегия фундаментального трейдера;

  • стратегия крупного инвестора;

  • стратегия новостного трейдера;

  • стратегия инсайдера;

  • стратегия трендового трейдера;

  • стратегия сглаживающего трейдера;

  • стратегия скальпера.

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

Стратегия (TFMSStrategy) – абстрактный класс стратегии, который служит основой для других, более сложных стратегий. Участник рынка использует стратегию для имитации процесса мышления. Таким образом, все алгоритмы участника рынка разбиваются на типичные операции характерные для каждого класса участника, и на операции, подконтрольные данному субъекту. Естественно, что для каждой роли трейдера, брокера, компании и рынка свой набор стратегий. Стратегия также имеет отдельную процедуру обработки сообщений от связанных с ней активных планов (DoProcessActiveLinkedPlan).

Понятие стратегии принятия решений является новым для моделей подобного класса. Ранее каждый агент был привязан только к одному алгоритму принятия решений, и часто в качестве такого алгоритма использовался алгоритм «безрассудного трейдера» (zero intelligence trader).

Также в данном модуле присутствуют другие важные классы, необходимые для работы системы:

План (TFMSPlan) – абстрактный класс плана, который служит основой для других, более сложных планов. Участники рынка используют планы для заданий, которые нужно выполнить в будущем при наступлении определённых условий. План обычно связывают со стратегией.

Ордер, запрос на транзакцию (TFMSShareTransactionRequest) – класс, который используют брокеры и трейдеры, чтобы выразить своё намерение купить или продать акции. В нем обязательно должны указываться название акции, операция, количество и желательно давать ссылку на стратегию, согласно которой был отправлен этот ордер. Ордер имеет определённые срок жизни. Если он не исполняется в течение этого срока, то он возвращается отравителю с пометкой о том, что он не был исполнен. Также ордер может быть исполнен частично, это нормальное явление. Более подробно различные типы ордеров рассмотрены в приложении Приложение 6.

Транзакция (TFMSShareTransaction) – процесс смены владельца акции. Рынок производит транзакцию, когда находит запросы на покупку и продажу одной и той же акции, которые совпадают по цене. Цена, по которой произойдет транзакция, может быть лучше той, что указана в ордере, если находится второй запрос, для которого эта новая цена будет тоже лучше, чем запрашиваемая. В этом случае итоговая цена совершения транзакции является средней между ценами двух ордеров.