Uma jornada para encontrar uma maneira de programaticamente criptografia curta dos EUA, você pensaria que isso seria simples… pense de novo!
As trocas estão por toda parte… Coinbase, Binance, Gemini, Robinhood, Kraken, eToro, Crypto.com, TradeStation, Coinmama,…
e aqueles com uma API… Binance, Bittrex, Poloniex, Coinbase, Kraken, BitFinex, Bitstamp, Hitbtc, BitForex,…
e menos ainda oferecem negociação a descoberto de um endereço IP 🇺🇸. Então, existem trocas que oferecer negociação a descoberto via API para clientes dos EUA? Binance.us não oferece negociação a descoberto para clientes baseados nos EUA.
Isto é confuso e em fluxo!
No início deste ano, procurei uma resposta.
My critérios eram bastante simples:
- devo ser legítimo para usuários dos EUA, sem hackear VPN para fingir que mora em outro lugar
- devo ter API em sua troca
- devo permitir vendas a descoberto (negociação de margem)
- agradável se eles tiverem chat/e-mail de suporte ao cliente sólido
Por quê? Porque minha plataforma de criptografia quantitativa deseja operar vendido como parte de sua estratégia e não pode fazer isso no Binance.us, pelo menos não no momento em que este livro foi escrito.
Muitas das bolsas acima não informam claramente se atendem ou não clientes dos EUA até você tentar se registrar. Isso é uma verdadeira dor!
Outros permitem endereços IP dos EUA, mas não oferecem posições vendidas e, novamente, não são fáceis de dizer e, na data deste artigo, são um alvo móvel.
Algumas dessas bolsas cobram taxas horríveis, eToro (é melhor evitar isso) cobra uma taxa de “sem uso” para uma conta que não esteja conectada há algum tempo. ⏰ 💵 O que?
Outras trocas como BitForex (evite esta também) tenha uma ‘sala de bate-papo’ para suporte onde milhares de usuários estão ‘expressando suas opiniões’. Depois de vários dias tentando entender como fazer short via API e obtendo respostas malucas, desisti. 🐒 O que?
A realidade é que a maioria das exchanges hoje não é voltada para desenvolvedores e tipos quantitativos, por que deveriam ser? Essa não é a parte gorda do mercado.
Finalmente, depois de muito trabalho, encontrei o CoinMetro… baseado em Tallinn Estônia.
Aqui está um iniciador nesta troca e seus folha de taxas. A inscrição é simples, os usuários dos EUA precisam se autenticar e fornecer uma identidade verificada.
Get descontos, vibrações positivas e bom carma usando meu código de referência para se inscrever: https://coinmetro.com/?ref=georgek
Seja paciente, pois a verificação da identidade é feita pelas equipes de suporte. A criptografia pode ser transferida para sua conta depois de verificada.
Inscrição no CoinMetro SUA PARTICIPAÇÃO FAZ A DIFERENÇA.
Depois de estar registrado, você pode ir para o ‘Exchange'painel e para seu'Margem' painel…
Não é intuitivo, mas você pode ROLAR PARA BAIXO para ver a seção de margem colateral do painel:
Acima está um exemplo de ~US$500 aplicados à garantia de margem. Use o controle deslizante para definir o valor da sua carteira. Você pode recuperar facilmente essa garantia de margem (novamente com o controle deslizante) depois de sair das posições de margem.
As taxas para negociações com margem são significativas, 0.20% do valor da negociação para uma posição curta e compra ida e volta… Compare isso com 0.15% de ida e volta para posições longas em Binance.us (usando BNB para taxas).
Observe que (0.20%) mostrado no painel de margem é para posição de ida e volta, para o total de abertura e fechamento da posição de margem.
Além disso, há margem ‘taxas de empréstimo '...
Interesse 0.08222% por dia — calculado a cada 4 horas sobre a margem emprestada
Vamos resolver isso em um cenário, vamos imaginar que você assume uma posição de margem de US$ 100, mantém por 48 horas e depois fecha, as taxas seriam:
- comissão: 100*0.2%… $0.20
- juros: 0.08222 x 100 *2… $ 0.17
Taxas totais para esta negociação: $ 0.57 (0.37%)
Outro cenário, vamos imaginar que você assume uma posição de margem de 10000 euros, mantém por 10 dias e depois fecha, as taxas seriam:
- comissão: 10000*0.2%… EUR 20,00
- juros: 0.08222 x 10000 *10… EUR 82,00
Taxas totais para esta negociação: EUR 102,00 (1.02%)
Observe e registre as comissões com cuidado, como sempre.
A comissão é retirada da negociação, uma ordem de compra de mercado desse valor em XCM (o token utilitário para taxas na CoinMetro), criando mais volume e demanda pelo token.
As taxas de comissão são vistas na exibição “Histórico de pedidos” em “Taxas”:
Você também pode receber ‘descontos’ em taxas segurando a moeda CoinMetro: XCM
O pessoal do grupo de bate-papo do Telegram me disse que o 'pregão' do XCM está definido para US$ 15 centavos, ou seja. não pode ser negociado por menos do que isso. A partir deste artigo, seu preço é de 22 centavos, o que é interessante.
Aqui está o link para a API do CoinMetro no Postman: https://documenter.getpostman.com/view/3653795/SVfWN6KS
Você pode experimentar a interface da API REST do Postman. Em seguida, selecione um idioma na lista suspensa superior para ver um exemplo de código nesse estilo.
Encontrei um wrapper Python para a API REST CoinMetro aqui:
Basta copiar CMapi.py em seu diretório de trabalho e importe-o, simples. Não há necessidade de instalar nada, este é apenas um invólucro fino. O wrapper de autenticação está incluído e é útil.
Vamos começar com algumas importações básicas:
importar CMapi
de data e hora importar data e hora, timedelta
json de importação
pedidos de importação
E uma função de inicialização do cliente com os credenciais:
cliente = CMapi.CMClient(email='SEUEMAIL@algum lugar.com', passwd='SUA SENHA', hashkey='Sim')
Agora podemos obter ativos comerciais:
cliente.get_trading_assets()[{'nome': 'Bitcoin',
'símbolo': 'BTC',
'tipo': 'moeda',
'canDeposit': Verdadeiro,
'canWithdraw': Verdadeiro,
'canTrade': Verdadeiro,
'sentimentData': {'sentiment': 32.276666666666664,
'juros': 0.8021655707519841},
'dígitos': 6,
'minQty': 0.00025,
'maxSwap': 2500,
'canMarket': Verdadeiro,
'id': Nenhum},...
Saldos da sua conta:
saldos = client.get_balances(){'ETH': {'ETH': 0, 'EUR': -0.07, 'BTC': -2e-06, 'USD': -0.09},
'USD': {'USD': 494.66, 'EUR': 419.33, 'BTC': 0.01066, 'ETH': 0.1537},
'XCM': {'XCM': 0, 'EUR': 0, 'BTC': 0, 'USD': 0, 'ETH': 0},
'TOTAL': {'EUR': 419.33, 'BTC': 0.01066, 'USD': 494.66, 'ETH': 0.1537},
'REF': {'XCM': 0, 'EUR': 0, 'BTC': 5e-06, 'USD': 0, 'ETH': 0}}
Obtenha dados históricos:
agora = datetime.now() — timedelta(minutos= 3)velas = client.get_historical_prices(pair=’ETHUSD’, timeframe=60000, From=now.strftime('%s')+'000')para c em velas['candleHistory']:
imprimir(datetime.fromtimestamp(c['timestamp']/1000.0), c['o'], c['c'])2021-08-15 16:44:00 3249.6723259755 3249.6723259755
2021-08-15 16:45:00 3249.6723259755 3249.6723259755
2021-08-15 16:46:00 3249.6723259755 3249.4520935
2021-08-15 16:47:00 3249.6723259755 3247.57055175
E mais, veja CMapi.py para obter detalhes.
A API REST tem endpoints de negociação de margem, mas infelizmente o wrapper Python não tinha (no momento deste artigo), então recorremos a fazer solicitações REST.
Criar pedido
Aqui está um exemplo de uma ordem SHORT Market via REST API:
BASE = "https://api.coinmetro.com"# vender a descoberto na margem
headers={"Autorização":client.bearerToken, 'Content-Type': 'application/x-www-form-urlencoded'}carga útil = f'orderType=mercado&buyingCurrency=USD&moeda de venda=ETH&vendaQtd=0.0315&margem=verdadeiro'resposta = solicitações.request("POST", f'{BASE}/exchange/orders/create', cabeçalhos=cabeçalhos, dados = carga útil)
respostaJson = json.loads(response._content)
Substitua a moeda e a quantidade pelas suas variáveis.
Você também pode empacotar os parâmetros na estrutura JSON.
Note o margem = verdadeiro parâmetro, você também deve alocar garantia de margem (no painel) antes de tentar negociar com margem usando a API.
A carga útil da resposta é algo como:
{'userID': '60e8fc89116db05a7fdb857b', 'orderID': '60e8fc89116db05a7fdb857b1629051520858cb64815e410cbbac', 'orderType': 'market', 'buyingCurrency': 'USD', 'sellingCurrency': 'ETH', ' vendoQty': 0.0315, 'margem' : 'true', 'timeInForce': 4, 'boughtQty': 99.824, 'soldQty': 0.0315, 'creationTime': 1629051520860, 'seqNumber': 5018778582, 'firstFillTime': 1629051520860, 'lastFillTime': 1629051520860 5018778581, 'preenchimentos' : [{'seqNumber': 1629051520860, 'timestamp': 0.0315, 'qty': 3169.015873015873, 'price': 1629051520860, 'side': 'sell'}], 'completionTime': 99.824, 'takerQty': XNUMX. XNUMX}
Note o 'takerQty', este é o valor em dólares da margem de garantia em dólares americanos que esta transação exigiu.
Obter pedidos
Você pode obter uma lista de pedidos atendidos desde algum período de tempo:
agora = datetime.now() — timedelta(horas=5)
agoraInt = int(agora.strftime('%s')+'000')preenchimentos = client.get_order_fills(since=nowInt)[{'par': 'ETHUSD',
'Número seq': 5018778581,
'carimbo de data e hora': 1629051520860,
'quantidade': 0.0315,
'preço': 3169.015873015873,
'lado': 'vender',
'orderID': '60e8fc89116db05a7fdb857b1629051520858cb64815e410cbbac'},
{'par': 'ETHUSD',
'Número seq': 5018888387,
'carimbo de data e hora': 1629051959955,
'quantidade': 0.031454,
'preço': 3173.6504101227188,
'lado': 'comprar',
'orderID': '60e8fc89116db05a7fdb857b16290519599523046b30d3585a5d7'}]
Observe os elementos ‘quantidade’ e ‘preço’. Você pode usar quantidade * preço para obter a quantidade de moeda e comprar uma posição, da seguinte forma:
BASE = "https://api.coinmetro.com"quantidade = curta['preço']*curta['quantidade']# comprar (fechar posição curta)
headers={“Autorização”:client.bearerToken, ‘Content-Type’: ‘application/x-www-form-urlencoded’}carga útil = f’orderType=market&buyingCurrency=ETH&sellingCurrency=USD&sellingQty=’+qty+’&margin=true’
resposta = solicitações.request(“POST”, f’{BASE}/exchange/orders/create’, cabeçalhos=cabeçalhos, dados = carga útil)
respostaJson = json.loads(response._content)
{'userID': '60e8fc89116db05a7fdb857b',
'orderID': '60e8fc89116db05a7fdb857b162911944571101e1277f9d9f8be1',
'orderType': 'mercado',
'compraMoeda': 'ETH',
'vendaMoeda': 'USD',
'Qtd de venda': 99.943,
'margem': 'verdadeiro',
'timeInForce': 4,
'Qtdcomprado': 0.030455,
'quantidade vendida': 99.943,
'tempo de criação': 1629119445720,
'Número seq': 5036606277,
'primeiroFillTime': 1629119445721,
'últimoFillTime': 1629119445721,
'preenchimentos': [{'seqNumber': 5036606276,
'carimbo de data e hora': 1629119445721,
'quantidade': 0.030455,
'preço': 3281.6614677392877,
'lado': 'comprar'}],
'tempo de conclusão': 1629119445721,
'takerQty': 0.030455}
E, finalmente, para fechar uma posição existente (preenchida), primeiro precisamos do seu ID do pedido:
agora = datetime.now() — timedelta(dias=1)
agoraInt = int(agora.strftime('%s')+'000')
preenchimentos = client.get_order_fills(since=nowInt)
Fechar posição
Vamos fechar o pedido mais recente (preenchido):
# posição fechada# obtém o pedido preenchido mais recentemente
s = preenchimentos[-1]headers={“Autorização”:client.bearerToken, ‘Content-Type’: ‘application/x-www-form-urlencoded’}
carga útil = {}resposta = solicitações.request(“POST”, f’{COINMETRO}/exchange/orders/close/’+s[‘orderID’], cabeçalhos=cabeçalhos, dados = carga útil)respostaJson = json.loads(response._content)orderID 60e8fc89116db05a7fdb857b1629139458123bbb67a60d23c7838 open qty 0.0311
{'userID': '60e8fc89116db05a7fdb857b', 'orderID': '60e8fc89116db05a7fdb857b1629139458123bbb67a60d23c7838_CL', 'orderType': 'mercado', 'buyingCurrency': 'ETH', 'sellingCurrency': 'USD ', 'margem': 'verdadeiro', ' comprandoQty': 0.0311, 'timeInForce': 4, 'boughtQty': 0.0311, 'soldQty': 100.204, 'creationTime': 1629139525626, 'seqNumber': 5042414933, 'firstFillTime': 1629139525627, 'lastFillTime ': 1629139525627, 'preenche' : [{'seqNumber': 5042414932, 'timestamp': 1629139525627, 'qty': 0.0311, 'price': 3221.993569131833, 'side': 'buy'}], 'completionTime': 1629139525627, 'takerQty': 0.0311 XNUMX}
Você verá toda essa atividade refletida em seu painel CoinMetro.
- 100
- 7
- Conta
- ALGO
- Todos os Produtos
- api
- artigo
- Ativos
- Autenticação
- autorização
- MELHOR
- binário
- Pouco
- Bitcoin
- Bitfinex
- Bitstamp
- bittrex
- bnb
- BTC
- comprar
- acusações
- código
- Moeda
- coinbase
- de referência
- Criar
- Credenciais
- cripto
- Crypto.com
- Moeda
- Suporte ao cliente
- Clientes
- painel de instrumentos
- dados,
- Demanda
- DID
- dígitos
- ETH
- ETHUSD
- eToro
- EU
- EV
- exchange
- Trocas
- experimentar
- Taxas
- Finalmente
- Primeiro nome
- função
- Gemini
- GM
- Bom estado, com sinais de uso
- Grupo
- hacker
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- HitBTC
- segurar
- Como funciona o dobrador de carta de canal
- Como Negociar
- hr
- HTTPS
- ia
- interesse
- IP
- Endereço IP
- IT
- Kraken
- língua
- LINK
- Lista
- longo
- Fazendo
- negociação de margem
- mercado
- média
- NY
- oferecer
- aberto
- ordem
- ordens
- poloniex
- preço
- Realidade
- Referência
- resposta
- DESCANSO
- equipamento
- Robinhood
- vender
- sentimento
- conjunto
- Baixo
- simples
- So
- começo
- Estratégia
- ajuda
- Target
- Telegram
- tempo
- token
- comércio
- trades
- Trading
- negociação de criptografia
- transação
- us
- USD
- usuários
- utilidade
- Utility Token
- valor
- Verificação
- volume
- VPN
- W
- Wallet
- Atividades:
- escrita
- X
- ano