虽然也在工作使用使用ai 补全代码或者完善代码,但还是没有完全使用ai 做一款应用,不依赖手工编程、不依赖人查找资料

所以决定自己写一个应用玩玩,感受一下全完使用ai开发一款应用的乐趣, 跟上时代发展的步伐

不得不说以前写玩具项目挺枯燥,现在用ai写 还是挺有意思的

应用的需求:

使用ai 分析 k线,并进行点评,让天底下的韭菜没有看不懂的k线,让ai进行cosplay 扮演各路专家进行点评,这不是一款应用这是一款ai驱动的综艺节目

考虑我国复杂的金融监管环境,对股票分析限制非常多,所以对 美股 和港股还有web3 领域的token 进行分析

下面是项目和代码文件

主要是一个图表组件TradingChart.tsx和首页 page.tsx

TradingChart.tsx

'use client'; // 确保只在客户端渲染

import { useEffect, useRef } from 'react';
import {
createChart,
CandlestickSeries,
HistogramSeries,
} from 'lightweight-charts'; export interface KLine {
time: string; // 'YYYY-MM-DD'
open: number;
high: number;
low: number;
close: number;
volume: number;
} interface Props {
data: KLine[];
} export default function TradingChart({ data }: Props) {
console.log(data);
const containerRef = useRef<HTMLDivElement>(null); useEffect(() => {
if (!containerRef.current || !data.length) return; const chart = createChart(containerRef.current, {
width: containerRef.current.clientWidth,
height: containerRef.current.clientHeight,
layout: { textColor: '#d1d4dc', background: { color: '#111' } },
grid: { vertLines: { color: '#2a2e39' }, horzLines: { color: '#2a2e39' } },
rightPriceScale: { visible: true },
leftPriceScale: { visible: true }, crosshair: { mode: 1 },
timeScale: { fixLeftEdge: false,
fixRightEdge: false,
barSpacing: 10,
minBarSpacing: 5,
},
});
chart.applyOptions({
localization:{
dateFormat: 'yyyy-MM-dd',
}
})
/* ---- 蜡烛图 Pane(上方)---- */
const candlePane = chart.panes()[0];
const candleSeries = candlePane.addSeries(CandlestickSeries, {
upColor: '#26a69a',
downColor: '#ef5350',
borderVisible: false,
wickUpColor: '#26a69a',
wickDownColor: '#ef5350',
priceScaleId: 'right',
});
candleSeries.setData(
data.map(({ time, open, high, low, close }) => ({ time, open, high, low, close }))
); /* ---- 成交量 Pane(下方 30%)---- */
const volumePane = chart.addPane();
volumePane.setHeight(80);
const volumeSeries = volumePane.addSeries(HistogramSeries, {
color: '#26a69a',
priceScaleId: 'right',
base: 0,
}); // 格式化成交量Y轴标签 - 调整为20%高度
volumePane.priceScale('right').applyOptions({
//设置高度 scaleMargins: {
top: 0.2,
bottom: 0,
},
borderVisible: false,
}); // 自定义成交量格式化
volumeSeries.priceScale().applyOptions({
invertScale: false,
borderColor: '#2a2e39',
}); // 使用priceFormatter来格式化成交量数值
volumeSeries.applyOptions({
priceFormat: {
type: 'custom',
minMove: 1,
formatter: (price: number) => {
if (price >= 1000000) {
return (price / 1000000).toFixed(1) + 'M';
} else if (price >= 1000) {
return (price / 1000).toFixed(0) + 'K';
} else {
return price.toFixed(0);
}
}
}
});
volumeSeries.setData(
data.map(d => ({
time: d.time,
value: d.volume,
color: d.close >= d.open ? '#26a69a' : '#ef5350',
}))
);
chart.timeScale().fitContent(); /* 自适应窗口大小 */
const ro = new ResizeObserver(() => chart.applyOptions({
width: containerRef.current!.clientWidth,
height: containerRef.current!.clientHeight, }));
ro.observe(containerRef.current); return () => {
ro.disconnect();
chart.remove();
};
}, [data]); return <div ref={containerRef} style={{ width: '100%', height: '100%' }} />;
}

  page.tsx

