/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ //+------------------------------------------------------------------+ //| e-5mSAR_v.0.2.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 30.09.2005 5-ìèíóòíûé ïàðàáîëè÷åñêèé âõîä | //| 02.10.2005 v.0.1 Ñäåëàë îäèí âõîä íà îäèí áàð | //| 03.10.2005 v.0.2 Òðàë | //+------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20050930 //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern string _Parameters_Trade = "---------- Ïàðàìåòðû òîðãîâëè"; extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà extern int StopLoss = 18; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int TakeProfit = 60; // Ðàçìåð ôèêñèðîâàííîãî òýéêà extern bool ProfitTrailing = True; // Òðàëèòü òîëüêî ïðîôèò extern int TrailingStop = 15; // Ôèêñèðîâàííûé ðàçìåð òðàëà extern int TrailingStep = 3; // Øàã òðàëà extern int Slippage = 5; // Ïðîñêàëüçûâàíèå öåíû extern bool UseHourTrade = True; // Èñïîëüçîâàòü âðåìÿ òîðãîâëè extern int HourBegTrade = 4; // Âðåìÿ íà÷àëà òîðãîâëè extern int HourEndTrade = 19; // Âðåìÿ êîíöà òîðãîâëè extern string _Parameters_Indicator = "---------- Ïàðàìåòðû èíäèêàòîðîâ"; extern double StepParabolic = 0.03; // Øàã ïàðàáîëèêà extern double MaxParabolic = 0.3; // Ìàêñèìóì ïàðàáîëèêà extern string _Parameters_Expert = "---------- Ïàðàìåòðû ñîâåòíèêà"; extern bool UseOneAccount = True; // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå extern int NumberAccount = 71597; // Íîìåð òîðãîâîãî ñ÷¸òà extern string Name_Expert = "e-5mSAR_v.0.2"; extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà extern color clOpenBuy = LightBlue; // Öâåò îòêðûòèÿ ïîêóïêè extern color clOpenSell = LightCoral; // Öâåò îòêðûòèÿ ïðîäàæè extern color clModifyBuy = Aqua; // Öâåò ìîäèôèêàöèè ïîêóïêè extern color clModifySell = Tomato; // Öâåò ìîäèôèêàöèè ïðîäàæè extern color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè extern color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè //---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ------------------------------- int prevBar; // Ïðåäûäóùåå êîëè÷åñòâî áàðîâ //------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -------------------------------- //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { if (UseOneAccount && AccountNumber()!=NumberAccount) { Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!"); return; } else Comment(""); if (UseHourTrade && (Hour()<HourBegTrade || Hour()>=HourEndTrade)) { Comment("Âðåìÿ òîðãîâëè åù¸ íå íàñòóïèëî!"); return; } else Comment(""); CheckForOpen(); TrailingPositions(); } //+------------------------------------------------------------------+ //| Ïðîâåðêà óñëîâèé äëÿ âõîäà | //+------------------------------------------------------------------+ void CheckForOpen() { double ldStop=0, ldTake=0; double sar0=iSAR(NULL, 0, StepParabolic, MaxParabolic, 0); double sar1=iSAR(NULL, 0, StepParabolic, MaxParabolic, 1); if (!ExistPosition() && prevBar!=Bars) { if (sar1>Open[1] && sar0<Bid) { if (StopLoss!=0) ldStop=Ask-StopLoss*Point; if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point; SetOrder(OP_BUY, Ask, ldStop, ldTake); prevBar=Bars; } if (sar1<Open[1] && sar0>Ask) { if (StopLoss!=0) ldStop=Bid+StopLoss*Point; if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point; SetOrder(OP_SELL, Bid, ldStop, ldTake); prevBar=Bars; } } } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðà èëè ïîçèöèè | //+------------------------------------------------------------------+ bool ExistPosition() { bool Exist=False; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) Exist=True; } } return(Exist); } //+------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðà | //| Ïàðàìåòðû: | //| op - îïåðàöèÿ | //| pp - öåíà | //| ldStop - óðîâåíü ñòîï | //| ldTake - óðîâåíü òåéê | //+------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake) { color clOpen; string lsComm=GetCommentForOrder(); if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell; OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpen); if (UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+ //| Ãåíåðèðóåò è âîçâðàùàåò ñòðîêó êîìåíòàðèÿ äëÿ îðäåðà èëè ïîçèöèè | //+------------------------------------------------------------------+ string GetCommentForOrder() { return(Name_Expert); } //+------------------------------------------------------------------+ //| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì | //+------------------------------------------------------------------+ void TrailingPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+5) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) { if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) { ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); } } } if (OrderType()==OP_SELL) { if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) { ModifyStopLoss(Ask+TrailingStop*Point, clModifySell); } } } } } } } } //+------------------------------------------------------------------+ //| Ïåðåíîñ óðîâíÿ StopLoss | //| Ïàðàìåòðû: | //| ldStopLoss - óðîâåíü StopLoss | //| clModify - öâåò ìîäèôèêàöèè | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStop, color clModify) { bool fm; double ldOpen=OrderOpenPrice(); double ldTake=OrderTakeProfit(); fm=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify); if (fm && UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open prices of each bar
Indicator Curves created:
Indicators Used:
Parabolic Stop and Reverse system
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts