金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1672|回复: 5

帮忙修改下代码

[复制链接]

16

主题

50

帖子

50

积分

等级: 免费版

注册:
2021-8-3
曾用名:
发表于 2021-8-11 09:50 | 显示全部楼层 |阅读模式
import time
import os
import csv
import numpy
import pandas as pd
import talib as ta
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_sender='188@qq.com'    # 发件人邮箱账号
my_pass = 'hbiji'    # 发件人邮箱密码
my_user='404@qq.com'      # 收件人邮箱账号
wj='cs'

def init(context):
    context.s1 = context.run_info.base_book_id
    context.ma34 = 34
    context.qs = '--'
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    pass


# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    close = history_bars(context.s1, context.ma34+1, 'self', 'close',True)
    open = history_bars(context.s1, context.ma34+1, 'self', 'open',True)
    if len(close) < context.ma34+1 :
        return


    DTIME=get_indicator(context.s1,wj,'DTIME','', 'self',200)

    if   DTIME[-1]  == 2:    #DTIME为当前周期,N为大周期
        zq0='5分钟'          #zq0传递参数于买入卖出显示时间周期                  
        zq1='15分钟'          #zq1传递参数于趋势判断显示时间周期   重点:zq1='5分钟'为快速测试参数
        zq='15m'              #zq传递参数于get_indicator函数
    elif DTIME[-1]  == 3:
        zq0='15分钟'             #DTIME返回值0:分笔成交、1:1分钟、2:5分钟、3:15分钟、4:30分钟、5:60分钟、6:日、7:周、
        zq1='1小时'              #8:月、9:年、10:多日、11:多小时、12:季度、13:多分钟、14:多秒
        zq='1h'                  #15:半年线、16:节气线、17:3分钟、18:10分钟、19:多笔线;
    elif DTIME[-1]  == 5:              
        zq0='60分钟'
        zq1='日线'
        zq='1d'
    elif DTIME[-1]  == 6:
        zq0='日线'
        zq1='周线'
        zq='1week'


    cs1=get_indicator(context.s1,wj,'cs1','',zq,200)
    cs2=get_indicator(context.s1,wj,'cs2','',zq,200)
    cs3=get_indicator(context.s1,wj,'cs3','',zq,200)
    cs4=get_indicator(context.s1,wj,'cs4','',zq,200)
    MA3=get_indicator(context.s1,wj,'MA3','',zq,200)
    SKK1=get_indicator(context.s1,wj,'SKK','',zq,200)
    S1=get_indicator(context.s1,wj,'S','',zq,200)
    CC=get_indicator(context.s1,wj,'CC','',zq,200)

    if cs1[-1]==1:
        context.qs = '上升趋势'
        txt21=context.s1+'-'+zq1+',卖空止盈(红)'
        txt22= "K: "+ "{:.2f}".format(SKK1[-1])
        mail(txt21,txt22)
    if cs2[-1]==1:
        context.qs = '下降趋势'           #趋势
        txt31=context.s1+'-'+zq1+',买多止盈(绿)'
        txt32="K: "  +"{:.2f}".format(SKK1[-1])
        mail(txt31,txt32)
    if cs3[-1]==1:
        txt41=context.s1+'-'+zq1+',激进卖空止盈(红)'
        txt42='收盘价:'+"{:.2f}".format(CC[-1])+',均线:'+"{:.2f}".format(MA3[-1])+',K:'+"{:.2f}".format(SKK1[-1])+',S:'+"{:.2f}".format(S1[-1])
        mail(txt41,txt42)
    if cs4[-1]==1:
        txt51=context.s1+'-'+zq1+',激进买多止盈(绿)'
        txt52='收盘价:'+"{:.2f}".format(CC[-1])+',均线:'+"{:.2f}".format(MA3[-1])+',K:'+"{:.2f}".format(SKK1[-1])+',S:'+"{:.2f}".format(S1[-1])         
        mail(txt51,txt52)              #激进趋势






# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass

def mail(a,b):
        msg=MIMEText(b,'plain','utf-8')
        msg['From']=formataddr(["188",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["FK",my_user])       # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']=a                           # 邮件的主题,也可以说是标题

        server=smtplib.SMTP_SSL("smtp.qq.com", 465)            # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, my_pass)                       # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        return

具体逻辑 在5分钟图时DTIME[-1]  == 2:时, 参数zq='15m' 。 然后判断cs3[-1]==1和cs4[-1]==1。我想达到的效果,在5分钟图加载指标,15分钟收线后判断cs3[-1]==1和cs4[-1]==1。现在的情况是每个5分钟收线后cs3[-1]==1和cs4[-1]==1都执行一次。谢谢




回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-8-11 10:10 | 显示全部楼层
5分钟k的话更新本来就是按照5分钟的
你要按照15分钟就选择15分钟的k周期
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

50

帖子

50

积分

等级: 免费版

注册:
2021-8-3
曾用名:
 楼主| 发表于 2021-8-11 10:23 | 显示全部楼层
我把指标加载在5分钟图上,然后跨周期调取这几个参数
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-8-11 10:23 | 显示全部楼层
你指标在5分钟上,那么handle_bar更新就是按照5分钟的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

50

帖子

50

积分

等级: 免费版

注册:
2021-8-3
曾用名:
 楼主| 发表于 2021-8-11 23:54 | 显示全部楼层
能不能改成以下的方案
if cs1[-1]==1 and times=1:
        context.qs = '上升趋势'
        txt21=context.s1+'-'+zq1+',卖空止盈(红)'
        txt22= "K: "+ "{:.2f}".format(SKK1[-1])
        mail(txt21,txt22)

当前周期5分钟,判断当前5分钟是否所处15分钟的第一个5分钟,然后times=1.
当前周期15分钟,判断当前15分钟是否所处1小时的第一个15分钟,然后times=1.
当前周期1小时,判断当前1小时是否所处日线的第一个1小时,然后times=1.
当前周期日线,判断当前日线是否所处周期线的第一个日线,然后times=1.
以上逻辑具体应该如何实现。谢谢
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-8-12 22:15 | 显示全部楼层
这种不知道了,涉及逻辑处理这种需要客户自己想想了

你这个判断就是时间上怎么判断了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-11-16 04:38 , Processed in 0.234209 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表