// app/page.tsx 或 pages/index.tsx
"use client"
import dynamic from 'next/dynamic';
import { KLine } from '@/components/TradingChart';
import TradingChart from '@/components/TradingChart';
import { useState, useEffect } from 'react'; interface Coin {
id: string;
symbol: string;
name: string;
} export default function HomePage() {
const [kLineData, setKLineData] = useState<KLine[]>([]);
const [coins, setCoins] = useState<Coin[]>([]);
const [selectedCoin, setSelectedCoin] = useState<string>('bitcoin'); useEffect(() => {
const fetchCoins = async () => {
try {
const response = await fetch('https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=false');
const data = await response.json();
setCoins(data);
} catch (error) {
console.error('获取币种列表失败:', error);
}
}; fetchCoins();
}, []); useEffect(() => {
const fetchData = async () => {
if (!selectedCoin) return; try {
// 180 天 和30天数据
// 并行获取OHLC和成交量数据
const [ohlcRes, volumeRes] = await Promise.all([
fetch(`https://api.coingecko.com/api/v3/coins/${selectedCoin}/ohlc?vs_currency=usd&days=180`),
fetch(`https://api.coingecko.com/api/v3/coins/${selectedCoin}/market_chart?vs_currency=usd&days=180&interval=daily`,{cache:'force-cache'})
]);
const ohlcData = await ohlcRes.json();
const volumeData = await volumeRes.json(); // 合并数据并转换格式
const formattedData = ohlcData.map(([timestamp, open, high, low, close]: [number, number, number, number, number]) => {
// 匹配对应时间戳的成交量
const volumeEntry = volumeData.total_volumes?.find(([volTimestamp]: [number, number]) => volTimestamp === timestamp);
const volume = volumeEntry ? volumeEntry[1] : 0; // 转换时间戳为YYYY-MM-DD格式
const date = new Date(timestamp);
// const time = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; return { time:timestamp/1000, open, high, low, close, volume };
}); setKLineData(formattedData);
} catch (error) {
console.error('数据获取失败:', error);
}
}; fetchData();
}, [selectedCoin]); return (
<div >
<div className='w-[70%]' style={{ height: '600px' }}>
<div className=' flex align-center'>
<select
value={selectedCoin}
onChange={(e) => setSelectedCoin(e.target.value)}
className="px-4 py-2 border border-gray-300 rounded-lg bg-white text-gray-700 shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 hover:border-gray-400 transition-colors duration-200"
>
{coins.map((coin) => (
<option key={coin.id} value={coin.id} className="py-1">
{coin.name} ({coin.symbol.toUpperCase()})
</option>
))}
</select>
{/* 显示 下拉列表中选中的币种的current_price */}
<div className='flex items-center'>
{coins.find((coin) => coin.id === selectedCoin)?.current_price} usdt
</div> </div> <TradingChart data={kLineData} />
</div>
<div className='w-[30%]'>
对话框组件
</div> </div> );
}

  

下面是上周工作的成果 绘制了k线和显示了下拉列表还有价格

下面说一下我开发的步骤

1 首选是使用ai 进行需求分析

使用豆包进行的需求分析

https://www.doubao.com/thread/w0e5291f6269dbb19

2 使用ai 分析用什么工具才能绘制交易专用的图表

https://www.doubao.com/thread/wf2ef2d222fdba7eb

3 使用ai 寻找提供的数据源

使用kimi 寻找数据源

https://www.kimi.com/share/d23na3djqedfoaoeplr0

4 使用ai 开发图表组件

怎么使用ai 开发专业的交易图表组件?现在多数ai 都支持html 在线预览 例如 豆包和kimi

例如我需要绘制k线和成交量在一起的一个图表

先使用ai 制作一个html页面,进行在线预览,如果对效果不满意就完善提示词

我分别使用 豆包 deepseek kimi 若干次  最后在kimi 成功制作了交易组件的html页面

使用kimi制作html 页面

https://www.kimi.com/share/d23na3djqedfoaoeplr0

在制作完成html 页面之后,在用ai将html的内容用react 或者vue 重写一遍

然后就是复制到ide 中 进行进一步的完善

 

