軟體:Gnucash
Package:strawberry-perl-5.22.1.1-32bit.msi
功能:線上更新 股價&匯率
安裝後,請至 開始 -> 所有程式 -> Gnucash -> 安裝網路報價截取功能,如下圖所示
之後更新方法:
股價更新
因匯率鋃行不同,故需更正程式碼
程式語言:Perl
https://github.com/z-Wind/gnuCash_Quote
Package:strawberry-perl-5.22.1.1-32bit.msi
功能:線上更新 股價&匯率
安裝後,請至 開始 -> 所有程式 -> Gnucash -> 安裝網路報價截取功能,如下圖所示
之後更新方法:
- 開啟命令提示字元
- 輸入 cpan install Finance::Quote
股價更新
- 請到證券編輯器
- 按下加入
- 假設要更新的為 台灣50
全名:任意值
標記:0050.TW (上市公司皆是以 .TW 結尾,上櫃公司皆是以 .TWO 結尾)
類型:TSEC
最小單位:1/1000 (因台灣以 1000 股為單位)
單一來源:選擇 Yahoo USA - 選擇價格編輯器
- 按下取得報價
- 得到股價結果
因匯率鋃行不同,故需更正程式碼
程式語言:Perl
https://github.com/z-Wind/gnuCash_Quote
- 找到此檔案 C:\Perl\site\lib\Finance\Quote.pm
- 內容中有此 function
sub currency { my $this = shift if (ref($_[0])); $this ||= _dummy(); my ($from, $to) = @_; return undef unless ($from and $to); $from =~ s/^\s*(\d*\.?\d*)\s*//; my $amount = $1 || 1; # Don't know if these have to be in upper case, but it's # better to be safe than sorry. $to = uc($to); $from = uc($from); return $amount if ($from eq $to); # Trivial case.
# insert by z-Wind
# begin ////////////////////
sub third_url {
#use LWP::Simple;
my $ua = $this->user_agent;
$ua->timeout(2);
#依需求更正網址與正規表達式
my $content = $ua->request(GET 'https://www.cathaybk.com.tw/cathaybk/personal_info07.asp')->content;
#my $content = get 'https://www.cathaybk.com.tw/cathaybk/personal_info07.asp';
return undef unless defined $content;
return undef unless $content =~ /(\d+.\d+)<\/td>/;;
my $quotes_rate = $1 + 0.03;
return $quotes_rate;
}
if($from =~ /USD/ && $to =~ /TWD/)
{
return third_url();
}
# end ////////////////////
my $ua = $this->user_agent; # The response should be a single value (the exchange rate) my $data = $ua->request(GET "${YAHOO_CURRENCY_URL}${from}${to}=X")->content; my $exchange_rate = $data; $exchange_rate =~ s/,// ; # solve a bug when conversion rate # involves thousands. yahoo inserts # a comma when thousands occur { local $^W = 0; # Avoid undef warnings. # We force this to a number to avoid situations where # we may have extra cruft, or no amount. return undef unless ($exchange_rate+0); } if ( $exchange_rate < 0.001 ) { # exchange_rate is too little. we'll get more accuracy by using # the inverse rate and inverse it my $inverse_rate = $this->currency( $to, $from ); { local $^W = 0; return undef unless ( $exchange_rate + 0 ); } $exchange_rate = int( 100000000 / $inverse_rate + .5 ) / 100000000; } return ($exchange_rate * $amount); }
留言
張貼留言