围绕着上海、大连、郑州三家商品期货交易所大厦附近的写字楼里,活跃着一批批以『 低回撤高夏普 』为特征的交易团队,而且他们的队伍还在不断发展壮大。在交易室,一排排电脑井然有序。此刻正是交易时间,安静得只听见键盘的敲击声。面前的 8090 后,全神贯注盯着密密麻麻的闪电图和跳动的盘口价格,键不离手以确保每一个仓位都准确无误。
这是一群与时间赛跑的人,每人每天交易量多达几十次甚至上百次,并且每个月 90% 以上的交易日收益为正。如果以月为单位统计,几乎全年每个月都是正收益。这就是——期货人工炒单。
炒单其实就是抢帽子,它还有一个正统的名字——人工高频交易。最早是在上个世纪 90 年代末由郑州兴起,在股指期货上面发扬光大。大连做炒单的很多是有现货背景的人在做,上海则是套利式炒单的发源地。
与传统交易方法不同的是,炒单不看 K 线图,也不看技术指标。只看盘口价格或闪电图。用一种比较精细的价格结构(Tick)快进快出,抓取每天价格波动中波纹式的极小差价,追求以量取胜的一种操作模式。
国内市场确实有一部分人靠这种交易模式赚到了不少钱,各种期货大赛和私募排排上都有炒单的身影,这个没有必要去否认。而这种盈利模式之所以存在,需要具备几个先决条件:
这是很多炒单盈利的根本所在,但也不是绝对。现在由于互联网的发展,各种信息公开透明化,网上就可以全国开户,手续费已经低至只在交易所基础上加 0.1 元。这在几年前肯定是拿不到的。
另一方面,现在网络带宽的增加和软件的进步,使得普通散户也能享受到便捷的交易方式。但是,专业的炒单大部分还是在交易所附近使用内网交易。这保证了更低的行情和交易延迟。
关于炒单的方法,爬遍 Google、Bing 很难找到一套完整的,真正的方法不会被公布出来,公布出的不一定是真的。大部分是在教你怎么去止损。止损确实是炒单的第一道关卡,但是即便学会了止损,还是不得而知。
大体上来讲,炒单的交易方法分为两类:
趋势型炒单法:当价格到达关键点位的时候,关注盘口的吃单速度,一旦爆点,马上追单。止损设 0 或 1 个点。止盈则根据盘面价格走势,如果价格持续快速运动,则浮盈的单子多拿一会儿。如果盘口吃单速度明显变慢或者价格到达另一个关键点位,则主动止盈。
荡型炒单法:在分时图或闪电图上,当均线走平时才开始介入,并参考前面震荡走势的高低点,也就是极限点位,如果价格急拉至均线上方极值时开空单,如果价格急砸至均线下方极值时开多单。止损设 1 或 3 个点,当价格突破震荡区,止损出场。如果价格回归到均线对方时主动止盈。
这两种方法,其实已经概括了炒单的开平仓和止损止盈。无非是胜率和盈亏比的不同搭配而已,趋势型炒单属于低胜率高盈亏比,而震荡型炒单法属于高胜率低盈亏比。如果有人胜率达到 80% ,其盈亏比一定是是小于 1 的,理论上 90% 的胜率也有可能,但带来可能是亏损的次数少,亏的幅度大。也就是说,一味追求胜率意义不大。
关于止损
止损是炒单的基本功,一般要求是 0 或 1 止损。如果止损止的慢就需要反复练习,把止损当做下意识的反映。一般情况下,都是在进场之前就想好在哪止损。
关于仓位管理(1)
如果你是新手,当然是仓位越小越好。如果你是老手,就必须半仓或者重仓。作为以轻仓、分散投资的中低频隔夜交易者可能无法理解为什么要重仓,其实重仓博取小波动正是炒单的核心,这也是区别于其他交易方法的地方。
关于仓位管理(2)
需要注意的是,这里说的重仓并不是根据你的资金量,而是根据当前品种的盘口厚度。也就是说你的仓位要根据当前的盘口变化而变化。举一个例子,当你想买进的时候,你的仓位就是当前的卖一平均挂单量。
关于滑点
炒单进出场一般用限价单、对手价,极端行情可能会用到超价。除了限价单,遇到滑点是不可避免的。有条件可以在交易所附近使用内网,能用网线就不要用 WiFi。
关于心态
一旦掌握交易方法,决定从量变到质变的就是心态了。就炒单而言,学到底大家手法其实都差不多,所以这时候心态往往比方法更重要,坏的心态不会对交易有任何帮助。因为方法好而心态不好,价格达到关键位置,就可能因为心态原因拿不住单子。
炒单的优势
炒单的劣势
手续费提高
炒单者最敏感的就是手续费,因为手续费关乎一个品种的投入和收益比。股指期货管制后,炒单者不得不转到商品期货上面。2016 年商品期货火爆行情,使得部分品种大幅度提高了手续费,因此死了一大批水平不高的炒单者。
心态失控
无论多好的方法、多好的心态,都不可避免会亏钱,因为行情不是你决定的。偶尔几次、几天亏损是再正常不过的事情,这就是考验心态的时候了。炒单者也经常会碰到极端行情,但这种是预测不了的,如果与炒单者的方向相反,很多人的第一反应是无从下手,就会把整个交易计划打乱,心存侥幸不止损,那么将是惨痛的代价——死扛单。
品种性质变化
每个品种都有自己的性格,有的酣畅豪爽,走势波澜壮阔;有的优柔寡断,走走停停,没有方向。一般而言,做炒单的都有自己熟悉的品种进行固定操作,但一旦原本熟悉的品种,因为种种原因成交量低迷,炒手就只能转做其他品种,就会非常不适应。
方法不行
这个就不用多说了,很多人都认为自己执行力不行,执行力不行,是因为心态不行。其实不然,是方法不行。自己找个借口回避罢了。
市场参与者结构的变化
早期市场参与者结构简单,那个时候,只有价格没有图形,所有图形都在脑子里。但是现在市场参与者种类太多了,交易方式跟以前也复杂了。各种套利、现货套保、宏观对冲、等等,近几年还出现了程序化交易,炒手面临更为复杂的生存环境。
1、炒单能够赚钱背后的原理是什么?
通过闪电图和盘口变化特征,识别出短期波动的突破点或转折点,并捕捉每一轮价格的短期波动。
2、为什么炒单一定要这么高的交易频率?
交易是概率游戏,炒单的模式就是少量多次,在胜率和盈亏比一定的前提下,保持较高的交易频率才能体现出概率优势。
3、我是新手,如何练习炒单的方法?
首先你要学会观察,通过盘面感受买卖盘的报价、报量的变化及其后价格变化的规律,然后归纳出符合你个性的炒单模式。比如:趋势型炒单、震荡型炒单、套利炒单等等。在没有经过半年的模拟盘之前,先不要实盘。
4、如何识别虚假突破?
这个问题的答案价值千金,可惜没有人能答出来,因为没有人能识别真假突破。客观的说,是否是假突破,只有事后才能看出来。炒单就是不断的用小的止损来试错。
5、什么叫盘感?
盘感是长期大量交易次数,堆砌起来的条件反射。可以将盘感理解成一种唯手熟尔的本能。盘感是真实存在的,并不是玄学,而是类似于第六感。
世界上的很多事情,有些看似不可能,但确实有人能够做到,并非这些人又什么特殊的能力,而是将一些简单的事情做得极致了。炒单只是众多交易方法中的一种,我们没必要过份的夸大任何一种交易方法,也没必要一棒子打死任何一种方法。任何方法都有自己的缺陷和存在的合理性,关键的问题是我们如何认知它的缺陷和合理性。
炒单这种交易方法之所以存在,自有它存在的道理。随着时间的推移,一部分炒单的方法会随着市场的进化而淘汰,就如同这个世界没有永动机一样。所以永远对市场抱有敬畏之心。
最后,附上一个真实的高频策略源码(基于优宽量化交易平台):
/*
就是我刚开始编写机器人的源代码,几乎没有改动,参数也是原来的参数。这个版本的程序有许多
需要改进的地方,但即使如此,它也当时表现除了惊人的盈利能力,在我本金不多时,不加杠杆平
均每天盈利在5%左右。当然无论从哪一方面,它都不适应今天的市场。
我同时也发了一篇文章在社区,大家可以看看。
by 小草
*/
//稍微改了一下,用了平台的容错函数_C(),和精度函数_N().
//取消全部订单
function CancelPendingOrders() {
var orders = _C(exchange.GetOrders);
for (var j = 0; j < orders.length; j++) {
exchange.CancelOrder(orders[j].Id, orders[j]);}
}
//计算将要下单的价格
function GetPrice(Type,depth) {
var amountBids=0;
var amountAsks=0;
//计算买价,获取累计深度达到预设的价格
if(Type=="Buy"){
for(var i=0;i<20;i++){
amountBids+=depth.Bids[i].Amount;
//floatamountbuy就是预设的累计买单深度
if (amountBids>floatamountbuy){
//稍微加0.01,使得订单排在前面
return depth.Bids[i].Price+0.01;}
}
}
//同理计算卖价
if(Type=="Sell"){
for(var j=0; j<20; j++){
amountAsks+=depth.Asks[j].Amount;
if (amountAsks>floatamountsell){
return depth.Asks[j].Price-0.01;}
}
}
//遍历了全部深度仍未满足需求,就返回一个价格,以免出现bug
return depth.Asks[0].Price
}
function onTick() {
var depth=_C(exchange.GetDepth);
var buyPrice = GetPrice("Buy",depth);
var sellPrice= GetPrice("Sell",depth);
//买卖价差如果小于预设值diffprice,就会挂一个相对更深的价格
if ((sellPrice - buyPrice) <= diffprice){
buyPrice-=10;
sellPrice+=10;}
//把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
CancelPendingOrders()
//获取账户信息,确定目前账户存在多少钱和多少币
var account=_C(exchange.GetAccount);
//可买的比特币量
var amountBuy = _N((account.Balance / buyPrice-0.1),2);
//可卖的比特币量,注意到没有仓位的限制,有多少就买卖多少,因为我当时的钱很少
var amountSell = _N((account.Stocks),2);
if (amountSell > 0.02) {
exchange.Sell(sellPrice,amountSell);}
if (amountBuy > 0.02) {
exchange.Buy(buyPrice, amountBuy);}
//休眠,进入下一轮循环
Sleep(sleeptime);
}
function main() {
while (true) {
onTick();
}
}
策略参数配置表:
与君共勉!(全文完)
lkljlj 高频策略源码(基于 BotVS 量化交易平台)yun