ChatGpt基于第三方API2D服务封装的SpringBoot starter

前置条件:
看下API2D官网,第三方API2D服务对接流程:
其对接文档地址
https://api2d.com/wiki/doc

一:创建一个空的Maven项目
完成后整的项目层级图如下
在这里插入图片描述

1.pom.xml 中添加相关依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><artifactId>jinyi-chatgpt-api2d-starter</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><jinyi-up.version>1.0.0</jinyi-up.version><lombok.version>1.18.22</lombok.version><commons-lang3.version>3.12.0</commons-lang3.version><fastjson.version>2.0.22</fastjson.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><!--不设置optional或者optional是false,表示传递依赖.  此处表示两个项目之间依赖不传递--><optional>true</optional><version>2.6.11</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool-all.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>${fastjson.version}</version></dependency></dependencies></project>

2.项目中涉及到的类

package com.jinyi.up.chatgpt.api2d.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "dbj.chatgpt.api2d")
public class ChatGptApi2dConfig {private String host;private String forwardKey;
}
package com.jinyi.up.chatgpt.api2d.constants;
import lombok.Getter;
/*** api2d常量** @author zhiquan*/
@Getter
public class Api2dConstant {/*** 正式接口,分布式部署*/public static final String API2D_HOST_OFFICIAL = "https://openai.api2d.net";/*** 备用接口,如果上一个无法使用(比如因为域名包含 openai 被屏蔽)可以使用这个*/public static final String API2D_HOST_STANDBY = "https://oa.api2d.net";/*** 临时域名,如果前两个都无法访问可以尝试这两个(过期时间 2024-06-15)*/public static final String API2D_HOST_TEMPORARY_1 = "https://oa.api2d.site";public static final String API2D_HOST_TEMPORARY_2 = "https://oa.api2d.online";/*** 备用接口,如果前两个都无法使用,可以使用这个*/public static final String API2D_HOST_BACKUP_1 = "https://stream.api2d.net";/*** 请求拼接模板*/public static final String reqUrlTemplate = "%s%s";/*** OpenAI 聊天接口( /v1/chat/completions )*/public static final String CHAT_COMPLETIONS_URL = "/v1/chat/completions";/*** OpenAI 内容补全接口( /v1/completions )*/public static final String COMPLETIONS_URL = "/v1/completions";/*** OpenAI 文本编辑接口( /v1/edits )*/public static final String EDITS_URL = "/v1/edits";/*** OpenAI 向量生成接口( /v1/embeddings )*/public static final String EMBEDDINGS_URL = "/v1/embeddings";/*** OpenAI 图片生成接口( /v1/images/generations )*/public static final String IMAGES_GENERATIONS_URL = "/v1/images/generations";
}
package com.jinyi.up.chatgpt.api2d.enums;import lombok.AllArgsConstructor;
import lombok.Getter;/*** @author  zhiquan*/
@AllArgsConstructor
@Getter
public enum Api2dModelTypeEnum {GPT_4(1, "gpt-4"),GPT_4_0314(2, "gpt-4-0314"),GPT_3_5_TURBO_0301(3, "gpt-3.5-turbo-0301"),GPT_3_5_TURBO(4, "gpt-3.5-turbo");private Integer status;private String describe;public static Api2dModelTypeEnum match(Integer status, Api2dModelTypeEnum defaultEnum) {if (status != null) {for (Api2dModelTypeEnum item : Api2dModelTypeEnum.values()) {if (item.status.equals(status)) {return item;}}}return defaultEnum;}public static String getDescirbe(Integer status, String defaultStr) {if (status != null) {for (Api2dModelTypeEnum item : Api2dModelTypeEnum.values()) {if (item.status.equals(status)) {return item.getDescribe();}}}return defaultStr;}
}
package com.jinyi.up.chatgpt.api2d.entitys;import lombok.Data;
import lombok.experimental.Accessors;import java.util.List;/*** chat 调用 聊天接口( /v1/chat/completions )需要封装的请求对象*  @author zhiquan*/
@Data
@Accessors(chain = true)
public class Api2dParamData {private String model;private List<Api2dParamSonData> messages;
}
package com.jinyi.up.chatgpt.api2d.entitys;import lombok.Data;
import lombok.experimental.Accessors;/*** chat 调用 聊天接口( /v1/chat/completions )需要封装的请求对象Api2dParamData的子对象* @author zhiquan*/
@Data
@Accessors(chain = true)
public class Api2dParamSonData {private String role = "user";private String content;
}
package com.jinyi.up.chatgpt.api2d.entitys;import lombok.Data;import java.util.List;/*** chat 调用 聊天接口( /v1/chat/completions )后返回的json*字段完全同步于第三方响应字段* @author zhiquan*/
@Data
public class ChatCompletionsResponse {/*** 对话标识符,用于唯一标识此次聊天会话*/private String id;/*** 对象类型,表示此响应是一个聊天完成事件*/private String object;/*** 响应创建时间的时间戳*/private int created;/*** 使用的模型名称,此处为“gpt-3.5-turbo-0301"*/private String model;/*** 包含模型生成的选择回答的列表,这里只有一个选项*/private List<Choices> choices;/*** API 的使用情况统计信息*/private Usage usage;
}
package com.jinyi.up.chatgpt.api2d.entitys;import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;/*** chat 调用 聊天接口( /v1/chat/completions )后返回的json对象的子属性* 字段完全同步于第三方响应字段** @author zhiquan*/
@Data
public class Choices {/*** 回答的索引号。*/private int index;/*** 表示模型生成的回答*/private Message message;/*** 完成原因,这里是“stop",表示模型停止生成回答*/@JSONField(name = "finish_reason")private String finishReason;
}
package com.jinyi.up.chatgpt.api2d.entitys;import lombok.Data;/*** chat 调用 聊天接口( /v1/chat/completions )后返回的json对象的子属性*字段完全同步于第三方响应字段* @author zhiquan*/
@Data
public class Message {/*** 角色,这里是“assistant",表示助手角色生成的回答*/private String role;/*** 回答的内容*/private String content;
}
package com.jinyi.up.chatgpt.api2d.entitys;import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;/*** chat 调用 聊天接口( /v1/chat/completions )后返回的json对象的子属性* 字段完全同步于第三方响应字段** @author zhiquan*/
@Data
public class Usage {/*** 用于 prompt 的令牌数量*/@JSONField(name="prompt_tokens")private int promptTokens;/*** 生成的回复的令牌数量*/@JSONField(name="completion_tokens")private int completionTokens;/*** 请求的总令牌数量 (包括输入和输出)*/@JSONField(name="total_tokens")private int totalTokens;/*** 截至此次请求时的令牌数*/@JSONField(name="pre_token_count")private int preTokenCount;/*** 初始限制的令牌数。*/@JSONField(name="pre_total")private int preTotal;/*** 根据模型的内部限制调整后的令牌数*/@JSONField(name="adjust_total")private int adjustTotal;/*** 最终用于此次请求的令牌数。*/@JSONField(name="final_total")private int finalTotal;
}
package com.jinyi.up.chatgpt.api2d.utils;import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Lists;
import com.jinyi.up.chatgpt.api2d.config.ChatGptApi2dConfig;
import com.jinyi.up.chatgpt.api2d.constants.Api2dConstant;
import com.jinyi.up.chatgpt.api2d.entitys.Api2dParamData;
import com.jinyi.up.chatgpt.api2d.entitys.Api2dParamSonData;
import com.jinyi.up.chatgpt.api2d.entitys.ChatCompletionsResponse;
import com.jinyi.up.chatgpt.api2d.enums.Api2dModelTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.List;/*** api2d 请求util*/
@Slf4j
@Component
public class ChartGptApi2dUtil {@Resourceprivate ChatGptApi2dConfig chatGptApi2dConfig;/*** 调用POST请求类型(application/json)接口** @param* @return*/private String publicApi2dInterface(String jsonStr, String url) throws Exception {String authTemp = "Bearer %s";String HttpResponseBodyStr = HttpRequest.post(url).header("Content-Type", "application/json").header("Authorization", String.format(authTemp, chatGptApi2dConfig.getForwardKey())).body(jsonStr).timeout(60000).execute().body();return HttpResponseBodyStr;}/*** ChartGPT聊天 返回响应的转换后的对象** @param reqContent 输入的提问内容* @param modelType  chatgpt版本type{@link com.jinyi.up.chatgpt.api2d.enums.Api2dModelTypeEnum}* @return ChatCompletionsResponse*/public ChatCompletionsResponse chatCompletionsEntity(Integer modelType, String reqContent) throws Exception {String resultJsonStr = chatCompletionsString(modelType, reqContent);log.info(resultJsonStr);if (!StringUtils.isBlank(resultJsonStr)) {ChatCompletionsResponse bean = JSONUtil.toBean(resultJsonStr, ChatCompletionsResponse.class);return bean;}return null;}/*** ChartGPT聊天返回原生响应的JSON STRING** @param reqContent 输入的提问内容* @param modelType  chatgpt版本type{@link com.jinyi.up.chatgpt.api2d.enums.Api2dModelTypeEnum}* @return*/public String chatCompletionsString(Integer modelType, String reqContent) throws Exception {Api2dParamSonData api2dParamSonData = new Api2dParamSonData().setContent(reqContent);List<Api2dParamSonData> messages = Lists.newArrayList(api2dParamSonData);Api2dParamData api2dParamData = new Api2dParamData().setModel(Api2dModelTypeEnum.getDescirbe(modelType, Api2dModelTypeEnum.GPT_3_5_TURBO.getDescribe())).setMessages(messages);String url = String.format(Api2dConstant.reqUrlTemplate, chatGptApi2dConfig.getHost(), Api2dConstant.CHAT_COMPLETIONS_URL);log.info("ChartGPT聊天 请求url:{},请求param:{}", url, api2dParamData);return publicApi2dInterface(JSONUtil.toJsonStr(api2dParamData), url);}
}

