Vinnaren i pepparkakshustävlingen!
  • 4
  • 5
2020-05-02, 14:16
  #49
Medlem
Citat:
Ursprungligen postat av god.child
Finns det någon möjlighet att ladda upp dessa filer igen vore jag väldigt tacksam. Provade att skapa filer själv enligt guiden här, fungerade fint men jag är lat och varför uppfinna hjulet igen?

Citerar ovanstående, vore oerhört tacksam om någon hade kunnat ladda upp filerna igen
Citera
2020-07-11, 14:31
  #50
Medlem
Har precis börjat simulera lite i PV, blev fort less på Google Kalkylark så jag portade Sinewaves kod till PHP. Scriptet tar en lista "fondlista.txt" med de fonder du vill ha ut PV filerna för. Sen importerar du dem i PV och simulerar.

För att köra och generera filerna behöver man installera php-cli och php-curl. Scriptet är testat på Ubuntu 18.04 server.

Scriptet är helt färskt (<1d gammalt) så det kan finnas buggar, jag tar inte heller ansvar för om koden är ful och inte upp till Flashback standard

Ex fondlista.txt
Kod:
#################
#TICKER AVANZAID#
#MAX 9 TECKEN   #
#################
AMFLANG 2111
AMFSMABO 2801
DNBFINANS 321692
SBRMEDICA 453
HBRAVARUFO 907817
HBREALRANT 255288
HBHALSOVAR 464
LFFASTIGHE 350
LFUSAINDE 181108
LFSMABO 2011
OHMOBLIGA 2106
SBRACCMIX 206
SBRASIEN 596635
SBRFASTIG 347
SBRRYSSLA 1717
SBRTEKNIK 1933
SBRREALRA 2123
SBRTECH 363
SEBINDXSE 150048
SEBKORTUS 1380
SPPOBLIGA 2128
NORSMANOR 1680
PACPREC 666676
SPIHOGR 471796
SPIRANT 94867

gen_csvs.php
Kod:
#!/usr/bin/php
<?PHP
$fund_list = file("fondlista.txt");
foreach ($fund_list as $line) {
        if(!empty($line) AND !stristr($line,"#")) {
                $tempArray = preg_split("/[ ;,:]+/", $line);
                $ticker = trim($tempArray[0]);
                $ticker_filename = "$ticker.csv";
                $avanza_fondid = intval(trim($tempArray[1]));
                file_put_contents($ticker_filename,""); #reset file
                azPV($avanza_fondid,$ticker_filename);
                sleep(1);
        }
}

function azPV($id,$ticker_filename) {
        $url = "https://www.avanza.se/ab/component/highstockchart/getchart/orderbook";
        $today = date ("Y-m-d");
        $maxDate = '1985-01-01'; // max to start with
        $chartResolution = 'MONTH';
        $json = "{\"orderbookId\":$id,\"chartType\":\"AREA\",\"widthOfPlotContainer\":558,\"chartResolution\":\"$chartResolution\",\"navigator\":false,\"percentage\":false,\"volume\":false,\"owners\":false,\"start\":\"$maxDate\",\"end\":\"$today\",\"ta\":[]}";
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        $result = curl_exec($ch);
        if(!empty($result)) {
                $json_array = json_decode($result,true);
                curl_close($ch);
                $percent = $nav = $date = $prev_nav = $prev_nr = 0;
                foreach ($json_array['dataPoints'] as $nr => $dataPointsArray) {
                        $date = trim($dataPointsArray[0]);
                        $nav = trim($dataPointsArray[1]);
                        if(empty($date))
                                $date = 0;
                        else {
                                $date = date("Y-m", $date / 1000);
                                $date = date('Y-m', strtotime("+1 months", strtotime($date)));
                        }
                        if(empty($nav))
                                $nav = 0;
                        if($nr > 0) {
                                $prev_nr = $nr - 1;
                                $prev_nav = trim($json_array['dataPoints'][$prev_nr][1]);
                        }
                        if(empty($prev_nav)) {
                                $prev_nav = 0;
                                $percent = "0%";
                        }
                        else {
                                $nav_calc = ($nav / $prev_nav) - 1;
                                $percent = "".toPercent($nav_calc)."%";
                        }
                        if(!empty($nav))
                                file_put_contents($ticker_filename,"$date,$percent\n",FILE_APPEND);
                }
        }
}
function toPercent($val){
          return round($val*10000)/100;
}
?>

För att köra koden och mappstruktur:
Kod:
root@odroid-xu4:/# ls -l /opt/genPVcsv/
total 8
-rw-r--r-- 1 root root  448 Jul 10 21:21 fondlista.txt
-rwxr-xr-x 1 root root 2062 Jul 10 21:46 gen_csvs.php
cd /opt/genPVcsv
./gen_csvs.php

Kan tyvärr inte heller se att man kan ladda upp flera såna här tickers samtidigt så man får tratta på med en och en. https://i.imgur.com/fCLi115.png

Swedbank Robur Access Mix verkar också ha något datafel så man får ta bort allt före 1999.
Citera
2022-07-02, 07:01
  #51
Medlem
Någon som har koll på hur formeln skiljer sig åt för att beräkna "Weight Performance" och "Weight Rank Orders" alternativen som finns under "Timing Model - Relative Strength" ?
Alternativet "Weight performance" har även något som kallas för "Normalize returns", hur skiljer sig formeln åt där när man väljer "yes" respektive "no".
Skulle vilja göra detta manuellt, men osäker på hur PV gör dessa beräkningar.
Citera
  • 4
  • 5

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback