#! /usr/bin/gawk -f # Last edited on 2015-02-23 18:59:41 by stolfilocal BEGIN { # Reads a series file from {stdin}, just to get dates and times. # Writes a file with the same dates and times, # with an exponentially growing price, random BTC volumes, # and matching currency volume. The file will have gaps abort = -1; printf "# Created by {make_test_series_file.gawk}\n"; printf "\n"; n = 0; nmax = 1201; # How many lines to write pmin = 0.12; # Starting price. pmax = 1200.0; # Final price. q = (log(pmax) - log(pmin))/(nmax - 1); # Increase ratio. kgap = 100; # Index of next gap. wgap = 1; # Gap width. igap = 0; # Index of gap. } (abort >= 0) { exit(abort); } # Delete comments: // { gsub(/[ ]*[\#].*$/, "", $0); } # Ignore blank lines: /^[ ]*$/ { next; } # Ignore header lines: /[!].*[!]/ { next; } # Process data line: /^ *20[01][0-9]-/ { # printf "-" > "/dev/stderr"; date = $1; time = $2; printf "%s %s ", date, time; pav = pmin*exp(q*n); vbt = 1000.0 + 900.0*cos(pi*n/24); if ((n >= kgap) && (n < kgap+wgap)) { if (n == kgap) { printf "(" > "/dev/stderr"; } printf "." > "/dev/stderr"; if ((igap % 2) == 0) { write_data(0,0); } else { mul = ((igap % 4) >= 2 ? 1.5 : 1/1.5); write_data(vbt,mul*pav); } } else { write_data(vbt,pav); } if (n == kgap+wgap) { printf ")\n" > "/dev/stderr"; kgap = kgap+2*wgap + 30; wgap = int(1.3*wgap) + 1; igap++; } n++; if (n >= nmax) { fflush("/dev/stdout"); exit 0; } next; } // { data_error("invalid format"); } END { if (abort >= 0) { exit(abort); } printf ")\n" > "/dev/stderr"; fflush("/dev/stdout"); } function write_data(vbt,pav, vcr,pop,phi,plo,pcl) { vcr = vbt*pav; pop = 0.95*pav; phi = 1.1*pav; plo = 0.9*pav; pcl = 1.05*pav; printf "| %10.5f | %10.5f | %10.5f | %10.5f ", pop, phi, plo, pcl; printf "| %10.4f | %10.4f ", vbt, vcr; printf "| %10.5f\n", pav; } function data_error(msg) { printf "%s:%s: ** %s\n", FILENAME, FNR, msg > "/dev/stderr"; printf " «%s»\n", $0 > "/dev/stderr"; abort = 1; exit(abort); }