Search content
Sort by

Showing 20 of 809 results by trantute2
Post
Topic
Board Anfänger und Hilfe
Merits 1 from 1 user
Re: [Howto] Adressen-Monitoring
by
trantute2
on 22/09/2020, 07:07:45 UTC
⭐ Merited by -doubleU- (1)
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
Post
Topic
Board Trading und Spekulation
Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse
by
trantute2
on 31/08/2020, 20:25:15 UTC
Highly sophisticated statistics:

Post
Topic
Board Trading und Spekulation
Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse
by
trantute2
on 30/08/2020, 20:37:33 UTC
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 für Montag 24.08.2020:



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();
Post
Topic
Board Deutsch (German)
Re: PoW vs. PoS – was verhindert Akkumulation vieler Coins bei reichen Besitzern?
by
trantute2
on 20/06/2020, 10:25:34 UTC
Etwas OT aber wie wäre es damit (btw, ich denke PoS ist keine Alternative, da es an genannten Punkten krankt und die sind systeminhärent):

Eine PoB-Blockchain als Bitcoin-Secondlayer. Dabei steht B für Bandwidth. (Gibt es das schon?)

Bitcoins werden auf die PoB-Chain ausgelagert, sind dann auf der Hauptchain eingefroren, können aber beliebig auf der PoB-Chain verschoben werden. Die PoB-Chain basiert einzig auf den Netzwerkknoten. Blöcke können im Netzwerk beliebig schnell gefunden werden, d.h. hat ein PoB-Knoten einen Block angefügt, wird praktisch sofort der nächste Netzwerkknoten rein zufällig gewürfelt. Ausgezahlt werden nur Transaktionsgebühren.

D.h., wenn nichts auf der Chain los ist, dann lohnt es sich auch nicht viel Bandbreite dieser Chain zur Verfügung zu stellen. Geht es aber auf der Chain rund, fahren alle ihre PoB-Knoten hoch, weil z.B. jeder seinen Kaffee über das System bezahlen möchte und die Netzwerkknoten die Gebühren abfischen wollen.

Ein Netzwerkknoten wird durch dessen verfügbare Bandbreite begrenzt. Es macht also keinen Sinn viele virtuelle Knoten aufzusetzen, weil diese entweder die gleiche Bandbreite oder sogar weniger hätten, wie ein Einziger. Im worst-case ist PoB natürlich mit PoW äquivalent, aber da es keine Rewardausschüttung gibt, lohnt es sich nicht die Bandbreite dauerhaft extrem auszubauen. Ausser eben, die Nutzung nimmt auch extrem zu.
Post
Topic
Board Deutsch (German)
Merits 3 from 2 users
Re: PoW vs. PoS – was verhindert Akkumulation vieler Coins bei reichen Besitzern?
by
trantute2
on 20/06/2020, 09:45:59 UTC
⭐ Merited by 1miau (2) ,d5000 (1)
Eine Erkenntnis meinerseits, die vielleicht anderen schon lange klar ist:

Ob PoW oder PoS, die Besitztverteilung bleibt im Idealfall immer gleich! Da nehmen sich die Systeme nichts (quick and dirty 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%, dann bekommt Ersterer 99% und der Rest 1% des Rewards. Die Verteilung ändert sich 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), der PoW-Miner kann hingegen schnell mal pleite gehen.

In ersterem Fall wird Umsatz generiert, in Zweiterem gar nichts. In ersterem Fall kann nur auf einer Chain wirtschaftlich gemint werden, in Zweiterem auf praktisch beliebig vielen, leistungslos und ohne Risiko, man muss nur früh genug eingestiegen sein.
Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 19/06/2020, 20:36:46 UTC
Die Langeweile vor dem Sturm:

Es kann aufwärts gehen, oder auch abwärts ...  Shocked
Post
Topic
Board Altcoins (Deutsch)
Re: Was haltet Ihr von ADA Cardano ?! Potential oder Shitcoin ?!
by
trantute2
on 17/06/2020, 06:54:16 UTC
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 kein Hindernis und wird in Nullkommanix ausgenutzt. Ob sich die Omma oder der Oppa nun durch die vorgeschlagene Lösung sicherer fühlen 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.
Post
Topic
Board Altcoins (Deutsch)
Merits 4 from 1 user
Re: Was haltet Ihr von ADA Cardano ?! Potential oder Shitcoin ?!
by
trantute2
on 16/06/2020, 05:22:51 UTC
⭐ Merited by 1miau (4)
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) Stacken 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.
Post
Topic
Board Trading und Spekulation
Merits 1 from 1 user
Re: Der Aktuelle Kursverlauf
by
trantute2
on 09/06/2020, 17:28:21 UTC
⭐ Merited by bitcoincidence (1)
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.
Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 08/06/2020, 06:35:29 UTC
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.
Post
Topic
Board Trading und Spekulation
Re: Methoden und Algorithmen zur fortgeschrittenen Kursanalyse
by
trantute2
on 08/06/2020, 06:17:26 UTC
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:
Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 02/06/2020, 14:59:31 UTC
Hmm ... das war jetzt aber kein Long-Vergnügen ...  Cry
Post
Topic
Board Trading und Spekulation
Merits 2 from 2 users
Re: Der Aktuelle Kursverlauf
by
trantute2
on 25/05/2020, 16:50:30 UTC
⭐ Merited by thandie (1) ,d5000 (1)
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.
Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 17/05/2020, 12:49:31 UTC
Golden cross:

Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 11/05/2020, 20:08:25 UTC
Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 11/05/2020, 19:40:07 UTC
000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d

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

Prost!
Post
Topic
Board Trading und Spekulation
Merits 4 from 2 users
Re: Der Aktuelle Kursverlauf
by
trantute2
on 11/05/2020, 19:31:09 UTC
⭐ Merited by BitCharlie (3) ,600watt (1)
000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d

Post
Topic
Board Trading und Spekulation
Re: Der Aktuelle Kursverlauf
by
trantute2
on 11/05/2020, 16:20:04 UTC
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
Post
Topic
Board Trading und Spekulation
Merits 2 from 2 users
Re: Der Aktuelle Kursverlauf
by
trantute2
on 07/05/2020, 19:33:55 UTC
⭐ Merited by 1miau (1) ,qwk (1)
Sieht gut aus.

  • Der Einwochenchart sieht nett aus: einschliesslich dieser Woche acht grüne Kerzen. Die achte muss natürlich noch am Sonntag bestätigt werden.
  • Der RSI ist auch schon in verschiedensten Zeitskalen über 70.
  • Ein Goldencross gibt es dann wohl in ca. 2 Wochen, spätestens in 3 Wochen (1-Wochenchart). (Schon das zweite in diesem Jahr!)
  • 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.
Post
Topic
Board Off-Topic (Deutsch)
Re: Corona-Umfrage: Wie hat Deutschland auf Corona reagiert?
by
trantute2
on 06/05/2020, 17:33:25 UTC
mir persönlich fehlt bei der Abstimmung noch der Punkt "Weiß ich nicht, kann ich nicht beurteilen".
Denn so geht es mir.

Erweitert.