操控趋势策略 笔记
最近一直在琢磨操控趋势策略,玩的好一波能赚数千u,玩的不好就亏个几百一千u
会亏钱,搞得我很不爽,玩了几十笔到现在赚了3w6,其中有1wu被冻结了….
反反复复让我提交了一个礼拜各种资料,到现在还没解开,交易所就是这样,亏钱笑嘻嘻,赚钱mmp
还在精进中,努力想办法不会亏钱,让每一次都能赚5ku以上
主要就是我拉盘有人砸盘,我跟着砸盘又拖底买入,太烦了
然后遇到btc动,其他币也会跟着动,得要没行情的时候才行
靠这个策略至少赚1m
【招聘】量化团队组队中 量化交易
资金和策略太多一个人管理不过来
地点江西赣州,欢迎加入
一、高频做市商
- 网络延迟架构师
- 数学建模并优化
- 系统内延迟优化
- 精通Python,熟悉Rust或C++
二、套利
- Python异步策略开发
- 熟悉交易所
三、交易员
- 监控套利运行状态
- 对做市商机器人及时调整参数
四、链上
- 智能合约开发
- 节点搭建并优化低层
- 熟悉Python nodejs c++
五、渗透测试
- 对量化系统进行风险评估
- 技术过硬
如果你会其中一项,那么我们就可以聊聊啦~
可以帮助你的圣杯策略:Ma8 策略
1# 屁话
偶然发现的一款策略,能神奇的不改参数适应市场
并且2018年到现在不改参数都是盈利的
比所谓的拟合策略强不知道多少倍,哈哈
后来这个策略作为一个因子伴随了我几个月的时间用于实盘
总比一直放在收藏夹吃灰,还不如分享给你们让我赚点流量
仅供分享思路,真要实盘赚钱,你要做的还很多
仅供分享思路,真要实盘赚钱,你要做的还很多
2# 原理
开仓:连续8根收盘价大于均线,最后一根收盘价小于均线
平仓:持仓3根k线,或突破最高点,或ATR,或固定止盈止损
3# 回测
4# 源码
原版:
https://www.tradingview.com/script/gl17fzdf-8-Day-Extended-Runs/
自己修改的:
import talib
import pandas as pd
from main.zhibiao import *
seting = {
"备注": "禁用",
"name": "Ma8",
"symbol": "BTCUSDT_1h_Buy",
"kTime": "1h",
"ma_len": 29,
"ma_type": "lsma",
"ma_src": "o+h+l+c",
"pianli": 14,
"pingcang": 4,
"tupo": 34,
"atr_len": 43,
"atr_mult": 2.871,
"atr_type": "rma",
"buy": 1,
"buyZhiying": 96.216,
"buyZhisun": 12.06,
"sell": 0,
"sellZhiying": 0,
"sellZhisun": 0,
"kai": 100
}
"""
MA连续偏离8次入场,十根K线后出场
"""
def Ma8(r, df, seting):
c = len(df)
df['ma_src'] = GetSrc(r, seting['ma_src'])
df['ma'] = GetMa(df['ma_src'], seting['ma_len'], seting['ma_type'])
df['atr'] = ATR(r, seting['atr_len'], seting['atr_type'])
df['zhisun'] = 0.0
if seting['buy']:
df['h'] = df['High'].rolling(seting['tupo']).max()
df['l2'] = df['Low'].rolling(seting['pianli']).min()
if seting['sell']:
df['l'] = df['Low'].rolling(seting['tupo']).min()
df['h2'] = df['High'].rolling(seting['pianli']).max()
df['da'] = 0
df['xiao'] = 0
df['buy'] = 0
# df['pingtime'] = 0
for i in range(c):
if i > seting['ma_len']:
if df['Close'][i] > df['ma'][i] and (df['Close'][i-1] < df['ma'][i-1] or df['da'][i-1]):
df['da'].values[i] = df['da'][i-1] + 1
if df['Close'][i] < df['ma'][i] and (df['Close'][i-1] > df['ma'][i-1] or df['xiao'][i-1]):
df['xiao'].values[i] = df['xiao'][i-1] + 1
preSide = 0
preZhisun = 0
preZhisunBili = 0
preZhiYingBili = 0
buy = 0
sell = 0
for i in range(c):
if i > seting['ma_len'] and i+1 < c:
if seting['buy']:
#连续多少根 大于 均线之上
if df['Close'][i] < df['ma'][i] and df['da'][i-1] > seting['pianli']: #and df['Close'][i] > df['l2'][i]
df['side'].values[i] = 'BUY'
if preSide != 'BUY':
preSide = 'BUY'
preZhisun = df['Open'][i+1] - seting['atr_mult'] * df['atr'][i]
preZhisunBili = GetRoeJia(-seting['buyZhisun'], {'liang': 1, 'jiage': df['Open'][i+1]})
preZhiYingBili = GetRoeJia(seting['buyZhiying'], {'liang': 1, 'jiage': df['Open'][i+1]})
# if not buy:
# df['pingtime'].values[i] = df['Time'][i] + (df['Time'][1] - df['Time'][0]) * (seting['pingcang'] + 2)
# df['pingtime'].values[i] = GetTime(df['pingtime'].values[i], '%Y-%m-%d %H:%M')
buy += 1
elif buy:
buy += 1
if buy > seting['pingcang']+1 or (seting['tupo'] and df['Close'][i] >= df['h'][i-1]):
df['close'].values[i] = 'BUY'
buy = 0
if preSide == "BUY":
preSide = 0
df['buy'].values[i] = buy
if seting['sell']:
if df['Close'][i] > df['ma'][i] and df['xiao'][i-1] > seting['pianli']: # and df['Close'][i] < df['h2'][i]
df['side'].values[i] = 'SELL'
if preSide != 'SELL':
preSide = 'SELL'
preZhisun = df['Open'][i+1] + seting['atr_mult'] * df['atr'][i]
preZhisunBili = GetRoeJia(-seting['sellZhisun'], {'liang': -1, 'jiage': df['Open'][i+1]})
preZhiYingBili = GetRoeJia(seting['sellZhiying'], {'liang': -1, 'jiage': df['Open'][i+1]})
# if not sell:
# df['pingtime'].values[i] = df['Time'][i] + (df['Time'][1] - df['Time'][0]) * (seting['pingcang'] + 2)
# df['pingtime'].values[i] = GetTime(df['pingtime'].values[i], '%Y-%m-%d %H:%M')
sell += 1
elif sell:
sell += 1
if sell > seting['pingcang']+1 or (seting['tupo'] and df['Close'][i] <= df['l'][i-1]):
df['close'].values[i] = 'SELL'
sell = 0
if preSide == "SELL":
preSide = 0
df['zhisun'].values[i] = preZhisun
if (preSide == 'BUY' and df['Low'][i] <= preZhisun) or (preSide == 'SELL' and df['High'][i] >= preZhisun) or \
(preSide == 'BUY' and df['Low'][i] <= preZhisunBili) or (preSide == 'SELL' and df['High'][i] >= preZhisunBili) or \
(preSide == 'BUY' and df['High'][i] >= preZhiYingBili) or (preSide == 'SELL' and df['Low'][i] <= preZhiYingBili):
preSide = 0
buy = 0
sell = 0
return df
Python 高频量化异步协程 笔记
1.踩坑
在我刚开始用异步协程框架写策略框架爽的飞起的时候
小数据没什么问题,流畅无延迟
后面加大数据量同时创建N个任务(loop.create_task)
那么最后面创建的这个任务,会延迟好几秒才执行,直接给我整懵逼了
任务越多,延迟情况越严重,我测试,任务很少,也会有0.00几秒的延迟
再使用多线程同时创建多个任务执行就不会有延迟的问题出现
但是一个新问题出现了,不使用异步协程又没办法使用aiohttp??
答案:用threading多线程调用含asyncio异步函数
相关资料:https://blog.csdn.net/LeKZzz/article/details/127343128
2. uvloop
import uvloop
uvloop.new_event_loop()
loop.create_task(print_money())
loop.run_forever()
Ps:使用uvloop 可以使 asyncio 更快。事实上,它至少比 nodejs、gevent 和其他 Python 异步框架要快 两倍 。基于 uvloop 的 asyncio 的速度几乎接近了 Go 程序的速度。
3. 目前结构
目前我的策略框架为:
- 异步协程
- aiohttp http请求
- 多线程
- Websocket更新触发策略,而非轮训
我不但要在网络延迟和手续费上卷你们,还要在策略框架上卷你们,哇哈哈哈哈
不过还是得向c++低头
可惜c++写起来太麻烦了,c++100行,python1行
后面慢慢把核心功能用c++实现,然后用python去调用
Python 高频量化Http网络请求速度优化 笔记
第一:c++为底层的python库
第二:异步携程 + aiohttp + Session
第三:urllib3 PoolManager
第四:requests + Session
第五:requests
说个小知识,requests并发请求使用多线程网络请求会阻塞,多进程才不会
总结:垃圾requests
部分交易所支持Websocket下单,比http请求步骤更少,不需要再连接,理论上速度更快
相关资料:
ETH RPC搭建 笔记
配置选择
先是看了aws、谷歌云、阿里云
这个配置都要1-2wrmb一个月,太贵了
问了很多朋友,打算用hetzner,50欧一个月足以
我选的配置:64gb,2tb ssd
开好后在邮箱收到信息
链接后
按以下步骤安装系统:https://0o0.me/server/hetzner-reinstall-with-raid0.html
系统选ubuntu 22
搭建RPC节点
搭建eth rpc指令:
mkdir /data
cd /data
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.11.2-73b01f40.tar.gz
tar -zxvf geth-linux-amd64-1.11.2-73b01f40.tar.gz
mkdir prysm
cd prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh
chmod +x prysm.sh
./prysm.sh beacon-chain generate-auth-secret
cd /data/
cd geth-linux-amd64-1.11.2-73b01f40
输入完,按两次回车:
nohup ./geth --datadir "/data/eth/" --maxpeers 75 --cache=2048 --authrpc.jwtsecret /data/prysm/jwt.hex --http --http.addr "127.0.0.1" --http.port "18181" >&1 &
cd /data/prysm/
输入完,按两次回车:
nohup ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=./jwt.hex --suggested-fee-recipient=0x91a0982397BEB2B65DFF9a6436695e362135cBa6 --accept-terms-of-use &
查看eth执行层日志 tail -f /data/geth-linux-amd64-1.11.2-73b01f40/nohup.out
查看eth共识层日志 tail -f /data/prysm/nohup.out
等待同步最新块,over~
大概要1周内
使用老版本执行层同步
eth执行层如果只想太慢可以用老版本
用老版本同步到分叉的那个块,再运行新版本
运行老版本之前要先关掉新版本的进程并且删除eth文件夹
ps -ef | grep geth
kill -9 123456
rm -rf /data/eth
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.24-972007a5.tar.gz
tar -zxvf geth-linux-amd64-1.10.24-972007a5.tar.gz
cd geth-linux-amd64-1.10.24-972007a5/
nohup ./geth --datadir "/data/eth/" --maxpeers 75 --cache=2048 --http --http.addr "127.0.0.1" --http.port "18181" 1>&1 &
使用Python3执行脚本
等两个层都同步完成之后
就可以用python3来调用自己的rpc节点了
像我搭建的节点
ipc地址:/data/eth/geth.ipc
http地址:http://127.0.0.1:18181/
这里会出现pip3不存在的情况
需要先安装pip3
然后再安装web3
wget https://bootstrap.pypa.io/get-pip.py get-pip.py && sudo python3 get-pip.py
pip3 -V
pip3 install web3
python3 demo 代码:
from web3 import Web3
my_provider = Web3.IPCProvider('/data/eth/geth.ipc')
my_provider = Web3.HTTPProvider("http://127.0.0.1:18181/")
w3 = Web3(my_provider)
# 当前区块高度
blockNumber = w3.eth.blockNumber
print(blockNumber)
更多的操作可以在网上找资料
还可以用nodejs写,用golong的话最快
高频量化网络延迟速度优化 笔记
- aws c区最快,a区11ms,c区7ms,且系统差距就差很多延迟,最快的是ubuntu20
- python的aiohttp内部几百微妙,要用c++,招一个c++开发
- aws c5类型的cpu能快一点点
交易所:
- bian 在东京A区和C区,老服务器在C区,负载均衡达到一定程度就到A区,平时C区块
- coinex 东京C区
- okx 在阿里云香港
- bybit 在新加坡
- 火币 东京D区
4-2日 好久没更新了 实盘
好久没更新博客了
最近两个月圣杯策略翻了几倍,但是踩了几个坑又赔回去了
这两天给圣杯策略做了个全交易对实时拟合
淘宝租了五台 i5-12600KF
然后用用遗传算法,实时拟合币安141个合约交易对、6个周期
回测日化100%+,恐怖吗,今天实盘跑了一天
还不错,但是还是有些bug
期待以后的效果
我现在还在跑千千千神的高频做市策略,带预测的,哈哈
最近币安上的新币韭菜ape、zil、gmt最多的时候一天100%,平时日化5%
2-25日 圣杯策略实盘随笔 实盘
累积跑了十天,这两天的暴跌行情全部吃到了
累积盈利40%左右:
这两天刚加了很多交易对,拟合的情况日化10%,最大回撤20%左右
再跑个十天,继续增加
今天早上4点时候,出现了插针的情况
吸取了上次的教训,我的实盘增加了风控功能,成功把这次风险规避
回测系统的回撤达到了20%+,而实盘有风控回撤只有6%
交易就是如此,不断吸取教训,改进,每一次改进真金白银
2-16日 圣杯策略实盘随笔 实盘
最近半个月状态挺糟糕的,对自己的策略严重失去信心
亏30%的时候,继续抗,直到亏70%,才后知后觉
这就是人性,再次败给了自己
把风控抛之脑后
总结了两个问题:
第一个是我一直在币安跑,后面换了Okex,对比币安,滑点增大,有的时候滑点可以达到百分之一。我回测没有统计平均单笔利润,然后也不怎么在意滑点,只在意手续费,最后回测结果和实盘结果很大出入
第二个是过拟合的问题,几乎所有机构,都是对着历史拟合,失效了继续拟合,这似乎是一个无解的问题。导致历史最大回撤被超过。
调整了下心态,继续吧
目前操作为:
- 换回币安
- 除了多品种外,再增加多周期,也就是一个品种同时跑15m、30m、1h,2h。(另外可以尝试6m这种大家不常用的k线,会有意想不到的效果,用3m的k线拼接就好了)
- 注重平均单笔利润,如果你的策略回测结果平均单笔利润为万2,那么增加一点手续费或者滑点就是凉的结果
- 完整的风控,针对过拟合的问题,要及时更新拟合失效的品种,对每个品种最大回撤要有个预期。杠杆不要开太大
对了,目前币安的BUSD挂单为-0.0001%,吃单为0.0002%(貌似持续半年了)
但是比较USDT,挂单成交率没那么高,做的人太多
并且支持BUSD的合约交易对只有八个
期间把失败分享给朋友的时候,有的人支持我继续,有的人叫我放弃炒币,好好做事
但是其实我的策略还是盈利的状态,就是开太高的杠杆一味追求利益,然后来到最大回撤关掉风控继续死扛
不过这都是自己作的,能怪谁呢?