3.resources文件夹下添加META-INF/spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.jinyi.up.chatgpt.api2d.utils.ChartGptApi2dUtil,\
com.jinyi.up.chatgpt.api2d.config.ChatGptApi2dConfig

4.使用说明

jinyi-chatgpt-api2d-starter

jinyi-chatgpt-api2d-starter

时间当前版本版本特性作者
2023.7.120.0.1-RELEASE1.初版仅提供chatGpt提问功能zhiquan

组件简介

  • 基于API2D的API封装的

1.Spring Boot 项目添加 Maven 依赖

  <dependency><groupId>com.jinyi.up</groupId><artifactId>jinyi-chatgpt-api2d-starter</artifactId><version>1.0.0</version></dependency>

2、在application.properties 或者 application.yml 等配置文件中增加如下配置

dbj.chatgpt.api2d.host=https://stream.api2d.net   #api2d对外提供的ChatGpt访问的Api Host
dbj.chatgpt.api2d.forwardKey=fk****************8  #api2d服务提供的Forward Key
dbj:chatgpt:api2d:host: https://stream.api2d.net  #api2d对外提供的api访问HostforwardKey: fk****************8 #api2d服务提供的Forward Key 

3、使用示例

@Slf4j
@RestController
@RequestMapping("/test")
public class StarterTestController {@Resourceprivate ChartGptApi2dUtil chartGptApi2dUtil;@GetMapping("/gptStarter")public R<Object> gptStarter() {try {ChatCompletionsResponse result = chartGptApi2dUtil.chatCompletionsEntity(4, "儿童节文案");return R.ok(result);} catch (Exception e) {log.error("gpt回话请求异常:", e);}return R.failed();}
}

