Bitcoin Forum
May 26, 2024, 02:10:41 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 »
1  Local / Anfänger und Hilfe / Re: [Howto] Adressen-Monitoring on: September 22, 2020, 07:07:45 AM
Warnung: Wer Wallet oder Adressen per Electrum überwacht, deanonymisiert sich gegenüber dem Electrum-Server selbst!!!

Zum Nachrecherchieren hat mich folgender Beitrag gebracht:

https://bitcointalk.org/index.php?topic=5276680.msg55217179#msg55217179

Und folgende Aussage darin:


Quote
[...] Dazu sammeln sie  z.B. auch Daten von Electrum-Wallet anfragen für die sie selber jede Menge Server betreiben [...]

D.h., wer sich mit einem Electrum-Server verbindet und nach einer Balance fragt, ob nun mit oder ohne Privatekeys, muss die entsprechenden Adressen an den Server ausliefern.

https://medium.com/shiftcrypto/use-the-bitbox02-with-electrum-wallet-5088219b8497

Der Server weiss dann, dass sich eine bestimmte IP für bestimmte Adressen interessiert. Die IP selbst ist noch nicht mit einem Namen verknüpft, aber die Gegend, aus welcher die Anfrage kommt kann schon auf der Landkarte eingegrenzt werden. Zusätzlich ändern Standardrouter heutzutage nicht mehr regelmäßig die IP, sodass Angreifer möglicherweise versuchen könnten, diese zu hacken. Oder man kommt anderweitig and die Identität hinter der IP.

Also entweder mit TOR oder VPN oder gar nicht.


siehe auch:

https://bitcointalk.org/index.php?topic=5202173.0
2  Local / Trading und Spekulation / Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse on: August 31, 2020, 08:25:15 PM
Highly fortgeschrittene statistics:

3  Local / Trading und Spekulation / Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse on: August 30, 2020, 08:37:33 PM
HMM-Update (siehe unten).

Änderungen:

  • Die Höhe des MA50 und MA200 ist jetzt korrekt(er);
  • Die x-Achsenbeschriftung ist jetzt konstant(er);
  • Die Halvings sind markiert.

Wie führt man den Code aus:

  • python3 starten;
  • Code reinkopieren.

Oder Code in Datei hmm.py abspeichern und dann
Code:
python3 hmm.py
aufrufen.

HMM bis einschliesslich dieser Woche:



Code:
Code:
import os;
import re;
import wget;                # pip3 install wget
import numpy;               # pip3 install numpy
import pandas;              # pip3 install pandas
import matplotlib;          # pip3 install matplotlib
from hmmlearn import hmm;   # pip install --upgrade --user hmmlearn

######################################################################

# weighted mean
def wm(x):
    return (x['VOLUME'] * x['PRICE']).sum()/x['VOLUME'].sum();

# weighted mean for rolling window
def rolling_wm(ser):
    return (subdata['VOLUME'].loc[ser.index] * subdata['PRICE'].loc[ser.index]).sum()/subdata['VOLUME'].loc[ser.index].sum();

# removes incomplete weeks
def rm(df, column, n):
    for i in range(n):
        if df[column].iloc[0] != subdata[column].iloc[i]:
            return df.iloc[i:df.shape[0]];
    return df;

def fill(df, column):
    x = numpy.zeros([df.shape[0]]);
    c = 0; x[0] = c;
    for i in range(df.shape[0]-1):
        if df[column].iloc[i] != df[column].iloc[i+1]:
            c += 1;
        x[i+1] = c;
    return x.astype(int);

######################################################################

# download and/or load bitstamp data
file_name = 'bitstampUSD.csv.gz';
# but make sure, that the file is up to date
# if the file already exists locally, the current one
# is not downloaded, thus, remove the local version
if os.path.exists(file_name) == False:
    file_name = wget.download('https://api.bitcoincharts.com/v1/csv/bitstampUSD.csv.gz');

data = pandas.read_csv(file_name, compression='gzip', header=None);
data.columns = ['EPOCH', 'PRICE', 'VOLUME'];
data = data.sort_values(by='EPOCH');
data['DATE'] = pandas.to_datetime(data['EPOCH'],unit='s').dt.tz_localize('utc').dt.tz_convert('Europe/Berlin');
data['DAY'] = [str(x) for x in pandas.Series(data['DATE']).dt.date];

