//+------------------------------------------------------------------+ //| e-TLE_v.1.6.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 20.09.2005 Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ (Three Level Exit). | //| Îòðàáàòûâàåò âñå îòêðûòûå ïîçèöèè. | //| Âåøàòü òîëüêî íà îäèí ëþáîé ãðàôèê. | //| 22.09.2005 v.1.0 Ââ¸ë âíåøíèé ïàðàìåòð äëÿ óïðàâëåíèÿ çîíîé | //| âëèÿíèÿ ñîâåòíèêà. | //| 22.09.2005 v.1.1 Ââ¸ë ïàðàìåòðû äëÿ îãðàíè÷åíèé ïî ñ÷¸òó | //| 22.09.2005 v.1.2 Èñïðàâèë îøèáêó ñ îïðåäåëåíèåì âàëþòû | //| 22.09.2005 v.1.3 Ðåàëèçîâàë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû | //| 22.09.2005 v.1.4 Ïîïðàâèë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû | //| 23.09.2005 v.1.5 Ðåàëèçîâàë ôàêòè÷åñêóþ óñòàíîâêó ñòîïîâ | //| 14.10.2005 v.1.6 Òðè óðîâíÿ ïåðåíîñà ñòîïà - | //| ðàáîòàåò òîëüêî â ïðîôèòíîé çîíå. | //+------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern bool UseOneAccount = false; // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå extern int NumberAccount = 5596; // Íîìåð òîðãîâîãî ñ÷¸òà extern bool AllPositions = True; // Óïðàâëÿòü âñåìè ïîçèöèÿìè extern int LevelProfit1 = 35; // Ïåðâûé óðîâåíü ïðîôèòà extern int LevelMoving1 = 2; // Ïåðâûé óðîâåíü ïåðåíîñà extern int LevelProfit2 = 45; // Âòîðîé óðîâåíü ïðîôèòà extern int LevelMoving2 = 10; // Âòîðîé óðîâåíü ïåðåíîñà extern int LevelProfit3 = 90; // Òðåòèé óðîâåíü ïðîôèòà extern int LevelMoving3 = 45; // Òðåòèé óðîâåíü ïåðåíîñà extern int TrailingStop = 55; // Ðàçìåð òðàëà extern int TrailingStep = 3; // Øàã òðàëà extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèè extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà //------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ---------------------------- //+------------------------------------------------------------------+ //| Custor expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { double pp; int nd; string comm=""; if (UseOneAccount && AccountNumber()!=NumberAccount) { Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!"); return; } for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (AllPositions || OrderSymbol()==Symbol()) { ThreeLevelSystemOfOutput(); nd=MarketInfo(OrderSymbol(), MODE_DIGITS); pp=MarketInfo(OrderSymbol(), MODE_POINT); comm=comm+OrderSymbol()+" Öåíà: "+DoubleToStr(OrderOpenPrice(),nd)+ " SL = " + DoubleToStr(OrderStopLoss(),nd)+ " ("+StopLossInPoint()+")\n"; } } } if (ShowComment) Comment(comm); } //+------------------------------------------------------------------+ //| Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ | //+------------------------------------------------------------------+ void ThreeLevelSystemOfOutput() { int pr=ProfitPosition(), sl=StopLossInPoint(); int sp=MarketInfo(OrderSymbol(), MODE_SPREAD); if (pr>LevelProfit1 && pr<=LevelProfit2 && sl<LevelMoving1) ModifyStopLossInPoint(LevelMoving1); if (pr>LevelProfit2 && pr<=LevelProfit3 && sl<LevelMoving2) ModifyStopLossInPoint(LevelMoving2); if (pr>LevelProfit3 && sl<LevelMoving3) ModifyStopLossInPoint(LevelMoving3); if (pr>LevelMoving3+TrailingStop+TrailingStep) { TrailingPositions(); } } //+------------------------------------------------------------------+ //| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì | //+------------------------------------------------------------------+ void TrailingPositions() { double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { pBid=MarketInfo(OrderSymbol(), MODE_BID); if (pBid-OrderOpenPrice()>TrailingStop*pp) { if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) { ModifyStopLoss(pBid-TrailingStop*pp); return; } } } if (OrderType()==OP_SELL) { pAsk=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pAsk>TrailingStop*pp) { if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) { ModifyStopLoss(pAsk+TrailingStop*pp); return; } } } } //+------------------------------------------------------------------+ //| Ïåðåíîñ óðîâíÿ StopLoss | //| Ïàðàìåòðû: | //| ldStopLoss - óðîâåíü StopLoss | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStopLoss) { bool fm; // Ôëàã ìîäèôèêàöèè ïîçèöèè fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); if (fm && UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+ //| Ïåðåíîñ óðîâíÿ StopLoss | //| Ïàðàìåòðû: | //| ldStopLoss - óðîâåíü StopLoss | //+------------------------------------------------------------------+ void ModifyStopLossInPoint(int pp) { bool fm; // Ôëàã ìîäèôèêàöèè ïîçèöèè double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) ldSL=OrderOpenPrice()+pp*mp; if (OrderType()==OP_SELL) ldSL=OrderOpenPrice()-pp*mp; fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE); if (fm && UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ïðîôèò ïîçèöèè â ïóíêòàõ | //+------------------------------------------------------------------+ int ProfitPosition() { double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT); double pr=0; if (OrderType()==OP_BUY) { pBid=MarketInfo(OrderSymbol(), MODE_BID); pr=(pBid-OrderOpenPrice())/pp; } if (OrderType()==OP_SELL) { pAsk=MarketInfo(OrderSymbol(), MODE_ASK); pr=(OrderOpenPrice()-pAsk)/pp; } return(MathRound(pr)); } //+------------------------------------------------------------------+ //| Âîçâðàùàåò StopLoss ïîçèöèè â ïóíêòàõ | //+------------------------------------------------------------------+ int StopLossInPoint() { double pp=MarketInfo(OrderSymbol(), MODE_POINT); double sp=0; if (OrderType()==OP_BUY) { sp=(OrderStopLoss()-OrderOpenPrice())/pp; } if (OrderType()==OP_SELL) { sp=(OrderOpenPrice()-OrderStopLoss())/pp; } if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp; return(MathRound(sp)); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts