hydrogen-proton-api 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +7 -0
  3. data/README.md +82 -0
  4. data/Rakefile +8 -0
  5. data/git_push.sh +55 -0
  6. data/lib/proton_api.rb +141 -0
  7. data/lib/proton_api/api/annuities_api.rb +347 -0
  8. data/lib/proton_api/api/business_financial_management_api.rb +293 -0
  9. data/lib/proton_api/api/cards_api.rb +185 -0
  10. data/lib/proton_api/api/financial_health_api.rb +239 -0
  11. data/lib/proton_api/api/financial_planning_api.rb +671 -0
  12. data/lib/proton_api/api/goals_api.rb +347 -0
  13. data/lib/proton_api/api/life_insurance_api.rb +77 -0
  14. data/lib/proton_api/api/personal_financial_management_api.rb +347 -0
  15. data/lib/proton_api/api/portfolio_construction_api.rb +77 -0
  16. data/lib/proton_api/api/portfolio_management_api.rb +77 -0
  17. data/lib/proton_api/api/risk_scoring_api.rb +185 -0
  18. data/lib/proton_api/api/simulations_api.rb +401 -0
  19. data/lib/proton_api/api/util_api.rb +185 -0
  20. data/lib/proton_api/api_client.rb +391 -0
  21. data/lib/proton_api/api_error.rb +38 -0
  22. data/lib/proton_api/auth_configuration.rb +181 -0
  23. data/lib/proton_api/configuration.rb +209 -0
  24. data/lib/proton_api/environment.rb +36 -0
  25. data/lib/proton_api/models/accumulation_goal_deposit_config.rb +338 -0
  26. data/lib/proton_api/models/annuity_calculator_accumulation_horizon_request.rb +459 -0
  27. data/lib/proton_api/models/annuity_calculator_annuity_amount_request.rb +461 -0
  28. data/lib/proton_api/models/annuity_calculator_decumulation_horizon_request.rb +459 -0
  29. data/lib/proton_api/models/annuity_calculator_deposit_amount_request.rb +468 -0
  30. data/lib/proton_api/models/annuity_calculator_initial_balance_request.rb +468 -0
  31. data/lib/proton_api/models/annuity_deposit_schedule.rb +254 -0
  32. data/lib/proton_api/models/answer.rb +186 -0
  33. data/lib/proton_api/models/backtest_request.rb +295 -0
  34. data/lib/proton_api/models/beneficiary_bequest_config.rb +257 -0
  35. data/lib/proton_api/models/budget_aggregation_account.rb +186 -0
  36. data/lib/proton_api/models/budget_calculator_request.rb +334 -0
  37. data/lib/proton_api/models/budget_component.rb +228 -0
  38. data/lib/proton_api/models/budget_details.rb +337 -0
  39. data/lib/proton_api/models/business_financial_health_check_request.rb +484 -0
  40. data/lib/proton_api/models/business_invoice_analysis_request.rb +361 -0
  41. data/lib/proton_api/models/calculator_deposit_schedule.rb +228 -0
  42. data/lib/proton_api/models/calculator_deposit_schedule1.rb +254 -0
  43. data/lib/proton_api/models/card_analysis_request.rb +372 -0
  44. data/lib/proton_api/models/card_limit_check_request.rb +231 -0
  45. data/lib/proton_api/models/card_transaction_authorization_request.rb +422 -0
  46. data/lib/proton_api/models/cash_analysis_request.rb +340 -0
  47. data/lib/proton_api/models/cash_flow_analysis_request.rb +366 -0
  48. data/lib/proton_api/models/children_education_config.rb +221 -0
  49. data/lib/proton_api/models/customer_analysis_request.rb +292 -0
  50. data/lib/proton_api/models/decision_tree_result_request.rb +236 -0
  51. data/lib/proton_api/models/decumulation_goal_deposit_config.rb +335 -0
  52. data/lib/proton_api/models/dimensional_risk_score_request.rb +282 -0
  53. data/lib/proton_api/models/diversification_score_request.rb +324 -0
  54. data/lib/proton_api/models/education_calculator_annual_cost_request.rb +450 -0
  55. data/lib/proton_api/models/education_calculator_deposit_amount_request.rb +483 -0
  56. data/lib/proton_api/models/education_calculator_percent_covered_request.rb +448 -0
  57. data/lib/proton_api/models/education_config.rb +271 -0
  58. data/lib/proton_api/models/emergency_fund_calculator_request.rb +561 -0
  59. data/lib/proton_api/models/event_study_request.rb +317 -0
  60. data/lib/proton_api/models/fee_analysis_request.rb +239 -0
  61. data/lib/proton_api/models/financial_health_check_request.rb +384 -0
  62. data/lib/proton_api/models/financial_picture_request.rb +270 -0
  63. data/lib/proton_api/models/financial_statement_analysis_request.rb +461 -0
  64. data/lib/proton_api/models/goal_accumulation_allocation_request.rb +729 -0
  65. data/lib/proton_api/models/goal_accumulation_recommendation_request.rb +622 -0
  66. data/lib/proton_api/models/goal_accumulation_status_request.rb +622 -0
  67. data/lib/proton_api/models/goal_config.rb +222 -0
  68. data/lib/proton_api/models/goal_decumulation_allocation_request.rb +764 -0
  69. data/lib/proton_api/models/goal_decumulation_recommendation_request.rb +657 -0
  70. data/lib/proton_api/models/goal_decumulation_status_request.rb +657 -0
  71. data/lib/proton_api/models/goal_withdrawal_config.rb +335 -0
  72. data/lib/proton_api/models/guaranteed_rate_benefit.rb +272 -0
  73. data/lib/proton_api/models/income_config.rb +266 -0
  74. data/lib/proton_api/models/life_insurance_needs_calculator_request.rb +515 -0
  75. data/lib/proton_api/models/location.rb +183 -0
  76. data/lib/proton_api/models/monte_carlo_request.rb +504 -0
  77. data/lib/proton_api/models/mortgage_calculator_down_payment_request.rb +299 -0
  78. data/lib/proton_api/models/mortgage_calculator_home_price_request.rb +299 -0
  79. data/lib/proton_api/models/mortgage_calculator_periodic_payment_request.rb +299 -0
  80. data/lib/proton_api/models/mvo_request.rb +366 -0
  81. data/lib/proton_api/models/opt_config.rb +300 -0
  82. data/lib/proton_api/models/opt_config1.rb +260 -0
  83. data/lib/proton_api/models/order_rebalance_request.rb +398 -0
  84. data/lib/proton_api/models/performance_calculator_request.rb +687 -0
  85. data/lib/proton_api/models/periods.rb +220 -0
  86. data/lib/proton_api/models/portfolio_optimization_score_request.rb +356 -0
  87. data/lib/proton_api/models/portfolio_what_if_request.rb +351 -0
  88. data/lib/proton_api/models/purchase_calculator_amount_request.rb +401 -0
  89. data/lib/proton_api/models/purchase_calculator_deposit_amount_request.rb +434 -0
  90. data/lib/proton_api/models/purchase_calculator_horizon_request.rb +356 -0
  91. data/lib/proton_api/models/ratio_targets.rb +328 -0
  92. data/lib/proton_api/models/ratio_targets1.rb +328 -0
  93. data/lib/proton_api/models/rebalancing_signal_request.rb +238 -0
  94. data/lib/proton_api/models/recommendation_config.rb +357 -0
  95. data/lib/proton_api/models/recommendation_config1.rb +346 -0
  96. data/lib/proton_api/models/recurring_transaction_analysis_request.rb +400 -0
  97. data/lib/proton_api/models/retirement_calculator_deposit_amount_request.rb +509 -0
  98. data/lib/proton_api/models/retirement_calculator_expenses_request.rb +476 -0
  99. data/lib/proton_api/models/retirement_calculator_percent_covered_request.rb +474 -0
  100. data/lib/proton_api/models/risk_allocation_request.rb +316 -0
  101. data/lib/proton_api/models/risk_score_request.rb +239 -0
  102. data/lib/proton_api/models/savings_calculator_request.rb +395 -0
  103. data/lib/proton_api/models/savings_deposit_schedule.rb +276 -0
  104. data/lib/proton_api/models/scenario_analysis_request.rb +401 -0
  105. data/lib/proton_api/models/sensitivity_analysis_request.rb +399 -0
  106. data/lib/proton_api/models/sensitivity_factor.rb +278 -0
  107. data/lib/proton_api/models/settings.rb +287 -0
  108. data/lib/proton_api/models/spending_analysis_request.rb +505 -0
  109. data/lib/proton_api/models/variable_annuity_request.rb +700 -0
  110. data/lib/proton_api/models/w_config.rb +382 -0
  111. data/lib/proton_api/models/w_config1.rb +347 -0
  112. data/lib/proton_api/version.rb +15 -0
  113. data/proton_api.gemspec +46 -0
  114. data/spec/api/annuities_api_spec.rb +107 -0
  115. data/spec/api/business_financial_management_api_spec.rb +95 -0
  116. data/spec/api/cards_api_spec.rb +71 -0
  117. data/spec/api/financial_health_api_spec.rb +83 -0
  118. data/spec/api/financial_planning_api_spec.rb +179 -0
  119. data/spec/api/goals_api_spec.rb +107 -0
  120. data/spec/api/life_insurance_api_spec.rb +47 -0
  121. data/spec/api/personal_financial_management_api_spec.rb +107 -0
  122. data/spec/api/portfolio_construction_api_spec.rb +47 -0
  123. data/spec/api/portfolio_management_api_spec.rb +47 -0
  124. data/spec/api/risk_scoring_api_spec.rb +71 -0
  125. data/spec/api/simulations_api_spec.rb +119 -0
  126. data/spec/api/util_api_spec.rb +71 -0
  127. data/spec/api_client_spec.rb +243 -0
  128. data/spec/configuration_spec.rb +42 -0
  129. data/spec/models/accumulation_goal_deposit_config_spec.rb +89 -0
  130. data/spec/models/annuity_calculator_accumulation_horizon_request_spec.rb +111 -0
  131. data/spec/models/annuity_calculator_annuity_amount_request_spec.rb +111 -0
  132. data/spec/models/annuity_calculator_decumulation_horizon_request_spec.rb +111 -0
  133. data/spec/models/annuity_calculator_deposit_amount_request_spec.rb +111 -0
  134. data/spec/models/annuity_calculator_initial_balance_request_spec.rb +111 -0
  135. data/spec/models/annuity_deposit_schedule_spec.rb +57 -0
  136. data/spec/models/answer_spec.rb +41 -0
  137. data/spec/models/backtest_request_spec.rb +95 -0
  138. data/spec/models/beneficiary_bequest_config_spec.rb +53 -0
  139. data/spec/models/budget_aggregation_account_spec.rb +41 -0
  140. data/spec/models/budget_calculator_request_spec.rb +105 -0
  141. data/spec/models/budget_component_spec.rb +53 -0
  142. data/spec/models/budget_details_spec.rb +99 -0
  143. data/spec/models/business_financial_health_check_request_spec.rb +143 -0
  144. data/spec/models/business_invoice_analysis_request_spec.rb +123 -0
  145. data/spec/models/calculator_deposit_schedule1_spec.rb +57 -0
  146. data/spec/models/calculator_deposit_schedule_spec.rb +51 -0
  147. data/spec/models/card_analysis_request_spec.rb +129 -0
  148. data/spec/models/card_limit_check_request_spec.rb +65 -0
  149. data/spec/models/card_transaction_authorization_request_spec.rb +157 -0
  150. data/spec/models/cash_analysis_request_spec.rb +115 -0
  151. data/spec/models/cash_flow_analysis_request_spec.rb +135 -0
  152. data/spec/models/children_education_config_spec.rb +47 -0
  153. data/spec/models/customer_analysis_request_spec.rb +101 -0
  154. data/spec/models/decision_tree_result_request_spec.rb +51 -0
  155. data/spec/models/decumulation_goal_deposit_config_spec.rb +89 -0
  156. data/spec/models/dimensional_risk_score_request_spec.rb +89 -0
  157. data/spec/models/diversification_score_request_spec.rb +111 -0
  158. data/spec/models/education_calculator_annual_cost_request_spec.rb +101 -0
  159. data/spec/models/education_calculator_deposit_amount_request_spec.rb +107 -0
  160. data/spec/models/education_calculator_percent_covered_request_spec.rb +101 -0
  161. data/spec/models/education_config_spec.rb +53 -0
  162. data/spec/models/emergency_fund_calculator_request_spec.rb +141 -0
  163. data/spec/models/event_study_request_spec.rb +109 -0
  164. data/spec/models/fee_analysis_request_spec.rb +77 -0
  165. data/spec/models/financial_health_check_request_spec.rb +95 -0
  166. data/spec/models/financial_picture_request_spec.rb +95 -0
  167. data/spec/models/financial_statement_analysis_request_spec.rb +155 -0
  168. data/spec/models/goal_accumulation_allocation_request_spec.rb +215 -0
  169. data/spec/models/goal_accumulation_recommendation_request_spec.rb +173 -0
  170. data/spec/models/goal_accumulation_status_request_spec.rb +173 -0
  171. data/spec/models/goal_config_spec.rb +47 -0
  172. data/spec/models/goal_decumulation_allocation_request_spec.rb +221 -0
  173. data/spec/models/goal_decumulation_recommendation_request_spec.rb +179 -0
  174. data/spec/models/goal_decumulation_status_request_spec.rb +179 -0
  175. data/spec/models/goal_withdrawal_config_spec.rb +89 -0
  176. data/spec/models/guaranteed_rate_benefit_spec.rb +59 -0
  177. data/spec/models/income_config_spec.rb +53 -0
  178. data/spec/models/life_insurance_needs_calculator_request_spec.rb +125 -0
  179. data/spec/models/location_spec.rb +41 -0
  180. data/spec/models/monte_carlo_request_spec.rb +179 -0
  181. data/spec/models/mortgage_calculator_down_payment_request_spec.rb +59 -0
  182. data/spec/models/mortgage_calculator_home_price_request_spec.rb +59 -0
  183. data/spec/models/mortgage_calculator_periodic_payment_request_spec.rb +59 -0
  184. data/spec/models/mvo_request_spec.rb +113 -0
  185. data/spec/models/opt_config1_spec.rb +69 -0
  186. data/spec/models/opt_config_spec.rb +81 -0
  187. data/spec/models/order_rebalance_request_spec.rb +123 -0
  188. data/spec/models/performance_calculator_request_spec.rb +233 -0
  189. data/spec/models/periods_spec.rb +47 -0
  190. data/spec/models/portfolio_optimization_score_request_spec.rb +127 -0
  191. data/spec/models/portfolio_what_if_request_spec.rb +123 -0
  192. data/spec/models/purchase_calculator_amount_request_spec.rb +93 -0
  193. data/spec/models/purchase_calculator_deposit_amount_request_spec.rb +99 -0
  194. data/spec/models/purchase_calculator_horizon_request_spec.rb +83 -0
  195. data/spec/models/ratio_targets1_spec.rb +71 -0
  196. data/spec/models/ratio_targets_spec.rb +71 -0
  197. data/spec/models/rebalancing_signal_request_spec.rb +71 -0
  198. data/spec/models/recommendation_config1_spec.rb +77 -0
  199. data/spec/models/recommendation_config_spec.rb +83 -0
  200. data/spec/models/recurring_transaction_analysis_request_spec.rb +129 -0
  201. data/spec/models/retirement_calculator_deposit_amount_request_spec.rb +113 -0
  202. data/spec/models/retirement_calculator_expenses_request_spec.rb +107 -0
  203. data/spec/models/retirement_calculator_percent_covered_request_spec.rb +107 -0
  204. data/spec/models/risk_allocation_request_spec.rb +85 -0
  205. data/spec/models/risk_score_request_spec.rb +71 -0
  206. data/spec/models/savings_calculator_request_spec.rb +99 -0
  207. data/spec/models/savings_deposit_schedule_spec.rb +63 -0
  208. data/spec/models/scenario_analysis_request_spec.rb +133 -0
  209. data/spec/models/sensitivity_analysis_request_spec.rb +133 -0
  210. data/spec/models/sensitivity_factor_spec.rb +59 -0
  211. data/spec/models/settings_spec.rb +79 -0
  212. data/spec/models/spending_analysis_request_spec.rb +187 -0
  213. data/spec/models/variable_annuity_request_spec.rb +209 -0
  214. data/spec/models/w_config1_spec.rb +65 -0
  215. data/spec/models/w_config_spec.rb +65 -0
  216. data/spec/spec_helper.rb +111 -0
  217. metadata +561 -0
