Wertpapieranzeige: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Der [[{{PAGENAME}}|Artikel "Wertpapieranzeige"]] beschreibt das Vorgehen zur Erzeugung einer komfortablen Anzeige verschiedener Wertpapier in einer Liste auf B…“) |
|||
Zeile 1: | Zeile 1: | ||
Der [[{{PAGENAME}}|Artikel "Wertpapieranzeige"]] beschreibt das Vorgehen zur Erzeugung einer komfortablen Anzeige verschiedener Wertpapier in einer Liste auf Basis des Modules 98_STOCKQUOTES.pm | Der [[{{PAGENAME}}|Artikel "Wertpapieranzeige"]] beschreibt das Vorgehen zur Erzeugung einer komfortablen Anzeige verschiedener Wertpapier in einer Liste auf Basis des Modules 98_STOCKQUOTES.pm | ||
== | == Voraussetzungen == | ||
Die Einrichtung eines Depots mit dem Modul 98 STOCKQUOTES wird ('''Wo?''') beschrieben. | Die Einrichtung eines Depots mit dem Modul 98 STOCKQUOTES wird ('''Wo?''') beschrieben. | ||
attr | Für das folgende nehmen wir an, dass in dem Depot verschiedene Teildepots mit unterschiedlichen Währungen vorhanden sind, z.B. ''Depot2_EUR'' für Euro, ''Depot2_GBP'' für britische Pfund. | ||
attr | Für jede Fremdwährung (z.B. GBP) muss ferner irgendein Device existieren (z.B. als Dummy), in welchem der Umrechnungskurs steht und per Perl-Funktion | ||
{if($READING =~ /.*name/){$VALUE=~/.*\((.*)\).*/;;$VALUE=$1} | Value("EUR_GBP") | ||
elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE eq " | (bzw. entsprechend für andere Währungen) abgefragt werden kann | ||
elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE | == readingsGroup == | ||
Zunächst wird die readingsGroup definiert, dabei gibt es zwei(!) Zeilen für jedes Teildepot in einer anderen Währung: | |||
define Depot2_Detail readingsgroup < >,<Symbol>,<Stock>,<Value>,<Change_Rel>,<Change_Abs>,<Trend>,<Rate>,<Count>,<Cur> | |||
Depot2_EUR:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t | |||
Depot2_EUR:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount | |||
Depot2_USD:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t | |||
Depot2_USD:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency | |||
Depot2_SEK:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t | |||
Depot2_SEK:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency | |||
Depot2_GBP:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t | |||
Depot2_GBP:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency | |||
Die Kopfzeilen werden mit breiteren Tabellenspalten versehen: | |||
attr Depot2_Detail valueColumns { 'depot_cur_value_total' => 'colspan="2"','depot_buy_value_total' => 'colspan="4"'} | |||
Als Nächstes werden die Einzelwerte formatiert und bei Fremdwährungen umgerechnet. Dabei kann man auf spezielle Eigenschaften der Teildepots eingehen - beispielsweise wird im Nachfolgenden der ''_close''-Wert durch den Kursprovider nicht für eine Aktie, sondern für 100 Aktien angegeben und muss entsprechend herunterskaliert werden. | |||
attr Depot2_Detail valueFormat | |||
{if($READING =~ /.*name/){$VALUE=~/.*\((.*)\).*/;;$VALUE=$1} | |||
elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE eq "Depot2_EUR"){$VALUE.="€"} | |||
elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE =~ /Depot2_(.*)/ ){$VALUE=(int($VALUE/Value("EUR_".$1)*100)/100)."€"} | |||
elsif($READING =~ /.*p_change_total/){$VALUE=(int($VALUE*10)/10)."%"} | elsif($READING =~ /.*p_change_total/){$VALUE=(int($VALUE*10)/10)."%"} | ||
elsif($READING =~ /(.*)_close/ && $DEVICE eq " | elsif($READING =~ /(.*)_close/ && $DEVICE eq "Depot2_GBP"){my $tr=(100*ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);(int(1000*$tr)/10)."%% ".(($tr>0.01)?"🢁":(($tr>0.001)?"🢅":(($tr>-0.001)?"🢂":(($tr>-0.01)?"🢆":"🢃")))) } | ||
elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);(int(1000*$tr)/10)."%% ".(($tr>0.01)?"🢁":(($tr>0.001)?"🢅":(($tr>-0.001)?"🢂":(($tr>-0.01)?"🢆":"🢃")))) }} | elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);(int(1000*$tr)/10)."%% ".(($tr>0.01)?"🢁":(($tr>0.001)?"🢅":(($tr>-0.001)?"🢂":(($tr>-0.01)?"🢆":"🢃")))) }} | ||
Im letzten Schritt werden jetzt noch Farben hinzugegeben | |||
attr Depot_Detail valueStyle | |||
attr Depot_Detail valueStyle {if($READING =~ /depot.*/ ){'style="background-color:#aaaaff;font-weight:bold;text-align:right"'} | {if($READING =~ /depot.*/ ){'style="background-color:#aaaaff;font-weight:bold;text-align:right"'} | ||
elsif($READING =~ /.*cur_value_total/){'style="text-align:right"'} | elsif($READING =~ /.*cur_value_total/){'style="text-align:right"'} | ||
elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE<0){'style="color:red;text-align:right"'} | elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE<0){'style="color:red;text-align:right"'} | ||
elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE>0){'style="color:green;text-align:right"'} | elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE>0){'style="color:green;text-align:right"'} | ||
elsif($READING =~ /(.*)_close/ && $DEVICE eq " | elsif($READING =~ /(.*)_close/ && $DEVICE eq "Depot2_GBP"){my $tr=(100*ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);'style="text-align:right;color:'. (($tr>0.01)?'green"':(($tr>0.001)?'#aaff44"':(($tr>-0.001)?'black"':(($tr>-0.01)?'#ffdd88"':'red"')))) } | ||
elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);'style="text-align:right;color:'.(($tr>0.01)?'green"':(($tr>0.001)?'#aaff44"':(($tr>-0.001)?'black"':(($tr>-0.01)?'#ffdd88"':'red"')))) }} | elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);'style="text-align:right;color:'.(($tr>0.01)?'green"':(($tr>0.001)?'#aaff44"':(($tr>-0.001)?'black"':(($tr>-0.01)?'#ffdd88"':'red"')))) }} | ||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Version vom 9. Januar 2021, 05:50 Uhr
Der Artikel "Wertpapieranzeige" beschreibt das Vorgehen zur Erzeugung einer komfortablen Anzeige verschiedener Wertpapier in einer Liste auf Basis des Modules 98_STOCKQUOTES.pm
Voraussetzungen
Die Einrichtung eines Depots mit dem Modul 98 STOCKQUOTES wird (Wo?) beschrieben.
Für das folgende nehmen wir an, dass in dem Depot verschiedene Teildepots mit unterschiedlichen Währungen vorhanden sind, z.B. Depot2_EUR für Euro, Depot2_GBP für britische Pfund.
Für jede Fremdwährung (z.B. GBP) muss ferner irgendein Device existieren (z.B. als Dummy), in welchem der Umrechnungskurs steht und per Perl-Funktion
Value("EUR_GBP")
(bzw. entsprechend für andere Währungen) abgefragt werden kann
readingsGroup
Zunächst wird die readingsGroup definiert, dabei gibt es zwei(!) Zeilen für jedes Teildepot in einer anderen Währung:
define Depot2_Detail readingsgroup < >,<Symbol>,<Stock>,<Value>,<Change_Rel>,<Change_Abs>,<Trend>,<Rate>,<Count>,<Cur> Depot2_EUR:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t Depot2_EUR:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount Depot2_USD:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t Depot2_USD:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency Depot2_SEK:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t Depot2_SEK:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency Depot2_GBP:depot_cur_value_total,depot_p_change_total,depot_value_diff_total,depot_buy_value_total:t Depot2_GBP:@2,<#1>,(.*)_name,#1_d_cur_value_total,#1_d_p_change_total,#1_d_value_diff_total,#1_close,#1_last,#1_d_stockcount,#1_currency
Die Kopfzeilen werden mit breiteren Tabellenspalten versehen:
attr Depot2_Detail valueColumns { 'depot_cur_value_total' => 'colspan="2"','depot_buy_value_total' => 'colspan="4"'}
Als Nächstes werden die Einzelwerte formatiert und bei Fremdwährungen umgerechnet. Dabei kann man auf spezielle Eigenschaften der Teildepots eingehen - beispielsweise wird im Nachfolgenden der _close-Wert durch den Kursprovider nicht für eine Aktie, sondern für 100 Aktien angegeben und muss entsprechend herunterskaliert werden.
attr Depot2_Detail valueFormat {if($READING =~ /.*name/){$VALUE=~/.*\((.*)\).*/;;$VALUE=$1} elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE eq "Depot2_EUR"){$VALUE.="€"} elsif($READING =~ /.*((cur_value_total)|(value_diff_total))/ && $DEVICE =~ /Depot2_(.*)/ ){$VALUE=(int($VALUE/Value("EUR_".$1)*100)/100)."€"} elsif($READING =~ /.*p_change_total/){$VALUE=(int($VALUE*10)/10)."%"} elsif($READING =~ /(.*)_close/ && $DEVICE eq "Depot2_GBP"){my $tr=(100*ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);(int(1000*$tr)/10)."%% ".(($tr>0.01)?"🢁":(($tr>0.001)?"🢅":(($tr>-0.001)?"🢂":(($tr>-0.01)?"🢆":"🢃")))) } elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);(int(1000*$tr)/10)."%% ".(($tr>0.01)?"🢁":(($tr>0.001)?"🢅":(($tr>-0.001)?"🢂":(($tr>-0.01)?"🢆":"🢃")))) }}
Im letzten Schritt werden jetzt noch Farben hinzugegeben attr Depot_Detail valueStyle
{if($READING =~ /depot.*/ ){'style="background-color:#aaaaff;font-weight:bold;text-align:right"'} elsif($READING =~ /.*cur_value_total/){'style="text-align:right"'} elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE<0){'style="color:red;text-align:right"'} elsif($READING =~ /.*((p_change_total)|(d_value_diff_total))/ && $VALUE>0){'style="color:green;text-align:right"'} elsif($READING =~ /(.*)_close/ && $DEVICE eq "Depot2_GBP"){my $tr=(100*ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);'style="text-align:right;color:'. (($tr>0.01)?'green"':(($tr>0.001)?'#aaff44"':(($tr>-0.001)?'black"':(($tr>-0.01)?'#ffdd88"':'red"')))) } elsif($READING =~ /(.*)_close/){my $tr=(ReadingsVal("$DEVICE",$1."_last",1)/ReadingsVal("$DEVICE",$1."_close",1)-1);'style="text-align:right;color:'.(($tr>0.01)?'green"':(($tr>0.001)?'#aaff44"':(($tr>-0.001)?'black"':(($tr>-0.01)?'#ffdd88"':'red"')))) }}