同一支股票可以当天卖了当天买吗(期货当天买当天能卖吗)
股票日内回转交易是指投资者就同一个标的(如股票)在同一交易日(T)内各完成多次买进和卖出的行为,保持标的股数不变,其目的是尽可能多地高抛低吸、赚取差价收益,减少浮亏。日内回转交易跟普通的做T有所不同,它比较适合长期持股投资者,每日操作完毕,当日持仓股数不变,避免踏空风险,只利用账户闲余资金赚取收益。日内回转交易的魅力就在于此,获取除了股票本身股价上涨收益之外的第二份收益,即日内差价收益,有机会依靠风险低的小仓位持仓,获取大于满仓持有的超额收益。
一、日内回转交易有哪些特点?
严格来说,日内回转交易只是利用原有的股票底仓的基础上实现的变相T+0,因而其具有如下特点:
1.T日内买卖,确保股数不变;
2.T日交易部分全平,确保不持仓过夜;
3.T日内同一标的回转交易。
股票的收益主要来自做多,等股价上涨后抛出获益,但是如果投资者持有某股票一年时间,期间该股票有涨有跌,最后回到原来的价格相当于没涨。这时候如果投资者账户里又有一定比例的现金,同时持有股票和现金的缺点是,行情好的时候,不能满仓梭哈以获取最大收益;而好处呢,就是下跌时不会遭遇满仓跌停。所以,股票仓位的多少没有好坏之分,关键在于适时做出增仓和减仓的行为,把价差做好,获取除了股票本身股价上涨收益之外的第二份收益,即差价收益。
1.当你持有的长线股票没有被套牢而是已经盈利,如果你判断该股仍有空间,运用日内回转交易策略可以在股价上行过程中增加整体收益率。
2.当你持有的长线股票暂时被套牢,但是股价目前还在下行通道上或者在底部震荡区域,运用日内回转交易策略可以在股价震荡或者下行过程中减少浮亏幅度。
三、日内回转交易策略实操1.在正式交易前需要先配置一定的底仓,配置底仓的作用是利用替代法实现“T+0”。由于当天买入的股票当天不能卖出,但底仓是可以卖出的,用底仓替代新买入的股票进行卖出操作。
2.交易数量
每次交易的数量 + 当日买入的数量(turnaround的第一位)< 底仓数量(以卖出信号为例)
3.回测标的:浦发银行(600000.SH)
4.策略代码
四、策略回测1.回测频率、周期、手续费等可视化设置2.回测结果展示# coding:gbk
'''
本策略首先买入当前股票10000股
随后根据60s的数据来计算MACD(12,26,9)线,并在MACD>0,MACD_pre<0的时候买入100股,MACD<0,MACD_pre>0的时候卖出100股
但每日操作的股票数不超过原有仓位,并于收盘前把仓位调整至开盘前的仓位
本策略需在个股分钟线下运行
'''
import talib
import numpy as np
import pandas as pd
#=======================================策略初始化部分================================================
def init(ContextInfo):
# 第一次交易信号
ContextInfo.first = 0
# 设定交易股数
ContextInfo.Lots = 100
# 每日回转持仓量
ContextInfo.total = 10000
# 设置交易账号
ContextInfo.accountID = 'testS'
# 持仓情况
ContextInfo.MarketPosition = {}
# 手续费列表
commissionList = [0,0.0001,0.0003,0.0003,0,5]
# 设定买入印花税为 0,卖出印花税为 0.0001,开仓手续费和平仓(平昨)手续费均为万三,平今手续费为 0,最小手续费为 5
ContextInfo.set_commission(0,commissionList)
# 设置基础股票池(获取基础信息里默认品种的代码)
ContextInfo.set_universe([ContextInfo.stockcode + '.' + ContextInfo.market])
#============================================策略周期循环部分=========================================
def handlebar(ContextInfo):
# 获取当前bar线索引
d = ContextInfo.barpos
# 当前bar索引小于35,退出周期循环
if d < 35:
return
# 设置起止时间
startdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 35), '%Y%m%d%H%M%S')
enddate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d%H%M%S')
# print(startdate,enddate)
# 格式化当前bar对应时间
date = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y-%m-%d %H:%M:%S')
# print('日期', date)
# 获取基础股票池起止时间范围内的1分钟收盘价数据(ContextInfo.period为基础信息中的默认周期)
df = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), start_time=startdate,
end_time=enddate, period=ContextInfo.period)
# 如果返回空DataFrame则退出当前bar的周期循环
if df.empty:
return
# 如果并未买入股票
if ContextInfo.first == 0:
order_shares(ContextInfo.get_universe()[0], ContextInfo.total, 'fix', df.iloc[-1, 0], ContextInfo,
ContextInfo.accountID)
ContextInfo.first = 1
ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.total
# 14:55:00之后不再交易
if int(date[-8:-6] + date[-5:-3]) > 1455:
return
# 获取账户可用资金
avaliable = get_avaliable(ContextInfo.accountID, 'STOCK')
# 获取股票可用余额
holding = get_holdings(ContextInfo.accountID, 'STOCK')
# 初始化股票可用余额
if ContextInfo.get_universe()[0] not in holding.keys():
holding[ContextInfo.get_universe()[0]] = 0
# 计算MACD线
if ContextInfo.total >= 0:
recent_date = np.array(df.iloc[-35:, 0])
# 利用talib库的MACD函数计算MACD曲线,返回三个结果:macd(12日EMA-26日EMA)、signal(9日macd的EMA)、hist(macd-signal)
macd = talib.MACD(recent_date)[0][-1]
macd_pre = talib.MACD(recent_date)[0][-2]
#===================================开盘至临近收盘交易========================================
if date[-8:-3] != '14:55':
# 前2日macd为负,昨日macd为正,买入
if macd > 0 and macd_pre < 0:
if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:
order_shares(ContextInfo.get_universe()[0], ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,
ContextInfo.accountID)
ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] += ContextInfo.Lots
# print(ContextInfo.get_universe()[0], '市价单开多仓', ContextInfo.Lots, '股')
# 前2日macd为正,昨日macd为负,卖出
elif macd < 0 and macd_pre > 0 and holding[ContextInfo.get_universe()[0]] >= ContextInfo.Lots:
order_shares(ContextInfo.get_universe()[0], -ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,
ContextInfo.accountID)
print(ContextInfo.get_universe()[0], '市价单平多仓', ContextInfo.Lots, '股')
ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] -= ContextInfo.Lots
#============================临近收盘时若仓位数不等于昨仓则回转所有仓位=========================
else:
# 临近收盘持仓股数大于每日回转持仓量,卖出大于的数量
if ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] > ContextInfo.total:
order_shares(ContextInfo.get_universe()[0],
-(ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total), 'fix',
df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)
# print(ContextInfo.get_universe()[0], '回转操作市价单平多仓',
ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total, '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.total
# 临近收盘持仓股数小于每日回转持仓量,买入小于的数量
if ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] < ContextInfo.total:
order_shares(ContextInfo.get_universe()[0],
(ContextInfo.total - ContextInfo.MarketPosition[ContextInfo.get_universe()[0]]), 'fix',
df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)
# print(ContextInfo.get_universe()[0], '回转操作市价单开多仓', ContextInfo.total -
ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] , '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.total
#========================================获取账户可用资金=============================================
def get_avaliable(accountid, datatype):
result = 0
resultlist = get_trade_detail_data(accountid, datatype, "ACCOUNT")
for obj in resultlist:
result = obj.m_dAvailable
return result
#=================================获取持仓信息——股票可用余额{"code":股数}===============================
def get_holdings(accountid, datatype):
holdinglist = {}
resultlist = get_trade_detail_data(accountid, datatype, "POSITION")
for obj in resultlist:
holdinglist[obj.m_strInstrumentID + "." + obj.m_strExchangeID] = obj.m_nCanUseVolume
return holdinglist
#======================================================================================================
(1)回测收益
(2)回测净值曲线
可以看出,日内回转交易策略的最大回撤都维持在较低水平,同时,胜率和年化收益率也相对偏低,可以起到增加收益或者减少浮亏的作用。
期权,是在期货的基础上衍生出来的金融工具,目前国内期货市场上的期权品种共有27个,可分为商品期权与金融期权(股指期权)。
期权的行权方式分为美式和欧式。美式期权的买方在合约到期日及其之前任一交易日均可行使权利,而欧式期权的买方只可在合约到期日当天行使权利。
期权在行权后,买卖双方将分别获得相应的期货头寸,并按规定费率交纳期货保证金与行权费用。行权后当天结算后得到的是以行权价格为开仓价的期货持仓,行权后生成相应的期货合约的持仓盈亏即为期权的行权盈亏。
总结起来便是——买入看涨期权行权:期权持仓平仓,新开价格为行权价格的期货买方持仓;
买入看跌期权行权:期权持仓平仓,新开价格为行权价格的期货卖方持仓;
卖出看涨期权履约:期权持仓平仓,新开价格为行权价格的期货卖方持仓;
卖出看跌期权履约:期权持仓平仓,新开价格为行权价格的期货买方持仓;
到期弃权:期权头寸清零。
期权交易涉及到期权的最后交易日以及到期日。
期权的到期日,是指期权合约买方能够行使权利的最后一个交易日。而期权的最后交易日,则是指期权合约可以进行交易的最后一个交易日。国内各家交易所对于期权合约的最后交易日的规定都有差别。
上海期货交易所:标的期货合约交割月前第一月的倒数第5个交易日;
大连商品交易所:标的期货合约交割月前第一月的第5个交易日;
郑州商品交易所:标的期货合约交割月前第一月的第3个交易日;
上海国际能源交易中心:标的期货合约交割月前第一月的倒数第13个交易日;
中国金融期货交易所:合约到期月份的第三个星期五。
期权买方是否会行权,需要根据期权的价值类型来判断。
根据行权价格与标的期货合约结算价之间的关系,期权合约可分为实值期权、平值期权和虚值期权三种价值类型。
假设原油期货sc2212当日的结算价为700元的时候,经常有投资者认为买方买入持有的sc2212C690为实值期权,卖方卖出持有的sc2212C690为虚值期权。
这种观点显示是错误的。同一期权合约只能有1种期权价值类型,而期权的价值类型与买卖方向无关(买方、卖方),只与期权的类型(C或者P)、执行价格、标的期货合约结算价有关。
一般情况下,买方会在实值的时候才会行权,此时能够获得正收益,内在价值大于0,但实值期权的期权费(权利金)通常较高;如果买方在平值的时候行权,收益基本平衡;而在虚值的时候行权的话,买方将会遭到亏损。