English Русский Español Deutsch 日本語 Português
preview
3D 柱线上的趋势强度和方向指标

3D 柱线上的趋势强度和方向指标

MetaTrader 5交易 |
709 25
Yevgeniy Koshtenko
Yevgeniy Koshtenko

概述

人们或许会认为在普通蜡烛中找不到任何新东西。一切都已经被发现,计数和数字化。但凡我们换个角度看市场,就会揭示它完全出乎意料的一面。

想象一下,您查看图表时不仅是一幅平面图,而是把它看作一个活生生的、会呼吸的有机体。每根柱线不仅仅是一个带有阴影的矩形,而是一个随着市场心跳而脉动的有体量结构。这就是 3D 柱线思路如何诞生的。起初,这只是一个可视化实验 — 我打算以不同的方式看待熟悉的数据。但我的研究越深入,就越有耀眼的形态出现。

我还记得我第一次看到“黄色”簇团的那一刻。在 3D 图表上,它实实在在地发光了,预示着趋势逆转。起初,我以为这是巧合。但这种形态一再自我重复,以惊人的准确性指明未来的价格走势。六个月的持续研究,数百个不眠之夜,数千行代码 — 这一切逐渐形成了一个周全的数学模型。

现在,看看测试结果,我明白我们真的触摸到一些重要的事情。这是依赖于市场结构本身的东西,深嵌在其本质之中。传统的技术分析于此无能为力 — 这些形态只能经由张量分析的棱镜察觉 — 通过把平面图表向上抬升至三维。

在本文中,我打算分享我的发现。我欲展示当从新的角度审视时,普通的市场数据如何提前为我们提供关于趋势强度和方向的惊人准确信号,而此刻仍有时间建仓,并等待走势发生。系好您的安全带,我们即将踏上纵览 3D 行情之旅。


基本行情状态张量的结构

您知道我们小时候是怎么解魔方的吗?初看,它似乎完全混乱。可一旦您掌握了原理,所有面开始一起汇集形成单一图案。此处也是相同的。我开始将数据收集到一个三维结构当中 — 张量。这听起来很复杂,但其核心只是查看价格、交易量、及时间如何相互影响的一种途径。

最初的实验并不是很令人印象深刻。数学上固执地拒绝形成一个美丽的方程,这源源不断的数字洪流是如此令人恼怒。然后...然后我就不再把它们当作数字来思考了。

想象一下,每根蜡烛不仅仅是一组开盘价-最高价-最低价-收盘价,而是一个活的有机体。它有体积,就像身体的质量一样。有一种冲动 — 就像运动一样。还有一个内部结构 — 比如 DNA。一旦我开始从这个角度看待数据,一切都水到渠成。

结果是一个像这样的“立方体”:

  • 一面是经典的价格数据
  • 第二面是交易量,但不仅仅是交易数量,而是它们的内部结构。
  • 第三面是我很久没能抓住的时间往复。

最令人惊奇的事情始于我对这个模型的第一次测试。图表真的栩栩如生。我以前只看到线条,现在出现了清晰的体量结构。它动了!就好像它随着行情的一些内部节奏及时脉动。

但主要是,这种结构开始展现出奇怪的形态。起初,我将它们误认为是可视化伪影。但我在模型中运行的数据越多,形态就越清晰。这些形态在价格强劲走势之前不久出现。好似行情......其意图是警告吗?

我们转到我如何将这些数据带到一个共同分母。这是一个单独的故事,它始于江恩(Gann)旧作中的一次偶然发现......


使用江恩方法归一化数据

我接触江恩的作品完全出于偶然。我正在翻阅 PDF 存档,以寻找完全不同的素材,突然我的目光捕捉到他的奇怪图形。正方形、三角形、一些螺旋...... 我首先想到的是 — 这是另一个行情神秘主义者。但有些事情令我深入挖掘。我撰写了一篇关于江恩方法的文章

您知道吗?在所有这些几何装饰之下,隐藏着一个极其优雅的数据归一化理念。江恩直观地抓住了我试图在数学上达到的目标 — 市场标刻不变性原理。

我花了三周时间浏览他的笔记。其中一半作为彻头彻尾的深奥主义而不得不被丢弃。但其余的......天啊,那里有真正的东西!我对他处理时间往复的方式印象特别深刻。我记得半夜从床上跳起来,然后跑到电脑前检查一个突如其来的猜测。

