Hello All, Newbie here. I am trying to use the Floating PL study to see how this works (for /ES) and I would like to add the AddOrder functionality to the ParabolicSAR study which I have pasted below. I know I have no idea what I am doing with thinkscript
but what I would like to do is
1. when the state goes from short to long or from init to long I would like to buy one futures contract.
2. when the state goes from long to short I would like to sell (to close) one futures contract
3. when the initial state is short (no action at this time)
I hope someone can help straighten me out.
### Code Below ###
but what I would like to do is
1. when the state goes from short to long or from init to long I would like to buy one futures contract.
2. when the state goes from long to short I would like to sell (to close) one futures contract
3. when the initial state is short (no action at this time)
I hope someone can help straighten me out.
### Code Below ###
Ruby:
input accelerationFactor = 0.02;
input accelerationLimit = 0.2;
input quantity = 1;
assert(accelerationFactor > 0, "'acceleration factor' must be positive: " + accelerationFactor);
assert(accelerationLimit >= accelerationFactor, "'acceleration limit' (" + accelerationLimit + ") must be greater than or equal to 'acceleration factor' (" + accelerationFactor + ")");
def state = {default init, long, short};
def extreme;
def SAR;
def acc;
switch (state[1]) {
case init:
state = state.long;
acc = accelerationFactor;
extreme = high;
SAR = low;
case short:
if (SAR[1] < high)
then {
state = state.long;
acc = accelerationFactor;
extreme = high;
SAR = extreme[1];
} else {
state = state.short;
AddOrder(OrderType.Sell_To_Close,SAR, close, quantity);
if (low < extreme[1])
then {
acc = min(acc[1] + accelerationFactor, accelerationLimit);
extreme = low;
} else {
acc = acc[1];
extreme = extreme[1];
}
SAR = max(max(high, high[1]), SAR[1] + acc * (extreme - SAR[1]));
}
case long:
if (SAR[1] > low)
then {
state = state.short;
acc = accelerationFactor;
extreme = low;
SAR = extreme[1];
} else {
state = state.long;
if (high > extreme[1])
then {
acc = min(acc[1] + accelerationFactor, accelerationLimit);
extreme = high;
} else {
acc = acc[1];
extreme = extreme[1];
}
SAR = min(min(low, low[1]), SAR[1] + acc * (extreme - SAR[1]));
}
}
plot parSAR = SAR;
parSAR.SetPaintingStrategy(PaintingStrategy.POINTS);
parSAR.SetDefaultColor(GetColor(5));
#AddOrder(OrderType.Buy_To_Open, SAR, close, quantity);
#AddOrder(OrderType.Sell_To_Close, SAR, close, quantity);
Last edited by a moderator: