Дипломная работа: Автоматизация управления активами при помощи кластерного анализа паттернов поведения игроков рынка в ПАО «ФК Открытие»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
100
if ~rem(k, 100)
k
end
S(k) = nns_(PR(k, :), NN);
End
function S = nns_(x, NN)
% S = 1: LONG
% S = -1: SHORT
% S = 0: DO NOTHING
% S = 99: CLOSE
y = perceptron1_ (x - mean(x), NN);
% y(2) = 0.5 * y(2);
[~, p] = max(y);
switch p
case 1
S = 0;
case 2
S = 99;
case 3
S = 1;
case 4
S = -1;
End
function f = perceptron1_ (a1, a2, a3)
action=isobject(a2);
switch action
case false
101
PR=a1;
Q=a2;
n0=a3;
X=PR(:,1:end-4);
Y=PR(:,end-4+1:end);
f=ddrstandartnet_core(X,Y,n0,Q);
case true
X=a1;
NET=a2;
f=ddrstandartnet_apply(NET,X);
end
function NN = ddrstandartnet_core (X, Y, n0, Q)
PR=[X'; Y'];
NN=feedforwardnet([n0 ceil(n0/2) n0],'trainrp');
NN.layers{1}.transferFcn='tansig';
NN.layers{2}.transferFcn='tansig';
NN.layers{3}.transferFcn='tansig';
NN.layers{4}.transferFcn='tansig';
NN.trainparam.max_fail=Q;
NN.trainparam.showWindow=true;
NN.trainparam.epochs=1e8;
NN=train(NN,PR(1:end-4,:),PR(end-4+1:end,:),'useParallel','no');
function f = ddrstandartnet_apply (NET, X)
f=sim(NET,X');
f=f';
function strategyTester(L, NN)
sz = get(0, 'ScreenSize');
102
h0 = figure(...
'color', [0 0 0],...
'position', [0.2 * sz(3) 0.06 * sz(4) 0.6 * sz(3) 0.83 * sz(4)]);
h1 = axes(...
'parent', h0,...
'color', get(h0, 'color'),...
'position', [0.08 0.55 0.9 0.4],...
'nextplot', 'add',...
'XColor', [1 1 1],...
'YColor', [1 1 1],...
'XGrid', 'on',...
'YGrid', 'on');
h2 = axes(...
'parent', h0,...
'color', get(h0, 'color'),...
'position', [0.08 0.08 0.9 0.4],...
'nextplot', 'add',...
'XColor', [1 1 1],...
'YColor', [1 1 1],...
'XGrid', 'on',...
'YGrid', 'on');
x = zeros(1000000, 1);
Q = zeros(1000000, 1);
Q(1) = 0;
x0 = 0;
103
POS_OPEN = zeros(0, 2);
t = (1 : numel(x))';
W = 8 * L;
ImpulseAmplitude = 0;
ImpulseDuration = 0;
p = 0;
FLAG = false;
t0 = now;
for k = 1 : numel(x)
if (rand() < 0.02) && (p < 0.01)
ImpulseDuration = randi([50 250]);
ImpulseAmplitude = randn();
p = 1;
FLAG = true;
elseif (p > 0.01) && FLAG
p = p + 1;
end
if k > 1.5
x(k) = nextStep(x(k - 1), ImpulseAmplitude, ImpulseDuration, p);
else
x(k) = nextStep(x0, ImpulseAmplitude, ImpulseDuration, p);
end
if k > 1.01
104
Q(k) = Q(k - 1);
end
if k >= L
S = nns_(x(k - L + 1 : k)', NN);
switch S
case 1
if isempty(POS_OPEN)
POS_OPEN = [1 x(k)];
end
case -1
if isempty(POS_OPEN)
POS_OPEN = [-1 x(k)];
end
case 99
if ~isempty(POS_OPEN)
Q(k) = Q(k - 1) + POS_OPEN(1) * (x(k) - POS_OPEN(2));
POS_OPEN = zeros(0, 2);
end
end
end
if p > ImpulseDuration + 1e-8
ImpulseAmplitude = 0;
ImpulseDuration = 0;
p = 0;
FLAG = false;
end
tau = t((t <= k) & (abs(t - k) <= W));
Источник: https://baza.diplomsite.ru/previewfile/366