You are on page 1of 3

//+------------------------------------------------------------------+

//| BAI 7 TRAILING STOP.mq5 |


//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+
//| KHAI BAO THU VIEN
#include<Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Object.mqh>
CTrade trade;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+
void OnTick()
{
//---
AutoSL();
TrailingStop();
Show();

}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

input double TPPoint=500; //Take Profit/ Stop Loss (Point)


input double TSPoint=100; //TrailingStop (Point)

int dem = 0; // Khai báo biến để lưu tổng lệnh được auto đặt SL, TP
int cmd = 0; // Số lệnh đang tồn tại
int PriceUp_TS = 0; // Giá TrailingStop UP
int PriceDown_TS = 0; // Giá TrailingStop Down

//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+


//+------------------------------------------------------------------+
void AutoSL() // Chương trình con đặt SL, TP
{
//---

Page 1/3
double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double AskUp = NormalizeDouble(Ask + TPPoint*_Point,5);
double AskDown = NormalizeDouble(Ask - TPPoint*_Point,5);

if (PositionSelect(_Symbol)==true)
{

for(int i=PositionsTotal()-1; i>=0;i--)


{
ulong PositionTicket=PositionGetTicket(i);
string PositionSymbol=PositionGetString(POSITION_SYMBOL);
double P_SL=PositionGetDouble(POSITION_SL);
ENUM_POSITION_TYPE PositionType = (ENUM_POSITION_TYPE)
PositionGetInteger(POSITION_TYPE);

if((PositionSymbol==_Symbol)&&P_SL==0&&PositionType==0)
// PositionType==0 BUY
{
trade.PositionModify(PositionTicket,AskDown,AskUp);
}

if((PositionSymbol==_Symbol)&&P_SL==0&&PositionType==1)
// PositionType==1 SELL
{
trade.PositionModify(PositionTicket,AskUp,AskDown);
}
if(PositionSymbol==_Symbol)
{
cmd++;
}
}

if(cmd > 0)
{
if(PriceUp_TS == 0 || PriceDown_TS == 0)
{
PriceUp_TS = NormalizeDouble(AskUp - TSPoint*_Point/2,5);
PriceDown_TS = NormalizeDouble(AskDown + TSPoint*_Point/2,5);
}
}
if(cmd == 0)
{
PriceUp_TS = 0;
PriceDown_TS = 0;

}
}

}
//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+
//+------------------------------------------------------------------+
void TrailingStop()
{
//--------------------------------------------------------
if (PositionSelect(_Symbol)==true)
{
double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double PriceUp = NormalizeDouble(Ask + TSPoint*_Point,5);
double PriceDown = NormalizeDouble(Ask - TSPoint*_Point,5);

if (Ask >= PriceUp_TS || Ask <= PriceDown_TS)

Page 2/3
{
for(int i=PositionsTotal()-1; i>=0;i--)
{
ulong PositionTicket=PositionGetTicket(i);
string PositionSymbol=PositionGetString(
POSITION_SYMBOL);

ENUM_POSITION_TYPE PositionType = (ENUM_POSITION_TYPE)


PositionGetInteger(POSITION_TYPE);
double P_SL=PositionGetDouble(POSITION_SL);
double P_TP=PositionGetDouble(POSITION_TP);

// BUY TRAIDING STOP


if((PositionSymbol==_Symbol)&&PositionType==0)
// PositionType==0 BUY
{
trade.PositionModify(PositionTicket,PriceDown,
PriceUp);
}

// SELL TRAIDING STOP


if((PositionSymbol==_Symbol)&&PositionType==1)
// PositionType==1 SELL
{
trade.PositionModify(PositionTicket,PriceUp,
PriceDown);
}
dem++;
}

PriceUp_TS = NormalizeDouble(PriceUp - TSPoint*_Point/2,5


);
PriceDown_TS = NormalizeDouble(PriceDown + TSPoint*_Point
/2,5);
}

//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+


//------------------------------------------------------------------

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void Show()
{
Comment(
"\n",
"Số lệnh TrailingStop ", (string)dem,"\n",
"Số lệnh đang tồn tại ", (string)cmd
);

Sleep(500); // Dừng 0.5s

}
//+------------Ms ROBOT: robotfx.mt5@gmail.com-----------------------+
//+------------------------------------------------------------------+

Page 3/3

You might also like