BTC 5 Minutes scalping

MQL5 Experts

Spécifications

import { useState, useEffect, useRef } from "react";

const INIT_LOT = 0.01;
const TP_MOVE = 200;
const SL_MOVE = 120;
const START_BALANCE = 1000;
const MAX_LOT = 5.12;
const TICK_MS = 1200;

function ema(arr, n) {
  if (arr.length < n) return null;
  const k = 2 / (n + 1);
  let e = arr.slice(0, n).reduce((s, v) => s + v, 0) / n;
  for (let i = n; i < arr.length; i++) e = arr[i] * k + e * (1 - k);
  return e;
}

function rsi(arr, n = 14) {
  if (arr.length <= n) return 50;
  const s = arr.slice(-(n + 1));
  let g = 0, l = 0;
  for (let i = 1; i < s.length; i++) {
    const d = s[i] - s[i - 1];
    d > 0 ? (g += d) : (l -= d);
  }
  const ag = g / n, al = l / n;
  return al === 0 ? 100 : 100 - 100 / (1 + ag / al);
}

function makeCandle(prev, trend = 0) {
  const vol = prev.close * 0.004;
  const drift = trend * 0.0012 * prev.close;
  const close = prev.close + (Math.random() - 0.5) * vol + drift;
  const wick = vol * 0.25;
  return {
    open: prev.close,
    close: Math.max(close, 1000),
    high: Math.max(prev.close, close) + Math.random() * wick,
    low: Math.min(prev.close, close) - Math.random() * wick,
  };
}

function buildInitCandles() {
  const cs = [{ open: 93800, close: 94000, high: 94300, low: 93600 }];
  for (let i = 1; i < 60; i++) cs.push(makeCandle(cs[cs.length - 1], (Math.random() - 0.5) * 1.5));
  return cs;
}

function CandleChart({ candles, e9, e21, position }) {
  const W = 600, H = 200;
  const PL = 52, PR = 8, PT = 8, PB = 24;
  const CW = W - PL - PR, CH = H - PT - PB;
  const last = candles.slice(-40);
  if (last.length < 2) return null;
  const allP = last.flatMap(c => [c.high, c.low]);
  const minP = Math.min(...allP), maxP = Math.max(...allP);
  const range = maxP - minP || 1;
  const toX = (i) => PL + (i + 0.5) * (CW / last.length);
  const toY = (p) => PT + (1 - (p - minP) / range) * CH;
  const cw = (CW / last.length) * 0.55;

  const e9Points = last.map((c, i) => {
    const sl = candles.slice(0, candles.length - last.length + i + 1);
    const v = ema(sl.map(x => x.close), 9);
    return v ? `${toX(i)},${toY(v)}` : null;
  }).filter(Boolean).join(" ");

  const e21Points = last.map((c, i) => {
    const sl = candles.slice(0, candles.length - last.length + i + 1);
    const v = ema(sl.map(x => x.close), 21);
    return v ? `${toX(i)},${toY(v)}` : null;
  }).filter(Boolean).join(" ");

  const priceSteps = 4;
  return (
    <svg viewBox={`0 0 ${W} ${H}`} style={{ width: "100%", height: "100%" }}>
      {Array.from({ length: priceSteps + 1 }, (_, i) => {
        const t = i / priceSteps;
        const y = PT + t * CH;
        const p = maxP - t * range;
        return (
          <g key={i}>
            <line x1={PL} y1={y} x2={W - PR} y2={y} stroke="var(--color-border-tertiary)" strokeDasharray="3 3" />
            <text x={PL - 3} y={y + 3} textAnchor="end" fontSize="9" fill="var(--color-text-tertiary)">{p.toFixed(0)}</text>
          </g>
        );
      })}
      {position && (
        <line x1={PL} y1={toY(position.entry)} x2={W - PR} y2={toY(position.entry)}
          stroke={position.type === "BUY" ? "#22c55e" : "#ef4444"} strokeDasharray="4 2" strokeWidth="1.5" />
      )}
      {last.map((c, i) => {
        const bull = c.close >= c.open;
        const col = bull ? "#22c55e" : "#ef4444";
        const x = toX(i);
        const bTop = toY(Math.max(c.open, c.close));
        const bBot = toY(Math.min(c.open, c.close));
        return (
          <g key={i}>
            <line x1={x} y1={toY(c.high)} x2={x} y2={toY(c.low)} stroke={col} strokeWidth="1" />
            <rect x={x - cw / 2} y={bTop} width={cw} height={Math.max(bBot - bTop, 1)} fill={col} />
          </g>
        );
      })}
      {e9Points && <polyline points={e9Points} fill="none" stroke="#f59e0b" strokeWidth="1.5" />}
      {e21Points && <polyline points={e21Points} fill="none" stroke="#6366f1" strokeWidth="1.5" />}
      <text x={PL + 4} y={PT + 12} fontSize="9" fill="#f59e0b">EMA9</text>
      <text x={PL + 40} y={PT + 12} fontSize="9" fill="#6366f1">EMA21</text>
    </svg>
  );
}