4、ChartGptApi2dUtil能力

4.1 chatCompletionsEntity(Integer modelType, String reqContent)方法: OpenAI 聊天方法,返回封装的ChatCompletionsResponse对象

**4.2 chatCompletionsString(Integer modelType, String reqContent)**方法:OpenAI 聊天方法,返回的调用api2d openApi接口后返回的原生json字符串

chatCompletionsEntity() 和chatCompletionsString()请求参数相同,详见如下表格

参数字段类型是否必填描述备注
modelTypeInteger*api2d 对应的model版本枚举 ,1: GPT_4 4:gpt-3.5-turbo详见Api2dModelTypeEnum
reqContentString*向chatgpt提问的问题内容

ChatCompletionsResponse对象属性说明

{"id": "chatcmpl-7bgwmOfeGf14HkOrpMCJ4x9cvdArF", #对话标识符,用于唯一标识此次聊天会话"object": "chat.completion", #对象类型,表示此响应是一个聊天完成事件"created": 1689217580, #响应创建时间的时间戳"model": "gpt-3.5-turbo-0613",  #使用的模型名称,此处为gpt-3.5-turbo-0613"choices": [  #包含模型生成的选择回答的列表,这里只有一个选项{"index": 0, #回答的索引号。"message": {  #表示模型生成的回答"role": "assistant", #角色,这里是“assistant",表示助手角色生成的回答"content": "科比,全名科比·布莱恩特(Kobe Bryant),1978年8月23日出生于美国宾夕法尼亚州费城,2019年1月26日因直升机失事意外身亡,是一位美国职业篮球运动员。科比是NBA历史上最伟大的球员之一,被誉为“黑曼巴”,他在职业生涯期间效力于洛杉矶湖人队。\n\n科比在NBA生涯中获得了众多荣誉,包括5个NBA总冠军、2个NBA总决赛最有价值球员(MVP)、4个全明星赛最有价值球员(MVP),以及18次入选NBA全明星阵容等。他也是NBA历史得分榜上位列第4的球员,总得分超过了3万分。\n\n除了在NBA的成功之外,科比也是美国国家队的重要成员,并在2008年和2012年两届奥运会上帮助美国队夺得金牌。\n\n科比在场上以他的得分能力和个人进攻技巧著称,他是一位极具竞争力的球员,对胜利有着强烈的渴望。他的篮球智商和技术使他成为一个精准的得分手,同时他也是一位出色的防守球员。\n\n科比的突然离世使全球篮球界深感痛惜,他的篮球成就和影响力将永远铭记在人们心中。" #回答的内容},"finishReason": "stop"  #完成原因,这里是“stop",表示模型停止生成回答}],"usage": { #API 的使用情况统计信息"promptTokens": 9, #用于 prompt 的令牌数量"completionTokens": 463, #生成的回复的令牌数量"totalTokens": 472, # 请求的总令牌数量 (包括输入和输出)"preTokenCount": 4096, # 截至此次请求时的令牌数"preTotal": 42, #初始限制的令牌数。"adjustTotal": 37, #根据模型的内部限制调整后的令牌数"finalTotal": 5   #最终用于此次请求的令牌数。
}

