【小白量化智能体】应用4:编写通达信股票交易指标及生成天勤期货自动交易Python策略程序

该文章已生成可运行项目,

【小白量化智能体】应用4:编写通达信股票交易指标及生成天勤期货自动交易Python策略程序
【小白量化智能体】是指能够自主或半自主地通过与环境的交互来实现目标或任务的计算实体。智能体技术是一个百科全书,又融合了人工智能、计算机科学、心理学和经济学等多个领域的知识,能够在复杂环境中自主决策和行动的实体。能够实现量化投资的各方面应用,例如自动设计指标,自动编写Python自动交易策略等等。
小白量化智能体能写通达信公式,能写股票和期货的Python策略。
我们下面给大家介绍设计通达信股票交易公式并生成同花顺交易Python策略程序。
一、生成通达信股票交易指标公式
在小白量化智能体中,输入下面信息:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通达信指标中出现下面变量是期货交易信号。
{多头买入(买开)} ENTERLONG: ;
{多头卖出(卖平)} EXITLONG: ;
{空头卖出(卖开)} ENTERSHORT: ;
{空头买入(买平)} EXITSHORT:
请帮我写一个通达信的期货交易指标公式,不要注释语句,不要绘语句。

RSI指标写全算法。
RSI指标,6日RSI值上穿30或者上穿50,或者上传70开多单,平空单。
RSI指标,6日RSI值下穿30或者下穿50,或者下穿70开多空,平多单。

在这里插入图片描述
【小白量化智能体】生成信息如下:

LC := REF(CLOSE,1);
RSI6 := SMA(MAX(CLOSE-LC,0),6,1)/SMA(ABS(CLOSE-LC),6,1)*100;
ENTERLONG := CROSS(RSI6,30) OR CROSS(RSI6,50) OR CROSS(RSI6,70);
EXITLONG := CROSS(30,RSI6) OR CROSS(50,RSI6) OR CROSS(70,RSI6);
ENTERSHORT := CROSS(30,RSI6) OR CROSS(50,RSI6) OR CROSS(70,RSI6);
EXITSHORT := CROSS(RSI6,30) OR CROSS(RSI6,50) OR CROSS(RSI6,70);

二、把通达信指标公式转化为标准指标公式
通用标准指标公式是在中国股票和期货软件中,如大智慧、通达信、东方财富等股票软件,文华、博弈大师、金字塔等期货软件,采用的相同语法和相同的函数。
标准指标公式在大智慧、通达信、东方财富等股票软件,文华、博弈大师、金字塔等期货软件,都能通用。
用【小白量化智能体】转化为标准指标公式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用【小白量化智能体】转化为标准指标公式如下:

LC := REF(CLOSE,1);
RSI6 := SMA(MAX(CLOSE - LC,0),6,1)/SMA(ABS(CLOSE - LC),6,1)*100;
ENTERLONG := CROSS(RSI6,30)+CROSS(RSI6,50)+CROSS(RSI6,70);
EXITLONG := CROSS(30,RSI6)+CROSS(50,RSI6)+CROSS(70,RSI6);
ENTERSHORT := CROSS(30,RSI6)+CROSS(50,RSI6)+CROSS(70,RSI6);
EXITSHORT := CROSS(RSI6,30)+CROSS(RSI6,50)+CROSS(RSI6,70);

三、用标准股票交易公式生成同花顺交易Python程序
小白量化智能体的强项是生成各种Python量化程序。
在这里插入图片描述
我们在【小白量化智能体】中输入下面内容:
在这里插入图片描述
【小白量化智能体】生成代码内容如下:

# 生成天勤期货交易程序
# 生成时间:2025年06月16日 14:33:43
gs='''
LC := REF(CLOSE,1);
RSI6 := SMA(MAX(CLOSE - LC,0),6,1)/SMA(ABS(CLOSE - LC),6,1)*100;
ENTERLONG := CROSS(RSI6,30)+CROSS(RSI6,50)+CROSS(RSI6,70);
EXITLONG := CROSS(30,RSI6)+CROSS(50,RSI6)+CROSS(70,RSI6);
ENTERSHORT := CROSS(30,RSI6)+CROSS(50,RSI6)+CROSS(70,RSI6);
EXITSHORT := CROSS(RSI6,30)+CROSS(RSI6,50)+CROSS(RSI6,70);
'''

