Orders Execution
0
Views
0
Downloads
0
Favorites
TrailingFiftyFifty
//+------------------------------------------------------------------+
//| TrailingFiftyFifty.mq4 |
//| I_D |
//| http://www.mymmk.com/ |
//+------------------------------------------------------------------+
#property copyright "I_D"
#property link "http://www.mymmk.com/ Ñîôò äëÿ óïðàâëåíèÿ êàïèòàëîì"
extern int iTicket; // óíèêàëüíûé íîìåð (òèêåò) îòêðûòîé ïîçèöèè
extern int iTmFrme = 60; // ïåðèîä ÷àðòà, ïî áàðàì êîòîðîãî ïðîèñõîäèò ïîäæàòèå
extern double dCoeff = 0.5; // "êîýôôèöèåíò ïîäæàòèÿ", â % îò 0.01 äî 1
extern bool bTrlinloss = false; // ñëåäóåò ëè òðàëèòü íà ó÷àñòêå ëîññîâ (ìåæäó êóðñîì ñòîïëîññà è îòêðûòèÿ)
static datetime sdtPrevtime = 0;
//+------------------------------------------------------------------+
//| ÒÐÅÉËÈÍÃ "ÏÎËÎÂÈÍßÙÈÉ" |
//| Ïî çàêðûòèè î÷åðåäíîãî ïåðèîäà (áàðà) ïîäòÿãèâàåì ñòîïëîññ íà |
//| ïîëîâèíó (íî ìîæíî è ëþáîé èíîé êîýôôèöèåíò) äèñòàíöèè, ïðîé- |
//| äåííîé êóðñîì (ò.å., íàïðèìåð, ïî çàêðûòèè ñóòîê ïðîôèò +55 ï. - |
//| ñòîïëîññ ïåðåíîñèì â 55/2=27 ï. Åñëè ïî çàêðûòèè ñëåä. |
//| ñóòîê ïðîôèò äîñòèã, äîïóñòèì, +80 ï., òî ñòîïëîññ ïåðåíîñèì íà |
//| ïîëîâèíó (íàïð.) ðàññòîÿíèÿ ìåæäó òåê. ñòîïëîññîì è êóðñîì íà |
//| çàêðûòèè áàðà - 27 + (80-27)/2 = 27 + 53/2 = 27 + 26 = 53 ï. |
//| Ïðè çàïóñêå ýêñïåðòà åìó íåîáõîäèìî óêàçàòü óíèêàëüíûé íîìåð |
//| (òèêåò) îòêðûòîé ïîçèöèè (iTicket); iTmFrme - òàéìôðåéì (â |
//| ìèíóòàõ, öèôðàìè dCoeff - "êîýôôèöèåíò ïîäæàòèÿ", â % îò 0.01 äî |
//| 1 (â ïîñëåäíåì ñëó÷àå ñòîïëîññ áóäåò ïåðåíåñåí (åñëè ïîëó÷èòñÿ) |
//| âïëîòíóþ ê òåê. êóðñó è ïîçèöèÿ, ñêîðåå âñåãî, ñðàçó æå |
//| çàêðîåòñÿ) bTrlinloss - ñòîèò ëè òðàëèòü íà ëîññîâîì ó÷àñòêå - |
//| åñëè äà, òî ïî çàêðûòèþ î÷åðåäíîãî áàðà ðàññòîÿíèå ìåæäó |
//| ñòîïëîññîì (â ò.÷. "äî" áåçóáûòêà) è òåêóùèì êóðñîì áóäåò |
//| ñîêðàùàòüñÿ â dCoeff ðàç ÷òîáû ïîñë. âàðèàíò ðàáîòàë, îáÿçàòåëüíî|
//| äîëæåí áûòü îïðåäåë¸í còîïëîññ (íå ðàâåí 0) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
TrailingFiftyFifty(iTicket,iTmFrme,dCoeff,bTrlinloss);
return(0);
}
//+------------------------------------------------------------------+
void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool bTrlinloss)
{
// àêòèâèðóåì òðåéëèíã òîëüêî ïî çàêðûòèè áàðà
if (sdtPrevtime == iTime(Symbol(),iTmFrme,0)) return(0);
else
{
sdtPrevtime = iTime(Symbol(),iTmFrme,0);
// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) ||
((iTmFrme!=1) && (iTmFrme!=5) && (iTmFrme!=15) && (iTmFrme!=30) && (iTmFrme!=60) && (iTmFrme!=240) &&
(iTmFrme!=1440) && (iTmFrme!=10080) && (iTmFrme!=43200)) || (dCoeff<0.01) || (dCoeff>1.0))
{
Print("Òðåéëèíã ôóíêöèåé TrailingFiftyFifty() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
return(0);
}
// íà÷èíàåì òðàëèòü - ñ ïåðâîãî áàðà ïîñëå îòêðûâàþùåãî (èíà÷å ïðè bTrlinloss ñðàçó æå ïîñëå îòêðûòèÿ
// ïîçèöèè ñòîïëîññ áóäåò ïåðåíåñåí íà ïîëîâèíó ðàññòîÿíèÿ ìåæäó ñòîïëîññîì è êóðñîì îòêðûòèÿ)
// ò.å. ðàáîòàåì òîëüêî ïðè óñëîâèè, ÷òî ñ ìîìåíòà OrderOpenTime() ïðîøëî íå ìåíåå iTmFrme ìèíóò
if (iTime(Symbol(),iTmFrme,0)>OrderOpenTime())
{
double dBid = MarketInfo(Symbol(),MODE_BID);
double dAsk = MarketInfo(Symbol(),MODE_ASK);
double dNewSl;
double dNexMove;
// äëÿ äëèííîé ïîçèöèè ïåðåíîñèì ñòîïëîññ íà dCoeff äèñòàíöèè îò êóðñà îòêðûòèÿ äî Bid íà ìîìåíò îòêðûòèÿ áàðà
// (åñëè òàêîé ñòîïëîññ ëó÷øå èìåþùåãîñÿ è èçìåíÿåò ñòîïëîññ â ñòîðîíó ïðîôèòà)
if (OrderType()==OP_BUY)
{
if ((bTrlinloss) && (OrderStopLoss()!=0))
{
dNexMove = NormalizeDouble(dCoeff*(dBid-OrderStopLoss()),Digits);
dNewSl = NormalizeDouble(OrderStopLoss()+dNexMove,Digits);
}
else
{
// åñëè ñòîïëîññ íèæå êóðñà îòêðûòèÿ, òî òðàëèì "îò êóðñà îòêðûòèÿ"
if (OrderOpenPrice()>OrderStopLoss())
{
dNexMove = NormalizeDouble(dCoeff*(dBid-OrderOpenPrice()),Digits);
//Print("dNexMove = ",dCoeff,"*(",dBid,"-",OrderOpenPrice(),")");
dNewSl = NormalizeDouble(OrderOpenPrice()+dNexMove,Digits);
//Print("dNewSl = ",OrderOpenPrice(),"+",dNexMove);
}
// åñëè ñòîïëîññ âûøå êóðñà îòêðûòèÿ, òðàëèì îò ñòîïëîññà
if (OrderStopLoss()>=OrderOpenPrice())
{
dNexMove = NormalizeDouble(dCoeff*(dBid-OrderStopLoss()),Digits);
dNewSl = NormalizeDouble(OrderStopLoss()+dNexMove,Digits);
}
}
// ñòîïëîññ ïåðåìåùàåì òîëüêî â ñëó÷àå, åñëè íîâûé ñòîïëîññ ëó÷øå òåêóùåãî è åñëè ñìåùåíèå - â ñòîðîíó ïðîôèòà
// (ïðè ïåðâîì ïîäæàòèè, îò êóðñà îòêðûòèÿ, íîâûé ñòîïëîññ ìîæåò áûòü ëó÷øå èìåþùåãîñÿ, è â òî æå âðåìÿ íèæå
// êóðñà îòêðûòèÿ (åñëè dBid íèæå ïîñëåäíåãî)
if ((dNewSl>OrderStopLoss()) && (dNexMove>0) && ((dNewSl<Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)))
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),dNewSl,OrderTakeProfit(),OrderExpiration(),Red))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
}
// äåéñòâèÿ äëÿ êîðîòêîé ïîçèöèè
if (OrderType()==OP_SELL)
{
if ((bTrlinloss) && (OrderStopLoss()!=0))
{
dNexMove = NormalizeDouble(dCoeff*(OrderStopLoss()-(dAsk+MarketInfo(Symbol(),MODE_SPREAD)*Point)),Digits);
dNewSl = NormalizeDouble(OrderStopLoss()-dNexMove,Digits);
}
else
{
// åñëè ñòîïëîññ âûøå êóðñà îòêðûòèÿ, òî òðàëèì "îò êóðñà îòêðûòèÿ"
if (OrderOpenPrice()<OrderStopLoss())
{
dNexMove = NormalizeDouble(dCoeff*(OrderOpenPrice()-(dAsk+MarketInfo(Symbol(),MODE_SPREAD)*Point)),Digits);
dNewSl = NormalizeDouble(OrderOpenPrice()-dNexMove,Digits);
}
// åñëè ñòîïëîññ íèæó êóðñà îòêðûòèÿ, òðàëèì îò ñòîïëîññà
if (OrderStopLoss()<=OrderOpenPrice())
{
dNexMove = NormalizeDouble(dCoeff*(OrderStopLoss()-(dAsk+MarketInfo(Symbol(),MODE_SPREAD)*Point)),Digits);
dNewSl = NormalizeDouble(OrderStopLoss()-dNexMove,Digits);
}
}
// ñòîïëîññ ïåðåìåùàåì òîëüêî â ñëó÷àå, åñëè íîâûé ñòîïëîññ ëó÷øå òåêóùåãî è åñëè ñìåùåíèå - â ñòîðîíó ïðîôèòà
if ((dNewSl<OrderStopLoss()) && (dNexMove>0) && (dNewSl>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),dNewSl,OrderTakeProfit(),OrderExpiration(),Blue))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
}
}
}
}
//+------------------------------------------------------------------+
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
---