# firstly group by day for faster processing
subdata = data.groupby('DAY').first();
subdata['OPEN'] = data.groupby('DAY').first()['PRICE'];
subdata['CLOSE'] = data.groupby('DAY').last()['PRICE'];
subdata['MAX'] = data.groupby('DAY').max()['PRICE'];
subdata['MIN'] = data.groupby('DAY').min()['PRICE'];
subdata['VOLUME'] = data.groupby('DAY').sum()['VOLUME'];
subdata['PRICE'] = data.groupby(['DAY']).apply(wm);

# weighted moving average, not sure whether this makes a difference
rol = subdata['PRICE'].rolling(50); subdata['MA50'] = rol.apply(rolling_wm, raw=False);
rol = subdata['PRICE'].rolling(200); subdata['MA200'] = rol.apply(rolling_wm, raw=False);
#subdata['MA50'] = subdata["PRICE"].rolling(50).mean();
#subdata['MA200'] = subdata["PRICE"].rolling(200).mean();
subdata['RETURN'] = (subdata['CLOSE'] - subdata['OPEN'])/subdata['OPEN'];

subdata['WEEK'] = [str(pandas.Timestamp(x).week) for x in subdata['DATE']];

######################################################################
# not very elegant way to get unique week annotation

# remove first incomplete WEEK
subdata = rm(subdata, 'WEEK', 7);

# remove last incomplete WEEK
subdata = subdata.sort_values(by='EPOCH', ascending=False);
subdata = rm(subdata, 'WEEK', 7);
subdata = subdata.sort_values(by='EPOCH');

subdata['WEEK'] = fill(subdata,'WEEK');

######################################################################

# secondly group by week
subsubdata = subdata.groupby('WEEK').first();
subsubdata['DAY'] = [str(x) for x in pandas.Series(subsubdata['DATE']).dt.date];
subsubdata['OPEN'] = subdata.groupby('WEEK').first()['OPEN'];
subsubdata['CLOSE'] = subdata.groupby('WEEK').last()['CLOSE'];
subsubdata['MAX'] = subdata.groupby('WEEK').max()['MAX'];
subsubdata['MIN'] = subdata.groupby('WEEK').min()['MIN'];
subsubdata['VOLUME'] = subdata.groupby('WEEK').sum()['VOLUME'];
subsubdata['PRICE'] = subdata.groupby(['WEEK']).apply(wm);
subsubdata['LOG10_PRICE'] = numpy.log10(subsubdata['PRICE']);
max_log10_price = numpy.amax(subsubdata['LOG10_PRICE']);
subsubdata['LOG10_PRICE'] = subsubdata['LOG10_PRICE']/max_log10_price;
subsubdata['LOG10_MA50'] = numpy.log10(subsubdata['MA50']);
subsubdata['LOG10_MA50'] = subsubdata['LOG10_MA50']/max_log10_price; # it's all relative to the price
subsubdata['LOG10_MA200'] = numpy.log10(subsubdata['MA200']);
subsubdata['LOG10_MA200'] = subsubdata['LOG10_MA200']/max_log10_price; # it's all relative to the price
subsubdata['RETURN'] = (subsubdata['CLOSE'] - subsubdata['OPEN'])/subsubdata['OPEN'];

# at least not wrong ...
subsubdata = subsubdata.sort_values(by='EPOCH');

# create a model and fit it to data
model = hmm.GaussianHMM(4, "diag", n_iter=1000);

X = numpy.asarray(subsubdata['RETURN']).reshape(-1,1);
fit = model.fit(X);

hidden_states = model.predict(X);
hidden_probs = model.predict_proba(X);
df = pandas.DataFrame(hidden_probs);
df.columns = ['0', '1', '2', '3'];

# my sentiment definition
bubble_state = hidden_states[numpy.where(subsubdata['DATE']=='2011-09-19 15:47:03+0200')[0][0]];
sideways_state = hidden_states[numpy.where(subsubdata['DATE']=='2016-10-03 00:00:18+0200')[0][0]];
bullish_state = hidden_states[numpy.where(subsubdata['DATE']=='2013-02-11 00:57:24+0100')[0][0]];
bearish_state = list(set([0,1,2,3]).difference([bubble_state, sideways_state, bullish_state]))[0];

