简单趋势策略研究

交易对象:目前使用各种主力合约进行交易。

交易平台:易盛极星极星产品网

手续费研究:白糖期货手续费和保证金2023年09月更新 - 九期网

本人使用的期货交易公司:中信期货(幸亏资金量大,返还高,不然就是给期货公司打工。套利的间接成本很高,滑点,手续费。)

特点:1.趋势策略,普遍存在的低胜率,高盈亏比,回撤大。

2.底层逻辑来自趋势不可逆,一旦趋势出现,抗住回调的情况下,收益惊人。

3.较为简单的思路,为很多小白创造出收益曲线。

4.波动大,是其主要特征,会出现极端行情,风险大,收益高使得其成为很多小白的首选

5.统计学和基本面,是套利的两大主流方向,如有其他的,欢迎补充。

统计套利,就是根据k线图,选择做多,做空

基本面套利,则是更具当前期货价格,现货价格,预测期货价格方向。

我上传一段简单的趋势合约套利代码,直接使用即可。

思路为:肯特那通道的变种,加入网格系统。做到止盈止损,但黑天鹅我无法保证。
 

import talib
import talib as ta
import numpy as np
code1  =  "CFFEX|Z|IM|MAIN"
g_params['n'] = 20 #滚动周期极值
g_params['m'] = 20 #ATR参数
#g_params['p'] = 20 #std周期
g_params['w'] = 'M'
g_params['T'] = 15
g_params['p3'] = 1 #止损线距离
g_params['p1'] = 10
g_params['adx'] = 20
g_params['m2'] =5
# 策略参数,全局变量,各个k线都可以调用
up1 = []
down1 = []
up2 = []
down2 = []
up3 = []
down3 = []
up4 = []
down4 = []
std = []
up_limit1 = []
down_limit1 = []
up_limit2 = []
down_limit2 = []
up_limit3 = []
down_limit3 = []
up_limit4 = []
down_limit4 = []
ran = []BKDFLG = 0
SKDFLG = 0
BPDFLG = 0
SPDFLG = 0#开仓委托
BKID = 0
SKID = 0
#平仓委托
BPID = 0
SPID = 0
#开仓标志
BKFLG = 0
SKFLG = 0
#平仓标志 
BPFLG = 0
SPFLG = 0
#开仓撤单标志
BKDEL = 0
SKDEL = 0
#平仓撤单标志
BPDEL = 0
SPDEL = 0
#开仓委托手数
BKM = 0
SKM = 0
#平仓委托手数
BPM = 0
SPM = 0
#开仓委托价格
BKP = 0
SKP = 0
#平仓委托价格
BPP = 0
SPP = 0
#开仓委托时间
BKT = 0
SKT = 0
#平仓委托时间
BPT = 0
SPT = 0def minprice(price1,price2):if price1>price2:return price2else:return price1
def maxprice(price1,price2):if price1>price2:return price1else:return price2
# 价格矫正为最小变动价整数倍
def PriceCorrect(src,tick):if tick:return (int((src+0.5*tick)/tick))*tickelse:src
# 策略开始运行时执行该函数一次
def initialize(context):SetBarInterval(code1, g_params['w'], g_params['T'],1000)SetTriggerType(1)SetOrderWay(1)SetActual()SetAFunUseForHis()SetUserNo('Q1010422846')  # 设置交易账号# 策略触发事件每次触发时都会执行该函数
def handle_data(context):#当前k线判断,内部函数#出现开平仓信号# BKDFLG = 0# SKDFLG = 0# BPDFLG = 0# SPDFLG = 0# BKFLG =0# SKFLG =0# BPFLG =0 # SPFLG =0 #全局运作,超出k线#全局变量,不受时间约束global up1global down1global up2global down2global up3global down3global up4global down4global stdglobal up_limit1 global down_limit1global up_limit2 global down_limit2global up_limit3 global down_limit3global up_limit4 global down_limit4global ranglobal BKDFLG global SKDFLG global BPDFLG global SPDFLG global BKIDglobal SKIDglobal BPIDglobal SPIDglobal BKFLGglobal SKFLGglobal BPFLGglobal SPFLGglobal BKDELglobal SKDELglobal BPDELglobal SPDELglobal BKMglobal SKMglobal BPMglobal SPMglobal BKPglobal SKPglobal BPPglobal SPPglobal BKTglobal SKTglobal BPTglobal SPT#确定前面有足够的数据if (CurrentBar() >= len(up1)):if (len(up1)) < 1:up1.append(0)down1.append(0)up2.append(0)down2.append(0)up3.append(0)down3.append(0)up4.append(0)down4.append(0)std.append(0)up_limit1.append(0)down_limit1.append(0)up_limit2.append(0)down_limit2.append(0)up_limit3.append(0)down_limit3.append(0)up_limit4.append(0)down_limit4.append(0)ran.append(0)# preEntryPrice.append(0)else:up1.append(up1[-1])down1.append(down1[-1])up2.append(up2[-1])down2.append(down2[-1])up3.append(up3[-1])down3.append(down3[-1])up4.append(up4[-1])down4.append(down4[-1])std.append(std[-1])up_limit1.append(up_limit1[-1])down_limit1.append(down_limit1[-1])up_limit2.append(up_limit2[-1])down_limit2.append(down_limit2[-1])up_limit3.append(up_limit3[-1])down_limit3.append(down_limit3[-1])up_limit4.append(up_limit4[-1])down_limit4.append(down_limit4[-1])ran.append(ran[-1])#从第N根k线开始进行程序运行if len(Close()) < g_params['p1']:returnm = g_params['m']m2 = g_params['m2']x = code1ran[-1] = ta.ATR(High(x, str(g_params['w'] ), g_params['T'])[:-1], Low(x, str(g_params['w'] ), g_params['T'])[:-1], Close(x, str(g_params['w'] ), g_params['T'])[:-1], m)[-1] // PriceTick(x) * PriceTick(x)  # 一个周期前ranadx = ta.ADX(High(x, str(g_params['w'] ), g_params['T'])[:-1], Low(x, str(g_params['w'] ), g_params['T'])[:-1], Close(x, str(g_params['w'] ), g_params['T'])[:-1], m2)up1[-1] =  High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()#up_limit1[-1] = up1[-1] + ran[-1]*g_params['p3']down1[-1] = Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()#down_limit1[-1] = down1[-1] - ran[-1]*g_params['p3']up2[-1] =  Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()up_limit2[-1] = up2[-1] - ran[-1]*g_params['p3']down2[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()down_limit2[-1] = down2[-1] + ran[-1]*g_params['p3']LogInfo(A_BuyPosition(code1),A_SellPosition(code1),BuyPosition(code1),SellPosition(code1))PlotNumeric('up1',up1[-1],RGB_Red(),True)PlotNumeric('up_limit2',up_limit2[-1],RGB_Blue(),True)PlotNumeric('down1',down1[-1],RGB_Green(),True)PlotNumeric('down_limit2',down_limit2[-1],RGB_Yellow(),True)PlotNumeric('adx',adx[-1],RGB_Yellow(),False)BKDFLG = 0SKDFLG = 0BPDFLG = 0SPDFLG = 0TotalEquity = CurrentEquity()  # 权益TurtleUnits = 1 # 开仓数量TurtleUnits = int(TurtleUnits)  # 对小数取整# if  (CurrentTime()>=0.210000 and CurrentTime()<=0.210000+1*0.0001) or (CurrentTime()>=0.150000-g_params['T']*0.0001 and CurrentTime()<=0.150000+1*0.0001):#     return# 执行下单操作if Q_Close()>up1[-1] and A_BuyPosition(x)==0 and A_SellPosition(x)==0 and adx[-1]>g_params['adx']:if BKDFLG == 0:BKDFLG = 1elif  Q_Close()<up_limit2[-1]\and  A_BuyPosition(x)>0 and A_SellPosition(x)==0 :if SPDFLG == 0:SPDFLG = 1  # 止损信号出现 elif  (Q_Close()<down1[-1])\and A_BuyPosition(x)==0 and A_SellPosition(x)==0  and adx[-1]>g_params['adx']:if SKDFLG ==0:SKDFLG = 1elif  (Q_Close()>down_limit2[-1])\and  A_BuyPosition(x)==0 and A_SellPosition(x)>0 :if BPDFLG ==0:BPDFLG = 1  # 发出止损信号ss = int(A_Assets()*0.005/(Q_Close()*0.1*10))ss = 1#//------------------------历史发单------------------------//if context.strategyStatus() != 'C':if BKDFLG:Buy(ss, up1[-1], needCover=False) elif SKDFLG:SellShort(ss,down1[-1], needCover=False)elif SPDFLG:Sell(ss, up_limit2[-1])elif BPDFLG:BuyToCover(ss, down_limit2[-1])return#//------------------------实时处理------------------------//if ExchangeStatus(ExchangeName()) != '3':return#//------------------------变量赋值------------------------//N = int(A_Assets()*0.0005/(Q_Close()*0.1*10))#N = 10LogInfo('N',N)N = 1 #N = 1 #下单手数T = 5 #时间间隔NOW = CurrentTime() #当前时间BIDP = 0 if Q_BidPrice() is None else Q_BidPrice() #买一价ASKP = 0 if Q_AskPrice() is None else Q_AskPrice() #卖一价BRP = A_BuyPositionCanCover() #多头可用持仓SRP = A_SellPositionCanCover() #空头可用持仓# if ExchangeName() == 'SHFE': #如果是上期所合约#     SH = Enum_ExitToday() #平仓参数# else: #如果非上期所合约#     SH = Enum_Exit() #平仓参数SH = Enum_ExitToday()#//------------------------成交判断------------------------//if BKFLG == 1:if A_OrderStatus(BKID) == Enum_Filled():LogInfo("BK信号:买开委托成交!")BKFLG = 0 #买开标志归0BKDEL = 0 #买开撤单标志归0elif A_OrderStatus(BKID) == Enum_Canceled():LogInfo("BK信号:买开委托已撤!")if A_OrderFilledLot(BKID) > 0: #如果买开委托部分成交BKM = BKM - A_OrderFilledLot(BKID) #买开委托手数if BKM > 0: #如果买开委托手数大于0BKP = ASKP #买开委托价格LogInfo("BK信号:买开委托追价!")retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP) #发出买开委托BKT = NOW #买开委托时间BKDEL = 0 #买开撤单标志归0elif A_OrderStatus(BKID) == Enum_Suspended() or A_OrderStatus(BKID) == Enum_FillPart():if BKDEL == 0: #如果未撤单if TimeDiff(BKT, NOW) >= T: #如果时间间隔T秒LogInfo("BK信号:买开委托撤单!")A_DeleteOrder(BKID) #撤掉买开委托挂单BKDEL = 1 #已发出撤掉买开委托挂单if SPFLG == 1:if A_OrderStatus(SPID) == Enum_Filled():LogInfo("SP信号:卖平委托成交!")SPFLG = 0 #卖平标志归0SPDEL = 0 #卖平撤单标志归0elif A_OrderStatus(SPID) == Enum_Canceled():LogInfo("SP信号:卖平委托已撤!")if A_OrderFilledLot(SPID) > 0: #如果卖平委托部分成交SPM = SPM - A_OrderFilledLot(SPID) #卖平委托手数if BRP > 0 and SPM > 0 and SPM <= BRP: #如果卖平委托手数不超过多头可用持仓SPP = BIDP #卖平委托价格LogInfo("SP信号:卖平委托追价!")retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP) #发出卖平委托SPT = NOW #卖平委托时间SPDEL = 0 #卖平撤单标志归0elif A_OrderStatus(SPID) == Enum_Suspended() or A_OrderStatus(SPID) == Enum_FillPart():if SPDEL == 0: #如果未撤单if TimeDiff(SPT, NOW) >= T: #如果时间间隔T秒LogInfo("SP信号:卖平委托撤单!")A_DeleteOrder(SPID) #撤掉卖平委托挂单SPDEL = 1 #已发出撤掉卖平委托挂单if SKFLG == 1:if A_OrderStatus(SKID) == Enum_Filled():LogInfo("SK信号:卖开委托成交!")SKFLG = 0 #卖开标志归0SKDEL = 0 #卖开撤单标志归0elif A_OrderStatus(SKID) == Enum_Canceled():LogInfo("SK信号:卖开委托已撤!")if A_OrderFilledLot(SKID) > 0: #如果卖开委托部分成交SKM = SKM - A_OrderFilledLot(SKID) #卖开委托手数if SKM > 0: #如果卖开委托手数大于0SKP = BIDP #卖开委托价格LogInfo("SK信号:卖开委托追价!")retCode, SKID = A_SendOrder(Enum_Sell(), Enum_Entry(), SKM, SKP) #发出卖开委托SKT = NOW #卖开委托时间SKDEL = 0 #卖开撤单标志归0elif A_OrderStatus(SKID) == Enum_Suspended() or A_OrderStatus(SKID) == Enum_FillPart():if SKDEL == 0: #如果未撤单if TimeDiff(SKT, NOW) >= T: #如果时间间隔T秒LogInfo("SK信号:卖开委托撤单!")A_DeleteOrder(SKID) #撤掉卖开委托挂单SKDEL = 1 #已发出撤掉卖开委托挂单if BPFLG == 1:if A_OrderStatus(BPID) == Enum_Filled():LogInfo("BP信号:买平委托成交!")BPFLG = 0 #买平标志归0BPDEL = 0 #买平撤单标志归0elif A_OrderStatus(BPID) == Enum_Canceled():LogInfo("BP信号:买平委托已撤!")if A_OrderFilledLot(BPID) > 0:  #如果买平委托部分成交BPM = BPM - A_OrderFilledLot(BPID) #买平委托手数if SRP > 0 and BPM > 0 and BPM <= SRP: #如果买平委托手数不超过空头可用持仓BPP = ASKP #买平委托价格LogInfo("BP信号:买平委托追价!")retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP) #发出买平委托BPT = NOW #买平委托时间BPDEL = 0 #买平撤单标志归0elif A_OrderStatus(BPID) == Enum_Suspended() or A_OrderStatus(BPID) == Enum_FillPart():if BPDEL == 0: #如果未撤单if TimeDiff(BPT, NOW) >= T: #如果时间间隔T秒LogInfo("BP信号:买平委托撤单!")A_DeleteOrder(BPID) #撤掉买平委托挂单BPDEL = 1 #已发出撤掉买平委托挂单#//------------------------委托处理------------------------//if BKDFLG == 1:if BKFLG == 0: #如果没有买开委托BKM = N #买开委托手数BKP = ASKP #买开委托价格LogInfo("BK信号:买开委托发出】")retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP) #发出买开委托BKT = NOW #买开委托时间BKFLG = 1 #已发出买开委托BKDFLG= 0if SPDFLG == 1:if SPFLG == 0: #如果没有卖平委托if BRP > 0: #如果有多头可用持仓SPM = BRP #卖平委托手数SPP = BIDP #卖平委托价格LogInfo("SP信号:卖平委托发出!")retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP) #发出卖平委托SPT = NOW #卖平委托时间SPFLG = 1 #已发出卖平委托SPDFLG = 0if SKDFLG == 1:if SKFLG == 0: #如果没有卖开委托SKM = N #卖开委托手数SKP = BIDP #卖开委托价格LogInfo("SK信号:卖开委托发出!")retCode, SKID = A_SendOrder(Enum_Sell(),Enum_Entry(),SKM,SKP) #发出卖开委托SKT = NOW #卖开委托时间SKFLG = 1 #已发出卖开委托SKDFLG = 0if BPDFLG == 1:if BPFLG == 0: #如果没有买平委托if SRP > 0: #如果有空头可用持仓BPM = SRP #买平委托手数BPP = ASKP #买平委托价格LogInfo("BP信号:买平委托发出!")retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP) #发出买平委托BPT = NOW #买平委托时间BPFLG = 1 #已发出买平委托BPDFLG =0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+ts 实现移动端分页

