Fuzzy systems

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 30 aug 2016, 08:41

De formule voor A6 en A7 heb ik trouwens nog toegevoegd hieronder:

Afbeelding

Zij verwijzen daar naar formule 11, 12 en 13.

Dit is trouwens de linknaar het Artikel: https://arxiv.org/ftp/arxiv/papers/1401/1401.1892.pdf

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 30 aug 2016, 14:32

Volgens de membershipfunction mu(x) Figuur 1 uit je eerste post:
- ligt x in PS voor 0 <= x <= 2w. Hierbij is muPS(x) = 1 voor x = w
- ligt x in PM voor w <= x <= 3w. Hierbij is muPM(x) = 1 voor x = 2w
- ligt x in PL voor 2w <= x. Hierbij is muPL(x) = 1 voor x >= 3w

Alle membershipfuncties zijn op de deelintervallen lineair, dus kunnen we ed(x) via de eindpunten van elk deelinterval bepalen.
Voor ed6(x) levert dit (in w-eenheden, dus al die w's even weggelaten):
- op x=0 is ed6(x) = -0.1 * muPS(0) = -0.1 * 0 = 0
- op x=1 is ed6(x) = -0.1 * muPS(1) -0.2 * muPM(1) = -0.1 * 1 - 0.2 * 0 = -0.1
- op x=2 is ed6(x) = -0.1 * muPS(2) -0.2 * muPM(2) -0.4 * muPL(2) = -0.1 * 0 - 0.2 * 1 - 0.4 * 0 = -0.2
- op x=3 is ed6(x) = -0.2 * muPM(3) -0.4 * muPL(3) = - 0.2 * 0 - 0.4 * 1 = -0.4
- voor x>3 is ed6(x) = -0.4 * muPL(x) = -0.4 * 1 = -0.4

Nu kunnen we de deelsgewijs lineaire functie ed6(x) op elk deelinterval bepalen,
zie bv https://en.wikipedia.org/wiki/Linear_eq ... point_form

Voorbeeld:
voor x tussen 2 en 3:
x1 = 2, ed1 = -0.2
x2 = 3, ed2 = -0.4









en als we x weer uitdrukken in w-eenheden:



zoals we terugvinden in formule (5)

Evenzo voor ed7 en de overige deelintervallen van ed6.


Dan je tweede vraag.
Het model is volgens formule (1):



ofwel



ofwel



ofwel



en dit is formule (9).
De auteur schrijft dit in vectornotatie, maar dat is precies hetzelfde.



In dit model zijn alle price data p gegeven, x volgt uit het kort/lang gemiddelde, ed6(x) en ed7(x) kunnen we berekenen,
epsilon(t) is de restfout die we zo klein mogelijk willen hebben (hoe beter het model, hoe kleiner epsilon).
a6 en a7 zijn de gewichten van ed6(x) resp. ed7(x), d.w.z. hoe zwaar ed6(x) en ed7(x) meewegen in het model.
Afhankelijk van wat bekend is, willen we de waarden van a6 en a7 zo goed mogelijk inschatten, zodanig dat de fout in ons model zo klein mogelijk wordt.
Uit figuur 9 volgt:



In plaats van epsilon te minimaliseren, minimaliseren we het kwadraat daarvan: epsilon^2.
We voorkomen zo problemen met negatieve fouten, bovendien wegen grote fouten nu zwaarder mee bij onze bepaling (een afwijking van 2 keer zo groot levert een 2^2 = 4 keer zo grote foutbijdrage).
Dit vinden we terug in formule (10).
Bovendien zien we daar ook nog een vergeetfactor lambda, waardoor hele oude waarden minder bijdragen dan de recentere waarden.

Voorbeeld voor n = 4 en lambda = 0.5:







Onder deze foutconditie kunnen we de beste waarden voor a = [a6, a7] bepalen, die beste benadering wordt genoteerd met

In formule (11) hebben we alle gegevens behalve K[t],
K[t] bepaal je met formule (12) uit bekende gegevens en P[t-1],
en tegelijkertijd met formule (13) de nieuwe waarde voor P, namelijk P[t].

NOOT: deze formules gebruiken vectoren en matrices. Kan je daarmee rekenen?

Formule (15) is ingevoerd om de ergste ruis uit het model te krijgen, hiermee wordt de curve wat vloeiender.

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 31 aug 2016, 08:14

arie schreef:Volgens de membershipfunction mu(x) Figuur 1 uit je eerste post:
- ligt x in PS voor 0 <= x <= 2w. Hierbij is muPS(x) = 1 voor x = w
- ligt x in PM voor w <= x <= 3w. Hierbij is muPM(x) = 1 voor x = 2w
- ligt x in PL voor 2w <= x. Hierbij is muPL(x) = 1 voor x >= 3w

Alle membershipfuncties zijn op de deelintervallen lineair, dus kunnen we ed(x) via de eindpunten van elk deelinterval bepalen.
Voor ed6(x) levert dit (in w-eenheden, dus al die w's even weggelaten):
- op x=0 is ed6(x) = -0.1 * muPS(0) = -0.1 * 0 = 0
- op x=1 is ed6(x) = -0.1 * muPS(1) -0.2 * muPM(1) = -0.1 * 1 - 0.2 * 0 = -0.1
- op x=2 is ed6(x) = -0.1 * muPS(2) -0.2 * muPM(2) -0.4 * muPL(2) = -0.1 * 0 - 0.2 * 1 - 0.4 * 0 = -0.2
- op x=3 is ed6(x) = -0.2 * muPM(3) -0.4 * muPL(3) = - 0.2 * 0 - 0.4 * 1 = -0.4
- voor x>3 is ed6(x) = -0.4 * muPL(x) = -0.4 * 1 = -0.4

Nu kunnen we de deelsgewijs lineaire functie ed6(x) op elk deelinterval bepalen,
zie bv https://en.wikipedia.org/wiki/Linear_eq ... point_form

Voorbeeld:
voor x tussen 2 en 3:
x1 = 2, ed1 = -0.2
x2 = 3, ed2 = -0.4









en als we x weer uitdrukken in w-eenheden:



zoals we terugvinden in formule (5)

Evenzo voor ed7 en de overige deelintervallen van ed6.
Hartelijk bedankt voor je uitvoerig antwoord. Dat is al een stuk duidelijker. Dit kan ik nu waarschijnlijk zonder Problemen oplossen.

Dan je tweede vraag.
Het model is volgens formule (1):



ofwel



ofwel



ofwel



en dit is formule (9).
De auteur schrijft dit in vectornotatie, maar dat is precies hetzelfde.


Dit is echt zeer hulpvol. Ik heb namelijk niet veel ervaring met vectoren.

In dit model zijn alle price data p gegeven, x volgt uit het kort/lang gemiddelde, ed6(x) en ed7(x) kunnen we berekenen,
epsilon(t) is de restfout die we zo klein mogelijk willen hebben (hoe beter het model, hoe kleiner epsilon).
a6 en a7 zijn de gewichten van ed6(x) resp. ed7(x), d.w.z. hoe zwaar ed6(x) en ed7(x) meewegen in het model.
Afhankelijk van wat bekend is, willen we de waarden van a6 en a7 zo goed mogelijk inschatten, zodanig dat de fout in ons model zo klein mogelijk wordt.
Uit figuur 9 volgt:



In plaats van epsilon te minimaliseren, minimaliseren we het kwadraat daarvan: epsilon^2.
We voorkomen zo problemen met negatieve fouten, bovendien wegen grote fouten nu zwaarder mee bij onze bepaling (een afwijking van 2 keer zo groot levert een 2^2 = 4 keer zo grote foutbijdrage).
Dit vinden we terug in formule (10).
Bovendien zien we daar ook nog een vergeetfactor lambda, waardoor hele oude waarden minder bijdragen dan de recentere waarden.

Voorbeeld voor n = 4 en lambda = 0.5:







Onder deze foutconditie kunnen we de beste waarden voor a = [a6, a7] bepalen, die beste benadering wordt genoteerd met

In formule (11) hebben we alle gegevens behalve K[t],
K[t] bepaal je met formule (12) uit bekende gegevens en P[t-1],
en tegelijkertijd met formule (13) de nieuwe waarde voor P, namelijk P[t].

NOOT: deze formules gebruiken vectoren en matrices. Kan je daarmee rekenen?

Formule (15) is ingevoerd om de ergste ruis uit het model te krijgen, hiermee wordt de curve wat vloeiender.
Ik snap helaas nog niet alles precies. Ik merk bij mij meestal dat ik het zelf beter begrijp als ik het zelf ga berekenen.

x = 0,025
w = 0,01



ED6 = -0,3
ED7 = 0

(formule 5 & 6)

Dan gaan we naar formule 9 die jij anders genoteerd hebt. Aangezien we daarvoor A6 en A7 nodig hebben (de sterkte parameters) moeten we eerst deze bepalen.

Daarvoor hebben we eigenlijk formule 15 voor nodig als ik het goed begrijp, Maar om formule 15 op te lossen, hebben we formule 11 nodig. Om formule 11 op te lossen moeten we eerste formule 12 & 13 oplossen.

Formule 12 is qua opbouw hetzelfde als formule 9 die jij herschreven hebt. Ik heb dat nu geprobeerd om te zetten bij formule 12:




Je hebt in jouw post geschreven dat in formule 12/13 ook matrices voorkomen. Ik heb daar op de universiteit wel mee gewerkt, Maar ik zou niet direct zeggen dat in deze formules dit zou voorkomen?

Formule 13 (P t)zou ik daarom precies zo berekenen zoals het daar Staat. Het einige dat ik niet begrijp is het symbool "I".

Wellicht kun je mij hier nog op weg helpen. Dan kan ik proberen mijn voorbeeld af te werken.
Alvast bedankt voor je hulp.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 31 aug 2016, 23:14

Onder formule (13) geeft de auteur een voorbeeld met n=3.
Om te beginnen heb je
p[-2], p[-1] en p[0]
a6[0], a7[0]
P[0] en nog wat constanten.

Uit p[-2], p[-1] en p[0] bereken je x[0],
daaruit volgen ed6(x[0]) en ed7(x[0]).
Via formule (1) bereken je de volgende prijs, in dit geval p[1]
r[1] = ln(p[1]/p[0]) volgens de tekst boven formule (7)
Uit formules 11 en 12 bereken je de volgende a-waarden (a6[1]() en a7[1]())
Daarna update je matrix P.

Formules 7 en 8 definieren de vectoren:





In formule (9) staat het inproduct van deze vectoren:
(zie zo nodig https://en.wikipedia.org/wiki/Dot_product)





P is een matrix:



I is de eenheidsmatrix in de afmeting waarin we werken (hier een 2x2 matrix)
K_t is een kolomvector

Voor vermenigvuldiging van matrices en vectoren, zie bijvoorbeeld
https://en.wikipedia.org/wiki/Matrix_multiplication

Kom je hiermee verder?

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 01 sep 2016, 16:19

arie schreef:Onder formule (13) geeft de auteur een voorbeeld met n=3.
Om te beginnen heb je
p[-2], p[-1] en p[0]
a6[0], a7[0]
P[0] en nog wat constanten.
Hallo Arie. Ik heb alle informatie die ik heb eens opgeschreven:

p-2 10
p-1 10
p 10

Vervolgens bereken ik formule 3 (eerste post van mij) de x:

x = LN (10/10) = 0

Vervolgens:

ED6 = 0
ED7 = 0

Pt = 10 (laatste prijs)
n = 3
w = 0,01
-A6 = -0,125 (ik heb hier een waarde genomen in de figuur 2 op punt 100, ik snap overigens niet waarom de auteur plotseling -A6 schrijft)
A7 = 0,2 (waarde figuur 2 op punt 100)
error (t) = 0 (i.d.d. zero-mean guassian random proces with Standard Deviation (SD)
SD = 0,02
Lamda = 0,95
y = 10

Dat zijn, als ik het goed heb begrepen alle informatie die ik heb.

Uit p[-2], p[-1] en p[0] bereken je x[0],
daaruit volgen ed6(x[0]) en ed7(x[0]).
Via formule (1) bereken je de volgende prijs, in dit geval p[1]
r[1] = ln(p[1]/p[0]) volgens de tekst boven formule (7)
Uit formules 11 en 12 bereken je de volgende a-waarden (a6[1]() en a7[1]())
Daarna update je matrix P.

Formules 7 en 8 definieren de vectoren:




Via formule 1 kan ik dan prijs (+1) berekenen:

LN (Pt) + A6 x ED6 + A7 + ED7 + error (t)
LN(10) + -0,125 * 0 + 0,20 * 0 + 0 = 2,32
P(+1) = 2,32

Ik heb aangenomen dat dit klopt, alhoewel ik de uitkomst nogal vreemd vind.

Vervolgens neem ik

r[1] = ln(p[1]/p[0])
R[1] = ln (2,32/10)
R[1] = -1,46

Vervolgens bereken ik de volgende a-waarden (a6[1]() en a7[1]()) in formule 11 en 12.

Ik begrijp formule 12 niet. Ik snap niet wat ik daar precies moet doen, omdat ED 2 keer voorkomt. Ik kan waarschijnlijk niet, zoals hierboven, 2 keer ED vermenigvuldigen.

Pt heb ik daarom nog niet bekemen, omdat ik daarvoor de uitkomst van Kt (formule 12) nodig heb.

In formule (9) staat het inproduct van deze vectoren:
(zie zo nodig https://en.wikipedia.org/wiki/Dot_product)





P is een matrix:



I is de eenheidsmatrix in de afmeting waarin we werken (hier een 2x2 matrix)
K_t is een kolomvector

Voor vermenigvuldiging van matrices en vectoren, zie bijvoorbeeld
https://en.wikipedia.org/wiki/Matrix_multiplication

Kom je hiermee verder?
Ik heb hierboven het begin van de berekening opgeschreven, zodat je ziet wat ik denk en dat je wellicht ook kunt zien waar het eventueel fout gaat.

Ons doel is het de prijs van het aandeel van bijv. morgen te berekenen. Echter, de auteur verwijst eigenlijk dat hij de Resultaten van zijn test krijgt met de uitkomsten van A6 en A7. Ik snap echter nog steeds niet waar hij deze waardes nu vandaan haalt. Zie ik hier iets over het hoofd?

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 01 sep 2016, 21:38

stanexclusive schreef:... Via formule 1 kan ik dan prijs (+1) berekenen:
LN (Pt) + A6 x ED6 + A7 + ED7 + error (t)
LN(10) + -0,125 * 0 + 0,20 * 0 + 0 = 2,32
P(+1) = 2,32
Ik heb aangenomen dat dit klopt, alhoewel ik de uitkomst nogal vreemd vind...
Je intuitie klopt:
LN(P[t+1]) = LN (P[t]) + A6 * ED6 + A7 * ED7 + error(t)
= LN(10) + -0,125 * 0 + 0,20 * 0 + 0 = 2,32
dus
LN(P[t+1]) = 2,32
en
P[t+1] = e^2.32 = 10
Als ed6(), ed7() en error(t) allemaal nul zijn, verandert de prijs niet.


Er zijn 3 veronderstellingen:
[1] prijzen mn bepaald door grote investeerders: big buyers / big sellers (BB/BS)
[2] BB/BS hebben heuristieken om te handelen:
BB: prijs omlaag => buy (hoe meer prijs omlaag, hoe meer buy); anders: doe niets = neutraal
BS: prijs omhoog => sell (hoe meer prijs omhoog, hoe meer sell); anders: doe niets = neutraal
[3] een BB/BS domineert in bepaalde tijdsperioden

We willen het gedrag van een mogelijke BB/BS detecteren uit de waargenomen prijzen p[t]
= de aanwezigheid en sterkte van de BB/BS schatten over het verloop van tijd.

We gebruiken hierbij het model in formule (1):
- x[t] is een maat voor wat de actuele prijs doet ten opzichte van het langlopend gemiddelde
- BB/BS (en wij) bepalen daarmee de ed(x[t]) waarde
- a6 geeft de sterkte aan van de BS a7 van de BB.
- - een sterke BB zal a7 groot maken, een positieve ed7 zal de prijs opdrijven (formule 1)
- - een sterke BS zal a6 groot maken, een negatieve ed6 zal de prijs doen dalen (formule 1)
Indien een BB of BS niet aanwezig zijn, zullen a6 en a7 nul zijn, en de nieuwe prijs alleen afhankelijk zijn van (1) de oude prijs en (2) de error(t) die wordt bepaald door kleine handelaren.
Uit het prijsbeloop willen we nu de factoren a6(t) en a7(t) detecteren en bepalen hoe groot ze zijn, ofwel statistisch schatten als en
(zie te tekst direct onder Fig. 1).

Hoe beter onze schatting van de werkelijke a6 en a7, hoe beter we via formule (1) het verdere beloop van de prijs p kunnen voorspellen.

Figuur 2 boven:
in blauw de werkelijke aanwezigheid van BB en/of BS, a7(t) en -a6(t) (beide zijn nul of positief, het minteken bij a6(t) maakt onderscheid met a7(t) duidelijker en past bij de negatieve ed6).
Je ziet bv dat:
- van t=80 t/m t=200 een BB actief is die a7(t) = 0.2 maakt.
- van t=50 t/m t=150 een BS actief is die a6(t) = 0.125 maakt.
etc.
Als de blauwe lijnen nul zijn is er geen BB resp. BS actief.
De rode lijnen geven de schatting van deze waarden aan, die we bepaald hebben met formule (11) t/m (13).
Je ziet dat de schatting (rood) de werkelijkheid (blauw) behoorlijk goed volgt.
Met de schatting van a6 en a7 en formule (1) kunnen we voorspellen wat de prijs de komende tijd zal gaan doen.

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 02 sep 2016, 05:47

Bedankt, maar wat ik momenteel nog niet helemaal begrijp is waar de auteur de waardes van A6 en A7 nu vandaan haalt.

Stel ik heb de volgende prijzen:

P (t-4) 100
P (t-3) 99
P (t-2) 98
P (t-1) 96
P (t) 96

5-day moving average 97,8
1-day moving average 96

w 0,01
x 0,019

ED6 -0,385763856
ED7 0

In het vorige voorbeeld hebben we dus de waarde van A6 en A7 uit de grafiek van de auteur gehaald, maar ik snap dus nog niet helemaal hoe hij nu precies aan die waardes gekomen is.
haalt de auteur die nu uit formule 11 (de foutcorrectie)? Ik snap dit nog niet.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 02 sep 2016, 17:28

P[-4] = 100
P[-3] = 99
P[-2] = 98
P[-1] = 96
P[0] = 96

5-day moving average = 97,8
1-day moving average = 96

w = 0,01
x[0] = ln( 96/97.8 ) = -0,01858

-2*w <= x[0] <= 0
dus
ED6(x[0]) = 0
ED7(x[0]) = -0.1*x[0]/w = 0.1858

a7 en a6 worden bepaald door BB resp BS.
BB en BS definieren WANNEER ze kopen/verkopen (a7 resp a6 > 0), en HOE STERK ze kopen/verkopen (de grootte van a7 en a6).
In figuur 2 komt dit ongeveer hier op neer:
for(t=80..200) a7[t]=0.2;
for(t=400..480) a7[t]=0.2;
for(t=50..150) a6[t]=0.125;
for(t=150..250) a6[t]=0.2;
for(t=350..450) a6[t]=0.2;
Alle overige waarden van a7 en a6 zijn nul.
In werkelijkheid houden BB/BS hun a7 en a6 geheim, maar om een voorbeeldcurve te maken zijn deze in Figuur 2 bekend gemaakt.

Tenslotte is er een signaal van de kleine investeerders (in Excel bv =NORMINV(RAND();0;0.02), dus gemiddelde nul en standaard deviatie sigma = 0.02)

Met deze gegevens kan je P[t] via formule (1) voor t = 1 t/m 500 berekenen.
Je vindt zo de prijscurve.


In werkelijkheid hebben we alleen deze prijscurve in handen, en willen we daaruit bepalen of een BB en/of BS actief zijn, dat wil zeggen: wat de geheime waarden van a7 en a6 op elk tijdstip zijn.
De schatting van a7 en a6 noemen we en , en die bepalen we via formule (11) t/m (13)
Deze formules zorgen ervoor dat de geschatte ^a7 en ^a6 zo dicht mogelijk bij de werkelijke a7 en a6 liggen.
Dit gaat grofweg door (r - a7*ed7 - a6*ed6)^2 over een gegeven window te minimaliseren.
In het optimale geval zijn al deze waarden nul, wat inhoudt dat:
r - a7*ed7 - a6*ed6 = 0
ofwel
r = a7*ed7 + a6*ed6
en dit is precies formule (9), los van het effect van de kleine investeerders.

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 04 sep 2016, 15:22

Bedankt Arie, dan is het alweer een stuk duidelijker. x had ik inderdaad fout berekend :oops:

Dan is dus de volgende stap formule 12:
Als ik met het voorbeeld verder reken, dan krijg ik dit:

P[-4] = 100
P[-3] = 99
P[-2] = 98
P[-1] = 96
P[0] = 96

w = 0,01
x[0] = ln( 96/97.8 ) = -0,01858
Lamda = 0,1 (constant, aangegeven in de tekst)

-2*w <= x[0] <= 0
dus
ED6(x[0]) = 0
ED7(x[0]) = -0.1*x[0]/w = 0.1858

Kt = 96 * 0,1858 / ((96 x 0,1858) * 0,1858 + 0,1)
Kt = 5,224

Ik heb hier P(t-1) * ED6 + P(t-1) ED7 / ( (P(t-1) * ED6) * ED6 + (P(t-1) * ED7) * ED7 + Lamda
Aangezien ED6 nul is, heb ik die in de formule weggelaten.

Om formule 11 te kunnen berekenen, moet ik ook eerst I weten. Deze Price dynamical equation (I) is formule 9.

R(t+1) = (ED6 * x) * A6 + (ED7 * x) * A7 + error
R (t+1) = 0 * -0,018 * A6 + 0,1858 * -0,018 * A7 + 0,02
R (t+1) = 0,016

Mijn probleem hier is hoe ik aan de waarde A6 en A7 kom (dat is formule 7). Ik heb nu aangenomen dat deze beide 0 zijn.
Formule 13 is dan:

Pt = (0,016 - (5,224 * 0,1858 + 5,224 * 0)) * (96/0,1)
Pt = -915,99

Ik heb hier (I - (Kt * ED6 + Kt * ED7)) * ((P (t-1) / Lamda) gedaan.

Â(t) = Â(t-1) + Kt (R(t) - (ED6 * Â6(t-1) + ED7 * Â7(t-1))

Als ik aanneem dat ik formule 12 en 13 correct heb opgelost, dan loop ik nu tegen het volgende aan, namelijk Â(t-1). De auteur zegt dat Â(0) = 0, maar ik weet niet hoe ik dan aan Â(t-1) kom.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 06 sep 2016, 20:04

Gegeven:
P[-4] = 100
P[-3] = 99
P[-2] = 98
P[-1] = 96
P[0] = 96
Gekozen:
a6[0] = 0
a7[0] = 0

Daaruit volgt:
x[0] = ln(96/97.9) = -0.01858
ED6(x[0]) = 0
ED7(x[0]) = -0.1*x[0]/w = 0.1858

Dan maak je Kt een getal (5.224), maar Kt is een vector.
Vanaf hier loopt er nog meer mis.

Ik vermoed dat je lineaire algebra tamelijk ver is weggezakt.
Daarom zal ik je hieronder de uitgewerkte formules (11) t/m (13) geven.

Maar voordat we daar zijn kunnen we beter wat meer structuur aanbrengen door eerst te kijken wat we hebben aan gegevens, en pas daarna de benaderingsformules te gebruiken.
Werk daartoe in 3 stappen:

- stap 1: maak de prijsontwikkeling alleen afhankelijk van de kleine investeerders:



- stap 2: breid deze prijsontwikkeling uit tot formule (1): bereken x[], ed6[], ed7[] en definieer a6[] en a[7]:



- stap 3: probeer alleen uit de grafiek van p[] de waarden van a6[] en a7[] te schatten.
Dit gaat met formules (11) t/m (13).



Als je in Excel werkt zou dit er zo uit kunnen zien:

Voor stap 1 en stap 2:

Afbeelding


Stap 1:

In kolom A zet je tijdstippen t = -4 t/m 600

In kolom B de prijsontwikkeling pklein als we alleen kleine investeerders zouden hebben
- de eerste 5 waarden (t=-4 t/m t=0) zijn gegeven
- cel B7 wordt dan:
=EXP(LN(B6)+I6)
en kopieer dit door t/m t=600
NOOT: de formules kunnen per Excel versie (land / taal / etc) wat verschillend zijn, pas daarop zo nodig aan.

In kolom I het effect van de kleine investeerders = het ruissignaal epsilon[t]:
epsilon[0] = 0.03
epsilon[t+1] = ( (2133113 * epsilon[t] + 17) modulo 2503) / 31287 - 0.04
Dit is een iets andere random verdeling dan die van de auteur, maar zo kunnen we onderling de resultaten vergelijken.
- cel I6:
0.03
- cel I7:
=MOD(2133113*I6+17;2503)/31287-0.04
en kopieer weer door t/m t=600
(als je een Nederlandse Excel versie hebt moet je mogelijk REST ipv MOD gebruiken)

Als het goed is vind je
pklein[600] = 100.29
epsilon[600] = 0.0102
(op het laatste Excel regelnummer = 606)

Je kan nu ook voor jezelf een grafiek van pklein maken voor t=0 t/m 600.



Stap 2:

In kolom C de prijsontwikkeling p volgens formule (1)
- de eerste 5 waarden (t=-4 t/m t=0) zijn gegeven
- cel C7 wordt dan:
=EXP(LN(C6)+E6*G6+F6*H6+I6)

In kolom D bereken je de x-waarden:
=LN(C6/AVERAGE(C2:C6))

Kolom E en F vul je eerst voor t=0 t/m t=600 met nullen,
dan verander je de waarden:
- van t=51 t/m 150: a6[t]=0.125;
- van t=151 t/m 250: a6[t]=0.2;
- van t=351 t/m 450: a6[t]=0.2;
- van t=81 t/m 200: a7[t]=0.2;
- van t=401 t/m 480: a7[t]=0.2;
(let op dat je de juiste waarden van t (kolom A) gebruikt, dus niet het Excel regelnummer)

Kolom G en H: de waarden van ed6(x[t]) en ed7(x[t]):
=IF(D6<=0;0;IF(D6<=0.02;-10*D6;IF(D6<=0.03;-20*D6+0.2;-0.4)))
resp
=IF(D6<=-0.03;0.4;IF(D6<=-0.02;-20*D6-0.2;IF(D6<=0;-10*D6;0)))

Kopieer dit ook allemaal t/m t=600.
Je krijgt dan op Excel regelnummer 606:
t=600
pklein[600] = 100.29
p[600] = 90.12
x[600] = 0.03194
a6[600] = 0
a7[600] = 0
ed6[600] = -0.4000
ed7[600] = 0.0000
epsilon[600] = 0.0102

Nu kan je pklein en p in 1 grafiek zetten, je ziet dan het effect van de grote investeerders op de prijsontwikkeling.



Uitbreiding met stap 3:

Afbeelding


Stap 3:

Matrix P: formule (13):

cel K6: 10
cel L6: 0
cel M6: 0
cel N6: 10

cel K7:
=(K6-O7*(K6*G7+M6*H7))/0.95
dit is (pa - k1*(pa*e6+pc*e7)) / lambda

cel L7:
=(L6-O7*(L6*G7+N6*H7))/0.95
dit is (pb - k1*(pb*e6+pd*e7)) / lambda

cel M7:
=(M6-P7*(K6*G7+M6*H7))/0.95
dit is (pc - k2*(pa*e6+pc*e7)) / lambda

cel N7:
=(N6-P7*(L6*G7+N6*H7))/0.95
dit is (pd - k2*(pb*e6+pd*e7)) / lambda


Vector K = formule (12):

cel Q7: de noemer van formule (12):
=K6*G7^2+(L6+M6)*G7*H7+N6*H7^2+0.95
dit is (pa*e6^2 + (pb+pc)*e6*e7 + pd*e7^2 + lambda

cel O7:
=(K6*G7+L6*H7)/Q7
dit is (pa*e6+pb*e7)/Knoemer

cel P7:
=(M6*G7+N6*H7)/Q7
dit is (pc*e6+pd*e7)/Knoemer


vector Ahat = formule (11):

cel R7:
=LN(C7/C6)
cel R8:
=LN(C8/C7)

cel S6:
0
cel T6:
0

cel S7:
=S6+O7*(R8-S6*G7-T6*H7)
dit is Ahat6+k1*(r[t+1] - Ahat6*e6 - Ahat7*e7)

cel T7:
=T6+P7*(R8-S6*G7-T6*H7)
dit is Ahat7 + k2*(r[t+1] - Ahat6*e6 - Ahat7*e7)


Als het goed is, is dit dan regel 606 van je tabel:
600 100.29 90.12 0.03194 0 0 -0.4000 0.0000 0.0102 leeg 0.8127 0 0 3.0618 -0.3251 0.0000 1.0920 0.0242 -0.0163 0.0029


Als je nu -a6, a7, -Ahat6 en Ahat7 in 1 grafiek plot, krijg je zoiets:

Afbeelding


In bovenstaande formules heb ik de constanten (lambda, w, etc.) hard gecodeerd = de waarden direct in de formules. Je kan dit zelf aanpassen naar Excel variabelen.

Lukt het je om dit te reproduceren en ermee te varieren?

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 07 sep 2016, 20:12

arie schreef:Gegeven:

Ik vermoed dat je lineaire algebra tamelijk ver is weggezakt.
Dat heb je netjes uitgedrukt :) Ja, mijn lineaire algebra is ver weggezakt. Ik ben daarom erg blij dat je je zoveel moeite geeft het uit te leggen :) Het wordt iig zeer gewaardeerd.

Als het goed is, is dit dan regel 606 van je tabel:
600 100.29 90.12 0.03194 0 0 -0.4000 0.0000 0.0102 leeg 0.8127 0 0 3.0618 -0.3251 0.0000 1.0920 0.0242 -0.0163 0.0029Als je nu -a6, a7, -Ahat6 en Ahat7 in 1 grafiek plot, krijg je zoiets:

Lukt het je om dit te reproduceren en ermee te varieren?
Ik heb alles kunnen reproduceren, maar ik heb als P bij t=600 echter 101,17. Voor de rest heb heb ik alles kunnen reproduceren.

Ik heb echter op dit moment 2 vragen mbt A6/A7:

1. Op dit moment hebben we A6/A7 waardes van 0 t/m 600 aangenomen (uit figure 2). Hoe gaat dit nou in z'n werk als ik gewoon een random aandeel zou nemen?
2. De auteur schrijft bij een van z'n strategieën (follow big buyer) het volgende: "Buy the stock once becomes positive and is negative (which means there are big buyers coming and there are no big sellers); hold the stock as long as is still positive (which means do not sell the stock as long as the big buyers are still buying, no matter what happens to the price or whether there are big sellers; stand firm with your big buyers); sell the stock once becomes negative (quit if your big buyers stop buying); the buy-sell round trip is completed and watch out for the next cycle."

A6 en A7 zijn, zoals het nu in het voorbeeld is, nooit negatief. Als we dan spreken over -A6 en A7, dan zijn ze wel positief/negatief. Vervolgens hebben we ook nog Ahat6 en Ahat7 dat een schatting is van A6 en A7. Klopt het als ik aanneem dat Ahat6 en Ahat7 genomen moeten worden voor de input voor deze strategie?

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Fuzzy systems

Bericht door arie » 08 sep 2016, 11:41

De formule van cel C606 is bij mij:
=EXP(LN(C605)+E605*G605+F605*H605+I605)
Het is overigens wel vreemd dat C606 bij jou afwijkt, terwijl D606 gelijk is aan mijn waarde.
D606 is gebaseerd op C606
=LN(C606/AVERAGE(C602:C606))
Het is wel een groot toeval als de formule in beide gevallen toch gelijke x-waarden geeft.

Hier nog een aantal waarden uit mijn tabel:

t pklein p x
592 88.21 79.27 0.01540
593 90.75 81.55 0.03380
594 88.43 79.47 0.00158
595 91.70 82.41 0.02426
596 95.28 85.62 0.04733
597 96.12 86.38 0.03886
598 96.09 86.35 0.02705
599 97.89 87.96 0.02557
600 100.29 90.12 0.03194

Hoe is dit bij jou?


Dan je 2 vragen:

[1] Als je de prijsontwikkeling p van een random aandeel hebt (= kolom C in onze tabel), over bv afgelopen jaar, met t = 366 (dagen), dan kan je de eerste 5 waarden (bij een window van 5 dagen) nemen om de eerste waarde van x te bepalen, en vanaf dat moment je tabel op te zetten zoals we in ons voorbeeld deden.
Kolom E en kolom F ontbreken, want de echte waarden van a6 en a7 houden de grote investeerders = BB/BS geheim.
Kolom B (Pklein) heb je dan ook niet, maar die is niet relevant.
Als je kolom B, E en F zou wissen, kan je nog steeds alle overige waarden berekenen en de waarden van a6 en a7 schatten.

[2]
a6 en a7 zijn altijd positief.
Kijk naar formule (1) en figuur (1) van het artikel:
Verkoper BS zal niet verkopen als de prijs stijgt, maar wel als de prijs daalt = ed[t] < 0
(bij stijgende prijs kan hij beter even wachten want dan neemt de waarde toe).
De sterkte waarmee BS verkoopt is a6: dit is de waarde van de aandelen of het aantal aandelen dat hij wil afstoten/verkopen.
Als BS verkoopt komen er aandelen vrij en zal de prijs ervan (nog verder) dalen.
Dit zie je terug in formule 1:
a6 * ed6 is negatief => dalende werking op de prijs.
(als a6 en ed6 beide negatief zouden zijn, is het product ervan positief, en dat willen we niet).

Omgekeerd
Koper BB zal niet kopen als de prijs daalt, maar wel als de prijs stijgt = ed[t] > 0.
De sterkte waarmee BB koopt is a7.
Als BB koopt onttrekt hij aandelen aan de markt, en zal de prijs ervan (nog verder) stijgen.
a7 * ed7 is positief => stijgende werking op de prijs volgens formule (1).

In figuur 2 staan a7 en -a6 afgebeeld. -a6 om deze curve niet door a7 te laten lopen, terwijl ze op deze manier toch in 1 grafiek kunnen staan. Bovendien sluit het aan bij de gedachte dat a6 te maken heeft met daling van de prijs en a7 met stijging ervan.

Omdat je a6 en a7 niet kent, gebruik je in je strategieen de schattingen ervan : Ahat6 en Ahat7.



Dan voor de volledigheid nog de afleiding van de formules:

Neem:










Dan is volgens formule (13):









Noem pa- t/m pd- de waarden van P[t-1] = de vorige P (in Excel de P van de regel erboven):



Bereken het matrix product:



Dus



en dit levert in Excel kolom K t/m kolom N.


Dan de noemer van K in formule (12):



Als we nu weer



stellen (= de P van voorgaand tijdstip), dan levert dit:










En hiermee vinden we Kt uit formule (12):









Dit zijn kolom O en kolom P in Excel.


In formule (11) hebben we r[t+1] nodig, die zetten we in kolom R van Excel:



Tenslotte formule (11):











En dit zijn kolom S en kolom T.

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 09 sep 2016, 05:58

arie schreef:De formule van cel C606 is bij mij:
=EXP(LN(C605)+E605*G605+F605*H605+I605)
Het is overigens wel vreemd dat C606 bij jou afwijkt, terwijl D606 gelijk is aan mijn waarde.
D606 is gebaseerd op C606
=LN(C606/AVERAGE(C602:C606))
Het is wel een groot toeval als de formule in beide gevallen toch gelijke x-waarden geeft.

Hier nog een aantal waarden uit mijn tabel:

t pklein p x
592 88.21 79.27 0.01540
593 90.75 81.55 0.03380
594 88.43 79.47 0.00158
595 91.70 82.41 0.02426
596 95.28 85.62 0.04733
597 96.12 86.38 0.03886
598 96.09 86.35 0.02705
599 97.89 87.96 0.02557
600 100.29 90.12 0.03194

Hoe is dit bij jou?
Formule C606: = EXP(LN(C605)+E605*G605+F605*H605+I605)
Formule D606: = =LN(C606/MITTELWERT(C602:C606))

t pklein p x
592 88,21 88,99 0,01540
593 90,75 91,55 0,03380
594 88,43 89,21 0,00158
595 91,70 92,51 0,02426
596 95,28 96,12 0,04733
597 96,12 96,97 0,03886
598 96,09 96,93 0,02705
599 97,89 98,75 0,02557
600 100,29 101,17 0,03194

De formules zijn identisch, behalve dat ik op het moment een Duitse Excel gebruik en jij een Engelse versie. De functie EXP en LN zijn identisch in vergelijking met de Engelse.

Dan je 2 vragen:

[1] Als je de prijsontwikkeling p van een random aandeel hebt (= kolom C in onze tabel), over bv afgelopen jaar, met t = 366 (dagen), dan kan je de eerste 5 waarden (bij een window van 5 dagen) nemen om de eerste waarde van x te bepalen, en vanaf dat moment je tabel op te zetten zoals we in ons voorbeeld deden.
Kolom E en kolom F ontbreken, want de echte waarden van a6 en a7 houden de grote investeerders = BB/BS geheim.
Kolom B (Pklein) heb je dan ook niet, maar die is niet relevant.
Als je kolom B, E en F zou wissen, kan je nog steeds alle overige waarden berekenen en de waarden van a6 en a7 schatten.

[2]
a6 en a7 zijn altijd positief.
Kijk naar formule (1) en figuur (1) van het artikel:
Verkoper BS zal niet verkopen als de prijs stijgt, maar wel als de prijs daalt = ed[t] < 0
(bij stijgende prijs kan hij beter even wachten want dan neemt de waarde toe).
De sterkte waarmee BS verkoopt is a6: dit is de waarde van de aandelen of het aantal aandelen dat hij wil afstoten/verkopen.
Als BS verkoopt komen er aandelen vrij en zal de prijs ervan (nog verder) dalen.
Dit zie je terug in formule 1:
a6 * ed6 is negatief => dalende werking op de prijs.
(als a6 en ed6 beide negatief zouden zijn, is het product ervan positief, en dat willen we niet).

Omgekeerd
Koper BB zal niet kopen als de prijs daalt, maar wel als de prijs stijgt = ed[t] > 0.
De sterkte waarmee BB koopt is a7.
Als BB koopt onttrekt hij aandelen aan de markt, en zal de prijs ervan (nog verder) stijgen.
a7 * ed7 is positief => stijgende werking op de prijs volgens formule (1).

In figuur 2 staan a7 en -a6 afgebeeld. -a6 om deze curve niet door a7 te laten lopen, terwijl ze op deze manier toch in 1 grafiek kunnen staan. Bovendien sluit het aan bij de gedachte dat a6 te maken heeft met daling van de prijs en a7 met stijging ervan.

Omdat je a6 en a7 niet kent, gebruik je in je strategieen de schattingen ervan : Ahat6 en Ahat7.




Dan voor de volledigheid nog de afleiding van de formules:

Neem:










Dan is volgens formule (13):









Noem pa- t/m pd- de waarden van P[t-1] = de vorige P (in Excel de P van de regel erboven):



Bereken het matrix product:



Dus



en dit levert in Excel kolom K t/m kolom N.


Dan de noemer van K in formule (12):



Als we nu weer



stellen (= de P van voorgaand tijdstip), dan levert dit:










En hiermee vinden we Kt uit formule (12):









Dit zijn kolom O en kolom P in Excel.


In formule (11) hebben we r[t+1] nodig, die zetten we in kolom R van Excel:



Tenslotte formule (11):











En dit zijn kolom S en kolom T.
Ik begrijp nog steeds een paar dingen niet, maar ik kann dat pas duidelijker formuleren als ik zelf ermee gewerkt hebt. Ik ga de uitwerking nu programmeren en een backtest draaien met een aantal aandelen in dezelfde Periode als de auteur om te kijken of deze Resultaten ook ongeveer kloppen.

Ik zal de resultaten ook hier laten zien.

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 09 sep 2016, 10:30

Hallo Arie,

Als we dit willen toepassen op een aandeel, dan weten we enkel prijs 0 en hoeveel dagen we nog terug willen gaan. Het doel is om Ahat6 en Ahat7 te bepalen. We gaan niet tot T=600 voorspellen, maar we gaan enkel T=1 voorspellen en dit doen we een tick (minuut, uur, dag, 10 dagen) later weer.
Ik ga er vanuit dat ED6, ED7 en Epsilion (E) al berekend hebben. We moeten dan allereerst P+1 en P+2 berekenen

P1 = exp(ln(p + 0 * ED6 + 0 * ED7 + E))
P2 = exp(Ln(p1 + 0 * ED6 + 0 * ED7 +E))

Dan komen de volgende stappen: formule 11 t/m 13.
Bij formule 13 hebben we Pa, Pb, Pc en Pd. Aangezien we enkel Ahat6 en Ahat7 nodig hebben voor de komende tick (minuut, uur, dag) heb ik de formule van Pa, Pb, Pc en Pd niet nodig. Ik kan dan de waardes nemen uit de formule dus Pa = 10, Pb = 0, Pc = 0 en Pd = 10 en deze veranderen zich dan ook niet meer, omdat ik enkel Ahat6 en Ahat7 voor de volgende tick wil berekenen? Beredeneer ik dat nu correct?

Om Pa, Pb, Pc en Pd te kunnen berekenen, moeten we ook K1 en K2 weten. Om K1 en K2 te kunnen berekenen, moet ik eerst Kn berekenen:

Kn = Pa * ED6^2 + (Pb + Pc)* ED6 * ED7 + Pd * ED7^2 + Lamda
K1 = (Pa * ED6 + Pb * ED7) / Kn
K2 = (Pc * ED6 + Pd * ED7) / Kn

Dan komt de laatste stap en dat is het berekenen van R (hiervoor heb ik dus P+1 en P+2 nodig)

R1 = LN(P1/P)
R2 = LN(P2/P1)

De laatste stap is het berekenen van Ahat6 en Ahat7

Ahat6 = 0 + K1 * (R2 - 0 * ED6 - 0 * ED7)
Ahat7 = 0 + k2 * (R2 - 0 * ED6 - 0 * ED7)

Ik vind het dus vreemd dat ik de prijs +2 ticks “voorspel” en daar komt dus ook de nodige ruis en aan de hand daarvan bereken ik Ahat6 en Ahat7. Bovendien voorspel ik de prijs met A6 en A7 die “0” zijn. Het komt een beetje ongewoon op me over. Ik vroeg me af hoe jij dit ziet
Zoals altijd, bedankt voor de moeite 

Groeten,
Stan

stanexclusive
Nieuw lid
Nieuw lid
Berichten: 18
Lid geworden op: 03 aug 2016, 10:16

Re: Fuzzy systems

Bericht door stanexclusive » 21 sep 2016, 18:52

Hallo Arie en andere,

Ik heb een vraag en misschien weten jullie daar het antwoord erop. Ik heb de afgelopen week de code geschreven en veel getest.
Echter heb ik nog nooit een Ahat6 gekregen die <0 gekregen. Ik heb verschillende aandelen geprobeerd, verschillende timeframes en verschillende Moving Averages.

Beneden is een afbeelding van de uitkomsten van Citrix System Inc van Mei 2014 tot December 2015. Zoals te zien is in de afbeelding beneden wordt de Ahat6 (in de grafiek heet hij de MA3Ahat6) (gemiddelde van 3 Ahat6's, aangezien de auteur ook aangeeft dat m=3 bij Follow BB strategy)

Afbeelding

of klik hier aangezien de afbeelding te breed is: http://fs5.directupload.net/images/160921/nylsfin9.jpg

Een excel-file met alle prijzen per dag (die gebruikt zijn voor de grafiek hierboven) is hier te vinden bij eventuele interesse: https://kitchen.codebuffet.co/index.php ... aCnUMWNl0J

De code geeft 100% dezelfde uitkomsten als ik de 5 getallen van het voorbeeld aangeef (100, 98, 97, 96, 96). Ik zal even uitleggen wat ik precies doe:
De code begint pas met het rekenen als hij 5 prijzen heeft (anders kan 5 dagen moving averages niet worden berekend, dus ook niet x). Als de code dan genoeg informatie heeft, dan worden vervolgens ook nieuwe prijzen berekent zover tot we drie ahat6 en drie ahat7 hebben zodat we daar het gemiddelde van kunnen nemen.

En dag later doen we precies hetzelfde. Dat betekent dus dat ik ieder dag weer opnieuw P1 ga berekenen en ik gebruik dus ook de
parameters die door de auteur zijn aangegeven voor bijvoorbeeld Pa, Pb, Pc, Pd. Ik neem dan dus ook, zoals in het voorbeeld, de Ahat6 en Ahat7 als 0 en daarna ga ik dus weer de nieuwe Ahat6 en Ahat7 berekenen.

Kan het zijn dat mijn gedachtegang niet goed is? Hopelijk heeft hier iemand input voor mij.
Kan het zijn dat ik een enkele keer met de parameters van de auteur ga rekenen en vervolgens reken ik enkel verder met de uitkomsten van de formules?

Plaats reactie