Графы рынков
Современное состояние международного фондового рынка, его тенденции и перспективы. Сетевой подход при моделировании сложных систем, его использование при анализе фондовых рынков. Описание модели рыночного графа и доходностей, их свойства, плюсы и минусы.
Рубрика | Экономико-математическое моделирование |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 08.11.2015 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Класс для представления модели графа доходностей
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.ArrayList;
/**
* The performance matrix for the given country and time period.
*/
public class PerformanceMatrix {
private ArrayList<Integer> stocks;
private String country;
private Date startDate;
private Date endDate;
private int[][] C;
private int N;
/**
* Create an initial matrix (with all zeros).
*
* @param country the country
* @param startDate the first date
* @param endDate the last date
* @param stocks the list of stock ID's
*/
public PerformanceMatrix(String country, Date startDate, Date endDate,
ArrayList<Integer> stocks) {
C = new int[stocks.size()][stocks.size()];
this.N = stocks.size();
this.country = country;
this.startDate = startDate;
this.endDate = endDate;
this.stocks = stocks;
}
/**
* Get the country.
*
* @return the country
*/
public String getCountry() {
return country;
}
/**
* Get the first date.
*
* @return the first date
*/
public Date getStartDate() {
return startDate;
}
/**
* Get the last date.
*
* @return the last date
*/
public Date getEndDate() {
return endDate;
}
/**
* Read the matrix from a file.
*
* @param file the file
* @return the matrix
* @throws NumberFormatException if file is invalid
* @throws IOException if an I/O error occurs
*/
public static PerformanceMatrix readFromFile(File file)
throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(file)));
// Read country
String country = br.readLine();
// Read dates
String[] dates = br.readLine().split(";");
Date startDate = Date.valueOf(dates[0]);
Date endDate = Date.valueOf(dates[1]);
// Read stock list
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> stocks = new ArrayList<Integer>(N);
String[] ids = br.readLine().split(";");
for (int i = 0; i < ids.length; i++)
stocks.add(i, Integer.parseInt(ids[i]));
PerformanceMatrix m = new PerformanceMatrix(country,
startDate, endDate, stocks);
for (int i = 0; i < (N - 1); i++) {
String[] correlations = br.readLine().split(";");
int j = i + 1;
for (String Cij: correlations)
m.set(i, j++, Integer.parseInt(Cij));
}
br.close();
return m;
}
/**
* Write the matrix to a file.
*
* @param file the file
* @throws IOException if an I/O error occurs
*/
public void dumpToFile(File file) throws IOException {
PrintWriter out = new PrintWriter(new FileWriter(file));
out.println(country);
out.println(startDate + ";" + endDate);
out.println(stocks.size());
for (int i = 0; i < stocks.size() - 1; i++)
out.print(stocks.get(i) + ";");
out.println(stocks.get(stocks.size() - 1));
for (int i = 0; i < C.length; i++) {
for (int j = i + 1; j < C[i].length; j++) {
out.print(C[i][j]);
if (j < C[i].length - 1)
out.print(";");
}
out.println();
}
out.close();
}
/**
* Set the performance measure value <i>C(i, j)</i>.
*
* @param i the first stock number
* @param j the second stock number
* @param c the value
*/
public void set(int i, int j, int c) {
C[i][j] = C[j][i] = c;
}
/**
* Increment the performance measure value <i>C(i, j)</i>.
*
* @param i the first stock number
* @param j the second stock number
*/
public void increment(int i, int j) {
C[i][j]++;
C[j][i]++;
}
/**
* Get list of stocks.
*
* @return the list of stocks
*/
public ArrayList<Integer> getStocks() {
return stocks;
}
/**
* Performance distribution.
*
* @return the vector containing distribution values
*/
public double[] distribution() {
double[] distr = new double[53];
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
distr[C[i][j]]++;
for (int i = 0; i < 53; i++)
distr[i] *= 2.0 / (N * (N - 1));
return distr;
}
/**
* Mean value.
*
* @return the mean performance value
*/
public double mean() {
double mean = 0;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
mean += C[i][j];
mean *= 2.0 / (N * (N-1));
return mean;
}
/**
* Standard error.
*
* @return the standard error value for performance
*/
public double stderr() {
double mean = mean();
double Var = 0.0;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
Var += (C[i][j] - mean) * (C[i][j] - mean);
Var *= 2.0 / (N * (N-1));
return Math.sqrt(Var);
}
/**
* Create an unweighted graph for given threshold.
*
* @param t the threshold value
* @return the corresponding graph
*/
public Graph graph(int t) {
Graph g = new Graph(N);
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
if (C[i][j] >= t)
g.addEdge(i, j);
return g;
}
}
Приложение 5
Программа для построения модели графа доходностей
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeMap;
/**
* Program to calculate the stock market's performance measure.
*
* The program will split the given time interval in periods of length 52
* weeks using 1-week shifts. For each period the performance matrix is
* calculated. Each matrix is saved in a separate file in the specified
* directory.
*/
public class CalculatePerformance {
private static final int PERIOD_LENGTH = 52;
private static final int PERIOD_SHIFT = 1;
private static File dir;
private static DatabaseSession db;
private static boolean[] calculatePerformance(int stock,
ArrayList<Week> weeks, double[] inflation) throws SQLException {
// Get quotes
Date first = weeks.get(0).getStart();
Date last = weeks.get(weeks.size() - 1).getEnd();
ArrayList<Quote> quotes = db.selectQuotes(stock, first, last);
Iterator<Quote> quoteIterator = quotes.iterator();
if (!quoteIterator.hasNext()) {
System.err.println("No quotes for " + stock + " in " +
first + " - " + last);
//System.exit(1);
return null;
}
// For each week, determine the last close price
double[] prices = new double[weeks.size()];
int currWeek = 0;
while (quoteIterator.hasNext()) {
Quote q = quoteIterator.next();
Date date = q.getDate();
double price = q.getClose();
while (weeks.get(currWeek).getEnd().compareTo(date) < 0)
currWeek++;
prices[currWeek] = price;
}
// For each week, determine profitability
boolean[] profitable = new boolean[weeks.size()];
double lastPrice = 0.0;
for (int i = 0; i < weeks.size(); i++) {
if (prices[i] == 0.0)
continue; // no quotes for this week
if (lastPrice == 0.0) // first time - always profitable
profitable[i] = true;
else {
double R = (prices[i] - lastPrice) * 100.0 / lastPrice;
profitable[i] = R > inflation[i];
}
lastPrice = prices[i];
}
return profitable;
}
private static double[] getWeeklyInflation(String country,
ArrayList<Week> weeks) throws SQLException {
TreeMap<Integer, double[]> dailyInflation =
db.dailyInflation(country);
double[] weeklyInflation = new double[weeks.size()];
for (int i = 0; i < weeks.size(); i++) {
Week w = weeks.get(i);
Calendar start = Calendar.getInstance();
start.setTime(w.getStart());
Calendar end = Calendar.getInstance();
end.setTime(w.getEnd());
while (start.compareTo(end) <= 0) {
weeklyInflation[i] += dailyInflation.get(
start.get(Calendar.YEAR))[start.get(Calendar.MONTH)];
start.add(Calendar.DATE, 1);
}
}
return weeklyInflation;
}
public static void main(String[] args) throws IOException, SQLException {
if (args.length!= 4) {
System.err.println("Usage: java CalculateCorrelations <dir> " +
"<country> <first_date> <last_date>");
System.exit(1);
}
// Open directory
dir = new File(args[0]);
if (!dir.exists()) {
dir.mkdirs();
} else if (!dir.isDirectory()) {
System.err.println("Not a directory: " + args[0]);
System.exit(1);
}
String country = args[1];
// Parse dates
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date fromDate = null;
try {
fromDate = new Date(sdf.parse(args[2]).getTime());
} catch (ParseException e) {
System.err.println("Invalid Date: " + args[2]);
System.exit(1);
}
Date toDate = null;
try {
toDate = new Date(sdf.parse(args[3]).getTime());
} catch (ParseException e) {
System.err.println("Invalid Date: " + args[3]);
System.exit(1);
}
db = new DatabaseSession();
// Get all stocks
ArrayList<Integer> stocks = db.selectStocks(country, fromDate,
toDate, 200);
// List all weeks
ArrayList<Week> weeks = Week.listWeeks(fromDate, toDate);
// For each week compute inflation
double[] inflation = getWeeklyInflation(country, weeks);
HashMap<Integer, boolean[]> performance =
new HashMap<Integer, boolean[]>();
for (int i = 0; i < stocks.size(); i++) {
System.out.println("Calculating performance (" + (i + 1) + "/" +
stocks.size() + ")");
performance.put(stocks.get(i), сalculatePerformance(
stocks.get(i), weeks, inflation));
}
// For each period calculate C(i,j)
int count = 0;
int total = (weeks.size() - PERIOD_LENGTH) / PERIOD_SHIFT + 1;
for (int w = 0; w <= (weeks.size()-PERIOD_LENGTH); w += PERIOD_SHIFT)
{
count++;
System.out.println("Generating file (" + count + "/" +
total + ")");
Date firstDate = weeks.get(w).getStart();
Date lastDate = weeks.get(w + PERIOD_LENGTH - 1).getEnd();
ArrayList<Integer> ids = db.selectStocks(country, firstDate,
lastDate, 200);
PerformanceMatrix c = new PerformanceMatrix(country,
firstDate, lastDate, ids);
for (int i = 0; i < ids.size(); i++)
for (int j = i + 1; j < ids.size(); j++)
for (int v = w; v < w + PERIOD_LENGTH; v++)
if (performance.get(ids.get(i))[v] &&
performance.get(ids.get(j))[v])
c.increment(i, j);
// Write the matrix to file
String fileName = dir.getAbsolutePath() + File.separator +
country + "_" + count + ".csv";
c.dumpToFile(new File(fileName));
}
db.close();
}
}
/**
* Class for representing weeks.
*/
class Week {
private final Date start;
private final Date end;
/**
* Create a week object.
*
* @param start the first date
* @param end the end date
*/
public Week(Date start, Date end) {
this.start = start;
this.end = end;
}
/**
* Get the first day of the week.
*
* @return the first day of the week
*/
public Date getStart() {
return start;
}
/**
* Get the last day of the week.
*
* @return the last day of the week
*/
public Date getEnd() {
return end;
}
/**
* Create a list of all weeks in the given time period.
*
* @param from the first date of the period
* @param to the last date of the period
* @return the list of weeks
*/
public static ArrayList<Week> listWeeks(Date from, Date to) {
ArrayList<Week> weeks = new ArrayList<Week>();
Calendar cal = Calendar.getInstance();
cal.setTime(from);
while (cal.getTime().compareTo(to) <= 0) {
Date startDate = new Date(cal.getTime().getTime());
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DATE, 8 - dayOfWeek);
if (cal.getTime().compareTo(to) > 0)
break;
Date endDate = new Date(cal.getTime().getTime());
cal.add(Calendar.DATE, 1);
weeks.add(new Week(startDate, endDate));
}
return weeks;
}
}
Приложение 6
Класс для представления невзвешенного графа
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.LinkedList;
/**
* Class to represent graphs (unweighted).
*
* This implementation uses adjacency lists to represent the graph, which
* may be inefficient for very dense graphs.
*/
public class Graph {
private final int V;
private int E;
private LinkedList<Integer>[] adj;
/**
* Construct a new graph with V vertices.
*
* @param V the number of vertices.
*/
public Graph(int V) {
this.V = V;
this.E = 0;
adj = (LinkedList<Integer>[]) new LinkedList[V];
for (int v = 0; v < V; v++)
adj[v] = new LinkedList<Integer>();
}
/**
* Read graph from file.
*
* @param f the file
* @throws NumberFormatException if the file contains invalid data
* @throws IOException if an I/O error occurs
*/
public Graph(File f) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(f)));
String[] h = br.readLine().split(" ");
this.V = Integer.parseInt(h[2]);
adj = (LinkedList<Integer>[]) new LinkedList[V];
for (int v = 0; v < V; v++)
adj[v] = new LinkedList<Integer>();
int E = Integer.parseInt(h[3]);
for (int i = 0; i < E; i++) {
String[] v = br.readLine().split(" ");
addEdge(Integer.parseInt(v[1])-1, Integer.parseInt(v[2])-1);
}
br.close();
}
/**
* Dump this graph to a file (using the format suitable for the MCS
* algorithm).
*
* @param file the file to read from
* @throws IOException if an I/O error occurs
*/
public void dump(File file) throws IOException {
PrintWriter out = new PrintWriter(new FileWriter(file));
out.println("p edge " + V + " " + E);
for (int v = 0; v < V; v++) {
for (int w: adj(v))
if (w > v)
out.println("e " + (v + 1) + " " + (w + 1));
}
out.close();
}
/**
* Number of vertices.
*
* @return the number of vertices
*/
public int V() {
return V;
}
/**
* Number of edges.
*
* @return the number of edges
*/
public int E() {
return E;
}
/**
* Add a new edge between two vertices.
*
* @param v the one vertex
* @param w the other vertex
*/
public void addEdge(int v, int w) {
E++;
adj[v].add(w);
adj[w].add(v);
}
/**
* Get list f vertices adjacent to v.
*
* @param v the vertex
* @return the list of adjacent vertices
*/
public LinkedList<Integer> adj(int v) {
return adj[v];
}
Приложение 7
Программы для расчета характеристик графа
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.LinkedList;
/**
* Compute the clustering coefficient.
*/
class Clustering {
public static double local(Graph g, int v) {
LinkedList<Integer> N = g.adj(v);
if (N.size() < 2)
return 0;
int count = 0;
for (int j: N) {
for (int k: g.adj(j)) {
if (N.contains(k))
count++;
}
}
return (double) count / (N.size() * (N.size() - 1));
}
public static double global(Graph g) {
double c = 0.0;
for (int v = 0; v < g.V(); v++)
c += local(g, v);
c /= g.V();
return c;
}
}
/**
* Calculate the edge density.
*/
class EdgeDensity {
public static double density(Graph g) {
return (double) g.E() * 2.0 / (g.V() * (g.V() - 1));
}
}
/**
* Calculate the degree distributon.
*/
class DegreeDistribution {
public static int[] degreeDistribution(Graph g) {
int[] degree = new int[g.V()];
for (int v = 0; v < g.V(); v++)
degree[g.adj(v).size()]++;
return degree;
}
}
Размещено на Allbest.ru
Подобные документы
Подходы к оценке стоимости финансовых активов в рамках линейной и нелинейной парадигмы. Анализ фрактальных свойств американского фондового рынка. Разработка методики расчета параметров модели Веге-Изинга, построенной на основе гипотезы когерентных рынков.
дипломная работа [2,3 M], добавлен 13.12.2010Построение процедуры для проверки индивидуальных гипотез о равенстве вероятностей совпадения и несовпадения знаков случайных величин. Проверка адекватности условия оптимальности процедуры идентификации графа фондового рынка экспериментальным данным.
дипломная работа [823,9 K], добавлен 28.12.2015Основные понятия, структура и свойства сетей Петри. Рассмотрение принципов анализа двудольных ориентированных графов. Проведение проверки корректности абстрактного сценария. Преимущества использования сетей Петри в моделировании и анализе бизнес систем.
презентация [98,6 K], добавлен 14.09.2011Характеристика состояния акций второго эшелона рынка нефтяной отрасли. Рассмотрение подходов ученых к определению сущности поведения участников фондового рынка. Исследование и анализ особенностей эконометрического поведения участников фондового рынка.
курсовая работа [522,1 K], добавлен 13.10.2017Объемы валового внутреннего продукта и национального дохода. Тенденции развития отраслей экономики. Состояние финансовых и товарных рынков. Производственные показатели предприятия. Понятия корреляции и регрессии. Корреляционно-регрессионный анализ.
курсовая работа [214,8 K], добавлен 21.01.2011Методы и модели анализа динамики экономических процессов. Эластичность в экономическом анализе. Коэффициент корреляции, его свойства. Динамические ряды и временные ряды, тренд, их компоненты. Решение задачи потребительского выбора и его свойства.
курс лекций [399,8 K], добавлен 15.06.2015Имитационное моделирование. Описание моделируемого объекта. Обслуживающие устройства. Конвейер с постоянным интервалом. Дискретный подход в имитационном моделировании. Математическое ожидание. Среднеквадратичное отклонение. Равномерное распределение.
курсовая работа [43,9 K], добавлен 20.12.2008Построение сетевой модели. Упорядочивание сетевого графика. Определение критического пути. Временные характеристики сетевого графика. Современное сетевое планирование в условиях неопределенности. Оптимизация сетевого графика по схеме "Время-стоимость".
курсовая работа [537,0 K], добавлен 28.04.2014Построение одноиндексной математической модели задачи линейного программирования, ее решение графическим методом. Разработка путей оптимизации сетевой модели по критерию "минимум исполнителей". Решение задачи управления запасами на производстве.
контрольная работа [80,8 K], добавлен 13.12.2010Теоретические и методологические основы моделирования развития фирм с рентноориентированным управлением. Экономико-математические основы моделирования динамически сложных систем. Функция заимствования: понятие, сущность, свойства, аналитический вид.
дипломная работа [630,4 K], добавлен 04.02.2011