current 开始页码 pageSize 结束页码 const sizeref<number>(10) //一页显示十条 const eachCurrentPageref<number>(1) //默认是第一页interface ITdata {current: number,pageSize: number,// xxxx 其他参数... } const selectApplyList ref<…

联想电脑打开exe提示要在Microsoft Store中搜索应用

问题&#xff1a; 你需要为此任务安装应用。 是否要在Microsoft Store中搜索一个&#xff1f; 如图&#xff1a; 出现此情况&#xff0c;仅需要做如下操作&#xff0c;在要打开的exe文件上右键&#xff0c;属性&#xff1a; 如图箭头所示&#xff0c;点击“解除锁定”出现对钩&…

题解:ABC321D - Set Menu

题解&#xff1a;ABC321D - Set Menu 题目 链接&#xff1a;Atcoder。 链接&#xff1a;洛谷。 难度 算法难度&#xff1a;B。 思维难度&#xff1a;C。 调码难度&#xff1a;B。 综合评价&#xff1a;见洛谷链接。 算法 枚举二分查找。 思路 先对b升序排序&#x…

C++提高编程:02 STL入门

这里写目录标题 STL初识1 STL的诞生2 STL基本概念3 STL六大组件4 STL中容器、算法、迭代器5 容器算法迭代器初识5.1 vector存放内置数据类型5.2 Vector存放自定义数据类型5.3 Vector容器嵌套容器 STL初识 1 STL的诞生 长久以来&#xff0c;软件界一直希望建立一种可重复利用的…

