Below is an movie of the scanner in action:
Click here to download/view complete the movie (1.0MB)
RoboScan is using a proprietary programming language to allow you to define specific
market conditions
for position entry, exit and symbol activation into the Watch or Candidate list (see
samples below).
On each new tick RoboScan will process allactivated functions in realtime!
The following language featres are avalable:
Below are the following two examples:
Stock Selection (Find which Stocks have potential from
all 5000+ NASDAQ Stocks)
Below is a sample of how RoboScan selects the stocks (from all the 5000+ stocks on NASDAQ)
which have a potential for profitale trades as defined in the Activation Check module
(ActChk.rof):
;****** CHECK IF FLOAT IT LARGER THAN 200MILL SHARES ****
If (VolumeComm > 200.00) then
exit ; avoid the big monsters
endif
Set($LocStart,0)
;****** CHECK IF MARKET HAS STARTED *****************
if (ClockTime < 9:30:00) then
exit
endif
;****************************************************
;****** MARKET STARTED ******************************
;****************************************************
;****** CHECK FOR PRICE RANGE BETWEEN 8 AND 99 DOLLAR *****
;****** AND 20,000 SHARES TRADED SO FAR IN THE DAY ********
if (DayRawLow <= 8) OR (DayRawHigh > 99) OR (VolumeTotal <= 20000) then
exit
endif
;****** CHECK FOR INITIAL MARKET OPENING PHASE IS FINISHED **********
if (ClockTime < 9:40:00) then
;****** CHECK IF DAY SPREAD IS AT LEAST 2 DOLLARS ****************
if (DayRawSpread > 2) then
Log("ActChk: EARLY SPREADAMT EARLY") ; Write a comment to the log
Log(DayRawSpread) ; show actual spread amount in log
Set($LocStart,1) ; set a local variable for detailed tick watch
endif
exit
endif
;****** CHECK IF PROJECTED TOTAL TRADES TODAY ARE EITEHR **********
;****** TOO LOW (2000) OR TOO BUSY (40,000) ***********************
if (SigTKEstRecords < 2000) OR (SigTKEstRecords > 40000) then
;****** CHECK IF THIS SYMOL IS CURRENTLY ACTIVE ***************
if (IsTKActive <> FALSE) then
Log("ActChk: EndWatch:Est")
Log(SigTKEstRecords)
EndWatch("TM") ; stop watching
endif
exit; ignore too slow or too usy stocks
endif
;****** CHECK IF SPREAD IS AT LEAST 3.25 DOLLAR *******
if (DayRawSpread > 3.25) then
Log("ActChk: SPREADAMT")
Log(DayRawSpread)
Set($LocStart,1)
endif
;****** CHECK IF SPREAD IS AT LEAST 6% **************
if (DayRawPercentSpread > 6.0) then
Log("ActChk: SPREADPER")
Log(DayRawPercentSpread)
Set($LocStart,2)
endif
;****** HERE COULD BE MORE ACTIVATION CRITERIA ******
;****** CHECK IF ANY ACTIVATION CONDITION TRIGGERED *
if ($LocStart <= 0) then
exit ; no trigger ignore this stock
endif
;****** ACTIVATE THE DETAILED TICK PROCESSING *******
if (IsTKActive == FALSE) then
Log("Starting TK")
StartWatch("T")
endif
;****** ACTIVATE THE DETAILED LEVEL2 ACTIVITY PROCESSING *****
if (IsMMActive == FALSE) then
StartWatch("M")
endif
Strategic Entry/Exit programming
Below is a sample of how you can programm in great detail specific Trading Strategies.
Here we simply start the Warmup phase at 10:00:00 (EnterLong,98) and then enter
a position at 10:05:00 (EnterLong,1), were the RoboTrd module would receive a Signal
and initiale instantly actual buy order(s) and get the shares for you!
At 10:10:00 we program an exit (EnterLong,99).
Of cause this is not a sensible trading strategy, but it illustrates the imense potential
of RoboStock
strategic custom programming.
;****** CHECK IF WE HAD ALREADY ONE POSITION TODAY
*******
if (GetSpecial(11) > 0) then
exit
endif
;****** CHECK IF WE HAVE NO WARMUP OR POSITION ***********
if (EnterLong = 0) then
if (SigTkTime > 10:00) then
Set(EnterLong,98) ; Warmup
endif
exit
endif
;****** CHECK IF WE HAVE A WARMUP ************************
if (EnterLong != 1) then
if (SigTkTime > 10:05) then
Set(EnterLong,1) ; Entry
endif
exit
endif
****** CHECK IF WE ARE IN A POSITION ********************
if (EnterLong = 1) then
if (SigTkTime > 10:10) then
Set(EnterLong,99) ; Exit
endif
exit
endif
Below is a second sample of how you can programm in great detail
specific Trading Strategies,
using custom variables ($Sym and $Loc) and timer: LiveTimer() and StartTimer():
If(isempty($SymRain)==True) then ; initialize variables
Set($SymRain, SigTKbid)
Set($SymThunder, SigTKbid)
Set($SymLightning, SigTKbid)
Set($LocStart,0) ; flow control on timer
Set($LocStart1,0) ; flow control on 2nd timer
Endif
If(LiveTimer($TmrRain)==False) then ;*** update variable values every n seconds ***
Set($SymTornado,$SymLightning) ;stores oldest value in time frame
Set($SymLightning, $SymThunder)
Set($SymThunder,$SymRain)
Set($SymRain, SigTKbid) ; capture bid price and preserve it by handoff to above vars.
StartTimer($TmrRain,60) ; set periodic bid changes update stopwatch
Endif
if (SigTKEstRecords < 2001) or (SigTkDaySpread < 4) then ; Prevent low opportunity
entry
exit
endif
If ((absval(SigTKbid - $SymTornado) >= 2.125)) then ; allow trigger if sufficient storm
Percent AND value (max)
If (absval(SigTKbid - $SymTornado) >= (sigtkbid * 3.5)) then
Set($LocStart,1)
if (LiveTimer($TmrMM2) == TRUE) then ;****** CHECK IF WE ARE ACTIVE ****************
Set($LocStart,0) ;if less than timer value do not retry entry in triggered symbol
endif
endif
endif
If($LocStart = 0 ) then ; if no basic trigger condition, or already in wait period then
exit
exit
endif
;****************This Timer sets the amount of time to WAIT until allowing the trigger to
go live ****************************
if ((LiveTimer($TmrMM1) == FALSE) AND ($LocStart1 = 0 )) then ;****** CHECK IF TIMER1 IS
NOT ACYIVE YET *****
StartTimer($TmrMM1,55) ;****** START A NEW TIMER *********************
endif
;****************This Timer makes sure that the waitstopwatch won't be reset until
afterefore we can enter**********
if (LiveTimer($TmrMM1) == TRUE) then ;****** CHECK IF WE ARE ACTIVE ****************
Set($LocStart1,1) ; this variable ensures that the timer doesn't reset until an entry is
ACTUALLY triggered ***********
exit ;if less than timer value do not retry entry in triggered symbol
endif
;*******Determine entry direction and best wholesale price to "get run into" by
momentum
If (SigTKBid < $SymTornado) then ; determine if we should go long or short
trace(on); start detailed step by step tracing/debugging
if (EnterLong == FALSE) then
Set($LocFrac,SigtkBid -(SigtkBid modulo 1000)) ; get fractional portion of
current bid
If($LocFrac < 0.75) then ; If we dropped below 3/4, then anticipate
further drop...
SetEntryPrice((SigtkBid-$LocFrac)+ 0.125 ) ; adjust price
1/8 above current integer price
else ; otherwise
SetEntryPrice(SigtkBid) ; just use the current bid as entry
price
endif
Set(EnterLong,1) ; Enter LONG - BUY SHARES!
endif
else
if (EnterShort == FALSE) then
Set($LocFrac,SigtkAsk - (SigtkAsk modulo 1000)) ; get fractional portion of
current bid
If($LocFrac > 0.25) then ; If we jumped above 1/4, then anticipate further
rise...
SetEntryPrice((SigtkAsk - $LocFrac) + 0.875) ; adjust price
to 7/8 above current integer price
else ; otherwise
SetEntryPrice(SigtkAsk) ; just use the current bid as entry
price
endif
Set(EnterShort,1) ; Enter SHORT - SHORT SELL SHARES
endif
endif
Set($LocStart,0) ; once entry done, reset flow control variables
Set($LocStart1,0)
;***** This timer prevents repetitive entries to soon after a triggered
entry..."refractory period" **************
if (LiveTimer($TmrMM2) == FALSE) then ;****** CHECK IF TIMER2 IS NOT ACYIVE YET *****
StartTimer($TmrMM2,360) ;****** START A NEW TIMER *********************
endif