#property version "1.00"
#property strict
#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>
D StopLoss=90; //StopLoss
D TakeProfit1=20; //TakeProfit 1
D Part1=30; //Part 1 close %
D TakeProfit2=50; //TakeProfit 2
D Part2=30; //Part 2 close %
D TakeProfit3=100; //TakeProfit 3
B AllSymbols=true; //All symbols
S Exclude=""; //Exclude symbols (sample: XAUUSD EURGBP)
B MagicListUse=false; //Magic list use (false = all magic)
S Magic=""; //Magic list (sample: 0 12345 3444 777)
class CMyOrders: public COrders
{
public:
bool CheckMagic(string symbol,bool bMagicListUse,long imagic,long &lMagic[])
{
if(symbol!=m_name && !AllSymbols)
return false;
if(StringFind(Exclude,symbol,0)>=0)
return false;
if(!bMagicListUse)
return true;
for(int i=0; i<ArraySize(lMagic); i++)
{
if(imagic==lMagic[i])
return true;
}
return false;
}
virtual bool SelectByIndex(int i,bool is_position,bool bMagicListUse,long &lMagic[])
{
if(is_position)
{
if(!m_position.SelectByIndex(i))
return false;
if(CheckMagic(m_position.Symbol(),bMagicListUse,m_position.Magic(),lMagic))
return true;
}
else
{
if(!m_order.SelectByIndex(i))
return false;
if(m_order.OrderType()>=6)
return false; //не пропустим ордера с нестандартным типом отложки и рыночные стандартные ордера обрабатываем только
if(CheckMagic(m_order.Symbol(),bMagicListUse,m_order.Magic(),lMagic))
return true;
}
return false;
}
void ControlOrders(double dtake,double dstop,bool bMagicListUse,long &lMagic[])//
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(!SelectByIndex(i,true,bMagicListUse,lMagic))
continue;
int etype=m_position.PositionType();
if(etype==OP_BUY || etype==OP_SELL)
{
double dsl=m_position.StopLoss();
double dtp=m_position.TakeProfit();
double dopen=m_position.PriceOpen();
double dtakeprofit=dtp;
double dstoploss=dsl;
if(dstop>0)
{
double dnewsl=dopen-TypeToDirect(etype)*dstop*p;
dsl=dopen-TypeToDirect(etype)*dstop*p;
}
else
if(dstop==0)
dsl=0;
if(dtake>0)
dtp=dopen+TypeToDirect(etype)*dtake*p;
else
if(dtake==0)
dtp=0;
if(CheckPositionModify(true,m_position.Symbol(),etype,dstoploss,dtakeprofit,dsl,dtp))
OrderModify(m_position.Ticket(),-1,dsl,dtp);
}
}
}
bool PartClose(double dpartclose_profit1,double dpartclose_procent1,double dpartclose_profit2,double dpartclose_procent2,bool bMagicListUse,long &lMagic[])
{
ulong iticket=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(!SelectByIndex(i,true,bMagicListUse,lMagic))
continue;
ENUM_POSITION_TYPE etype=(ENUM_POSITION_TYPE)m_position.PositionType();
if(etype==POSITION_TYPE_BUY || etype==POSITION_TYPE_SELL)
{
m_symbol.Name(m_position.Symbol());
m_symbol.Refresh();
double dopen=m_position.PriceOpen();
double dtake=m_position.TakePrПоказано первые 50% кода (символов: 4637)
Введите ваш email и нажмите кнопку, чтобы перейти к оплате.