1
worldquant 2023-09-03 12:45:38 +08:00
为啥要自己造轮子呢。https://github.com/freqtrade/freqtrade
|
2
zictos 2023-09-03 13:32:27 +08:00
别人的用起来感觉更复杂,自己写更简单。
就是看一下币安的 api 文档,发送下 http 请求,需要用到什么 api 就使用具体的 api 就行,尽量做到代码非常简单。获取价格和 k 线,针对 k 线进行一些计算以及一些指标的计算,循环更新 k 线,然后满足交易条件了就通过 api 开仓,满足平仓条件了就通过 api 平仓。 反正我总觉得看到别人的开源项目更复杂,压根不愿意去熟悉别人的项目,自己写的话需要什么就直接立刻上手了,每种需求的代码量都不多。 |
4
zictos 2023-09-03 14:56:31 +08:00
@ccclo #3 我的代码只适合我的具体策略的需求,所以可以很简单,开源项目才需要考虑通用性。
而且我是做突破的,必须要先挂单(到达指定价格后市价触发开仓,非低买高卖的挂单),不然临时下市价单的话滑点会非常大,根本来不及。所以重点逻辑就是要处理好这种实时监控,成交后立刻设置止损并记录开仓信息,之后会每隔一段时间监控是否满足平仓条件。 |
7
ccclo OP 那你帮我写一个 u 本位合约市价的 python 代码 和平仓 代码吗 我是用 chatgpt 写出来 下单不了,我只想要这两个代码 我在这两个代码中 在更改
@zictos |
9
zictos 2023-09-03 15:30:46 +08:00
@ccclo #7 把****替换成四空格,或者让 chatgpt 帮你改。
import time import requests import hmac import hashlib from urllib.parse import urljoin, urlencode def market_order(symbol, quantity, side, reduceOnly='false', loop=True): ****API_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #替换成自己的 API_KEY ****SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #替换成自己的 SECRET_KEY ****BASE_URL = 'https://fapi.binance.com' ****headers = {'X-MBX-APIKEY': API_KEY} ****PATH = '/fapi/v1/order' ****url = urljoin(BASE_URL, PATH) ****params = {'symbol': symbol, ************ 'quantity': quantity, ************ 'side': side, ************ 'type': 'MARKET', ************ 'reduceOnly': reduceOnly} ****while True: ********try: ************if 'signature' in params: ****************del params['signature'] ************params['timestamp'] = int(time.time()) * 1000 ************query_string = urlencode(params) ************params['signature'] = hmac.new(SECRET_KEY.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest() ************r = requests.post(url, headers=headers, params=params, timeout=4) ************# print(r.text) # 查看响应文本 ************if r.status_code == 200: ****************r = r.json() ****************return r['orderId'] ************if not loop: ****************return None ********except BaseException as e: ************print(e) ************if not loop: ****************return None ********time.sleep(0.1) symbol = 'BNBUSDT' # 交易对 quantity = 0.03 # 下单的数量 side = 'BUY' # 下单的方向,BUY 或者 SELL order = market_order(symbol, quantity, side) |
11
zictos 2023-09-03 15:54:52 +08:00
@ccclo #10 你在币安里面是设置了单向交易吧,默认就是单向交易,只要你没改过就行。
如果你现在是有多单的持仓,你平仓只需要把方向 side 参数改为 SELL 就行了,如果数量一样的话默认就是平仓。你也可以将函数的 reduceOnly 参数设为'true',保险一点,这样就无论如何都不会增加仓位,当然你不设也可以。 币安默认平仓都是要指定数量的,不过你可以设一个更大的数量,只要将 reduceOnly 设为 true 就不会增加仓位。比如你现在有 0.03 的多单,你下一个 0.3 的市价 SELL 单,并且 reduceOnly 设为 true ,也是会直接平仓的,并且不会增加仓位。 |
13
Her0 2023-09-03 19:20:50 +08:00
|
15
zictos 2023-09-04 17:32:42 +08:00
@ccclo #14 这个我也没弄过,好像是要配置什么 Webhook ,tradingview 我只是用来看行情的,tradingview 上的策略大部分也是通过各种指标计算的,python 的 pandas_ta 库基本可以计算各种指标,如果策略比较复杂的话,那你要分析 tradingview 策略的代码,然后改写成 python 。我自己基本各种复杂的策略都可以直接通过 python 实现,关键是自己要弄清楚信号原理,别人的策略要是代码太复杂的话,我也没什么功夫去研究别人的策略的代码。
使用 tradingview 通知的话,tradingview 上面有一个“警报”按钮,点击后可以选择你正在使用的策略,然后在通知里可以配置 Webhook URL ,这个要付费才行,其实应该也可以选择发送邮件,再 python 循环检测邮箱看有没有新邮件就行。不过具体我也没测试过,不知道具体有哪些坑。 |
18
zictos 2023-09-14 21:21:21 +08:00 via Android
quantity = 0.03
之前的代码是上面这样的,这就是下单数量,bnb 是最低 0.03 ,也可以是 0.04 或 0.05 ,最多两位小数。btcusdt 是最少 0.001 ,最多三位小数,btc 现在价格 26500 左右,开 0.001 就大约是开仓了 26.5u 。你也可以把我所有说过的话发给 chatgpt 让它根据实际情况给出代码 |