首页 > 其他分享 >0基础开始Pine量化 止盈改进策略(附代码)

0基础开始Pine量化 止盈改进策略(附代码)

时间:2024-09-11 19:25:14浏览次数:10  
标签:EMA color 止盈 Supertrend Pine supertrend 量化 condition

0基础开始Pine量化 止盈改进策略(附代码)

可以先看前面文章里涉及到的策略
https://www.cnblogs.com/Mephostopheles/p/18406658

什么是止盈

止盈的核心思想:
当市场价格达到设定的目标后,投资者会卖出资产,防止市场波动将已经取得的利润变为损失。
通过止盈,投资者在确保一定盈利的情况下退出市场,而不是继续持有以追求更高的收益,从而避免市场行情逆转带来的风险。

止盈的常见方式:

固定价格止盈:设定一个具体的价格作为目标,一旦价格触及该水平就卖出资产。例如,某只股票买入价是 100,当价格上涨到 120 时卖出,锁定 20% 的利润。

百分比止盈:设定一个百分比目标,当资产价格上涨到预期百分比时卖出。例如,设定止盈目标为 10%,当资产价格涨幅达到 10% 时卖出。

技术指标止盈:使用技术分析工具(如移动平均线、相对强弱指数 RSI、布林带等)来判断市场趋势的变化,从而选择合适的时机卖出。例如,当 RSI 显示超买信号时,选择止盈。

动态止盈(追踪止盈):设定一个价格回撤的比例或金额,随着价格上涨,止盈价格也同步上移。当价格从高点回落到设定的比例时触发卖出。例如,设定 5% 的回撤止盈,当价格从最高点下跌 5% 时卖出。

改进前

定义了三个 EMA,分别为 9、26 和 55 周期的指数移动平均线,三种不同的 Supertrend,分别基于 7、14 和 21 个周期(length1, length2, length3)和不同的乘数(factor1, factor2, factor3)。

策略结果如下

改进后

首先把7和21个周期的Supertrend删去,然后加入止盈,这里止盈的百分比默认为 3.0%,例如,如果入场价是 100,止盈百分比为 3%,那么止盈价格就是 100 * 1.03 = 103。

改进原因

减少因为多信号导致的反应迟缓,3.0%的止盈可以防止在强趋势出现反转之前利润被侵蚀

结果如下图,可以看到各项指数均得到一定幅度的优化

源代码

