RoboScan - Scanning the Market in Realtime

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