# NEOTICKER DATA BEGIN ScriptType=Indicator Description=Weighted Index Source Name=weighted_index_source Language=DelphiScript Links=1 MinBars=0 TimerInterval=100 EarlyBinding=0 MetaStyle=OHLC ValueRange=Same as Source Placement=Smart Multiplot_num_plots=4 Multiplot_color_0=255 Multiplot_style_0=Line Multiplot_width_0=1 Multiplot_enabled_0=1 Multiplot_breakstyle_0=0 Multiplot_color_1=255 Multiplot_style_1=Line Multiplot_width_1=1 Multiplot_enabled_1=1 Multiplot_breakstyle_1=0 Multiplot_color_2=255 Multiplot_style_2=Line Multiplot_width_2=1 Multiplot_enabled_2=1 Multiplot_breakstyle_2=0 Multiplot_color_3=255 Multiplot_style_3=Line Multiplot_width_3=1 Multiplot_enabled_3=1 Multiplot_breakstyle_3=0 UpdateByTick=0 TradingSystemUI=0 PrimaryLinkOnly=0 NotifyOnRemoval=0 Param_count=50 Param_name_0=Weight 1 Param_inuse_0=1 Param_type_0=string Param_default_0=MSFT,1 Param_name_1=Weight 2 Param_inuse_1=1 Param_type_1=string Param_default_1=INTC,1 Param_name_2=Weight 3 Param_inuse_2=1 Param_type_2=string Param_default_2=IBM,1 Param_name_3=Weight 4 Param_inuse_3=1 Param_type_3=string Param_name_4=Weight 5 Param_inuse_4=1 Param_type_4=string Param_name_5=Weight 6 Param_inuse_5=1 Param_type_5=string Param_name_6=Weight 7 Param_inuse_6=1 Param_type_6=string Param_name_7=Weight 8 Param_inuse_7=1 Param_type_7=string Param_name_8=Weight 9 Param_inuse_8=1 Param_type_8=string Param_name_9=Weight 10 Param_inuse_9=1 Param_type_9=string Param_name_10=Weight 11 Param_inuse_10=1 Param_type_10=string Param_name_11=Weight 12 Param_inuse_11=1 Param_type_11=string Param_name_12=Weight 13 Param_inuse_12=1 Param_type_12=string Param_name_13=Weight 14 Param_inuse_13=1 Param_type_13=string Param_name_14=Weight 15 Param_inuse_14=1 Param_type_14=string Param_name_15=Weight 16 Param_inuse_15=1 Param_type_15=string Param_name_16=Weight 17 Param_inuse_16=1 Param_type_16=string Param_name_17=Weight 18 Param_inuse_17=1 Param_type_17=string Param_name_18=Weight 19 Param_inuse_18=1 Param_type_18=string Param_name_19=Weight 20 Param_inuse_19=1 Param_type_19=string Param_name_20=Weight 21 Param_inuse_20=1 Param_type_20=string Param_name_21=Weight 22 Param_inuse_21=1 Param_type_21=string Param_name_22=Weight 23 Param_inuse_22=1 Param_type_22=string Param_name_23=Weight 24 Param_inuse_23=1 Param_type_23=string Param_name_24=Weight 25 Param_inuse_24=1 Param_type_24=string Param_name_25=Weight 26 Param_inuse_25=1 Param_type_25=string Param_name_26=Weight 27 Param_inuse_26=1 Param_type_26=string Param_name_27=Weight 28 Param_inuse_27=1 Param_type_27=string Param_name_28=Weight 29 Param_inuse_28=1 Param_type_28=string Param_name_29=Weight 30 Param_inuse_29=1 Param_type_29=string Param_name_30=Weight 31 Param_inuse_30=1 Param_type_30=string Param_name_31=Weight 32 Param_inuse_31=1 Param_type_31=string Param_name_32=Weight 33 Param_inuse_32=1 Param_type_32=string Param_name_33=Weight 34 Param_inuse_33=1 Param_type_33=string Param_name_34=Weight 35 Param_inuse_34=1 Param_type_34=string Param_name_35=Weight 36 Param_inuse_35=1 Param_type_35=string Param_name_36=Weight 37 Param_inuse_36=1 Param_type_36=string Param_name_37=Weight 38 Param_inuse_37=1 Param_type_37=string Param_name_38=Weight 39 Param_inuse_38=1 Param_type_38=string Param_name_39=Weight 40 Param_inuse_39=1 Param_type_39=string Param_name_40=Weight 41 Param_inuse_40=1 Param_type_40=string Param_name_41=Weight 42 Param_inuse_41=1 Param_type_41=string Param_name_42=Weight 43 Param_inuse_42=1 Param_type_42=string Param_name_43=Weight 44 Param_inuse_43=1 Param_type_43=string Param_name_44=Weight 45 Param_inuse_44=1 Param_type_44=string Param_name_45=Weight 46 Param_inuse_45=1 Param_type_45=string Param_name_46=Weight 47 Param_inuse_46=1 Param_type_46=string Param_name_47=Weight 48 Param_inuse_47=1 Param_type_47=string Param_name_48=Weight 49 Param_inuse_48=1 Param_type_48=string Param_name_49=Weight 50 Param_inuse_49=1 Param_type_49=string Explanation_Lines=0 # NEOTICKER DATA END function weighted_index_source : double; const data_count = 0; mapping_count = 1; data_mapping = 2; weight_mapping = 52; dataseries_mapping = 102; var pc, i, j, k, m, n, c : integer; s, u, v : string; my_o, my_h, my_l, my_c, total_w, w : double; ok : boolean; begin pc := params.count; if heap.size = 0 then begin c := 102 + dataseries.count; heap.allocate (c); heap.fill (0, c - 1, 0); c := 0; for i := 1 to pc do begin k := i - 1; s := params.items [i].str; j := pos (',', s); if j > 0 then begin u := tq_copy (s, j + 1, tq_length (s) - j); try heap.value [weight_mapping + k] := ntlib.str2double (u); inc (c); // valid mapping except heap.value [weight_mapping + k] := 0; heap.value [data_mapping + k] := -1; end; end else begin heap.value [data_mapping + k] := -1; // skip this entry next time end; end; heap.value [mapping_count] := c; end; k := trunc (heap.value [data_count]); c := trunc (heap.value [mapping_count]); if k < c then begin for i := 1 to pc do begin if heap.value [data_mapping + i - 1] = 0 then // not mapped yet begin // grab symbol s := params.items [i].str; j := pos (',', s); u := copy (s, 1, j - 1); u := uppercase (u); // search for symbol m := 0; for n := 1 to Dataseries.count do begin if heap.value [dataseries_mapping + n - 1] = 0 then begin v := dataseries.items [n].symbol; v := trim (v); v := uppercase (v); if v = u then begin m := n; break; end; end; end; if m > 0 then begin heap.value [data_mapping + i - 1] := m; heap.value [dataseries_mapping + m - 1] := 1; // mark data series as used inc (k); end; end; end; heap.value [data_count] := k; end; total_w := 0; my_o := 0; my_h := 0; my_l := 0; my_c := 0; ok := false; k := trunc (heap.value [data_count]); for i := 0 to pc - 1 do begin j := trunc (heap.value [data_mapping + i]); w := trunc (heap.value [weight_mapping + i]); if (j >= 1) and (j <= dataseries.count) then with dataseries.items [j] do if valid [0] then begin ok := true; my_o := my_o + open [0] * w; my_h := my_h + high [0] * w; my_l := my_l + low [0] * w; my_c := my_c + close [0] * w; total_w := total_w + w; end; end; if ok and (total_w <> 0) then begin itself.answer [1] := my_o / total_w; itself.answer [2] := my_h / total_w; itself.answer [3] := my_l / total_w; itself.answer [4] := my_c / total_w; end else begin itself.successex [1] := false; itself.successex [2] := false; itself.successex [3] := false; itself.successex [4] := false; end; end;