<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gueta Quant </title>
    <description>The latest articles on DEV Community by Gueta Quant  (@guetaquant).</description>
    <link>https://dev.to/guetaquant</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4084951%2F5f236106-8f97-48b1-9a2b-d4f210066eb6.jpg</url>
      <title>DEV Community: Gueta Quant </title>
      <link>https://dev.to/guetaquant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guetaquant"/>
    <language>en</language>
    <item>
      <title>Algorithmic Risk Management in MT5: ATR Volatility Position Sizing &amp; MQL5 Architecture</title>
      <dc:creator>Gueta Quant </dc:creator>
      <pubDate>Wed, 19 Aug 2026 12:30:02 +0000</pubDate>
      <link>https://dev.to/guetaquant/algorithmic-risk-management-in-mt5-atr-volatility-position-sizing-mql5-architecture-55nn</link>
      <guid>https://dev.to/guetaquant/algorithmic-risk-management-in-mt5-atr-volatility-position-sizing-mql5-architecture-55nn</guid>
      <description>&lt;h1&gt;
  
  
  Algorithmic Risk Management in MT5: Dynamic Position Sizing &amp;amp; MQL5 Architecture
&lt;/h1&gt;

&lt;p&gt;Most retail trading failures stem from static lot sizing. Trading a fixed 1.0 lot on EUR/USD creates vastly different dollar drawdowns compared to 1.0 lot on Gold (XAU/USD) or NASDAQ (NAS100) due to differing point values and underlying volatility regimes.&lt;/p&gt;

&lt;p&gt;In professional quantitative finance, position sizing is dynamically governed by the asset's Average True Range (ATR) and a fixed risk budget per trade:&lt;/p&gt;

&lt;p&gt;$$\text{Position Size (Lots)} = \frac{\text{Account Balance} \times \text{Risk \%}}{\text{Stop Loss Distance (Points)} \times \text{Tick Value}}$$&lt;/p&gt;

&lt;p&gt;In this technical guide, we implement an open-source, production-grade MQL5 risk engine that dynamically computes lot sizes and routes orders with slippage protection.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Original interactive tool and web calculator available at &lt;a href="https://guetaquant.com/herramientas/mt5-position-sizer/" rel="noopener noreferrer"&gt;GuetaQuant MT5 Position Sizer&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. MQL5 Dynamic Lot Calculation Class
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//+------------------------------------------------------------------+
//|                                             GQ_RiskEngine.mqh    |
//|                             Copyright 2026, Gueta Quant (AGPLv3) |
//|                                       https://guetaquant.com     |
//+------------------------------------------------------------------+
#property copyright "Gueta Quant"
#property link      "https://guetaquant.com"

class CGQRiskManager
{
private:
   string   m_symbol;
   double   m_risk_pct;

public:
   CGQRiskManager(string symbol, double risk_pct) : m_symbol(symbol), m_risk_pct(risk_pct) {}

   double CalculateLots(double sl_distance_price)
   {
      if (sl_distance_price &amp;lt;= 0) return 0.0;

      double balance     = AccountInfoDouble(ACCOUNT_BALANCE);
      double risk_amount = balance * (m_risk_pct / 100.0);

      double tick_size   = SymbolInfoDouble(m_symbol, SYMBOL_TRADE_TICK_SIZE);
      double tick_value  = SymbolInfoDouble(m_symbol, SYMBOL_TRADE_TICK_VALUE);
      double min_lot     = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_MIN);
      double max_lot     = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_MAX);
      double lot_step    = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_STEP);

      if (tick_size == 0 || tick_value == 0) return 0.0;

      double loss_per_lot = (sl_distance_price / tick_size) * tick_value;
      if (loss_per_lot &amp;lt;= 0) return 0.0;

      double raw_lots = risk_amount / loss_per_lot;

      // Normalize to broker lot step
      double normalized_lots = MathFloor(raw_lots / lot_step) * lot_step;

      if (normalized_lots &amp;lt; min_lot) normalized_lots = min_lot;
      if (normalized_lots &amp;gt; max_lot) normalized_lots = max_lot;

      return normalized_lots;
   }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. ATR Volatility Trailing Stops