原生Json字符串返回说明:

{"id":"chatcmpl-7bh9aayOMAY9z0iFDR5P4kdLNIjW1","object":"chat.completion","created":1689218374,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"message":{"role":"assistant","content":"科比(Kobe),全名科比·布莱恩特(Kobe Bryant),是一位美国职业篮球运动员,出生于1978年8月23日,于2020年1月26日因直升机事故不幸去世。科比在NBA的职业生涯中效力于洛杉矶湖人队,被认为是最伟大的篮球运动员之一。\n\n科比从高中时期就开始展现出与众不同的篮球天赋,在1996年的NBA选秀中以第13顺位被夏洛特黄蜂队选中,但很快被湖人队用于交换筹码,成为NBA历史上最年轻的球员之一。\n\n科比在湖人队的职业生涯中取得了众多成绩,包括5次NBA总冠军、2次NBA总决赛MVP、1次常规赛MVP等荣誉。他是湖人队历史上得分最高的球员,并在职业生涯中共获得了4次得分王的称号。\n\n除了职业联赛中的成功,科比还是美国国家队的成员,参加了多次国际比赛,其中包括2008年北京奥运会和2012年伦敦奥运会,帮助美国获得金牌。\n\n科比以其出色的得分能力、技术精湛的投篮和极高的竞争意识而闻名,他被誉为NBA历史上最全能的得分手之一。科比对比赛有着非常高的热情和敬业精神,他的工作态度和专注度也给球迷们留下了深刻的印象。\n\n科比的突然离世给整个篮球界和广大球迷带来了巨大的震惊和悲伤。他将永远被人们铭记为一位伟大的篮球运动员,为他在篮球领域的贡献和对于比赛的热爱致以敬意与怀念。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":9,"completion_tokens":619,"total_tokens":628,"pre_token_count":4096,"pre_total":42,"adjust_total":35,"final_total":7}}

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

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