事实证明,如果您正确地标刻时间间隔,市场就会开始呈现出几乎是晶体的结构。这就像在显微镜下观察雪花一样 — 每次新的变焦都会揭示相同的图案,只是大小不同。

我采取了他的基本原则,并加以再造,令它们适合我自己的模型。取代江恩所用的“魔幻”数字,我采用基于波动率计算的动态比率。每个张量参数现在不是归一化为固定标刻,而是一个“浮动”范围,其本身会依市场的当前状态进行调整。

这就像给乐器调音一样。您知道琴弦最终开始齐鸣时的那种感觉吗?当我看到第一个结果时,我的感觉几乎是一样的。图表不再分解成单独的元素 — 它作为一个整体开始呼吸。

最具挑战性的部分是在归一化灵敏度、和模型健壮性之间找到恰当的平衡。若其过于微调,系统开始对市场噪音做出反应。若其太粗糙,重要信号就会丢失。我花了两周时间调整这些参数,直至找到黄金中值。

但真正的突破来自我将这种归一化应用于趋势的成交量部分时。然后最有趣的事情开始了......


趋势体量分量的计算

这就是乐趣开始的地方。在对数据进行归一化后,我遇到了一个意想不到的问题— 经典的成交量指标根本就看不到趋势反转的关键时刻。我记得我花了一周时间尝试修改 OBV 和 MFI。结果平平无奇。

然后,在挖掘一个古老指标(其作者不详)的源代码时,我遇到了一种计算体量曲线的有趣方式。该思路简单到天才 — 不看绝对成交量值,而是它们与移动平均线的相对性。此处是代码:

def _calculate_components(self, df: pd.DataFrame) -> pd.DataFrame:
    # Basic components
    df['volatility'] = df['close'].pct_change().rolling(20).std()
    df['momentum'] = df['close'].pct_change(5)
    
    # Here it is, the key place - the volumetric profile
    df['volume_ma'] = df['tick_volume'].rolling(20).mean()
    df['volume_trend'] = df['tick_volume'] / df['volume_ma']
    
    # Trend strength as a derivative of three components
    df['trend_force'] = df['volatility'] * df['volume_trend'] * abs(df['momentum'])

看看这里发生了什么。取代简单地交易量求和,我们创建了类似“交易量加速”的东西。当成交量相对于其平均值急剧增加时,这是第一个警告信号。但当我们添加波动性和动量进行混合时,有趣的部分来临。

我尝试了很多周期的移动平均线。10, 15, 25... 10, 15, 25...最后,20 根柱线在灵敏度和信号稳定性之间提供了最佳平衡。 

但真正的“哇”效果发生在我添加交易时段比率时:

# Activity ratios of different sessions
df['session_coef'] = 1.0
hour = df.index.hour
        
df.loc[(hour >= 0) & (hour < 8), 'session_coef'] = 0.7    # Asian
df.loc[(hour >= 8) & (hour < 16), 'session_coef'] = 1.0   # European
df.loc[(hour >= 16) & (hour < 24), 'session_coef'] = 0.9  # American

图表真的栩栩如生。现在,每次交易量的激增都参考当前交易时段的背景。它就像潮水涨落。此处也是如此 — 每个时段都有自己的特点,自己的“吸引力”。

但最重要的是,这个方程开始展现我所说的“预兆”。在强劲走势之前几根柱线,成交量曲线开始形成特征性形态。就好像市场在跳涨之前“吸口气”。

然后出现了如何正确可视化所有这一切的问题......


三维空间中的价格动态

我花了很长时间才找到正确的途径来可视化所有这些疯狂。以 MatPlotLib 构建 3D 图表的第一次尝试看起来更像是一棵圣诞树,而不是对交易有用的东西。Plotly 也没有立即降伏 — 图表要么太忙,要么缺少重要细节。

然后机会来援助我了。我和女儿一起摆弄一个建筑套装,建造一座类似桥的东西,突然我意识到我们不需要所有这些花哨的 3D 图形。我们仅需正确地排布投影!这是我得到的:

