Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
TrailingStopFrCn
//+------------------------------------------------------------------+
//| TrailingStop.mq4 |
//| Copyright © 2010, Õëûñòîâ Âëàäèìèð |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, cmillion@narod.ru"
#property link "http://cmillion.narod.ru"
//--------------------------------------------------------------------
/*Îïèñàíèå:
Ìîæåò çàïóñêàòüñÿ êàê îòäåëüíûé ñîâåòíèê èëè êàê ñêðèïò, ñîâìåñòíî ñ ëþáûì ñîâåòíèêîì.
 çàâèñèìîñòè îò ïåðåìåííîé TrailingStop, òðåéëèíã ìîæåò îñóùåñòâëÿòüñÿ ïî ôðàêòàëàì,
ïî ýêñòðåìóìàì ïðîøëûõ áàðîâ èëè ïî óêàçàííîìó êîë-âó ïóíêòîâ.
Åñëè TrailingStop áîëüøå 0, òî òðåéëèíã áóäåò îñóùåñòâëåí ñ òåì êîë-âîì ïóíêòîâ,
êîòîðîå óêàçàíî â ïåðåìåííîé TrailingStop. Åñëè TrailingStop ìåíüøå îãðàíè÷åíèÿ
ìèíèìàëüíîãî óðîâíÿ ñòîïîâ, òî òðåéëèíã áóäåò ñ ìèíèìàëüíûìè ñòîïàìè.
Åñëè TrailingStop = 0 è Tip.Fr.or.Candl=0, òî òðåéëèíã áóäåò ïî ôðàêòàëàì.
Ò.å. äëÿ óðîâíÿ ñòîïëîññ âûáèðàåòñÿ ïåðâûé ñîîòâåòñòâóþùèé ôðàêòàë.
Åñëè TrailingStop = 0 è Tip.Fr.or.Candl=1, òî òðåéëèíã áóäåò ïî ìèíèìóìàì/ìàêñèìóìàì
ïðîøëûõ ñâå÷åé.
Åñëè Magic = 0, òî òðåéëèíã ïðîâîäèòñÿ ïî âñåì îðäåðàì òåêóùåãî ñèìâîëà, áåç ó÷åòà
ìàãè÷åñêîãî íîìåðà. Åñëè â ïåðåìåííîé Magic óêàçàí ìàãè÷åñêèé íîìåð, òî ñîîòâåòñòâåííî
áóäåò òîëüêî òðåéëèíã îðäåðîâ ñ íîìåðîì Magic.
Åñëè OnlyProfit = true, òî ìîäèôèöèðóþòñÿ òîëüêî ïðîôèòíûå îðäåðà
Åñëè OnlyWithoutLoss = true, òî âìåñòî òðåéëèíãà îðäåðà òîëüêî ïåðåâîäÿòñÿ â áåçóáûòîê
Âèçóàëèçàöèÿ:
Íà ýêðàíå îòîáðàæàåòñÿ èíôîðìàöèÿ î òåêóùåé ðàáîòå ñêðèïòà:
- óñòàíîâêè ñ êîòîðûìè ñêðèïò çàïóùåí
- êîëè÷åñòâî îðäåðîâ ñ êîòîðûìè ñêðèïò ðàáîòàåò
- òåêóùåå âðåìÿ
- ìèíèìàëüíûå óðîâíè âûñòàâëåíèÿ ñòîïîâ (-)
- òåêóùèå âîçìîæíûå óðîâíè ñòîïîâ (öåíîâûå ìåòêè)
Ñîâåòû:
Ñêðèïò çàêàí÷èâàåò ðàáîòó, êîãäà âñå îðäåðà çàêðûòû. Åñëè ïðîãðàììà çàïóùåíà êàê ñîâåòíèê,
òî âûõîä èç ïðîãðàììû òîëüêî âðó÷íóþ.
*/
//--------------------------------------------------------------------
extern bool OnlyProfit = true; //òîëüêî ïðîôèòíûå îðäåðà
extern bool OnlyWithoutLoss = false;//òîëüêî áåç óáûòîê
extern int Magic = 0;
extern int TrailingStop = 0; //åñëè= 0, òî òðåéëèíã ïî ôðàêòàëàì èëè ñâå÷àì
extern int Tip.Fr.or.Candl = 1; //åñëè= 0, òî òðåéëèíã ïî ôðàêòàëàì
//åñëè= 1, òî òðåéëèíã ïî ñâå÷àì
//--------------------------------------------------------------------
int delta, n,DIGITS;
datetime TIME;
double BID,ASK,POINT;
//--------------------------------------------------------------------
int start()
{
ObjectCreate("info", OBJ_LABEL, 0, 0, 0);
ObjectSet("info", OBJPROP_CORNER, 1);
ObjectSet("info", OBJPROP_XDISTANCE, 200 );
ObjectSet("info", OBJPROP_YDISTANCE, 0);
string txt;
POINT=MarketInfo(Symbol(),MODE_POINT);
DIGITS=MarketInfo(Symbol(),MODE_DIGITS);
if (TrailingStop!=0 && TrailingStop<MarketInfo(Symbol(),MODE_STOPLEVEL))
TrailingStop=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Magic==0) txt=StringConcatenate("total orders ",Symbol());
else txt=StringConcatenate("orders ",Symbol()," Magic ",Magic);
if (TrailingStop!=0) txt=StringConcatenate(" ",TrailingStop," ï ");
else if (Tip.Fr.or.Candl==0) txt=" Fractals "; else txt=" ïî ñâå÷àì ";
Comment("Start TrailingStop ",txt,TimeToStr(TimeCurrent(),TIME_MINUTES));
while(true)
{
RefreshRates();
BID = MarketInfo(Symbol(),MODE_BID);
ASK = MarketInfo(Symbol(),MODE_ASK);
TIME = iTime(Symbol(),0,0);
delta = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (delta<TrailingStop)delta=TrailingStop;
ObjectSetText("info",StringConcatenate("TrailingStop ",txt," Orders ", n," ",
TimeToStr(TimeCurrent(),TIME_SECONDS)),8,"Arial",Aqua);
TrailingStop();
if (n==0) break;
Sleep(1000);
}
Comment("Íåò îòêðûòûõ îðäåðîâ. Çàêðûòèå ñêðèïòà ",
TimeToStr(TimeCurrent(),TIME_MINUTES));
ObjectDelete("SL Buy");
ObjectDelete("SL Sell");
ObjectDelete("info");
ObjectDelete("SL-");
ObjectDelete("SL+");
}
//--------------------------------------------------------------------
void TrailingStop()
{
int tip,Ticket;
bool error;
double StLo,OSL,OOP;
n=0;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==0))
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY)
{ n++;
StLo = SlLastBar(1,BID,Tip.Fr.or.Candl,TrailingStop);
if (StLo <= OOP && OnlyProfit) continue;
if (OSL >= OOP && OnlyWithoutLoss) continue;
if (StLo > OSL)
{ error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,DIGITS),
OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",
GetLastError()," ",Symbol()," SL ",StLo);
}
}
if (tip==OP_SELL)
{ n++;
StLo = SlLastBar(-1,ASK,Tip.Fr.or.Candl,TrailingStop);
if (StLo==0) continue;
if (StLo >= OOP && OnlyProfit) continue;
if (OSL >= OOP && OnlyWithoutLoss) continue;
if (StLo < OSL || OSL==0 )
{ error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,DIGITS),
OrderTakeProfit(),0,White);
Comment("TrailingStop "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",
GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
}
}
//--------------------------------------------------------------------
double SlLastBar(int tip,double price, int tipFr, int tral)
{
double fr;
int jj,ii;
if (tral!=0)
{
if (tip==1) fr = BID - tral*POINT;
else fr = ASK + tral*POINT;
}
else
{
if (tipFr==0)
{
if (tip== 1)
for (ii=1; ii<100; ii++)
{
fr = iFractals(NULL,0,MODE_LOWER,ii);
if (fr!=0) if (price-delta*POINT > fr) break;
else fr=0;
}
if (tip==-1)
for (jj=1; jj<100; jj++)
{
fr = iFractals(NULL,0,MODE_UPPER,jj);
if (fr!=0) if (price+delta*POINT < fr) break;
else fr=0;
}
}
else
{
if (tip== 1)
for (ii=1; ii<100; ii++)
{
fr = iLow(NULL,0,ii);
if (fr!=0) if (price-delta*POINT > fr) break;
else fr=0;
}
if (tip==-1)
for (jj=1; jj<100; jj++)
{
fr = iHigh(NULL,0,jj);
if (price+delta*POINT < fr) break;
else fr=0;
}
}
}
if (tip== 1)
{
ObjectDelete("SL Buy");
ObjectDelete("SL-");
ObjectCreate("SL Buy",OBJ_ARROW,0,TIME,fr,0,0,0,0);
ObjectSet ("SL Buy",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Buy",OBJPROP_COLOR, Blue);
ObjectCreate("SL-",OBJ_ARROW,0,TIME,price-delta*POINT,0,0,0,0);
ObjectSet ("SL-",OBJPROP_ARROWCODE,4);
ObjectSet ("SL-",OBJPROP_COLOR, Blue);
}
if (tip==-1)
{
ObjectDelete("SL Sell");
ObjectDelete("SL+");
ObjectCreate("SL Sell",OBJ_ARROW,0,TIME,fr,0,0,0,0);
ObjectSet ("SL Sell",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Sell", OBJPROP_COLOR, Green);
ObjectCreate("SL+",OBJ_ARROW,0,TIME,price+delta*POINT,0,0,0,0);
ObjectSet ("SL+",OBJPROP_ARROWCODE,4);
ObjectSet ("SL+",OBJPROP_COLOR, Green);
}
return(fr);
}
//--------------------------------------------------------------------
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---