function RSIGauge({ value }) {
  const pct = Math.min(Math.max(value, 0), 100) / 100;
  const color = value > 70 ? "#ef4444" : value < 30 ? "#22c55e" : "#6366f1";
  return (
    <div>
      <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 4 }}>
        <span style={{ fontSize: 11, color: "var(--color-text-secondary)" }}>RSI(14)</span>
        <span style={{ fontSize: 12, fontWeight: 500, color }}>{value.toFixed(1)}</span>
      </div>
      <div style={{ background: "var(--color-border-tertiary)", borderRadius: 4, height: 6, position: "relative" }}>
        <div style={{ position: "absolute", left: "30%", right: "30%", top: 0, bottom: 0, background: "var(--color-background-secondary)", borderLeft: "1px solid var(--color-border-secondary)", borderRight: "1px solid var(--color-border-secondary)" }} />
        <div style={{ width: `${pct * 100}%`, background: color, height: "100%", borderRadius: 4 }} />
        <div style={{ position: "absolute", left: `${pct * 100}%`, top: -3, width: 2, height: 12, background: color, borderRadius: 1, transform: "translateX(-50%)" }} />
      </div>
      <div style={{ display: "flex", justifyContent: "space-between", marginTop: 2 }}>
        <span style={{ fontSize: 9, color: "var(--color-text-tertiary)" }}>0 OS</span>
        <span style={{ fontSize: 9, color: "var(--color-text-tertiary)" }}>OB 100</span>
      </div>
    </div>
  );
}

function Stat({ label, value, sub, color }) {
  return (
    <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: "10px 14px" }}>
      <div style={{ fontSize: 11, color: "var(--color-text-tertiary)", marginBottom: 2 }}>{label}</div>
      <div style={{ fontSize: 20, fontWeight: 500, color: color || "var(--color-text-primary)", fontFamily: "var(--font-mono)" }}>{value}</div>
      {sub && <div style={{ fontSize: 10, color: "var(--color-text-tertiary)", marginTop: 2 }}>{sub}</div>}
    </div>
  );
}

