交易系统的准则

主体和客体

我在从开股票期货账户到现在有一年半了,交易系统迭代了数不尽版本,早期沉迷于缠论技术分析,使用过笔段,后来使用均线,然后使用均线定义笔,各种调整参数,还写过指标,然后亏了很多。

我在技术分析上耽误太多时间,不断的去纠结技术细节,在去年 12 月份棕榈油的一单巨额亏损中,我终于领悟了到底错在哪里。市场是客体,真实的市场就是资金之间的交易,这个过程中价格不断变化,在交易过程中留下了价和量的痕迹,而所谓技术分析是主观性很强的,纠结图形怎么画根本不重要。哪怕把图形画成花儿,难道市场就一定跟着自己画的图形走吗?不会的,市场根本上是真金白银交易,和所谓图形无关。

因此我们说技术分析是通过主观的方式去描述客观的市场,技术分析的规则完全可以自己定义。当然,经典的技术分析大都基于价格图形,定义完技术分析的细节后,无论如何定义,都一定存在市场规则突破技术规则的问题。例如震荡区域压力位会被突破后再跌下来,下降趋势线会被跌破后又回升回来,背离规则会出现背了又背。

市场是混沌的,趋势和震荡的界限是非常模糊的,难以用明确的边际规则来定义,很多走势在当下是没法判断出来的,只有行情走出来才知道。因此基于价格图形的技术分析必然是有胜率瓶颈的,这种瓶颈来源于价格图形分析只是基于图形而非市场,因此基于市场行为的量价分析比价格图形分析更接近市场本质。

量价行为分析也是主观的,很多地方也有主观猜测的意思,可能真实市场并非这样。量是投入,价是产出。量价分析观察的是关键位置投入和产出的关系,通过异常位置的投入产出关系洞悉市场行为,进而看到整体持仓筹码的变化和主力资金在干啥。

既然技术面本身有问题,那么技术面本身何用?因为市场消息不能及时看到,技术面定义了规则,就像是一把量尺,能度量走势的情况,进而设置开仓止损位,另一方面能及时看到走势变动的情况。

独立于传统技术面的是资金面分析,这块是通过量价分析和每日龙虎榜持仓分析得来的,但也有很大的局限性,就是必须是投机资金分歧小的趋势行情,这块还在研究中。

最后是基本面和消息,一波趋势行情必然是有现货基本面供求变化驱动的,因为期货价格虽然是资金博弈而来,但没有人敢逆基本面而行,逆基本面而行的操作会引来更大资金的联合绞杀。受国内影响较大的商品,很多是投机资本和现货资本联合坐庄,人为伪造供求关系,他们就是基本面本身,大资金建立好仓位后,释放利多利空消息,进行标的洗盘、拉升、出货操作;而受外盘影响较大的商品,鞭长莫及没法操控,更要顺基本面。因此,无论是伪造的基本面还是真实的基本面,资金都要顺基本面方向操作。但基本面和消息,作为散户不一定看得到,这些东西的获取,需要有小道消息。

多品种投机原理

对任何一个品种,它肯定有容易操作的时候,也有难操作的了时候。所谓容易,就是该品种会走较久的单边趋势行情,这种情况操作哪怕错过较好的开仓位置,后续也能赚钱;所谓困难,就是该品种在几天时间内反反复复震荡,操作会屡次打止损,持仓几天也没有利润。

投机交易的第一步也是最重要一步就是筛选合适操作的品种,品种选对了哪怕买卖点有偏差,也有可能是赚钱的。选错了品种就会陷入被动的扛单,不仅会浮亏还会浪费操作其他品种的机会。

系统操作基础目标是60分钟线段,那么就要考虑这预期的线段盈利空间如何,是否有量的支持,基本面如何。当多个品种在同一时刻都有机会时候,要注意优选机会更明朗的。

各类分析方法优先级

所有的分析,无论是哪种,无论是基于盘面还是基本面,最终都要有资金操作才行,可以说:资金流向是决定价格变动的唯一根本因素,资金在哪,就要往哪个方向做。

下面会提到四个分析角度,按照优先级依次排序:

  1. 收盘席位净持仓分析
  2. 基于成交量、持仓量的分析
  3. 基于缠论的价格图形分析
  4. 基本面分析

基于缠论的价格图形分析

分型和K线包含

顶分型:无包含关系的3根k线,中间一根k线高点最高,低点也最高。

底分型:无包含关系的3根k线,中间一根k线低点最低,高点也最低。

分型定义