完全使用TRAE和AI 开发一款完整的应用----第一周的更多相关文章

  1. 个人或者企业怎么进行app开发?开发一款APP应用大概须要多少钱?

    App开发.是指专注于手机应用软件开发与服务. App是application的缩写,通常专指手机上的应用软件,或称手机client.另外眼下有非常多在线app开发平台.当然移动互联网时代是全民的移动 ...

  2. HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度

    6月23日,在2018华为终端·全球合作伙伴及开发者大会AI分论坛体验区的一角,被层层叠叠的人群围得水泄不通.站在最前面的一名体验者,正跟随着“快手短视频”APP上不断出现的小人左右扭动,每完成一个动 ...

  3. AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。

    AoE( AI on Edge , https://github.com/didi/AoE ) 是滴滴近期开源的终端侧 AI 集成运行时环境 ( IRE ). 随着人工智能技术快速发展,近几年涌现出了 ...

  4. AI 开发路漫漫,什么才是真正的极客精神?

    摘要:AI开发看上去很美,实践起来却不是一件容易的事.一个聪明的开发者知道借助工具提升开发效率,一个智能的平台则会站在开发者的立场,为用户提供贴心服务. 前言 “理想很丰满,现实很骨感.”如果用一句话 ...

  5. AI开发利器:HiLens Studio技术解读

    摘要:传统的AI应用开发和部署意味着高成本和高门槛,借助HiLens Studio,AI应用开发和部署仅需要三步. 曾几何时, 在我们青春年少时, 当我们看到某篇AI的技术文章时, 心中总不免想要在一 ...

  6. AI开发者十问:10分钟了解AI开发的基本过程

    摘要:从AI开发模型.框架.工具,到提升开发效率的学习办法,为AI开发者逐一解答. 本文分享自华为云社区<10分钟了解AI开发的基本过程>,作者:简单坚持. 1.AI开发究竟在开发什么? ...

  7. 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)

    一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户"即用即走"吗? 其功能能和动辄几十兆安装文件的APP相比吗? 开发小程序,是不是意味着移动应用开发的一次 ...

  8. 准备开发一款开源NES模拟器

    前几天无意见看到一些NES的开发资料,勾起了小时候暑假的无数美好回忆,做为一名码农,萌发了自己写一款模拟器的想法.一来可以加深自己对整个系统/游戏的理解,一来可以实现小时候的梦想:),希望可以坚持下来 ...

  9. 开发一款高端大气上档次的android应用需要必备的知识——记于2013年末

    Android入门还是很简单的,看两本书,翻阅几篇文章,搭建了开发环境就算入门了.可是怎样开发一款完备的android应用呢,开发一款高端的android应用又需要那些知识呢,作者根据几年的开发经验做 ...

  10. 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具

    在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...

随机推荐

  1. RPC实战与核心原理之动态分组

    动态分组:超高效实现秒级扩缩容 回顾 在 RPC 里面怎么支持流量回放,应用在引入 RPC 后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改 ...

  2. RPC的通信流程

    核心原理:能否画张图解释下RPC的通信流程? RPC的全称是Remote Procedure Call,即远程过程调用.RPC帮助我们屏蔽网络编程细节,实现调用远程方法跟调用本地(同一个项目中的方法) ...

  3. C# 应用程序域

    在.NET中,每个应用程序域都是一个独立的执行环境,有自己的安全边界和上下文.当使用AppDomain.ExecuteAssembly方法在一个新的应用程序域中执行一个程序集时,这个程序集将会在新的应 ...

  4. C语言函数指针解析

    C语言函数指针解析 一.函数指针的本质 函数指针是存储函数内存地址的变量,它允许程序在运行时动态调用不同的函数.与数据指针不同,函数指针指向的是可执行代码段. /* 典型声明方式 */ int (*f ...

  5. 那些年的鸡汤&&毒鸡汤

    既然一定有人会赢,那凭什么不能是我? 既然我想赢得更漂亮,为什么不竭尽全力? 既然是竭尽全力,为什么还要找任何借口来拖延,为什么不在此刻就开始? 一时兴起的踌躇满志没什么了不起,每天都在坚持着进步才是 ...

  6. 8086汇编(16位汇编)学习笔记01.汇编基础和debug使用

    原文链接: https://bpsend.net/thread-100-1-2.html 为什么学习16位汇编? 16位操作指令最多能够操作两个字节,且更能够体现出与硬件的交互.16位下的指令和32位 ...

  7. JAVA 循环删除list中元素的方法总结

    摘要:介绍List集合实现元素边遍历边删除的方法,例如removeIf和迭代器iterator.remove()等. 综述   List集合是我们开发中经常使用到的一种集合形式,有时候会遇到在遍历Li ...

  8. JSON格式化和压缩成一行

    JSON格式化和压缩成一行 摘要:把JSON字符串压缩成一行,即去掉中的空格.回车.换行符.制表符等:格式化JSON, 易于阅读.   JSON(JavaScript Object Notation, ...

  9. Golang相关环境变量

    GOROOT: GO语言的安装路径,linux系统下一般是/usr/local/go GOPATH: 程序员自己的go源码路径,比如开发一个Helloworld的项目,那么它的代码文件夹就应该放在GO ...

  10. java list<对象>根据某个字段分组

    前言 仅供学习参考,不保证性能问题 其中的实体类改成你自己的实体类 代码 /** * 根据某个字段进行分组,分组后遍历方法 * <p> * Map<String, List<M ...