النتائج 1 إلى 8 من 8
الموضوع: طلب اكسبيرت خدمي بسيط جدا
- 30-08-2024, 10:31 PM #1
طلب اكسبيرت خدمي بسيط جدا
السلام عليكم ورحمة الله وبركاته
لو أمكن من حضراتكم أريد طلب إكسبيرت يعمل كالتالي:
1- يراقب جميع الصفقات المفتوحة على الشارت الحالي (باستخدام خيار الـ MagicNumber)
2- يحسب إجمالي الربح لهذه الصفقات
3- عندما يصل إجمالي الربح إلى 0 دولار أو أي مبلغ أحدده في خيار TargetProfit، يقوم بإغلاق جميع هذه الصفقات علي الشارت المحدد
أهم شئ يقوم بفصل صفقات كل زوج لوحده ويغلقها عند وصولها لنقطة التعادل أو الرقم اللي أقوم بتحديده
حاولت ابرمجه بال AI لكن مانجح في إغلاق الصفقات يقوم بطباعة الأوامر في الجورنال لكن لا ينفذ ويقوم بالإغلاق للأسف
شكرا مقدما لك
- 30-08-2024, 10:35 PM #2
هذا هو الكود اللي صنعه ال AI بناءا علي ماسبق
//+------------------------------------------------------------------+
//| TargetProfitCloser.mq4 |
//| Copyright 2024, Your Name Here |
//| https://www.yourwebsite.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Your Name Here"
#property link "https://www.yourwebsite.com"
#property version "1.03"
#property strict
// Input parameters
input double TargetProfit = 0; // Target profit in account currency
input int MagicNumber = 12345; // Unique identifier for this chart's trades
input int Slippage = 3; // Allowed slippage in points
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Print("Expert initialized on symbol: ", Symbol(), ", Magic Number: ", MagicNumber, ", Target Profit: ", TargetProfit);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Print("Expert removed from symbol: ", Symbol());
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double totalProfit = CalculateTotalProfit();
Print("Current total profit: ", totalProfit, ", Target profit: ", TargetProfit);
if(totalProfit >= TargetProfit)
{
Print("Target profit reached or exceeded. Attempting to close all trades.");
if(CloseAllTrades())
{
Print("All trades closed successfully.");
}
else
{
Print("Failed to close all trades. Check the Experts tab for more details.");
}
}
}
//+------------------------------------------------------------------+
//| Calculate total profit for open trades on this chart |
//+------------------------------------------------------------------+
double CalculateTotalProfit()
{
double profit = 0;
int openOrders = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
profit += OrderProfit() + OrderSwap() + OrderCommission();
openOrders++;
}
}
}
Print("Open orders: ", openOrders, ", Total profit: ", profit);
return profit;
}
//+------------------------------------------------------------------+
//| Close all open trades on this chart |
//+------------------------------------------------------------------+
bool CloseAllTrades()
{
bool allClosed = true;
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
bool result = false;
int attempts = 5; // Number of attempts to close the order
while(attempts > 0 && !result)
{
if(OrderType() == OP_BUY)
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, clrRed);
else if(OrderType() == OP_SELL)
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, clrRed);
if(!result)
{
int lastError = GetLastError();
Print("Error closing order ", OrderTicket(), ": ", ErrorDescription(lastError), " (", lastError, "). Attempts left: ", attempts);
Sleep(1000); // Wait for 1 second before trying again
attempts--;
}
else
{
Print("Order closed successfully. Ticket: ", OrderTicket());
break;
}
}
if(!result)
{
allClosed = false;
Print("Failed to close order ", OrderTicket(), " after all attempts.");
}
}
}
}
return allClosed;
}
//+------------------------------------------------------------------+
//| Custom function to get error description |
//+------------------------------------------------------------------+
string ErrorDescription(int error_code)
{
string error_string;
switch(error_code)
{
case ERR_NO_ERROR:
error_string="No error";
break;
case ERR_NO_RESULT:
error_string="No error returned";
break;
case ERR_COMMON_ERROR:
error_string="Common error";
break;
case ERR_INVALID_TRADE_PARAMETERS:
error_string="Invalid trade parameters";
break;
case ERR_SERVER_BUSY:
error_string="Trade server is busy";
break;
case ERR_OLD_VERSION:
error_string="Old version of the client terminal";
break;
case ERR_NO_CONNECTION:
error_string="No connection with trade server";
break;
case ERR_NOT_ENOUGH_RIGHTS:
error_string="Not enough rights";
break;
case ERR_TOO_FREQUENT_REQUESTS:
error_string="Too frequent requests";
break;
case ERR_MALFUNCTIONAL_TRADE:
error_string="Malfunctional trade operation";
break;
// ... يمكنك إضافة المزيد من أكواد الأخطاء هنا
default:
error_string="Unknown error";
}
return(error_string);
}
- 31-08-2024, 03:55 PM #3
جرب المرفق..
- 31-08-2024, 08:59 PM #4
و عليكم السلام و رحمه الله و بركاته
تفضل اخى راجع هذا الموضوع به مرفق بطلبك
https://forum.arabictrader.com/t266427.html
- 01-09-2024, 08:01 AM #5
- 01-09-2024, 08:03 AM #6
- 14-09-2024, 09:01 PM #7
يعطيكم العافية اخواني
- 14-09-2024, 09:02 PM #8
يعطيكم العافية اخواني