Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function choose(file_list_names::String, is_n::Int, oos1_n::Int, n_reps::Int)
- # Initialize arrays with an estimated initial size
- initial_size = 1000 # Adjust based on your initial estimate
- initial_files = 10 # Initial estimate of the number of files
- market_dates = Array{Int,2}(undef, initial_files, initial_size)
- market_data = Array{Float64,2}(undef, initial_files, initial_size) # Assuming 4 data columns per row
- current_sizes::Array{Int,1} = fill(1, initial_files)
- current_files::Int = 0
- n_markets::Int = 0
- open("report.log", "w") do fpReport
- println(fpReport, "CHOOSER log with IS_n=$(is_n) OOS1_n=$(oos1_n) Reps=$(n_reps)")
- open(file_list_names, "r") do file
- for file_path in eachline(file)
- current_files += 1
- if current_files > size(market_dates, 1)
- market_dates, market_data, current_sizes = resize_for_new_file(market_dates, market_data, current_sizes, current_files)
- end
- prior_date = 0
- for (line_number, row) in enumerate(CSV.Rows(file_path, header=false))
- data_size = current_sizes[current_files]
- if data_size > size(market_dates, 2)
- market_dates, market_data = resize_for_new_line(market_dates, market_data, data_size * 2) # Double the size
- end
- full_date = itemp = parse(Int, row[1])
- year = itemp ÷ 10000
- itemp -= year * 10000
- month = itemp ÷ 100
- itemp -= month * 100
- day = itemp
- if month < 1 || month > 12 || day < 1 || day > 31 || year < 1800 || year > 2030
- println("\nERROR... Invalid date $full_date in market file $file_path line $(line_number)")
- return
- end
- if full_date <= prior_date
- println("\nERROR... Date failed to increase in market file $file_path line $(line_number)")
- return
- end
- open = parse(Float64, row[2])
- high = parse(Float64, row[3])
- low = parse(Float64, row[4])
- close = parse(Float64, row[5])
- if high < open || high < close || low > open || low > close
- println("\nERROR... Open or close outside high/low bounds in market file $file_path line $(line_number)")
- return
- end
- prior_date = full_date
- current_sizes[current_files] += 1
- market_dates[current_files, line_number] = full_date
- market_data[current_files, line_number] = close
- end
- println(fpReport, "\nMarket file $file_path had $(current_sizes[current_files]) records from date $(market_date[current_files][1]) to $(market_date[current_files][end])")
- n_markets += 1
- end
- end
- end
- end
- function resize_for_new_file(market_dates::Array{Int,2}, market_data::Array{Float64,2}, current_sizes::Array{Int,1}, new_size::Int)
- # Resizing the arrays for additional files
- new_market_dates = Array{Int,2}(undef, new_size, size(market_dates, 2))
- new_market_data = Array{Float64,2}(undef, new_size, size(market_data, 2))
- # Copy existing data
- new_market_dates[1:size(market_dates, 1), :] .= market_dates
- new_market_data[1:size(market_data, 1), :] .= market_data
- return new_market_dates, new_market_data, vcat(current_sizes, zeros(Int, new_size - length(current_sizes)))
- end
- function resize_for_new_line(market_dates::Array{Int,2}, market_data::Array{Float64,2}, new_size::Int)
- # Resize the arrays only if the new size is greater than the current size
- if new_size > size(market_dates, 2)
- # Create new arrays with the increased size
- new_market_dates = Array{Int}(undef, size(market_dates, 1), new_size)
- new_market_data = Array{Float64}(undef, size(market_data, 1), new_size)
- # Copy the existing data into the new arrays
- new_market_dates[:, 1:size(market_dates, 2)] .= market_dates
- new_market_data[:, 1:size(market_data, 2)] .= market_data
- # Update the original arrays to point to the new larger arrays
- market_dates = new_market_dates
- market_data = new_market_data
- end
- return market_dates, market_data
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement