home *** CD-ROM | disk | FTP | other *** search
- # QTawk Trade Studies scoring function utility
- # Standard scoring functions for Trade Studies
- # 12 standard scoring functions
- #
- # Scoring function #1
- # ┌
- # │ 0 , V <= A
- # │
- # │ 1
- # ssf1 = │ ─────────────────────────────, V > A
- # │ ┌ ┐2S(B+V-2A) B > A
- # │ │ B - A │ S > 0
- # │ 1 + │───────│ f(B) = 0.5
- # └ └ V - A ┘
- #
- # Scoring function #2
- # ┌
- # │ 1 , V >= C
- # │
- # │ 1
- # ssf2 = │ ─────────────────────────────, V < C
- # │ ┌ ┐2S(B+V-2C) B < C
- # │ │ C - B │ S > 0
- # │ 1 + │───────│ f(B) = 0.5
- # └ └ C - V ┘
- #
- # Scoring function #3
- # ┌
- # │ 0 , V <= A
- # │
- # │ 1
- # │ ─────────────────────────────, A < V < B
- # │ ┌ ┐2S(B+V-2A) S > 0
- # │ │ B - A │
- # │ 1 + │───────│
- # ssf3 = │ └ V - A ┘
- # │ f(B) = 0.5
- # │ 1
- # │ ─────────────────────────────, B < V < C
- # │ ┌ ┐2S(B+V-2C) B < C
- # │ │ C - B │ S > 0
- # │ 1 + │───────│
- # │ └ C - V ┘
- # │
- # │ 1 , V >= C
- # └
- #
- # Scoring function #4
- # ┌
- # │ 1
- # │ ─────────────────────────────, V <= B
- # │ ┌ ┐2S(B+V-2A) S > 0
- # │ │ B - A │
- # │ 1 + │───────│
- # ssf4 = │ └ V - A ┘
- # │ f(B) = 0.5
- # │ 1
- # │ ─────────────────────────────, V > 0
- # │ ┌ ┐2S(B+V-2C) S > 0
- # │ │ C - B │
- # │ 1 + │───────│
- # │ └ C - V ┘
- # └
- #
- # Scoring function #5
- # ┌
- # │ 0 , V <= A1
- # │
- # │ 1 A1 < V < B1
- # │ ─────────────────────────────── S1 > 0
- # │ ┌ ┐2S1(B1+V-2A1)
- # │ │ B1 - A1 │
- # │ │ ────────│ f(B1) = 0.5
- # │ └ V - A1 ┘
- # │
- # │ 1 B1 < V < C
- # │ ─────────────────────────────── S1 > 0
- # │ ┌ ┐2S1(B1+V-2C)
- # │ │ C - B1│
- # │ │ ──────│
- # │ └ C - V ┘
- # │
- # ssf5 = │ 1 , V = C
- # │
- # │ 1 C < V < B2
- # │ ─────────────────────────────── S2 < 0
- # │ ┌ ┐2S2(B2+V-2C)
- # │ │ B2 - C │
- # │ │ ───────│
- # │ └ V - C ┘ f(B2) = 0.5
- # │
- # │ 1 B2 < V < A2
- # │ ─────────────────────────────── S2 < 0
- # │ ┌ ┐2S2(B2+V-2A2)
- # │ │ A2 - B2│
- # │ │ ───────│
- # │ └ A2 - V ┘
- # │
- # │ 0 , V = A2
- # └
- #
- # Scoring function #6
- # ┌
- # │ 1 V <= B1
- # │ ─────────────────────────────── S1 > 0
- # │ ┌ ┐2S1(B1+V-2A1)
- # │ │ B1 - A1 │
- # │ │ ────────│ f(B1) = 0.5
- # │ └ V - A1 ┘
- # │
- # │ 1 B1 < V < C
- # │ ─────────────────────────────── S1 > 0
- # │ ┌ ┐2S1(B1+V-2C)
- # │ │ C - B1│
- # │ │ ──────│
- # │ └ C - V ┘
- # │
- # ssf6 = │ 1 , V = C
- # │
- # │ 1 C < V < B2
- # │ ─────────────────────────────── S2 < 0
- # │ ┌ ┐2S2(B2+V-2C)
- # │ │ B2 - C │
- # │ │ ───────│
- # │ └ V - C ┘ f(B2) = 0.5
- # │
- # │ 1 B2 < V
- # │ ─────────────────────────────── S2 < 0
- # │ ┌ ┐2S2(B2+V-2A2)
- # │ │ A2 - B2│
- # │ │ ───────│
- # │ └ A2 - V ┘
- # └
- #
- # Scoring function #7
- # ┌
- # │ 1 , V <= A
- # │
- # │ 1
- # ssf7 = │ ─────────────────────────────, V > A
- # │ ┌ ┐2S(B+V-2A) B > A
- # │ │ B - A │ S < 0
- # │ 1 + │───────│ f(B) = 0.5
- # │ └ V - A ┘
- # └
- #
- # Scoring function #8
- # ┌
- # │ 1
- # │ ─────────────────────────────, V < C
- # │ ┌ ┐2S(B+V-2C) B < C
- # ssf8 = │ │ C - B │ S > 0
- # │ 1 + │───────│ f(B) = 0.5
- # │ └ C - V ┘
- # │
- # │ 1 , V >= C
- # └
- #
- # Scoring function #9
- # ┌
- # │ 1 , V <= A
- # │
- # │ 1
- # │ ─────────────────────────────, A < V <= B
- # │ ┌ ┐2S(B+V-2A) S < 0
- # │ │ B - A │
- # │ 1 + │───────│
- # │ └ V - A ┘
- # ssf9 = │ f(B) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────, B < V < C
- # │ ┌ ┐2S(B+V-2C) S > 0
- # │ │ C - B │
- # │ 1 + │───────│
- # │ └ C - V ┘
- # │
- # │ 0 , V >= C
- # └
- #
- # Scoring function #10
- # ┌
- # │ 1
- # │ ─────────────────────────────, V <= B
- # │ ┌ ┐2S(B+V-2A) S < 0
- # │ │ B - A │
- # │ 1 + │───────│
- # │ └ V - A ┘
- # ssf10 = │ f(B) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────, V > B
- # │ ┌ ┐2S(B+V-2C) S > 0
- # │ │ C - B │
- # │ 1 + │───────│
- # │ └ C - V ┘
- # └
- #
- # Scoring function #11
- # ┌
- # │ 1 , V <= A1
- # │
- # │ 1
- # │ ─────────────────────────────── A1 < V <= B1
- # │ ┌ ┐2S1(B1+V-2A1) S1 < 0
- # │ │ B1 - A1 │
- # │ │ ────────│
- # │ └ V - A1 ┘ f(B1) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────── B1 < V < C
- # │ ┌ ┐2S1(B1+V-2C) S1 < 0
- # │ │ C - B1│
- # │ │ ──────│
- # │ └ C - V ┘
- # │
- # ssf11 = │ 0 , V = C
- # │
- # │ 1
- # │ ─────────────────────────────── C < V <= B2
- # │ ┌ ┐2S2(B2+V-2C) S2 > 0
- # │ │ B2 - C │
- # │ │ ───────│
- # │ └ V - C ┘ f(B2) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────── B2 < V < A2
- # │ ┌ ┐2S2(B2+V-2A2) S2 > 0
- # │ │ A2 - B2│
- # │ │ ───────│
- # │ └ A2 - V ┘
- # │ 1 , V >= A2
- # └
- #
- # Scoring function #12
- # ┌
- # │ 1
- # │ ─────────────────────────────── V <= B1
- # │ ┌ ┐2S1(B1+V-2A1) S1 < 0
- # │ │ B1 - A1 │
- # │ │ ────────│
- # │ └ V - A1 ┘ f(B1) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────── B1 < V < C
- # │ ┌ ┐2S1(B1+V-2C) S1 < 0
- # │ │ C - B1│
- # │ │ ──────│
- # │ └ C - V ┘
- # │
- # ssf12 = │ 0 , V = C
- # │
- # │ 1
- # │ ─────────────────────────────── C < V <= B2
- # │ ┌ ┐2S2(B2+V-2C) S2 > 0
- # │ │ B2 - C │
- # │ │ ───────│
- # │ └ V - C ┘ f(B2) = 0.5
- # │
- # │ 1
- # │ ─────────────────────────────── B2 < V
- # │ ┌ ┐2S2(B2+V-2A2) S2 > 0
- # │ │ A2 - B2│
- # │ │ ───────│
- # │ └ A2 - V ┘
- # └
- #
- #
- BEGIN {
- stderr = "stderr";
- }
-
- function std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2) {
- local ssf;
-
- switch ( fnum ) {
- case 1:
- ssf = ssf1(A1,B1,C,V,S1);
- break;
- case 2:
- ssf = ssf2(A1,B1,C,V,S1);
- break;
- case 3:
- ssf = ssf3(A1,B1,C,V,S1);
- break;
- case 4:
- ssf = ssf4(A1,B1,C,V,S1);
- break;
- case 5:
- ssf = ssf5(A1,A2,B1,B2,C,V,S1,S2);
- break;
- case 6:
- ssf = ssf6(A1,A2,B1,B2,C,V,S1,S2);
- break;
- case 7:
- ssf = ssf7(A1,B1,C,V,S1);
- break;
- case 8:
- ssf = ssf8(A1,B1,C,V,S1);
- break;
- case 9:
- ssf = ssf9(A1,B1,C,V,S1);
- break;
- case 10:
- ssf = ssf10(A1,B1,C,V,S1);
- break;
- case 11:
- ssf = ssf11(A1,A2,B1,B2,C,V,S1,S2);
- break;
- case 12:
- ssf = ssf12(A1,A2,B1,B2,C,V,S1,S2);
- break;
- default:
- fprintf(stderr,"Improper Standard Scoring Function Number.\n");exit 100;
- break;
- }
- return ssf;
- }
-
- function ssf1(A,B,C,V,S) {
- local ssf;
-
- if ( V <= A ) ssf = 0;
- else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- return ssf;
- }
-
- function ssf2(A,B,C,V,S) {
- local ssf;
-
- if ( V >= C ) ssf = 1;
- else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- return ssf;
- }
-
- function ssf3(A,B,C,V,S) {
- local ssf;
-
- if ( V <= A ) ssf = 0;
- else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- else ssf = 1;
- return ssf;
- }
-
- function ssf4(A,B,C,V,S) {
- local ssf;
-
- if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- return ssf;
- }
-
- function ssf5(A1,A2,B1,B2,C,V,S1,S2) {
- local ssf;
-
- if ( V <= A1 ) ssf =0;
- else if ( V < B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
- else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
- else if ( V == C) ssf = 1;
- else if ( V < B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
- else if ( V < A2 ) ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
- else ssf = 0;
- return ssf;
- }
-
- function ssf6(A1,A2,B1,B2,V,C,S1,S2) {
- local ssf;
-
- if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
- else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
- else if ( V == C ) ssf = 0;
- else if ( V < B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
- else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
- return ssf;
- }
-
- function ssf7(A,B,V,C,S) {
- local ssf;
-
- if ( V <= A ) ssf = 0;
- else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- return ssf;
- }
-
- function ssf8(A,B,C,V,S) {
- local ssf;
-
- if ( V <= A ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- else ssf = 0;
- return ssf;
- }
-
- function ssf9(A,B,C,V,S) {
- local ssf;
-
- if ( V <= A ) ssf = 0;
- else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- else ssf = 0;
- return ssf;
- }
-
- function ssf10(A,B,C,V,S) {
- local ssf;
-
- if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
- else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
- return ssf;
- }
-
- function ssf11(A1,A2,B1,B2,C,V,S1,S2) {
- local ssf;
-
- if ( V <= A1 ) ssf = 1;
- else if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
- else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
- else if ( V == C ) ssf = 0;
- else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
- else if ( V < A2 ) ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
- else ssf = 1;
- return ssf;
- }
-
- function ssf12(A1,A2,B1,B2,C,V,S1,S2) {
- local ssf;
-
- if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
- else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
- else if ( V == C ) ssf = 0;
- else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
- else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
- return ssf;
- }
-
- function ssf_prime(fnum,A1,A2,B1,B2,C,V,S1,S2) {
- local ssfp = TRUE;
- local k1, k2, k3, k4;
- local i1, i2;
- local ssf = std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2);
-
- switch ( fnum ) {
- case 1:
- if ( V <= A1 ) ssfp = 0;
- else {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- }
- break;
- case 2:
- if ( V >= C ) ssfp = 0;
- else {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- }
- break;
- case 3:
- if ( V <= A1 ) ssfp = 0;
- else if ( V <= B1 ) {
- k1 = B1-A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else if ( V < C ) {
- k1 = B1-C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else ssfp = 0;
- break;
- case 4:
- if ( V <= B1 ) {
- k1 = B1-A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else {
- k1 = B1-C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B;
- }
- break;
- case 5:
- if ( V <= A1 ) ssfp = 0;
- else if ( V <= B1 ) {
- k1 = B1-A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else if ( V < C ) {
- k1 = B1-C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else if ( V == C ) ssfp = 0;
- else if ( V <= B2 ) {
- k1 = B2-C;
- k2 = A2;
- k3 = -2*S2;
- k4 = 4*S2*C-2*S2*B2;
- } else if ( V < A2 ) {
- k1 = B2-A2;
- k2 = A2;
- k3 = -2*S2;
- k4 = 4*S2*A2-2*S2*B2;
- } else ssfp = 0;
- break;
- case 6:
- if ( V <= B1 ) {
- k1 = B1-A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else if ( V < C ) {
- k1 = B1-C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else if ( V == C ) ssfp = 0;
- else if ( V <= B2 ) {
- k1 = B2-C;
- k2 = C;
- k3 = -2*S2;
- k4 = 4*S2*C-2*S2*B2;
- } else {
- k1 = B2-A2;
- k2 = A2;
- k3 = -2*S2;
- k4 = 4*S2*A2-2*S2*B2;
- }
- break;
- case 7:
- if ( V <= A1 ) ssfp = 0;
- else {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- }
- break;
- case 8:
- if ( V < C ) {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else ssfp = 0;
- break;
- case 9:
- if ( V <= A1 ) ssfp = 0;
- else if ( V <= B1 ) {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- }
- break;
- case 10:
- if ( V <= B1 ) {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- }
- break;
- case 11:
- if ( V <= A1 ) ssfp = 0;
- else if ( V <= B1 ) {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else if ( V < C ) {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else if ( V == C ) ssfp = 0;
- else if ( V <= B2 ) {
- k1 = B2 - C;
- k2 = C;
- k3 = -2*S2;
- k4 = 4*S2*C-2*S2*B2;
- } else if ( V < A2 ) {
- k1 = B2 - A2;
- k2 = A2;
- k3 = -2*S2;
- k4 = 4*S2*A2-2*S2*B2;
- } else ssfp = 0;
- break;
- case 12:
- if ( V <= B1 ) {
- k1 = B1 - A1;
- k2 = A1;
- k3 = -2*S1;
- k4 = 4*S1*A1-2*S1*B1;
- } else if ( V < C ) {
- k1 = B1 - C;
- k2 = C;
- k3 = -2*S1;
- k4 = 4*S1*C-2*S1*B1;
- } else if ( V == C ) ssfp = 0;
- else if ( V <= B2 ) {
- k1 = B2 - C;
- k2 = C;
- k3 = -2*S2;
- k4 = 4*S2*C-2*S2*B2;
- } else if ( V < A2 ) {
- k1 = B2 - A2;
- k2 = A2;
- k3 = -2*S2;
- k4 = 4*S2*A2-2*S2*B2;
- } else ssfp = 0;
- break;
- }
- if ( ssfp ) {
- i1 = k3*V+k4;
- i2 = (1/ssf)-1;
- ssfp = -ssf*ssf*(i1/k1)*i2^(1-1/i1)+k3*(log(i2)^(1/i1)+i2);
- }
- return ssfp;
- }
-