СИСТЕМА ПОДДЕРЖКИ ПРИНЯТИЯ РЕШЕНИЙ ПО ТОРГАМ НА ФОНДОВОЙ БИРЖЕ
Заказать уникальную дипломную работу- 9292 страницы
- 33 + 33 источника
- Добавлена 17.06.2017
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
Реферат 6
Введение 9
Глава 1. Анализ алгоритмов прогнозирования технических индикаторов и принятия решений на фондовым рынке 12
1.1 Торговые системы 12
1.2. Ключевые технические индикаторы скользящих средних 14
1.3 Индикатор Money Flow Index 18
1.4 Индикатор MACD 19
1.5. Алгоритм полосы Боллинджера 20
1.5. Алгоритм полосы Боллинджера 21
1.6. Построение торговой системы 23
1.7. Вывод по первой главе 25
Глава 2. Теоретические основы прогнозирования на основе временных рядов на основе нейронных сетей 26
2.1. Синтез нейронной сети 26
2.2. Обучение сети методом обратного распространения ошибок 28
2.3 Прогнозирование временных рядов на основе нейронной сети 32
Глава 3. Разработка алгоритмов прогнозирования на основе нейронных сетей и оценка его эффективности 35
3.1. Структурная схема программы 35
3.2. Разработка UML диаграммы системы 38
3.3. Пользовательский интерфейс 41
3.4. Оценка эффективности разработанных программных средств 44
3.5. Вывод по третьей главе 47
Заключение 49
Список литературы 50
Приложения 53
AvailableFieldsCount - 1 do
if (NeuralNetExtended.Fields[i].KindName = fdOutput) then // Признак того, что поле выходное
begin
Inc(j);
stgOutput.Cells[0, j] := NeuralNetExtended.Fields[i].Name;
end;
end;
// Нажатие кнопки "Вычислить"
procedure TfrmNeuralNetExtend.btnComputeClick(Sender: TObject);
var
xVectorFloat: TVectorFloat;
i: integer;
begin
// Создать вектор, который будем подавать на вход
// длиной, равной количеству нейронов ко входном слое
SetLength(xVectorFloat, NeuralNetExtended.InputFieldCount);
// Заполнить значение элементов вектора
for i := 0 to NeuralNetExtended.InputFieldCount - 1 do
xVectorFloat[i] := StrToFloat(stgInput.Cells[1, i + 1]);
// Подать на вход нейросети. Результаты будут в выходном слое нейросети
NeuralNetExtended.ComputeUnPrepData(xVectorFloat);
// Отобразить полученные результаты
for i := 0 to NeuralNetExtended.OutputFieldCount - 1 do
stgOutput.Cells[1, i + 1] := FloatToStr(NeuralNetExtended.Output[i]);
// Уничтожить вектор
SetLength(xVectorFloat, 0);
xVectorFloat := nil;
end;
// Сохранить обученную нейросеть
procedure TfrmNeuralNetExtend.btnSaveClick(Sender: TObject);
begin
SaveDialog.InitialDir := ExtractFilePath(NeuralNetExtended.FileName);
SaveDialog.FileName := ExtractFileName(NeuralNetExtended.FileName);
if SaveDialog.Execute then
begin
NeuralNetExtended.NnwFile := TIniFile.Create(SaveDialog.FileName);
NeuralNetExtended.SavePhase1;
NeuralNetExtended.SavePhase2;
NeuralNetExtended.SavePhase4;
NeuralNetExtended.SaveNetwork;
NotSaved := false;
end;
end;
end.
////////////////////////////////////////////////////////////
/// Библиотека С# для ///
/// поддержки нейронных сетей ///
///////////////////////////////////
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace ClassLibraryNeuralNetworks
{
// Структура дря разбиения переменных типа int и double на байты
[StructLayout(LayoutKind.Explicit)]
internal class DataToByte
{
[FieldOffset(0)]
public double vDouble;
[FieldOffset(0)]
public int vInt;
[FieldOffset(0)]
public byte b1;
[FieldOffset(1)]
public byte b2;
[FieldOffset(2)]
public byte b3;
[FieldOffset(3)]
public byte b4;
[FieldOffset(4)]
public byte b5;
[FieldOffset(5)]
public byte b6;
[FieldOffset(6)]
public byte b7;
[FieldOffset(7)]
public byte b8;
}
// Класс - слой нейросети
public class LayerNW
{
double[,] Weights;
int cX, cY;
// Заполняем веса случайными числами
public void GenerateWeights()
{
if (dibHandle == IntPtr.Zero) throw new ArgumentNullException("dibHandle");
var size = GetDibSize(dibHandle);
Length = Scan0Offset + size.Width * size.Height;
BuildBitmapFileHeader(Length);
Marshal.Copy(dibHandle, Array, BmpFileHeaderSize, Length - BmpFileHeaderSize);
CheckBmpBuffer();
}
// Выделяет память под веса
protected void GiveMemory()
{
Weights = new double[cX, cY];
}
// Конструктор с параметрами. передается количество входных и выходных нейронов
public LayerNW(int countX, int countY)
{
cX = countX;
cY = countY;
GiveMemory();
}
public int countX
{
get { return cX; }
}
public int countY
{
get { return cY; }
}
public double this[int row, int col]
{
get { return Weights[row, col]; }
set { Weights[row, col] = value; }
}
}
// Класс - нейронная сеть
public class NeuralNW
{
LayerNW[] Layers;
int countLayers = 0, countX, countY;
double[][] NETOUT; // NETOUT[countLayers + 1][]
double[][] DELTA; // NETOUT[countLayers ][]
// Конструкторы
/* Создает полносвязанную сеть из 1 слоя.
sizeX - размерность вектора входных параметров
sizeY - размерность вектора выходных параметров */
public NeuralNW(int sizeX, int sizeY)
{
countLayers = 1;
Layers = new LayerNW[countLayers];
Layers[0] = new LayerNW(sizeX, sizeY);
Layers[0].GenerateWeights();
}
/* Создает полносвязанную сеть из n слоев.
sizeX - размерность вектора входных параметров
layers - массив слоев. Значение элементов массива - количество нейронов в слое
*/
public NeuralNW(int sizeX, params int[] layers)
{
countLayers = layers.Length;
countX = sizeX;
countY = layers[layers.Length - 1];
// Размерность выходов нейронов и Дельты
NETOUT = new double[countLayers + 1][];
NETOUT[0] = new double[sizeX];
DELTA = new double[countLayers][];
this.Layers = new LayerNW[countLayers];
int countY1, countX1 = sizeX;
// Устанавливаем размерность слоям и заполняем слоя случайнымичислами
for (int i = 0; i < countLayers; i++)
{
countY1 = layers[i];
NETOUT[i + 1] = new double[countY1];
DELTA[i] = new double[countY1];
this.Layers[i] = new LayerNW(countX1, countY1);
this.Layers[i].GenerateWeights();
countX1 = countY1;
}
}
// Открывает НС
public NeuralNW(String FileName)
{
OpenNW(FileName);
}
// Открывает НС
public void OpenNW(String FileName)
{
byte[] binNW = File.ReadAllBytes(FileName);
int k = 0;
// Извлекаем количество слоев из массива
countLayers = ReadFromArrayInt(binNW, ref k);
Layers = new LayerNW[countLayers];
// Извлекаем размерность слоев
int CountY1=0, CountX1 = ReadFromArrayInt(binNW, ref k);
// Размерность входа
countX = CountX1;
// Выделяемпамять под выходы нейронов и дельта
NETOUT = new double[countLayers + 1][];
NETOUT[0] = new double[CountX1];
DELTA = new double[countLayers][];
for (int i = 0; i < countLayers; i++)
{
CountY1 = ReadFromArrayInt(binNW, ref k);
Layers[i] = new LayerNW(CountX1, CountY1);
CountX1 = CountY1;
// Выделяем память
NETOUT[i + 1] = new double[CountY1];
DELTA[i] = new double[CountY1];
}
// Размерность выхода
countY = CountY1;
// Извлекаем и записываем сами веса
for (int r = 0; r < countLayers; r++)
for (int p = 0; p < Layers[r].countX; p++)
for (int q = 0; q < Layers[r].countY; q++)
{
Layers[r][p, q] = ReadFromArrayDouble(binNW, ref k);
}
}
// Сохраняет НС
public void SaveNW(String FileName)
{
// размер сети в байтах
int sizeNW = GetSizeNW();
byte[] binNW = new byte[sizeNW];
int k = 0;
// Записываем размерности слоев в массив байтов
WriteInArray(binNW, ref k, countLayers);
if (countLayers <= 0)
return;
WriteInArray(binNW, ref k, Layers[0].countX);
for (int i = 0; i < countLayers; i++)
WriteInArray(binNW, ref k, Layers[i].countY);
// Зпаисвыаем сами веса
for (int r = 0; r < countLayers; r++)
for (int p = 0; p < Layers[r].countX; p++)
for (int q = 0; q < Layers[r].countY; q++)
{
WriteInArray(binNW, ref k, Layers[r][p, q]);
}
File.WriteAllBytes(FileName, binNW);
}
// Возвращает значение j-го слоя НС
public void NetOUT(double[] inX, out double[] outY, int jLayer)
{
GetOUT(inX, jLayer);
int N = NETOUT[jLayer].Length;
outY = new double[N];
for (int i = 0; i < N; i++)
{
outY[i] = NETOUT[jLayer][i];
}
}
// Возвращает значение НС
public void NetOUT(double[] inX, out double[] outY)
{
int j = countLayers;
NetOUT(inX, out outY, j);
}
// Возвращает ошибку (метод наименьших квадратов)
public double CalcError(double[] X, double[] Y)
{
double kErr = 0;
for (int i = 0; i < Y.Length; i++)
{
kErr += Math.Pow(Y[i] - NETOUT[countLayers][i], 2);
}
return 0.5 * kErr;
}
/* Обучает сеть, изменяя ее весовые коэффициэнты.
X, Y - обучающая пара. kLern - скорость обучаемости
В качестве результата метод возвращает ошибку 0.5(Y-outY)^2 */
public double LernNW(double[] X, double[] Y, double kLern)
{
double O; // Вход нейрона
double s;
// Вычисляем выход сети
GetOUT(X);
// Заполняем дельта последнего слоя
for (int j = 0; j < Layers[countLayers - 1].countY; j++)
{
O = NETOUT[countLayers][j];
DELTA[countLayers - 1][j] = (Y[j] - O) * O * (1 - O);
}
// Перебираем все слои начиная споследнего
// изменяя веса и вычисляя дельта для скрытого слоя
for (int k = countLayers - 1; k >= 0; k--)
{
// Изменяем веса выходного слоя
for (int j = 0; j < Layers[k].countY; j++)
{
for (int i = 0; i < Layers[k].countX; i++)
{
Layers[k][i, j] += kLern * DELTA[k][j] * NETOUT[k][i];
}
}
if (k > 0)
{
// Вычисляем дельта слоя к-1
for (int j = 0; j < Layers[k - 1].countY; j++)
{
s = 0;
for (int i = 0; i < Layers[k].countY; i++)
{
s += Layers[k][j, i] * DELTA[k][i];
}
DELTA[k - 1][j] = NETOUT[k][j] * (1 - NETOUT[k][j]) * s;
}
}
}
return CalcError(X, Y);
}
// Свойства. Возвращает число входов и выходов сети
public int GetX
{
get { return countX; }
}
public int GetY
{
get { return countY; }
}
public int CountLayers
{
get { return countLayers; }
}
/* Вспомогательные закрытые функции */
// Возвращает все значения нейронов до lastLayer слоя
void GetOUT(double[] inX, int lastLayer)
{
double s;
for (int j = 0; j < Layers[0].countX; j++)
NETOUT[0][j] = inX[j];
for (int i = 0; i < lastLayer; i++)
{
// размерность столбца проходящего через i-й слой
for (int j = 0; j < Layers[i].countY; j++)
{
s = 0;
for (int k = 0; k < Layers[i].countX; k++)
{
s += Layers[i][k, j] * NETOUT[i][k];
}
// Вычисляем значение активационной функции
s = 1.0 / (1 + Math.Exp(-s));
NETOUT[i + 1][j] = 0.998 * s + 0.001;
}
}
}
// Возвращает все значения нейронов всех слоев
void GetOUT(double[] inX)
{
GetOUT(inX, countLayers);
}
// Возвращает размер НС в байтах
int GetSizeNW()
{
int sizeNW = sizeof(int) * (countLayers + 2);
for (int i = 0; i < countLayers; i++)
{
sizeNW += sizeof(double) * Layers[i].countX * Layers[i].countY;
}
return sizeNW;
}
// Возвращает num-й слой Нейронной сети
public LayerNW Layer(int num)
{
return Layers[num];
}
// Разбивает переменную типа int на байты и записывает в массив
void WriteInArray(byte[] mas, ref int pos, int value)
{
DataToByte DTB = new DataToByte();
DTB.vInt = value;
mas[pos++] = DTB.b1;
mas[pos++] = DTB.b2;
mas[pos++] = DTB.b3;
mas[pos++] = DTB.b4;
}
// Разбивает переменную типа int на байты и записывает в массив
void WriteInArray(byte[] mas, ref int pos, double value)
{
DataToByte DTB = new DataToByte();
DTB.vDouble = value;
mas[pos++] = DTB.b1;
// Извлекает переменную типа int из 4-х байтов массива
int ReadFromArrayInt(byte[] mas, ref int pos)
{
DataToByte DTB = new DataToByte();
DTB.b1 = mas[pos++];
DTB.b2 = mas[pos++];
DTB.b3 = mas[pos++];
DTB.b4 = mas[pos++];
return DTB.vInt;
}
// Извлекает переменную типа double из 8-ми байтов массива
double ReadFromArrayDouble(byte[] mas, ref int pos)
{
DataToByte DTB = new DataToByte();
DTB.b1 = mas[pos++];
DTB.b2 = mas[pos++];
return DTB.vDouble;
}
}
}
sealed public class SDK: ITemplateFactory
{
private static SearchParamsElement _searchParams;
private static LicenseParams _defaultlicenseParams;
private static readonly object initLock = new object();
public static int SdkCount { get; private set; }
internal NativeSdk Sdk;
private readonly LicenseParams _licenseParams;
private readonly object disposeLock = new object();
private IntPtr _templateBuffer;
public Byte TresholdQuality { get; set; }
public static SearchParamsElement DefaultSearchParams
{
get
{
if (_searchParams == null)
{
_searchParams = SdkConfigurationSection.FromConfig.SearchParams;
}
return _searchParams;
}
set
{
_searchParams = value;
}
}
public static LicenseParams DefaultLicenseParams
{
get
{
if (_defaultlicenseParams == null)
{
_defaultlicenseParams = SdkConfigurationSection.FromConfig.LicenseParams;
}
return _defaultlicenseParams;
}
set
{
_defaultlicenseParams = value;
}
}
static public IMatcherFactory GetMatcherFactory()
{
return GetMatcherFactory(DefaultSearchParams);
}
static public IMatcherFactory GetMatcherFactory(LicenseParams licenseParams)
{
return GetMatcherFactory(licenseParams, DefaultSearchParams);
}
static public IMatcherFactory GetMatcherFactory(SearchParamsElement searchParams)
{
return GetMatcherFactory(DefaultLicenseParams, searchParams);
}
static public IMatcherFactory GetMatcherFactory(int maxAngle, int maxDisp, MatchSpeed searchSpeed, int compareLimit)
{
return GetMatcherFactory(DefaultLicenseParams, maxAngle, maxDisp, searchSpeed, compareLimit);
}
static public IMatcherFactory GetMatcherFactory(LicenseParams lic, SearchParamsElement searchParams)
{
return new MatcherFactory(lic, searchParams, searchParams.CompareLimit);
}
static public IMatcherFactory GetMatcherFactory(LicenseParams lic, int maxAngle, int maxDisp, MatchSpeed searchSpeed, int compareLimit)
{
return new MatcherFactory(lic,
new SearchParams
{
MaxAngle = checked((short) maxAngle),
MaxDisp = checked((short) maxDisp),
SearchSpeed = searchSpeed,
},
compareLimit);
}
static string GetAbsolutePath(string filePath)
{
if (Path.IsPathRooted(filePath))
return filePath;
var originalAssemblyPath = Assembly.GetExecutingAssembly().CodeBase.Substring(8);
return Path.Combine(Path.GetDirectoryName(originalAssemblyPath), filePath);
}
static public ITemplateFactory
{
return GetTemplateFactory(DefaultLicenseParams);
}
static public ITemplateFactory
{
return GetTemplateFactory(lic, DefaultSearchParams.ThresholdQuality);
}
static public ITemplateFactory
{
return GetTemplateFactory(DefaultLicenseParams, tresholdQuality);
}
static public ITemplateFactory
{
var factory = SDK.CreateNew(lic);
factory.TresholdQuality = checked((byte) tresholdQuality);
factory.CheckResult(factory.Sdk.allocateTemplate(out factory._templateBuffer)); //Âûäåëåíèå áóôåðà
return factory;
}
private static NativeSdkLibrary Library;
public string LoadedFileName { get; private set; }
internal static SDK CreateNew(LicenseParams lic)
{
lock (initLock)
{
return lic.LicensePath.StartsWith(@"http://")
|| lic.LicensePath.StartsWith(@"https://")
? CreateFromHttp(lic, false)
: CreateFromFile(lic);
}
}
private static byte[] LoadHttpData(string url, bool writeToTmpFile)
{
var clientDate = DateTime.Now.Ticks;
var request = (HttpWebRequest)WebRequest.Create(url);
var data = Encoding.ASCII.GetBytes("id={2B3CCA90-2488-409C-A52C-A73DB1846182}&date=" + clientDate);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream()) stream.Write(data, 0, data.Length);
var response = (HttpWebResponse) request.GetResponse();
var responseStream = response.GetResponseStream();
if (responseStream == null) throw new LicenceException("Íåò îòâåòà îò ñåðâåðà ëèöåíçèé");
var xml = new XmlDocument();
xml.Load(new StreamReader(responseStream));
var b64 = xml.GetElementsByTagName("key").Item(0);
if (b64 == null)
{
var error = xml.GetElementsByTagName("error").Item(0);
}
var serverDate = xml.GetElementsByTagName("date").Item(0);
if (serverDate.InnerText != clientDate.ToString(CultureInfo.InvariantCulture))
{
throw new LicenceException("Invalid date stamp");
}
var licBytes = Convert.FromBase64String(b64.InnerText);
if (writeToTmpFile)
{
NtfsAlternateDataStream.WriteAllBytes(tmpFile, _altStream, licBytes);
hasAltStream = true;
}
var checkPeriodStr = xml.GetElementsByTagName("period").Item(0);
if (checkPeriodStr != null)
{
int checkPeriod;
int.TryParse(checkPeriodStr.InnerText, out checkPeriod);
_checkPeriod = checkPeriod;
}
else _checkPeriod = 60;
return licBytes;
}
private static Stopwatch _licTimer;
private const int _licFileStub = 512;
private static string tmpFile;
private static Stream _tmpFileBlock;
private static int _checkPeriod;
private static string _altStream;
private static bool hasAltStream;
private static SDK CreateFromHttp(LicenseParams lic, bool forceLoad)
{
var url = lic.LicensePath;
return (!hasAltStream || forceLoad)
? CreateInternal(lic, () => LoadHttpData(url, true))
: new SDK(lic, null);
}
private static SDK CreateInternal(LicenseParams lic, Action prepareFile)
{
if (tmpFile == null)
{
tmpFile = Path.GetTempFileName();
File.SetAttributes(tmpFile, FileAttributes.Temporary | FileAttributes.NotContentIndexed |
FileAttributes.System | FileAttributes.Hidden | FileAttributes.SparseFile);
_licTimer = Stopwatch.StartNew();
_altStream = Guid.NewGuid().ToString("B");
if (_altStream != null)
{
_tmpFileBlock = File.Open(tmpFile, FileMode.Open, FileAccess.Write, FileShare.Delete);
_tmpFileBlock.SetLength(_licFileStub);
_tmpFileBlock.Flush();
}
return new SDK(lic, prepareFile);
}
else return new SDK(lic, null);
}
private static void DeleteTempFiles()
{
lock (initLock)
{
if (tmpFile != null && File.Exists(tmpFile))
{
if (hasAltStream)
{
var licSize = NtfsAlternateDataStream.GetFileSize(tmpFile, _altStream);
NtfsAlternateDataStream.WriteAllBytes(tmpFile, _altStream, new byte[licSize]);
hasAltStream = false;
}
using (var f = _tmpFileBlock) if (f != null)
{
f.Write(new byte[_licFileStub], 0, _licFileStub);
f.SetLength(0);
}
_tmpFileBlock = null;
File.Delete(tmpFile);
tmpFile = null;
}
}
}
private static SDK CreateFromFile(LicenseParams lic)
{
var licPath = GetAbsolutePath(lic.LicensePath);
tmpFile = licPath;
var sdk = new SDK(lic, null);
sdk._licenseParams.LicensePath = licPath;
return sdk;
}
private SDK(LicenseParams lic, Action prepareFile)
{
_licenseParams = lic;
Trace.WriteLine(String.Format("Creating {0} instance of SDK", SdkCount));
for (var i = 0; i <= lic.CheckAttempts; i++)
{
try
{
if (prepareFile != null) prepareFile();
if (_altStream != null && !hasAltStream) throw new LicenceException("No license for biometry");
LoadedFileName = GetSdkDllName(NtfsAlternateDataStream.GetFileSize(tmpFile, _altStream));
if (Library == null) Library = new NativeSdkLibrary(LoadedFileName);
Library.Handle.OnClosed += OnNativeSdkClosed;
this.CheckResult(Library.initSDK(out Sdk, 1));
SdkCount++;
var tmpFileWithAlt = NtfsAlternateDataStream.FormatName(tmpFile, _altStream);
break;
}
catch (Exception ex)
{
if (Sdk.IsInvalid) Library.closeSDK(ref Sdk);
SdkCount--;
if (ex.Code == Code.NoProtectionKey || ex.Code == Code.Hardware)
{
Trace.WriteLine("SDK..ctor error in setLicense: " + ex.Details);
if (i < lic.CheckAttempts)
Thread.Sleep(lic.CheckDelay);
else
throw new LicenceException(ex.Message + ": " + ex.Details);
}
else throw;
}
}
}
private static string GetSdkDllName(Int64 licSize)
{
string dllName = "SDK.dll";
if (File.Exists(GetAbsolutePath(dllName))) return dllName;
var isHardwareKey = (licSize < 100);
dllName = "SDK.hdw";
if (isHardwareKey && File.Exists(GetAbsolutePath(dllName))) return dllName;
return "SDK.x86";
}
public void Dispose()
{
Dispose(false);
GC.SuppressFinalize(this);
}
void OnNativeSdkClosed()
{
try
{
Dispose(true);
}
catch(Exception ex)
{
Trace.WriteLine(ex);
}
}
private bool IsDisposed;
private void Dispose(bool onSdkClosing)
{
lock (disposeLock)
{
if (!onSdkClosing && SdkCount < 1) DeleteTempFiles();
if (IsDisposed) return;
IsDisposed = true;
}
if (Sdk != null && !Sdk.IsClosed && !Sdk.IsInvalid)
{
SdkCount--;
Sdk.freeTemplate(ref _templateBuffer);
Library.closeSDK(ref Sdk);
}
}
~SDK()
{
try
{
Dispose();
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
}
public Template CreateTemplate(Image captureResult)
{
lock (initLock)
{
if (_licTimer != null && _licTimer.Elapsed > TimeSpan.FromMinutes(_checkPeriod))
{
var lic = _licenseParams;
if (LoadHttpData(lic.LicensePath, false) != null)
{
_licTimer.Stop();
_licTimer.Reset();
_licTimer.Start();
}
}
}
uint size;
Byte quality;
using (var dib = captureResult.AsPinnedArray(ImageBytesFormat.Dib))
{
var dibSize = Image.GetDibSize(dib.Handle);
this.CheckResult(Sdk.process(dib.Handle, _templateBuffer, out size, out quality,
0, 0));
}
if (quality < TresholdQuality)
{
return new Template(null, quality);
}
var templateArray = new byte[size];
Marshal.Copy(_templateBuffer, templateArray, 0, templateArray.Length);
return new Template(templateArray, quality);
}
public Template CreateTemplate2(string fileName)
{
lock (initLock)
{
if (_licTimer != null && _licTimer.Elapsed > TimeSpan.FromMinutes(_checkPeriod))
{
var lic = _licenseParams;
if (LoadHttpData(lic.LicensePath, false) != null)
{
_licTimer.Stop();
_licTimer.Reset();
_licTimer.Start();
}
}
}
uint size = 1280 * 1280 *10;
Byte quality;
var m_dib = new byte[size];
Image img2 = new Image(fileName);
var dib = img2.AsPinnedArray(ImageBytesFormat.Dib);
this.CheckResult(Sdk.ReadBmp(fileName, out size, dib.Handle));
var dibSize = Image.GetDibSize(dib.Handle);
this.CheckResult(Sdk.process(dib.Handle, _templateBuffer, out size, out quality,
0, 0));
if (quality < TresholdQuality)
{
return new Template(null, quality);
}
var templateArray = new byte[size];
Marshal.Copy(_templateBuffer, templateArray, 0, templateArray.Length);
return new Template(templateArray, quality);
}
}
}
Нормоконтроль пройден:
Магистрант
__________________________
Научный руководитель
____________(Фамилия И.О.)
Научный консультант (при необходимости)
____________(Фамилия, И.О.)
Руководитель программы
____________(Фамилия, И.О.)
…
2. Получение списка решений
…
…
…
Блок обучения НС
Блок формирования обучающей выборки для НС
НС
…
ТС N
ТС1
…
да
6. Выбор подходящего решения на основе нейронной сети
нет
Ввод цен на финансовые инструменты
4. Обучение сети
Начало
6. Конец
5. Сеть обучена?
3. Формирование обучающей выборки
Текущие цены фин. инструментов
1
n
s
…
X1
Xn
Xs
…
t
…
3
2
1
5
4
4
3
2
1
q
…
Q1
Q2
Q3
Q4
Qq
Торговая система 1,2
0
2
4
6
8
10
12
1
2
3
4
5
6
7
8
9
10
11
Время
Цена
Ряд1
НС
0
2
4
6
8
10
12
1
2
3
4
5
6
7
8
9
10
11
Время
Цена
НС1
НС и торговые системы
0
2
4
6
8
10
12
14
16
18
1
2
3
4
5
6
7
8
9
10
11
Время
Цена
ТС2
НС
ТС1
TNeuronHopf
TNeuronBP
TNeuron
TNeuralNetHopf
TNeuralNetExtended
TNeuralNetBP
TNeuralNet
TLayerHopf
TLayerBP
TLayer
Список литературы
1. Акелис С. Технический анализ от А до Я: Пол. набор инструментов
торговли... от абсолют, индекса ширины до яп. свечей / Пер. с англ.
2. Волкова М., Лебедев А. - М.: Диаграмма, 2000. - 363 с.
3. Демарк Т. Технический анализ - новая наука / Пер. с англ. Дозорова Т.,
Дозоров А. - Москва: Евро, 2006. - 280 с.
4. Казарин М. Высокие технологии в управлении инвестициями // Рынок
ценных бумаг. - 2003. №15.
5. Кац Дж.5 Маккормик Д. Энциклопедия торговых стратегий; пер. с англ.
[П.Глоба]. - 3-е изд. - Москва: Альпина Бизнес Букс, 2007. - 392 с.
6. Колби Р. Энциклопедия технических индикаторов рынка; [пер. с англ. А.
И. Левинзон]. - 2-е изд. - Москва: Альпина Бизнес Букс, 2007. - 836 с.
7. Вине Р. Математика управления капиталом: методы анализа риска для
трейдеров и портфельных менеджеров / Пер. с англ. В. И. Ритман. - 3-е изд.
- Москва: Альпина Бизнес Букс, 2007. - 399 с.
8. Булашев СВ. Статистика для трейдеров. - М.: Компания Спутник+, 2003. -
244 с.
9. Найман Э. Путь к финансовой свободе: профессиональный подход к
трейдингу и инвестициям. - 4-е изд. - Москва: Альпина Бизнес Букс, 2008.
- 476 с.
10. Найман Э. Малая энциклопедия трейдера. - 10-е изд. - Москва: Альпина
Бизнес Букс, 2009. - 455 с.
11. Чеботарев Ю. Торговые роботы: переиграть всех // Валютный спекулянт.
-2004. №5(55).
12. Чеботарев Ю. Торговые роботы: от инстинкта к алгоритму // Валютный
спекулянт. - 2004. №8(58).
13. Чеботарев Ю. Управляющий робот фондами биржевых операций -
Москва: Экономика, 2006. - 115, [2] с.
14. Швагер Дж. Технический анализ: полный курс / пер. с англ. [А. Куницын,
Б. Зуев]. - 6-е изд. - Москва: AdmiralMarkets: Альпина Бизнес Букс, 2009. -
802 с.
15. Элдер А. Как играть и выигрывать на бирже: психология, технический
анализ, контроль над капиталом: [книга с приложением-задачником] /
Пер. с англ. [М. Волкова, А. Волков]. - 5-е изд. - Москва: Альпина Бизнес
Букс: Fibo Group, 2008.-471 с.
16. Элдер А. Трейдинг с доктором Элдером : энциклопедия биржевой игры /
Пер. с англ. [А. Семенов, М. Волкова]. - 2-е изд., перераб. и доп. - Москва:
Альпина Бизнес Букс, 2008. - 487 с.
17. Твардовский В.В. Теория и практика торговли на фондовом рынке: Учеб.
курс лекций. - М.: Интернет-трейдинг, 2004. - 296 с.
18. Твардовский В. "Черный шум" для тестирования торговых систем //
Валютный спекулянт. - 2005. №7(69).
19. Elder Alexander. Trading for a living : Psychology. Trading tactics. Money
management. - New York [etc.] : Wiley, Cop. 1993. - 289p.
20. Katz Jeffrey Owen, McCormick Donna L. The Encyclopedia of Trading
Strategies. - San Francisco: McGraw-Hill, 1996. - 376p.
21. Сафин В.И Создание и оптимизация торговых систем в MetaStock. - М:
ForexClub, 2001. - 180 с.
22. Браун, С. Дж Методы финансового анализа / С. Дж. Браун.— М.: Нота,
2005. – 199 с.
23. Ясницкий Л.Н. Введение в искусственный интеллект. М. «Академия»:
2005. – 176 с.
24. А.Н.Горбань, Обучение нейронных сетей, М.: СП ПараГраф, 1991
25. А.Н.Горбань, В.Л.Дунин-Барковский, А.Н.Кардин и др.
Нейроинформатика, Отв. Ред. Новиков Е.А., РАН, Сиб. Отд., Институт
выч. Моделирования – Новосибирск: Наука, 1998.
26. Ф. Уоссерман, Нейрокомпьютерная техника: Теория и практика, М. Мир,
1992.
27. Д.А.Тархов. Нейронные сети. Модели и алгоритмы. (Справочник.) М.,
Радиотехника, 2005.
28. В.В.Круглов, М.И.Дли, Р.Ю.Голунов. Нечёткая логика и искусственные
нейронные сети. Физматлит, 2001.
29. М.М.Дубовиков, А.В.Крянев, Н.В.Старченко. Размерность минимального
покрытия и локальный анализ фрактальных временных рядов. Вестник
РУДН. Серия Прикладная и компьютерная математика. 2004, Т.3, №1,
с.30-44.
30. Я.М.Карандашев, Б.В.Крыжановский, Л.Б.Литинский. Обобщённая
модель Хопфилда и статфизический подход: общий случай.
Нейроинформатика-2011. XIII Всероссийская научно-техническая
конференция. Сборник научных трудов, ч.3, с.181-190. М., НИЯУ МИФИ,
2010.
31. А.Г.Гужва, С.А.Доленко, И.Г.Персианцев. Методика отбора
существенных входных признаков при нейросетевом решении задач
регрессии. Нейрокомпьютеры: разработка, применение, 2010, №3, с.20-32. В.А.Головко. От многослойных персептронов к нейронным сетям
глубокого доверия: парадигмы обучения и применение. В сб.:
Нейроинформатика - 2015. XVII Всероссийская научно-техническая
конференция с международным участием. Лекции по нейроинформатике,
с.47-84. НИЯУ МИФИ, 2015.
33. Д. Рамбо, М. Блаха. UML 2.0. Объектно-ориентированное моделирование
и разработка. Питер, 2007. − 544 с.
Вопрос-ответ:
Какие алгоритмы прогнозирования технических индикаторов рассматриваются в статье?
В статье рассматриваются алгоритмы прогнозирования технических индикаторов скользящих средних, индикатора Money Flow Index и индикатора MACD.
Что такое индикатор Money Flow Index?
Индикатор Money Flow Index (MFI) - это технический индикатор, который используется для измерения интенсивности денежных потоков в активе и определения вероятности разворота тренда.
Что такое индикатор MACD и как он используется в торговой системе?
Индикатор MACD (Moving Average Convergence Divergence) - это технический индикатор, который позволяет определить разворот тренда и точки входа в рынок. Он используется в торговой системе для принятия решений о покупке или продаже активов.
Что представляет собой алгоритм полосы Боллинджера?
Алгоритм полосы Боллинджера - это технический индикатор, который позволяет определить границы возможного движения цены актива. Он строится на основе скользящих средних и стандартного отклонения цены.
Какие выводы можно сделать по первой главе статьи?
По первой главе статьи можно сделать вывод, что технические индикаторы и алгоритмы прогнозирования помогают принимать решения на фондовой рынке и строить эффективные торговые системы.
Какие алгоритмы прогнозирования технических индикаторов и принятия решений используются на фондовой бирже?
В статье рассматриваются различные алгоритмы, такие как торговые системы, индикаторы скользящих средних, Money Flow Index, MACD и алгоритм полосы Боллинджера.
Что такое торговая система и как она применяется на фондовом рынке?
Торговая система - это набор правил и алгоритмов, которые определяют точки входа и выхода из сделок на рынке. Она используется для автоматизации процесса торговли и принятия решений на фондовой бирже.
Что такое индикаторы скользящих средних и как они помогают в прогнозировании на фондовом рынке?
Индикаторы скользящих средних - это графические инструменты анализа, которые отображают среднюю цену по определенному периоду времени. Они помогают анализировать тренды и прогнозировать поведение рынка.
Что такое алгоритм полосы Боллинджера и как он используется на фондовой бирже?
Алгоритм полосы Боллинджера - это индикатор, который отображает диапазон колебаний цены по отношению к скользящей средней. Он используется для определения уровней перекупленности и перепроданности рынка и может помочь принять решение о покупке или продаже активов на фондовой бирже.
Каким образом можно построить торговую систему на основе анализа технических индикаторов?
Для построения торговой системы на основе анализа технических индикаторов необходимо определить правила входа и выхода из сделок, основываясь на значениях индикаторов. Также следует определить таймфрейм и периоды анализа. Торговая система должна быть протестирована на исторических данных и оптимизирована для получения наилучших результатов.
Какие алгоритмы прогнозирования используются при принятии решений на фондовой бирже?
При принятии решений на фондовой бирже используются различные алгоритмы прогнозирования, такие как алгоритмы технического анализа и алгоритмы фундаментального анализа. Алгоритмы технического анализа основаны на анализе исторических данных ценовых графиков и объемов сделок с помощью различных технических индикаторов, таких как скользящие средние, индикаторы Money Flow Index и MACD, алгоритм полосы Боллинджера и другие. Алгоритмы фундаментального анализа основаны на анализе финансовой отчетности компаний, макроэкономических данных и других факторов, которые могут влиять на цены акций.