mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-10 16:58:08 +00:00
112 lines
4.2 KiB
Markdown
112 lines
4.2 KiB
Markdown
- [Okx Position Takeprofit Stoploss](./examples/py/)
|
|
|
|
|
|
```python
|
|
import os
|
|
import re
|
|
import sys
|
|
from pprint import pprint
|
|
import ccxt
|
|
print('CCXT Version:', ccxt.__version__)
|
|
exchange = ccxt.okx({
|
|
"apiKey": "YOUR_API_KEY",
|
|
"secret": "YOUR_API_SECRET",
|
|
"password": "YOUR_API_PASSWORD",
|
|
})
|
|
|
|
markets = exchange.load_markets()
|
|
|
|
symbol = 'ETH/USDT:USDT'
|
|
|
|
market = exchange.market(symbol)
|
|
|
|
print('-----------------------------------------------------------------------')
|
|
|
|
balance = exchange.fetch_free_balance()
|
|
print('Available balance:')
|
|
pprint(balance)
|
|
|
|
print('-----------------------------------------------------------------------')
|
|
|
|
ticker = exchange.fetch_ticker(symbol)
|
|
print(symbol, 'ticker:')
|
|
pprint(ticker)
|
|
|
|
print('-----------------------------------------------------------------------')
|
|
|
|
side = 'buy' # set it to 'buy' for a long position, 'sell' for a short position
|
|
order_type = 'limit' # set it to 'market' or 'limit'
|
|
amount = 1 # how many contracts
|
|
|
|
last_price = ticker['last']
|
|
ask_price = ticker['ask']
|
|
bid_price = ticker['bid']
|
|
|
|
# None for market orders or a limit price for a limit order
|
|
price = None if order_type == 'market' else ((ask_price * 1.001) if side == 'sell' else (bid_price * 0.999))
|
|
|
|
# the following line is not necessary, it's here just for print readability below
|
|
price = float(exchange.price_to_precision(symbol, price))
|
|
|
|
# set stop-loss trigger price to last_price - 1% for a long position
|
|
# set stop-loss trigger price to last_price + 1% for a short position
|
|
stop_loss_trigger_price = (last_price if order_type == 'market' else price) * (0.999 if side == 'buy' else 1.001)
|
|
|
|
# stop-loss limit price at i.e. -1% from trigger price for a long position
|
|
# stop-loss limit price at i.e. +1% from trigger price for a short position
|
|
stop_loss_limit_price = stop_loss_trigger_price * (1.001 if side == 'buy' else 0.999)
|
|
|
|
# set take-profit trigger price to last_price + 1% for a long position
|
|
# set take-profit trigger price to last_price - 1% for a short position
|
|
take_profit_trigger_price = (last_price if order_type == 'market' else price) * (1.001 if side == 'buy' else 0.999)
|
|
|
|
# take-profit limit price at i.e. -1% from trigger price for a long position
|
|
# take-profit limit price at i.e. +1% from trigger price for a short position
|
|
take_profit_limit_price = take_profit_trigger_price * (1.001 if side == 'buy' else 0.999)
|
|
|
|
# the following four lines are not necessary, they're here just for pprint() readability
|
|
take_profit_trigger_price = float(exchange.price_to_precision(symbol, take_profit_trigger_price))
|
|
take_profit_limit_price = float(exchange.price_to_precision(symbol, take_profit_limit_price))
|
|
stop_loss_trigger_price = float(exchange.price_to_precision(symbol, stop_loss_trigger_price))
|
|
stop_loss_limit_price = float(exchange.price_to_precision(symbol, stop_loss_limit_price))
|
|
|
|
params = {
|
|
'stopLoss': {
|
|
'triggerPrice': stop_loss_trigger_price,
|
|
# set a price for a stop loss limit order
|
|
# or leave commented for a stop loss market order
|
|
# 'price': stop_loss_limit_price,
|
|
},
|
|
'takeProfit': {
|
|
'triggerPrice': take_profit_trigger_price,
|
|
# set a price for a take profit limit order
|
|
# or leave commented for a take profit market order
|
|
# 'price': take_profit_limit_price,
|
|
}
|
|
}
|
|
|
|
position_value = market['contractSize'] * amount
|
|
|
|
print('Going to open a', 'long' if side == 'buy' else 'short', 'position',
|
|
'for', amount, 'contracts worth', position_value, market['base'], '~', position_value * last_price, market['settle'])
|
|
if order_type == 'market':
|
|
print('with a market', side, 'order at market price using the following params:')
|
|
else:
|
|
print('with a limit', side, 'order at price', price, 'using the following params:')
|
|
pprint(params)
|
|
|
|
print('-----------------------------------------------------------------------')
|
|
|
|
# exchange.verbose = True # uncomment for debugging purposes if necessary
|
|
|
|
try:
|
|
created_order = exchange.create_order(symbol, order_type, side, amount, price, params)
|
|
pprint(created_order)
|
|
# uncomment the following lines to cancel a limit order
|
|
# if order_type == 'limit':
|
|
# canceled_order = exchange.cancel_order(created_order['id'], symbol)
|
|
# pprint(canceled_order)
|
|
except Exception as e:
|
|
print(type(e).__name__, str(e))
|
|
|
|
``` |