Trall_Rabbit_SL_MM3Tp

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_SL_MM3Tp
//+----------------------------------------------------------------------------------------+
//|                                                              Trall_Rabbit_SL_MM+Tp.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
//îòñ÷åò áåðåòñÿ îò õàÿ åñëè òðàëèì ñåëë îðäåðà, è îò ëîó åñëè òðàëèì áàé îðäåðà
//Òðàë òàêæå çàêðûâàåò ïî ðûíêó îòêðûòûå îðäåðà ñèìâîëà ïî âðåìåíè, 
//â ïÿòíèöó çàêðûâàåò íà ÷àñ ðàíüøå
//Äîáàâëåí ÌÌ ðàñ÷åòà ëîòà îò ïðîöåíòà äåïîçèòà çàâèñèìûé îò ïëå÷à, è ñòîïëîñà
//Íóæíî óñòàíîâèòü ïëå÷î Áðîêåðà âàøåãî, ìîåãî îíî ðàâíî Pleho = 200; - äëÿ ÷åãî ýòî íóæíî
//êîãäà áðîêåð àâòîìàòîì ïîíèçèò ïëå÷î òî âàøè ðèñêè ñðàçó áóäóò óìåíüøàòüñÿ ïðîïîðöèàíàëüíî
//ïëå÷ó ïðîöåíò îñòàíåòñÿ òàêèì æå è ïîòåðè ïðè ñòîïå áóäóò îäèíàêîâûìè êàê ïðè íà÷àëüíîì ïëå÷å
//Äàëåå ïðîöåíò îò äåïîçèòà Percent = 5; ñ êîòîðûì âû ìîæåòå ñåáå ïîçâîëèòü ðàñòàòüñÿ â ñëó÷àå ñòîïà
//StopLoss ïî óìîë÷àíèþ ðàâåí íóëþ, ñòîï áåðåòñÿ îò øàãà Rabbit åñëè øàã ìåíüøå 35 ïóíêòîâ(4-õ çíàê)
//òî øàã áóäåò ðàâåí 35 ïóíêòàì. Òàêæå ìîæíî ïðîñòî óñòàíîâèòü ñâîé ñòîï òîãäà ðàñ÷åò áóäåò 
//ïî âàøåìó ñòîïó, åñëè ïîñòàâèòå StopLoss = 0; òî ðàñ÷åò ïî øàãó Rabbit
//Ñòîï Ëîññ óñòàíàâëèâàåòñÿ àâòîìàòè÷åñêè ïîñëå óñòàíîâêè âàìè îðäåðà. 
//Òåéêïðîôèò óñòàíàëèâàåòñÿ òîæå àâòîìàòè÷åñêè  = øàã Rabbit*5, èëè ìîæíî óñòàíîâèòü ñâîé òåéêïðîôèò
//åñëè TakeProfit = 0; òî òåéê óñòàíàâëèâàåòñÿ àâòîìàòè÷åñêè øàã Rabbit*5 
//------------------------------------------------------------------------------------------
extern int     Pleho        = 200;   //íà÷àëüíîå ïëå÷î, !!! ÓÑÒÀÍÎÂÈÒÜ ÏËÅ×Î ÍÀ×ÀËÜÍÎÅ !!!
extern int     Percent      = 5;     //ïðîöåíò îò ñâîáîäíûõ ñðåäñòâ
extern int     StopLoss     = 0;     //àäàïòèðîâàí ïîä 5-è çíàê, âûñòàâëÿòü çíà÷åíèå ñòîïà êàê äëÿ 4-õ çíàêà
extern int     TakeProfit   = 0;     //àäàïòèðîâàí ïîä 5-è çíàê, âûñòàâëÿòü çíà÷åíèå òåéêà êàê äëÿ 4-õ çíàêà
extern int     CloseHour    = 22;    //âðåìÿ (÷àñû)ïîñëå êîòîðîãî çàêðîåì âñå îòêðûòûå îðäåðà ñèìâîëà
extern int     CloseMinute  = 0;     //âðåìÿ çàêðûòèÿ, ìèíóòû
extern bool    clTime       = false; //åñëè true - èñïîëüçîâàòü çàêðûòèå âñåõ îðäåðîâ ïî âðåìåíè
extern bool    comment      = true;  //åñëè true - âêë. åñëè false - âûêë. êîìåíòàðèè íà ãðàôèêå
extern bool    profit       = false; //åñëè 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 st = 35;
bool init = false;//ïðè ñìåíå ñ÷¸òà, âêëþ÷åíèè/âûêëþ÷åíèè, ôóíêöèÿ init() íå âûçûâàåòñÿ ïîâòîðíî...
//-----------------------------------------------------------------------------------------
int init(){
TakeProfit = TakeProfit * q;
StopLoss = StopLoss * q;
if(init) return(0);
if(Digits==3 || Digits==5) q=10; 
slip = slip * q;
st = st * q; 
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
init = true;
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<50; cnt++){
   if(Lo+Step*cnt+Step > Bid && Lo+Step*cnt <= Bid){BuysL  = (Lo+Step*cnt)-Step; break;}}
           
   for(cnt=1; cnt<50; cnt++){
   if(Hi-Step*cnt-Step < Ask && Hi-Step*cnt >= Ask){SeLLsL = (Hi-Step*cnt)+Step; break;}}
   
   
   if(TakeProfit==0)TakeProfit = (Step/Tick)*5;
   if(StopLoss==0 && Step/Tick >= st)StopLoss = Step/Tick;
   if(StopLoss==0 && Step/Tick <= st)StopLoss = st;
   
        
   if(comment){
   Comment("\n"," Today  =  " + TimeToStr(TimeCurrent()),"÷.","   Step = ",Step/Tick
   ,"\n"," BuysL = ",DoubleToStr(BuysL,Digits),"   SeLLsL = ",DoubleToStr(SeLLsL,Digits)
   ,"\n"," Ïëå÷î = ",Pleho,"\n"," Ïëå÷î Áðîêåðà = ",AccountLeverage()
   ,"\n"," Percent = ",Percent,"\n"," PercentLot = ",DoubleToStr(PercStopLots(StopLoss),2)
   ,"\n"," StopLoss = ",StopLoss
   ,"\n"," TakeProfit = ",TakeProfit);}
   
   for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
   if (OrderSymbol()==Symbol()){
   TrailingStop(StopLoss,TakeProfit);}}}

   return(0);
  }
