النتائج 1 إلى 1 من 1
- 01-03-2024, 02:12 PM #1
مساعدة في اضافة شرط دخول للصفقة الثانية
احتاج مساعدتكم البوت يعمل ماعدا فتح الصفقة الثانية اريد ان يتم فتحها بعد ضرب ستوب للصفقة الاولى ومن نفس سعر فتح الصفقة الاولى وشكرا مقدما وهذا الكود
#include <Trade/Trade.mqh>
input double Lots = 0.01; // حجم اللوت الابتدائي
input int TpPoints = 1000; // نقاط الربح
input int SlPoints = 500; // نقاط الخسارة
input string OpenTime = "01:02"; // وقت فتح الصفقة
input string CloseTime = "22:00"; // وقت إغلاق الصفقة
datetime lastSignal; // متغير لتخزين وقت آخر إشارة
ulong posTicket; // تذكير برقم التذكرة للصفقة الحالية
bool firstTradeClosed = false; // متغير لتتبع ما إذا تم إغلاق الصفقة الأولى
ulong secondPosTicket; // تذكير برقم التذكرة للصفقة الثانية
CTrade trade; // كائن لإدارة الصفقات
double dynamicLots = Lots; // إعلان متغير جديد لتتبع حجم اللوت
int OnInit() {
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {
}
void OnTick() {
datetime openTime = StringToTime(OpenTime);
datetime closeTime = StringToTime(CloseTime);
if (lastSignal != openTime && TimeCurrent() > openTime) {
lastSignal = openTime;
Print("وصل الوقت للفتح...");
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
ask = NormalizeDouble(ask, _Digits);
double tp = ask + TpPoints * _Point;
tp = NormalizeDouble(tp, _Digits);
double sl = ask - SlPoints * _Point;
sl = NormalizeDouble(sl, _Digits);
dynamicLots += 0.01;
if (!firstTradeClosed) {
if (trade.Buy(dynamicLots, _Symbol, ask, sl, tp, "firstTrade")) {
posTicket = trade.ResultOrder();
}
}
}
if (!firstTradeClosed) {
if (PositionSelectByTicket(posTicket)) {
if (PositionGetDouble(POSITION_PROFIT) < 0) {
double Position_Stoploss = PositionGetDouble(POSITION_SL);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
if (bid < Position_Stoploss) {
firstTradeClosed = true;
}
}
}
}
if (firstTradeClosed && secondPosTicket == 0) {
if (posTicket > 0 && !PositionSelectByTicket(posTicket)) {
firstTradeClosed = false; // إعادة تعيين للسماح بفتح صفقة جديدة
} else {
if (trade.Buy(dynamicLots, _Symbol, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, "secondTrade")) {
secondPosTicket = trade.ResultOrder();
}
}
}
if (TimeCurrent() > closeTime) {
if (posTicket > 0) {
if (PositionSelectByTicket(posTicket)) {
if (trade.PositionClose(posTicket)) {
posTicket = 0;
}
} else {
posTicket = 0;
}
}
if (secondPosTicket > 0) {
if (PositionSelectByTicket(secondPosTicket)) {
if (trade.PositionClose(secondPosTicket)) {
secondPosTicket = 0;
}
} else {
secondPosTicket = 0;
}
}
}
Comment("\nوقت الخادم: ", TimeCurrent(),
"\nوقت الفتح: ", openTime,
"\nوقت الإغلاق: ", closeTime,
"\nتذكرة: ", posTicket,
"\nتذكرة الصفقة الثانية: ", secondPosTicket,
"\nحجم اللوت الديناميكي: ", dynamicLots);
Print("الوقت الحالي: ", TimeCurrent());
Print("وقت الفتح: ", openTime);
Print("وقت الإغلاق: ", closeTime);
}