/*backtest
start: 2023-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Simplified Golden Crossover with Supertrend and Take Profit", overlay=true)

// Define EMA lengths
ema9_length = 9
ema26_length = 26
ema55_length = 55

// Input parameters for different timeframes
timeFrame9 = input.timeframe('', 'Time Frame - EMA 9')
timeFrame26 = input.timeframe('', 'Time Frame - EMA 26')
timeFrame55 = input.timeframe('', 'Time Frame - EMA 55')

// Request EMA data from specified time frames
ema9 = request.security(syminfo.tickerid, timeFrame9, ta.ema(close, ema9_length))
ema26 = request.security(syminfo.tickerid, timeFrame26, ta.ema(close, ema26_length))
ema55 = request.security(syminfo.tickerid, timeFrame55, ta.ema(close, ema55_length))

// Supertrend function (single Supertrend)
supertrend(length, factor) =>
    [superTrend, direction] = ta.supertrend(factor, length)
    superTrend

// Supertrend parameters (only one Supertrend for simplicity)
length_supertrend = 14
factor_supertrend = 2

// Supertrend calculation
superTrend = supertrend(length_supertrend, factor_supertrend)

// Plot EMAs on the chart
plot(ema9, color=color.black, title="EMA 9")
plot(ema26, color=color.green, title="EMA 26")
plot(ema55, color=color.red, title="EMA 55")

// Plot Supertrend line on the chart
plot(superTrend, color=color.blue, title="Supertrend")

// Define buy and sell conditions combining EMA crossover and Supertrend
buy_condition_ema = ta.crossover(ema9, ema26) and ema26 > ema55
sell_condition_ema = ta.crossunder(ema9, ema26) and ema26 < ema55

buy_condition_supertrend = close > superTrend
sell_condition_supertrend = close < superTrend

// Combine the conditions (one Supertrend + EMA crossover)
buy_condition = buy_condition_ema and buy_condition_supertrend
sell_condition = sell_condition_ema or sell_condition_supertrend

// Input for Take Profit percentage
take_profit_percent = input.float(3.0, title="Take Profit %", minval=0.1) / 100

// Calculate Take Profit level based on the entry price
take_profit_level = strategy.position_avg_price * (1 + take_profit_percent)

// Execute buy and sell orders
if (buy_condition)
    strategy.entry("Buy", strategy.long)

// Close position with Take Profit and normal exit conditions
strategy.exit("Take Profit", "Buy", limit=take_profit_level)

// Sell condition to close the order
if (sell_condition)
    strategy.close("Buy")

// Plot buy and sell signals on the chart
plotshape(series=buy_condition, location=location.belowbar, color=color.green, style=shape.arrowup, title="Buy Signal")
plotshape(series=sell_condition, location=location.abovebar, color=color.red, style=shape.arrowdown, title="Sell Signal")

标签:EMA,color,止盈,Supertrend,Pine,supertrend,量化,condition
From: https://www.cnblogs.com/Mephostopheles/p/18408719

相关文章

  • 0基础开始Pine量化 多重时间框架EMA+Supertrend策略(附代码)
    0基础开始Pine量化多重时间框架EMA+Supertrend策略(附代码)基于金叉动量捕捉策略:多重时间框架指数移动平均线交叉系统和三重超级趋势交叉策略在发明者量化网站上回测试验啥是EMA(指数移动平均线)EMA(ExponentialMovingAverage)是一种用于金融市场技术分析的趋势跟踪指标。与简......
  • 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正
    2024-09-04:用go语言,给定一个长度为n的数组happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是尽可......
  • CANoe等工程文件夹批量化建立工具
    1、工具制作原因    个人在工作经历中,需要频繁建立文件夹,就设计一个配置文件夹建立工具,为了方便平时自己快速建立文件夹。然后后期方便自己能够再增加其他管控文件夹,并且使用自己的工具集合在一起,方便使用。2、实现UI3、配置文件使用ini文件配置你需要批量生成的......
  • 币安/OK现货合约量化系统APP开发
    币安现货合约量化APP的开发是一个复杂且技术密集型的项目,它涉及多个方面,包括需求分析、系统设计、功能实现、测试与优化以及最终的部署与上线。以下是对该开发过程的一个概述:一、需求分析业务目标:首先需要明确APP的业务目标,如提高交易效率、降低交易成本、优化风险管理等。......
  • 【2024年Python量化分析】为股票数据量化分析最新整理的免费获取股票实时行情数据API
    ​最近一两年,股票量化分析越来越火了,想入门这行,首先得搞定股票数据。毕竟,所有量化分析都是靠数据说话的,实时交易、历史交易、财务、基本面,这些数据咱们都得有。咱们的目标就是把这些数据里的金子挖出来,指导咱们的投资策略。​为了找数据,我可是没少折腾,自己动手写过网易、......
  • 零基础学习地平线 征程6 QAT 量化感知训练
    1.背景首先感谢地平线工具链用户手册和官方提供的示例,给了我很大的帮助,特别是代码注释写了很多的知识点,超赞!要是注释能再详细点,就是超超赞了!下面开始正文。最近想着学QAT(量化感知训练)玩玩,大体看了一下地平线的用户手册,不说精度调优之类比较复杂的,光一个QAT上手,就感觉对我......
  • 量化合约跟单系统开发
    量化合约跟单系统的开发是一个复杂且需要高度技术能力的过程,它涉及多个关键步骤和考虑因素。以下是一个概括性的开发流程,包括主要步骤和注意事项:一、需求分析功能需求:明确系统需要支持的功能,如市场数据接入、量化策略执行、用户交互界面、风险管理、订单生成与执行等。性能......
  • Python量化交易股票投资,是百战百胜的吗
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)炒股真有百战百胜之法?在充满变数的股票市场中,许多投资者都梦寐以求一种能够百战百胜的炒股方法。现实真的如此理想吗?K线图的奥秘K线图的构成与意义K线图由开盘价、收盘价......
  • TensorRT量化模型分析(耗时分布可视化等)
    文章目录TensorRT量化模型分析一背景二准备工作1.代码准备2.依赖环境三分析过程1.导出模型2.模型形态比对3.转tensorrt序列化文件4.tensorrt序列化文件(即tensorrt模型)分析四其他TIPSTensorRT量化模型分析一背景​在TensorRT模型量化......
  • 低比特量化方法
    低比特量化方法计算机里面数值有很多种表示方式,如浮点表示的FP32、FP16,整数表示的INT32、INT16、INT8,量化一般是将FP32、FP16降低为INT8甚至INT4等低比特表示,如图7-2所示。图7-2数值有很多种表示格式模型量化则是一种将浮点值映射到低比特离散值的技术,可以有效的减少......