-
Notifications
You must be signed in to change notification settings - Fork 732
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Activating stop orders before it hits the limit price #463
Comments
I wonder why it's not included, but you can create your own class adding the stop_price argument into the place_stop_order method, here is an example. Be aware that I didn't test it. from cbpro import AuthenticatedClient
class MyAuthenticatedClient(AuthenticatedClient):
def place_stop_order(self, product_id, stop_type, price, size=None, funds=None,
client_oid=None,
stp=None,
overdraft_enabled=None,
funding_amount=None,
stop_price=None):
""" Place stop order.
Args:
product_id (str): Product to order (eg. 'BTC-USD')
stop_type(str): Stop type ('entry' or 'loss')
loss: Triggers when the last trade price changes to a value at or below the stop_price.
entry: Triggers when the last trade price changes to a value at or above the stop_price
price (Decimal): Desired price at which the stop order triggers.
size (Optional[Decimal]): Desired amount in crypto. Specify this or
`funds`.
funds (Optional[Decimal]): Desired amount of quote currency to use.
Specify this or `size`.
client_oid (Optional[str]): User-specified Order ID
stp (Optional[str]): Self-trade prevention flag. See `place_order`
for details.
overdraft_enabled (Optional[bool]): If true funding above and
beyond the account balance will be provided by margin, as
necessary.
funding_amount (Optional[Decimal]): Amount of margin funding to be
provided for the order. Mutually exclusive with
`overdraft_enabled`.
Returns:
dict: Order details. See `place_order` for example.
"""
if stop_type == 'loss':
side = 'sell'
elif stop_type == 'entry':
side = 'buy'
else:
raise ValueError('Invalid stop_type for stop order: ' + stop_type)
# If not receive the stop_price use price
if not bool(stop_price):
stop_price = price
params = {'product_id': product_id,
'side': side,
'price': price,
'order_type': None,
'stop': stop_type,
'stop_price': stop_price,
'size': size,
'funds': funds,
'client_oid': client_oid,
'stp': stp,
'overdraft_enabled': overdraft_enabled,
'funding_amount': funding_amount}
params = dict((k, v) for k, v in params.items() if v is not None)
return self.place_order(**params) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi,
Especially in volatile situations, I have seen some of my stop orders were run past because the limit price and stop price are the same thus there is a chance that it will not be put on the order book as fast as needed.
Current code:
Looks like
place_stop_order
doesn't allow to specify differentlimit_price
andprice
arguments. Howeverplace_order
method does.How should I specify the
side
,price
andstop_type
andstop_price
arguments for the following to make sure they are activated a little bit before to ensure execution (assuming I want the stop to be activated 5$ before the stop price)?Any help would be appreciated!
The text was updated successfully, but these errors were encountered: