2006 Dec 29 - Fri
Emailing Call Detail Records
In a number of earlier blog entries, I developed and posted a Perl script named ciscowatcher.pl. The script attaches to a Linux based
Syslog service and listens for Cisco device generated syslog messages.
One of the messages listened for is the %VOIPAAA-5-VOIP_CALL_HISTORY message generated by H.323 voice
gateways. The script generates two Postgresql database files. One is a raw data file called calllog,
which contains call-leg information, one call-leg is a voip leg and the other leg is a PSTN leg. With
those two legs, one can determine the calling party and the called party. The script generates the
database table called cdr from these two pieces of information.
This information is useful for Cisco Telephone Solutions based upon Cisco Unified Callmanager Express
Systems, which do not have a real Call Detail Record capability.
Even for organizations with Cisco's Callmanager Solution, getting Call Detail Records can be a problem
sometimes because of the way the SQL service is authenticated.
To tie the bow on this situation, I've added a Perl script called sendcdr.pl. It takes the information form the cdr table, formats it, and writes it out
as an Excel spreadsheet file using the Spreadsheet::WriteExcel Perl Module from CPAN. The Spreadsheet module is surprisingly
powerful in that it can provide bolded and centered column headers as well as properly formatted date/time
stamps.
Once the spreadsheet file is generated, it is then emailed using the Mail::Sender Perl
Module, also from CPAN.
By placing the script into a cron job entry, call details records can be automatically emailed on a
regular basis. The only thing missing is a utility to purge call detail records once they have been
emitted. That will be a subject for my next revision.
[/OpenSource/Debian/Monitoring]
permanent link
2006 Dec 28 - Thu
Interim getDevConfig Files for Cricket
I've made some further modifications to the Acktomic's genDevConfig files. One fix was to get the H.323 dial-peers to show with current
versions of Cisco's IOS. I've also added some target-type code so that the various errored-second counters on
the T1 interfaces in Cisco's VWIC modules can be displayed.
On the T1 controllers, the following counters are available from the 'current counter' set, and are shown as
guages:
- dsx1CurrentESs: Errored Seconds
- dsx1CurrentSESs: Severely Errored Seconds
- dsx1CurrentSEFSs: Severely Errored Framing Seconds
- dsx1CurrentUASs: Unavailable Seconds
- dsx1CurrentCSSs: Controlled Slip Seconds
- dsx1CurrentPCVs: Path Coding Violations
- dsx1CurrentLESs: Line Errored Seconds
- dsx1CurrentBESs: Bursty Errored Seconds
- dsx1CurrentDMs: Degraded Minutes
- dsx1CurrentLCVs: Line Code Violations
My earlier instructions have a section on replacing various lines. Rather than go through that
again, here are the files that need to be replaced:
Francois from Acktomic will be incorporating these changes into his version. I'll post an update when his
collection has been updated.
Here is a slightly revised command line for scanning voice gateways. There are two additional interace types
that are ignored. The line also shows how to turn on some debugging statements to see what else is performed.
/usr/share/cricket/util/genDevConfig -2 -c snmpro --vendorint --loglevel debug --voip -d 22,81,101 vgw01
[/OpenSource/Debian/Monitoring/Cricket]
permanent link
2006 Dec 26 - Tue
Book: New Trading Systems and Methods, by Perry J. Kaufman
Many people refer to the Achelis book for simple, straight-forward descriptions of technical analysis tools. I too have it on
my primary bookshelf. However, lately, more often than not, I find myself reaching for Kaufman's book to get good background on
the various ways of technically analysing trading options. Kaufman has chapters devoted to practically every indicator type you
may
encounter: chart reading, events, regressions, trending, momentum, oscillators, seasonality, cycles, patterns, multiple time
frames, and advanced techniques. He then goes into some details regarding system testing, practical considerations, risk
control, and diversification. As a wrap up, he provides some end-notes for the mathematically inclined.
There appear to be traders who will sit at their screen all day and watch for pattern based setups. It appears that many traders
fall into this category, and the book is not for them.
Notes and blogs regarding people who do automated trading appear to be
few and far between. In any
case, this book is for the analytical crowd who need to prepare for the day's manual trades. It is also for
the automated crowd who need the computer to do all the trading 'by-the-rules' in order to eliminate all forms of emotion from the
trade.
I think you'll find a wealth of ideas you can mix and match to make a trading strategy
uniquely your own.
Technical anlysis and automated trading strategy design takes much work and energy. A good chunk of statistics is
practically mandatory (which the book does provide in various sections). This book fulfills only a portion of the overall
knowledge someone will need build a winning trading strategy. Trader phsychology and money management skills will need to be
learned elsewhere.
I'll give the book two thumbs up as it provides excellent details on the spectrum of technical analysis and provides
references for
the times you wish to flesh out the details. Mr. Kaufman must have a most amazing technical library, based upon the breadth and
depth of descriptions, references, and citations he uses.
[/Trading/TechnicalAnalysis]
permanent link
2006 Dec 24 - Sun
Merrill Patterns
On page 94 of Bollinger's Book: Bollinger on Bollinger Bands, he talks
about
matching various tradeable patterns developed by Arthur Merrill. In an
earlier article on Peak Matching, I provided some code to match chart trading peaks
and
valleys in real-time. By using that code in addition to my Merrill Pattern Matcher code,
Aurther Merrill's patterns can be computed live during a trading session. The PeakMatch code stores it's values in a DoubleSeries array from which the
MerrillPattern code uses the last five values to compute the pattern. Then based upon the analysis provided in Bollinger's book and Merrill's book, one
can use the information to influence trading styles.
The code is built upon a table driven decision format, which in turn is based upon the observation that Merrill's patterns can be described within a
5x5 grid where each of five peaks/valleys will fall into unique row. The rows are numbered 1 through 5. With five rows, there are 2 to the 5
combinations, ie, 32 combinations.
A set of five points is classified by placing the price point and an index into a sorted array. The concatenation of the sorted indexes is used to
generate 'key' to be used in looking for the pattern in the pattern list.
[/Trading/SmartQuant/Articles]
permanent link
2006 Dec 23 - Sat
IQFeed Provider for SmartQuant
I've recompiled the IQFeed
Utilities to run with QD 2.3.3 and DC 2.1.5. The OneUnified.IQfeed.dll file is used for
linking up to IQFeed for obtaining real-time Quote/Trade/Depth streams for QuantDeveloper.
The IHistory interface, is as of yet, still unimplemented. I'll see about rectifying
that over the Chrismas Break. Hopefully.
The IQFeed client I'm currently using is
IQFeed Client 4.2.0.2.
In the zip file is a test program called ticker.exe. It provides visibility into
real-time data in three formats:
- A Level I ticker tape stream modelled upon Thomas Carr's 'The Tape-Reading Edge' in
July 2005's issue of Technical Analysis of Stocks and Commodities.
- A Level II chart showing buy-side and sell-side Market Makers.
- A Level II price chart modelled after Interactive Brokers book chart.
IQFeed provides Level II data only on Nasdaq traded instruments.
One usage note, I'm not certain if I've done the simple thing of converting symbols into
upper case yet in the ticker program, so you may need to enter them manually as upper-case
before clicking on one of the buttons on the left hand menu.
In the ticker program, when viewing the Level II price action, there is one bug which
occurs when the Bid overlaps the Ask. The overlapped level will show price counts incorrectly.
[/Trading/SmartQuant/Articles]
permanent link
SmartQuant QuantDeveloper & DataCenter Release
The update meant for 'mid-week' didn't get posted till week-end.
SmartQuant has released revisions to
DataCenter and
QuantDeveloper. They are at the following revision levels:
DataCenter
Version 2.1.5 (22-Dec-2006)
QuantDeveloper Enterprise Edition
Version 2.3.3 (22-Dec-2006)
QuantDeveloper source code.
Version 2.3.2 (13-Dec-2006)
[/Trading/SmartQuant/Releases]
permanent link
2006 Dec 22 - Fri
Cisco Syslog Additions
I have once again updated ciscowatcher.pl.
A couple of primary additions:
- Watches for and emails on changes of the '%CONTROLLER-5-UPDOWN' event (for VWICs and such).
- Added a table to record Controller up/down events and current status
- Updated the database schema to generate Call Detail Records from
Cisco H.323 gateway events
- Fixed a problem when processing certain VOIPAAA-5-VOIP_CALL_HISTORY records containing an extra ','
[/OpenSource/Debian/Monitoring]
permanent link
VRF-lite (VRF's without MPLS)
VRF-lite (Virtual Routing & Forwarding) is a handy construct for keeping data segregated
within a network. It can be thought of as kind of a meta-VLAN thing.
At one customer site, who has a number of branch offices, has a Cisco Callmanager
solution spanning those sites. Each site has an internet connection. Three sites are in a
single metro area and are linked with metro-links as well as tunnels. A fourth site is in
another country. The three sites are linked to the fourth site through IPSEC tunnels. Four
different providers are used.
From a real usage perspective, there are six tunnels of consequence: the three tunnels
from the metro area to the single site, and the three return tunnels from the single site to
the three grouped metro sites. Each of those six tunnels can be categorized in terms of a
voice quality metric.
The design puzzle was to come up with a mechanism to route data across a set of tunnels
and route voice across a different set of tunnels, in order to make best use of
measured delay, jitter, and loss metrics. Using Policy Based Routing (PBR) was one solution
but was rejected due to its scaleability problems (ie, lack thereof).
The idea that was finally implemented was to use VRF's to segregate voice from data, but
still allow one to get to the other. The design yielded side benefits: provided a method to keep guest
traffic separate, allows a method to get external addresses to different parts of the network, and
provided a mechanism to improve secure access to network devices.
VRF's allow a routing process per VRF, thus facilitating the use of routing's built in
automated route selection and fail-over. And by assigning costs to certain routes, those
routes can be prioritized by whatever criteria you choose.
As indicated by another auditing consultant, the configuration does turn complex, but no
suitable alternative solution was offered, which says something in itself. Perhaps others
can offer up something better, I am open to suggestions.
In the example, 192.18.x.x addresses simulate external addresses, and 192.168.x.x
simulate internal addresses. Interface s0/0/0 is the external internet interface, f0/0 is
a trunked interface to the interior network, and f0/1 is an interface to the firewall
As you can see, there is an OSPF routing process per VRF, thus facilitating independant routing of
each traffic type.
The example incorporates a bunch of features
I've encountered in my searches in Cisco's documentation sites, Cisco's forums, Cisco's TAC, as well as
Cisco's 'Implementing MPLS VPN' two volume book set.
The example highlights a number of functions:
- make internet connected links a member of an external vrf (vrfExterior)
- external addresses can therefore be routed between buildings and providers
- external addresses can therefore cross pollinate firewalls as a measure of redundancy
- make internal links members of the global routing table with RFC1918 addresses
- external addresses are kept separate from internal addresses
- allows flexible use of equipment when hardware budgets are restricted
- IPSEC encrypted tunnels are can carry VRF's between sites
- each inter-site tunnel requires a separate loopback (per Cisco's docs)
- a Guest VRF is kept totally separate from the Corporate Voice and Data networks
- Multiprotocol BGP is used route between vrfData and vrfVoice
- special attention must be paid to the redistribution statements to make best use of
OSPF internal, external 1 and external 2 routes (external 2 is not redistributed)
- with careful redistribution, 'sho ip ospf vrf vrfVoice' shows which routes originate
in the vrf and which originate outside, which facilitates troubleshooting and documentation
- some will argue that carrying guest traffic on the corporate hardware is a no-no, how
do others feel about that?
If you have comments on how to improve the configuration, I'm all ears.
I hope this helps others to come up to speed with how VRF-lite can become a part of
everyone's routing/switching toolset. And of course, I'm always open to consulting gigs if
anyone would like some assistance.
!
ip cef
!
ip vrf vrfData
description Server, Workstation, Printer data
rd 65400:300
route-target export 65400:300
route-target import 65400:300
route-target import 65400:400
!
ip vrf vrfExterior
description Exterior BGP routed data
rd 65400:200
route-target export 65400:200
route-target import 65400:200
!
ip vrf vrfGuest
description Guest Wireless & Wired
rd 65400:500
route-target export 65400:500
route-target import 65400:500
!
ip vrf vrfVoice
description Voice Servers, Phones & Gateways
rd 65400:400
route-target export 65400:400
route-target import 65400:400
route-target import 65400:300
!
!
crypto keyring key4Exterior vrf vrfExterior
pre-shared-key address 0.0.0.0 0.0.0.0 key
!
crypto isakmp policy 10
encr aes
authentication pre-share
group 2
!
crypto ipsec transform-set transForTunnels esp-aes esp-sha-hmac
mode transport
!
crypto ipsec profile profForTunnels
set transform-set transForTunnels
!
interface Loopback10000
description OSPF ID
ip address 192.168.5.254 255.255.255.255
!
interface Loopback10001
description eBGP ID
ip vrf forwarding vrfExterior
ip address 192.18.164.191 255.255.255.255
!
interface Loopback10011
description Global Routing
ip vrf forwarding vrfExterior
ip address 192.18.10.1 255.255.255.255
!
interface Loopback10012
description vrfExterior
ip vrf forwarding vrfExterior
ip address 192.18.10.2 255.255.255.255
!
interface Loopback10013
description vrfData
ip vrf forwarding vrfExterior
ip address 192.18.10.3 255.255.255.255
!
interface Loopback10014
description vrfVoice
ip vrf forwarding vrfExterior
ip address 192.18.10.4 255.255.255.255
!
interface Loopback20000
ip vrf forwarding vrfExterior
ip address 192.168.5.224 255.255.255.255
!
interface Loopback30000
ip vrf forwarding vrfData
ip address 192.168.5.225 255.255.255.255
!
interface Loopback40000
ip vrf forwarding vrfVoice
ip address 192.168.5.226 255.255.255.255
!
interface Loopback50000
ip vrf forwarding vrfGuest
ip address 192.168.5.227 255.255.255.255
!
interface Tunnel100101
description Global Building1 - Building2
bandwidth 1000
ip address 192.168.5.69 255.255.255.252
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
ip ospf mtu-ignore
load-interval 30
qos pre-classify
keepalive 10 3
tunnel source Loopback10011
tunnel destination 192.18.20.1
tunnel mode ipsec ipv4
tunnel vrf vrfExterior
tunnel protection ipsec profile profForTunnels
max-reserved-bandwidth 100
service-policy output pmShapeTunnels
!
!
interface Tunnel200101
description vrfExterior Building1 - Building2
bandwidth 1000
ip vrf forwarding vrfExterior
ip address 192.168.5.77 255.255.255.252
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
ip ospf mtu-ignore
load-interval 30
qos pre-classify
keepalive 10 3
tunnel source Loopback10012
tunnel destination 192.18.20.2
tunnel mode ipsec ipv4
tunnel vrf vrfExterior
tunnel protection ipsec profile profForTunnels
max-reserved-bandwidth 100
service-policy output pmShapeTunnels
!
interface Tunnel300101
description vrfData Building1 - Building2
bandwidth 1000
ip vrf forwarding vrfData
ip address 192.168.5.65 255.255.255.252
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
ip ospf mtu-ignore
load-interval 30
qos pre-classify
keepalive 10 3
tunnel source Loopback10013
tunnel destination 192.18.20.3
tunnel mode ipsec ipv4
tunnel vrf vrfExterior
tunnel protection ipsec profile profForTunnels
max-reserved-bandwidth 100
service-policy output pmShapeTunnels
!
interface Tunnel400101
description vrfVoice Building1 - Building2
bandwidth 1000
ip vrf forwarding vrfVoice
ip address 192.168.5.73 255.255.255.252
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
ip ospf mtu-ignore
load-interval 30
qos pre-classify
keepalive 10 3
tunnel source Loopback10014
tunnel destination 192.18.20.4
tunnel mode ipsec ipv4
tunnel vrf vrfExterior
tunnel protection ipsec profile profForTunnels
max-reserved-bandwidth 100
service-policy output pmShapeTunnels
!
interface Null0
no ip unreachables
!
interface FastEthernet0/0
no ip address
ip route-cache flow
load-interval 30
duplex auto
speed auto
service-policy output pmFastEthernet
!
interface FastEthernet0/0.199
description Global Routing
encapsulation dot1Q 199
ip address 192.168.5.26 255.255.255.248
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
!
interface FastEthernet0/0.299
description vrfExterior
encapsulation dot1Q 299
ip vrf forwarding vrfExterior
ip address 192.168.5.106 255.255.255.248
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
!
interface FastEthernet0/0.399
description vrfData
encapsulation dot1Q 399
ip vrf forwarding vrfData
ip address 192.168.5.34 255.255.255.248
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
!
interface FastEthernet0/0.499
description vrfVoice
encapsulation dot1Q 499
ip vrf forwarding vrfVoice
ip address 192.168.5.122 255.255.255.248
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
!
interface FastEthernet0/0.599
description vrfGuest
encapsulation dot1Q 599
ip vrf forwarding vrfGuest
ip address 192.168.5.130 255.255.255.248
ip ospf authentication message-digest
! ip ospf message-digest-key 1 md5
!
interface FastEthernet0/1
description to Firewall
ip vrf forwarding vrfExterior
ip address 192.18.10.11 255.255.255.248
ip route-cache flow
load-interval 30
duplex auto
speed auto
no cdp enable
service-policy output pmFastEthernet
!
interface Serial0/0/0:0
description Internet Access
no ip address
encapsulation frame-relay IETF
ip route-cache flow
load-interval 30
frame-relay lmi-type ansi
max-reserved-bandwidth 100
service-policy output pmShapeSerialInterface
!
interface Serial0/0/0:0.1 point-to-point
description Frame Relay to internet
ip vrf forwarding vrfExterior
ip address 192.18.10.33 255.255.255.252
ip access-group aclBlockInbound in
ip access-group aclBlockOutbound out
ip verify unicast reverse-path
no ip redirects
no ip unreachables
no ip proxy-arp
no cdp enable
frame-relay interface-dlci 170 IETF
!
router ospf 200 vrf vrfExterior
router-id 192.168.5.224
log-adjacency-changes
auto-cost reference-bandwidth 10000
capability vrf-lite
passive-interface FastEthernet0/1
passive-interface Serial0/0/0:0.1
passive-interface Loopback10001
passive-interface Loopback10011
passive-interface Loopback10012
passive-interface Loopback10013
passive-interface Loopback10014
passive-interface Loopback20000
network 192.168.5.56 0.0.0.7 area 0
network 192.168.5.76 0.0.0.3 area 0
network 192.168.5.92 0.0.0.3 area 0
network 192.168.5.104 0.0.0.7 area 0
network 192.168.5.224 0.0.0.0 area 0
network 192.168.197.36 0.0.0.3 area 0
!
router ospf 300 vrf vrfData
router-id 192.168.5.225
log-adjacency-changes
auto-cost reference-bandwidth 10000
capability vrf-lite
redistribute bgp 65400 metric 120 subnets
passive-interface Loopback30000
network 192.168.5.32 0.0.0.7 area 0
network 192.168.5.64 0.0.0.3 area 0
network 192.168.5.80 0.0.0.3 area 0
network 192.168.5.112 0.0.0.7 area 0
network 192.168.5.225 0.0.0.0 area 0
network 192.168.197.40 0.0.0.3 area 0
!
router ospf 400 vrf vrfVoice
router-id 192.168.5.226
log-adjacency-changes
auto-cost reference-bandwidth 10000
capability vrf-lite
redistribute bgp 65400 metric 120 subnets
passive-interface Loopback40000
network 192.168.5.48 0.0.0.7 area 0
network 192.168.5.72 0.0.0.3 area 0
network 192.168.5.88 0.0.0.3 area 0
network 192.168.5.120 0.0.0.7 area 0
network 192.168.5.226 0.0.0.0 area 0
network 192.168.197.44 0.0.0.3 area 0
default-information originate always
!
router ospf 500 vrf vrfGuest
router-id 192.168.5.227
log-adjacency-changes
auto-cost reference-bandwidth 10000
capability vrf-lite
passive-interface Loopback50000
network 192.168.5.40 0.0.0.7 area 0
network 192.168.5.68 0.0.0.3 area 0
network 192.168.5.84 0.0.0.3 area 0
network 192.168.5.128 0.0.0.7 area 0
network 192.168.5.227 0.0.0.0 area 0
!
router ospf 100
log-adjacency-changes
auto-cost reference-bandwidth 10000
passive-interface Loopback10000
network 192.168.5.4 0.0.0.3 area 0
network 192.168.5.16 0.0.0.3 area 0
network 192.168.5.20 0.0.0.3 area 0
network 192.168.5.24 0.0.0.7 area 0
network 192.168.5.68 0.0.0.3 area 0
network 192.168.5.80 0.0.0.7 area 0
network 192.168.5.254 0.0.0.0 area 0
network 192.168.197.32 0.0.0.3 area 0
!
router bgp 65400
no synchronization
bgp router-id 192.18.164.191
bgp log-neighbor-changes
no auto-summary
!
address-family ipv4 vrf vrfVoice
redistribute ospf 400 vrf vrfVoice
no synchronization
exit-address-family
!
address-family ipv4 vrf vrfData
redistribute ospf 300 vrf vrfData match internal external 1
no synchronization
exit-address-family
!
end
[/Cisco]
permanent link
2006 Dec 21 - Thu
Scalping, Elite Trader, and Range Bars
On the Elite Trader Forums, a poster
that goes by the moniker of yoohoo has quite a few useful things to say about
scalping.
Scalping is definitely an intraday activity. One attempts to capture small movements in
the market, often of a one or two points. And one has to remember to make sure that the
movement includes room for slippage and for commissions.
I've heard a number of definitions for the term 'point'. In those forums, I'm now given
to understand that a point can be a synonym for the spread for the equity.
Yoohoo indicates that he's been trading since about 1998, so I think he has quite some
experience. His posts certainly indicate that he is drawing on much hard earned knowledge.
For traders trying to get on the positive side of the markets, his comments, as well as many
others, are worth reading over at the forums.
As part of the set of indicators he uses, I learned of a new one: range
bars. According to the article, range bars were invented by a Brazilian trader named
Vicente M. Nicolellis Jr. In a nutshell, range bars are created through price movements:
once an instrument has moved through a preset price range, a new bar is created. This
creates a series of same sized bars, and is time independent. As a result, a trending
market will generate a series of range bars as it goes up or down, while a sideways market
will generate few if any bars (as long as the sideways movement is within the range of the
bar).
[/Trading]
permanent link
2006 Dec 19 - Tue
Cisco Syslog Additions
I have once again updated ciscowatcher.pl.
A couple of primary additions:
- Additional events are processed
- Email messages can be sent as alerts based upon nature of event
Some of the events processed include:
- '%ISDN-6-CONNECT'
- '%ISDN-6-DISCONNECT'
- '%VOIPAAA-5-VOIP_CALL_HISTORY'
- '%SEC-6-IPACCESSLOGDP'
- '%SEC-CLUSTER_MEMBER_1-6-IPACCESSLOGDP'
- '%SEC-6-IPACCESSLOGP'
- '%SEC-CLUSTER_MEMBER_1-6-IPACCESSLOGP'
- '%OSPF-5-ADJCHG'
- '%SYS-5-CONFIG_I'
- '%LINK-5-CHANGED'
- '%LINEPROTO-5-UPDOWN'
- '%LINK-3-UPDOWN'
- '%LINEPROTO-CLUSTER_MEMBER_1-5-UPDOWN'
- '%LINK-CLUSTER_MEMBER_1-3-UPDOWN'
- '%CRYPTO-4-PKT_REPLAY_ERR'
- '%SYS-6-CLOCKUPDATE'
- '%DOT11-6-ASSOC'
- '%DOT11-6-DISASSOC'
- '%DOT11-7-AUTH_FAILED'
- '%DOT11-6-ROAMED'
The email module example shows the the script sending email to the default service on the
same machine. By simply changing the mail accounts and server id's, email can be sent to
any SMTP capable server for distribution.
This script is configured to send notifications and save the results in a database
anytime an OSPF link changes state.
[/OpenSource/Debian/Monitoring]
permanent link
Volume At Price
It is said that, through the course of the day, trading trends will revert to the level
of highest volume.
The software at Ensign Software has a feature
which will chart a nice bar graph of the volume-at-price distribution for visual traders.
However, for a quick and dirty indicator at a single level only, fit for automated
trading, I wrote the following small class:
public class VolumeAtPrice {
SortedList slVolumeAtPrice;
public int LargestVolume = 0;
public double PriceAtLargestVolume = 0;
public VolumeAtPrice() {
slVolumeAtPrice = new SortedList( 400 );
}
public void Add( Trade trade ) {
if ( slVolumeAtPrice.ContainsKey( trade.Price ) ) {
int ix = slVolumeAtPrice.IndexOfKey( trade.Price );
int volume = (int) slVolumeAtPrice.GetByIndex( ix );
volume += trade.Size;
slVolumeAtPrice.SetByIndex( ix, volume );
if ( volume > LargestVolume ) {
LargestVolume = volume;
PriceAtLargestVolume = trade.Price;
}
}
else {
slVolumeAtPrice.Add( trade.Price, trade.Size );
if ( trade.Size > LargestVolume ) {
LargestVolume = trade.Size;
PriceAtLargestVolume = trade.Price;
}
}
}
}
After updating with the latest Trade, examine PriceAtLargestVolume to see where the
current highest volume trading level occurs.
[/Trading/SmartQuant/Articles]
permanent link
2006 Dec 18 - Mon
SmartQuant QuantDeveloper & DataCenter Release
Since Anton mentioned this blog on the SmartQuant forum earlier today, I better get the version list up-to-date here.
There was mention that another update will be released mid-week this week. Among other things, it is said to fix a couple of
bugs plus allow scripted access to DataCenter MarketDepth from QuantDeveloper.
SmartQuant has released revisions to
DataCenter and
QuantDeveloper. They are at the following revision levels:
DataCenter
Version 2.1.4 (27-Nov-2006)
QuantDeveloper Enterprise Edition
Version 2.3.2 (08-Dec-2006)
QuantDeveloper source code.
Version 2.3.2 (13-Dec-2006)
[/Trading/SmartQuant/Releases]
permanent link
The Stock Bandit
I've added a link to an interesting article by
The Stock Bandit regarding trading with multiple positions. I've been attempting to design a system based upon
handling single positions. But with multiple indicators sometimes signalling different directions, I've been at a loss (in
more ways than one) to figure
out which indicator to believe at any one point in time.
I've slowly been realizing that by handling multiple positions, multiple scenarios can be played out at once, with each
scenario
adding and removing positions to the overall portfolio.
Obviously, handling multiple positions is not for the faint of heart, but I'm hoping through robust back testing, it will
prove it's worth for use in a real money environment.
[/Trading]
permanent link
2006 Dec 06 - Wed
World Money Show, February 2007
InterShow, which bills themselves as 'The Worlds Leading Producer of Investment Trade Shows and Cruises', is putting on
the World Money Show at the Gaylord Palms
Resort in Orlando, Florida from February 7 to 10 in 2007.
The exhibit hall listing is quite extensive, as is their speaker list. Their Sponsor list has some well known names.
If anyone has gone to one of these, please leave a comment as to your thoughts regarding past events.
[/Trading]
permanent link
2006 Dec 05 - Tue
Finding Local Peaks in Quote/Trade Streams
Just about any book on technical analysis you open will have a number of charts showing the usual
peaks and valleys of a instrument's trading range. Many trading strategies are designed around the
specific arrangement of peaks and valleys. I thought, up till now, that these peaks and valleys
could only be determined through studies through the use of the good old Mark I Eyeball.
However, after reading Bollinger's book entitled Bollinger on Bollinger Bands, in which he
discusses
computer aided determination of those peaks and valleys, I set out to work on an algorithm to do
the same.
The C# PeakMatch Code Segment is
my first attempt at peak and valley pattern matching.
It is implemented as a state machine in order to make it easy to determine, during live streams,
whether the stream is going up or down. You can use various summary statistics from quotes, trades,
or even bars as input values.
The variable dblPatternDelta is the grey zone used for determining when the pattern flips. This
variable will need to be adjusted on an instrument by instrument basis. In addition, further tuning
is necessary if you wish to capture small nuances or just large swings in the trading value. As
such, determining the peak is a problem of lag. Sigh, so much for having a magical realtime
signal for
determining when the top or bottom of a range. The variable dtPatternPt1 holds the DateTime of
the last
determined peak. When a change of direction of determined, then that peak/valley attribute is
stored in dsPattern.
dsPattern can then be used within a sliding window of pattern analysis. I'll show an
implementation of
Arthur Merrill's patterns in another article.
Further information on choosing a good value for dblPatternDelta can be found in Bollinger's
book.
[/Trading/SmartQuant/Articles]
permanent link
Google Webmaster Tools
I cover a number of different topics in my blog. I'm interested in finding out how people arrive on those
pages. From a Google perspective, they have a convenient tool for analyzing some of this information.
Google has a site called Google Webmaster Central.
On that page is a link for Webmaster Tools (including Sitemaps). I've added my web site to the tool. As part of
that process, they generate a verification key. I've installed the verification key in the footer file that gets
included on all generated webpages on my site. This verification key is part of a script that talks to Google
each time a web page is rendered by a web browser.
As part of each rendering, information is sent to Google that logs the queries used to get to the specific
page. Google summarizes this information and reports this to me each time I visit the Google Webmaster
Tools.
I've also uploaded a simple site-map so Google knows which pages to visit.
Now that I've provided some basic information to Google, I can now get an idea of how pages are crawled, when
they are crawled, and how the pages are ranked within Google's system.
I also have the ability to download a spreadsheet of queries Google has recorded for reaching each page set.
This will help me to optimize the keywords in each document. It also gives me an idea of people's interests, and
thereby provide additional content focussed to those topics of interest.
I have a Google search tool at the top of my pages. The searches entered in that box are also recorded so I
can tell for what people are searching once they reach my site.
There is also a set of index statistics provided which include: the pages indexed by Google, sites that
Google knows that link to my site, and presents a list of sites related to my site so I can have an idea of who
my competition might be.
I've found the Google 'link:' not quite as detailed as I think it should be. Google has maybe twelve sites
showing
information for link:www.oneunified.net. On the other hand, Alexa
shows around 74 sites linking.
Anyway, for a high level view of what GoogleBot thinks about my site, Google Webmaster Central provides a good summary.
[/Personal/SoftwareDevelopment/HTML/Findability]
permanent link
NTP for Callmanager
Since Cisco generally recommends that the Callmanager server not be a member of an Active
Directory domain, is is unable to make use of the time distribution protocols normally
available to member servers and computers. As background, I think Cisco's stance is
understandable, and reflects the quantity of testing Cisco performs with each upgrade and
service pack install. If a server is a member of a domain, it is entirely possible that
registry entries, dlls, or applications coulds be modified through Group Policies that may
affect the reliable functioning of the phone server.
As an alternative to Microsoft's time distribution protocol, the industry standard NTP
(Network Time Protocol) can be used. The Callmanager installation automatically installs an
NTP client, but does not turn it on.
To turn it on is quite simple. Obtain an address of an NTP server, either on your
network or an external one. Using the one that drives the Active Directory domain
controllors would be best. As a last resort, an address from pool.ntp.org could be used.
Edit the file C:\WINNT\system32\drivers\etc\ntp.conf and apply the ip address to the
server line. Save the file. Bring up Microsoft's Services management application. Set the
Network Time Protocol service to Automatic and start it up.
The Event Log will record startup and synchronization messages for your reference.
Be aware that with each Callmanager upgrade you perform, the service may be turned back
to Manual and the ntp.conf file may be overwritten. You may want to make a backup of the
configuration file so you can easily re-apply after your next upgrade.
[/Cisco/Callmanager]
permanent link
2006 Dec 04 - Mon
Ping Weblog
I used the ping_weblogs_com found and described at Get Noticed by Pinging site.
The referenced page also lists a number of services to ping.
Adding a ping to weblogs.com was reasonably simple, except that I forgot that I can't do a $ping_weblogs_com
in the text article, but had to do it as part of a flavour file.
And as I didn't want to do it as part of a regular article presentation, as it may extend the page load times, I had to create some separate
flavour files. I then activated the
plugin in the story flavour.
Now I'm all set with to ping Weblogs.com.
BrutalHogs has a ping flavour to help a little with
the manual ping process. But I think that Ping-O-Matic probably
takes care of most things, even if it is only manually for now.
[/OpenSource/blosxom]
permanent link
Adding an RSS Template to Blosxom
The RSS template/flavour supplied with the original installation of Blosxom doesn't really
conform to modern useage. At The
Unofficial Blosxom User Group, mention is made of Hal Halvorsen's A better RSS 2.0 template for Blosxom.
He mentions it might take ten to fifteen minutes to configure. In actual fact it was easier than
that. I copied his flavours into the root of my blog directory and made the following changes:
- story.rss20: added .article to fn in two places, since that is how I suffix each individual
blog article from a url perspective
- head.rss20: changed the copyright notice
- foot.blog: changed my index.rss link to index.rss20 for my xml tag
I was able to validate the feed with Weblogs.com Feed Validator.
So, in actual fact, adding the feed ability and documenting it in this blog took maybe fifteen or
twenty minutes. Easy.
[/OpenSource/blosxom]
permanent link
Keywords for Search Engine Optimization (SEO)
Search engines like keywords, keywords that are balanced, not overused, not underused.
Both copy writers and site designers need to be involved in optimization of keywords and
phrases. Once appropriate keywords and phrases have been determined (more about this in
another entery), copy writers need to work them into the text of the website. In
addition, the keywords and phrases can be incorporated into meta-tags of the page, but I've
heard that you can't overboard here, nor can you rely only on meta-tags to carry the day.
Another trick is to incorporate the keywords into web site structure and navigation. For
example, on one my pages I discuss a set of HD-600 headphones by Sennheiser. The page references the word
AudioPhonics and the directory structure in which the article rests has that word as part of
the path.
That article has a Google rank of 7 or 8. It has reached that rank within a few weeks of
posting. However, that page is actually about the Sennheiser HD 600 headphones, and if I do
a search on that phrase, page rank is very very low. It is somewhere between 140
and 745,000. So, in effect, people will land on that page due to a search of the nebulous
topic of AudioPhonics rather than the more specific topic of Sennheiser HD 600 Headphones
about which I wrote.
Because there are so many other pages out there that have Sennheiser HD 600 in the title
bar, which my page doesn't (I'm going to have to move to different blogging software to make
that happen), they probably enjoy higher rankings. However, an appropriate title is only
one of many attributes a search engine will use to compute a page rank.
Those other pages also probably use meta-tags.
Those other pages may also have inbound links of one form or another to gain
them extra visibility.
Those other sites may also have related content that helps a search engine's related
content matchers. (I'm still finding out about this one to see how true it is).
But you'll also note that when doing a search on the phrase 'Sennheiser HD 600', a bunch
of other kind of related pages show up: ones that have a portion of the phrase repeatedly,
ones that include the phrase in passing but related to similar equipment, and ones that have
them in the url somewhere.
So, after having mentioned what search engines like, we'll see what happens with this
page in the page rankings in a few weeks for the search topic 'Sennheiser HD 600'. I've
mentioned the product multiple times within the
text of this document, which is what Search Engines seem to like. I'm still missing the
text in meta-tags, the title, and the url, but we'll see how things go. It will be form of
double irony that people come here because they searched for 'Sennheiser HD 600' when in
fact this page is actually is about Search Engine Optimization, in another form:
Optimzation for Search Engine Findability.
In summary, if you are looking for visibility and findability, each page you write needs
to be hand crafted with these various techniques in mind. And even if you've crafted a page
for a certain phrase, you may find a search engine likes it differently based upon user's
search patterns and preferences. But if you watch these patterns, you can use them to your
benefit to further enhance your findability.
[/Personal/SoftwareDevelopment/HTML/Findability]
permanent link
2006 Dec 03 - Sun
Book Review: Ambient Findability by Peter Morville
As I've been adding content to my blog, I've also been looking into methods and
mechanisms of promoting it .
Over the last few years, I've been receiving JIll Whalen's High Rankings Advisor Newsletter. She devotes her time to
educating her readers in the subject of SEO (Search Engine Optimization). I've been reading
the newsletter ever since the time that meta-tags had significant meaning. Now they
represent only a portion of toolset needed to successfully promote a web site.
|
Web site promotion is really all about 'findability'. Peter Morville presents this topic
in a very readable book called 'Ambient Findability' available from O'Reilly Press. The
sub-title of his book is 'What We Find Changes Who We Become', which I think is very apt,
based upon the research he presents within the pages of his book.
We as Blog authors and web page developers provide content so that we can share it with
others, and perhaps make some money from it, if not for other altruistic reasons. As they
say, content is king. But if no one knows about the content, what good does it do? So the
key question is: how does one get others to visit?
Obviously, other's can't visit if they don't know where to visit. One concept that comes
immediately to mind is a one called viral marketing. Marketing
Terms defines it as a 'marketing phenomenon that facilitates and encourages people to
pass along a marketing message'. If you can get a snowball of a message rolling, people
will come.
|
|
On the other hand, in order to build a base of respectability and long term associations,
any number of ideas and philosophies need to be considered. No one promotion gimmick will
yield results. Around 175 pages of book can be boiled down to this meaning laden quote:
Semantic Web tools and standards create a powerful, enduring foundation. Taxonomies and
ontologies provide a solid semantic network that connects interface to infrastructure.
And
the fast-moving, fashionable folksomonies sit on top: flexible, adaptable, and responsive
to user feedback.
The book is much more readable than what is found in that exerpt, but hopefully the
exerpt provides a desire to find out more of what it takes to build a successful web site. Search
Engine Optimization is part and parcel of semantic content. Tag building through such sites
as Flickr and Del.icio.us provide the folksomony, or user ratedness of a site. And search
engine classification schemes provide accessibility.
Many different topics related to finding things are presented within the book. It is an
excellent first book for those involved with the multi-role task of making web sites
findable, as well as usable.
[/Personal/SoftwareDevelopment/HTML/Findability]
permanent link
|