def create_visualization(self, df: pd.DataFrame = None):
    if df is None:
        df = self.analyze_market()
    
    df = df.reset_index()
            
    # Three projections of our "bridge"
    fig = make_subplots(rows=3, cols=1, 
                       shared_xaxes=True,
                       subplot_titles=('Price', 'Trend Force', 'Trend Direction'),
                       row_heights=[0.5, 0.25, 0.25],
                       vertical_spacing=0.05)

    # Main chart - classic candles
    fig.add_trace(
        go.Candlestick(
            x=df['time'],
            open=df['open'],
            high=df['high'],
            low=df['low'],
            close=df['close'],
            name='OHLC'
        ),
        row=1, col=1
    )

看看会发生什么 — 同一空间我们做了三个投影。顶上的那个显示的是通常蜡烛,但这只是冰山一角。最有趣的部分从第二个窗口开始:

# The trend force is our main feature
    fig.add_trace(
        go.Scatter(
            x=df['time'],
            y=df['trend_force_adjusted'],
            mode='lines',
            line=dict(color='blue', width=2),
            name='Trend Force'
        ),
        row=2, col=1
    )

    # Reference levels
    fig.add_hline(y=3, line_dash="dash", line_color="yellow", row=2, col=1)
    fig.add_hline(y=6, line_dash="dash", line_color="green", row=2, col=1)

我凭经验发现了这些等级(3 和 6)。当趋势强度突破等级 6 时,几乎总是意味着强劲走势。等级 3 类似于湍流区域,其所在趋势增强或逆转均可。

但真正的魔幻发生在底部窗口中:

# Trend direction as a derivative of force
    fig.add_trace(
        go.Bar(
            x=df['time'],
            y=df['trend_direction'] * df['trend_force_adjusted'],
            name='Trend Direction',
            marker_color=np.where(df['trend_direction'] > 0, 'green', 'red')
        ),
        row=3, col=1
    )

于此,我们不仅看到了趋势的方向,还有其动态强度。当绿色柱线抵御很高的趋势推力值上升时,这就是一个强烈的买入信号。相较之,当强度高于 6 时,红色柱线上升则是一个肯定的卖出信号。

但我们回到地面。可视化之后,出现了时间往复的问题......


时间分量和交易时段

关于经典技术分析,有一件事始终令我感到惊讶。这就是每个人都很容易忘记时间。交易者查看图表、计算指标,但忽略了一个简单的事实:市场生存在不同的时区。

当我注意到一个奇怪的形态时,第一个警告铃声响起 — 我的信号在欧洲时段工作得更好。起初,我把它当作巧合。但后来我开始深入挖掘,而这就是我的发现:

# See how easy it is to take into account the impact of sessions
hour = df.index.hour

# Asian session is the calmest
asian_mask = (hour >= 0) & (hour < 8)
df.loc[asian_mask, 'session_coef'] = 0.7    

# Europe - peak activity
european_mask = (hour >= 8) & (hour < 16)
df.loc[european_mask, 'session_coef'] = 1.0  

# America - still active, but not as strong
american_mask = (hour >= 16) & (hour < 24)
df.loc[american_mask, 'session_coef'] = 0.9

我几乎是即时想出了这些比率,同时测试了不同的选项。我记得我整晚都坐在那里,用不同的数值进行回测。我就是无法将自己从显示器前移开 — 结果是如此令人兴奋。

但最有趣的事情始于我将这些比率叠加在体量曲线上。突然间,一切都水到渠成!原来,同样的交易量在不同的时段中具有完全不同的“权重”:

  • 在亚洲时段,即使是交易量的小幅激增也可能很明显。
  • 而欧洲区需要更显著的偏差
  • 在时段的交界处,发生了一些很有趣的事情......

但真正的突破出现在我添加另一个组件时 — “时段间转换”。我注意到,在新交易时段开始前 30-40 分钟,指标开始表现得......奇怪。就好像市场正在为新玩家的到来做准备。这就是......


趋势强弱积分指标

有时最重要的发现来自不幸的错误。就我而言,这一切都始于代码中的一个错误。我无意中乘以了错误的变量,图形显示出一些大范围异常。我的第一个冲动是重写所有内容,但有些事情令我仔细观察......

事实证明,我无意中创建了我后来所称的“积分指标”。我们来看看:

def _calculate_components(self, df: pd.DataFrame) -> pd.DataFrame:
    # Here it is, that very "error" - the multiplication of three components
    df['trend_force'] = df['volatility'] * df['volume_trend'] * abs(df['momentum'])
    
    # Normalize the result to a range of 3 to 9
    df['trend_force_norm'] = self.scaler.fit_transform(
        df['trend_force'].values.reshape(-1, 1)
    ).flatten()
    
    # Final adjustments considering sessions 
    df['trend_force_adjusted'] = df['trend_force_norm'] * df['session_coef']

