Skip to content

Instantly share code, notes, and snippets.

@nurettin
Last active November 15, 2023 18:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nurettin/e8c77336b91f2c00e302 to your computer and use it in GitHub Desktop.
Save nurettin/e8c77336b91f2c00e302 to your computer and use it in GitHub Desktop.
metatrader 4 hst reader
class Hst
attr_reader :version
attr_reader :copyright
attr_reader :symbol
attr_reader :period
attr_reader :digits
attr_reader :timesign
attr_reader :lastsync
def initialize(file)
open(file)
end
def open(file)
@f = File.open(file)
e = @f.read(96).unpack('IC64C12I4')
raise "File size too small (must be >= 96 bytes)" if e[-1].nil?
@version = e[0]
@packet_size, @packet_unpack =
case @version
when 400 then [44, 'ID5']
when 401 then [60, 'QD4QIQ']
else raise "Unsupported version #{@version}. [400, 401] required."
end
@copyright = e[1..64].pack('C64').strip
@symbol = e[65..76].pack('C12').strip
@period = e[77]
@digits = e[78]
@timesign = Time.at(e[79])
@lastsync = e[80]
@f.read(52)
end
def read
while not @f.eof do
t, o, h, l, c, v, s, rv = @f.read(@packet_size).unpack(@packet_unpack)
yield Time.at(t), o, h, l, c, v, s, rv
end
@f.close
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment