I've looked all over google and the
forums and no one can answer this.
And turning on intrabarordergeneration
does NOT help, it only buys at the end
of the current bar (missing the move)
See attached pic,
I want to buy a CURRENT bar as soon as
it crosses the previous bars range high,
immediately.
EDIT: That is to say that on a Daily chart, when the current bar crosses the last daily bar high, that I need a long entry immediately.
NOT at the close of the current bar.
NOT at the open of the next bar.
Easylanguage code seems so powerful that
it is hard to believe that E.L. can't do this.
If "(a current value)" > range[1] then
buy this bar at market; does NOT work.
Is that possible using separate conditions1 ,2 etc. using a Daily bar as the trigger and then a 1 tick bar for a long entry?
??
Basically, what Kevin said. You need to do 2 things:
1. Use IntraBarOrderGeneration=True in your code.
2. You need a stop order to be placed when the current bar closes.
So, lets assume the current bar range high is 1960 and you want to buy 1 tick above this high on the next bar (assuming 1 tick=0.25), you need to place a buy stop order at 1960.25 using this kind of syntax when the current bar closes.
By doing so, as soon as the current bar closes, you will see a buy stop market order is placed at 1 tick above the high and if the next bar gets to this high, it should get filled.
The following user says Thank You to Hulk for this post:
If he wanted to use IBOG, I think he could do this on the green bar (please correct me if I am wrong):
INTRABARORDERGENERATION=TRUE;
If close>high[1] then buy this bar at market; //you might have to use "high" instead of "close"
But, you cannot backtest with this setup, where you can with the other approach.
You are right Kevin. IBOG isnt required in this case. The information required to make the trade decision is available at the close of the current bar so the next (in-progress) bar really doesnt need to decide anything.
I had written a strategy sometime back that was based on a range (momentum) bar chart and would fade the close of the current bar when certain conditions are met and I think I was getting confused because of that.
It's fine to use "close" in your example as in realtime with IOG this will be the last tick that came in (i.e. on the tick that prints the high the close should have the same value).
Regards,
ABCTG
kevinkdog
If he wanted to use IBOG, I think he could do this on the green bar (please correct me if I am wrong):
INTRABARORDERGENERATION=TRUE;
If close>high[1] then buy this bar at market; //you might have to use "high" instead of "close"
But, you cannot backtest with this setup, where you can with the other approach.
The following 2 users say Thank You to ABCTG for this post:
Yes, but that is the whole thing I am trying to avoid.
I want to buy in the middle of the GREEN candle in my pic. (Middle of the day in this case) Not at the close of the current green candle.
Not at the end of the day.
I understand that EasyLanguage can't calculate until AFTER the clsoe of the candle for its data calculations.
That's why I wondered if using multiples data sets (data1,data2,etc) was optimal in this situation.
Perhaps a data1 = close of 10min
data2 = high of daily[1]
if data1 > data2 then buy this bar at market on a very small interval chart, 1 tick ? 1 min?
kevinkdog
If he wanted to use IBOG, I think he could do this on the green bar (please correct me if I am wrong):
INTRABARORDERGENERATION=TRUE;
If close>high[1] then buy this bar at market; //you might have to use "high" instead of "close"
But, you cannot backtest with this setup, where you can with the other approach.
ABCTG
It's fine to use "close" in your example as in realtime with IOG this will be the last tick that came in (i.e. on the tick that prints the high the close should have the same value).
[INTRABARORDERGENERATION=TRUE]
If close>high[1] then buy next bar at market;
When using intrabar order generation "next bar" means the next tick. If you use this bar Close, then you'd only see the order at the end of the bar.
Regards,
ABCTG
bmtfken
Yes, but that is the whole thing I am trying to avoid.
I want to buy in the middle of the GREEN candle in my pic. (Middle of the day in this case) Not at the close of the current green candle.
Not at the end of the day.
I understand that EasyLanguage can't calculate until AFTER the clsoe of the candle for its data calculations.
That's why I wondered if using multiples data sets (data1,data2,etc) was optimal in this situation.
Perhaps a data1 = close of 10min
data2 = high of daily[1]
if data1 > data2 then buy this bar at market on a very small interval chart, 1 tick ? 1 min?
Yes, but that is the whole thing I am trying to avoid.
I want to buy in the middle of the GREEN candle in my pic. (Middle of the day in this case) Not at the close of the current green candle.
Not at the end of the day.
I understand that EasyLanguage can't calculate until AFTER the clsoe of the candle for its data calculations.
That's why I wondered if using multiples data sets (data1,data2,etc) was optimal in this situation.
Perhaps a data1 = close of 10min
data2 = high of daily[1]
if data1 > data2 then buy this bar at market on a very small interval chart, 1 tick ? 1 min?
Maybe I don;t get exactly what you want to do. Why won't this work, if entered on the red bar before the green bar?:
buy next bar at high stop;
The following user says Thank You to kevinkdog for this post:
Ok, that makes sense to me.
But how would you do that on a running basis for the chart?
[intrabarordergeneration = true];
If high of next bar > high[1] then buy next bar at market; or buy at market stop;
Does not work.
El errors out to :
Error 1; Description: 'Next Bar' can only be applied to 'OPEN', 'DATE' and 'TIME'
Hulk
Basically, what Kevin said. You need to do 2 things:
1. Use IntraBarOrderGeneration=True in your code.
2. You need a stop order to be placed when the current bar closes.
So, lets assume the current bar range high is 1960 and you want to buy 1 tick above this high on the next bar (assuming 1 tick=0.25), you need to place a buy stop order at 1960.25 using this kind of syntax when the current bar closes.
Buy next bar at 1960.25 stop;
By doing so, as soon as the current bar closes, you will see a buy stop market order is placed at 1 tick above the high and if the next bar gets to this high, it should get filled.
Ok, that makes sense to me.
But how would you do that on a running basis for the chart?
[intrabarordergeneration = true];
If high of next bar > high[1] then buy next bar at market; or buy at market stop;
Does not work.
El errors out to :
Error 1; Description: 'Next Bar' can only be applied to 'OPEN', 'DATE' and 'TIME'
@bmtfken, what @kevinkdog is saying is all you need. It will work on a running basis. In real-time, if you place a stop order using the syntax "buy next bar at high stop;", then you will see a stop market order being placed at the high of the current bar as soon as the current bar closes and the next bar opens. Now if price makes it to that high, your order will be filled otherwise it wont. As an example, you can take a look at one of the canned strategies in TS called the Keltner Channel LE:
{ The IntrabarOrderGeneration attribute is set to false in this strategy because
strategy calculations depend on end-of-bar prices. Specifically, an "Average True
Range" is calculated. Calculation of Average True Range depends on end-of-bar high,
low, and closing prices. }
[IntrabarOrderGeneration = false]
inputs: Price( Close ), Length( 20 ), NumATRs( 1.5 ) ;
variables: Avg( 0 ), Shift( 0 ), UpperBand( 0 ), Setup( false ), CrossingHigh( 0 ) ;
Avg = AverageFC( Price, Length ) ;
Shift = NumATRs * AvgTrueRange( Length ) ;
UpperBand = Avg + Shift ;
if CurrentBar > 1 and Price crosses over UpperBand then
{ CB > 1 check used to avoid spurious cross confirmation at CB = 1 }
begin
SetUp = true ;
CrossingHigh = High ;
end
else if Setup and ( Price < Avg or High >= CrossingHigh + 1 point ) then
Setup = false ;
{ the High >= condition being true indicates that a buy must already have been
triggered at this bar so this setup has been used up and needs to be negated;
an example of a persisitent setup with an indefinite stop/limit trigger - setup
has to be negated after entry confirmed; also see Pivot Reversal LE/SE and
PercentR LE/SE }
if Setup then
Buy ( "KltChLE" ) next bar at CrossingHigh + 1 point stop ;
{ ** Copyright (c) 2001 - 2010 TradeStation Technologies, Inc. All rights reserved. **
** TradeStation reserves the right to modify or overwrite this strategy component
with each release. ** }
The following user says Thank You to Hulk for this post:
What happens if there is a gap? The next bar opens above the current high?
If you have the statement:
buy next bar at high stop;
Here's what I expect: If next bar opens above the previous high, the stop is triggered, and a market order should be immediately sent, filling it at opening price. That is how backtest engine should fill it. In reality, there will be slippage on the fill.