state_index = {'violet':str(bubble_state), 'green':str(bullish_state), 'black':str(sideways_state), 'red':str(bearish_state)};
state_index_= {str(bubble_state):'violet', str(bullish_state):'green', str(sideways_state):'black', str(bearish_state):'red'};

# plot the result
import matplotlib.pyplot as plt;

fig, ax = plt.subplots(figsize=(2.24,2.24));
df[state_index['violet']].plot(ax=ax, color='violet', linewidth=0.6, label='bubble');
df[state_index['green']].plot(ax=ax, color='green', linewidth=0.6, label='bullish');
df[state_index['black']].plot(ax=ax, color='black', linewidth=0.6, label='sideways');
df[state_index['red']].plot(ax=ax, color='red', linewidth=0.6, label='bearish');
subsubdata['LOG10_PRICE'].plot(ax=ax, color='blue', linewidth=0.6, label='log10(price)');
subsubdata['LOG10_MA50'].plot(ax=ax, color='cyan', linewidth=0.6, label='log10(MA50)');
subsubdata['LOG10_MA200'].plot(ax=ax, color='orange', linewidth=0.6, label='log10(MA200)');

for i in range(len(hidden_states)):
    rect = matplotlib.patches.Rectangle((i-0.5,0),1,-0.1,linewidth=1,edgecolor='none',facecolor=state_index_[str(hidden_states[i])]);
    ax.add_patch(rect);

blubb = [str(x) for x in subsubdata["DATE"]];
blubb = [re.match('^[0-9]{4}', x).group() for x in blubb];
indices = [];
for i in range(len(blubb)-1):
   if blubb[i] != blubb[i+1]:
      indices.append(i+1);

quarts = [0, 26];
ticks = [];
for index in indices:
   for quart in quarts:
      if index + quart > len(blubb):
         break;
      ticks.append(index + quart);

ticks = numpy.asarray(ticks);
ax.legend();
plt.xticks(ticks=ticks, labels=subsubdata['DAY'].iloc[ticks], rotation='horizontal');
for tick in ax.xaxis.get_major_ticks():
   tick.label.set_fontsize(7);

plt.title('Four states HMM (last week starting at ' + subsubdata['DAY'].iloc[subsubdata.shape[0]-1] + ')');

# first halving  ~ 1354060800 (2012-11-28)
i = numpy.amax(numpy.where(subsubdata["EPOCH"] < 1354060800));
plt.axvline(i, linewidth=0.6);
# second halving ~ 1468022400 (2016-07-09)
i = numpy.amax(numpy.where(subsubdata["EPOCH"] < 1468022400));
plt.axvline(i, linewidth=0.6);
# third halving  ~ 1589155200 (2020-05-11)
i = numpy.amax(numpy.where(subsubdata["EPOCH"] < 1589155200));
plt.axvline(i, linewidth=0.6);

plt.show();
4  Local / Deutsch (German) / Re: PoW vs. PoS – was verhindert Akkumulation vieler Coins bei reichen Besitzern? on: June 20, 2020, 09:45:59 AM
Eine Erkenntnis meinerseits, die vielleicht anderen schon lange klar ist:

Ob PoW oder PoS, die Besitzverteilung bleibt im Idealfall immer gleich! Da nehmen sich die Systeme nichts (quick and dirty und langsam in R):

Code:
x_ <- c(); # Endverteilung von Partei X
y_ <- c(); # Endverteilung von Partei Y
# simuliere 100x
for (j in 1:100){
   x = 9.9*10^3; # Anzahl des Assets von X
   y = 0.1*10^3; # Anzahl des Assets von Y
   # 144 Blöcke am Tag ein Jahr lang:
   for (i in 1:365*144){
      # abhängig vom Gewinner geht der Reward an X oder Y
      if (runif(1) <= x/(x+y)){
         x <- x + 50;
      } else {
         y <- y + 50;
      }
   }
   # speichere Assetverteilung am Ende
   x_ <- c(x_, x);
   y_ <- c(y_, y);
}

# berechne Prozentsatz
p <- c();
for (i in 1:length(x_)){
   p <- c(p, x_[i]/(x_[i]+y_[i]));
}

# hat sich was getan?
median(p);

Was eigentlich auch logisch ist, denn wenn jemand 99% Gewinnwahrscheinlichkeit hat und alle anderen 1% und diese sich nicht verändert, dann bekommt Ersterer 99% und der Rest 1% des Rewards. Die Verteilung ändert sich dadurch im Mittel nicht.

