
//+------------------------------------------------------------------+
//| TrailingByShadows.mq4 |
//| I_D |
//| http://www.mymmk.com/ |
//+------------------------------------------------------------------+
#property copyright "I_D"
#property link "http://www.mymmk.com/"
extern int iTicket; // óíčęŕëüíűé íîěĺđ (ňčęĺň) îňęđűňîé ďîçčöčč
extern int iTmfrm; // ďĺđčîä, ďî áŕđŕě ęîňîđîăî ńëĺäóĺň ňđŕëčňü (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern int iBars_n = 3; // ęîë-âî áŕđîâ, ďî ęîňîđűě ńëĺäóĺň ňđŕëčňü
extern int iIndent = 3; // îňńňóď îň ňĺíč áŕđŕ, íŕ ęîňîđîě đŕçěĺůŕĺňń˙ ńňîďëîńń
extern bool bTrlinloss = false; // ńëĺäóĺň ëč ňđŕëčňü íŕ ó÷ŕńňęĺ ëîńńîâ (ěĺćäó ęóđńîě ńňîďëîńńŕ č îňęđűňč˙)
//+------------------------------------------------------------------+
//| ŇĐĹÉËČÍĂ ĎÎ ŇĹÍßĚ N ŃÂĹ×ĹÉ |
//| Ďđč çŕďóńęĺ ýęńďĺđňŕ ĺěó íĺîáőîäčěî óęŕçŕňü óíčęŕëüíűé íîěĺđ |
//| (ňčęĺň) îňęđűňîé ďîçčöčč, ŕ ňŕęćĺ îďđĺäĺëčňü ďŕđŕěĺňđű ňđĺéëčíăŕ:|
//| ęîëč÷ĺńňâî áŕđîâ, ďî ňĺí˙ě ęîňîđűő íĺîáőîäčěî ňđĺéëčíăîâŕňü |
//| (îň 1 č áîëüřĺ) č îňńňóď (ďóíęňîâ) - đŕńńňî˙íčĺ îň ěŕęń. (ěčí.) |
//| ńâĺ÷č, íŕ ęîňîđîĺ ďĺđĺíîńčňń˙ ńňîďëîńń (îň 0), ďĺđĺęëţ÷ŕňĺëü |
//| trlinloss óęŕçűâŕĺň, ńëĺäóĺň ëč ňđĺéëčíăîâŕňü íŕ ó÷ŕńňęĺ |
//| "ńňîďëîńń-ęóđń îňęđűňč˙ ďîçčöčč. |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
TrailingByShadows(iTicket,iTmfrm,iBars_n,iIndent,bTrlinloss);
return(0);
}
//+------------------------------------------------------------------+
void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss)
{
int i; // counter
double new_extremum;
// ďđîâĺđ˙ĺě ďĺđĺäŕííűĺ çíŕ÷ĺíč˙
if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
{
Print("Ňđĺéëčíă ôóíęöčĺé TrailingByShadows() íĺâîçěîćĺí čç-çŕ íĺęîđđĺęňíîńňč çíŕ÷ĺíčé ďĺđĺäŕííűő ĺé ŕđăóěĺíňîâ.");
return(0);
}
// ĺńëč äëčííŕ˙ ďîçčöč˙ (OP_BUY), íŕőîäčě ěčíčěóě bars_n ńâĺ÷ĺé
if (OrderType()==OP_BUY)
{
for(i=1;i<=bars_n;i++)
{
if (i==1) new_extremum = iLow(Symbol(),tmfrm,i);
else
if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
}
// ĺńëč ňđŕëčě č â çîíĺ óáűňęîâ
if (trlinloss==true)
{
// ĺńëč íŕéäĺííîĺ çíŕ÷ĺíčĺ "ëó÷řĺ" ňĺęóůĺăî ńňîďëîńńŕ ďîçčöčč, ďĺđĺíîńčě
if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum - indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íĺ óäŕëîńü ěîäčôčöčđîâŕňü îđäĺđ ą",OrderTicket(),". Îřčáęŕ: ",GetLastError());
}
else
{
// ĺńëč íîâűé ńňîďëîńń íĺ ňîëüęî ëó÷řĺ ďđĺäűäóůĺăî, íî č ęóđńŕ îňęđűňč˙ ďîçčöčč
if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íĺ óäŕëîńü ěîäčôčöčđîâŕňü îđäĺđ ą",OrderTicket(),". Îřčáęŕ: ",GetLastError());
}
}
// ĺńëč ęîđîňęŕ˙ ďîçčöč˙ (OP_SELL), íŕőîäčě ěčíčěóě bars_n ńâĺ÷ĺé
if (OrderType()==OP_SELL)
{
for(i=1;i<=bars_n;i++)
{
if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i);
else
if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
}
// ĺńëč ňđŕëčě č â çîíĺ óáűňęîâ
if (trlinloss==true)
{
// ĺńëč íŕéäĺííîĺ çíŕ÷ĺíčĺ "ëó÷řĺ" ňĺęóůĺăî ńňîďëîńńŕ ďîçčöčč, ďĺđĺíîńčě
if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íĺ óäŕëîńü ěîäčôčöčđîâŕňü îđäĺđ ą",OrderTicket(),". Îřčáęŕ: ",GetLastError());
}
else
{
// ĺńëč íîâűé ńňîďëîńń íĺ ňîëüęî ëó÷řĺ ďđĺäűäóůĺăî, íî č ęóđńŕ îňęđűňč˙ ďîçčöčč
if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íĺ óäŕëîńü ěîäčôčöčđîâŕňü îđäĺđ ą",OrderTicket(),". Îřčáęŕ: ",GetLastError());
}
}
}
//+------------------------------------------------------------------+