包含处理:将相邻的孕线组合处理成一根K线。

  • 上涨趋势:遵循高高原则,即两个K线相互包含情况下,高点取两根K线最高点,低点也取两根K线最高点。
  • 下跌趋势:遵循低低原则,即两个K线相互包含情况下,高点取两根K线最低点,低点也取两根K线最低点。

包含关系处理中趋势的定义:处理包含关系时候看3根K线,观察前2根是上涨还是下跌趋势。

无论是左包含还是右包含,处理方式都是相同的。

image-20250402153810110

标准笔

标准笔定义:相邻顶底分型之间构成一笔。

连续的笔为一涨一跌轮流连接,因此处理完包含关系的分型也必须是一顶一底,至少有一根非公用K线。连续出现顶没出现底则取更高的,连续出现底没出现顶则取更低的。

下面四幅图笔画法如下:

A:0~1不成笔,因此从0划到3,3再到4。

B:本来可以0划到1的,但1~2间不成笔,因此0划到3。

C:0~1不成笔,1~2看似成笔,但先画下跌趋势,因此0划到3,3再到4。

D:注意蓝色的线是错误的,如果按照蓝色线,那么1~4之间有更低的底分型,因此画法是错误的,应该是0到3,3再到4。

笔的草图

特殊笔

1.缺口成笔

某段走势中,出现一个力度很大的缺口,可以认为当前的缺口是一笔。

菜粕快照-跳空笔的定义

2.震荡区间内的笔

对于震荡较久的区间,可以不必按照标准笔来画,在一定程度上有点儿差距也是可以的,目的是表示当前位置有震荡结构

转折和线段划分

标准划分

线段的划分在于观察相反的“N”字,观察其是否能突破前面趋势的关键点,只有价格突破前关节点后才能判别为构筑了新的线段,即趋势发生了转折。

线段划分

从特征序列的角度去看,就更清晰了,即新的特征序列突破前特征序列关键点。

线段划分-特征序列

特殊情况划分

按照标准划分,下面左图中会产生两次关键位突破,当走势运行一段时间后,可以将这段划分进行优化为右图。

哪怕在走势运行时,先按照左图划分进行操作,但由于后续又突破新高了,所以没有二买卖点,也就无法操作。遇上这样的走势,错过了也没关系。

特殊情况划分

背驰和终结

背驰的作用

新手使用背驰时候,会把背驰当作线段结束的标志,进而抄底摸顶去做一买卖点,这是不对的。线段无论是否背驰,未来一定会以反向线段来结束,反向线段的出现不是因为背驰,而是特征序列对关键点的突破,是次级别走势完结,所以根本就不存在背了又背的情况。

是否出现了背驰最大的影响是反向最终出现后是否会走到某个位置以及更后续的走势结构问题,而不是反向在哪出现。

趋势背驰

结构:当前走势构成 a+A+b+B+c,b 和 c 构成两段同向的趋势,中枢 A 和中枢 B 必须是同级别,a、b、c 是中枢 A 和 B 的次级别或次级别以下的,此时比较 b 和 c 段是否背驰。

趋势背驰后反向一笔将拉回中枢,但之后造成趋势的反转还是延续原趋势是不确定的。趋势背驰只能保证返回的那段,但不能保证返回那段之后如何。

趋势背驰

盘整背驰

结构:走势构成 a+A+b,a、b 是中枢 A 的次级别或次级别以下的,此时比较 a 和 b 段是否背驰。

盘整背驰不能保证反向一笔进入中枢,进入中枢则中枢延伸,不进入中枢形成三买卖点。

盘整背驰

线段终结方式

线段终结方式有三种情况:

1.以趋势背驰、盘整背驰完成终结

2.小转大终结

3.一笔终结

线段3种终结

线段终结方式是事后角度去看的,在当时是看不到的。但无论以哪种情况终结,都要符合线段划分原则。

压力和支撑位

大级别波段高低点

震荡区间上下沿

基于成交量、持仓量的分析

多空操作对持仓量影响

多空力量

两边都开仓时候持仓量才会增加,两边都平仓时候持仓量才会减少,其他情况持仓量不变。

量价分析的一些问题

1.到底在哪个级别观察K线进行量价分析呢?

级别是人为主观定义的概念,真实市场的波动是波动的大小区别,因此市场更本质的量价分析也是无须考虑级别。在不同周期去观察,看到的信息粗细不同,周期越小对市场行为分析越精细,周期越大则会忽略一些细节,大小级别看到的结果是统一的。

2.量价分析到底分析的是啥?

分析的价格不一定是K线形态,而是关键位置由于量造成价格变化的逻辑,因此每天的分时图也是可以分析的,任何周期图也是可以分析的。量价的分析也不是看单K线,看一段时间K线价格变化逻辑也是可以的。

3.市场有主力吗?

一定是有的,否则市场不可能有较长时间的单边趋势。同时可以从异常情况窥见这点,2025/3/10这天由于中国对加拿大一些农产品加征100%关税,菜粕2505开盘一瞬间涨停,可以看到是8万多手空单平仓造成的,如此大的量并且组织度如此之高,必然是大资金也就是主力行为。

盘口和量的关系

确定控场资金和施力方向

选取较小级别,15F 最佳,观察以下两点:

1.大成交量时候,持仓量和价格的变化关系。

2.连续增仓/减仓时候,持仓量和价格的变化关系。

在这个分析过程中,时间越近的关系优于较远的关系。

增仓/减仓出现趋势,哪怕是小级别,增仓方向就是控场方向;增仓/减仓为震荡,则说明资金入场/离场,需要结合实际情况具体分析。

会得到四种结果:

  • 多头总体控场:增仓价格上涨,减仓价格下跌。
  • 空头总体控场:增仓价格下跌,减仓价格上涨。
  • 多向空转换或空向多转换:先多头(空头)控场,再空头(多头)控场。
  • 多空势均力敌:多空都在增仓,不断交替控场。

下面是纯碱 SA2505 合约的 2025/1/18~2025/2/20,而该合约在 2025/2/25 后迎来了一波暴涨。

img

确定资金施力方向

持仓量随价格变化的几种情况

1.持仓量连续增加或连续减少,价格单边

这是最容易辨识的一种情况,持仓量变化有连续性。增仓上涨说明多头资金入场,减仓下跌说明多头资金离场,增仓下跌说明空头资金入场,减仓上涨说明空头资金离场。

2.持仓量变动不大,价格单边

持仓量整体变动不大,增仓减仓反反复复,但价格单边运行,说明某方力量离场的同时又有另一方力量入场。这种情况往往是资金逐步反手,在反手的最后阶段,持仓量会出现快速减少又增加的情况。由于是原有力量离场和新力量入场,价格大概率单边运行很久一段时间。

3.持仓量连续增加,价格震荡

持仓量不断增加但价格维持小幅震荡,这是资金在增仓筹码,价格有一天会突破震荡区间转化为单边运行。资金的建仓方向可以通过小级别的资金行为分析,也可通过收盘席位净持仓分析。

4.持仓量连续减少,价格震荡

持仓量不断减少但价格维持震荡,常见于趋势行情末期,资金在震荡区间兑现盈利的筹码。

5.持仓量几乎不变,价格震荡

5.1.持仓量变动不大,价格震荡区间不大

持仓量和价格变动都不大,说明市场处于静止行情,资金在这段时间内进行筹码交换,这时候要关注收盘席位净持仓变化情况。

5.2.持仓量整体变动不大,但增仓减仓反反复复,价格震荡区间较大

这是洗盘的迹象,较宽幅的价格震荡区间会吸引很多多空筹码入场,然后入场筹码会反复打止损,旧的筹码会对行情失去耐心而离场。

6.持仓量几乎不变,成交量很大

这是筹码交换的迹象,说明这段时间内换手率大,旧资金离场且新资金入场承接。

收盘席位净持仓分析

分析原理

通过散户、机构、外资席位的净持仓变化,可以看到市场的上涨下跌走势对应的缘由是什么。

机构由于大船难掉头,机构的加减仓操作会持续好几天甚至更久,机构的看法往往就是市场的看法。同时期货是对手盘交易,散户席位持仓变化可以作为反向指标。

  • 散户席位:徽商期货、平安期货、东方财富、中信建投
  • 机构席位:中信期货、国泰君安、华泰期货、东证期货、永安期货、海通期货、中财期货
  • 外资席位:乾坤期货、摩根大通、瑞银期货

收盘席位净持仓分析不是完全可靠的,在使用时候需要筛选出符合条件的数据

  • 一致性:当持仓数据指向与盘面走势不一致时,要淡化数据参考。
  • 持续性:短期不连续的增仓减仓并不能反映机构的操作意向,不连续的数据没有参考价值,有三天及以上对同一方向的行为被认作是持续的。

注意:收盘席位净持仓分析要符合盘面变化逻辑,当两者冲突时候,以盘面为主。

Python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import requests
import datetime
from pyecharts.charts import Line, Kline, Grid
from pyecharts import options as opts
from typing import List, Dict, Any
import os

cookies = {"PHPSESSID": "77c2f3ab8331134568b5f75d235d2e15"}
url = "https://www.jiaoyikecha.com/ajax/variety_net_position.php"
# 配置
brokers1 = ["中信期货", "东证期货", "国泰君安", "永安期货", "海通期货", "华泰期货"]
brokers2 = ["乾坤期货", "瑞银期货", "摩根大通"]
brokers3 = ["东方财富", "徽商期货", "平安期货", "中信建投"]
# 品种及席位配置
variety = "铁矿石"
brokerType: int = 1


def buildData(variety: str, brokers: List[str], length: int) -> Dict[str, List[Any]]:
data = {"dates": [], "kData": []}
allSum = [0 for i in range(length)]
for i, strItem in enumerate(brokers):
responseData = requests.post(
url,
data={
"variety": variety,
"brokers[]": [strItem],
},
cookies=cookies,
).json()["data"]
if i == 0:
data["dates"] = responseData["dates"][-length:]
data["kData"] = responseData["infos"][-length:]
values = responseData["values"][-length:]
allSum = [x + y for x, y in zip(values, allSum)]
data[strItem] = values
data["AllSum"] = allSum
return data

def drawGraph(variety: str, sourceData: Dict[str, List[Any]], brokers: List[str], brokerType: int):
brokerName = ''
match brokerType:
case 1:
brokerName = '机构'
case 2:
brokerName = '外资'
case 3:
brokerName = '散户'
subtitle = " || ".join(
f"{broker}净增减:{int(sourceData[broker][-1]) - int(sourceData[broker][-2])}"
for broker in brokers
)
brokenLine = Line().set_global_opts(
title_opts=opts.TitleOpts(
title=variety+f"{brokerName}席位净持仓分析",
subtitle=subtitle,
pos_left="10%",
),
tooltip_opts=opts.TooltipOpts(
trigger="axis",
axis_pointer_type="cross",
background_color="rgba(245, 245, 245, 0.8)",
border_width=1,
border_color="#ccc",
textstyle_opts=opts.TextStyleOpts(color="#000"),
),
legend_opts=opts.LegendOpts(type_="scroll")
)
brokenLine.add_xaxis(xaxis_data=sourceData["dates"])
for strItem in brokers:
brokenLine.add_yaxis(series_name=strItem, y_axis=sourceData[strItem], label_opts=opts.LabelOpts(is_show=False), is_symbol_show=False)
brokenLine.add_yaxis(series_name="席位加和", y_axis=sourceData["AllSum"], label_opts=opts.LabelOpts(is_show=False), is_symbol_show=False)

kLine = Kline().set_global_opts()
kLine.add_xaxis(xaxis_data=sourceData["dates"])
kLine.add_yaxis(series_name="", y_axis=sourceData["kData"])

todayDate = datetime.datetime.now().strftime("%Y-%m-%d")
outputDir = "席位净持仓分析"
os.makedirs(outputDir, exist_ok=True)
outputFilename = f"{todayDate} {variety}-{brokerName}.html"
renderPath = os.path.join(outputDir, outputFilename)
Grid(init_opts=opts.InitOpts(renderer="svg", width="95vw", height="90vh")).add(brokenLine, grid_opts=opts.GridOpts(is_show=True, height="45%")).add(kLine, grid_opts=opts.GridOpts(is_show=True, pos_bottom="10%", height="30%")).render(renderPath)


brokers = []
match brokerType:
case 1:
brokers = brokers1
case 2:
brokers = brokers2
case 3:
brokers = brokers3

data = buildData(variety, brokers, 70)
drawGraph(variety, data, brokers, brokerType)

分析案例

如下是 2025/4/3 收盘后的棕榈油机构、外资席位净持仓分析,可以看到在某些部分机构外资的增减仓和价格同涨同跌。在震荡区间由于没有持续性,故没有参考价值,但在有持续行为的趋势行情中,可以说这些机构外资席位左右了棕榈油的价格变化

image-20250404152338535

image-20250404152052696

基本面分析

市场消息

需求、供给、库存

买卖操作

识别开仓结构

经过长久的实验,当15F产生二买卖点和三买卖点时候出手成功率更高,操作一买卖点会经常遇到走势延伸情况。

1.线段转折初期的开仓信号,即潜在转折点

线段的划分标准是要突破特征序列关键点,但在实际操作的时候会偏晚,同时追多追空容易被套住。当15F笔进入或穿过前特征序列时候,那么就能等后续二买卖点开仓;如果没有进入或穿过,则不操作。

下图中蓝色是60F级别,黑色是15F级别。

线段转折的预估操作

2.确定线段方向后的回调点

确定线段方向后的三买卖点

🌟筛选开仓机会

有时候会遇到多个品种都出现符合开仓结构的信号,这时候就要从中筛选较好的机会。

符合如下特点的优选出来:

  1. 有基本面和持仓量分析支持的。
  2. 已知日线级别方向,且60F方向顺应日线方向的。即确定日线方向后,60F为同向第三、第五、第七……段。
  3. 60F级别出现背驰的机会,此时反转线段虽然逆势但利润空间不小。

入场

通过区间套或分型辅助成笔去看15F笔的次级别走势结构,可以出现背驰后一买卖点入场,保险点儿操作就是二买卖点入场,还可以突破入场。

以鸡蛋2506合约为例:

  • 第一次开多点:此时15F符合开仓结构,因此确定15F形成上涨一笔就开多。去看15F次级别走势,那个位置构成对15F级别下跌一笔的潜在转折点,因此开多。
  • 第一次平多点:15F上涨一笔内部构成五笔背驰,当前位置构成对15F级别上涨一笔的潜在转折点,因此平多。
  • 第二次开多点:此时已经确定60F为上涨线段了,当前位置构成对15F级别下跌一笔的潜在转折点,因此开多。

image-20250411171241994

以铁矿石2509合约为例:

  • 第一次开空点:此时15F符合开仓结构,因此确定15F形成下跌一笔就开空。那个位置突破15F次级别结构低点,因此开空。
  • 第一次平空点:此时60F转为下跌线段是确定的了,当前位置构成对15F级别下跌一笔的潜在转折点,因此平空。
  • 第二次开空点:此时60F转为下跌线段是确定的了,当前位置构成对15F级别上涨一笔的潜在转折点,因此开空。

image-20250411172821340

离场

平仓位不是静态的,需要根据浮亏情况来变动,在入场后将止损设置在破坏结构的位置,一般就是波段的顶底,即15F次级别的一买卖点位置。当价格向符合预期方向运动一段距离后,要把平仓位置逐步移动,这样这笔交易最终一定不会亏钱

主动止盈有很多方式,以下情况都是可以的:

  1. 走势结构则逻辑和入场相同,显示60F线段方向反转了
  2. 陷入震荡区域时候利润足够大了
  3. 走势出现暴涨暴跌,这种情况对动能消耗非常大,如果利润够的话可以离场
  4. 处于周五夜盘或节假日前,可以止盈离场

风险控制

政策带来的异动

2025/3/10 这天是周一,受周末关税消息影响,菜粕开盘 8 万多手空单平仓,导致开盘立刻涨停平不掉仓位,在当天夜盘菜粕直接涨停开盘,随后小幅回落,在 2025/3/11 收盘时候仍表现强势。

前面那笔下跌是增仓下跌的,因此有较大可能会去做空,做空则会吃满 -9%,由于杠杆如果满仓则会亏损本金的 80% 多,做错了直接完蛋!因此分仓是非常重要的。

地缘政治、国家政策对大宗商品的影响是非常大的,除非是非常熟悉这方面的知识,否则很难规避这种风险,因此要在仓位管理上下手,哪怕有天不幸遇到也不至于亏太惨。

仓位控制

当资金来到 10 万以上时候,分仓就非常重要了,因为再满仓做一个品种相对本金的波动是非常大的,总会遇到意想不到的跳空。

分仓最简单的方式就是把资金分为三堆,然后控制整体为总资金 90%~95%,这样给出一点空间浮亏。

在这个基础上,可以对确定的行情加上更多的仓位,对不那么确定的仓位减少仓位。

确定性 情况 仓位
标准形态+机构席位趋同+(长期供求缺口) 30%~65%
中等 标准形态或机构席位趋同 30%~35%

至于不符合的情况,就能不开仓就不开仓,尤其是市场机构分歧且不是标准形态时候,成功率很低。

特殊平仓时机

1.节假日

凡是连续放假 3 天以上的假期,除非是确定性高的,都要平仓离场,要尽可能保证节假日不持仓。

凡是连续放假 5 天以上的假期,如春节、劳动节、国庆节,都必须平仓离场。

2.合约到期

尽量去做主力合约和次主力合约,当主力合约快到期时候要及时平仓离场切换合约。

交易心理

一切的恐惧和贪婪,都源于无知。

盘中交易的时候,要遵守交易规则,而不是根据情绪喜好去开仓平仓,按照交易系统执行。