MetaTrader5
Lazy Bot MT5: दैनिक ब्रेकआउट EA के लिए आपका साथी
Lazy Bot MT5 (दैनिक ब्रेकआउट EA)
नमस्ते ट्रेडर्स! आज हम बात करेंगे Lazy Bot MT5 के बारे में, जो कि MetaTrader 5 के लिए एक बेहतरीन एक्सपर्ट एडवाइज़र है। यह बॉट खास तौर पर उन ट्रेडर्स के लिए डिजाइन किया गया है जो दैनिक ब्रेकआउट ट्रेडिंग रणनीति को अपनाना चाहते हैं।
1. इनपुट पैरामीटर्स
// एक्सटर्नल क्लास को इम्पोर्ट करें
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\OrderInfo.mqh>
// कोड पढ़ने में आसानी के लिए पूर्वनिर्धारित वेरिएबल्स
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
// इनपुट पैरामीटर्स
input string EASettings = "---------------------------------------------";
input int InpMagicNumber = 123456; // मैजिक नंबर
input string InpBotName = "LazyBot_V1"; // बॉट का नाम
input double Inpuser_lot = 0.01; // लॉट्स
input double Inpuser_SL = 5.0; // स्टॉपलॉस (पिप्स में)
input double InpAddPrice_pip = 0; // OP_Price के लिए [H], [L] से दूरी (पिप्स में)
input int Inpuser_SLippage = 3; // अधिकतम स्लिपेज अनुमति (पिप्स में)
input double InpMax_spread = 0; // अधिकतम स्प्रेड अनुमति (पिप्स में) (0 = फ्लोटिंग)
input bool isTradingTime = true; // ट्रेडिंग समय की अनुमति
input int InpStartHour = 7; // शुरू होने का समय
input int InpEndHour = 22; // समाप्ति समय
input bool isVolume_Percent = false; // वॉल्यूम प्रतिशत की अनुमति
input double InpRisk = 1; // बैलेंस का जोखिम प्रतिशत (%)
2. लोकल वेरिएबल्स का इनिशियलाइजेशन
// लोकल पैरामीटर्स
datetime last;
int totalBars;
int Pips2Points; // स्लिपेज 3 पिप्स
double Pips2Double; // स्टॉपलॉस 15 पिप्स
double slippage;
double acSpread;
string strComment = "";
CPositionInfo m_position; // ट्रेड पोजिशन ऑब्जेक्ट
CTrade m_trade; // ट्रेडिंग ऑब्जेक्ट
CSymbolInfo m_symbol; // सिम्बल जानकारी ऑब्जेक्ट
CAccountInfo m_account; // खाता जानकारी रैपर
COrderInfo m_order; // पेंडिंग ऑर्डर ऑब्जेक्ट
3. मुख्य कोड
इस स्ट्रैटेजी के अंतर्गत, हर दिन बॉट सभी पुराने ऑर्डर को हटा देगा और पिछले दिन के सबसे उच्चतम और न्यूनतम मूल्य को खोजेगा, और दो पेंडिंग ऑर्डर BUY_STOP और SELL_STOP भेजेगा। (कोई टेक प्रॉफिट नहीं होगा।)
3.1 सिग्नल की गणना और ऑर्डर भेजें
// गणना सिग्नल और ऑर्डर भेजें
void OpenOrder()
{
double TP_Buy = 0, TP_Sell = 0;
double SL_Buy = 0, SL_Sell = 0;
// अधिकतम स्प्रेड की जाँच करें
if (InpMax_spread != 0) {
if (acSpread > InpMax_spread) {
Print(__FUNCTION__, " > वर्तमान स्प्रेड उपयोगकर्ता स्प्रेड से अधिक है!...");
return;
}
}
double Bar1High = m_symbol.NormalizePrice(iHigh(m_symbol.Name(), PERIOD_D1, 1));
double Bar1Low = m_symbol.NormalizePrice(iLow(m_symbol.Name(), PERIOD_D1, 1));
// लॉट की गणना करें
double lot1 = CalculateVolume();
double OpenPrice = m_symbol.NormalizePrice(Bar1High + InpAddPrice_pip * Pips2Double);
// BUY_STOP के लिए
SL_Buy = m_symbol.NormalizePrice(OpenPrice - Inpuser_SL * Pips2Double);
totalBars = iBars(m_symbol.Name(), PERIOD_D1);
string comment = InpBotName + ";" + m_symbol.Name() + ";" + totalBars;
if (CheckVolumeValue(lot1)
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice)
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)
&& CheckStopLoss(OpenPrice, SL_Buy)) {
if (!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL_Buy, TP_Buy, ORDER_TIME_GTC, 0, comment))
Print(__FUNCTION__, "--> खरीदने में त्रुटि");
}
// SELL_STOP के लिए
OpenPrice = m_symbol.NormalizePrice(Bar1Low - InpAddPrice_pip * Pips2Double);
SL_Sell = m_symbol.NormalizePrice(OpenPrice + Inpuser_SL * Pips2Double);
if (CheckVolumeValue(lot1)
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice)
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)
&& CheckStopLoss(OpenPrice, SL_Sell)) {
if (!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL_Sell, TP_Sell, ORDER_TIME_GTC, 0, comment))
Print(__FUNCTION__, "--> बेचने में त्रुटि");
}
}
3.2 नए दिन में सभी पुराने ऑर्डर हटाएं
// पुराने ऑर्डर्स को हटाएं
void DeleteOldOrds()
{
string sep = ";";
ushort u_sep;
string result[];
for (int i = OrdersTotal() - 1; i >= 0; i--) {
if (m_order.SelectByIndex(i)) {
u_sep = StringGetCharacter(sep, 0);
string Ordcomment = m_order.Comment();
int k = StringSplit(Ordcomment, u_sep, result);
if (k > 2) {
string sym = m_symbol.Name();
if ((m_order.Magic() == InpMagicNumber) && (sym == result[1])) {
m_trade.OrderDelete(m_order.Ticket());
}
}
}
}
}
3.3 EA में ट्रेलिंग स्टॉपलॉस का फ़ंक्शन है
// ट्रेलिंग स्टॉपलॉस
void TrailingSL()
{
double SL_in_Pip = 0;
for (int i = PositionsTotal() - 1; i >= 0; i--) {
if (m_position.SelectByIndex(i)) {
if ((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {
double order_stoploss1 = m_position.StopLoss();
if (m_position.PositionType() == POSITION_TYPE_BUY) {
SL_in_Pip = NormalizeDouble((Bid - order_stoploss1), _Digits) / Pips2Double;
if (SL_in_Pip > Inpuser_SL) {
order_stoploss1 = NormalizeDouble(Bid - (Inpuser_SL * Pips2Double), _Digits);
m_trade.PositionModify(m_position.Ticket(), order_stoploss1, m_position.TakeProfit());
}
}
if (m_position.PositionType() == POSITION_TYPE_SELL) {
SL_in_Pip = NormalizeDouble((m_position.StopLoss() - Ask), _Digits) / Pips2Double;
if (SL_in_Pip > Inpuser_SL) {
order_stoploss1 = NormalizeDouble(Ask + (Inpuser_SL * Pips2Double), _Digits);
m_trade.PositionModify(m_position.Ticket(), order_stoploss1, m_position.TakeProfit());
}
}
}
}
}
}
3.4 वॉल्यूम वैल्यू की जांच करें
// ऑर्डर वॉल्यूम की जांच करें
bool CheckVolumeValue(double volume) {
double min_volume = m_symbol.LotsMin();
double max_volume = m_symbol.LotsMax();
double volume_step = m_symbol.LotsStep();
if (volume < min_volume || volume > max_volume) {
return false;
}
int ratio = (int)MathRound(volume / volume_step);
if (MathAbs(ratio * volume_step - volume) > 0.0000001) {
return false;
}
return true;
}
3.5 फ्रीज़ लेवल की जांच करें
// फ्रीज़ लेवल की जांच करें
bool CheckOrderForFREEZE_LEVEL(ENUM_ORDER_TYPE type, double price) {
int freeze_level = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL);
bool check = false;
switch (type) {
case ORDER_TYPE_BUY_STOP:
check = ((price - Ask) > freeze_level * _Point);
return check;
case ORDER_TYPE_SELL_STOP:
check = ((Bid - price) > freeze_level * _Point);
return check;
}
return false;
}
3.6 ट्रेड के लिए पैसे की जांच करें
// ट्रेड के लिए पैसे की जांच करें
bool CheckMoneyForTrade(string symb, double lots, ENUM_ORDER_TYPE type) {
MqlTick mqltick;
SymbolInfoTick(symb, mqltick);
double price = mqltick.ask;
if (type == ORDER_TYPE_SELL)
price = mqltick.bid;
double margin, free_margin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
if (!OrderCalcMargin(type, symb, lots, price, margin)) {
Print("Error in ", __FUNCTION__, " code=", GetLastError());
return false;
}
if (margin > free_margin) {
Print("Not enough money for ", EnumToString(type), " ", lots, " ", symb, " Error code=", GetLastError());
return false;
}
return true;
}
3.7 स्टॉपलॉस की जांच करें
// स्टॉपलॉस की जांच करें
bool CheckStopLoss(double price, double SL) {
int stops_level = (int)SymbolInfoInteger(m_symbol.Name(), SYMBOL_TRADE_STOPS_LEVEL);
if (stops_level != 0) {
PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must not be nearer than %d points from the closing price", stops_level, stops_level);
}
return MathAbs(price - SL) > (stops_level * m_symbol.Point());
}
वीडियो ट्यूटोरियल्स
वीडियो MQL4:
वीडियो MQL5:
2022.12.14