क्या आप मेटाट्रेडर 5 पर ट्रेडिंग के लिए एक बेहतरीन एक्सपर्ट एडवाइजर (EA) की तलाश कर रहे हैं? तो आपका इंतज़ार खत्म हुआ! आज हम बात करेंगे AK-47 स्कैल्पर EA के बारे में, जो आपके ट्रेडिंग अनुभव को और भी बेहतर बना सकता है।
1. इनपुट पैरामीटर
#define ExtBotName "AK-47 EA"//बॉट का नाम #define Version "1.00" //इनपुट क्लास का आयात #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 = "---------------------------------------------"; //-------- <EA सेटिंग्स> -------- input int InpMagicNumber = 124656; //मैजिक नंबर input string MoneySettings = "---------------------------------------------"; //-------- <पैसे की सेटिंग्स> -------- input bool isVolume_Percent = true; //वॉल्यूम प्रतिशत की अनुमति दें input double InpRisk = 3; //बैलेंस का जोखिम प्रतिशत (%) input string TradingSettings = "---------------------------------------------"; //-------- <ट्रेडिंग सेटिंग्स> -------- input double Inpuser_lot = 0.01; //लॉट्स input double InpSL_Pips = 3.5; //स्टॉपलॉस (पिप्स में) input double InpTP_Pips = 7; //टीपी (पिप्स में) (0 = कोई टीपी नहीं) input int InpMax_slippage = 3; //अधिकतम स्लिपेज की अनुमति (पिप्स में) input double InpMax_spread = 5; //अधिकतम अनुमति दी गई स्प्रेड (पॉइंट में) (0 = फ्लोटिंग) input string TimeSettings = "---------------------------------------------"; //-------- <ट्रेडिंग टाइम सेटिंग्स> -------- input bool InpTimeFilter = true; //ट्रेडिंग टाइम फ़िल्टर input int InpStartHour = 2; //शुरू करने का घंटा input int InpStartMinute = 30; //शुरू करने का मिनट input int InpEndHour = 21; //समाप्त करने का घंटा input int InpEndMinute = 0 //समाप्त करने का मिनट
2. स्थानीय वेरिएबल्स का प्रारंभ
//--- वेरिएबल्स int Pips2Points; // स्लिपेज 3 पिप्स 3=पॉइंट्स 30=पॉइंट्स double Pips2Double; // स्टॉपलॉस 15 पिप्स 0.015 0.0150 bool isOrder = false; int slippage; long acSpread; string strComment = ""; CPositionInfo m_position; // ट्रेड पोजीशन ऑब्जेक्ट CTrade m_trade; // ट्रेडिंग ऑब्जेक्ट CSymbolInfo m_symbol; // प्रतीक जानकारी ऑब्जेक्ट CAccountInfo m_account; // खाता जानकारी रैपर COrderInfo m_order; // पेंडिंग ऑर्डर्स ऑब्जेक्ट
3. मुख्य कोड
a/ एक्सपर्ट प्रारंभिककरण फ़ंक्शन
//+------------------------------------------------------------------+ //| एक्सपर्ट प्रारंभिककरण फ़ंक्शन | //+------------------------------------------------------------------+ int OnInit() { //3 या 5 डिजिट पहचान //पिप और पॉइंट if(_Digits % 2 == 1) { Pips2Double = _Point*10; Pips2Points = 10; slippage = 10* InpMax_slippage; } else { Pips2Double = _Point; Pips2Points = 1; slippage = InpMax_slippage; } if(!m_symbol.Name(Symbol())) // प्रतीक नाम सेट करता है return(INIT_FAILED); RefreshRates(); //--- m_trade.SetExpertMagicNumber(InpMagicNumber); m_trade.SetMarginMode(); m_trade.SetTypeFillingBySymbol(m_symbol.Name()); m_trade.SetDeviationInPoints(slippage); //--- return(INIT_SUCCEEDED); }
b/ एक्सपर्ट टिक फ़ंक्शन
//+------------------------------------------------------------------+ //| एक्सपर्ट टिक फ़ंक्शन | //+------------------------------------------------------------------+ void OnTick() { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) { Comment("LazyBot\nTrade not allowed."); return; } MqlDateTime structTime; TimeCurrent(structTime); structTime.sec = 0; //शुरू करने का समय सेट करें structTime.hour = InpStartHour; structTime.min = InpStartMinute; datetime timeStart = StructToTime(structTime); //समाप्त करने का समय सेट करें structTime.hour = InpEndHour; structTime.min = InpEndMinute; datetime timeEnd = StructToTime(structTime); acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD); strComment = "\n" + ExtBotName + " - v." + (string)Version; strComment += "\nSever time = " + TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week); strComment += "\nTrading time = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " + (string)InpEndHour + "h" + (string)InpEndMinute + "]"; strComment += "\nCurrent Spread = " + (string)acSpread + " Points"; Comment(strComment); //अपडेट मान UpdateOrders(); TrailingStop(); //माय फेज के अनुसार ट्रेडिंग की स्थिति if(InpTimeFilter) { if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) { if(!isOrder) OpenOrder(); } } else { if(!isOrder) OpenOrder(); } } //---समाप्त फ़ंक्शन
3.1 ऑर्डर भेजने के लिए सिग्नल की गणना करें
//+------------------------------------------------------------------+ //| सिग्नल की गणना करें और ऑर्डर भेजें | //+------------------------------------------------------------------+ void OpenOrder(){ ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1; double TP = 0; double SL = 0; string comment = ExtBotName; //लॉट्स की गणना करें double lot1 = CalculateVolume(); if(OrdType == ORDER_TYPE_SELL) { double OpenPrice = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); TP = OpenPrice - NormalizeDouble(InpTP_Pips * Pips2Double, _Digits); SL = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); if(CheckSpreadAllow() //स्प्रेड की जांच करें && CheckVolumeValue(lot1) //वॉल्यूम की जांच करें && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) //खुले मूल्य से बिड़ के लिए दूरी की जांच करें && CheckStopLoss(OpenPrice, SL, TP) //SL, TP से खुले मूल्य की दूरी की जांच करें && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //जब ऑर्डर फायर हो तो बैलेंस की जांच करें { if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment)) Print(__FUNCTION__,"--> OrderSend error ", m_trade.ResultComment()); } } else if(OrdType == ORDER_TYPE_BUY) { double OpenPrice = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); SL = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); if(CheckSpreadAllow() //स्प्रेड की जांच करें && CheckVolumeValue(lot1) //वॉल्यूम की जांच करें && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) //खुले मूल्य से बिड़ के लिए दूरी की जांच करें && CheckStopLoss(OpenPrice, SL, TP) //SL, TP से खुले मूल्य की दूरी की जांच करें && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)) //जब ऑर्डर फायर हो तो बैलेंस की जांच करें { if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// उपयोग करें "ORDER_TIME_GTC" जब समाप्ति तिथि = 0 Print(__FUNCTION__,"--> OrderSend error ", m_trade.ResultComment()); } } }
3.2 वॉल्यूम की गणना करें
//+------------------------------------------------------------------+ //| वॉल्यूम की गणना करें | //+------------------------------------------------------------------+ // हम स्थिति का आकार की गणना करने के लिए फ़ंक्शन को परिभाषित करते हैं और ऑर्डर के लिए लॉट लौटाते हैं। double CalculateVolume() { double LotSize = 0; if(isVolume_Percent == false) { LotSize = Inpuser_lot; } else { LotSize = (InpRisk) * m_account.FreeMargin(); LotSize = LotSize /100000; double n = MathFloor(LotSize/Inpuser_lot); //Comment((string)n); LotSize = n * Inpuser_lot; if(LotSize < Inpuser_lot) LotSize = Inpuser_lot; if(LotSize > m_symbol.LotsMax()) LotSize = m_symbol.LotsMax(); if(LotSize < m_symbol.LotsMin()) LotSize = m_symbol.LotsMin(); } //--- return(LotSize); }
3.3 EA में "ट्रेलिंग स्टॉप" फ़ंक्शन है
SL हर बार मूल्य परिवर्तन (नीचे) होने पर बदल जाएगा।
//+------------------------------------------------------------------+ //| ट्रेलिंग स्टॉप | //+------------------------------------------------------------------+ void TrailingStop() { 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())) { // खरीद आदेश के लिए if(m_position.PositionType() == POSITION_TYPE_BUY) { //-- मूल्य परिवर्तन होने पर SL की गणना करें SL_in_Pip = NormalizeDouble(Bid - m_position.StopLoss(), _Digits) / Pips2Double; if(SL_in_Pip > InpSL_Pips) { double newSL = NormalizeDouble(Bid - InpSL_Pips * Pips2Double, _Digits); if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) { Print(__FUNCTION__,"--> OrderModify error ", m_trade.ResultComment()); continue } } } //सेल ऑर्डर के लिए else if(m_position.PositionType() == POSITION_TYPE_SELL) { //-- मूल्य परिवर्तन होने पर SL की गणना करें SL_in_Pip = NormalizeDouble(m_position.StopLoss() - Bid, _Digits) / Pips2Double; if(SL_in_Pip > InpSL_Pips){ double newSL = NormalizeDouble(Bid + (InpSL_Pips) * Pips2Double, _Digits); if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) { Print(__FUNCTION__,"--> OrderModify error ", m_trade.ResultComment()); //continue; } } } } } } //--- पेंडिंग ऑर्डर को संशोधित करें for(int i=OrdersTotal()-1; i>=0; i--) {// वर्तमान आदेशों की संख्या लौटाती है if(m_order.SelectByIndex(i)) { // आगे की पहुँच के लिए अनुक्रमांक द्वारा पेंडिंग ऑर्डर का चयन करता है if(m_order.Symbol() == m_symbol.Name() && m_order.Magic()==InpMagicNumber) { if(m_order.OrderType() == ORDER_TYPE_BUY_STOP) { SL_in_Pip = NormalizeDouble(Bid - m_order.StopLoss(), _Digits) / Pips2Double; if(SL_in_Pip < InpSL_Pips/2) { double newOP = NormalizeDouble(Bid + (InpSL_Pips/2) * Pips2Double, _Digits); double newTP = NormalizeDouble(newOP + InpTP_Pips * Pips2Double, _Digits); double newSL = NormalizeDouble(Bid - (InpSL_Pips/2) * Pips2Double, _Digits); if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) { Print(__FUNCTION__,"--> Modify PendingOrder error!", m_trade.ResultComment()); continue } } } } else if(m_order.OrderType() == ORDER_TYPE_SELL_STOP) { SL_in_Pip = NormalizeDouble(m_order.StopLoss() - Ask, _Digits) / Pips2Double; if(SL_in_Pip < InpSL_Pips/2){ double newOP = NormalizeDouble(Ask - (InpSL_Pips/2) * Pips2Double, _Digits); double newTP = NormalizeDouble(newOP - InpTP_Pips * Pips2Double, _Digits); double newSL = NormalizeDouble(Ask + (InpSL_Pips/2) * Pips2Double, _Digits); if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) { Print(__FUNCTION__,"--> Modify PendingOrder error!", m_trade.ResultComment()); //continue; } } } } } } } }
अब आप जानते हैं कि AK-47 स्कैल्पर EA का उपयोग कैसे करें और इसके द्वारा प्रदान की गई सुविधाओं का लाभ कैसे उठाएं। अपने ट्रेडिंग अनुभव को बेहतर बनाने के लिए आज ही इसे आजमाएं!
टिप्पणी 0