//+------------------------------------------------------------------+ //| TrailingFiftyFifty.mq4 | //| I_D | //| http://www.mymmk.com/ | //+------------------------------------------------------------------+ #property copyright "I_D" #property link "http://www.mymmk.com/ Ñîôò äëÿ óïðàâëåíèÿ êàïèòàëîì" extern int iTicket; // óíèêàëüíûé íîìåð (òèêåò) îòêðûòîé ïîçèöèè extern int iInterval = 240; // âðåìåííîé èíòåðâàë, ÷åðåç êîòîðûé (ïî âîçìîæíîñòè) ïåðåíîñèòñÿ ñòîïëîññ, ìèíóò extern int iTrlstep = 20; // øàã òðåéëèíãà, ïóíêòîâ extern bool bTrlinloss = false; // ñëåäóåò ëè òðàëèòü íà ó÷àñòêå ëîññîâ (ìåæäó êóðñîì ñòîïëîññà è îòêðûòèÿ) //+------------------------------------------------------------------+ //| ÒÐÅÉËÈÍà ÏÎ ÂÐÅÌÅÍÈ | //| Ïðè çàïóñêå ýêñïåðòà åìó íåîáõîäèìî óêàçàòü óíèêàëüíûé íîìåð | //| (òèêåò) îòêðûòîé ïîçèöèè, à òàêæå îïðåäåëèòü ïàðàìåòðû òðåéëèíãà:| //| âðåìåííîé èíòåðâàë (ìèíóò), ñ êîòîðûì ïðîèçâîäèòñÿ ïåðåìåùåíèå | //| ñòîïëîññà, øàã ñòîïëîññà (ïóíêòîâ), à òàêæå îïðåäåëèòü, ñëåäóåò | //| ëè òðåéëèíãîâàòü íà ó÷àñòêå ñòîïëîññîâ | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { TrailingByTime(iTicket,iInterval,iTrlstep,bTrlinloss); return(0); } //+------------------------------------------------------------------+ void TrailingByTime(int ticket,int interval,int trlstep,bool trlinloss) { // ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ if ((ticket==0) || (interval<1) || (trlstep<1) || !OrderSelect(ticket,SELECT_BY_TICKET)) { Print("Òðåéëèíã ôóíêöèåé TrailingByTime() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ."); return(0); } double minpast; // êîë-âî ïîëíûõ ìèíóò îò îòêðûòèÿ ïîçèöèè äî òåêóùåãî ìîìåíòà double times2change; // êîë-âî èíòåðâàëîâ interval ñ ìîìåíòà îòêðûòèÿ ïîçèöèè (ò.å. ñêîëüêî ðàç äîëæåí áûë áûòü ïåðåìåùåí ñòîïëîññ) double newstop; // íîâîå çíà÷åíèå ñòîïëîññà (ó÷èòûâàÿ êîë-âî ïåðåíîñîâ, êîòîðûå äîëæíû áûëè èìåòü ìåñòî) // îïðåäåëÿåì, ñêîëüêî âðåìåíè ïðîøëî ñ ìîìåíòà îòêðûòèÿ ïîçèöèè minpast = (TimeCurrent() - OrderOpenTime()) / 60; // ñêîëüêî ðàç íóæíî áûëî ïåðåäâèíóòü ñòîïëîññ times2change = MathFloor(minpast / interval); // åñëè äëèííàÿ ïîçèöèÿ (OP_BUY) if (OrderType()==OP_BUY) { // åñëè òðàëèì â óáûòêå, òî îòñòóïàåì îò ñòîïëîññà (åñëè îí íå 0, åñëè 0 - îò îòêðûòèÿ) if (trlinloss==true) { if (OrderStopLoss()==0) newstop = OrderOpenPrice() + times2change*(trlstep*Point); else newstop = OrderStopLoss() + times2change*(trlstep*Point); } else // èíà÷å - îò êóðñà îòêðûòèÿ ïîçèöèè newstop = OrderOpenPrice() + times2change*(trlstep*Point); if (times2change>0) { if ((newstop>OrderStopLoss()) && (newstop<Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) { if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration())) Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError()); } } } // åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL) if (OrderType()==OP_SELL) { // åñëè òðàëèì â óáûòêå, òî îòñòóïàåì îò ñòîïëîññà (åñëè îí íå 0, åñëè 0 - îò îòêðûòèÿ) if (trlinloss==true) { if (OrderStopLoss()==0) newstop = OrderOpenPrice() - times2change*(trlstep*Point) - MarketInfo(Symbol(),MODE_SPREAD)*Point; else newstop = OrderStopLoss() - times2change*(trlstep*Point) - MarketInfo(Symbol(),MODE_SPREAD)*Point; } else newstop = OrderOpenPrice() - times2change*(trlstep*Point) - MarketInfo(Symbol(),MODE_SPREAD)*Point; if (times2change>0) { if (((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice())) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) { if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration())) Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError()); } else if ((newstop<OrderStopLoss()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) { if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration())) Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError()); } } } } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
It can change open orders parameters, due to possible stepping strategy
Other Features: