砖型图策略是一种技术分析工具,它可以帮助交易者识别趋势和价格变动方向,并为交易决策提供支持。在这篇文章中,我们将探讨砖型图策略的基本原理和如何使用它来制定交易策略。
砖型图策略的基本原理
砖型图策略是由日本股票交易家斋藤康嘉于1990年代初发明的。该策略使用的是一种称为“砖块”的图形来显示价格的变化。砖块由一系列的价格区间组成,这些价格区间可以是股票、期货、外汇或其他资产的价格。
砖型图策略的核心思想是识别价格趋势。如果价格上涨,砖块的颜色为红色;如果价格下跌,砖块的颜色为绿色。当价格趋势改变时,砖块的颜色也会随之改变。
如何使用砖型图策略来制定交易策略
使用砖型图策略来制定交易策略通常需要以下步骤:
- 确定砖块大小
在砖型图策略中,砖块的大小可以影响趋势的识别。通常,交易者可以根据交易资产的波动性和自己的交易风险偏好来确定砖块大小。例如,如果交易者希望捕捉短期波动,可以选择较小的砖块大小。而如果交易者希望捕捉长期趋势,可以选择较大的砖块大小。
- 识别价格趋势
使用砖型图策略的一个主要目的是识别价格趋势。交易者可以通过观察砖块的颜色和大小来识别价格趋势。例如,如果看到一系列的红色砖块,就表明价格处于上涨趋势中。反之,如果看到一系列的绿色砖块,就表明价格处于下跌趋势中。
- 制定交易策略
一旦交易者识别了价格趋势,就可以制定相应的交易策略。例如,如果价格处于上涨趋势中,交易者可以考虑买入或持有头寸。而如果价格处于下跌趋势中,交易者可以考虑卖空或者持有空头头寸。
砖型图策略是一种简单而有效的技术分析工具,可以帮助交易者识别价格趋势,并为交易决策提供支持。使用砖型图策略制定交易策略需要根据交易资产的波动性和自己的交易风险偏好来确定砖块大小,并通过观察砖块的颜色和大小来识别价格趋势。最终,交易者可以根据价格趋势制定相应的交易策略。
使用Python可以方便地实现砖型图策略,下面将介绍如何使用Python编写一个简单的砖型图策略。
from simctp import * # 导入simctp库中的所有内容
from simctp import Tick_Data # 导入simctp库中的Tick_Data类
再写一个策略类,在策略代码里写了注释,这里不做过多介绍
class 砖型策略(obj): # 定义一个名为砖型策略的类,继承自obj类
def __init__(self): # 初始化方法
super().__init__() # 调用父类的初始化方法
self.codelist = ["ni2405","rb2405","i2405","l2405","j2405","p2405"] # 订阅合约列表
self.objtype = objtype.renko # 策略类型设置为renko,默认为tick
self.renko_tick = 1 # 设定砖型幅度,默认合约10,最小变动价
def on_bar(self, bar, tick: Tick_Data): # on_bar方法,在每根K线更新时被调用
print(tick.LastPrice) # 打印最新tick的价格
if len(bar) < 2: # 如果bar的长度小于2,则返回
return
kline = bar[-1] # 获取最新的砖型数据
position = self.get_pos(tick.code) # 获取指定合约的持仓信息
if position.pos_long <= 0 and position.pos_short <= 0 and kline["Renko"] == "上涨": # 如果是空仓,且连续两个上涨砖,则开多单
print("砖型图策略开多单")
self.insert_order(tick.code, 1, tick.AskPrice1, DirectionType.Buy, OffsetType.Open) # 开多单
if position.pos_long <= 0 and position.pos_short <= 0 and kline["Renko"] == "下跌": # 如果是空仓,且连续两个下跌砖,则开空单
print("砖型图策略开空单")
self.insert_order(tick.code, 1, tick.BidPrice1, DirectionType.Sell, OffsetType.Open) # 开空单
if position.pos_long > 0 and position.long_pos_frozen == 0 and kline["Renko"] == "下跌": # 如果有多单,最新砖下跌,上一砖是上涨,则平多单开空单
print("砖型图策略平多单并开空")
if position.pos_long_today > 0 and position.exchange_id in ["SHFE", "INE"]: # 判断是否为上期所和能源所今仓
self.insert_order(tick.code, position.pos_long, tick.BidPrice1, DirectionType.Sell, OffsetType.CloseToday) # 多头平今
else:
self.insert_order(tick.code, position.pos_long, tick.BidPrice1, DirectionType.Sell, OffsetType.Close) # 多头平仓
if position.pos_short > 0 and position.short_pos_frozen == 0 and kline["Renko"] == "上涨": # 如果有空单,最新砖上涨,上一砖是下跌,则平空单开多单
print("砖型图策略平空单并开多")
if position.pos_short_today > 0 and position.exchange_id in ["SHFE", "INE"]: # 判断是否为上期所和能源所今仓
self.insert_order(tick.code, position.pos_short, tick.BidPrice1, DirectionType.Buy, OffsetType.Open) # 空头平今
else:
self.insert_order(tick.code, position.pos_short, tick.BidPrice1, DirectionType.Buy, OffsetType.Open) # 空头平仓
Account = self.get_account()
print(Account.close_profit) #获取账号状态并打印平仓盈亏
print(Account.commission) #获取账号状态并打印手续费
最后启动策略
t = TMS()
t.add_obj(砖型策略())
t.run()
执行后的效果
策略完整源码
from simctp import * # 导入simctp库中的所有内容
from simctp import Tick_Data # 导入simctp库中的Tick_Data类
class macd(obj):
def __init__(self):
super().__init__()
self.codelist = ["ni2405","rb2405","i2405","l2405","j2405","p2405"] # 订阅合约
self.objtype = objtype.bar
self.dete = dete.time3
self.orders = {
} # 保存每个合约的订单信息
self.pyramid_ratio = 0.5 # 金字塔加仓比例为50%
self.max_pyramid_count = 3 # 最大加仓次数为3次
def get_volume(self,code):
quote = self.get_quote(code)
available = self.get_account().balance #静态权益
multiplier = quote.VolumeMultiple*quote.LastPrice
max_open = available * 0.1
# 计算最大开仓手数
max_volume = int(max_open / multiplier)
if max_volume <= 0:
ma