export default function App() {
  const bot = useRef({
    candles: buildInitCandles(),
    position: null,
    balance: START_BALANCE,
    lot: INIT_LOT,
    trades: [],
    wins: 0,
    losses: 0,
    trend: 0,
  });

  const [disp, setDisp] = useState({
    candles: bot.current.candles,
    position: null,
    balance: START_BALANCE,
    equity: START_BALANCE,
    lot: INIT_LOT,
    trades: [],
    wins: 0,
    losses: 0,
    rsiVal: 50,
    e9: null,
    e21: null,
    signal: null,
    currentPrice: 94000,
    streak: 0,
  });

  const [running, setRunning] = useState(false);
  const streakRef = useRef(0);

  useEffect(() => {
    if (!running) return;
    const id = setInterval(() => {
      const b = bot.current;
      b.trend += (Math.random() - 0.5) * 0.15;
      b.trend = Math.max(-2, Math.min(2, b.trend));

      const newC = makeCandle(b.candles[b.candles.length - 1], b.trend);
      b.candles = [...b.candles.slice(-100), newC];

      const closes = b.candles.map(c => c.close);
      const e9v = ema(closes, 9);
      const e21v = ema(closes, 21);
      const rsiV = rsi(closes, 14);
      const price = newC.close;

      let equity = b.balance;
      let signal = null;

      if (e9v && e21v) {
        signal = e9v > e21v && rsiV < 68 && rsiV > 30 ? "BUY"
          : e9v < e21v && rsiV > 32 && rsiV < 70 ? "SELL"
          : null;
      }

      if (b.position) {
        const move = price - b.position.entry;
        const pnl = b.position.type === "BUY" ? move * b.position.lot : -move * b.position.lot;
        equity = b.balance + pnl;

        const hit = pnl >= TP_MOVE * b.position.lot || pnl <= -(SL_MOVE * b.position.lot);

        if (hit) {
          const isWin = pnl > 0;
          b.balance += pnl;
          if (isWin) { b.wins++; b.lot = INIT_LOT; streakRef.current = Math.max(0, streakRef.current) + 1; }
          else { b.losses++; b.lot = Math.min(b.lot * 2, MAX_LOT); streakRef.current = Math.min(0, streakRef.current) - 1; }
          b.trades = [{
            id: b.trades.length + 1,
            type: b.position.type,
            entry: b.position.entry.toFixed(0),
            exit: price.toFixed(0),
            lot: b.position.lot.toFixed(2),
            pnl: pnl.toFixed(2),
            win: isWin,
          }, ...b.trades.slice(0, 24)];
          b.position = null;
          equity = b.balance;
        }
      }

      if (!b.position && signal) {
        b.position = { type: signal, entry: price, lot: b.lot, time: new Date().toLocaleTimeString() };
      }

      setDisp({
        candles: [...b.candles],
        position: b.position,
        balance: b.balance,
        equity,
        lot: b.lot,
        trades: [...b.trades],
        wins: b.wins,
        losses: b.losses,
        rsiVal: rsiV,
        e9: e9v,
        e21: e21v,
        signal,
        currentPrice: price,
        streak: streakRef.current,
      });
    }, TICK_MS);
    return () => clearInterval(id);
  }, [running]);

  const reset = () => {
    bot.current = { candles: buildInitCandles(), position: null, balance: START_BALANCE, lot: INIT_LOT, trades: [], wins: 0, losses: 0, trend: 0 };
    streakRef.current = 0;
    setRunning(false);
    setDisp({ candles: bot.current.candles, position: null, balance: START_BALANCE, equity: START_BALANCE, lot: INIT_LOT, trades: [], wins: 0, losses: 0, rsiVal: 50, e9: null, e21: null, signal: null, currentPrice: 94000, streak: 0 });
  };

  const { candles, position, balance, equity, lot, trades, wins, losses, rsiVal, e9, e21, signal, currentPrice, streak } = disp;
  const total = wins + losses;
  const winRate = total ? ((wins / total) * 100).toFixed(1) : "—";
  const unrealized = position
    ? ((position.type === "BUY" ? (currentPrice - position.entry) : (position.entry - currentPrice)) * position.lot)
    : 0;
  const pnlColor = unrealized > 0 ? "#22c55e" : unrealized < 0 ? "#ef4444" : "var(--color-text-secondary)";
  const balColor = balance >= START_BALANCE ? "#22c55e" : "#ef4444";

  const levelCount = lot > INIT_LOT ? Math.round(Math.log2(lot / INIT_LOT)) + 1 : 1;

  return (
    <div style={{ fontFamily: "var(--font-mono)", fontSize: 13, padding: "0 0 1rem" }}>
      <h2 className="sr-only">BTC/USD Martingale Trading Bot Simulator — 5-Minute Timeframe</h2>

      {/* Header */}
      <div style={{ display: "flex", alignItems: "center", gap: 12, marginBottom: 16, padding: "10px 0", borderBottom: "0.5px solid var(--color-border-tertiary)" }}>
        <div style={{ fontSize: 15, fontWeight: 500, color: "var(--color-text-primary)" }}>BTC/USD · 5M</div>
        <div style={{ fontSize: 20, fontWeight: 500, color: "var(--color-text-primary)" }}>${currentPrice.toFixed(2)}</div>
        <div style={{ marginLeft: "auto", display: "flex", gap: 8, alignItems: "center" }}>
          <span style={{ fontSize: 11, padding: "3px 8px", borderRadius: 4, background: running ? "#dcfce7" : "var(--color-background-secondary)", color: running ? "#166534" : "var(--color-text-secondary)", border: `0.5px solid ${running ? "#86efac" : "var(--color-border-secondary)"}` }}>
            {running ? "RUNNING" : "IDLE"}
          </span>
          {signal && <span style={{ fontSize: 11, padding: "3px 8px", borderRadius: 4, background: signal === "BUY" ? "#dcfce7" : "#fee2e2", color: signal === "BUY" ? "#166534" : "#991b1b" }}>{signal} SIGNAL</span>}
        </div>
      </div>

      {/* Stats */}
      <div style={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 10, marginBottom: 14 }}>
        <Stat label="Balance" value={`$${balance.toFixed(2)}`} sub={`Start: $${START_BALANCE}`} color={balColor} />
        <Stat label="Equity" value={`$${equity.toFixed(2)}`} sub={unrealized !== 0 ? `Unrealized: ${unrealized > 0 ? "+" : ""}$${unrealized.toFixed(2)}` : "No open trade"} color={unrealized !== 0 ? pnlColor : undefined} />
        <Stat label="Next Lot" value={lot.toFixed(2)} sub={`Martingale L${levelCount}`} color={levelCount > 3 ? "#ef4444" : levelCount > 1 ? "#f59e0b" : "#22c55e"} />
        <Stat label="Win Rate" value={`${winRate}%`} sub={`${wins}W / ${losses}L · ${total} trades`} />
      </div>

      {/* Chart + Side panel */}
      <div style={{ display: "grid", gridTemplateColumns: "1fr 220px", gap: 12, marginBottom: 14 }}>
        <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: 8, minHeight: 200 }}>
          <CandleChart candles={candles} e9={e9} e21={e21} position={position} />
        </div>
        <div style={{ display: "flex", flexDirection: "column", gap: 10 }}>
          <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: "12px 14px", flex: 1 }}>
            <div style={{ fontSize: 11, color: "var(--color-text-tertiary)", marginBottom: 8, fontWeight: 500 }}>OPEN POSITION</div>
            {position ? (
              <>
                <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 6 }}>
                  <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>Direction</span>
                  <span style={{ fontSize: 12, fontWeight: 500, color: position.type === "BUY" ? "#22c55e" : "#ef4444" }}>{position.type}</span>
                </div>
                <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 6 }}>
                  <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>Entry</span>
                  <span style={{ fontSize: 12 }}>${Number(position.entry).toFixed(2)}</span>
                </div>
                <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 6 }}>
                  <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>Lot</span>
                  <span style={{ fontSize: 12 }}>{position.lot.toFixed(2)}</span>
                </div>
                <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 6 }}>
                  <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>TP</span>
                  <span style={{ fontSize: 12, color: "#22c55e" }}>${(position.type === "BUY" ? position.entry + TP_MOVE : position.entry - TP_MOVE).toFixed(0)}</span>
                </div>
                <div style={{ display: "flex", justifyContent: "space-between", marginBottom: 10 }}>
                  <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>SL</span>
                  <span style={{ fontSize: 12, color: "#ef4444" }}>${(position.type === "BUY" ? position.entry - SL_MOVE : position.entry + SL_MOVE).toFixed(0)}</span>
                </div>
                <div style={{ borderTop: "0.5px solid var(--color-border-tertiary)", paddingTop: 8 }}>
                  <div style={{ display: "flex", justifyContent: "space-between" }}>
                    <span style={{ fontSize: 12, color: "var(--color-text-secondary)" }}>P&L</span>
                    <span style={{ fontSize: 14, fontWeight: 500, color: pnlColor }}>{unrealized >= 0 ? "+" : ""}${unrealized.toFixed(2)}</span>
                  </div>
                </div>
              </>
            ) : (
              <div style={{ color: "var(--color-text-tertiary)", fontSize: 12, textAlign: "center", marginTop: 20 }}>Waiting for signal…</div>
            )}
          </div>
          <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: "12px 14px" }}>
            <div style={{ fontSize: 11, color: "var(--color-text-tertiary)", marginBottom: 10, fontWeight: 500 }}>INDICATORS</div>
            <RSIGauge value={rsiVal} />
            <div style={{ marginTop: 10, display: "flex", flexDirection: "column", gap: 4 }}>
              <div style={{ display: "flex", justifyContent: "space-between" }}>
                <span style={{ fontSize: 11, color: "#f59e0b" }}>EMA9</span>
                <span style={{ fontSize: 11 }}>{e9 ? e9.toFixed(0) : "—"}</span>
              </div>
              <div style={{ display: "flex", justifyContent: "space-between" }}>
                <span style={{ fontSize: 11, color: "#6366f1" }}>EMA21</span>
                <span style={{ fontSize: 11 }}>{e21 ? e21.toFixed(0) : "—"}</span>
              </div>
              <div style={{ display: "flex", justifyContent: "space-between", marginTop: 4, paddingTop: 6, borderTop: "0.5px solid var(--color-border-tertiary)" }}>
                <span style={{ fontSize: 11, color: "var(--color-text-secondary)" }}>Trend</span>
                <span style={{ fontSize: 11, color: e9 && e21 && e9 > e21 ? "#22c55e" : "#ef4444" }}>{e9 && e21 ? (e9 > e21 ? "BULLISH" : "BEARISH") : "—"}</span>
              </div>
            </div>
          </div>
        </div>
      </div>

      {/* Martingale ladder */}
      <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: "12px 14px", marginBottom: 14 }}>
        <div style={{ fontSize: 11, color: "var(--color-text-tertiary)", marginBottom: 8, fontWeight: 500 }}>MARTINGALE LADDER (Exness micro lots)</div>
        <div style={{ display: "flex", gap: 6, flexWrap: "wrap" }}>
          {[0.01, 0.02, 0.04, 0.08, 0.16, 0.32, 0.64, 1.28, 2.56, 5.12].map((l, i) => {
            const isActive = Math.abs(l - lot) < 0.001;
            const isPast = l < lot - 0.001;
            return (
              <div key={i} style={{
                padding: "4px 10px", borderRadius: 4, fontSize: 11, fontWeight: isActive ? 500 : 400,
                background: isActive ? "#fef3c7" : isPast ? "#fee2e2" : "var(--color-background-primary)",
                color: isActive ? "#92400e" : isPast ? "#991b1b" : "var(--color-text-tertiary)",
                border: `0.5px solid ${isActive ? "#fcd34d" : isPast ? "#fca5a5" : "var(--color-border-tertiary)"}`,
              }}>
                {i + 1}. {l.toFixed(2)}
              </div>
            );
          })}
        </div>
      </div>

      {/* Trade log */}
      <div style={{ background: "var(--color-background-secondary)", borderRadius: 8, padding: "12px 14px", marginBottom: 14 }}>
        <div style={{ fontSize: 11, color: "var(--color-text-tertiary)", marginBottom: 8, fontWeight: 500 }}>TRADE HISTORY</div>
        {trades.length === 0 ? (
          <div style={{ color: "var(--color-text-tertiary)", fontSize: 12, textAlign: "center", padding: "16px 0" }}>No trades yet — start the bot</div>
        ) : (
          <div style={{ overflowX: "auto" }}>
            <table style={{ width: "100%", borderCollapse: "collapse", tableLayout: "fixed", fontSize: 12 }}>
              <thead>
                <tr style={{ borderBottom: "0.5px solid var(--color-border-secondary)" }}>
                  {["#", "Type", "Entry", "Exit", "Lot", "P&L", "Result"].map(h => (
                    <th key={h} style={{ padding: "4px 8px", textAlign: "left", color: "var(--color-text-tertiary)", fontSize: 10, fontWeight: 400 }}>{h}</th>
                  ))}
                </tr>
              </thead>
              <tbody>
                {trades.map((t) => (
                  <tr key={t.id} style={{ borderBottom: "0.5px solid var(--color-border-tertiary)" }}>
                    <td style={{ padding: "5px 8px", color: "var(--color-text-tertiary)" }}>{t.id}</td>
                    <td style={{ padding: "5px 8px", color: t.type === "BUY" ? "#22c55e" : "#ef4444", fontWeight: 500 }}>{t.type}</td>
                    <td style={{ padding: "5px 8px" }}>{t.entry}</td>
                    <td style={{ padding: "5px 8px" }}>{t.exit}</td>
                    <td style={{ padding: "5px 8px" }}>{t.lot}</td>
                    <td style={{ padding: "5px 8px", color: parseFloat(t.pnl) > 0 ? "#22c55e" : "#ef4444", fontWeight: 500 }}>
                      {parseFloat(t.pnl) > 0 ? "+" : ""}${t.pnl}
                    </td>
                    <td style={{ padding: "5px 8px" }}>
                      <span style={{ fontSize: 10, padding: "2px 6px", borderRadius: 4, background: t.win ? "#dcfce7" : "#fee2e2", color: t.win ? "#166534" : "#991b1b" }}>
                        {t.win ? "WIN" : "LOSS"}
                      </span>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        )}
      </div>

      {/* Controls */}
      <div style={{ display: "flex", gap: 10 }}>
        <button onClick={() => setRunning(r => !r)} style={{
          flex: 1, padding: "10px 0", borderRadius: 8, border: "0.5px solid var(--color-border-secondary)",
          background: running ? "#fee2e2" : "#dcfce7", color: running ? "#991b1b" : "#166534",
          fontFamily: "var(--font-mono)", fontSize: 13, fontWeight: 500, cursor: "pointer"
        }}>
          {running ? "⏹ STOP BOT" : "▶ START BOT"}
        </button>
        <button onClick={reset} disabled={running} style={{
          padding: "10px 20px", borderRadius: 8, border: "0.5px solid var(--color-border-secondary)",
          background: "var(--color-background-secondary)", color: running ? "var(--color-text-tertiary)" : "var(--color-text-primary)",
          fontFamily: "var(--font-mono)", fontSize: 13, cursor: running ? "not-allowed" : "pointer"
        }}>
          RESET
        </button>
      </div>

      <div style={{ marginTop: 12, padding: 10, borderRadius: 8, background: "var(--color-background-secondary)", border: "0.5px solid var(--color-border-tertiary)" }}>
        <div style={{ fontSize: 10, color: "var(--color-text-tertiary)", lineHeight: 1.6 }}>
          <strong style={{ color: "var(--color-text-secondary)" }}>Strategy:</strong> EMA9/EMA21 crossover + RSI(14) confirmation · TP: $200 move · SL: $120 move · Martingale: 0.01 → 0.02 → 0.04 → ... (doubles on loss, resets on win) ·{" "}
          <strong style={{ color: "#ef4444" }}>SIMULATION ONLY</strong> — for live Exness trading, deploy the MQL5 EA version on MT5.
        </div>
      </div>
    </div>
  );
}

Répondu

1
Développeur 1
Évaluation
(1)
Projets
0
0%
Arbitrage
2
0% / 100%
En retard
0
Gratuit
2
Développeur 2
Évaluation
Projets
0
0%
Arbitrage
0
En retard
0
Gratuit
3
Développeur 3
Évaluation
Projets
0
0%
Arbitrage
0
En retard
0
Gratuit
4
Développeur 4
Évaluation
(6)
Projets
6
0%
Arbitrage
2
50% / 0%
En retard
1
17%
Travail
Commandes similaires
Greetings I need MT5 developer that has expertise in developing a custom indicator for mt5 boom and crash based on my exact details and requirements which would be discuss later. Kindly bid for this project if it is something you can handle for me
I need a fully functional Expert Advisor (EA) for MetaTrader 5 focused on trading XAUUSD (Gold). The strategy should be based on fast scalping entries using indicators such as RSI, Moving Averages, or similar confirmation tools. The EA must include fixed risk management (1%–2% per trade), automatic lot calculation, and stop loss/take profit settings. It should be optimized for low spread conditions and quick market
Sabaaif 255 - 366 USD
#include <iostream> using namespace std; int main() { double rsiValue; cout << "Gatii RSI galchi (0-100): "; cin >> rsiValue; if (rsiValue < 30) { cout << "MALLATTOO: Gabaan baay'ee gadi bu'eera. BITI (BUY)!" << endl; } else if (rsiValue > 70) { cout << "MALLATTOO: Gabaan baay'ee ol ka'eera. GURGURI (SELL)!" << endl; } else { cout << "MALLATTOO: Gabaan gidduu jira. EEGGADHU." << endl;
Mt5 EA 50 - 69 USD
I am a private trader looking for a reliable EA that can generate steady daily profits of around $35 to $40 with proper risk management. My goal is to find or improve an EA strategy that can deliver consistent results, especially on Gold (XAUUSD). If you believe you can review the current EA or develop a better solution, I would be interested in working with you. However, I would need to verify the EA on a demo
Subject:currently have a working EA installed with 3 indicators, but it’s not profitable.What I need: A trader/developer with a proven indicator that can be converted/integrated into my existing EA. The indicator must show a pass rate of 80% or higher on backtest/forward test.Scope of work: Your indicator will be added to my existing EA and must work with the current strategy logic. I will first test the indicator’s
I would like to program a ninja trader strategy that involves a Cycle ID indicator. Can you take a look to see if you can program the indicator in a strategy? Let me know if you can do this
I’m looking for an experienced developer to build a MT5 EA that combines the following three strategies into a single system: Strategy 1 – H1 Zone Rejection (Pullback Entry) Identify the high and low of the H1 timeframe Enter trades when price reaches the H1 high/low zones Confirm entry using a bullish/bearish candle on the M15 timeframe Target a 1:2 risk-reward ratio Strategy 2 – Breakout & Retest Identify the H1
Hello, I have a Ctrader indicator with the source code, I was wondering if this possible to convert it to Quantower. Hello, I have a Ctrader indicator with the source code, I was wondering if tis possible to convert it to Quantower., i need an expert who can convert it perfectly
AI Trading MQL5: Maximizing Profit from a $10 Investment Achieving significant profits from a small initial capital like $10 in AI trading with MQL5 requires a highly strategic and disciplined approach. While the potential for exponential growth exists, it's crucial to manage expectations and understand the inherent risks. **Key Strategies for Small Capital AI Trading:** 1. **Low-Risk, High-Probability
Manage my money and make strategy add money in my bank account analys account trade for me convert money in to my accountNext, you need to describe all terms and concepts contained in the idea description. If trend is important for your strategy, clearly define what indicator should be used to determine the trend direction and strength. The numerical characteristics of these definitions form the basis of Expert

Informations sur le projet

Budget
50 - 100 USD

Client

Commandes passées1
Nombre d'arbitrages0