//+------------------------------------------------------------------+ //| Adviser working by some indicator //| Copyright 2007, Victor Lukashuk aka lukas1 //| //| version 01 25.07.2007 //+------------------------------------------------------------------+ // // Ýêñïåðò îòêðûâàåò è çàêðûâàåò ïîçèöèè ïî ïðîïèñàííîìó èíäèêàòîðó "TTF_MW.mq4" // à ìîæåò è ïî äðóãîìó èíäèêàòîðó - ýòà âåðñèÿ äëÿ èíäèêàòîðîâ, ðèñóþùèõ òî÷êè #property copyright "Copyright © 2007, lukas1" #include <stdlib.mqh> // áèáëèîòåêà îòîáðàæåíèÿ îøèáîê extern int Take_profit=120; extern int Stop_loss=40; extern int TrailingStep=95; // øàã òðåéëèíãà extern double TrailingStop=15; // ñòîïû ïî òðåéëèíãó // ïàðàìåòðû äëÿ 1 ÷àñîâîê äëÿ EURUSD extern string indicator = "TTF_MW"; extern double open_param1=80; extern double open_param2=18; extern double open_param3=27.1; extern int buffer_for_open_buy=0; extern int buffer_for_open_sell=1; extern double close_param4=78; extern double close_param5=54; extern double close_param6=4.6; extern int buffer_for_close_buy=0; extern int buffer_for_close_sell=0; extern double level_comparity=0.5; extern double Lots =0.1; extern int MAGIC=111222; int digits; // êîëè÷åñòâî çíàêîâ äëÿ ðàáîòû ñ äàííîé âàë. ïàðîé int stoplevel; // ìèíèìàëüíûé îòñòóï óñòàíîâêè ñòîïîâûõ îðäåðîâ int spred; double f1=0.01; double s1=0.01; int Buy=0; int Sell=0; double b=1; int cnt=0; double PROF=0; double STOP=0; int ticket,st,pr; //+------------------------------------------------------------------+ //| //------------------------------------------------------------------------------------------------------------- int start() { // â ñàìîì íà÷àëå 20 ðàç ïðîâåðÿåì ÷òî òîðãîâëÿ ðàçðåøåíà if (!IsTradeAllowed()) return(0); Buy=0;Sell=0; f1 = iCustom(NULL,0,indicator,close_param4,close_param5,close_param6,buffer_for_close_buy, 1); s1 = iCustom(NULL,0,indicator,close_param4,close_param5,close_param6,buffer_for_close_sell, 1); if (f1>level_comparity) {Buy=1; } if (s1>level_comparity) {Sell=1;} //Comment (" f1= ",f1, " s1= ",s1, " b= ",b) ; if(b<Bars) { // çàêðûâàåì îòêðûòûå ïîçèöèè äëÿ ÁÀÉ for(cnt=OrdersTotal();cnt>=0;cnt--) {OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if ( OrderSymbol()==Symbol() || OrderMagicNumber()==MAGIC ) if(OrderType()==OP_BUY) {// åñëè ÑÅËË äëèííóþ ïîçèöèþ çàêðûòü if((Sell==1)&&(b<Bars)) {OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position s1=0.01; return(0); } // check for trailing stop for BUY if(TrailingStop>0) // åñëè ïàðàìåòð TrailingStop çàäàí è áîëüøå 0 { if(OrderOpenPrice()<(Bid-Point*TrailingStep)) { if(OrderStopLoss()<(Bid-Point*(TrailingStop+TrailingStep+1))) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,DodgerBlue); // òî ïåðåíîñèì ñòîï óðîâåíü îðäåðà íà óðîâåíü Bid-Point*TrailingStop return(0); } } } } } // çàêðûâàåì îòêðûòûå ïîçèöèè äëÿ ÑÅËË for(cnt=OrdersTotal();cnt>=0;cnt--) {OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if ( OrderSymbol()==Symbol() || OrderMagicNumber()==MAGIC) if(OrderType()==OP_SELL) {// åñëè ÁÀÉ êîðîòêóþ ïîçèöèþ çàêðûòü if ((Buy==1)&&(b<Bars)) {OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position f1=0.01; return(0); } // check for trailing stop for SELL if(TrailingStop>0) { if(OrderOpenPrice()>(Ask+Point*TrailingStep)) { if((OrderStopLoss()>(Ask+Point*(TrailingStop+TrailingStep+1)))) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Coral); return(0); } } } } } Buy=0;Sell=0; f1 = iCustom(NULL,0,indicator,open_param1,open_param2,open_param3,buffer_for_open_buy, 1); s1 = iCustom(NULL,0,indicator,open_param1,open_param2,open_param3,buffer_for_open_sell, 1); if (f1>level_comparity) {Buy=1; } if (s1>level_comparity) {Sell=1;} //Comment (" f1= ",f1, " s1= ",s1, " b= ",b) ; // îòêðûâàåì íîâûå îðäåðà ÑÅËË if (OrdersTotal()<1) if((Sell==1)&&(b<Bars)) {b=Bars; // ðàñ÷åò ñòîïîâûõ îðäåðîâ PROF=0; STOP=0; if(Stop_loss>0) {if(Stop_loss-spred<=stoplevel) st=stoplevel; else st=Stop_loss-spred; STOP=NormalizeDouble(Ask+st*Point,digits); } if(Take_profit>0) {pr=Take_profit+spred; //ðàñ÷åò TP îò Ask PROF=NormalizeDouble(Ask-pr*Point,digits); } ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3, NormalizeDouble(STOP,digits), // SL NormalizeDouble(PROF,digits), // TP "sell_",MAGIC,0,Red); if(ticket<1) {Print("Oøèáêà ",ErrorDescription(GetLastError())); return(0); } else s1=0.01; return(0); // exit } // îòêðûâàåì íîâûå îðäåðà ÁÀÉ if (OrdersTotal()<1) if((Buy==1)&&(b<Bars)) {b=Bars; // ðàñ÷åò ñòîïîâûõ îðäåðîâ PROF=0; STOP=0; stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); spred =MarketInfo(Symbol(),MODE_SPREAD); digits =MarketInfo(Symbol(),MODE_DIGITS); if (Stop_loss>0) {if(Stop_loss-spred<=stoplevel) st=stoplevel; else st=Stop_loss-spred; STOP=NormalizeDouble(Bid-st*Point,digits); } if(Take_profit>0) {pr=Take_profit+spred; //ðàñ÷åò TP îò Bid PROF=NormalizeDouble(Bid+pr*Point,digits); } ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3, NormalizeDouble(STOP,digits), // SL NormalizeDouble(PROF,digits), // TP "buy_",MAGIC,0,Blue); if(ticket<1) {Print("Oøèáêà ",ErrorDescription(GetLastError())); return(0); } else f1=0.01; return(0); // exit } if(AccountFreeMargin()<(300*Lots)) // Ïðîâåðêà íàëè÷èÿ ñâîáîäíûõ ñðåäñòâ äëÿ òîðãîâëè {Alert("Ìû íå èìååì äåíåã. Free Margin = ", AccountFreeMargin()); /*ÿ çàìåíèë ôóíêöèþ Print âûâîäÿùóþ ñîîáùåíèÿ â ôàéë îò÷¸òà, êîòîðûé íåïîíÿòíî ãäå ñìîòðåòü íà ôóíêöèþ Alert*/ return(0); } return(0); } }
Sample
image not available
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Indicator
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features:
It issuies visual alerts to the screen