&lt;/h2&gt;

&lt;p&gt;Using historical volatility avoids getting stopped out during normal market noise while protecting capital during structural trend shifts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;double GetATRDistance(string symbol, ENUM_TIMEFRAMES tf, int period, double multiplier)
{
   int handle = iATR(symbol, tf, period);
   if (handle == INVALID_HANDLE) return 0.0;

   double atr_val[1];
   if (CopyBuffer(handle, 0, 0, 1, atr_val) &amp;lt;= 0) return 0.0;

   return atr_val[0] * multiplier;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Open Source Tools Ecosystem
&lt;/h2&gt;

&lt;p&gt;All our quantitative software is published under open-source AGPLv3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;44 Open Source Trading Tools:&lt;/strong&gt; &lt;a href="https://github.com/guetaquant-byte/guetaquant-tools" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CERN Zenodo DOI Registry:&lt;/strong&gt; &lt;a href="https://doi.org/10.5281/zenodo.22012203" rel="noopener noreferrer"&gt;DOI 10.5281/zenodo.22012203&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-First Trading Journal:&lt;/strong&gt; &lt;a href="https://guetaquant.com/journal/" rel="noopener noreferrer"&gt;GuetaQuant Journal&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Compliance: Strictly educational and research material. Does not constitute financial advice. Compliant with Colombian SFC Decreto 2555/2010.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mql5</category>
      <category>metatrader5</category>
      <category>quant</category>
    </item>
    <item>
      <title>Pine Script v6 in 2026: math.sum, math.tanh, User Defined Types &amp; Risk Management Engine</title>
      <dc:creator>Gueta Quant </dc:creator>
      <pubDate>Wed, 19 Aug 2026 11:52:14 +0000</pubDate>
      <link>https://dev.to/guetaquant/pine-script-v6-in-2026-mathsum-mathtanh-user-defined-types-risk-management-engine-53b4</link>
      <guid>https://dev.to/guetaquant/pine-script-v6-in-2026-mathsum-mathtanh-user-defined-types-risk-management-engine-53b4</guid>
      <description>&lt;h2&gt;
  
  
  Overview: Pine Script v6 &amp;amp; Institutional Risk Architecture
&lt;/h2&gt;

&lt;p&gt;TradingView's &lt;strong&gt;Pine Script v6&lt;/strong&gt; introduced critical architectural upgrades for quantitative developers. Moving beyond basic visual scripts, v6 provides strict type enforcement, built-in tensor-like math functions (&lt;code&gt;math.sum()&lt;/code&gt;, &lt;code&gt;math.tanh()&lt;/code&gt;), User-Defined Types (UDTs), and native webhook JSON formatting for institutional order routing.&lt;/p&gt;

&lt;p&gt;In this guide, we break down the most essential v6 syntax upgrades and build a full production-ready risk engine with volatility-adjusted sizing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Original in-depth research published at &lt;a href="https://guetaquant.com/pine-script-v6/" rel="noopener noreferrer"&gt;GuetaQuant&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Key Mathematical Upgrades in Pine Script v6
&lt;/h2&gt;

&lt;p&gt;In previous versions (v5), performing mathematical reductions across arrays or custom series required cumbersome loops. Pine Script v6 optimizes computational performance by executing core vector operations natively in C++:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;math.sum()&lt;/code&gt; &amp;amp; &lt;code&gt;math.tanh()&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//@version=6
indicator("Pine Script v6 Math &amp;amp; Non-Linear Activation", overlay=false)

// Native vector sum across an array of returns
var float[] log_returns = array.new_float(0)
float current_return = math.log(close / close[1])
array.push(log_returns, current_return)
if array.size(log_returns) &amp;gt; 50
    array.shift(log_returns)

// Hyperbolic tangent non-linear activation (useful for signal bounding [-1.0, 1.0])
float normalized_zscore = (close - ta.sma(close, 20)) / ta.stdev(close, 20)
float bounded_signal = math.tanh(normalized_zscore)

plot(bounded_signal, "Tanh Signal", color=color.emerald)
hline(0.8, "Upper Bound", color=color.gray)
hline(-0.8, "Lower Bound", color=color.gray)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Object-Oriented Architecture with User-Defined Types (UDTs)
&lt;/h2&gt;

&lt;p&gt;Pine Script v6 fully embraces struct-like User-Defined Types. This allows you to encapsulate complete trade contexts (entry, stop loss, risk budget, target) into a single object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//@version=6
indicator("GQ Trade Context Engine", overlay=true)

type TradeRiskContext
    string symbol
    float entryPrice
    float stopLossPrice
    float lotSize
    float riskAmountUSD

// Factory method to calculate ATR-based risk
fn_create_context(float risk_pct, int atr_len, float atr_mult) =&amp;gt;
    float atr_val = ta.atr(atr_len)
    float sl_distance = atr_val * atr_mult
    float sl_price = close - sl_distance
    float risk_dollars = (strategy.equity * risk_pct) / 100.0
    float calculated_lots = risk_dollars / (sl_distance * 10.0) // 10 USD per pip standard

    TradeRiskContext.new(syminfo.ticker, close, sl_price, calculated_lots, risk_dollars)

var TradeRiskContext active_trade = na
if ta.crossover(ta.ema(close, 9), ta.ema(close, 21))
    active_trade := fn_create_context(1.0, 14, 2.5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Webhook JSON Alert Formatting for Automated Execution
&lt;/h2&gt;

&lt;p&gt;Routing alerts to MetaTrader 5 (MT5), cTrader, or custom Python execution servers requires strictly formatted JSON payloads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//@version=6
strategy("GQ Webhook Strategy - Pine v6", overlay=true, initial_capital=10000)

fn_build_order_json(string action, float size, float sl_price) =&amp;gt;
    '{"action":"' + action + '","symbol":"' + syminfo.ticker + '","lots":' + str.tostring(size) + ',"sl":' + str.tostring(sl_price) + '}'

if ta.crossover(ta.sma(close, 20), ta.sma(close, 50))
    string payload = fn_build_order_json("BUY", 0.50, close - 2.5 * ta.atr(14))
    strategy.entry("Long", strategy.long, alert_message=payload)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Explore More Open-Source Tools
&lt;/h2&gt;

&lt;p&gt;All our MQL5 EAs, cTrader cBots, and Pine Script v6 indicators are open-source under AGPLv3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;44 Open Source Quantitative Tools:&lt;/strong&gt; &lt;a href="https://github.com/guetaquant-byte/guetaquant-tools" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive MT5 Lot Size Calculator:&lt;/strong&gt; &lt;a href="https://guetaquant.com/herramientas/mt5-position-sizer/" rel="noopener noreferrer"&gt;GuetaQuant MT5 Position Sizer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-First Quantitative Trading Journal:&lt;/strong&gt; &lt;a href="https://guetaquant.com/journal/" rel="noopener noreferrer"&gt;GuetaQuant Journal&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Disclaimer: Educational research only. Does not constitute investment advice. Compliance with SFC Colombia Decreto 2555/2010.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tradingview</category>
      <category>algorithmictrading</category>
      <category>pinescript</category>
      <category>quant</category>
    </item>
    <item>
      <title>Pine Script v6 in 2026: math.sum, math.tanh, User Defined Types &amp; Risk Management Engine</title>
      <dc:creator>Gueta Quant </dc:creator>
      <pubDate>Wed, 19 Aug 2026 11:44:24 +0000</pubDate>
      <link>https://dev.to/guetaquant/pine-script-v6-in-2026-mathsum-mathtanh-user-defined-types-risk-management-engine-2426</link>
      <guid>https://dev.to/guetaquant/pine-script-v6-in-2026-mathsum-mathtanh-user-defined-types-risk-management-engine-2426</guid>
      <description>&lt;p&gt;Liquid syntax error: Unknown tag 'endraw'&lt;/p&gt;
</description>
      <category>tradingview</category>
      <category>algorithmictrading</category>
      <category>pinescript</category>
      <category>quant</category>
    </item>
  </channel>
</rss>