@@ -0,0 +1,398 @@
1
+ =begin
2
+ #Hydrogen Proton API
3
+
4
+ #Financial engineering module of Hydrogen Atom
5
+
6
+ OpenAPI spec version: 1.9.1
7
+ Contact: info@hydrogenplatform.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.19
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module ProtonApi
16
+ class OrderRebalanceRequest
17
+ attr_accessor :non_fractional
18
+
19
+ attr_accessor :order_scope
20
+
21
+ attr_accessor :buy_threshold
22
+
23
+ attr_accessor :commit_orders
24
+
25
+ attr_accessor :account_id
26
+
27
+ attr_accessor :port_threshold
28
+
29
+ attr_accessor :use_cash_available
30
+
31
+ attr_accessor :use_strategic
32
+
33
+ attr_accessor :sell_transaction_code_id
34
+
35
+ attr_accessor :buy_transaction_code_id
36
+
37
+ attr_accessor :cash_portfolio_id
38
+
39
+ attr_accessor :restrictions_on
40
+
41
+ attr_accessor :sell_threshold
42
+
43
+ attr_accessor :portfolio_id
44
+
45
+ class EnumAttributeValidator
46
+ attr_reader :datatype
47
+ attr_reader :allowable_values
48
+
49
+ def initialize(datatype, allowable_values)
50
+ @allowable_values = allowable_values.map do |value|
51
+ case datatype.to_s
52
+ when /Integer/i
53
+ value.to_i
54
+ when /Float/i
55
+ value.to_f
56
+ else
57
+ value
58
+ end
59
+ end
60
+ end
61
+
62
+ def valid?(value)
63
+ !value || allowable_values.include?(value)
64
+ end
65
+ end
66
+
67
+ # Attribute mapping from ruby-style variable name to JSON key.
68
+ def self.attribute_map
69
+ {
70
+ :'non_fractional' => :'non_fractional',
71
+ :'order_scope' => :'order_scope',
72
+ :'buy_threshold' => :'buy_threshold',
73
+ :'commit_orders' => :'commit_orders',
74
+ :'account_id' => :'account_id',
75
+ :'port_threshold' => :'port_threshold',
76
+ :'use_cash_available' => :'use_cash_available',
77
+ :'use_strategic' => :'use_strategic',
78
+ :'sell_transaction_code_id' => :'sell_transaction_code_id',
79
+ :'buy_transaction_code_id' => :'buy_transaction_code_id',
80
+ :'cash_portfolio_id' => :'cash_portfolio_id',
81
+ :'restrictions_on' => :'restrictions_on',
82
+ :'sell_threshold' => :'sell_threshold',
83
+ :'portfolio_id' => :'portfolio_id'
84
+ }
85
+ end
86
+
87
+ # Attribute type mapping.
88
+ def self.swagger_types
89
+ {
90
+ :'non_fractional' => :'BOOLEAN',
91
+ :'order_scope' => :'String',
92
+ :'buy_threshold' => :'Float',
93
+ :'commit_orders' => :'BOOLEAN',
94
+ :'account_id' => :'String',
95
+ :'port_threshold' => :'Float',
96
+ :'use_cash_available' => :'BOOLEAN',
97
+ :'use_strategic' => :'BOOLEAN',
98
+ :'sell_transaction_code_id' => :'String',
99
+ :'buy_transaction_code_id' => :'String',
100
+ :'cash_portfolio_id' => :'String',
101
+ :'restrictions_on' => :'BOOLEAN',
102
+ :'sell_threshold' => :'Float',
103
+ :'portfolio_id' => :'String'
104
+ }
105
+ end
106
+
107
+ # Initializes the object
108
+ # @param [Hash] attributes Model attributes in the form of hash
109
+ def initialize(attributes = {})
110
+ return unless attributes.is_a?(Hash)
111
+
112
+ # convert string to symbol for hash key
113
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
114
+
115
+ if attributes.has_key?(:'non_fractional')
116
+ self.non_fractional = attributes[:'non_fractional']
117
+ else
118
+ self.non_fractional = false
119
+ end
120
+
121
+ if attributes.has_key?(:'order_scope')
122
+ self.order_scope = attributes[:'order_scope']
123
+ end
124
+
125
+ if attributes.has_key?(:'buy_threshold')
126
+ self.buy_threshold = attributes[:'buy_threshold']
127
+ else
128
+ self.buy_threshold = 0.0
129
+ end
130
+
131
+ if attributes.has_key?(:'commit_orders')
132
+ self.commit_orders = attributes[:'commit_orders']
133
+ else
134
+ self.commit_orders = true
135
+ end
136
+
137
+ if attributes.has_key?(:'account_id')
138
+ self.account_id = attributes[:'account_id']
139
+ end
140
+
141
+ if attributes.has_key?(:'port_threshold')
142
+ self.port_threshold = attributes[:'port_threshold']
143
+ else
144
+ self.port_threshold = 0.0
145
+ end
146
+
147
+ if attributes.has_key?(:'use_cash_available')
148
+ self.use_cash_available = attributes[:'use_cash_available']
149
+ else
150
+ self.use_cash_available = false
151
+ end
152
+
153
+ if attributes.has_key?(:'use_strategic')
154
+ self.use_strategic = attributes[:'use_strategic']
155
+ else
156
+ self.use_strategic = false
157
+ end
158
+
159
+ if attributes.has_key?(:'sell_transaction_code_id')
160
+ self.sell_transaction_code_id = attributes[:'sell_transaction_code_id']
161
+ end
162
+
163
+ if attributes.has_key?(:'buy_transaction_code_id')
164
+ self.buy_transaction_code_id = attributes[:'buy_transaction_code_id']
165
+ end
166
+
167
+ if attributes.has_key?(:'cash_portfolio_id')
168
+ self.cash_portfolio_id = attributes[:'cash_portfolio_id']
169
+ end
170
+
171
+ if attributes.has_key?(:'restrictions_on')
172
+ self.restrictions_on = attributes[:'restrictions_on']
173
+ else
174
+ self.restrictions_on = false
175
+ end
176
+
177
+ if attributes.has_key?(:'sell_threshold')
178
+ self.sell_threshold = attributes[:'sell_threshold']
179
+ else
180
+ self.sell_threshold = 0.0
181
+ end
182
+
183
+ if attributes.has_key?(:'portfolio_id')
184
+ self.portfolio_id = attributes[:'portfolio_id']
185
+ end
186
+ end
187
+
188
+ # Show invalid properties with the reasons. Usually used together with valid?
189
+ # @return Array for valid properties with the reasons
190
+ def list_invalid_properties
191
+ invalid_properties = Array.new
192
+ if @order_scope.nil?
193
+ invalid_properties.push('invalid value for "order_scope", order_scope cannot be nil.')
194
+ end
195
+
196
+ if !@buy_threshold.nil? && @buy_threshold < 0
197
+ invalid_properties.push('invalid value for "buy_threshold", must be greater than or equal to 0.')
198
+ end
199
+
200
+ if !@port_threshold.nil? && @port_threshold < 0
201
+ invalid_properties.push('invalid value for "port_threshold", must be greater than or equal to 0.')
202
+ end
203
+
204
+ if !@sell_threshold.nil? && @sell_threshold < 1
205
+ invalid_properties.push('invalid value for "sell_threshold", must be greater than or equal to 1.')
206
+ end
207
+
208
+ invalid_properties
209
+ end
210
+
211
+ # Check to see if the all the properties in the model are valid
212
+ # @return true if the model is valid
213
+ def valid?
214
+ return false if @order_scope.nil?
215
+ order_scope_validator = EnumAttributeValidator.new('String', ['all', 'buy_only', 'sell_only'])
216
+ return false unless order_scope_validator.valid?(@order_scope)
217
+ return false if !@buy_threshold.nil? && @buy_threshold < 0
218
+ return false if !@port_threshold.nil? && @port_threshold < 0
219
+ return false if !@sell_threshold.nil? && @sell_threshold < 1
220
+ true
221
+ end
222
+
223
+ # Custom attribute writer method checking allowed values (enum).
224
+ # @param [Object] order_scope Object to be assigned
225
+ def order_scope=(order_scope)
226
+ validator = EnumAttributeValidator.new('String', ['all', 'buy_only', 'sell_only'])
227
+ unless validator.valid?(order_scope)
228
+ fail ArgumentError, 'invalid value for "order_scope", must be one of #{validator.allowable_values}.'
229
+ end
230
+ @order_scope = order_scope
231
+ end
232
+
233
+ # Custom attribute writer method with validation
234
+ # @param [Object] buy_threshold Value to be assigned
235
+ def buy_threshold=(buy_threshold)
236
+ if !buy_threshold.nil? && buy_threshold < 0
237
+ fail ArgumentError, 'invalid value for "buy_threshold", must be greater than or equal to 0.'
238
+ end
239
+
240
+ @buy_threshold = buy_threshold
241
+ end
242
+
243
+ # Custom attribute writer method with validation
244
+ # @param [Object] port_threshold Value to be assigned
245
+ def port_threshold=(port_threshold)
246
+ if !port_threshold.nil? && port_threshold < 0
247
+ fail ArgumentError, 'invalid value for "port_threshold", must be greater than or equal to 0.'
248
+ end
249
+
250
+ @port_threshold = port_threshold
251
+ end
252
+
253
+ # Custom attribute writer method with validation
254
+ # @param [Object] sell_threshold Value to be assigned
255
+ def sell_threshold=(sell_threshold)
256
+ if !sell_threshold.nil? && sell_threshold < 1
257
+ fail ArgumentError, 'invalid value for "sell_threshold", must be greater than or equal to 1.'
258
+ end
259
+
260
+ @sell_threshold = sell_threshold
261
+ end
262
+
263
+ # Checks equality by comparing each attribute.
264
+ # @param [Object] Object to be compared
265
+ def ==(o)
266
+ return true if self.equal?(o)
267
+ self.class == o.class &&
268
+ non_fractional == o.non_fractional &&
269
+ order_scope == o.order_scope &&
270
+ buy_threshold == o.buy_threshold &&
271
+ commit_orders == o.commit_orders &&
272
+ account_id == o.account_id &&
273
+ port_threshold == o.port_threshold &&
274
+ use_cash_available == o.use_cash_available &&
275
+ use_strategic == o.use_strategic &&
276
+ sell_transaction_code_id == o.sell_transaction_code_id &&
277
+ buy_transaction_code_id == o.buy_transaction_code_id &&
278
+ cash_portfolio_id == o.cash_portfolio_id &&
279
+ restrictions_on == o.restrictions_on &&
280
+ sell_threshold == o.sell_threshold &&
281
+ portfolio_id == o.portfolio_id
282
+ end
283
+
284
+ # @see the `==` method
285
+ # @param [Object] Object to be compared
286
+ def eql?(o)
287
+ self == o
288
+ end
289
+
290
+ # Calculates hash code according to all attributes.
291
+ # @return [Fixnum] Hash code
292
+ def hash
293
+ [non_fractional, order_scope, buy_threshold, commit_orders, account_id, port_threshold, use_cash_available, use_strategic, sell_transaction_code_id, buy_transaction_code_id, cash_portfolio_id, restrictions_on, sell_threshold, portfolio_id].hash
294
+ end
295
+
296
+ # Builds the object from hash
297
+ # @param [Hash] attributes Model attributes in the form of hash
298
+ # @return [Object] Returns the model itself
299
+ def build_from_hash(attributes)
300
+ return nil unless attributes.is_a?(Hash)
301
+ self.class.swagger_types.each_pair do |key, type|
302
+ if type =~ /\AArray<(.*)>/i
303
+ # check to ensure the input is an array given that the attribute
304
+ # is documented as an array but the input is not
305
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
306
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
307
+ end
308
+ elsif !attributes[self.class.attribute_map[key]].nil?
309
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
310
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
311
+ end
312
+
313
+ self
314
+ end
315
+ # Deserializes the data based on type
316
+ # @param string type Data type
317
+ # @param string value Value to be deserialized
318
+ # @return [Object] Deserialized data
319
+ def _deserialize(type, value)
320
+ case type.to_sym
321
+ when :DateTime
322
+ value
323
+ when :Date
324
+ value
325
+ when :String
326
+ value.to_s
327
+ when :Integer
328
+ value.to_i
329
+ when :Float
330
+ value.to_f
331
+ when :BOOLEAN
332
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
333
+ true
334
+ else
335
+ false
336
+ end
337
+ when :Object
338
+ # generic object (usually a Hash), return directly
339
+ value
340
+ when /\AArray<(?<inner_type>.+)>\z/
341
+ inner_type = Regexp.last_match[:inner_type]
342
+ value.map { |v| _deserialize(inner_type, v) }
343
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
344
+ k_type = Regexp.last_match[:k_type]
345
+ v_type = Regexp.last_match[:v_type]
346
+ {}.tap do |hash|
347
+ value.each do |k, v|
348
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
349
+ end
350
+ end
351
+ else # model
352
+ temp_model = ProtonApi.const_get(type).new
353
+ temp_model.build_from_hash(value)
354
+ end
355
+ end
356
+ # Returns the string representation of the object
357
+ # @return [String] String presentation of the object
358
+ def to_s
359
+ to_hash.to_s
360
+ end
361
+
362
+ # to_body is an alias to to_hash (backward compatibility)
363
+ # @return [Hash] Returns the object in the form of hash
364
+ def to_body
365
+ to_hash
366
+ end
367
+
368
+ # Returns the object in the form of hash
369
+ # @return [Hash] Returns the object in the form of hash
370
+ def to_hash
371
+ hash = {}
372
+ self.class.attribute_map.each_pair do |attr, param|
373
+ value = self.send(attr)
374
+ next if value.nil?
375
+ hash[param] = _to_hash(value)
376
+ end
377
+ hash
378
+ end
379
+ # Outputs non-array value in the form of hash
380
+ # For object, use to_hash. Otherwise, just return the value
381
+ # @param [Object] value Any valid value
382
+ # @return [Hash] Returns the value in the form of hash
383
+ def _to_hash(value)
384
+ if value.is_a?(Array)
385
+ value.compact.map { |v| _to_hash(v) }
386
+ elsif value.is_a?(Hash)
387
+ {}.tap do |hash|
388
+ value.each { |k, v| hash[k] = _to_hash(v) }
389
+ end
390
+ elsif value.respond_to? :to_hash
391
+ value.to_hash
392
+ else
393
+ value
394
+ end
395
+ end
396
+
397
+ end
398
+ end
@@ -0,0 +1,687 @@
1
+ =begin
2
+ #Hydrogen Proton API
3
+
4
+ #Financial engineering module of Hydrogen Atom
5
+
6
+ OpenAPI spec version: 1.9.1
7
+ Contact: info@hydrogenplatform.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.19
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module ProtonApi
16
+ class PerformanceCalculatorRequest
17
+ attr_accessor :annualized_return_period
18
+
19
+ attr_accessor :risk_free_alpha
20
+
21
+ attr_accessor :allocation_id
22
+
23
+ attr_accessor :mean_percentile_monte_carlo
24
+
25
+ attr_accessor :model_id
26
+
27
+ attr_accessor :mar_downside_deviation
28
+
29
+ attr_accessor :risk_free_sharpe
30
+
31
+ attr_accessor :benchmark_id
32
+
33
+ attr_accessor :risk_free_sortino
34
+
35
+ attr_accessor :household_id
36
+
37
+ attr_accessor :min_percentile_monte_carlo
38
+
39
+ attr_accessor :moving_average_n_day
40
+
41
+ attr_accessor :active_premium_period
42
+
43
+ attr_accessor :stat_name
44
+
45
+ attr_accessor :end_date
46
+
47
+ attr_accessor :start_date
48
+
49
+ attr_accessor :n_day_returns
50
+
51
+ attr_accessor :var_conf_interval
52
+
53
+ attr_accessor :period_type
54
+
55
+ attr_accessor :risk_free_treynor
56
+
57
+ attr_accessor :n_rolling_max_drawdown
58
+
59
+ attr_accessor :portfolio_id
60
+
61
+ attr_accessor :num_sim_monte_carlo
62
+
63
+ attr_accessor :goal_id
64
+
65
+ attr_accessor :account_id
66
+
67
+ attr_accessor :security_id
68
+
69
+ attr_accessor :n_path_monte_carlo
70
+
71
+ attr_accessor :client_id
72
+
73
+ attr_accessor :n_rolling_volatility
74
+
75
+ attr_accessor :hist_factor
76
+
77
+ attr_accessor :max_percentile_monte_carlo
78
+
79
+ class EnumAttributeValidator
80
+ attr_reader :datatype
81
+ attr_reader :allowable_values
82
+
83
+ def initialize(datatype, allowable_values)
84
+ @allowable_values = allowable_values.map do |value|
85
+ case datatype.to_s
86
+ when /Integer/i
87
+ value.to_i
88
+ when /Float/i
89
+ value.to_f
90
+ else
91
+ value
92
+ end
93
+ end
94
+ end
95
+
96
+ def valid?(value)
97
+ !value || allowable_values.include?(value)
98
+ end
99
+ end
100
+
101
+ # Attribute mapping from ruby-style variable name to JSON key.
102
+ def self.attribute_map
103
+ {
104
+ :'annualized_return_period' => :'annualized_return_period',
105
+ :'risk_free_alpha' => :'risk_free_alpha',
106
+ :'allocation_id' => :'allocation_id',
107
+ :'mean_percentile_monte_carlo' => :'mean_percentile_monte_carlo',
108
+ :'model_id' => :'model_id',
109
+ :'mar_downside_deviation' => :'mar_downside_deviation',
110
+ :'risk_free_sharpe' => :'risk_free_sharpe',
111
+ :'benchmark_id' => :'benchmark_id',
112
+ :'risk_free_sortino' => :'risk_free_sortino',
113
+ :'household_id' => :'household_id',
114
+ :'min_percentile_monte_carlo' => :'min_percentile_monte_carlo',
115
+ :'moving_average_n_day' => :'moving_average_n_day',
116
+ :'active_premium_period' => :'active_premium_period',
117
+ :'stat_name' => :'stat_name',
118
+ :'end_date' => :'end_date',
119
+ :'start_date' => :'start_date',
120
+ :'n_day_returns' => :'n_day_returns',
121
+ :'var_conf_interval' => :'var_conf_interval',
122
+ :'period_type' => :'period_type',
123
+ :'risk_free_treynor' => :'risk_free_treynor',
124
+ :'n_rolling_max_drawdown' => :'n_rolling_max_drawdown',
125
+ :'portfolio_id' => :'portfolio_id',
126
+ :'num_sim_monte_carlo' => :'num_sim_monte_carlo',
127
+ :'goal_id' => :'goal_id',
128
+ :'account_id' => :'account_id',
129
+ :'security_id' => :'security_id',
130
+ :'n_path_monte_carlo' => :'n_path_monte_carlo',
131
+ :'client_id' => :'client_id',
132
+ :'n_rolling_volatility' => :'n_rolling_volatility',
133
+ :'hist_factor' => :'hist_factor',
134
+ :'max_percentile_monte_carlo' => :'max_percentile_monte_carlo'
135
+ }
136
+ end
137
+
138
+ # Attribute type mapping.
139
+ def self.swagger_types
140
+ {
141
+ :'annualized_return_period' => :'String',
142
+ :'risk_free_alpha' => :'Float',
143
+ :'allocation_id' => :'String',
144
+ :'mean_percentile_monte_carlo' => :'Float',
145
+ :'model_id' => :'String',
146
+ :'mar_downside_deviation' => :'Float',
147
+ :'risk_free_sharpe' => :'Float',
148
+ :'benchmark_id' => :'String',
149
+ :'risk_free_sortino' => :'Float',
150
+ :'household_id' => :'String',
151
+ :'min_percentile_monte_carlo' => :'Float',
152
+ :'moving_average_n_day' => :'Integer',
153
+ :'active_premium_period' => :'String',
154
+ :'stat_name' => :'String',
155
+ :'end_date' => :'Date',
156
+ :'start_date' => :'Date',
157
+ :'n_day_returns' => :'Integer',
158
+ :'var_conf_interval' => :'Float',
159
+ :'period_type' => :'String',
160
+ :'risk_free_treynor' => :'Float',
161
+ :'n_rolling_max_drawdown' => :'Integer',
162
+ :'portfolio_id' => :'String',
163
+ :'num_sim_monte_carlo' => :'Integer',
164
+ :'goal_id' => :'String',
165
+ :'account_id' => :'String',
166
+ :'security_id' => :'String',
167
+ :'n_path_monte_carlo' => :'Integer',
168
+ :'client_id' => :'String',
169
+ :'n_rolling_volatility' => :'Integer',
170
+ :'hist_factor' => :'Float',
171
+ :'max_percentile_monte_carlo' => :'Float'
172
+ }
173
+ end
174
+
175
+ # Initializes the object
176
+ # @param [Hash] attributes Model attributes in the form of hash
177
+ def initialize(attributes = {})
178
+ return unless attributes.is_a?(Hash)
179
+
180
+ # convert string to symbol for hash key
181
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
182
+
183
+ if attributes.has_key?(:'annualized_return_period')
184
+ self.annualized_return_period = attributes[:'annualized_return_period']
185
+ else
186
+ self.annualized_return_period = 'D'
187
+ end
188
+
189
+ if attributes.has_key?(:'risk_free_alpha')
190
+ self.risk_free_alpha = attributes[:'risk_free_alpha']
191
+ else
192
+ self.risk_free_alpha = 0.0
193
+ end
194
+
195
+ if attributes.has_key?(:'allocation_id')
196
+ self.allocation_id = attributes[:'allocation_id']
197
+ end
198
+
199
+ if attributes.has_key?(:'mean_percentile_monte_carlo')
200
+ self.mean_percentile_monte_carlo = attributes[:'mean_percentile_monte_carlo']
201
+ else
202
+ self.mean_percentile_monte_carlo = 50.0
203
+ end
204
+
205
+ if attributes.has_key?(:'model_id')
206
+ self.model_id = attributes[:'model_id']
207
+ end
208
+
209
+ if attributes.has_key?(:'mar_downside_deviation')
210
+ self.mar_downside_deviation = attributes[:'mar_downside_deviation']
211
+ else
212
+ self.mar_downside_deviation = 0.0
213
+ end
214
+
215
+ if attributes.has_key?(:'risk_free_sharpe')
216
+ self.risk_free_sharpe = attributes[:'risk_free_sharpe']
217
+ else
218
+ self.risk_free_sharpe = 0.0
219
+ end
220
+
221
+ if attributes.has_key?(:'benchmark_id')
222
+ self.benchmark_id = attributes[:'benchmark_id']
223
+ end
224
+
225
+ if attributes.has_key?(:'risk_free_sortino')
226
+ self.risk_free_sortino = attributes[:'risk_free_sortino']
227
+ else
228
+ self.risk_free_sortino = 0.0
229
+ end
230
+
231
+ if attributes.has_key?(:'household_id')
232
+ self.household_id = attributes[:'household_id']
233
+ end
234
+
235
+ if attributes.has_key?(:'min_percentile_monte_carlo')
236
+ self.min_percentile_monte_carlo = attributes[:'min_percentile_monte_carlo']
237
+ else
238
+ self.min_percentile_monte_carlo = 20.0
239
+ end
240
+
241
+ if attributes.has_key?(:'moving_average_n_day')
242
+ self.moving_average_n_day = attributes[:'moving_average_n_day']
243
+ else
244
+ self.moving_average_n_day = 7
245
+ end
246
+
247
+ if attributes.has_key?(:'active_premium_period')
248
+ self.active_premium_period = attributes[:'active_premium_period']
249
+ else
250
+ self.active_premium_period = 'D'
251
+ end
252
+
253
+ if attributes.has_key?(:'stat_name')
254
+ self.stat_name = attributes[:'stat_name']
255
+ end
256
+
257
+ if attributes.has_key?(:'end_date')
258
+ self.end_date = attributes[:'end_date']
259
+ end
260
+
261
+ if attributes.has_key?(:'start_date')
262
+ self.start_date = attributes[:'start_date']
263
+ end
264
+
265
+ if attributes.has_key?(:'n_day_returns')
266
+ self.n_day_returns = attributes[:'n_day_returns']
267
+ else
268
+ self.n_day_returns = 7
269
+ end
270
+
271
+ if attributes.has_key?(:'var_conf_interval')
272
+ self.var_conf_interval = attributes[:'var_conf_interval']
273
+ else
274
+ self.var_conf_interval = 95.0
275
+ end
276
+
277
+ if attributes.has_key?(:'period_type')
278
+ self.period_type = attributes[:'period_type']
279
+ else
280
+ self.period_type = 'D'
281
+ end
282
+
283
+ if attributes.has_key?(:'risk_free_treynor')
284
+ self.risk_free_treynor = attributes[:'risk_free_treynor']
285
+ else
286
+ self.risk_free_treynor = 0.0
287
+ end
288
+
289
+ if attributes.has_key?(:'n_rolling_max_drawdown')
290
+ self.n_rolling_max_drawdown = attributes[:'n_rolling_max_drawdown']
291
+ else
292
+ self.n_rolling_max_drawdown = 7
293
+ end
294
+
295
+ if attributes.has_key?(:'portfolio_id')
296
+ self.portfolio_id = attributes[:'portfolio_id']
297
+ end
298
+
299
+ if attributes.has_key?(:'num_sim_monte_carlo')
300
+ self.num_sim_monte_carlo = attributes[:'num_sim_monte_carlo']
301
+ else
302
+ self.num_sim_monte_carlo = 1000
303
+ end
304
+
305
+ if attributes.has_key?(:'goal_id')
306
+ self.goal_id = attributes[:'goal_id']
307
+ end
308
+
309
+ if attributes.has_key?(:'account_id')
310
+ self.account_id = attributes[:'account_id']
311
+ end
312
+
313
+ if attributes.has_key?(:'security_id')
314
+ self.security_id = attributes[:'security_id']
315
+ end
316
+
317
+ if attributes.has_key?(:'n_path_monte_carlo')
318
+ self.n_path_monte_carlo = attributes[:'n_path_monte_carlo']
319
+ else
320
+ self.n_path_monte_carlo = 100
321
+ end
322
+
323
+ if attributes.has_key?(:'client_id')
324
+ self.client_id = attributes[:'client_id']
325
+ end
326
+
327
+ if attributes.has_key?(:'n_rolling_volatility')
328
+ self.n_rolling_volatility = attributes[:'n_rolling_volatility']
329
+ else
330
+ self.n_rolling_volatility = 7
331
+ end
332
+
333
+ if attributes.has_key?(:'hist_factor')
334
+ self.hist_factor = attributes[:'hist_factor']
335
+ else
336
+ self.hist_factor = 5.0
337
+ end
338
+
339
+ if attributes.has_key?(:'max_percentile_monte_carlo')
340
+ self.max_percentile_monte_carlo = attributes[:'max_percentile_monte_carlo']
341
+ else
342
+ self.max_percentile_monte_carlo = 80.0
343
+ end
344
+ end
345
+
346
+ # Show invalid properties with the reasons. Usually used together with valid?
347
+ # @return Array for valid properties with the reasons
348
+ def list_invalid_properties
349
+ invalid_properties = Array.new
350
+ if !@mean_percentile_monte_carlo.nil? && @mean_percentile_monte_carlo < 0
351
+ invalid_properties.push('invalid value for "mean_percentile_monte_carlo", must be greater than or equal to 0.')
352
+ end
353
+
354
+ if !@min_percentile_monte_carlo.nil? && @min_percentile_monte_carlo < 0
355
+ invalid_properties.push('invalid value for "min_percentile_monte_carlo", must be greater than or equal to 0.')
356
+ end
357
+
358
+ if !@moving_average_n_day.nil? && @moving_average_n_day < 1
359
+ invalid_properties.push('invalid value for "moving_average_n_day", must be greater than or equal to 1.')
360
+ end
361
+
362
+ if @stat_name.nil?
363
+ invalid_properties.push('invalid value for "stat_name", stat_name cannot be nil.')
364
+ end
365
+
366
+ if !@n_day_returns.nil? && @n_day_returns < 1
367
+ invalid_properties.push('invalid value for "n_day_returns", must be greater than or equal to 1.')
368
+ end
369
+
370
+ if !@n_rolling_max_drawdown.nil? && @n_rolling_max_drawdown < 1
371
+ invalid_properties.push('invalid value for "n_rolling_max_drawdown", must be greater than or equal to 1.')
372
+ end
373
+
374
+ if !@num_sim_monte_carlo.nil? && @num_sim_monte_carlo < 1
375
+ invalid_properties.push('invalid value for "num_sim_monte_carlo", must be greater than or equal to 1.')
376
+ end
377
+
378
+ if !@n_path_monte_carlo.nil? && @n_path_monte_carlo < 1
379
+ invalid_properties.push('invalid value for "n_path_monte_carlo", must be greater than or equal to 1.')
380
+ end
381
+
382
+ if !@n_rolling_volatility.nil? && @n_rolling_volatility < 1
383
+ invalid_properties.push('invalid value for "n_rolling_volatility", must be greater than or equal to 1.')
384
+ end
385
+
386
+ if !@max_percentile_monte_carlo.nil? && @max_percentile_monte_carlo < 0
387
+ invalid_properties.push('invalid value for "max_percentile_monte_carlo", must be greater than or equal to 0.')
388
+ end
389
+
390
+ invalid_properties
391
+ end
392
+
393
+ # Check to see if the all the properties in the model are valid
394
+ # @return true if the model is valid
395
+ def valid?
396
+ annualized_return_period_validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
397
+ return false unless annualized_return_period_validator.valid?(@annualized_return_period)
398
+ return false if !@mean_percentile_monte_carlo.nil? && @mean_percentile_monte_carlo < 0
399
+ return false if !@min_percentile_monte_carlo.nil? && @min_percentile_monte_carlo < 0
400
+ return false if !@moving_average_n_day.nil? && @moving_average_n_day < 1
401
+ active_premium_period_validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
402
+ return false unless active_premium_period_validator.valid?(@active_premium_period)
403
+ return false if @stat_name.nil?
404
+ return false if !@n_day_returns.nil? && @n_day_returns < 1
405
+ period_type_validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
406
+ return false unless period_type_validator.valid?(@period_type)
407
+ return false if !@n_rolling_max_drawdown.nil? && @n_rolling_max_drawdown < 1
408
+ return false if !@num_sim_monte_carlo.nil? && @num_sim_monte_carlo < 1
409
+ return false if !@n_path_monte_carlo.nil? && @n_path_monte_carlo < 1
410
+ return false if !@n_rolling_volatility.nil? && @n_rolling_volatility < 1
411
+ return false if !@max_percentile_monte_carlo.nil? && @max_percentile_monte_carlo < 0
412
+ true
413
+ end
414
+
415
+ # Custom attribute writer method checking allowed values (enum).
416
+ # @param [Object] annualized_return_period Object to be assigned
417
+ def annualized_return_period=(annualized_return_period)
418
+ validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
419
+ unless validator.valid?(annualized_return_period)
420
+ fail ArgumentError, 'invalid value for "annualized_return_period", must be one of #{validator.allowable_values}.'
421
+ end
422
+ @annualized_return_period = annualized_return_period
423
+ end
424
+
425
+ # Custom attribute writer method with validation
426
+ # @param [Object] mean_percentile_monte_carlo Value to be assigned
427
+ def mean_percentile_monte_carlo=(mean_percentile_monte_carlo)
428
+ if !mean_percentile_monte_carlo.nil? && mean_percentile_monte_carlo < 0
429
+ fail ArgumentError, 'invalid value for "mean_percentile_monte_carlo", must be greater than or equal to 0.'
430
+ end
431
+
432
+ @mean_percentile_monte_carlo = mean_percentile_monte_carlo
433
+ end
434
+
435
+ # Custom attribute writer method with validation
436
+ # @param [Object] min_percentile_monte_carlo Value to be assigned
437
+ def min_percentile_monte_carlo=(min_percentile_monte_carlo)
438
+ if !min_percentile_monte_carlo.nil? && min_percentile_monte_carlo < 0
439
+ fail ArgumentError, 'invalid value for "min_percentile_monte_carlo", must be greater than or equal to 0.'
440
+ end
441
+
442
+ @min_percentile_monte_carlo = min_percentile_monte_carlo
443
+ end
444
+
445
+ # Custom attribute writer method with validation
446
+ # @param [Object] moving_average_n_day Value to be assigned
447
+ def moving_average_n_day=(moving_average_n_day)
448
+ if !moving_average_n_day.nil? && moving_average_n_day < 1
449
+ fail ArgumentError, 'invalid value for "moving_average_n_day", must be greater than or equal to 1.'
450
+ end
451
+
452
+ @moving_average_n_day = moving_average_n_day
453
+ end
454
+
455
+ # Custom attribute writer method checking allowed values (enum).
456
+ # @param [Object] active_premium_period Object to be assigned
457
+ def active_premium_period=(active_premium_period)
458
+ validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
459
+ unless validator.valid?(active_premium_period)
460
+ fail ArgumentError, 'invalid value for "active_premium_period", must be one of #{validator.allowable_values}.'
461
+ end
462
+ @active_premium_period = active_premium_period
463
+ end
464
+
465
+ # Custom attribute writer method with validation
466
+ # @param [Object] n_day_returns Value to be assigned
467
+ def n_day_returns=(n_day_returns)
468
+ if !n_day_returns.nil? && n_day_returns < 1
469
+ fail ArgumentError, 'invalid value for "n_day_returns", must be greater than or equal to 1.'
470
+ end
471
+
472
+ @n_day_returns = n_day_returns
473
+ end
474
+
475
+ # Custom attribute writer method checking allowed values (enum).
476
+ # @param [Object] period_type Object to be assigned
477
+ def period_type=(period_type)
478
+ validator = EnumAttributeValidator.new('String', ['Y', 'Q', 'M', 'D'])
479
+ unless validator.valid?(period_type)
480
+ fail ArgumentError, 'invalid value for "period_type", must be one of #{validator.allowable_values}.'
481
+ end
482
+ @period_type = period_type
483
+ end
484
+
485
+ # Custom attribute writer method with validation
486
+ # @param [Object] n_rolling_max_drawdown Value to be assigned
487
+ def n_rolling_max_drawdown=(n_rolling_max_drawdown)
488
+ if !n_rolling_max_drawdown.nil? && n_rolling_max_drawdown < 1
489
+ fail ArgumentError, 'invalid value for "n_rolling_max_drawdown", must be greater than or equal to 1.'
490
+ end
491
+
492
+ @n_rolling_max_drawdown = n_rolling_max_drawdown
493
+ end
494
+
495
+ # Custom attribute writer method with validation
496
+ # @param [Object] num_sim_monte_carlo Value to be assigned
497
+ def num_sim_monte_carlo=(num_sim_monte_carlo)
498
+ if !num_sim_monte_carlo.nil? && num_sim_monte_carlo < 1
499
+ fail ArgumentError, 'invalid value for "num_sim_monte_carlo", must be greater than or equal to 1.'
500
+ end
501
+
502
+ @num_sim_monte_carlo = num_sim_monte_carlo
503
+ end
504
+
505
+ # Custom attribute writer method with validation
506
+ # @param [Object] n_path_monte_carlo Value to be assigned
507
+ def n_path_monte_carlo=(n_path_monte_carlo)
508
+ if !n_path_monte_carlo.nil? && n_path_monte_carlo < 1
509
+ fail ArgumentError, 'invalid value for "n_path_monte_carlo", must be greater than or equal to 1.'
510
+ end
511
+
512
+ @n_path_monte_carlo = n_path_monte_carlo
513
+ end
514
+
515
+ # Custom attribute writer method with validation
516
+ # @param [Object] n_rolling_volatility Value to be assigned
517
+ def n_rolling_volatility=(n_rolling_volatility)
518
+ if !n_rolling_volatility.nil? && n_rolling_volatility < 1
519
+ fail ArgumentError, 'invalid value for "n_rolling_volatility", must be greater than or equal to 1.'
520
+ end
521
+
522
+ @n_rolling_volatility = n_rolling_volatility
523
+ end
524
+
525
+ # Custom attribute writer method with validation
526
+ # @param [Object] max_percentile_monte_carlo Value to be assigned
527
+ def max_percentile_monte_carlo=(max_percentile_monte_carlo)
528
+ if !max_percentile_monte_carlo.nil? && max_percentile_monte_carlo < 0
529
+ fail ArgumentError, 'invalid value for "max_percentile_monte_carlo", must be greater than or equal to 0.'
530
+ end
531
+
532
+ @max_percentile_monte_carlo = max_percentile_monte_carlo
533
+ end
534
+
535
+ # Checks equality by comparing each attribute.
536
+ # @param [Object] Object to be compared
537
+ def ==(o)
538
+ return true if self.equal?(o)
539
+ self.class == o.class &&
540
+ annualized_return_period == o.annualized_return_period &&
541
+ risk_free_alpha == o.risk_free_alpha &&
542
+ allocation_id == o.allocation_id &&
543
+ mean_percentile_monte_carlo == o.mean_percentile_monte_carlo &&
544
+ model_id == o.model_id &&
545
+ mar_downside_deviation == o.mar_downside_deviation &&
546
+ risk_free_sharpe == o.risk_free_sharpe &&
547
+ benchmark_id == o.benchmark_id &&
548
+ risk_free_sortino == o.risk_free_sortino &&
549
+ household_id == o.household_id &&
550
+ min_percentile_monte_carlo == o.min_percentile_monte_carlo &&
551
+ moving_average_n_day == o.moving_average_n_day &&
552
+ active_premium_period == o.active_premium_period &&
553
+ stat_name == o.stat_name &&
554
+ end_date == o.end_date &&
555
+ start_date == o.start_date &&
556
+ n_day_returns == o.n_day_returns &&
557
+ var_conf_interval == o.var_conf_interval &&
558
+ period_type == o.period_type &&
559
+ risk_free_treynor == o.risk_free_treynor &&
560
+ n_rolling_max_drawdown == o.n_rolling_max_drawdown &&
561
+ portfolio_id == o.portfolio_id &&
562
+ num_sim_monte_carlo == o.num_sim_monte_carlo &&
563
+ goal_id == o.goal_id &&
564
+ account_id == o.account_id &&
565
+ security_id == o.security_id &&
566
+ n_path_monte_carlo == o.n_path_monte_carlo &&
567
+ client_id == o.client_id &&
568
+ n_rolling_volatility == o.n_rolling_volatility &&
569
+ hist_factor == o.hist_factor &&
570
+ max_percentile_monte_carlo == o.max_percentile_monte_carlo
571
+ end
572
+
573
+ # @see the `==` method
574
+ # @param [Object] Object to be compared
575
+ def eql?(o)
576
+ self == o
577
+ end
578
+
579
+ # Calculates hash code according to all attributes.
580
+ # @return [Fixnum] Hash code
581
+ def hash
582
+ [annualized_return_period, risk_free_alpha, allocation_id, mean_percentile_monte_carlo, model_id, mar_downside_deviation, risk_free_sharpe, benchmark_id, risk_free_sortino, household_id, min_percentile_monte_carlo, moving_average_n_day, active_premium_period, stat_name, end_date, start_date, n_day_returns, var_conf_interval, period_type, risk_free_treynor, n_rolling_max_drawdown, portfolio_id, num_sim_monte_carlo, goal_id, account_id, security_id, n_path_monte_carlo, client_id, n_rolling_volatility, hist_factor, max_percentile_monte_carlo].hash
583
+ end
584
+
585
+ # Builds the object from hash
586
+ # @param [Hash] attributes Model attributes in the form of hash
587
+ # @return [Object] Returns the model itself
588
+ def build_from_hash(attributes)
589
+ return nil unless attributes.is_a?(Hash)
590
+ self.class.swagger_types.each_pair do |key, type|
591
+ if type =~ /\AArray<(.*)>/i
592
+ # check to ensure the input is an array given that the attribute
593
+ # is documented as an array but the input is not
594
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
595
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
596
+ end
597
+ elsif !attributes[self.class.attribute_map[key]].nil?
598
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
599
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
600
+ end
601
+
602
+ self
603
+ end
604
+ # Deserializes the data based on type
605
+ # @param string type Data type
606
+ # @param string value Value to be deserialized
607
+ # @return [Object] Deserialized data
608
+ def _deserialize(type, value)
609
+ case type.to_sym
610
+ when :DateTime
611
+ value
612
+ when :Date
613
+ value
614
+ when :String
615
+ value.to_s
616
+ when :Integer
617
+ value.to_i
618
+ when :Float
619
+ value.to_f
620
+ when :BOOLEAN
621
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
622
+ true
623
+ else
624
+ false
625
+ end
626
+ when :Object
627
+ # generic object (usually a Hash), return directly
628
+ value
629
+ when /\AArray<(?<inner_type>.+)>\z/
630
+ inner_type = Regexp.last_match[:inner_type]
631
+ value.map { |v| _deserialize(inner_type, v) }
632
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
633
+ k_type = Regexp.last_match[:k_type]
634
+ v_type = Regexp.last_match[:v_type]
635
+ {}.tap do |hash|
636
+ value.each do |k, v|
637
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
638
+ end
639
+ end
640
+ else # model
641
+ temp_model = ProtonApi.const_get(type).new
642
+ temp_model.build_from_hash(value)
643
+ end
644
+ end
645
+ # Returns the string representation of the object
646
+ # @return [String] String presentation of the object
647
+ def to_s
648
+ to_hash.to_s
649
+ end
650
+
651
+ # to_body is an alias to to_hash (backward compatibility)
652
+ # @return [Hash] Returns the object in the form of hash
653
+ def to_body
654
+ to_hash
655
+ end
656
+
657
+ # Returns the object in the form of hash
658
+ # @return [Hash] Returns the object in the form of hash
659
+ def to_hash
660
+ hash = {}
661
+ self.class.attribute_map.each_pair do |attr, param|
662
+ value = self.send(attr)
663
+ next if value.nil?
664
+ hash[param] = _to_hash(value)
665
+ end
666
+ hash
667
+ end
668
+ # Outputs non-array value in the form of hash
669
+ # For object, use to_hash. Otherwise, just return the value
670
+ # @param [Object] value Any valid value
671
+ # @return [Hash] Returns the value in the form of hash
672
+ def _to_hash(value)
673
+ if value.is_a?(Array)
674
+ value.compact.map { |v| _to_hash(v) }
675
+ elsif value.is_a?(Hash)
676
+ {}.tap do |hash|
677
+ value.each { |k, v| hash[k] = _to_hash(v) }
678
+ end
679
+ elsif value.respond_to? :to_hash
680
+ value.to_hash
681
+ else
682
+ value
683
+ end
684
+ end
685
+
686
+ end
687
+ end