##########修改帐户信息########################
天勤账户='tt123456'
天勤密码=''
#############################################
global 允许,不允许
允许=True;不允许=False
import aiohttp, random, time, logging, datetime, json,threading
import HP_tdx as htdx   #小白量化行情模块
import HP_tdxex as htdxe #小白量化扩展行情模块
import HP_formula as hgs  #小白通达信公式库
from HP_formula import *   #小白股票指标公式函数库
import tqsdk
from tqsdk import TqApi, TqAuth, TqAccount, TqKq,tafunc
###天勤SDK  https://doc.shinnytech.com/tqsdk/latest/quickstart.html

global dfs,交易品种,ts
交易品种=["SHFE.ag2508","CZCE.SA509","CZCE.FG509"]  #设置股票池
volume=1    #下单手数
滑点=2

api = tqsdk.TqApi(account=tqsdk.TqKq(),auth=tqsdk.TqAuth(user_name=天勤账户,password=天勤密码))  # 构造 api 实例   模拟盘账号
#api = tqsdk.TqApi(TqAccount("G国富期货", "", ""), auth=TqAuth(天勤账户,天勤密码))   # 构造 api 实例  实盘账号

hqe=htdxe.TdxexInit(ip='113.108.212.57',port=7721) ##初始化扩展行情
账户信息 = api.get_account() #获得账户资金情况
全部持仓 = api.get_position()  ##获取全部持仓
总资产=账户信息['static_balance']   #总资产
可用金额=账户信息['available']      #'可用金额'
print(总资产,可用金额)
print('全部持仓:')
tis={}
for k in 交易品种:
    tis[k]=''
我的持仓=[]  #持仓证券代码
for k in 全部持仓.keys():
    print(k)
    我的持仓.append(k)
    if k not in 交易品种:
        交易品种.insert(0,k)
    tis[k]=''
tgs1=hgs.Tdxgs()

while True:
    starttime = time.perf_counter()
    try:
        账户信息 = api.get_account() #获得账户资金情况
        全部持仓 = api.get_position()  ##获取全部持仓
        orders=api.get_order()   #获取委托
        quote=api.get_quote(symbol=交易品种[0]) 
        api.wait_update()  #是一个阻塞函数, 程序在这行上等待, 直到收到数据包才返回.
        for k in orders.keys():
            if  orders[k]['status'] =='ALIVE':
                api.cancel_order(k)  ##撤销订单
                api.wait_update()
        总资产=账户信息['static_balance']   #总资产
        可用金额=账户信息['available']      #'可用金额'
        我的持仓=[]  #持仓证券代码
        for k in 全部持仓.keys():
            我的持仓.append(k)
            if k not in 交易品种:
                交易品种.insert(0,k)
                tis[k]=''
                dfs[k]=api.get_kline_serial(k,60*1)  #获取1分钟线
        
         #合约处理
        for security in 交易品种:
            #获取行情数据
            m,c=htdxe.tqtotdx(security)
            df=htdxe.get_instrument_bars(nCategory=7,nMarket = m,sCode=c,nStart=0,nCount=200)  #获取1分钟K线
            df['volume']=df['trade']
            quote=api.get_quote(symbol=security)      
            api.wait_update()  #是一个阻塞函数, 程序在这行上等待, 直到收到数据包才返回.
            mk=c=''
            pos_long=pos_long_his=pos_long_today=0
            pos_short=pos_short_his=pos_short_today=0
            open_price_long=position_price_long=0
            open_price_short=position_price_short=0
            if security in 我的持仓:
                k=security
                position=全部持仓
                mk=a0=position[k]['exchange_id']  #交易所
                c=position[k]['instrument_id'] #交易所内的合约代码     
                buy_amount=pos_long=position[k]['pos_long'] #多头持仓手数, ==0表示无多头持仓. >0表示多头持仓手数
                pos_long_his=a2=position[k]['pos_long_his']  #多头老仓手数
                pos_long_today=a3=position[k]['pos_long_today']  #多头今仓手数
                pos_short=position[k]['pos_short'] #空头持仓手数, ==0表示无空头持仓. >0表示空头持仓手数    
                pos_short_his=a4=position[k]['pos_short_his']  #空头老仓手数
                pos_short_today=a5=position[k]['pos_short_today'] #空头今仓手数
                buy_trade_price=open_price_long=a6=position[k]['open_price_long'] #多头开仓均价,以开仓价来统计
                position_price_long=a10=position[k]['position_price_long'] #多头持仓均价,为多头持仓成本除以多头数量
                open_price_short=a7=position[k]['open_price_short']  #空头开仓均价,以开仓价来统计
                position_price_short=a11=position[k]['position_price_short'] #空头持仓均价,为空头持仓成本除以空头数量
    
            api.wait_update()  #是一个阻塞函数, 程序在这行上等待, 直到收到数据包才返回.
            s=security.split('.')
            mk=s[0]
            price=df.close.iloc[-1]
            ask_price1=quote.ask_price1
            bid_price1=quote.bid_price1
            dt=time.strftime('%Y%m%d %H:%M:%S',time.localtime(time.time())) #电脑日期时间
            ## 数据规格化
            df.dropna(inplace=True)
            df=data2.reset_index(level=None, drop=True ,col_level=0, col_fill='')
            df['vol']=df['tick_volume']
            df.dropna(inplace=True)
            mydf = hgs.initmydf(df)
            tgs1.loaddf(mydf)
            mydf=tgs1.rungs(gs)
            if 'ENTERLONG' in mydf.columns:
                ENTERLONG=mydf['ENTERLONG']
            else:
                mydf['ENTERLONG']=0
                ENTERLONG=mydf['ENTERLONG']
                
            if 'EXITLONG' in mydf.columns:
                EXITLONG=mydf['EXITLONG']
            else:
                mydf['EXITLONG']=0
                EXITLONG=mydf['EXITLONG']
        
            if 'ENTERSHORT' in mydf.columns:
                ENTERSHORT=mydf['ENTERSHORT']
            else:
                mydf['ENTERSHORT']=0
                ENTERSHORT=mydf['ENTERSHORT']
                
            if 'EXITSHORT' in mydf.columns:
                EXITSHORT=mydf['EXITSHORT']
            else:
                mydf['EXITSHORT']=0
                EXITSHORT=mydf['EXITSHORT']

            C = CLOSE = mydf['close']
            L = LOW = mydf['low']
            H = HIGH = mydf['high']
            O = OPEN = mydf['open']
            V = VOL = mydf['volume']
            T=mydf['datetime']
            
            ##用户指标
      
            print(security,df.iloc[-1]["datetime"],MA4.iloc[-1],MA8.iloc[-1],ENTERLONG.iloc[-1],EXITLONG.iloc[-1],ENTERSHORT.iloc[-1],EXITSHORT.iloc[-1],pos_long,pos_short,ask_price1,bid_price1)
            if ENTERLONG.iloc[-1]>0 and  pos_long==0 and tis[security] !=T.iloc[-1]:   #买开
                print('买开',security,volume)
                order=api.insert_order(symbol=security,direction='BUY',offset='OPEN',limit_price=ask_price1,volume=volume)
                api.wait_update()
                pos_long=volume
                tis[security] =T.iloc[-1]
            
            if ENTERSHORT.iloc[-1]>0 and  pos_short==0 and tis[security] !=T.iloc[-1]:   #卖开
                print('卖开',security,volume)
                order=api.insert_order(symbol=security,direction='SELL',offset='OPEN',limit_price=bid_price1,volume=volume)
                api.wait_update()
                pos_short=volume
                tis[security] =T.iloc[-1]
        
            if EXITLONG.iloc[-1]>0 and  pos_long>0:   #卖平
                print('卖平',security,pos_long)
                if mk=='SHFE' or mk=='INE' or mk=='CFFEX':
                    if pos_long_today>0:
                        print('平今',security,pos_long_today)
                        order=api.insert_order(symbol=security, direction="SELL", offset="CLOSETODAY", volume=pos_long_today, limit_price=bid_price1-滑点)
                    else:
                        print('平昨',security,pos_long_today)
                        order=api.insert_order(symbol=security, direction="SELL", offset="CLOSE", volume=pos_long_today, limit_price=bid_price1-滑点)
                    if pos_long_his>0:
                        order=api.insert_order(symbol=security, direction="SELL", offset="CLOSE", volume=pos_long_his, limit_price=bid_price1-滑点)
                else:
                    order=api.insert_order(symbol=security, direction="SELL", offset="CLOSE", volume=pos_long, limit_price=bid_price1-滑点)
                api.wait_update()
                pos_long=0
            
            if EXITSHORT.iloc[-1]>0 and  pos_short>0:  # 买平
                print('买平',security,pos_short)
                if mk=='SHFE' or mk=='INE' or mk=='CFFEX':
                    if pos_short_today>0:
                        print('平今',security,pos_short_today)
                        order=api.insert_order(symbol=security, direction="BUY", offset="CLOSETODAY", volume=pos_short_today, limit_price=ask_price1+滑点)
                    else:
                        print('平昨',security,pos_short_today)
                        order=api.insert_order(symbol=security, direction="BUY", offset="CLOSE", volume=pos_short_today, limit_price=ask_price1+滑点)    
                    if pos_short_his>0:
                        order=api.insert_order(symbol=security, direction="BUY", offset="CLOSE", volume=pos_short_his, limit_price=ask_price1+滑点)  
                else:
                     order=api.insert_order(symbol=security, direction="BUY", offset="CLOSE", volume=pos_short, limit_price=ask_price1+滑点) 
                api.wait_update()
                pos_short=0
    except:
        pass
            
    endtime = time.perf_counter()
    costtime=(endtime - starttime)
    t1=costtime-int(costtime/60)*60
    t2=int(costtime/60)-int(int(costtime/60)/60)*60
    t3=int(int(costtime/60)/60)
    qhcsj2=time.strftime('%Y%m%d %H:%M:%S',time.localtime(time.time()))
    print(qhcsj2,'花费时间:%d:%d:%f'%(t3,t2,t1))
    t=20;print('暂停',t,'秒。\n');time.sleep(t)  #暂停20秒

