class Qc::QuantConnectProxy

Constants

BASE_URL

Attributes

credentials[RW]

Public Class Methods

new(credentials) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 10
def initialize(credentials)
  @credentials = credentials
end

Public Instance Methods

create_backtest(project_id, compile_id, backtest_name) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 68
def create_backtest(project_id, compile_id, backtest_name)
  response = perform_request :post, '/backtests/create', payload: {projectId: project_id, compileId: compile_id, backtestName: backtest_name}
  validate_response! response
  create_backtest_from_json_response(response)
end
create_compile(project_id) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 56
def create_compile(project_id)
  response = perform_request :post, '/compile/create', payload: {projectId: project_id}
  validate_response! response
  create_compile_from_json_response(response)
end
create_project(project_name, language: 'C click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 33
def create_project(project_name, language: 'C#')
  response = perform_request :post, '/projects/create', payload: {name: project_name, language: language}
  validate_response! response
  project = response.projects[0]
  Qc::Project.new(project['project_id'], project['name'])
end
delete_project(project_id) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 27
def delete_project(project_id)
  response = perform_request :post, '/projects/delete', payload: {projectId: project_id}
  validate_response! response
  project_id
end
list_projects() click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 19
def list_projects
  response = perform_request :get, '/projects/read'
  validate_response! response
  response.projects.collect do |project_json|
    Qc::Project.new(project_json['projectId'], project_json['name'])
  end
end
put_file(project_id, file_name, file_content) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 40
def put_file(project_id, file_name, file_content)
  payload = {projectId: project_id, name: file_name, content: file_content}
  response = perform_request :post, '/files/update', payload: payload
  if missing_file_error?(response)
    response = perform_request :post, '/files/create', payload: payload
  end
  validate_response! response
  create_file_from_json_response(response.files[0])
end
read_backtest(project_id, backtest_id) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 74
def read_backtest(project_id, backtest_id)
  response = perform_request :get, '/backtests/read', params: {projectId: project_id, backtestId: backtest_id}
  validate_response! response
  create_backtest_from_json_response(response)
end
read_compile(project_id, compile_id) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 62
def read_compile(project_id, compile_id)
  response = perform_request :get, '/compile/read', params: {projectId: project_id, compileId: compile_id}
  validate_response! response
  create_compile_from_json_response(response)
end
read_file(project_id, file_name) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 50
def read_file(project_id, file_name)
  response = perform_request :post, '/files/read', payload: {projectId: project_id, name: file_name}
  validate_response! response
  create_file_from_json_response(response.files[0])
end
valid_login?() click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 14
def valid_login?
  response = perform_request :get, '/authenticate'
  response.success
end

Private Instance Methods

create_backtest_from_json_response(response) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 82
def create_backtest_from_json_response(response)
  Qc::Backtest.new(response.backtestId, response.name, response.completed, response.progress.to_f, response.result, response.success)
end
create_compile_from_json_response(response) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 86
def create_compile_from_json_response(response)
  Qc::Compile.new(response.compileId, response.state)
end
create_file_from_json_response(file_json) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 94
def create_file_from_json_response(file_json)
  Qc::File.new(file_json['name'], file_json['content'])
end
missing_file_error?(response) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 90
def missing_file_error?(response)
  !response.success && (response.errors.join("\n") =~ /file not found/i)
end
perform_request(method, path, payload: {}, params: {}) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 98
def perform_request(method, path, payload: {}, params: {})
  timestamp = Time.now.utc.to_time.to_i
  password_hash = Digest::SHA256.hexdigest "#{credentials.access_token}:#{timestamp}"
  headers = {Timestamp: timestamp}.merge(params: params)
  response = RestClient::Request.execute method: method,
                                         url: "#{BASE_URL}#{path}",
                                         headers: headers,
                                         user: credentials.user_id,
                                         content_type: :json,
                                         accept: :json,
                                         password: password_hash,
                                         payload: payload
  body = response.body.empty? ? '{"success": false}' : response.body
  OpenStruct.new JSON.parse(body)
end
validate_response!(response) click to toggle source
# File lib/qc/quant_connect_proxy.rb, line 114
def validate_response!(response)
  unless response.success
    raise RequestError, response.inspect
  end
end