//----------------------------------------------------------------------------------------  
void TrailingStop(int StLoss, int TkPofit) {

int Stlev;   
double Up,Dn,Sl,B_,A_,Take,Loss;

  Stlev  = MarketInfo(Symbol(),MODE_STOPLEVEL);  Sl   = NormalizeDouble(Stlev*Tick,Digits);
  Up     = NormalizeDouble(BuysL,Digits);        Dn   = NormalizeDouble(SeLLsL,Digits);   
   
  RefreshRates();
  B_ = NormalizeDouble(Bid,Digits); A_ = NormalizeDouble(Ask,Digits);  
  
if (OrderStopLoss()!=0) {  
  if(OrderType()==OP_BUY) {   
        if ((!profit || OrderOpenPrice()<Up)&&(OrderStopLoss()<Up && B_-Sl>Up)) {
        OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,Violet);}}
      
  if(OrderType()==OP_SELL){
        if ((!profit || OrderOpenPrice()>Dn)&&(OrderStopLoss()>Dn && A_+Sl<Dn)) { 
        OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,Violet);}}
}
      
if (OrderStopLoss()==0||OrderTakeProfit()==0) {  
  if(OrderType()==OP_BUY||OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP) {
        Loss = NormalizeDouble(OrderOpenPrice()-StLoss*Tick,Digits); 
        Take = NormalizeDouble(OrderOpenPrice()+TkPofit*Tick,Digits); 
        OrderModify(OrderTicket(),OrderOpenPrice(),Loss,Take,0,Violet);}
  
  if(OrderType()==OP_SELL||OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP) {    
        Loss = NormalizeDouble(OrderOpenPrice()+StLoss*Tick,Digits); 
        Take = NormalizeDouble(OrderOpenPrice()-TkPofit*Tick,Digits);  
        OrderModify(OrderTicket(),OrderOpenPrice(),Loss,Take,0,Violet);}
}       
}
//----------------------------------------------------------------------------------------  
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--;}
  }
}
//----------------------------------------------------------------------------------------
double PercStopLots(int SL) 
{   
   double Lots    =MarketInfo(Symbol(),MODE_MINLOT);
   string Symb    =Symbol();                         // Ôèíàíñîâûé èíñòðóì.
   double min_lot =MarketInfo(Symbol(),MODE_MINLOT); // Ìèí. ðàçìåð. ëîòîâ
   double max_lot =MarketInfo(Symbol(),MODE_MAXLOT); // Ìàêñ. ðàçì.  ëîòîâ
   double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);// Øàã èçìåíåí ðàçìåðà
   double Free    =AccountFreeMargin();              // Ñâîáîäíûå ñðåäñòâà
   int    Leve    =AccountLeverage();                // Ïëå÷î Áðîêåðà 
   
if(Percent!=0)
  {
  double lot = MathFloor(Free*Leve*Percent/100.0/Pleho/SL/Step)*Step;
  if(lot < min_lot) lot = min_lot;
  if(lot > max_lot) lot = max_lot;
}else lot=Lots; return(lot);}
//----------------------------------------------------------------------------------------

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---