دانلود اکسپرت AK-47 Scalper | بهترین ابزار برای معاملات سریع در متاتریدر 5
اکسپرت AK-47 Scalper با هدف ارائه یک استراتژی معاملاتی مؤثر در بازار فارکس طراحی شده است. ویژگیهای اصلی این اکسپرت به شرح زیر است:
1. پارامترهای ورودی
این اکسپرت شامل تعدادی پارامتر ورودی است که میتوان آنها را مطابق با نیازهای شخصی تنظیم کرد.
#define ExtBotName "AK-47 EA" //Bot Name
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\OrderInfo.mqh>
//--- introduce predefined variables for code readability
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
input string EASettings = "---------------------------------------------"; //-------- <EA Settings> --------
input int InpMagicNumber = 124656; //Magic Number
input string MoneySettings = "---------------------------------------------"; //-------- <Money Settings> --------
input bool isVolume_Percent = true; //Allow Volume Percent
input double InpRisk = 3; //Risk Percentage of Balance (%)
input string TradingSettings = "---------------------------------------------"; //-------- <Trading Settings> --------
input double Inpuser_lot = 0.01; //Lots
input double InpSL_Pips = 3.5; //Stoploss (in Pips)
input double InpTP_Pips = 7; //TP (in Pips) (0 = No TP)
input int InpMax_slippage = 3; //Maximum slippage allow_Pips.
input double InpMax_spread = 5; //Maximum allowed spread (in Point) (0 = floating)
input string TimeSettings = "---------------------------------------------"; //-------- <Trading Time Settings> --------
input bool InpTimeFilter = true; //Trading Time Filter
input int InpStartHour = 2; //Start Hour
input int InpStartMinute = 30; //Start Minute
input int InpEndHour = 21; //End Hour
input int InpEndMinute = 0; //End Minute
#define ExtBotName "AK-47 EA" //Bot Name
#define Version "1.00"
//Import inputal class
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\OrderInfo.mqh>
//--- introduce predefined variables for code readability
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
//--- input parameters
input string EASettings = "---------------------------------------------"; //-------- <EA Settings> --------
input int InpMagicNumber = 124656; //Magic Number
input string MoneySettings = "---------------------------------------------"; //-------- <Money Settings> --------
input bool isVolume_Percent = true; //Allow Volume Percent
input double InpRisk = 3; //Risk Percentage of Balance (%)
input string TradingSettings = "---------------------------------------------"; //-------- <Trading Settings> --------
input double Inpuser_lot = 0.01; //Lots
input double InpSL_Pips = 3.5; //Stoploss (in Pips)
input double InpTP_Pips = 7; //TP (in Pips) (0 = No TP)
input int InpMax_slippage = 3; //Maximum slippage allow_Pips.
input double InpMax_spread = 5; //Maximum allowed spread (in Point) (0 = floating)
input string TimeSettings = "---------------------------------------------"; //-------- <Trading Time Settings> --------
input bool InpTimeFilter = true; //Trading Time Filter
input int InpStartHour = 2; //Start Hour
input int InpStartMinute = 30; //Start Minute
input int InpEndHour = 21; //End Hour
input int InpEndMinute = 0; //End Minute
#define ExtBotName "AK-47 EA" //Bot Name
#define Version "1.00"
//Import inputal class
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\OrderInfo.mqh>
//--- introduce predefined variables for code readability
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
//--- input parameters
input string EASettings = "---------------------------------------------"; //-------- <EA Settings> --------
input int InpMagicNumber = 124656; //Magic Number
input string MoneySettings = "---------------------------------------------"; //-------- <Money Settings> --------
input bool isVolume_Percent = true; //Allow Volume Percent
input double InpRisk = 3; //Risk Percentage of Balance (%)
input string TradingSettings = "---------------------------------------------"; //-------- <Trading Settings> --------
input double Inpuser_lot = 0.01; //Lots
input double InpSL_Pips = 3.5; //Stoploss (in Pips)
input double InpTP_Pips = 7; //TP (in Pips) (0 = No TP)
input int InpMax_slippage = 3; //Maximum slippage allow_Pips.
input double InpMax_spread = 5; //Maximum allowed spread (in Point) (0 = floating)
input string TimeSettings = "---------------------------------------------"; //-------- <Trading Time Settings> --------
input bool InpTimeFilter = true; //Trading Time Filter
input int InpStartHour = 2; //Start Hour
input int InpStartMinute = 30; //Start Minute
input int InpEndHour = 21; //End Hour
input int InpEndMinute = 0; //End Minute
2. مقداردهی اولیه متغیرهای محلی
در این مرحله، متغیرهای محلی مورد نیاز برای عملکرد اکسپرت مقداردهی اولیه میشوند. این کار به تضمین عملکرد درست و بهینه اکسپرت کمک میکند.
int Pips2Points; // slippage 3 pips 3=points 30=points
double Pips2Double; // Stoploss 15 pips 0.015 0.0150
CPositionInfo m_position; // trade position object
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object
CAccountInfo m_account; // account info wrapper
COrderInfo m_order; // pending orders object
//--- Variables
int Pips2Points; // slippage 3 pips 3=points 30=points
double Pips2Double; // Stoploss 15 pips 0.015 0.0150
bool isOrder = false;
int slippage;
long acSpread;
string strComment = "";
CPositionInfo m_position; // trade position object
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object
CAccountInfo m_account; // account info wrapper
COrderInfo m_order; // pending orders object
//--- Variables
int Pips2Points; // slippage 3 pips 3=points 30=points
double Pips2Double; // Stoploss 15 pips 0.015 0.0150
bool isOrder = false;
int slippage;
long acSpread;
string strComment = "";
CPositionInfo m_position; // trade position object
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object
CAccountInfo m_account; // account info wrapper
COrderInfo m_order; // pending orders object
3. کد اصلی
این بخش شامل منطق اصلی اکسپرت است که در آن معاملات بر اساس سیگنالهای تحلیلی باز و بسته میشوند.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
//3 or 5 digits detection
slippage = 10* InpMax_slippage;
slippage = InpMax_slippage;
if(!m_symbol.Name(Symbol())) // sets symbol name
m_trade.SetExpertMagicNumber(InpMagicNumber);
m_trade.SetTypeFillingBySymbol(m_symbol.Name());
m_trade.SetDeviationInPoints(slippage);
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
//3 or 5 digits detection
//Pip and point
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())) // sets symbol name
return(INIT_FAILED);
RefreshRates();
//---
m_trade.SetExpertMagicNumber(InpMagicNumber);
m_trade.SetMarginMode();
m_trade.SetTypeFillingBySymbol(m_symbol.Name());
m_trade.SetDeviationInPoints(slippage);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
//3 or 5 digits detection
//Pip and point
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())) // sets symbol name
return(INIT_FAILED);
RefreshRates();
//---
m_trade.SetExpertMagicNumber(InpMagicNumber);
m_trade.SetMarginMode();
m_trade.SetTypeFillingBySymbol(m_symbol.Name());
m_trade.SetDeviationInPoints(slippage);
//---
return(INIT_SUCCEEDED);
}

برای سفارش و کسب اطلاعات بیشتر با شماره 09364549266 تماس حاصل نمایید
عملکرد تیک خبره
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {
Comment("LazyBot\nTrade not allowed.");
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";
//Dieu kien giao dich theo phien My
if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {
if(!isOrder) OpenOrder();
if(!isOrder) OpenOrder();
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() {
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {
Comment("LazyBot\nTrade not allowed.");
return;
}
MqlDateTime structTime;
TimeCurrent(structTime);
structTime.sec = 0;
//Set starting time
structTime.hour = InpStartHour;
structTime.min = InpStartMinute;
datetime timeStart = StructToTime(structTime);
//Set Ending time
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);
//Update Values
UpdateOrders();
TrailingStop();
//Dieu kien giao dich theo phien My
if(InpTimeFilter) {
if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {
if(!isOrder) OpenOrder();
}
}
else {
if(!isOrder) OpenOrder();
}
} //---End fuction
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() {
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {
Comment("LazyBot\nTrade not allowed.");
return;
}
MqlDateTime structTime;
TimeCurrent(structTime);
structTime.sec = 0;
//Set starting time
structTime.hour = InpStartHour;
structTime.min = InpStartMinute;
datetime timeStart = StructToTime(structTime);
//Set Ending time
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);
//Update Values
UpdateOrders();
TrailingStop();
//Dieu kien giao dich theo phien My
if(InpTimeFilter) {
if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {
if(!isOrder) OpenOrder();
}
}
else {
if(!isOrder) OpenOrder();
}
} //---End fuction
3.1 محاسبه سیگنال برای ارسال سفارشات
اکسپرت با استفاده از سیگنالهای تحلیلی، زمان مناسب برای باز کردن سفارشات خرید یا فروش را تعیین میکند.
//+------------------------------------------------------------------+
//| CALCULATE SIGNAL AND SEND ORDER |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Check Balance khi lenh cho duoc Hit
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)) //Check Balance khi lenh cho duoc Hit
if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// use "ORDER_TIME_GTC" when expiration date = 0
Print(__FUNCTION__,"--> OrderSend error ", m_trade.ResultComment());
//+------------------------------------------------------------------+
//| CALCULATE SIGNAL AND SEND ORDER |
//+------------------------------------------------------------------+
void OpenOrder(){
ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;
double TP = 0;
double SL = 0;
string comment = ExtBotName;
//Calculate Lots
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Check Balance khi lenh cho duoc Hit
{
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)) //Check Balance khi lenh cho duoc Hit
{
if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// use "ORDER_TIME_GTC" when expiration date = 0
Print(__FUNCTION__,"--> OrderSend error ", m_trade.ResultComment());
}
}
}
//+------------------------------------------------------------------+
//| CALCULATE SIGNAL AND SEND ORDER |
//+------------------------------------------------------------------+
void OpenOrder(){
ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;
double TP = 0;
double SL = 0;
string comment = ExtBotName;
//Calculate Lots
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Check Balance khi lenh cho duoc Hit
{
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() //Check Spread
&& CheckVolumeValue(lot1) //Check volume
&& CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) //Check Dist from openPrice to Bid
&& CheckStopLoss(OpenPrice, SL, TP) //Check Dist from SL, TP to OpenPrice
&& CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)) //Check Balance khi lenh cho duoc Hit
{
if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// use "ORDER_TIME_GTC" when expiration date = 0
Print(__FUNCTION__,"--> OrderSend error ", m_trade.ResultComment());
}
}
}
3.2 محاسبه حجم
حجم معاملات به طور خودکار بر اساس شرایط بازار و استراتژی معاملاتی تعیین میشود.
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// We define the function to calculate the position size and return the lot to order.
double CalculateVolume() {
if(isVolume_Percent == false) {
LotSize = (InpRisk) * m_account.FreeMargin();
LotSize = LotSize /100000;
double n = MathFloor(LotSize/Inpuser_lot);
LotSize = n * Inpuser_lot;
if(LotSize < Inpuser_lot)
if(LotSize > m_symbol.LotsMax()) LotSize = m_symbol.LotsMax();
if(LotSize < m_symbol.LotsMin()) LotSize = m_symbol.LotsMin();
//+------------------------------------------------------------------+
//| CALCULATE VOLUME |
//+------------------------------------------------------------------+
// We define the function to calculate the position size and return the lot to order.
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);
}
//+------------------------------------------------------------------+
//| CALCULATE VOLUME |
//+------------------------------------------------------------------+
// We define the function to calculate the position size and return the lot to order.
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 عملکرد “Trailing Stop”
این اکسپرت از عملکرد “Trailing Stop” استفاده میکند که به این معنی است که سطح توقف ضرر (SL) هر بار که قیمت تغییر میکند، بهطور خودکار تنظیم میشود. این ویژگی به معاملهگران کمک میکند تا از سودهای کسب شده محافظت کرده و ریسکهای خود را کاهش دهند.
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
for(int i = PositionsTotal() - 1; i >= 0; i--) {
if(m_position.SelectByIndex(i)) { // selects the orders by index for further access to its properties
if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {
if(m_position.PositionType() == POSITION_TYPE_BUY) {
//--Calculate SL when price changed
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());
else if(m_position.PositionType() == POSITION_TYPE_SELL) {
//--Calculate SL when price changed
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());
//--- Modify pending order
for(int i=OrdersTotal()-1; i>=0; i--) {// returns the number of current orders
if(m_order.SelectByIndex(i)) { // selects the pending order by index for further access to its properties
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());
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());
//+------------------------------------------------------------------+
//| TRAILING STOP |
//+------------------------------------------------------------------+
void TrailingStop() {
double SL_in_Pip = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--) {
if(m_position.SelectByIndex(i)) { // selects the orders by index for further access to its properties
if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {
// For Buy oder
if(m_position.PositionType() == POSITION_TYPE_BUY) {
//--Calculate SL when price changed
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;
}
}
}
//For Sell Order
else if(m_position.PositionType() == POSITION_TYPE_SELL) {
//--Calculate SL when price changed
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;
}
}
}
}
}
}
//--- Modify pending order
for(int i=OrdersTotal()-1; i>=0; i--) {// returns the number of current orders
if(m_order.SelectByIndex(i)) { // selects the pending order by index for further access to its properties
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;
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| TRAILING STOP |
//+------------------------------------------------------------------+
void TrailingStop() {
double SL_in_Pip = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--) {
if(m_position.SelectByIndex(i)) { // selects the orders by index for further access to its properties
if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {
// For Buy oder
if(m_position.PositionType() == POSITION_TYPE_BUY) {
//--Calculate SL when price changed
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;
}
}
}
//For Sell Order
else if(m_position.PositionType() == POSITION_TYPE_SELL) {
//--Calculate SL when price changed
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;
}
}
}
}
}
}
//--- Modify pending order
for(int i=OrdersTotal()-1; i>=0; i--) {// returns the number of current orders
if(m_order.SelectByIndex(i)) { // selects the pending order by index for further access to its properties
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 Scalper با ترکیب تکنیکهای پیشرفته تحلیلی و مدیریت ریسک، به کاربران این امکان را میدهد تا با اعتماد به نفس بیشتری در بازارهای نوسانی تجارت کنند. این ابزار به طور خاص برای معاملهگران فعال و اسکلپرها طراحی شده است که به دنبال کسب سودهای سریع در شرایط متغیر بازار هستند.
شیوه کامپایل گرفتن فایل های اکسپرت و ایجاد فایل اجرایی برای اجرای اکسپرت در متاتریدر
نظرات کاربران