您知道此处是怎么回事吗?波动率乘以成交量趋势和动量的绝对值。理论上,这应该会导致彻底的混乱。但在实践中...... 在实践中,事实证明,这是一个令人惊讶的清晰趋势强度指标!

我记得当我开始在历史数据上测试这个方程时,我是如此惊讶。该图表展现出清晰的峰值,正是强劲走势开始的所在。不是事后,而是走势开始前的若干根柱线!

最有趣的事情始于我通过 MinMaxScaler 添加归一化。我几乎随机选择了从 3 到 9 的范围 — 这样看起来图表会更容易阅读。突然我发现这些数字为制定决策创造了几乎完美的级别:

  • 低于 3 — 市场正在“沉睡”
  • 从 3 到 6 — 走势开始
  • 高于 6 — 趋势已获得全面强度

当我把时段比率放上时...... 这是我真正感到惊讶之处!这些信号变得如此清晰,以至于即使是我永远持怀疑态度的交易员邻居在查看回测时也吹了口哨。

但主要发现尚未到来。事实证明,该指标不仅可以衡量趋势的强度,还可以预测逆转......


判定未来走势的方向

在发现积分指标后,我真的沉迷于寻找逆转形态。我花了几周坐在显示器前,前后移动图表。我的妻子已经开始担心了。有时,当我发现一些有趣的东西时,我甚至会废寝忘食。

然后有一天晚上(为什么所有重要的发现都发生在晚上?)我注意到一个奇怪的形态。在强劲趋势逆转之前,强弱指标开始......不,不像人们想象的那样回落。它开始以一种特殊的方式振荡:

# Determining the trend direction
df['trend_direction'] = np.sign(df['momentum'])

# This is where the magic begins
df['direction_strength'] = df['trend_direction'] * df['trend_force_adjusted']

# Looking for reversal patterns
df['reversal_pattern'] = np.where(
    (df['trend_force_adjusted'] > 6) &  # Strong trend
    (df['direction_strength'].diff().rolling(3).std() > 1.5),  # Directional instability
    1, 0
)

看看发生什么:当趋势强度超过等级 6(还记得我们的归一化吗?),但方向变得不稳定时,这几乎总是预示着逆转!

我花了两周时间在不同的时间帧和金融产品上重新测试了这一观察结果。它在任何地方都起作用,但在 H1 和 H4 上尤其清楚。在这些时间帧上,市场似乎更理智地“思考”。

但当我在顶端叠加一条体量曲线时,真正的洞察力就出现了:

df['volume_confirmation'] = np.where(
    (df['reversal_pattern'] == 1) &
    (df['volume_trend'] > df['volume_trend'].rolling(20).mean() * 1.5),
    'Strong',
    'Weak'
)

然后一切都水到渠成!事实证明,并非所有的转弯都相同。当该形态与高于平均水平的超量成交重合时,这几乎能保证逆转。如果成交量不支持它,我们很可能会得到盘整。

我记得把这些结果展示给我以前的统计学老师。他花了很久查看方程式,然后抬头看着我问:“你检查过 2020 年之前的数据吗?”,我点点头。“后面的呢?”,我再次点头。“嗯...... 你知道,这有些门道。这违背了随机漫游,但是...这确实像是事实!”

当然,也有一些误报。但我已为此准备好了一个分拣系统......


在图表上可视化信号

当指标的所有组成部分都准备就绪时,问题出现了:如何向交易者展示这一点?不是每个人都能理解方程和表格。我在这个问题上遇到了很多麻烦,直到我想出了三级可视化的思路。

纯 MatPlotLib 的第一次尝试没有成功。寻找信号非常烦人。在选定 Plotly 之前,我尝试了大约十几种函数库。这就是我最终得到的:

def create_visualization(self, df: pd.DataFrame = None):
    if df is None:
        df = self.analyze_market()
    
    fig = make_subplots(rows=3, cols=1, 
                       shared_xaxes=True,
                       subplot_titles=('Price', 'Trend Force', 'Trend Direction'),
                       row_heights=[0.5, 0.25, 0.25],
                       vertical_spacing=0.05)

    # Main chart - candles with signal highlighting
    fig.add_trace(
        go.Candlestick(
            x=df['time'],
            open=df['open'],
            high=df['high'],
            low=df['low'],
            close=df['close'],
            name='OHLC',
            hoverlabel=dict(
                bgcolor='white',
                font=dict(size=12)
            )
        ),
        row=1, col=1
    )