相关文章

ChatGPT开发【一】:打造与ChatGPT默契互动的绝佳输入格式

点击加入->【OpenAI-API开发】技术交流群 文章目录 1. 导入openai库2.示例聊天API调用3.GPT-3.5-Turbo-0301的使用技巧系统消息Few-show prompt 4.计数Token数 Chatgpt由Openai最先进的型号 gpt-3.5-Turbo和 gpt-4提供支持。我们可以使用OpenAI API使用 GPT-3.5-Turbo或…

不知不觉被安利了ChatGPT

近期ChatGPT热度持续不下&#xff0c;尤其是在IT行业更是聊的火热&#xff0c;于是去查了一下&#xff1a; ​ ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI [1] 研发的聊天机器人程序 [12] &#xff0c;于…

AI之JARVIS:JARVIS(连接众多 AI 模型以解决复杂 AI 任务的接口/可理解为一种超智能AI模型管家,正开发中)的简介、安装、使用方法之详细攻略

AI之JARVIS&#xff1a;JARVIS(连接众多 AI 模型以解决复杂 AI 任务的接口/可理解为一种超智能AI模型管家&#xff0c;正开发中)的简介、安装、使用方法之详细攻略 目录 JARVIS(一种超智能AI模型管家)的简介 JARVIS(一种超智能AI模型管家)的安装 1、硬件要求 2、获取Key 3…

AIGC:【LLM(三)】——JARVIS:连接ChatGPT和HuggingFace解决AI问题

文章目录 0.摘要1.引言2.相关工作3.HuggingGPT3.1 任务规划3.2 模型选择3.3 任务执行3.4 响应生成 4.限制5.结论6.参考资料 0.摘要 解决具有不同领域和模态的复杂人工智能任务是通往人工通用智能的关键骤。尽管存在丰富的适用于不同领域和模态的人工智能模型&#xff0c;但它们…

微软开源 JARVIS 用 ChatGPT 控制 AI 模型

微软亚洲研究院和浙江大学的研究团队近日发布的一篇论文 ——《HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace》介绍了一个大模型协作系统 该系统提出了一种让 LLM 充当控制器的新方法&#xff0c;让 LLM 来管理现有的 AI 模型&#xff0c;来完成…

ChatGPT会大规模取代人力吗?这场论坛聚焦当下热点话题。

2月25日&#xff0c;第三届上海数字创新大会在中以&#xff08;上海&#xff09;创新园落下帷幕。为期2天的会期中&#xff0c;设立了5场分论坛&#xff0c;ChatGPT、集成电路、新能源汽车等成为各个分论坛中各行业专家热议的关键词。 360集团创始人周鸿祎通过视频分享的方式&…

2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

风口之下&#xff0c;猪都能飞。当今中国股市牛市&#xff0c;真可谓“错过等七年”。 给你一个回顾历史的机会&#xff0c;已知一支股票连续n天的价格走势&#xff0c;以长度为n的整数数组表示&#xff0c;数组中第i个元素&#xff08;prices[i]&#xff09;代表该股票第i天的…

牛市一宝:证券行业

牛市一宝&#xff1a;证券行业 这篇博客转载的是雪球用户“一颗财丸&#xff08;yikecaiwan&#xff09;”&#xff1a;https://xueqiu.com/9760119050/97909820 在不同跑道&#xff0c;十年差十倍的差距&#xff08;上&#xff09;里&#xff0c;我们看了13个行业指数近13年…

外汇天眼:什么是熊市和牛市?

牛市会发生什么&#xff1f; 当多头在市场上占主导地位时&#xff0c;人们正在寻求投资&#xff1b;信心高&#xff0c;风险接受度普遍上升。 这导致了各个市场的上涨——尤其是股票市场&#xff0c;以及澳元 (AUD)、加元 (CAD)、新西兰元 (NZD) 和新兴市场货币等外汇货币。相…

牛市来了,我劝读者不要炒股他却骂我不地道...