<十二>objectARX开发:Arx注册命令类型的含义以及颜色索引对应RGB值

1、注册命令类型 我们经常在acrxEntryPoint.cpp中看到注册命令如下: 那么各个宏定义代表什么意思呢? 主标识:(常用的) ACRX_CMD_MODAL: 在别的命令执行的时候该命令不会在其中执行。ACRX_CMD_TRANSPARENT: 命令可以再其它命令中执行,但在该标志下ads_sssetfirst()不能使…

SELECT * from t_user where user_id = xxx,可以从那几个点去优化这句sql

优化SQL查询可以从以下几个方面入手&#xff1a; 1. 索引优化&#xff1a;通过为查询涉及的列添加合适的索引&#xff0c;可以提高查询的效率。在该SQL语句中&#xff0c; user_id 列被用作查询条件&#xff0c;可以为 user_id 列创建一个索引。 2. 避免使用 SELECT *&#xf…

LeetCode 494.目标和 (动态规划 + 性能优化)二维数组 压缩成 一维数组

494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2…

用Redis做数据排名

1.背景 用Redis做数据缓存用的比较多&#xff0c;大家都能熟练使用String和Hash结构去存储数据&#xff0c;今天讲下如何使用ZSet来做数据排名。 假设场景是需要按天存储全国城市的得分数据&#xff0c;可以查询前十名的城市排名。 这个case可以使用传统关系型数据库做…