Der Unterschied zwischen PoS und PoW reduziert sich also auf das allgemein bekannte Nothing-At-Stake-Problem in neuem erweiterten Gewand.

Während der PoW-Miner seine Coins veräussern muss, damit er weiter erfolgreich minen kann (hat 1miau ja schon erwähnt), macht es sich der PoS-Minter gemütlich und muss nur ab und zu seine Stakes updaten. Der PoS-Minter hat aber praktisch keine Risiken (nothing at stake) und kann alle Gewinne in die eigene Tasche stecken, der PoW-Miner kann hingegen schnell mal pleite gehen.

In ersterem Fall (PoW) wird Umsatz generiert, in Zweiterem (PoS) gar nichts. In ersterem Fall kann nur auf einer Chain wirtschaftlich gemint werden (eine physikalische notwendige Bedingung), in Zweiterem auf praktisch beliebig Vielen, alles leistungslos und ohne Risiko, wenn man nur früh genug eingestiegen ist.

Alle zusätzlichen Gimmicks, welche an PoS drangeklatsch werden, damit es sicherer und/oder fairer aussieht, sind imho Augenwischerei um eben von jenem oben genannten einfachen Punkt abzulenken.
5  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: June 19, 2020, 08:36:46 PM
Die Langeweile vor dem Sturm:

Es kann aufwärts gehen, oder auch abwärts ...  Shocked
6  Local / Altcoins (Deutsch) / Re: Was haltet Ihr von ADA Cardano ?! Potential oder Shitcoin ?! on: June 17, 2020, 06:54:16 AM
Dass man bei Cardano jetzt angeblich das Rich-Get-Richer-Problem gelöst haben will bezweifel ich doch stark. Aber natürlich ist es wunderbare Clickbait-Werbung. Hat bei mir ja auch funktioniert.
Das behauptet weder 1miau, noch ich, noch der von mir verlinkte Artikel. "Gelöst" kann das "Problem" auch nicht werden, es können nur Maßnahmen dagegen ergriffen werden um den Effekt abzudämpfen.
Wie du schon richtig festgestellt hast greifen diese nur bis zu einem gewissen Punkt und können mit mehr oder weniger Aufwand umgangen und/oder ausgehebelt werden. Ist wie bei der Sicherheit von Softwaresystemen: Du kannst nur Maßnahmen gegen bspw. Hacks ergreifen, 100% schützen wirst du dich nicht können.

