tarf_monte_carlo 3.61 → 3.66
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.
- checksums.yaml +4 -4
- data/ext/tarf_monte_carlo/Makefile +24 -25
- data/ext/tarf_monte_carlo/tarf_monte_carlo.c +38 -18
- data/lib/tarf_monte_carlo/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1398b6cb4be3ea51154d3da07ab8db53b46e32ea5340688de66f25583834141d
|
|
4
|
+
data.tar.gz: 73320e683ceb04104c1cc1803a3b753b104ddd7c150314f86c2408abf77558b2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4af0d39d2b3e43b47060886282badc77ac70aa03bd4f9573e3cca13b45a245ecb14d99c34ced0b7d4a36b6d11384ea048a78a37e029267a6f482419a643b0dfa
|
|
7
|
+
data.tar.gz: 0b2952a5b59c8c56a5d3b570f540c508572384f000ff82b887a7fd5d254445a726e458c1b33b3836a7949682225a11d1d57219314d3bc43fbe19d696244d6619
|
|
@@ -12,12 +12,12 @@ NULLCMD = :
|
|
|
12
12
|
#### Start of system configuration section. ####
|
|
13
13
|
|
|
14
14
|
srcdir = .
|
|
15
|
-
topdir = /
|
|
15
|
+
topdir = /home/user/.rvm/rubies/ruby-2.5.1/include/ruby-2.5.0
|
|
16
16
|
hdrdir = $(topdir)
|
|
17
|
-
arch_hdrdir = /
|
|
17
|
+
arch_hdrdir = /home/user/.rvm/rubies/ruby-2.5.1/include/ruby-2.5.0/x86_64-linux
|
|
18
18
|
PATH_SEPARATOR = :
|
|
19
19
|
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
|
|
20
|
-
prefix = $(DESTDIR)/
|
|
20
|
+
prefix = $(DESTDIR)/home/user/.rvm/rubies/ruby-2.5.1
|
|
21
21
|
rubysitearchprefix = $(rubylibprefix)/$(sitearch)
|
|
22
22
|
rubyarchprefix = $(rubylibprefix)/$(arch)
|
|
23
23
|
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
|
|
@@ -50,7 +50,7 @@ dvidir = $(docdir)
|
|
|
50
50
|
htmldir = $(docdir)
|
|
51
51
|
infodir = $(datarootdir)/info
|
|
52
52
|
docdir = $(datarootdir)/doc/$(PACKAGE)
|
|
53
|
-
oldincludedir = $(
|
|
53
|
+
oldincludedir = $(DESTDIR)/usr/include
|
|
54
54
|
includedir = $(prefix)/include
|
|
55
55
|
localstatedir = $(prefix)/var
|
|
56
56
|
sharedstatedir = $(prefix)/com
|
|
@@ -67,8 +67,8 @@ CC = gcc
|
|
|
67
67
|
CXX = g++
|
|
68
68
|
LIBRUBY = $(LIBRUBY_SO)
|
|
69
69
|
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
|
70
|
-
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
|
|
71
|
-
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
|
70
|
+
LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)
|
|
71
|
+
LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static
|
|
72
72
|
empty =
|
|
73
73
|
OUTFLAG = -o $(empty)
|
|
74
74
|
COUTFLAG = -o $(empty)
|
|
@@ -79,30 +79,30 @@ cflags = $(optflags) $(debugflags) $(warnflags)
|
|
|
79
79
|
cxxflags = $(optflags) $(debugflags) $(warnflags)
|
|
80
80
|
optflags = -O3
|
|
81
81
|
debugflags = -ggdb3
|
|
82
|
-
warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -
|
|
83
|
-
CCDLFLAGS = -
|
|
84
|
-
CFLAGS = $(CCDLFLAGS) $(cflags) -
|
|
82
|
+
warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wsuggest-attribute=noreturn -Wsuggest-attribute=format -Wno-maybe-uninitialized
|
|
83
|
+
CCDLFLAGS = -fPIC
|
|
84
|
+
CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG)
|
|
85
85
|
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
|
|
86
86
|
DEFS =
|
|
87
|
-
CPPFLAGS =
|
|
87
|
+
CPPFLAGS = $(DEFS) $(cppflags)
|
|
88
88
|
CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG)
|
|
89
|
-
ldflags = -L. -fstack-protector -
|
|
90
|
-
dldflags = -Wl
|
|
89
|
+
ldflags = -L. -fstack-protector -rdynamic -Wl,-export-dynamic
|
|
90
|
+
dldflags = -Wl,--compress-debug-sections=zlib
|
|
91
91
|
ARCH_FLAG =
|
|
92
92
|
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
|
|
93
|
-
LDSHARED = $(CC) -
|
|
94
|
-
LDSHAREDXX = $(CXX) -
|
|
95
|
-
AR =
|
|
93
|
+
LDSHARED = $(CC) -shared
|
|
94
|
+
LDSHAREDXX = $(CXX) -shared
|
|
95
|
+
AR = ar
|
|
96
96
|
EXEEXT =
|
|
97
97
|
|
|
98
98
|
RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
|
|
99
|
-
RUBY_SO_NAME = ruby
|
|
99
|
+
RUBY_SO_NAME = ruby
|
|
100
100
|
RUBYW_INSTALL_NAME =
|
|
101
101
|
RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
|
|
102
102
|
RUBYW_BASE_NAME = rubyw
|
|
103
103
|
RUBY_BASE_NAME = ruby
|
|
104
104
|
|
|
105
|
-
arch = x86_64-
|
|
105
|
+
arch = x86_64-linux
|
|
106
106
|
sitearch = $(arch)
|
|
107
107
|
ruby_version = 2.5.0
|
|
108
108
|
ruby = $(bindir)/$(RUBY_BASE_NAME)
|
|
@@ -111,9 +111,9 @@ ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h
|
|
|
111
111
|
|
|
112
112
|
RM = rm -f
|
|
113
113
|
RM_RF = $(RUBY) -run -e rm -- -rf
|
|
114
|
-
RMDIRS = rmdir -p
|
|
115
|
-
MAKEDIRS = /
|
|
116
|
-
INSTALL = /usr/
|
|
114
|
+
RMDIRS = rmdir --ignore-fail-on-non-empty -p
|
|
115
|
+
MAKEDIRS = /bin/mkdir -p
|
|
116
|
+
INSTALL = /usr/bin/install -c
|
|
117
117
|
INSTALL_PROG = $(INSTALL) -m 0755
|
|
118
118
|
INSTALL_DATA = $(INSTALL) -m 644
|
|
119
119
|
COPY = cp
|
|
@@ -122,8 +122,8 @@ TOUCH = exit >
|
|
|
122
122
|
#### End of system configuration section. ####
|
|
123
123
|
|
|
124
124
|
preload =
|
|
125
|
-
libpath = . $(libdir)
|
|
126
|
-
LIBPATH = -L. -L$(libdir) -
|
|
125
|
+
libpath = . $(libdir)
|
|
126
|
+
LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir)
|
|
127
127
|
DEFFILE =
|
|
128
128
|
|
|
129
129
|
CLEANFILES = mkmf.log
|
|
@@ -134,7 +134,7 @@ extout =
|
|
|
134
134
|
extout_prefix =
|
|
135
135
|
target_prefix = /tarf_monte_carlo
|
|
136
136
|
LOCAL_LIBS =
|
|
137
|
-
LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -
|
|
137
|
+
LIBS = $(LIBRUBYARG_SHARED) -lpthread -lgmp -ldl -lcrypt -lm -lc
|
|
138
138
|
ORIG_SRCS = tarf_monte_carlo.c
|
|
139
139
|
SRCS = $(ORIG_SRCS)
|
|
140
140
|
OBJS = tarf_monte_carlo.o
|
|
@@ -143,7 +143,7 @@ LOCAL_HDRS =
|
|
|
143
143
|
TARGET = tarf_monte_carlo
|
|
144
144
|
TARGET_NAME = tarf_monte_carlo
|
|
145
145
|
TARGET_ENTRY = Init_$(TARGET_NAME)
|
|
146
|
-
DLLIB = $(TARGET).
|
|
146
|
+
DLLIB = $(TARGET).so
|
|
147
147
|
EXTSTATIC =
|
|
148
148
|
STATIC_LIB =
|
|
149
149
|
|
|
@@ -257,7 +257,6 @@ $(TARGET_SO): $(OBJS) Makefile
|
|
|
257
257
|
$(ECHO) linking shared-object tarf_monte_carlo/$(DLLIB)
|
|
258
258
|
-$(Q)$(RM) $(@)
|
|
259
259
|
$(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
|
|
260
|
-
$(Q) $(POSTLINK)
|
|
261
260
|
|
|
262
261
|
|
|
263
262
|
|
|
@@ -211,8 +211,8 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
211
211
|
//
|
|
212
212
|
// first create a 1-D array of pointers, and then, for each array entry, create another 1-D array.
|
|
213
213
|
//
|
|
214
|
-
double payoffmet[SCount];
|
|
215
214
|
double **metrics;
|
|
215
|
+
double pffm[SCount];
|
|
216
216
|
if (barrier_variations(KType)){
|
|
217
217
|
metrics = ( double** ) malloc( BARRIER_DP * sizeof(double*) );
|
|
218
218
|
for( metric = 0; metric < BARRIER_DP; metric++ ) {
|
|
@@ -236,8 +236,9 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
236
236
|
// run simulations loop
|
|
237
237
|
for( sim_count = 0; sim_count < SCount; sim_count += 2 ) {
|
|
238
238
|
// initial spot rate for each iteration would be current spot rate
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
pffm[sim_count] = 0;
|
|
240
|
+
pffm[sim_count+1] = 0;
|
|
241
|
+
|
|
241
242
|
double Spot = S, Spot_dash = S;
|
|
242
243
|
double sim[NL], sim_pos[NL], sim_neg[NL], sim_dash[NL], sim_dash_pos[NL], sim_dash_neg[NL];
|
|
243
244
|
|
|
@@ -284,19 +285,37 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
284
285
|
} else if(KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_KI || KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_EXP){
|
|
285
286
|
profit_loss = Spot;
|
|
286
287
|
profit_loss_dash = Spot_dash;
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
288
|
+
|
|
289
|
+
// Both Until KI & Exp
|
|
290
|
+
if ( ((*(Barrier_array + leg) - *(Xs_array + leg)) * cp_sign <= 0) && ((*(Barrier2_array + leg) - *(Xs_array + leg)) * cp_sign >= 0) ){
|
|
291
|
+
if ((knockedLeg == -1) && ((*(Barrier_array + leg) - Spot) * cp_sign >= 0)){ knockedLeg = leg; }
|
|
292
|
+
if ((knockedLeg2 == -1) && ((*(Barrier2_array + leg) - Spot) * cp_sign <= 0)){ knockedLeg2 = leg; }
|
|
293
|
+
|
|
294
|
+
if ((knockedLeg_dash == -1) && ((*(Barrier_array + leg) - Spot_dash) * cp_sign >= 0)){ knockedLeg_dash = leg; }
|
|
295
|
+
if ((knockedLeg2_dash == -1) && ((*(Barrier2_array + leg) - Spot_dash) * cp_sign <= 0)){ knockedLeg2_dash = leg; }
|
|
290
296
|
}
|
|
291
|
-
if(
|
|
292
|
-
|
|
297
|
+
else if( ((*(Barrier_array + leg) - *(Xs_array + leg)) * cp_sign >= 0) && ((*(Barrier2_array + leg) - *(Xs_array + leg)) * cp_sign <= 0) ){
|
|
298
|
+
if ((knockedLeg == -1) && ((*(Barrier_array + leg) - Spot) * cp_sign <= 0)){ knockedLeg = leg; }
|
|
299
|
+
if ((knockedLeg2 == -1) && ((*(Barrier2_array + leg) - Spot) * cp_sign >= 0)){ knockedLeg2 = leg; }
|
|
300
|
+
|
|
301
|
+
if ((knockedLeg_dash == -1) && ((*(Barrier_array + leg) - Spot_dash) * cp_sign <= 0)){ knockedLeg_dash = leg; }
|
|
302
|
+
if ((knockedLeg2_dash == -1) && ((*(Barrier2_array + leg) - Spot_dash) * cp_sign >= 0)){ knockedLeg2_dash = leg; }
|
|
293
303
|
}
|
|
304
|
+
// Only Until Exp
|
|
305
|
+
else if( (KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_EXP) && ((*(Barrier_array + leg) - *(Xs_array + leg)) * cp_sign >= 0) && ((*(Barrier2_array + leg) - *(Barrier_array + leg)) * cp_sign >= 0) ){
|
|
306
|
+
if ((knockedLeg == -1) && ((*(Barrier_array + leg) - Spot) * cp_sign <= 0)){ knockedLeg = leg; }
|
|
307
|
+
if ((knockedLeg2 == -1) && ((*(Barrier2_array + leg) - Spot) * cp_sign <= 0)){ knockedLeg2 = leg; }
|
|
294
308
|
|
|
295
|
-
|
|
296
|
-
|
|
309
|
+
if ((knockedLeg_dash == -1) && ((*(Barrier_array + leg) - Spot_dash) * cp_sign <= 0)){ knockedLeg_dash = leg; }
|
|
310
|
+
if ((knockedLeg2_dash == -1) && ((*(Barrier2_array + leg) - Spot_dash) * cp_sign <= 0)){ knockedLeg2_dash = leg; }
|
|
297
311
|
}
|
|
298
|
-
|
|
299
|
-
|
|
312
|
+
|
|
313
|
+
else if( (KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_EXP) && ((*(Barrier_array + leg) - *(Xs_array + leg)) * cp_sign <= 0) && ((*(Barrier2_array + leg) - *(Barrier_array + leg)) * cp_sign <= 0) ){
|
|
314
|
+
if ((knockedLeg == -1) && ((*(Barrier_array + leg) - Spot) * cp_sign >= 0)){ knockedLeg = leg; }
|
|
315
|
+
if ((knockedLeg2 == -1) && ((*(Barrier2_array + leg) - Spot) * cp_sign >= 0)){ knockedLeg2 = leg; }
|
|
316
|
+
|
|
317
|
+
if ((knockedLeg_dash == -1) && ((*(Barrier_array + leg) - Spot_dash) * cp_sign >= 0)){ knockedLeg_dash = leg; }
|
|
318
|
+
if ((knockedLeg2_dash == -1) && ((*(Barrier2_array + leg) - Spot_dash) * cp_sign >= 0)){ knockedLeg2_dash = leg; }
|
|
300
319
|
}
|
|
301
320
|
} else if(KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKIN || KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKOUT){
|
|
302
321
|
profit_loss = Spot;
|
|
@@ -566,9 +585,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
566
585
|
double equivalent_notional = *( Ns_array + knockedLeg );
|
|
567
586
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
|
568
587
|
} else {
|
|
588
|
+
pffm[sim_count] = knockedLeg2;
|
|
569
589
|
sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
|
|
570
590
|
}
|
|
571
591
|
} else if(knockedLeg2 >= 0){
|
|
592
|
+
pffm[sim_count] = knockedLeg2;
|
|
572
593
|
sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
|
|
573
594
|
} else if(knockedLeg >= 0) {
|
|
574
595
|
double equivalent_notional = *( Ns_array + knockedLeg );
|
|
@@ -749,8 +770,6 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
749
770
|
pvs_neg[sim_count] = sim_neg_sum;
|
|
750
771
|
pvs_neg[sim_count + 1] = sim_dash_neg_sum;
|
|
751
772
|
|
|
752
|
-
payoffmet[sim_count] = sim_pos_sum;
|
|
753
|
-
payoffmet[sim_count + 1] = sim_dash_pos_sum;
|
|
754
773
|
|
|
755
774
|
if (barrier_variations(KType)){
|
|
756
775
|
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
|
@@ -826,18 +845,19 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
826
845
|
}
|
|
827
846
|
}
|
|
828
847
|
|
|
829
|
-
|
|
830
|
-
VALUE py_final_metrics = rb_ary_new();
|
|
848
|
+
VALUE pffm_metrics = rb_ary_new();
|
|
831
849
|
for(metric = 0; metric < SCount; metric++) {
|
|
832
|
-
rb_ary_push(
|
|
850
|
+
rb_ary_push(pffm_metrics, DBL2NUM(pffm[metric]));
|
|
833
851
|
}
|
|
852
|
+
|
|
853
|
+
|
|
834
854
|
// rb_p(rb_str_new2("Generating output hash"));
|
|
835
855
|
VALUE final_pvs = rb_hash_new();
|
|
836
856
|
rb_hash_aset(final_pvs, rb_str_new2("positive_pv"), DBL2NUM( pvs_pos_sum / SCount ));
|
|
837
857
|
rb_hash_aset(final_pvs, rb_str_new2("negative_pv"), DBL2NUM( pvs_neg_sum / SCount ));
|
|
838
858
|
rb_hash_aset(final_pvs, rb_str_new2("total_pv"), DBL2NUM( (pvs_neg_sum + pvs_pos_sum) / SCount ));
|
|
839
859
|
rb_hash_aset(final_pvs, rb_str_new2("metrics"), final_metrics);
|
|
840
|
-
rb_hash_aset(final_pvs, rb_str_new2("
|
|
860
|
+
rb_hash_aset(final_pvs, rb_str_new2("testing"), pffm_metrics);
|
|
841
861
|
|
|
842
862
|
//
|
|
843
863
|
// free your arrays from memory once you're done using them
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tarf_monte_carlo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '3.
|
|
4
|
+
version: '3.66'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vivek Routh
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-10-
|
|
11
|
+
date: 2020-10-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
140
140
|
- !ruby/object:Gem::Version
|
|
141
141
|
version: '0'
|
|
142
142
|
requirements: []
|
|
143
|
-
rubygems_version: 3.0.
|
|
143
|
+
rubygems_version: 3.0.8
|
|
144
144
|
signing_key:
|
|
145
145
|
specification_version: 4
|
|
146
146
|
summary: Monte Carlo Simulation.
|