如何修复wmvcore.dll缺失问题,wmvcore.dll下载修复方法分享

近年来&#xff0c;电脑使用的普及率越来越高&#xff0c;人们在日常生活中离不开电脑。然而&#xff0c;有时候我们可能会遇到一些问题&#xff0c;其中之一就是wmvcore.dll缺失的问题。wmvcore.dll是Windows平台上用于支持Windows Media Player的动态链接库文件&#xff0c;如…

MATLAB算法实战应用案例精讲-【概念篇】用户画像(补充篇)

目录 前言 几个相关概念 算法原理 用户画像是什么? 用户画像种类

SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、萤火虫算法&#xff08;FA&#xff09;简介 萤火虫算法(Firefly Algorithm&#xff0c;FA)是Yang等人于2009年提出的一种仿生优化算法。 参考文献&#xff1a;田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97. 二、单仓…

代码随想录Day42 | 01背包问题| 416. 分割等和子集

01背包问题&#xff08;Acwing&#xff09; 有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入…

数量关系(刘文超)

解题技巧 代入排除法 数字特性法 整除特性 比例倍数特性&#xff08;找比例&#xff0c;比例不明显时找等式&#xff09; 看不懂式子时&#xff0c;把所有的信息像表格一样列出来 看不懂式子时&#xff0c;把所有的信息像表格一样列出来