Das ist aber imho Augenwischerei bzw. schlicht Marketing bzw. Schlangenöl (https://de.wikipedia.org/wiki/Schlangen%C3%B6l). Für Leute mit Ahnung ist sowas nämlich kein Hindernis und wird in Nullkommanix ausgenutzt. Ob sich die Omma oder der Oppa nun durch die vorgeschlagene Lösung sicherer fühlen bzw. das System für fairer halten ist denen herzlich egal.

Vielleicht wäre es eine weitere Idee, dass die Stakes regelmäßig bewegt werden müssen, für Superreiche wäre das viel Arbeit, wenn die ihre ganzen geteilten Stakes laufend verschieben müssten.

Also eine Blockchain der Blockchain willen. Da wäre man ja fast schon wieder bei PoW bzw. PoC: Eine Blockchain, welche durch Stakingtransaktionen anschwillt und durch mehr und mehr Speicherhardware aufrechterhalten wird. Hat nur den Nachteil, dass jeder Node dazu gezwungen wäre, die Hardware auszubauen um mithalten zu können, ohne dass dabei eine Mehrwert abfällt.
7  Local / Altcoins (Deutsch) / Re: Was haltet Ihr von ADA Cardano ?! Potential oder Shitcoin ?! on: June 16, 2020, 05:22:51 AM
Es gibt immer ein Hintertürchen wenn ein Projekt mit Anonymität wirbt. Dabei reicht es schon aus, wenn es sich nur um Pseudoanonymität handelt.

Dass man bei Cardano jetzt angeblich das Rich-Get-Richer-Problem gelöst haben will bezweifel ich doch stark. Aber natürlich ist es wunderbare Clickbait-Werbung. Hat bei mir ja auch funktioniert.

Zum ersten kann man den Stake entsprechend stückeln, dann muss erstmal einer nachweisen, dass der Reward nicht zu unterschiedlichen Parteien geht. Das sagst Du ja selbst:

Quote
Der maximale Blockreward ist limitiert. Dieser so genannte "Dimishing return" Mechanismus führt also dann quasi dazu, dass die Größen von Stakepools automatisch limitiert sind. Das führt uns dann zu Problem Nummer 2, man könnte ja ganz einfach mehrere kleine Stakepools betreiben.

Deinen zweiten Punkt verstehe ich nicht, da er überhaupt nichts auf/nach/beweist. Ein Cardano Dagobert Duck geht einfach zum ersten Punkt zurück. Muss ja nicht gleich ein Exchange sein. Und selbst denen wird was einfallen. Z.B. ein ähnliches System wie bei Banken heute: man arbeitet im Exchange nur mit einem kleinen Anteil der Einlagen, der grosse Rest wird zum (geschickt verschleiertem) Staken genutzt.

Quote
Um Problem Nummer 2 entgegen zu wirken erhöht Cardano den Block Reward eines Stake Pools, wenn der Owner des Pools selbst einen (anteilsmäßig großen) Teil seiner ADA staked. Die Idee dahinter ist, dass Stake Pools mit höheren Rewards auch mehr Delegater mit wenigen ADAs (so wie der Großteil von uns vmtl.) anziehen, dadurch also diese Pools gestärkt werden.

Ein anderes Beispiel aus der Bitcoinminingwelt: https://bitcoinblog.de/2020/06/15/interner-krieg-bei-bitmain-behindert-auslieferung-neuer-asic-miner/

Auch Dein letzter Punkt wird durch den Ersten augehebelt:

Quote
Conclusio: "Economies of scale" (also, dass Reiche reicher werden) gibt es bei PoS nicht (wirklich), da Reiche keinen Vorteil besitzen und anteilsmäßig genauso viel vom Reward-Kuchen abbekommen. Lässt natürlich außer Acht, dass es so trotzdem über längere Zeit hinweg zu einer Vermögenszentralisierung kommt.

Warum werden die Reichen nicht reicher wo doch Dein erster Punkt genau das Gegenteil zeigt? Und warum kommt es plötzlich doch zu einer Vermögenszentralisierung? Weil die Ehrlichen auf einmal die Gewinner sind?

Cardano geht den gleichen Weg wie Ethereum, wobei Ethereum immer noch nicht (vollständig) auf PoS umgestiegen ist: Immer mehr Regel im System, noch komplexer, dass es selbst die (vermeintlichen) Experten nicht mehr verstehen aber immer leichter auszuhebeln. Und das soll die Omma nutzen?

PoS wäre gerne und gibt sich wie etwas, dass es nicht ist. Und viele fallen darauf rein. Klimawandel und so ... man könnte fast ein Geschäft draus machen ...
8  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: June 09, 2020, 05:28:21 PM
Was war denn überhaupt das Off-Topic? Bin gerade überfragt, wer überhaupt gemeint ist.

Das Trezor-Thema?

Finde ich gar nicht Off-Topic, wenn Leute so ein Ding beim Handeln nutzen (wollen) ... und das dann nicht geht, wenn der Kurs mal so reagiert, wie man hofft.
9  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: June 08, 2020, 06:35:29 AM
https://decrypt.co/31463/bitcoin-segwit-bug-fix-could-lock-wallet-users-out-funds

Quote
A Bitcoin user running Segwit downloads a specific malware from an attacker. The victim then begins a transaction with two “inputs” (i.e., parts): one input is for 10 BTC and another is for 5.0001 BTC, so the transaction total is 15 BTC for a 0.0001 fee. Upon confirming the transaction, the user is met with an error message asking them to sign again. The attacker then switches the transaction inputs, so that one input is for 15 BTC and the other is for 0.0001.

With this switch, now the 15 BTC is the transaction fee and the 0.0001 BTC is the transaction. But, for this to pay off, the attacker has to be a miner who also happens to be mining the block that the transaction is included in. The victim must also be spending a transaction with more than one input and download the miner’s malware. In other words, a whole lot needs to go right for this to work.

D.h., dass der Angreifer erstmal den Rechner des Opfer mit Malware infiziert haben muss sodass er das Signieren der Transaktion manipulieren kann. Und dann muss der Angreifer derjenige sein, der auch den Block findet in welchem die manipulierte Transaktion landet um den Blockreward abzugreifen.

Viel ärgerlicher finde ich Folgendes:

https://blog.trezor.io/latest-firmware-updates-correct-possible-segwit-transaction-vulnerability-266df0d2860

Quote
Unfortunately, some third-party tools like Electrum or PSBT-based tools like BTCPay Server and Wasabi Wallet do not allow Trezor to obtain the previous transaction in case of Segwit inputs, which is why Trezor will not be able to sign transactions using these tools until they are updated to work correctly. We are cooperating with these parties to fix the problem as we speak.

D.h. für mein Verständnis, dass alle Funds, welche einen Segwit-Input haben, für Electrum, BTCPay und Wasabi eingefroren sind, weil diese Tools die zu signierende Transaktion nicht verarbeiten können.
10  Local / Trading und Spekulation / Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse on: June 08, 2020, 06:17:26 AM
Habe den HMM auf python3 umgestellt, da
  • die HMM-Funktion in R nicht mehr konvergiert bzw. eine Fehlermeldung zurückgibt (warum auch immer),
  • die Datenprozessierung schneller ist,
  • es weniger Speicher braucht.

Code:
import os;
import wget;                # pip3 install wget
import numpy;               # pip3 install numpy
import pandas;              # pip3 install pandas
import matplotlib;          # pip3 install matplotlib
from hmmlearn import hmm;   # pip install --upgrade --user hmmlearn

######################################################################

# weighted mean
def wm(x):
    return (x['VOLUME'] * x['PRICE']).sum()/x['VOLUME'].sum();

# removes incomplete weeks
def rm(df, column, n):
    for i in range(n):
        if df[column].iloc[0] != subdata[column].iloc[i]:
            return df.iloc[i:df.shape[0]];
    return df;

def fill(df, column):
    x = numpy.zeros([df.shape[0]]);
    c = 0; x[0] = c;
    for i in range(df.shape[0]-1):
        if df[column].iloc[i] != df[column].iloc[i+1]:
            c += 1;
        x[i+1] = c;
    return x.astype(int);

######################################################################

# download and/or load bitstamp data
file_name = 'bitstampUSD.csv.gz';
# but make sure, that the file is up to date
if os.path.exists(file_name) == False:
    file_name = wget.download('https://api.bitcoincharts.com/v1/csv/bitstampUSD.csv.gz');

data = pandas.read_csv(file_name, compression='gzip', header=None);
data.columns = ['EPOCH', 'PRICE', 'VOLUME'];
data = data.sort_values(by='EPOCH');
data['DATE'] = pandas.to_datetime(data['EPOCH'],unit='s').dt.tz_localize('utc').dt.tz_convert('Europe/Berlin');
data['DAY'] = [str(x) for x in pandas.Series(data['DATE']).dt.date];

# firstly group by day for faster processing
subdata = data.groupby('DAY').first();
subdata['OPEN'] = data.groupby('DAY').first()['PRICE'];
subdata['CLOSE'] = data.groupby('DAY').last()['PRICE'];
subdata['MAX'] = data.groupby('DAY').max()['PRICE'];
subdata['MIN'] = data.groupby('DAY').min()['PRICE'];
subdata['VOLUME'] = data.groupby('DAY').sum()['VOLUME'];

subdata['PRICE'] = data.groupby(['DAY']).apply(wm);
subdata['MA50'] = subdata["MAX"].rolling(50).mean();
subdata['MA200'] = subdata["MAX"].rolling(200).mean();
subdata['RETURN'] = (subdata['CLOSE'] - subdata['OPEN'])/subdata['OPEN'];

subdata['WEEK'] = [str(pandas.Timestamp(x).week) for x in subdata['DATE']];

######################################################################
# not very elegant way to get unique week annotation

# remove first incomplete WEEK
subdata = rm(subdata, 'WEEK', 7);

# remove last incomplete WEEK
subdata = subdata.sort_values(by='EPOCH', ascending=False);
subdata = rm(subdata, 'WEEK', 7);
subdata = subdata.sort_values(by='EPOCH');

subdata['WEEK'] = fill(subdata,'WEEK');

######################################################################

# secondly group by week
subsubdata = subdata.groupby('WEEK').first();
subsubdata['DAY'] = [str(x) for x in pandas.Series(subsubdata['DATE']).dt.date];
subsubdata['OPEN'] = subdata.groupby('WEEK').first()['OPEN'];
subsubdata['CLOSE'] = subdata.groupby('WEEK').last()['CLOSE'];
subsubdata['MAX'] = subdata.groupby('WEEK').max()['MAX'];
subsubdata['MIN'] = subdata.groupby('WEEK').min()['MIN'];
subsubdata['VOLUME'] = subdata.groupby('WEEK').sum()['VOLUME'];
subsubdata['PRICE'] = subdata.groupby(['WEEK']).apply(wm);
subsubdata['LOG10_PRICE'] = numpy.log10(subsubdata['PRICE']);
subsubdata['LOG10_PRICE'] = subsubdata['LOG10_PRICE']/numpy.amax(subsubdata['LOG10_PRICE']);
subsubdata['LOG10_MA50'] = numpy.log10(subsubdata['MA50']);
subsubdata['LOG10_MA50'] = subsubdata['LOG10_MA50']/numpy.amax(subsubdata['LOG10_MA50']);
subsubdata['LOG10_MA200'] = numpy.log10(subsubdata['MA200']);
subsubdata['LOG10_MA200'] = subsubdata['LOG10_MA200']/numpy.amax(subsubdata['LOG10_MA200']);
subsubdata['RETURN'] = (subsubdata['CLOSE'] - subsubdata['OPEN'])/subsubdata['OPEN'];

# at least not wrong ...
subsubdata = subsubdata.sort_values(by='EPOCH');

# create a model and fit it to data
model = hmm.GaussianHMM(4, "diag", n_iter=1000);

X = numpy.asarray(subsubdata['RETURN']).reshape(-1,1);
fit = model.fit(X);

hidden_states = model.predict(X);
hidden_probs = model.predict_proba(X);
df = pandas.DataFrame(hidden_probs);
df.columns = ['0', '1', '2', '3'];

# my sentiment definition
bubble_state = hidden_states[numpy.where(subsubdata['DATE']=='2011-09-19 15:47:03+0200')[0][0]];
sideways_state = hidden_states[numpy.where(subsubdata['DATE']=='2016-10-03 00:00:18+0200')[0][0]];
bullish_state = hidden_states[numpy.where(subsubdata['DATE']=='2013-02-11 00:57:24+0100')[0][0]];
bearish_state = list(set([0,1,2,3]).difference([bubble_state, sideways_state, bullish_state]))[0];

state_index = {'violet':str(bubble_state), 'green':str(bullish_state), 'black':str(sideways_state), 'red':str(bearish_state)};
state_index_= {str(bubble_state):'violet', str(bullish_state):'green', str(sideways_state):'black', str(bearish_state):'red'};

# plot the result
import matplotlib.pyplot as plt;

fig, ax = plt.subplots(figsize=(2.24,2.24));
df[state_index['violet']].plot(ax=ax, color='violet', linewidth=0.6, label='bubble');
df[state_index['green']].plot(ax=ax, color='green', linewidth=0.6, label='bullish');
df[state_index['black']].plot(ax=ax, color='black', linewidth=0.6, label='sideways');
df[state_index['red']].plot(ax=ax, color='red', linewidth=0.6, label='bearish');
subsubdata['LOG10_PRICE'].plot(ax=ax, color='blue', linewidth=0.6, label='log10(price)');
subsubdata['LOG10_MA50'].plot(ax=ax, color='orange', linewidth=0.6, linestyle='dashed', label='log10(MA50)');
subsubdata['LOG10_MA200'].plot(ax=ax, color='orange', linewidth=0.6, label='log10(MA200)');

for i in range(len(hidden_states)):
    rect = matplotlib.patches.Rectangle((i-0.5,0),1,-0.1,linewidth=1,edgecolor='none',facecolor=state_index_[str(hidden_states[i])]);
    ax.add_patch(rect);

ax.legend();
ticks = numpy.asarray(list(range(subsubdata.shape[0])));
ticks = ticks[ticks%52==0];
plt.xticks(ticks=ticks, labels=subsubdata['DAY'].iloc[ticks], rotation='horizontal');
plt.title('Four states HMM (last week starting at ' + subsubdata['DAY'].iloc[subsubdata.shape[0]-1] + ')');
plt.show();

Plot:
11  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 25, 2020, 04:50:30 PM
Ich sehe, dass die Meisten keine Geduld haben.

Was habt ihr denn erwartet? Dass der Kurs nach dem Halving gleich bei 100k steht?

Wie war das doch gleich 2016? Das selbe (!) Gefasel gab es damals nämlich auch: "Alles schon eingepreist", "Miner verkaufen, da nicht mehr rentabel", etc. pp.. Anfang 2017 gab es sogar nochmal nen ordentlichen Rücksetzer. Klug von denen, welche trotzdem regelmäßig gekauft haben. Und dann, 8-10 Monate später ...

Also nutzt die Zeit zum Hamstern. Hin und her macht nur Taschen leer.
12  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 17, 2020, 12:49:31 PM
Golden cross:

13  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 11, 2020, 08:08:25 PM
Kommt heute noch ein Block?

Edit:  Cheesy

Bestimmt  Tongue

Auch von mir:

Happy Halving! Auf die nächsten -Vier-

Gerade gefunden:

https://www.blockchain.com/btc/block/00000000000000000004e772f5a00a5bb86cb74f3b35407e9256fdb0fb38a904
14  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 11, 2020, 07:40:07 PM
000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d

Der Hash ist wirklich passend bead = Perle / Tropfen ... . ich stoße jetzt an!

Prost!
15  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 11, 2020, 07:31:09 PM
000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d



https://en.wikipedia.org/wiki/Bead (*duck und weg*)

Quote
Beads are thought to be one of the earliest forms of trade between members of the human race. It is thought that bead trading was one of the reasons why humans developed language.[7] Beads are said to have been used and traded for most of our history. The oldest beads found to date were at Blombos Cave, about 72,000 years old, and at Ksar Akil[8] in Lebanon, about 40,000 years old.

Zum Wohl:



Nachtrag vom 13.05.2020 21:56: Blockchain entspricht einer Perlenkette aus beads und 24(h) beads entspricht 24h/d globalem freien Handel. Wermutstropfen: mit Glasperlen können "Wilde" vom "Zivilisierten" betrogen werden. Nichtsdestotrotz, das Positive überwiegt. "Ein Zeichen, ein Zeichen ..."  Wink Cheesy Grin
16  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 11, 2020, 04:20:04 PM
Lauter:

Heute ist es soweit  Shocked

 Wink

Habe glücklicherweise auch nochmal nachgeguckt:

https://www.bitcoinblockhalf.com/

Aktueller Block: #629981

https://www.blockchain.com/explorer
17  Local / Trading und Spekulation / Re: Der Aktuelle Kursverlauf on: May 07, 2020, 07:33:55 PM
Sieht gut aus.

  • Ein Goldencross gibt es dann wohl in ca. 2 Wochen, spätestens in 3 Wochen (1-Wochenchart). (Schon das zweite in diesem Jahr!)
  • Einwochenchart: einschliesslich dieser Woche acht grüne Kerzen. Die Achte muss natürlich noch am Sonntag bestätigt werden.
  • I smell FOMO: https://boerse.ard.de/anlageformen/kryptowaehrungen/neue-bitcoin-rally-voraus100.html
  • Der RSI ist auch schon in verschiedensten Zeitskalen über 70.
  • Die 10k sind in greifbare Nähe gerückt.
  • Das Halving steht vor der Tür!!!!11elf

Disclaimer: Mein letztes solches Posting vom Februar diesen Jahres wurde nicht mit einer Rallye belohnt (Meine Ausrede: Covid19). Macht euch also noch eure eigenen Gedanken dazu.

(Eigentlich wollt ich ins Bett, jetzt wart ich noch auf die 10k Cheesy ... Edit: argh ich muss ins Bett, der Schlaf fehlt mir und so Satoshi will ...)
18  Local / Off-Topic (Deutsch) / Re: Corona-Umfrage: Wie hat Deutschland auf Corona reagiert? on: May 06, 2020, 05:33:25 PM
mir persönlich fehlt bei der Abstimmung noch der Punkt "Weiß ich nicht, kann ich nicht beurteilen".
Denn so geht es mir.

Erweitert.
19  Local / Off-Topic (Deutsch) / Corona-Umfrage: Wie hat Deutschland auf Corona reagiert? on: May 05, 2020, 08:07:56 PM
Bin gespannt ...
20  Local / Trading und Spekulation / Re: Bitcoin vs. Alts on: May 04, 2020, 06:24:44 PM
Named mich verrückt:



The most undervalued coin ever.

(selbst wenn ich nicht mehr mitmachen darf ...)
Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!