大家好我是敖丙&#xff0c;一个在互联网苟且偷生的程序员。 我相信前段时间股票市场铺天盖地的牛市消息已经席卷大家的社交圈子了&#xff0c;像微信、微博、头条等各种软件也都能看到对应的信息流推送&#xff0c;我有自己的技术交流群&#xff0c;平时聊骚聊技术的群&#x…

R语言——牛市追涨杀跌模型

一、牛市追涨杀跌模型 2019年&#xff0c;随着贸易战的和谈&#xff0c;国内政策面的刺激&#xff0c;A股迎来了一波比较客观的小牛市。由此&#xff0c;我们选择建立追涨杀跌模型来进行投资。接下去以所选股票池&#xff08;结语有介绍&#xff09;内的稳定型股票——中直股份…

各大AI研究院共35场NLP算法岗面经奉上

本文涵盖了腾讯微信事业群模式识别中心&#xff0c;PCG和TEG事业群&#xff0c;阿里达摩院&#xff0c;蚂蚁金服&#xff0c;百度研究院&#xff0c;京东研究院&#xff0c;头条AI Lab&#xff0c;滴滴AI Lab&#xff0c;微软亚洲研究院&#xff0c;微软工程院以及联想研究院等…

DeFi会带来牛市吗?

作者&#xff1a;蒙特卡洛 一、Defi的火爆 区块链市场平淡很久了&#xff0c;最近才找到一丝丝火热的气息&#xff0c;这个火热的气息是由Defi带来的。 借助于“借贷即挖矿”&#xff0c;Compound的代币COMP在短短一个月时间之内&#xff0c;价格翻了20多倍&#xff0c;一跃成为…

bluetooth射频已关闭请打开bluetooth射频_投资笔记:5G之射频研究

文/牛市市长 微信公众号:晓烽投资 因为工作关系,今年断断续续的梳理了很多投资笔记,一直想把这篇《5G之射频前端》部分汇总篇文章推送到前台,一直没有时间。这篇文章推送了晚了点,文中的很多判断可能是基于当时的市场做出的结论,不一定适合于当下,请关注的朋友注意。 科技…

这次可能不是你所期待的牛市

6月底&#xff0c;市场还在激烈地讨论3000点是否已经被焊牢&#xff1b;7月伊始&#xff0c;上证综指便以迅雷不及掩耳之势放量突破3150&#xff0c;非银金融和房地产板块翩翩起舞&#xff0c;券商更是集体上演涨停潮。 这似曾相识的行情&#xff0c;让市场嗅到了牛市初期的味道…

无人再谈“永恒牛市”

(图片来源于网络) 请问3月份比特币6万刀的时候是什么市&#xff1f;站在今天回顾过去很多人肯定说是牛市。那么今天比特币3万3是什么市&#xff1f;这个问题就有分歧了。有人说是牛市中的回调&#xff0c;有人说是熊市的途中。从来都是如此&#xff0c;回顾过往人人皆赛诸葛孔明…

牛市因子和熊市因子

来源&#xff1a;Chihiro Quantitative Research &#xff0c;作者&#xff1a;刀疤连 未经授权严禁转载&#xff01; 1.前言 因子化投资近年来越来越火热&#xff0c;是量化投资领域的主流方向[1]。因子投资指在某个资产内部&#xff0c;使用一个或多个具有风险溢价的因子…

牛市看涨期权套利

牛市看涨期权套利 操作组合&#xff1a;买低卖高&#xff0c;方向相同 使用场合&#xff1a;对后市谨慎看多 损益图&#xff1a; 参数说明&#xff1a;较低执行价K1的权利金为Q1&#xff0c;较高执行价K2的权利金为Q2 净权利金: Q1-Q2 &#xff08;也是最大损失&#xff09;…

牛市价差组合

既可以用看涨期权构造&#xff0c;也可以用看跌期权构造 看涨期权组合 总体看好的情况下 看跌牛市价差

牛市的三个阶段

(图片来源于网络) 早在2/21文章《牛市已进入中场》[链接]中就说&#xff0c;“比特币站稳5万刀、市值破万亿之后&#xff0c;这一轮牛市就进入中场了。”那么&#xff0c;通常而言&#xff0c;牛市有以下三个阶段衔接构成&#xff1a; 第一阶段&#xff0c;上半场。远见者相信牛…