二次探底选股公式:确认底部结构,提高反弹成功率
代码介绍
以下代码由今日美股网(www.TodayUSStock.com)代码学院提供,,以下是用于识别股票形成“二次探底”形态的选股公式。这种形态通常意味着股价在形成低点后又一次测试低点,但未能跌破前低,这可能预示着即将到来的反弹。本公式通过检测价格的双底形态来选股。
代码及加载方法
同花顺
// 定义底部价位 LOW1:=LLV(LOW,30); // 过去30天最低价 LOW2:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DOUBLEBOTTOM:=LOW2>LOW1 AND LOW2<=LOW1*1.02; // 第二次低点略高于或等于第一次低点 // 确认反弹 REBOUND:=CLOSE>MA(CLOSE,5); // 收盘价高于5日均线 // 选股条件 STOCK:=DOUBLEBOTTOM AND REBOUND; // 返回结果 RETURN STOCK;
加载方法: 将代码复制粘贴到同花顺的"选股公式编辑器"中,命名为"二次探底选股",然后保存并运行。
东方财富
// 定义底部价位 BOTTOM1:=LLV(LOW,30); // 过去30天最低价 BOTTOM2:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DB:=BOTTOM2>BOTTOM1 AND BOTTOM2<=BOTTOM1*1.02; // 确认反弹 REB:=CLOSE>MA(CLOSE,5); // 收盘价高于5日均线 // 选股条件 SELECT:=DB AND REB; // 返回结果 RETURN SELECT;
加载方法: 复制代码到东方财富通"自定义指标"编辑器中,保存并应用到选股条件中。
通达信
// 定义底部价位 LOWEST_30:=LLV(LOW,30); // 过去30天最低价 LOWEST_15:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DOUBLE_BOTTOM:=LOWEST_15>LOWEST_30 AND LOWEST_15<=LOWEST_30*1.02; // 确认反弹 REBOUND:=CLOSE>MA(CLOSE,5); // 收盘价高于5日均线 // 选股条件 STOCK_SELECT:=DOUBLE_BOTTOM AND REBOUND; // 返回结果 RETURN STOCK_SELECT;
加载方法: 在通达信软件中,进入"公式管理器",选择"新建公式",粘贴代码后保存并使用。
大智慧
// 定义底部价位 BOTTOM_30:=LLV(LOW,30); // 过去30天最低价 BOTTOM_15:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DB:=BOTTOM_15>BOTTOM_30 AND BOTTOM_15<=BOTTOM_30*1.02; // 确认反弹 REB:=CLOSE>MA(CLOSE,5); // 收盘价高于5日均线 // 选股条件 STOCK_SELECT:=DB AND REB; // 返回结果 RETURN STOCK_SELECT;
加载方法: 进入大智慧的"指标管理",创建新指标,粘贴代码后保存使用。
MetaStock
// 定义底部价位 LOW1:=LLV(LOW,30); // 过去30天最低价 LOW2:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DOUBLEBOTTOM:=LOW2>LOW1 AND LOW2<=LOW1*1.02; // 确认反弹 REBOUND:=CLOSE>Mov(CLOSE,5,S); // 收盘价高于5日简单移动平均 // 选股条件 STOCK:=DOUBLEBOTTOM AND REBOUND; // 返回结果 RETURN STOCK;
加载方法: 在MetaStock中,进入"Indicator Builder",新建指标,输入代码并保存。
NinjaTrader
using System;
using NinjaTrader.NinjaScript;
public class DoubleBottomSelection : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Double Bottom Stock Selection";
Name = "DoubleBottomSelection";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
IsSuspendedWhileInactive = true;
}
}
protected override void OnBarUpdate()
{
double low30 = MIN(LOW, 30)[0]; // 过去30天最低价
double low15 = MIN(LOW, 15)[0]; // 过去15天最低价
bool doubleBottom = low15 > low30 && low15 SMA(CLOSE, 5)[0]; // 收盘价高于5日简单移动平均
PlotNewValue("StockSelect", doubleBottom && rebound ? 1 : 0);
}
}
加载方法: 打开NinjaTrader,进入"NinjaScript Editor",新建Indicator,粘贴代码并编译。
eSignal
// 定义底部价位 LOW1:=LLV(LOW,30); // 过去30天最低价 LOW2:=LLV(LOW,15); // 过去15天最低价 // 检测二次探底 DOUBLEBOTTOM:=LOW2>LOW1 AND LOW2<=LOW1*1.02; // 确认反弹 REBOUND:=CLOSE>MA(CLOSE,5); // 收盘价高于5日简单移动平均 // 选股条件 STOCK:=DOUBLEBOTTOM AND REBOUND; // 返回结果 RETURN STOCK;
加载方法: 在eSignal中,进入"Formula Editor",新建公式,粘贴代码并保存。
TradingView
//@version=4
study("Double Bottom Selection", shorttitle="DBSelect", overlay=false)
// 定义底部价位
low30 = lowest(low, 30) // 过去30天最低价
low15 = lowest(low, 15) // 过去15天最低价
// 检测二次探底
doubleBottom = low15 > low30 and low15 sma(close, 5) // 收盘价高于5日简单移动平均
// 选股条件
stockSelect = doubleBottom and rebound
// 返回结果
plotshape(stockSelect, title="Stock Selection", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
加载方法: 在TradingView中,点击图表右上角的"Pine Editor",新建脚本,粘贴代码后保存并应用到图表。
MetaTrader 4/5
//+------------------------------------------------------------------+
//| Double Bottom Selection Indicator |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
double ExtMapBuffer[];
int OnInit()
{
SetIndexStyle(0, DRAW_ARROW, 0, 1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, ExtMapBuffer);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i, limit;
if(rates_total low30 && low15 iMA(NULL,0,5,MODE_SMA,PRICE_CLOSE,i))
{
ExtMapBuffer[i] = Low[i] - 20 * Point;
}
else
{
ExtMapBuffer[i] = EMPTY_VALUE;
}
}
return(rates_total);
}
加载方法: 在MetaTrader中,进入"MetaEditor",新建Expert Advisor或Indicator,粘贴代码,编译并加载到图表。
参数说明
| 参数 | 意义 |
|---|---|
| LLV(LOW,30) | 获取过去30天的最低价,用于确认第一个底部 |
| LLV(LOW,15) | 获取过去15天的最低价,用于确认第二次探底 |
| LOW2>LOW1 AND LOW2<=LOW1*1.02 | 判断第二次低点是否高于或接近第一次低点 |
| CLOSE>MA(CLOSE,5) | 确认价格是否开始反弹,收盘价高于5日移动平均 |
针对不同产品推荐参数
| 产品类型 | 推荐参数 | 理由 |
|---|---|---|
| 股票 | LLV(30,15), MA(5) | 股票市场的底部确认通常需要较长时间,30和15日周期适合 |
| 期货 | LLV(15,7), MA(3) | 期货市场反应快,较短周期更能反映市场变化 |
| 外汇 | LLV(45,20), MA(10) | 外汇市场波动较小,可能需要更长的周期来确认底部 |
| 加密货币 | LLV(21,10), MA(7) | 加密货币市场波动大,需较短周期捕捉反弹信号 |
优点和缺点
| 优点 | 缺点 |
|---|---|
| 有效识别可能的反弹点,增加交易成功率 | 可能会错过一些快速反弹的股票,因为需要双底确认 |
| 适用于各种市场和软件 | 二次探底形态本身不保证反弹,需结合其他分析 |
| 简单易用,减少人工判断误差 | 在市场趋势强烈时,可能产生假信号 |
使用建议
此选股公式应与其他分析方法结合使用,如成交量分析、基本面分析等。建议在市场震荡或底部区域使用,避免在趋势市场中过度依赖。在使用时,设置合理的止损点以管理风险,进行回测来评估公式的有效性。
来源:今日美股网