-- trading_system_1.epl -- -- Statements must be separated by an empty line. -- The time the trading logic will begin to enter trades. -- Exiting trades is 24/7. create constant variable int StartTimeHour = 9 -- The time the trading logic will begin to enter trades. -- Exiting trades is 24/7. create constant variable int EndTimeHour = 17 -- The time frame or tickbar count of the data to be analyzed or -- traded. Examples: 5s, 1m, 1h 30m, 2h, 12h, 1d. create constant variable string Interval = '2s' -- Amount to be traded, measured in units. create constant variable int TradeSize = 100000 -- How many ticks to use for simple moving average calculation create constant variable int SMASize = 5 -- How many ticks to store for Ref() access create constant variable int RefSize = 5 -- -- A named window that contains the current tick -- create window CurrentTickWindow#length(1) as TickEvent insert into CurrentTickWindow select * from TickEvent -- -- Trading window -- -- InTradingHours will be set to true when the current time is between -- StartTime and EndTime. create variable bool InTradingHours = false -- Update on each tick -- NOTE: see "timer:within" pattern for possible alternate formulation on TickEvent as t set InTradingHours = (EPLHelpers.getHour(t.time) >= StartTimeHour and EPLHelpers.getHour(t.time) < EndTimeHour) -- -- A stream of OHLC values calculated from TickEvents -- create variant schema OHLCStream as OHLCEvent insert into OHLCStream select * from TickEvent#OHLC(Interval, time, midDouble) -- -- Simple moving average streams -- -- Average the most recent OHLC close values and create events that -- contain open, high, low, close and SMA(close). The number of -- OHLC events used in the SMA calc is set by SMASize. create schema SMACloseStream as ats.plugin.OHLCValueEvent insert into SMACloseStream select new ats.plugin.OHLCValueEvent(time, open, high, low, close, Avg(close)) from OHLCStream#length(SMASize) -- -- ValueWhen calculations -- -- A stream that feeds B1 and B2 create schema BStream as (low double, time org.joda.time.DateTime) -- Find a bar with a lower close than its neighbors. -- Add that low value to the stream. insert into BStream select prev(1, low) as low, prev(1, time) as time from SMACloseStream#length(RefSize) where prev(0, value) > prev(1, value) and prev(1, value) < prev(2, value) create schema B1 (low double, time org.joda.time.DateTime) insert into B1 select prev(0, low) as low, prev(0, time) as time from BStream#length(RefSize) create schema B2 (low double, time org.joda.time.DateTime) insert into B2 select prev(1, low) as low, prev(1, time) as time from BStream#length(RefSize) -- A stream that feeds P1 and P2 create schema PStream as (low double, time org.joda.time.DateTime) -- Find a bar with a higher close than its neighbors. -- Add that low value to the stream. insert into PStream select prev(1, low) as low, prev(1, time) as time from SMACloseStream#length(RefSize) where prev(0, value) < prev(1, value) and prev(1, value) > prev(2, value) create schema P1 (low double, time org.joda.time.DateTime) insert into P1 select prev(0, low) as low, prev(0, time) as time from PStream#length(RefSize) create schema P2 (low double, time org.joda.time.DateTime) insert into P2 select prev(1, low) as low, prev(1, time) as time from PStream#length(RefSize) -- -- Long entry -- create schema LongEntryStream as (low double) insert into LongEntryStream select B1.low as low from B1#lastevent, B2#lastevent, P1#lastevent, P2#lastevent where B1.low < B2.low and P1.low < P2.low and EPLHelpers.laterThan(B1.time, P1.time) and EPLHelpers.laterThan(B2.time, P2.time) and EPLHelpers.laterThan(P1.time, B2.time) -- LE = C > HHV(High,3) -- and B1 < B2 -- and P1 < P2 -- and BT1 > PT1 -- and BT2 > PT2 -- and PT1 > BT2 -- -- Event logging -- create schema LogStream as (stream string, event string) -- Enable logging specific stream events by uncommenting individual -- lines below: -- insert into LogStream select 'TickEvent' as stream, EPLHelpers.str(*) as event from TickEvent -- insert into LogStream select 'OHLCStream' as stream, EPLHelpers.str(*) as event from OHLCStream -- insert into LogStream select 'BStream' as stream, EPLHelpers.str(*) as event from BStream -- insert into LogStream select 'PStream' as stream, EPLHelpers.str(*) as event from PStream insert into LogStream select 'B1' as stream, EPLHelpers.str(*) as event from B1 insert into LogStream select 'B2' as stream, EPLHelpers.str(*) as event from B2 insert into LogStream select 'P1' as stream, EPLHelpers.str(*) as event from P1 insert into LogStream select 'P2' as stream, EPLHelpers.str(*) as event from P2 insert into LogStream select 'LongEntryStream' as stream, EPLHelpers.str(*) as event from LongEntryStream