• 10:45 صباحاً




عايز اعرف ايه الغلط في الكود دة

إضافة رد
أدوات الموضوع
الصورة الرمزية garra
عضو جديد
تاريخ التسجيل: Oct 2015
المشاركات: 101
خبرة السوق : 6 شهور الى سنة
الدولة: الاسكندرية
معدل تقييم المستوى: 12
garra is on a distinguished road
23 - 12 - 2025, 01:46 PM
  #1
garra غير متواجد حالياً  
افتراضي عايز اعرف ايه الغلط في الكود دة
جربت اعمل اكسبيرت تداول تلقائي يتداول على نماذج الهارمونيك عن طريق الذكاء الاصطناعي و اتعمل بدون أخطاء و اشتغل بس الإجمالي كان خسارة كبيرة ، ممكن حد يقولي السبب و لو امكن يعدل عليه و الكل يستفاد

//+------------------------------------------------------------------+
//| Shark_Bat_Harmonic_MT5_Backtest_Ready.mq5 |
//+------------------------------------------------------------------+
#property strict

// ================== INPUTS ==================
input double InpLotSize = 0.1;
input int InpMagic = 777999;
input int ZZ_Depth = 12;
input int ZZ_Dev = 5;
input int ZZ_Back = 3;

// ================== GLOBALS ==================
int zzHandle;
double zz[];
datetime lastBarTime = 0;

//+------------------------------------------------------------------+
int OnInit()
{
zzHandle = iCustom(_Symbol,_Period,"Examples\\ZigZag",ZZ_Dept h,ZZ_Dev,ZZ_Back);
if(zzHandle == INVALID_HANDLE) {
Print("❌ فشل تحميل المؤشر! تأكد من وجوده في MQL5/Indicators/Examples");
return INIT_FAILED;
}
ArraySetAsSeries(zz,true);
return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
void OnTick()
{
if(iTime(_Symbol,_Period,0) == lastBarTime) return;
lastBarTime = iTime(_Symbol,_Period,0);

if(CopyBuffer(zzHandle,0,0,500,zz) <= 0) return;

double p[5]; datetime t[5]; int c = 0;

// استخراج نقاط ZigZag المؤكدة (تجاهل آخر شمعتين)
for(int i=2; i<500 && c<5; i++)
{
if(zz[i] != 0) {
p[c] = zz[i];
t[c] = iTime(_Symbol,_Period,i);
c++;
}
}
if(c < 5) return;

// ترتيب X A B C D
ArrayReverse(p); ArrayReverse(t);

double X=p[0], A=p[1], B=p[2], C=p[3];
double XA=MathAbs(A-X), AB=MathAbs(B-A), BC=MathAbs(C-B);
if(XA==0 || AB==0) return;

double rAB = AB/XA;
double rBC = BC/AB;

if(HasAnyOrderOrPosition()) return;

// --- BAT ---
if(rAB >= 0.38 && rAB <= 0.60)
{
double entry = (X > A) ? (X - XA*0.886) X + XA*0.886);
double sl = X;
double risk = MathAbs(entry-sl);
double tp = (X > A) ? (entry + risk) entry - risk);

if((X > A && C > B) || (X < A && C < B))
PlaceOrder((X > A ? ORDER_TYPE_BUY_LIMIT : ORDER_TYPE_SELL_LIMIT), entry, sl, tp, "Bat 1:1", t, p);
}

// --- SHARK ---
if(rBC >= 1.13 && rBC <= 1.60)
{
double entry = (X > A) ? (X - XA*1.13) X + XA*1.13);
double sl = (X > A) ? (X - XA*1.27) X + XA*1.27);
double risk = MathAbs(entry-sl);
double tp = (X > A) ? (entry + risk) entry - risk);

PlaceOrder((X > A ? ORDER_TYPE_BUY_LIMIT : ORDER_TYPE_SELL_LIMIT), entry, sl, tp, "Shark 1:1", t, p);
}
}

//+------------------------------------------------------------------+
void PlaceOrder(ENUM_ORDER_TYPE type, double price, double sl, double tp, string comm, datetime &t[], double &p[])
{
MqlTradeRequest req = {}; MqlTradeResult res = {};
req.action = TRADE_ACTION_PENDING;
req.symbol = _Symbol;
req.volume = InpLotSize;
req.type = type;
req.price = NormalizeDouble(price, _Digits);
req.sl = NormalizeDouble(sl, _Digits);
req.tp = NormalizeDouble(tp, _Digits);
req.magic = InpMagic;
req.comment = comm;
req.type_filling = GetFillingMode();

if(!OrderSend(req,res))
Print("❌ خطأ في التنفيذ: ", GetLastError());
else
DrawPattern(t,p,clrDeepSkyBlue,comm);
}

ENUM_ORDER_TYPE_FILLING GetFillingMode()
{
uint filling = (uint)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
if((filling & SYMBOL_FILLING_FOK) != 0) return ORDER_FILLING_FOK;
if((filling & SYMBOL_FILLING_IOC) != 0) return ORDER_FILLING_IOC;
return ORDER_FILLING_RETURN;
}