这个程序可以在小白量化客户端中运行。生成的代码没有任何错误。
用户只要简单设置一下,就可以运行程序,实现天勤期货量化全自动交易。
修改用户和密码:

##########修改帐户信息########################
天勤账户='tt123456'
天勤密码=''
#############################################
``

模拟或实盘需要修改一下代码。

```python
api = tqsdk.TqApi(account=tqsdk.TqKq(),auth=tqsdk.TqAuth(user_name=天勤账户,password=天勤密码))  # 构造 api 实例   模拟盘账号
#api = tqsdk.TqApi(TqAccount("G国富期货", "", ""), auth=TqAuth(天勤账户,天勤密码))   # 构造 api 实例  实盘账号

就可以全自动进行交易了。如果满足指标,就会全自动交易。
在这里插入图片描述

【小白量化智能体】客户端是纯Python开发的中文Python继承开发工具,内置了小白量化金融模块。
扣子【小白量化智能体】服务器端是基于扣子开发的智能体插件,可以自动生成任何量化Python程序。
大家也可以在扣子商店搜索:小白量化智能体。

此外,我们也在文心智能体上开发【小白量化智能体】服务器端,目前实现了指标公式的自动编写。
文心【小白量化智能体】服务器端 网址 https://pcufnv.smartapps.baidu.com/

今天的文章先写到这里,欢迎继续关注我的博客。后面我还介绍更多的【小白量化智能体】开发Python策略的知识。
超越自己是我的每一步!我的进步就是你的进步!

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值