//+------------------------------------------------------------------+ //| Prev.mq4 | //| Copyright © 2006, Yury V. Reshetov. | //| http://betaexpert.narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Yury V. Reshetov. ICQ: 282715499" #property link "http://betaexpert.narod.ru" #include <stdlib.mqh> //---- Âõîäíûå ïàðàìåòðû // Ìû ñîãëàñíû íà òàêóþ ïðèáûëü è íàì ÷óæîãî íå íàäî extern double TakeProfit=180.0; // Åñëè ìû ïðîñ÷èòàëèñü, òî òàêîé óáûòîê íàñ âïîëíå óñòðîèò extern double StopLoss=50.0; // Îïòèìàëüíàÿ äîëÿ íàøèõ äåíüæàò, êîòîðóþ ìû ìîæåì ïðîäóòü // áåç ðèñêà îñòàòüñÿ áåç ïîðòêîâ extern double MaximumRisk = 0.03; // Çäåñü ìû áóäåì çàïîìèíàòü âðåìÿ ïîñëåäíåãî ñôîðìèðîâàâøåãîñÿ áàðà static int prevtime = 0; //+------------------------------------------------------------------+ //| Ïîåõàëè! | //+------------------------------------------------------------------+ int start() { // Äëÿ íà÷àëà íå ìåøàåò óáåäèòüñÿ, ÷òî ñôîðìèðîâàëñÿ íîâûé áàð // Èíà÷å áðîêåð ìîæåò îòêðûòü ïîçèöèþ è âíå ðûíêà, // òîãäà õðåí äîêàæåøü, ÷òî îò áûë íåïðàâ. // Ê òîìó æå, èíäèêàòîðû ïðè âíóòðèáàðîâîé òîðãîâëå ìîãóò // ìåíÿòü ïîêàçàíèÿ êàê èì óäóìàåòñÿ - ñåìü ïÿòíèö íà íåäåëå. if (Time[0] == prevtime) return(0); // Çàïîìíèì òåêóùèé áàð prevtime = Time[0]; // Ñêîëüêî ïîçèöèé ó íàñ îòêðûòî? int total = OrdersTotal(); // Íîìåð òèêåòà int ticket = -1; for(int cnt = 0; cnt < total; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); // åñëè ýòî îòêðûòàÿ ïîçèöèÿ è èíñòðóìåíò ñîâïàäàåò if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) { ticket = OrderTicket(); } } // Åñëè åñòü óæå îòêðûòàÿ ïîçèöèÿ, òî íîâóþ îòêðûâàòü íå ñòîèò if (ticket < 0) { int cmd = OP_BUY; // Ñêîëüêî ó íàñ çàêðûòûõ îðäåðîâ? int htotal = HistoryTotal(); // Ïîêîïàåìñÿ â èñòîðèè ñ÷åòà for(int i = 0; i < htotal; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false) { Print("Îøèáêà â èñòîðèè ñ÷åòà! Îáðàòèñü ê áðîêåðó! Ìîæåò îí óêðàë íàøè äåíåæêè è ïîäòåð ñëåäû?"); break; } // Åñëè îðäåð íàøåãî ñèìâîëà è îí äî çàêðûòèÿ // íå áûë ëèìèòíûì if ((OrderSymbol()!= Symbol()) || (OrderType() > OP_SELL)) continue; // Åñëè îðäåð áûë çàêðûò ñ ïðèáûëüþ, òî áèøü ïî TakeProfit if (OrderProfit() > 0) { // Çíà÷èò ñëåäóþùàÿ ïîçèöèÿ áóäåò â òîì æå íàïðàâëåíèè cmd = OrderType(); } else { // â ïðîòèâíîì ñëó÷àå, // ðûíîê óæå ðàçâåðíóëñÿ // è íàì òóäà æå if (OrderType() == OP_SELL) { cmd = OP_BUY; } else { cmd = OP_SELL; } } } // ×òî òàì øåï÷óò èíäèêàòîðû? double sar = iSAR(NULL, 0, 0.02, 0.2, 0); double adx = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MAIN, 0); if (cmd == OP_BUY) { // Åñëè îòêðûâàåì äëèííóþ ïîçèöèþ // Æäåì êîãäà òðåíä íåìíîãî ïðèïîäûìåòñÿ // è íà ðûíêå âñå ñïîêîéíî if ((sar < Close[0]) && (adx < 20)) { // Ïîêóïàåì ticket=OrderSend(Symbol(),OP_BUY, LotsOptimized(), Ask, 3, Bid - StopLoss * Point, Ask + TakeProfit * Point, "TrendCapture", 16384, 0, Blue); // Çàïèøåì â æóðíàë, êàê îòðåàãèðîâàë áðîêåð if(ticket > 0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("Äëèííàÿ ïîçèöèÿ îòêðûòà ïî öåíå : ",OrderOpenPrice()); } else Print(ErrorDescription(GetLastError())); return(0); } } else { // Åñëè îòêðûâàåì êîðîòêóþ ïîçèöèþ // Æäåì êîãäà òðåíä íåìíîãî ïðèñÿäåò // è íà ðûíêå âñå ñïîêîéíî if ((sar > Close[0]) && (adx < 20)) { // Ïðîäàåì ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Ask + StopLoss * Point,Bid-TakeProfit*Point,"TrendCapture",16384,0,Red); // Çàïèøåì â æóðíàë, êàê îòðåàãèðîâàë áðîêåð if(ticket > 0) { if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("Êîðîòêàÿ ïîçèöèÿ îòêðûòà ïî öåíå : ",OrderOpenPrice()); } else Print(ErrorDescription(GetLastError())); return(0); } } } // Ïðåäîõðàíèòåëü double Guard = 5.0; OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); if(OrderType()==OP_BUY) { // äëèííàÿ îòêðûòàÿ ïîçèöèÿ // Åñëè òåêóùàÿ öåíà ïîçâîëÿåò âûñòàâèòü ïðåäîõðàíèòåëü if(Bid-OrderOpenPrice()>Point*Guard) { // Åñëè çàùèòà ñòîèò â óáûòêå if(OrderStopLoss() < OrderOpenPrice()) { // Çà ÷òî êóïèë, çà òî è ïðîäàþ OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue); // Âûõîäèì return(0); } } } else // Åñëè ïîçèöèÿ êîðîòêàÿ { // Åñëè òåêóùàÿ öåíà ïîçâîëÿåò âûñòàâèòü ïðåäîõðàíèòåëü if((OrderOpenPrice() - Ask) > (Point*Guard)) { // Åñëè çàùèòà ñòîèò â óáûòêå if(OrderStopLoss() > OrderOpenPrice()) { // Çà ÷òî êóïèë, çà òî è ïðîäàþ OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red); // Âûõîäèì return(0); } } } //---- return(0); } //+------------------------------------------------------------------+ //| Money Management | //+------------------------------------------------------------------+ double LotsOptimized() { double lot = 0.1; int losses = 0; // number of losses orders without a break //---- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //---- return lot size if (lot > 100) lot = 100; if(lot < 0.1) lot = 0.1; return(lot); } //+----------------- Âîò è ñêàçêå çâèçäåö ----------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Parabolic Stop and Reverse system
Movement directional index
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: