النتائج 1 إلى 5 من 5
- 26-09-2023, 09:22 AM #1
اكسبيرت يعلق صفقات على مستوى معدل شمعة اليومي
السلام عليكم ورحمة الله
الطلب بسيط جدا يتمثل في اكسبيرت يعلق صفقات على مستوى معدل شمعة اليومي السابقة بشرط اذا كانت الشمعة السابقة في فريم اليومي نازلة يضع sel limite واذا كانت صاعدة buy limite ويبقى يعلق في نفس المكان مادامت الصفقات تغلق على ربح.
الشرط الثاني هو اذا اخترق المستوى يدخل واغلقت الصفقة على خسارة يدخل صفقة مضاعفة وهذا فيديو شرح الشرط الاول
https://youtu.be/KmRx3tf3jUs?si=uHJ6E64L1g8tKYcE
- 26-09-2023, 10:26 AM #2
لاتحتاجون الى اي مؤشر بل آلة حاسبة فقط لكن عليكم بمشاهدة الفيديو لفهم الكيفية
(أعلى مستوى+ ادنى مستوى + مستوى الانغلاق) نقسم المجموع على 3 و هو المستوى الذي يتم تعليق عليه
لكن بعد ساعة نحددها وهو امر مهم نسيته
- 26-09-2023, 06:04 PM #3
قمت من التحقق من الاستراتجية وهي ممتازة الارتداد ضئيل جدا
نقاط دخول ممتازة شكرا لك ولصاحب الفيديو
- 26-09-2023, 06:46 PM #4
اتمنى التحاق مبرمجين بالموضوع حاولت ان اصنع له اكسبيرت عن طريق chatGBT لكن لم وفق
وهذا ما استطعت عمله لكن فيه خطاء حجم الوت
كود PHP://+------------------------------------------------------------------+
//| VotreEA.mq4 |
//| Copyright 2023, Company Name |
//| http://www.company.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, Company Name"
#property link "http://www.company.com"
#property version "1.00"
#property strict
extern double LotSize = 0.1; // Taille de lot fixe
extern int Slippage = 3; // Glissement
extern int StopLossPips = 30; // Stop Loss initial en pips
extern int TakeProfitPips = 60; // Take Profit initial en pips
extern int TrailingStopPips = 20; // Trailing Stop en pips
extern int TrailingStepPips = 10; // Trailing Step en pips
extern double RiskPercent = 2.0; // Pourcentage de risque par transaction
extern string OpenTime = "08:00"; // Heure d'ouverture des positions
extern string CloseTime = "08:00"; // Heure de fermeture des positions
int ticketBuy = -1; // Variable pour stocker le ticket de l'ordre Buy
int ticketSell = -1; // Variable pour stocker le ticket de l'ordre Sell
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
// ...
int OnInit()
{
// Vérifiez si l'heure actuelle correspond à l'heure d'ouverture
datetime currentTime = TimeCurrent();
datetime openTime = StrToTime(OpenTime);
datetime closeTime = StrToTime(CloseTime);
if (currentTime < openTime || currentTime >= closeTime)
{
Print("L'EA ne fonctionne qu'à l'heure spécifiée entre OpenTime et CloseTime.");
return(INIT_FAILED);
}
// Calcul de la moyenne du plus haut, du plus bas et de la clôture de la bougie d'hier
double yesterdayHigh = iHigh(NULL, PERIOD_D1, 1);
double yesterdayLow = iLow(NULL, PERIOD_D1, 1);
double yesterdayClose = iClose(NULL, PERIOD_D1, 1);
double averagePrice = (yesterdayHigh + yesterdayLow + yesterdayClose) / 3.0;
// Calcul de la taille de lot basée sur le pourcentage de risque
double accountBalance = AccountBalance();
double riskAmount = accountBalance * RiskPercent / 100.0;
double lotSize = riskAmount / (StopLossPips * MarketInfo(Symbol(), MODE_MARGINREQUIRED));
double minLotSize = 0.01; // Taille minimale autorisée par le courtier
double maxLotSize = 100.00; // Taille maximale autorisée par le courtier
double lotStep = 0.01; // Incrément de taille de lot
// Vérifiez la taille du lot en fonction des règles du courtier
if (lotSize < minLotSize || lotSize > maxLotSize || MathMod(lotSize, lotStep) != 0)
{
Print("Taille de lot invalide. Vérifiez les règles de votre courtier.");
return(INIT_FAILED);
}
// Placement d'un ordre Buy avec un niveau de stop et de limite
double buyStop = averagePrice - StopLossPips * Point;
double buyLimit = averagePrice + TakeProfitPips * Point;
double buyTrailingStop = TrailingStopPips * Point;
double buyTrailingStep = TrailingStepPips * Point;
ticketBuy = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), Slippage, buyStop, buyLimit, "", 0, clrNONE, clrNONE);
// Vérifiez si l'heure actuelle correspond à l'heure de fermeture
if (currentTime >= closeTime)
{
int totalOrders = OrdersTotal();
for (int i = totalOrders - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
ClosePosition(OrderTicket());
}
}
}
}
return(INIT_SUCCEEDED);
}
// ...
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Aucune action nécessaire à la désinitialisation
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// Vérifiez si l'heure actuelle correspond à l'heure de fermeture
datetime currentTime = TimeCurrent();
datetime closeTime = StrToTime(CloseTime);
if (currentTime >= closeTime)
{
int totalOrders = OrdersTotal();
for (int i = totalOrders - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
ClosePosition(OrderTicket());
}
}
}
}
}
// Fermer une position
// Fermer une position
bool ClosePosition(int ticket)
{
if (OrderClose(ticket, OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, clrNONE))
{
Print("Position fermée avec succès.");
return true;
}
else
{
int error = GetLastError();
Print("Erreur lors de la fermeture de la position. Code d'erreur : ", error);
return false;
}
}
- 12-10-2023, 07:31 AM #5
تفضل أخي جرب ورد لي تم تصحيح حجم الصفقة
كود PHP:extern double LotSize = 0.1; // حجم الصفقة
extern int Slippage = 3; // قيمة الانزلاق
extern int StopLossPips = 30; // عدد النقاط المستخدمة لوقف الخسارة
extern int TakeProfitPips = 60; // عدد النقاط المستخدمة لوضع أمر الربح
extern int TrailingStopPips = 20; // عدد النقاط المستخدمة لتفعيل وقف السحب
extern int TrailingStepPips = 10; // عدد النقاط المستخدمة لتحديث وقف السحب
extern double RiskPercent = 2.0; // نسبة المخاطرة كنسبة من رصيد الحساب
extern string OpenTime = "08:00"; // وقت بدء التداول
extern string CloseTime = "08:00"; // وقت إنهاء التداول
int ticketBuy = -1; // تذكير الصفقة الشرائية
int ticketSell = -1; // تذكير الصفقة البيعية
int OnInit()
{
datetime currentTime = TimeCurrent();
datetime openTime = StrToTime(OpenTime);
datetime closeTime = StrToTime(CloseTime);
if (currentTime < openTime || currentTime >= closeTime)
{
Print("وقت عمل الاكسبيرت OpenTime و CloseTime.");
return(INIT_FAILED);
}
// حساب السعر المتوسط لليوم السابق
double yesterdayHigh = iHigh(NULL, PERIOD_D1, 1);
double yesterdayLow = iLow(NULL, PERIOD_D1, 1);
double yesterdayClose = iClose(NULL, PERIOD_D1, 1);
double averagePrice = (yesterdayHigh + yesterdayLow + yesterdayClose) / 3.0;
// حساب حجم اللوت بناءً على نسبة المخاطرة
double accountBalance = AccountBalance();
double riskAmount = accountBalance * RiskPercent / 100.0;
double lotSize = riskAmount / (StopLossPips * MarketInfo(Symbol(), MODE_MARGINREQUIRED) * MarketInfo(Symbol(), MODE_MARGINHEDGED));
double minLotSize = 0.01; // الحد الأدنى لحجم اللوت
double maxLotSize = 100.00; // الحد الأقصى لحجم اللوت
double lotStep = 0.01; // تداخل الحجم
// التحقق من صحة حجم اللوت ومطابقته لقواعد الوسيط
if (lotSize < minLotSize || lotSize > maxLotSize || MathMod(lotSize, lotStep) != 0)
{
Print("حجم اللوت غير صالح. يرجى التحقق من قواعد وسيط التداول.");
return(INIT_FAILED);
}
// حساب مستويات وقف الخسارة وأمر الربح
double buyStop = averagePrice - StopLossPips * Point;
double buyLimit = averagePrice + TakeProfitPips * Point;
double buyTrailingStop = TrailingStopPips * Point;
double buyTrailingStep = TrailingStepPips * Point;
// فتح صفقة شرائية
ticketBuy = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), Slippage, buyStop, buyLimit, "", 0, clrNONE, clrNONE);
// التحقق من إغلاق الصفقات عند انتهاء الوقت
if (currentTime >= closeTime)
{
int totalOrders = OrdersTotal();
for (int i = totalOrders - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
ClosePosition(OrderTicket());
}
}
}
}
return(INIT_SUCCEEDED);
}
// دالة OnTick() لا تحتاج إلى تعديل، فهي مستخدمة لإغلاق الصفقات عند انتهاء الوقت.
bool ClosePosition(int ticket)
{
if (OrderClose(ticket, OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, clrNONE))
{
Print("تم إغلاق الصفقة بنجاح.");
return true;
}
else
{
int error = GetLastError();
Print("حدث خطأ أثناء إغلاق الصفقة. رمز الخطأ: ", error);
return false;
}