//+----------------------------------------------------------------------------------------+
//|                                                                       Trall_Rabbit.mq4 |
//|                                                                      Martingeil© 2011, |
//|                                                                          fx.09@mail.ru |
//+----------------------------------------------------------------------------------------+
#property copyright "Martingeil© 2011,"
#property link      "fx.09@mail.ru"
//Òðàë îñíîâàí ïî ìîòèâàì "Rabbit" àâòîðà "JonKatana" ñ ñàéòå ÌÊË http://codebase.mql4.com/ru/6231
//÷òî òî ñâÿçàíîå ñ çîëîòûì ñå÷åíèåì, íà ñêîëüêî ÿ ïîíÿë, ÿ âçÿë êàê áû îñíîâó øàãà ñå÷åíèÿ 
//îòñ÷åò áåðåòñÿ îò õàÿ åñëè òðàëèì ñåëë îðäåðà, è îò ëîó åñëè òðàëèì áàé îðäåðà
//Òðàë òàêæå çàêðûâàåò ïî ðûíêó îòêðûòå îðäåðà ñèìâîëà ïî âðåìåíè, 
//â ïÿòíèöó çàêðûâàåò íà ÷àñ ðàíüøå, è ìèíóòû â ïÿòíèöó íå ó÷èòûâàþòñÿ
//------------------------------------------------------------------------------------------
extern int   CloseHour    = 22;    //âðåìÿ (÷àñû)ïîñëå êîòîðîãî çàêðîåì âñå îòêðûòûå îðäåðà ñèìâîëà
extern int   CloseMinute  = 0;     //âðåìÿ çàêðûòèÿ, ìèíóòû
extern bool  clTime       = false; //åñëè true - èñïîëüçîâàòü çàêðûòèå âñåõ îðäåðîâ ïî âðåìåíè
extern bool  comment      = true;  //åñëè true - âêë. åñëè false - âûêë. êîìåíòàðèè íà ãðàôèêå
extern bool  profit       = true;  //åñëè true - òðàëèò òîëüêî ïðè ïðîôèòå, åñëè false - òî ñðàçó òðàëèò 
//------------------------------------------------------------------------------------------
double high,low,Hi,Lo,range,Step,Tick;
double SeLLsL,BuysL;
int i_,cn=0,Day_=0;
int slip = 3,q = 1;
//-----------------------------------------------------------------------------------------
int init(){
if(Digits==3 || Digits==5) q=10; 
slip = slip * q;
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
return(0);}
//-----------------------------------------------------------------------------------------
int start()
  {      
   if(clTime){ 
   if (DayOfWeek()==5 && Hour()==CloseHour-1 && Minute()>=CloseMinute)
   {CloseAllPos(); Print("Çàêðûò ïî âðåìåíè ðàíüøå, ñåãîäíÿ Ïÿòíèöà!!!");}
   if (Hour()==CloseHour && Minute()>=CloseMinute){CloseAllPos(); Print("Çàêðûò ïî âðåìåíè");}
   }
   
   high = iHigh(Symbol(),PERIOD_D1,1); low = iLow(Symbol(),PERIOD_D1,1);     
   range = high - low;
   Step  = range*0.236;   
   
   Day_ = DayOfYear();
   for (cn=0; Day_==TimeDayOfYear(Time[cn]); cn++){}
   i_ = iHighest(Symbol(),0,MODE_HIGH,cn,0); Hi = iHigh(Symbol(),0,i_);
   i_ = iLowest(Symbol(),0,MODE_LOW,cn,0);   Lo = iLow(Symbol(),0,i_);
     
   for(int cnt=1; cnt<30; cnt++){
   if(Lo+Step*cnt+Step > Bid && Lo+Step*cnt <= Bid){BuysL  = (Lo+Step*cnt)-Step; break;}}
           
   for(cnt=1; cnt<30; cnt++){
   if(Hi-Step*cnt-Step < Ask && Hi-Step*cnt >= Ask){SeLLsL = (Hi-Step*cnt)+Step; break;}}
   if(comment){
   Comment("\n"," Today  =  " + TimeToStr(TimeCurrent()),"÷.","   Step = ",DoubleToStr(Step,Digits)
   ,"\n"," BuysL = ",DoubleToStr(BuysL,Digits),"   SeLLsL = ",DoubleToStr(SeLLsL,Digits));} 
   
   for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
   if (OrderSymbol()==Symbol()){
   TrailingStop();}}}
   return(0);
  }
//----------------------------------------------------------------------------------------  
void TrailingStop() {
int Stlev;   
double Up,Dn,Sl,B_,A_;
  Stlev  = MarketInfo(Symbol(),MODE_STOPLEVEL);
  Up = NormalizeDouble(BuysL,Digits); Dn = NormalizeDouble(SeLLsL,Digits);   
  Sl = NormalizeDouble(Stlev*Tick,Digits);
  if(OrderType()==OP_BUY) {
    RefreshRates();
    B_ = NormalizeDouble(Bid,Digits);
    if (!profit || OrderOpenPrice()<Up) {
    if (OrderStopLoss()<Up && B_-Sl>Up) {
    
    OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,Violet);
    return;
    }}}
  
  if(OrderType()==OP_SELL) {
    RefreshRates();
    A_ = NormalizeDouble(Ask,Digits);
    if (!profit || OrderOpenPrice()>Dn) {
    if (OrderStopLoss()>Dn && A_+Sl<Dn) {
      
    OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,Violet);
    return;
    }}}
}
//----------------------------------------------------------------------------------------  
void CloseAllPos()
 {
  for(int i=0;i<OrdersTotal();i++){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;
    RefreshRates();
    if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slip,Yellow); i--;}
    if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slip,Yellow); i--;}
  }
}
//----------------------------------------------------------------------------------------
             
            
            
            
Comments