但主要特点是交互性。将光标悬停在蜡烛上之后,您可立即看到所有参数:趋势推力、交易量、和方向。还有配色方案...... 我花了一周的时间选择赏心悦目的色调:

fig.add_trace(
        go.Scatter(
            x=df['time'],
            y=df['trend_force_adjusted'],
            mode='lines',
            line=dict(color='blue', width=2),
            name='Trend Force',
            hovertemplate="<br>".join([
                "Time: %{x}",
                "Force: %{y:.2f}",
                "<extra></extra>"
            ])
        ),
        row=2, col=1
    )

可视化趋势方向是一个单独的故事。我把它做成柱线形的,高度表示强度,颜色表示方向:

fig.add_trace(
        go.Bar(
            x=df['time'],
            y=df['trend_direction'] * df['trend_force_adjusted'],
            name='Trend Direction',
            marker_color=np.where(df['trend_direction'] > 0, 'green', 'red'),
        ),
        row=3, col=1
    )

我记得当我向交易员朋友展示最终版本时的反应。他默默地点击图表大约五分钟,然后说:“听好了,现在即使是新手也能弄清楚市场走向何方!”

但最好的部分是当真实用户的评论开始出现时。一些人写道,他们终于不再被这些信号所迷惑了。有些人感谢我,无需坐在显示器前数小时也能交易......


我们尝试在 MetaTrader 5 中实现趋势强度指标

在 Python 版本的指标取得成功之后,出现了一个合乎逻辑的问题 — 如何将其移植到 MetaTrader 5?

任务证明......有趣。当然,MQL5 是一门功能强大的语言,但如果没有 pandas 和 numpy,我不得不做很多无用功。这是我得到的:

//+------------------------------------------------------------------+
//|                                          TrendForceIndicator.mq5 |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3

// Rendering buffers
double TrendForceBuffer[];
double DirectionBuffer[];
double SignalBuffer[];

// Inputs
input int    InpMAPeriod = 20;     // Smoothing period
input int    InpMomentumPeriod = 5; // Momentum period
input double InpSignalLevel = 6.0;  // Signal level

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
    // Setting the indicator
    SetIndexBuffer(0, TrendForceBuffer, INDICATOR_DATA);
    SetIndexBuffer(1, DirectionBuffer, INDICATOR_DATA);
    SetIndexBuffer(2, SignalBuffer, INDICATOR_DATA);
    
    // Rendering styles
    PlotIndexSetString(0, PLOT_LABEL, "Trend Force");
    PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
    PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrBlue);
    
    PlotIndexSetString(1, PLOT_LABEL, "Direction");
    PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_HISTOGRAM);
    
    PlotIndexSetString(2, PLOT_LABEL, "Signal");
    PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE);
    PlotIndexSetInteger(2, PLOT_LINE_COLOR, clrRed);
    
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
    // Check for data sufficiency
    if(rates_total < InpMAPeriod) return(0);
    
    // Calculation of components
    int start = (prev_calculated > 0) ? prev_calculated - 1 : 0;
    
    for(int i = start; i < rates_total; i++)
    {
        // Volatility
        double volatility = 0.0;
        if(i >= InpMAPeriod)
        {
            double sum = 0.0;
            for(int j = 0; j < InpMAPeriod; j++)
            {
                double change = (close[i-j] - close[i-j-1]) / close[i-j-1];
                sum += change * change;
            }
            volatility = MathSqrt(sum / InpMAPeriod);
        }
        
        // Momentum
        double momentum = 0.0;
        if(i >= InpMomentumPeriod)
        {
            momentum = (close[i] - close[i-InpMomentumPeriod]) / close[i-InpMomentumPeriod];
        }
        
        // Volume trend
        double volume_ma = 0.0;
        if(i >= InpMAPeriod)
        {
            for(int j = 0; j < InpMAPeriod; j++)
            {
                volume_ma += tick_volume[i-j];
            }
            volume_ma /= InpMAPeriod;
        }
        
        double volume_trend = volume_ma != 0 ? (double)tick_volume[i] / volume_ma : 0;
        
        // Session ratio
        MqlDateTime dt;
        TimeToStruct(time[i], dt);
        double session_coef = GetSessionCoefficient(dt.hour);
        
        // Trend strength calculation
        TrendForceBuffer[i] = NormalizeTrendForce(volatility * MathAbs(momentum) * volume_trend) * session_coef;
        DirectionBuffer[i] = momentum > 0 ? TrendForceBuffer[i] : -TrendForceBuffer[i];
        
        // Signal line
        SignalBuffer[i] = InpSignalLevel;
    }
    
    return(rates_total);
}

