Trall_Rabbit

Author: Martingeil� 2011,
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
Trall_Rabbit
//+----------------------------------------------------------------------------------------+
//|                                                                       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