void DrawPattern(datetime &t[], double &p[], color clr, string name)
{
for(int i=0; i<4; i++) {
string ln = "H_"+name+(string)i;
ObjectDelete(0,ln);
ObjectCreate(0,ln,OBJ_TREND,0,t[i+1],p[i+1],t[i],p[i]);
ObjectSetInteger(0,ln,OBJPROP_COLOR,clr);
ObjectSetInteger(0,ln,OBJPROP_RAY_RIGHT,false);
}
}

bool HasAnyOrderOrPosition()
{
for(int i=PositionsTotal()-1; i>=0; i--)
if(PositionSelectByTicket(PositionGetTicket) && PositionGetInteger(POSITION_MAGIC)==InpMagic) return true;
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(OrderGetTicket) && OrderGetInteger(ORDER_MAGIC)==InpMagic) return true;
return false;
}
رد مع اقتباس

عضو جديد
 
تاريخ التسجيل: Aug 2016
المشاركات: 56
معدل تقييم المستوى: 11
metmet is on a distinguished road
افتراضي رد: عايز اعرف ايه الغلط في الكود دة
2#
28 - 05 - 2026, 06:10 PM
(السبب) اعادة رسم النقاط
metmet غير متواجد حالياً  
رد مع اقتباس
الصورة الرمزية garra
عضو جديد
الصورة الرمزية garra
 
تاريخ التسجيل: Oct 2015
الدولة: الاسكندرية
المشاركات: 101
خبرة السوق: 6 شهور الى سنة
معدل تقييم المستوى: 12
garra is on a distinguished road
افتراضي رد: عايز اعرف ايه الغلط في الكود دة
3#
29 - 05 - 2026, 06:28 AM
اقتباس:
المشاركة الأصلية كتبت بواسطة metmet مشاهدة المشاركة
(السبب) اعادة رسم النقاط
ممكن يتعدل ؟
garra غير متواجد حالياً  
رد مع اقتباس
عضو نشيط جدا
 
تاريخ التسجيل: Nov 2016
الدولة: المغرب_ألمانيا
المشاركات: 755
خبرة السوق: 1 الى 3 سنوات
معدل تقييم المستوى: 11
larcen is on a distinguished road
افتراضي رد: عايز اعرف ايه الغلط في الكود دة
4#
29 - 07 - 2026, 11:33 PM
السلام عليكم تم تصحيح الكود :
//+------------------------------------------------------------------+
//| Shark_Bat_Harmonic_MT5_Backtest_Ready.mq5 |
//+------------------------------------------------------------------+
#property strict

// ================== INPUTS ==================
input double InpLotSize = 0.1;
input long InpMagic = 777999;
input int ZZ_Depth = 12;
input int ZZ_Dev = 5;
input int ZZ_Back = 3;

// ================== GLOBALS ==================
int zzHandle = INVALID_HANDLE;
double zz[];
datetime lastBarTime = 0;

//+------------------------------------------------------------------+
int OnInit()
{
zzHandle = iCustom(_Symbol, _Period, "Examples\\ZigZag", ZZ_Depth, ZZ_Dev, ZZ_Back);
if(zzHandle == INVALID_HANDLE)
{
Print("❌ فشل تحميل المؤشر! تأكد من وجوده في MQL5/Indicators/Examples");
return INIT_FAILED;
}

ArraySetAsSeries(zz, true);
return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(zzHandle != INVALID_HANDLE)
IndicatorRelease(zzHandle);
}

//+------------------------------------------------------------------+
void OnTick()
{
datetime barTime = iTime(_Symbol, _Period, 0);
if(barTime == 0 || barTime == lastBarTime)
return;

lastBarTime = barTime;

if(CopyBuffer(zzHandle, 0, 0, 500, zz) <= 0)
return;

double tmpP[5];
datetime tmpT[5];
int c = 0;

// استخراج 5 نقاط ZigZag مؤكدة، مع تجاهل آخر شمعتين
for(int i = 2; i < 500 && c < 5; i++)
{
if(zz[i] != 0.0)
{
tmpP[c] = zz[i];
tmpT[c] = iTime(_Symbol, _Period, i);
c++;
}
}

if(c < 5)
return;

// ترتيب النقاط من الأقدم إلى الأحدث: X A B C D
double p[5];
datetime t[5];

for(int i = 0; i < 5; i++)
{
p[i] = tmpP[4 - i];
t[i] = tmpT[4 - i];
}

double X = p[0];
double A = p[1];
double B = p[2];
double C = p[3];
double D = p[4]; // غير مستخدمة حاليًا، لكن احتفظنا بها للهيكل

double XA = MathAbs(A - X);
double AB = MathAbs(B - A);
double BC = MathAbs(C - B);

if(XA <= 0.0 || AB <= 0.0)
return;

double rAB = AB / XA;
double rBC = BC / AB;

if(HasAnyOrderOrPosition())
return;

bool bullish = (X > A);

// --- BAT ---
if(rAB >= 0.38 && rAB <= 0.60)
{
double entry = bullish ? (X - XA * 0.886) X + XA * 0.886);
double sl = X;
double risk = MathAbs(entry - sl);
double tp = bullish ? (entry + risk) entry - risk);

if((bullish && C > B) || (!bullish && C < B))
{
PlaceOrder(
bullish ? ORDER_TYPE_BUY_LIMIT : ORDER_TYPE_SELL_LIMIT,
entry, sl, tp,
"Bat 1:1",
t, p
);
}
}

// --- SHARK ---
if(rBC >= 1.13 && rBC <= 1.60)
{
double entry = bullish ? (X - XA * 1.13) X + XA * 1.13);
double sl = bullish ? (X - XA * 1.27) X + XA * 1.27);
double risk = MathAbs(entry - sl);
double tp = bullish ? (entry + risk) entry - risk);

PlaceOrder(
bullish ? ORDER_TYPE_BUY_LIMIT : ORDER_TYPE_SELL_LIMIT,
entry, sl, tp,
"Shark 1:1",
t, p
);
}
}

//+------------------------------------------------------------------+
void PlaceOrder(ENUM_ORDER_TYPE type,
double price,
double sl,
double tp,
string comm,
const datetime &t[],
const double &p[])
{
MqlTradeRequest req;
MqlTradeResult res;

ZeroMemory(req);
ZeroMemory(res);

req.action = TRADE_ACTION_PENDING;
req.symbol = _Symbol;
req.volume = InpLotSize;
req.type = type;
req.price = NormalizeDouble(price, _Digits);
req.sl = NormalizeDouble(sl, _Digits);
req.tp = NormalizeDouble(tp, _Digits);
req.magic = (ulong)InpMagic;
req.comment = comm;
req.type_filling = GetFillingMode();
req.type_time = ORDER_TIME_GTC;

if(!OrderSend(req, res))
{
Print("❌ خطأ في التنفيذ: ", GetLastError());
return;
}

if(res.retcode != TRADE_RETCODE_DONE && res.retcode != TRADE_RETCODE_PLACED)
{
Print("❌ فشل إرسال الأمر. Retcode=", res.retcode, " | ", res.comment);
return;
}

DrawPattern(t, p, clrDeepSkyBlue, comm);
}

//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFillingMode()
{
long filling = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

if((filling & SYMBOL_FILLING_FOK) != 0)
return ORDER_FILLING_FOK;

if((filling & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC;

return ORDER_FILLING_RETURN;
}

//+------------------------------------------------------------------+
void DrawPattern(const datetime &t[], const double &p[], color clr, string name)
{
for(int i = 0; i < 4; i++)
{
string ln = "H_" + name + "_" + IntegerToString;
ObjectDelete(0, ln);

ObjectCreate(0, ln, OBJ_TREND, 0, t[i], p[i], t[i + 1], p[i + 1]);
ObjectSetInteger(0, ln, OBJPROP_COLOR, clr);
ObjectSetInteger(0, ln, OBJPROP_RAY_RIGHT, false);
}
}

//+------------------------------------------------------------------+
bool HasAnyOrderOrPosition()
{
// فحص الصفقات المفتوحة
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket;
if(ticket > 0 && PositionSelectByTicket(ticket))
{
if((long)PositionGetInteger(POSITION_MAGIC) == InpMagic &&
PositionGetString(POSITION_SYMBOL) == _Symbol)
{
return true;
}
}
}

// فحص الأوامر المعلقة
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
ulong ticket = OrderGetTicket;
if(ticket > 0 && OrderSelect(ticket))
{
if((long)OrderGetInteger(ORDER_MAGIC) == InpMagic &&
OrderGetString(ORDER_SYMBOL) == _Symbol)
{
return true;
}
}
}

return false;
}
//+------------------------------------------------------------------+
larcen غير متواجد حالياً  
رد مع اقتباس
عضو جديد
 
تاريخ التسجيل: Jan 2020
المشاركات: 5
معدل تقييم المستوى: 0
nabilra is on a distinguished road
افتراضي رد: عايز اعرف ايه الغلط في الكود دة
5#
17 - 10 - 2026, 11:18 PM
سلام عليكم احتاج اكسبرت يكون سكالبيغ اعتمد عليه من فضلكم
nabilra غير متواجد حالياً  
رد مع اقتباس


إضافة رد

الكلمات الدلالية (Tags)
اكسبيرت ،r1s1.v1



جديد مواضيع منتدى المؤشرات و الاكسبرتات

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
صور عايض رمزيات عايض للبلاك بيري خلفيات عايض بي بي 2012 تواقيع عايض من مسرحيه بخيت rahmy2002 استراحة بورصات 0 01 - 05 - 2012 06:40 PM
ياجماعه انا عايز اعرف رأيكوا فى الشركه ده mr@hussen منتدى برامج التداول و الشارتات و الشركات 16 14 - 02 - 2009 03:02 PM


10:45 AM