【机器学习】期望最大算法(EM算法)解析:Expectation Maximization Algorithm

【机器学习】期望最大算法&#xff08;EM算法&#xff09;&#xff1a;Expectation Maximization Algorithm 文章目录 【机器学习】期望最大算法&#xff08;EM算法&#xff09;&#xff1a;Expectation Maximization Algorithm1. 介绍2. EM算法数学描述3. EM算法流程4. 两个问…

性能测试 —— Tomcat监控与调优:Jconsole监控

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具&#xff0c;JConsole使用Java虚拟机(Java VM)&#xff0c;提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台&#xff0c;标准版(Java SE平台)6&#xff0c;JConsole的已经更新到目前的外观…

Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令

1、什么是buffer/cache &#xff1f; buffer/cache 其实是作为服务器系统的文件数据缓存使用的&#xff0c;尤其是针对进程对文件存在 read/write 操作的时候&#xff0c;所以当你的服务进程在对文件进行读写的时候&#xff0c;Linux内核为了提高服务的读写速度&#xff0c;则将…

如何正确选择研究方向?如何实现论文创新?

学术评价是遵循“质量第一”原则的,所以对于研究生来说,从一开始就要把路子走正,自觉树立精品意识,把精力高度集中到提高学位论文的质量上来。这里,根据本人多年来指导博士和硕士研究生的体会,就人文社科研究生学位论文的选题与创新略述管见。 学位论文选题的两个层面 …

ssm课程实验教学系统hsg5740Y3-计算机毕业设计源码+数据库+lw文档+系统+部署

ssm课程实验教学系统hsg5740Y3-(毕业设计毕设项目源代码课程设计程序设计指导xz2023)

linux 约束

linux 约束 1、约束的概念1.1什么是约束1.2约束的优劣势 2、约束的作用3、约束的分类4、约束的应用场景5、约束的管理5.1创建5.2查看5.3插入5.4删除 6、总结 1、约束的概念 1.1什么是约束 在关系型数据库中&#xff0c;约束是用于限制表中数据规则的一种机制。它可以确保表中…

数据库数据恢复-ORACLE常见故障有哪些?恢复数据的可能性高吗?

ORACLE数据库常见故障&#xff1a; 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。 ORACLE数据库数据恢复可能性分析&#xff1a; 1、ORACLE数据库无…