//+------------------------------------------------------------------+
//| Get session ratio                                                |
//+------------------------------------------------------------------+
double GetSessionCoefficient(int hour)
{
    if(hour >= 0 && hour < 8)   return 0.7;  // Asian session
    if(hour >= 8 && hour < 16)  return 1.0;  // European session
    if(hour >= 16 && hour < 24) return 0.9;  // American session
    return 1.0;
}

//+------------------------------------------------------------------+
//| Normalization of the trend strength indicator                    |
//+------------------------------------------------------------------+
double NormalizeTrendForce(double force)
{
    // Simple normalization to range [3, 9]
    double max_force = 0.01;  // Selected empirically
    return 3.0 + 6.0 * (MathMin(force, max_force) / max_force);
}

最困难的部分是再现 pandas 的滚动窗口行为。在 MQL5 中,一切都必须在循环里计算,但性能更高 — 该指标的工作显见快于 Python 版本。


结束语

在这长篇研究结束时,我想分享若干重要的观察结果。将算法从 Python 移植到 MQL5,为优化开辟了意想不到的机会。最初看似是一个缺点(缺乏熟悉的函数库)变成了一个优势 — 代码变得更快捷、更高效。

最困难的事情是在信号的准确性、和指标的速度之间找到平衡。每个附加参数、每次新检查都是系统的额外负担。最终,我设法达成了最优比率:指标几乎实时处理即刻报价数据,同时保持信号的高精度。

实际交易者的反应也值得一提。当我开始这个项目时,主要目标是为自己创造一些新的、和有趣的东西。但是,随着其他交易者开始使用该指标,很明显我们真的触及到一些重要的事情。收到经验丰富的交易者的反馈尤其令人高兴,他们说该指标可以帮助他们以新的方式看待市场。

当然,这并不是圣杯。与任何其它技术分析工具一样,我们的指标需要理解和正确应用。但它的主要优点是它令我们能够看到市场动态的那些层面,而这些通常在经典分析中仍不可见。

前方仍有很多工作。我想添加自适应参数设置,改进信号分拣系统,甚至或能集成机器学习元素。但现在,看看结果,我明白这条路是值得的。

最重要的是,我开始相信,即使在技术分析这样看似经过深入研究的工具中,也总会有创新的空间。我们只需无惧从新的角度看待熟悉的事物,并为意想不到的发现做好准备。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/16719

附加的文件 |
最近评论 | 前往讨论 (25)
Bogard_11
Bogard_11 | 11 1月 2025 在 17:10
Vitaly Muzichenko #:

但这对你和所有其他交易大师都有很大帮助。

在这里,我们进场,在这里出场,每笔交易赚取 100500pp,在过去的整个期间都是如此。

你知道所有编码员的问题是什么吗?他们忘记了如何寻找模式。

他们都遵循同样的模式--现在我们将一个想法输入代码,机器就会找到圣杯!如此循环 100500 次。))

但是,在计算器.... 上进行手工计算和检查。不,这不是一件光荣的事,而是要挑一个洞....。))

这就是为什么你不明白市场遵循的是通常的物理定律--入射角等于反射角。图形系统早在 100 年前就被描述过。它的工作方式就是这样。但要理解它,你需要花相当多的时间去研究历史,找到所有的数学联系。尤其是要重新整理你的思维。

即使是第一脉冲,也蕴含着未来反转水平的信息。英镑的误差通常不会超过 2-5 点。

Vitaly Muzichenko
Vitaly Muzichenko | 11 1月 2025 在 17:23
Bogard_11 #:

你知道所有编码员的问题是什么吗?他们忘记了如何寻找模式。

他们都遵循同样的模式--现在我们在代码中加入一些想法,机器就会找到圣杯!如此循环 100500 次。))

