You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

481 lines
16 KiB

  1. # K线的画法
  2. ## k线的画法
  3. K线,又称日本线,起源于200年前的日本,最初用于米市交易。
  4. K线是一种柱状线条,由影线和实体组成。
  5. 影线在实体上方的部分叫上影线,下方的部分叫下影线。
  6. 实体分为阴线和阳线两种,分别用黑(阴)线和红(阳)线表示。
  7. 一条K线记录的是某一只股票或指数一天的价格变动情况,将每天的K线按时间顺序排列,就组成这只股票自上市以来每天的价格变动情况,称为日K线图。
  8. 价格变动体现在四个方面(主要),开盘价、最高价、最低价、收盘价
  9. 阴线阳线的开盘价,收盘价相反
  10. ![image-20250618173052302](../股票/assets/6-18股票学习/image-20250618173052302.png)
  11. ## K线的种类
  12. K线的种类主要有以下几种:
  13. 1. **光头阳线和光头阴线**:没有上影线的K线,当收盘价或开盘价正好同最高价相等时出现。
  14. 2. **光脚阳线和光脚阴线**:没有下影线的K线,当收盘价或开盘价正好同最低价相等时出现。
  15. 3. **光头光脚的阳线和阴线**:既没有上影线也没有下影线的K线,当开盘价和收盘价分别与最高价和最低价相等时出现。
  16. 4. **十字星**:收盘价与开盘价相同时出现的K线,没有实体。
  17. 5. **T字型和倒T字型**:在十字星的基础上,加上光头或光脚的条件,没有实体,形状像英文字母T。
  18. 6. **一字型**:四个价格都一样,在开盘即封时,在涨停或跌停时出现。
  19. ## K线的变化
  20. ### 三要素
  21. 1. 阴阳代表总体趋势
  22. 2. 长短代表内在动力和趋势强弱
  23. 3. 阴线代表转折信号
  24. ### K线间的相互关系
  25. 光头光脚长阳线,是强烈上升过程的最高形式,即后市看好的极端;
  26. 光头光脚的长阴线,是强烈下跌过程的最高形式,即后市看坏的极端;
  27. 十字星是多空双方平衡状态的最高形式
  28. ### K线长短相互关系
  29. K线长短代表内在动力大小,其中,实体长度又可代表趋势强弱。
  30. ### 线长度加大会有三种变化
  31. K线由小阳线、中阳线到长阳线不断加长,说明多方力量变得越来越强;
  32. K线由小阴线、中阴线到长阴线不断加长,说明空方力量变得越来越强;
  33. K线实体变化不大,上影线和下影线越来越长,说明市场内在动力越来越强,多空搏斗越来越激烈。
  34. ### K线长度变化与动力转化
  35. #### 影线长短互相影响
  36. ![image-20250618175722273](../股票/assets/6-18股票学习/image-20250618175722273.png)
  37. ![image-20250618175734785](../股票/assets/6-18股票学习/image-20250618175734785.png)
  38. ### K线分析的应用时机
  39. 阳线出现在盘整或股价下跌趋势末期时,代表股价可能会开始反转向上;
  40. 阴线出现在盘整或股价上涨趋势末期时,代表股价可能会开始反转向下
  41. 出现极长下影线时,表示买方支撑力较强
  42. 出现极长上影线时,表示卖压大。
  43. 十字线可视为反转信号
  44. # Vue3
  45. ## 优点
  46. 1. Vue3 支持 Vue2 额大多数特性。
  47. 2. 更好的支持 TypeScript。
  48. 3. 打包大小减少 41%。
  49. 4. 初次渲染快 55%,更新渲染快 133%。
  50. 5. 内存减少 54%。
  51. 6. 使用 proxy 代替 defineProperty 实现数据响应式。
  52. 7. 重写虚拟 DOM 的实现和 Tree-Shaking。
  53. ## API
  54. ### setup
  55. 1. setup 是一个函数。只在初始化时执行一次。以后大部分代码都是在 setup 中写。
  56. 2. 返回一个对象,对象中的属性或方法,模板中可以直接使用。
  57. 3. setup 返回的数据会和 data 和 methods 进行合并,setup 优先级更高。
  58. 4. setup 函数中没有 this。 以后开发都不使用 this
  59. 5. setup 不要写 async 函数。
  60. > 因为 async 函数必须返回一个 json 对象供模板使用,如果 setup 是一个 async 函数,返回的将是一个 promise 对象。
  61. > 如果 setup 是一个 async 函数,那该组件就成了一个异步函数,需要配合 Suspense 组件才能使用
  62. ### ref
  63. 让数据变为响应式的数据
  64. 使用方法:
  65. ```vue
  66. //(1)先引用ref
  67. import {ref} from 'vue';
  68. //(2)将数据变成响应式的。
  69. let data1=ref(12);
  70. //(3)操作数据
  71. data1.value = 123;
  72. ```
  73. ### reactive
  74. 定义对象格式的响应式数据
  75. 如果使用了 ref,内部会自动将对象/数据转换为 reactive 代理器对象
  76. ### toRefs
  77. 将响应式对象中所有属性包装为 ref 对象,并返回包含这些 ref 对象的普通对象。
  78. 应用:对 trsctive 定义的对象进行 toRefs 包装,包装之后的对象中每个属性都是响应式的。
  79. ### 响应式原理
  80. 通过 proxy(代理):拦截对对象本身的操作,包括属性的读写、删除等操作。
  81. 通过 Reflect(反射):动态对被代理对象的响应式属性进行特定的操作。
  82. ### watch 和 watchEffect
  83. #### watch - 指定监听数据
  84. - 监听指定的一个或多个响应式数据,一旦发生变化,就会自动执行监视回调。
  85. - 如果是监听 reactive 对象中的属性,必须通过函数来指定。
  86. - 监听多个数据,使用数组来指定。
  87. - 默认初始时不指定回调,但是通弄过配置 immediate 为 true,来指定初始时立即执行第一次。
  88. - 通过配置 deep 为 true,来指定深度监视。
  89. #### watchEffect - 不指定监听数据
  90. - 不用直接指定啦监视的数据,回调函数中使用的哪些响应式数据就监听哪些响应式数据。
  91. - 默认初始就会执行一次。
  92. ### 生命周期
  93. onMounted、onUpdated 和 onUnmounted等
  94. ![组件生命周期图示](https://cn.vuejs.org/assets/lifecycle_zh-CN.W0MNXI0C.png)
  95. ### ref获取元素
  96. > vue2中是用this ref.xxx来获取元素或组件,但是vue3中没有this的概念。
  97. > vue3通过ref创建响应式数据的api来获取元素。
  98. 1.使用ref创建响应式数据,假设叫x
  99. 2.模板中绑定ref属性,值为上面的x
  100. 注意不能使用v-bind动态绑定。
  101. 这时 x 就是一个dom元素或组件了。
  102. ```vur
  103. <!DOCTYPE html>
  104. <html lang="zh-CN">
  105. <head>
  106. <meta charset="UTF-8">
  107. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  108. <title>Vue 3 ref 引用示例</title>
  109. <script src="https://cdn.tailwindcss.com"></script>
  110. <link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
  111. <script src="https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script>
  112. </head>
  113. <body class="bg-gray-50 min-h-screen">
  114. <div id="app" class="container mx-auto p-4 max-w-3xl">
  115. <div class="bg-white rounded-lg shadow-md p-6 mt-8">
  116. <h1 class="text-2xl font-bold text-gray-800 mb-6">Vue 3 ref 引用示例</h1>
  117. <div class="mb-6">
  118. <button @click="focusInput" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded">
  119. <i class="fa fa-hand-pointer-o mr-2"></i>聚焦输入框
  120. </button>
  121. <button @click="changeText" class="bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded ml-2">
  122. <i class="fa fa-pencil mr-2"></i>修改文本
  123. </button>
  124. </div>
  125. <!-- 绑定 ref="x" 到输入框 -->
  126. <div class="mb-6">
  127. <label for="exampleInput" class="block text-gray-700 text-sm font-bold mb-2">普通输入框</label>
  128. <input type="text" id="exampleInput" ref="x" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="这是一个示例输入框">
  129. </div>
  130. <!-- 绑定 ref="x" 到自定义组件 -->
  131. <div class="mb-6">
  132. <label class="block text-gray-700 text-sm font-bold mb-2">自定义组件</label>
  133. <custom-component ref="x"></custom-component>
  134. </div>
  135. <div class="bg-gray-100 p-4 rounded-md">
  136. <h3 class="font-semibold text-gray-700 mb-2">状态信息</h3>
  137. <p class="text-gray-600"><i class="fa fa-info-circle mr-2"></i><span v-if="elementInfo">当前引用的元素: {{ elementInfo }}</span><span v-else>未选择元素</span></p>
  138. </div>
  139. </div>
  140. </div>
  141. <script>
  142. const { createApp, ref, onMounted } = Vue;
  143. // 自定义组件
  144. const CustomComponent = {
  145. template: `
  146. <div class="p-4 border border-gray-300 rounded-md bg-gray-50">
  147. <p class="text-gray-700">这是一个自定义组件</p>
  148. <button @click="doSomething" class="mt-2 bg-purple-500 hover:bg-purple-600 text-white px-3 py-1 rounded text-sm">
  149. <i class="fa fa-cog mr-1"></i>组件操作
  150. </button>
  151. </div>
  152. `,
  153. methods: {
  154. doSomething() {
  155. alert('自定义组件被点击了!');
  156. },
  157. changeText() {
  158. this.$el.querySelector('p').textContent = '文本已被修改';
  159. }
  160. }
  161. };
  162. const app = createApp({
  163. components: {
  164. CustomComponent
  165. },
  166. setup() {
  167. // 1. 使用 ref 创建响应式数据 x
  168. const x = ref(null);
  169. const elementInfo = ref('');
  170. // 组件挂载后执行
  171. onMounted(() => {
  172. updateElementInfo();
  173. });
  174. // 聚焦输入框方法
  175. const focusInput = () => {
  176. if (x.value) {
  177. x.value.focus();
  178. updateElementInfo();
  179. }
  180. };
  181. // 修改文本方法
  182. const changeText = () => {
  183. if (x.value) {
  184. if (x.value.tagName === 'INPUT') {
  185. x.value.value = '文本已被修改';
  186. } else if (typeof x.value.changeText === 'function') {
  187. x.value.changeText();
  188. }
  189. updateElementInfo();
  190. }
  191. };
  192. // 更新元素信息
  193. const updateElementInfo = () => {
  194. if (x.value) {
  195. if (x.value.tagName) {
  196. elementInfo.value = `HTML 元素 - ${x.value.tagName.toLowerCase()}`;
  197. } else {
  198. elementInfo.value = '自定义组件实例';
  199. }
  200. }
  201. };
  202. return {
  203. x,
  204. focusInput,
  205. changeText,
  206. elementInfo
  207. };
  208. }
  209. });
  210. app.mount('#app');
  211. </script>
  212. </body>
  213. </html>
  214. ```
  215. ### 自定义hook函数
  216. > hook函数翻译成中文就是钩子函数(注意并不是生命周期的钩子函数)
  217. > 比如ref,reactive,computed,watch,onBeforeMount等都是hook函数,只不过他们都是vue内部hook函数。
  218. 1.创建一个函数,函数名称必须以"use"开头
  219. 2.函数必须return一些数据。
  220. `export function useFetchData()`
  221. ### shallowReactive与shallowRef
  222. 他们都表示浅响应式。
  223. - shallowReactive:只处理了对象第一层属性的响应式(值响应第一层)
  224. - shallowRef:只有重新复制时才是响应式(不响应内部数据,只响应整体。)
  225. ### -readonly与shallowReadonly
  226. - 他们表示只读代理对象
  227. - readonly
  228. - 深度只读
  229. - 设置readonly后,修改响应式数据会报错。
  230. - shalloReadonly
  231. - 浅只读
  232. - 设置shalloReadonly后,修改响应式数据的第一层数据会报错。
  233. - 应用场景:
  234. - 在某些特定情况下,我们可能不希望对数据进行更新的操作,那就可以包装成一个只读代理对象,而不能修改或删除。
  235. ### -toRaw与markRaw
  236. - toRaw
  237. - 返回reactive或readonly对象的原始数据
  238. - 这是一个还原方法,可用于临时读取,得到的数据不具有响应式。
  239. - markRow:
  240. - 标记一个对象,使其不具有响应式
  241. - 应用场景:
  242. - 有些只不应被设置为响应式的,例如复杂的第三方实例或Vue组件对象。
  243. - 当渲染具有不可变数据源的大列表时,跳过代理转换可以提高性能。
  244. ### toRef
  245. - 为响应式对象上的某个属性创建一个ref引用,更新是应用对象会同步更新。
  246. - 与ref的区别:ref是拷贝了一份新的数据指单独操作,更新时相互不影响。
  247. ### -customRef
  248. - 用于自定义一个ref,可以显示的控制依赖追踪和触发相应。
  249. - 接受一个工厂函数,两个参数分别用于追踪的track与用于触发相应的trigger,并方法一个带有get和set属性的对象。
  250. - 需求:使用customRef实现防抖函数
  251. ### -provide与inject
  252. - provide和inject提供依赖注入,功能类似2.0的provide/inject
  253. - 实现跨层级组件(祖孙)间通信。
  254. ### -响应式数据的判断
  255. - isRef:检查一个值是否为一个ref对象。
  256. - isReactive:检查一个对象是否否是由reactive对象的响应式代理。
  257. - isReadonly:检查一个对象是否由readonly创建的只读代理。
  258. - isProxy:检查一个对象是否是由reactive或者readonly方法创建的代理。
  259. ### Fragment
  260. - 在vue2中:组件中必须有一个跟标签
  261. - 在vue3中:组价可以没有跟标签,内部会将多个标签包含在一个Fragment虚拟标签中。
  262. - 好处:减少标签层级,减小内存占用
  263. ### Teleport
  264. - Teleport提供了一种干净的方法,让组件的HTML在父组件界面外的特定标签(很可能是body)下插入显示。
  265. ### Suspense
  266. > Supense组件是配合一部组件使用的,它可以让一部组件返回数据前渲染一些后背内容。
  267. > 那我们首先要学会一个异步组件。
  268. - 在setup函数总返回一个promise,就是一个异步组件。
  269. - setup函数携程async函数,也是一个异步组件。
  270. ### 其他新的API
  271. - 全新的全局API:
  272. - createApp()
  273. - defineProperty()
  274. - defineComponent()
  275. - nextTick()
  276. - 将原来的全局API转移到应用对象:
  277. - app.component()
  278. - app.config()
  279. - app.directive()
  280. - app.mount()
  281. - app.umount()
  282. - app.use()
  283. ### useSlots和useAttrs
  284. > useSlots 和 useAttrs 是真实的运行时函数,它会返回与 setupContext.slots 和 setupContext.attrs 等价的值,同样也能在普通的组合式 API 中使用。
  285. > 使用场景:父组件使用子组件的插槽
  286. 1.父组件
  287. ```xml
  288. <template>
  289. <h1>这是父组件</h1>
  290. <p>插槽上面1</p>
  291. <slots-attrs msg="我是props的msg" heihei="我是attr">
  292. <template #header >
  293. <div style="width:100%;height:100px;border:1px solid green;">我是父组件插槽--插入的内容。。。</div>
  294. </template>
  295. </slots-attrs>
  296. <p>插槽下面2</p>
  297. </template>
  298. <script lang="ts" setup>
  299. import SlotsAttrs from '@/components/04/SlotsAttrs.vue'
  300. </script>
  301. ```
  302. 2.子组件
  303. ```xml
  304. <template>
  305. <Child ref="child"/>
  306. {{msg}}
  307. </template>
  308. <script lang="ts" setup>
  309. import { ref,onMounted } from 'vue';
  310. import Child from '@/components/03/Child.vue'
  311. const child = ref(null);
  312. const msg=ref('')
  313. onMounted(()=>{
  314. console.log("进来了")
  315. console.log(child.value.msg)
  316. msg.value = child.value.msg;
  317. })
  318. </script>
  319. ```
  320. ## 路由
  321. (1)userRout:获得当前路由对象。
  322. (2)useRouter:获得路由实例,可以进行路由跳转。
  323. ### 使用
  324. ```javascript
  325. import {useRoute,useRouter} from "vue-router"
  326. ```
  327. ## 实战
  328. 创建项目后
  329. ### ElementPlus
  330. 引入
  331. ```sh
  332. npm install element-plus --save
  333. ```
  334. 尝试静态界面
  335. ![image-20250618172336329](assets/6-18_李慧学习记录/image-20250618172336329.png)
  336. # 明日计划
  337. 1. 股票知识
  338. 2. 继续学习vue3
  339. 3. 参与到金币前端的任务