Spezifikation
//+------------------------------------------------------------------+
//| ProTradingEA MT5 |
//| Fully MT5-compliant with MACD, Trailing Stop, Break-Even |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;
// Optional override
input string SymbolOverride = ""; // leave blank to auto-detect
struct EASettings
{
int FastMAPeriod;
int SlowMAPeriod;
int RSIPeriod;
double RSIOverbought;
double RSIOversold;
int MACDFast;
int MACDSlow;
int MACDSignal;
double RiskPercent;
double ATRMultiplierSL;
double ATRMultiplierTP;
int ATRPeriod;
int TrailingStopPoints;
bool TradeLondonNY;
double PartialClosePercent;
string NewsStartTimes;
string NewsEndTimes;
};
EASettings settings;
double fastMA, slowMA;
double prevFastMA, prevSlowMA;
// MACD handles
int macdHandle;
double macdBuffer[], signalBuffer[], histBuffer[];
//+------------------------------------------------------------------+
//| Set defaults per symbol |
//+------------------------------------------------------------------+
void SetDefaults()
{
string sym = SymbolOverride != "" ? SymbolOverride : Symbol();
if(sym == "EURUSD") settings = {10,50,14,70,30,12,26,9,1.0,1.0,2.0,14,200,true,50,"13:30,15:00","14:30,15:30"};
else if(sym == "GBPUSD") settings = {12,55,14,70,30,12,26,9,1.0,1.2,2.2,14,250,true,50,"13:30,15:00","14:30,15:30"};
else if(sym == "USDJPY") settings = {10,50,14,70,30,12,26,9,1.0,1.0,2.0,14,150,true,50,"13:30,15:00","14:30,15:30"};
else settings = {10,50,14,70,30,12,26,9,1.0,1.0,2.0,14,200,true,50,"13:30,15:00","14:30,15:30"};
}
//+------------------------------------------------------------------+
//| Initialize EA |
//+------------------------------------------------------------------+
int OnInit()
{
SetDefaults();
// Create MACD handle
macdHandle = iMACD(Symbol(), PERIOD_CURRENT, settings.MACDFast, settings.MACDSlow, settings.MACDSignal, PRICE_CLOSE);
if(macdHandle == INVALID_HANDLE)
{
Print("Error creating MACD handle");
return INIT_FAILED;
}
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Calculate lot size based on risk |
//+------------------------------------------------------------------+
double CalculateLotSize(double stopLossPoints)
{
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
double riskAmount = balance * settings.RiskPercent / 100.0;
double tickValue = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
double lot = riskAmount / (stopLossPoints * tickValue / tickSize);
double minLot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);
double maxLot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);
double step = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP);
lot = MathMax(minLot, MathMin(maxLot, lot));
lot = MathFloor(lot/step)*step;
return NormalizeDouble(lot, 2);
}
//+------------------------------------------------------------------+
//| Check if trading is allowed (session + news filter) |
//+------------------------------------------------------------------+
bool IsTradingAllowed()
{
// Session filter
if(settings.TradeLondonNY)
{
int hour = TimeHour(TimeCurrent());
if(hour < 8 || hour > 17) return false;
}
// News filter
string starts[], ends[];
int startCount = StringSplit(settings.NewsStartTimes, ',', starts);
int endCount = StringSplit(settings.NewsEndTimes, ',', ends);
if(startCount != endCount) return true; // skip if mismatched
for(int i=0;i<startCount;i++)
{
int sh = StringToInteger(StringSubstr(starts[i],0,2));
int sm = StringToInteger(StringSubstr(starts[i],3,2));
int eh = StringToInteger(StringSubstr(ends[i],0,2));
int em = StringToInteger(StringSubstr(ends[i],3,2));
int curHour = TimeHour(TimeCurrent());
int curMin = TimeMinute(TimeCurrent());
if((curHour > sh || (curHour == sh && curMin >= sm)) &&
(curHour < eh || (curHour == eh && curMin <= em)))
return false;
}
return true;
}
//+------------------------------------------------------------------+
//| Manage positions: Trailing Stop, Break-Even, Partial Close |
//+------------------------------------------------------------------+
void ManagePositions()
{
if(!PositionSelect(Symbol())) return;
double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
double sl = PositionGetDouble(POSITION_SL);
double tp = PositionGetDouble(POSITION_TP);
double volume = PositionGetDouble(POSITION_VOLUME);
long type = PositionGetInteger(POSITION_TYPE);
double price = (type == POSITION_TYPE_BUY) ? SymbolInfoDouble(Symbol(), SYMBOL_BID) : SymbolInfoDouble(Symbol(), SYMBOL_ASK);
// Trailing Stop
if(type == POSITION_TYPE_BUY)
{
double newSL = price - settings.TrailingStopPoints * _Point;
if(newSL > sl && newSL > openPrice)
trade.PositionModify(Symbol(), newSL, tp);
// Break-Even + Partial Close
if(price - openPrice >= (tp - openPrice)/2 && sl < openPrice)
{
trade.PositionModify(Symbol(), openPrice, tp);
double closeVol = volume * settings.PartialClosePercent / 100.0;
trade.PositionClosePartial(Symbol(), closeVol);
}
}
if(type == POSITION_TYPE_SELL)
{
double newSL = price + settings.TrailingStopPoints * _Point;
if(sl == 0 || newSL < sl)
trade.PositionModify(Symbol(), newSL, tp);
// Break-Even + Partial Close
if(openPrice - price >= (openPrice - tp)/2 && (sl == 0 || sl > openPrice))
{
trade.PositionModify(Symbol(), openPrice, tp);
double closeVol = volume * settings.PartialClosePercent / 100.0;
trade.PositionClosePartial(Symbol(), closeVol);
}
}
}
//+------------------------------------------------------------------+
//| OnTick |
//+------------------------------------------------------------------+
void OnTick()
{
if(!IsTradingAllowed()) return;
// MAs
fastMA = iMA(NULL,0,settings.FastMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
slowMA = iMA(NULL,0,settings.SlowMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
prevFastMA = iMA(NULL,0,settings.FastMAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
prevSlowMA = iMA(NULL,0,settings.SlowMAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
// RSI
double rsi = iRSI(NULL,0,settings.RSIPeriod,PRICE_CLOSE,0);
// MACD
if(CopyBuffer(macdHandle,0,0,1,macdBuffer) <= 0) return; // Main
if(CopyBuffer(macdHandle,1,0,1,signalBuffer) <= 0) return; // Signal
double macdHist = macdBuffer[0] - signalBuffer[0];
// ATR for SL/TP
double atr = iATR(NULL,0,settings.ATRPeriod,0);
double slPoints = settings.ATRMultiplierSL * atr / _Point;
double tpPoints = settings.ATRMultiplierTP * atr / _Point;
double lot = CalculateLotSize(slPoints);
bool hasPosition = PositionSelect(Symbol());
// BUY signal
if(prevFastMA < prevSlowMA && fastMA > slowMA && rsi < settings.RSIOverbought && macdHist > 0 && !hasPosition)
{
double price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
double sl = price - slPoints*_Point;
double tp = price + tpPoints*_Point;
trade.Buy(lot,Symbol(),price,sl,tp);
}
// SELL signal
if(prevFastMA > prevSlowMA && fastMA < slowMA && rsi > settings.RSIOversold && macdHist < 0 && !hasPosition)
{
double price = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double sl = price + slPoints*_Point;
double tp = price - tpPoints*_Point;
trade.Sell(lot,Symbol(),price,sl,tp);
}
// Manage open positions
ManagePositions();
}
Bewerbungen
1
Bewertung
Projekte
658
32%
Schlichtung
43
42%
/
44%
Frist nicht eingehalten
11
2%
Beschäftigt
2
Bewertung
Projekte
319
29%
Schlichtung
34
26%
/
65%
Frist nicht eingehalten
10
3%
Frei
3
Bewertung
Projekte
7
0%
Schlichtung
2
50%
/
0%
Frist nicht eingehalten
1
14%
Arbeitet
4
Bewertung
Projekte
173
25%
Schlichtung
23
9%
/
78%
Frist nicht eingehalten
16
9%
Arbeitet
5
Bewertung
Projekte
9
11%
Schlichtung
0
Frist nicht eingehalten
0
Frei
6
Bewertung
Projekte
157
42%
Schlichtung
3
33%
/
33%
Frist nicht eingehalten
1
1%
Überlastet
7
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
8
Bewertung
Projekte
2
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
9
Bewertung
Projekte
33
24%
Schlichtung
3
33%
/
33%
Frist nicht eingehalten
4
12%
Arbeitet
10
Bewertung
Projekte
288
35%
Schlichtung
18
22%
/
61%
Frist nicht eingehalten
42
15%
Arbeitet
11
Bewertung
Projekte
88
28%
Schlichtung
24
13%
/
58%
Frist nicht eingehalten
7
8%
Beschäftigt
12
Bewertung
Projekte
19
26%
Schlichtung
0
Frist nicht eingehalten
3
16%
Frei
13
Bewertung
Projekte
20
0%
Schlichtung
10
0%
/
80%
Frist nicht eingehalten
6
30%
Frei
14
Bewertung
Projekte
559
35%
Schlichtung
80
31%
/
44%
Frist nicht eingehalten
203
36%
Frei
15
Bewertung
Projekte
125
24%
Schlichtung
23
26%
/
52%
Frist nicht eingehalten
8
6%
Arbeitet
16
Bewertung
Projekte
5
0%
Schlichtung
3
33%
/
67%
Frist nicht eingehalten
2
40%
Frei
17
Bewertung
Projekte
169
38%
Schlichtung
9
78%
/
22%
Frist nicht eingehalten
15
9%
Frei
18
Bewertung
Projekte
373
72%
Schlichtung
19
32%
/
47%
Frist nicht eingehalten
14
4%
Frei
Veröffentlicht: 14 Beispiele
19
Bewertung
Projekte
20
40%
Schlichtung
1
0%
/
100%
Frist nicht eingehalten
1
5%
Frei
20
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
21
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
Ähnliche Aufträge
I currently have unfinished work. It’s a project to connect MetaTrader with the BingX platform. At the moment, I have implemented a service that retrieves a custom symbol in BingX, and it works well. However, some specifications still need to be adjusted regarding how the data is received. Otherwise, prices and other values are accurate. The only issue is that for the strategy tester, it is always necessary to
Modify an existing EA
30 - 50 USD
This is to modify my Semi Auto EA -Looking for developer modify my existing EA to Pending Order EA (BS/BL/SL/SS). Relevent with Heiken Ashi Smooth ,Moving Average , Acceleration. Concept MAster and Slave. Ready to give previous soucre code as guide. Work to do - 1)To modify this EA to Pending Order. 2) to add new feature - Risk Management/moneymanagement 3) To modify 4 slave to 7 slave will give the previous to
BTC 5 Minutes scalping
50 - 100 USD
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
Advanced Hedge + Grid + Scalping system
300 - 500 USD
🚀 ADAPTIVE GRID HEDGE EA (FULL VERSION) 🧠 📌 GENERAL CONCEPT This Expert Advisor (EA) uses a strategy combining: Grid trading (order grid) Hedge (protection with opposite positions) Lot scaling (progressive) Loss compensation with profits Continuous operation (non-stop) Focus on: Small recurring profits High trade volume (rebate/IB) The system does not depend on direction, but rather on market oscillation . Main
Neew arrow indiactor fix
30+ USD
I have a indicator working good but have some bug for arrow placement . budget is fixed 30 used . only experience developer apply. i want to arrow get put on just above the candle high and candle low
I need a professional MT5 Expert Advisor (EA) built with clean, modular code. This is an advanced strategy combining liquidity concepts, controlled DCA, hedge protection, and strict risk management. Core Requirements: Entry Logic (ALL must align): Liquidity sweep (Previous Day High/Low breakout and return) EMA50 and EMA200 trend alignment Higher timeframe bias (H1 or H4) RSI confirmation Bollinger Band entry Filters
Custom MT5 EA - Perpetual NDA Required
1000 - 2000 USD
I need a professional MQL5 developer. BEFORE I SHARE ANY DETAILS: 1. You must sign a PERPETUAL NDA with no expiration date 2. NDA includes €100,000 penalty for any breach 3. I require full .mq5 source code ownership 4. Developer must have 500+ completed jobs, 4.9+ rating Budget: €1500 EUR Duration: 14 days Start your application with "RULER" to prove you read this
i have a simple strategy can you please create the automated forex ea to execute my trading strategy? i need custom ea for tradingview and mt4/mt5 correction: i need a tradingview indicator created that tells me when to buy or sell. and ea in mt4/mt5
Pip Scalper Bot
60+ USD
i want a trading bot that is aleast 98% sure,and cam also do scalping 99% correct using smart money concept, ICT, ALL technical analysis on it and also put risk management on it
It is very important, that your software can replicate the trade logic 1:1 as the original myfxbook statistic. You should have a professional software to analyze the trade logic. I tried it with ChatGPT and GROK and it doesnt worked at all. You need to have better tools for that job. If you can not do it to 99% same trade logic as the original statistic do not message me. Payment only after delivering the EA (Demo
Projektdetails
Budget
30 - 200 USD
MwSt (20%):
6
-
40
USD
Insgesamt:
36
-
240
USD
Für die Entwickler
27
- 180
USD
Ausführungsfristen
von 1 bis 31 Tag(e)
Kunde
Veröffentlichte Aufträge1
Anzahl der Schlichtungen0