但是,用手拿和检查,在计算器上计算....不,这不是一件光荣的事,而是要挑一个洞....。))

这就是为什么你不明白市场遵循的是通常的物理定律--入射角等于反射角。图形系统早在 100 年前就被描述过。它的工作方式就是这样。但要理解它,你需要花相当多的时间去研究历史,找到所有的数学联系。尤其是要重新整理你的思维。

即使是第一脉冲,也蕴含着未来反转水平的信息。英镑的误差通常不会超过 2-5 点。

来自不同用户的几百个不同系统都要经过编码,您要对它们进行测试,看看所有的缺点和优点。

这不是人工挑选和遗漏一些模式。机器永远不会遗漏任何东西,这就是它的优势。

随着技术的进步,100 年前行之有效的方法也不再奏效。

你能想象,在通过电话或电报与经纪人进行交易之前,点数是如何工作的吗?

Bogard_11
Bogard_11 | 11 1月 2025 在 18:20
Vitaly Muzichenko #:

随着技术的进步,100 年前行之有效的方法也不再奏效。

你能详细解释一下为什么不再奏效吗?某个经纪人或做市商取消了物理和数学定律?

天哪,我怎么会错过这样的独家新闻。我能知道这件事是什么时候发生的吗?

Bogard_11
Bogard_11 | 11 1月 2025 在 18:29
Vitaly Muzichenko #:

来自不同用户的几百个不同系统都要经过编码,你要对它们进行测试,看到所有的缺陷和优点。

这不是手工挑选,也不会遗漏某些模式。机器永远不会遗漏任何东西,这就是它的优势。

要想正确编码,首先必须手工找到所有 模式。机器可能不会出错,但它只会寻找你输入的东西,也就是你在没有机器的情况下自己找到的东西!有时,我对狂热地相信人工智能的能力感到惊讶!!!!)))

你编码搜索文本中的字母ABC。但是!字母表中还有其他字母,而你却不知道....。机器会给你什么?

市场上也是一样,有一般规则,有垫子型号,但每天都有不同的比例(尽管都符合一个一般型号)。即使是在价格上,也会出现反弹,与计算值相差+-3 个点,但会完全按照时间来计算。或者完全按照价格计算,但会有几格的误差。

imcapec
imcapec | 27 1月 2025 在 12:09
Bogard_11 #:

为了正确地编码,你必须先用手找到所有 图案。机器可能不会错,但它只会寻找你输入的东西,也就是你在没有机器的情况下自己找到的东西!有时,我对狂热地相信 AI!!!! 的能力感到惊讶!)))

你编码搜索文本中的字母ABC。但是!字母表中还有其他字母,而你却不知道....。机器会给你什么?

市场上也是一样,有一般规则,有垫子型号,但每天都有不同的比例(尽管都符合一个一般型号)。即使是在价格上,也会出现反弹,与计算值相差+-3 个点,但会完全按照时间来计算。或者完全按照价格计算,但会有几格的误差。

数字序列不会改变,但其中的逗号会改变。

集成学习模型中的门控机制 集成学习模型中的门控机制
在本文中,我们继续探讨集成模型,重点讨论“门控”的概念,尤其是门控如何通过整合模型输出来提升预测准确性或模型泛化能力。
逆公允价值缺口(IFVG)交易策略 逆公允价值缺口(IFVG)交易策略
当价格回到先前确定的公允价值缺口位置,且未表现出预期的支撑或阻力反应,而是无视该缺口时,便出现了逆公允价值缺口(IFVG)。这种“无视”现象可能预示着市场方向的潜在转变,并为反向交易提供优势。在本文中,我将介绍自己开发的量化方法,以及如何将IFVG作为一种策略,应用于MetaTrader 5智能交易系统(EA)中。
开发回放系统(第 77 部分):新 Chart Trade(四) 开发回放系统(第 77 部分):新 Chart Trade(四)
在本文中,我们将介绍创建通信协议时需要考虑的一些措施和预防措施。这些都是非常简单明了的事情,所以我们在本文中不会详细介绍。但要了解会发生什么,您需要了解文章的内容。
从基础到中级:定义(二) 从基础到中级:定义(二)
在本文中,我们将继续了解 #define 指令,但这次我们将重点关注它的第二种使用形式,即创建宏。由于这个主题可能有点复杂,我们决定使用我们已经研究了一段时间的应用程序。希望您喜欢今天的文章。