Author: Copyright � 2009-2010 gorby777
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicator
Miscellaneous
It sends emails
0 Views
0 Downloads
0 Favorites
SV_v4_2_5
//+------------------------------------------------------------------------------+
//|                                                                      SV vX.X |
//|                                               Copyright © 2009-2010 gorby777 |
//|                                                      gorby_e-mail@rambler.ru |
//|Îñîáîå ÑÏÀÑÈÁÎ Êèìó Èãîðþ Â. (aka KimIV,  http://www.kimiv.ru) çà åãî ôóíêöèè |
//+------------------------------------------------------------------------------+
#property copyright "Copyright © 2009-2010 gorby777"
#property link      "gorby_e-mail@rambler.ru"



extern int     LevelHour      = 5;
extern int     LevelRange     = 4;
extern int     TradingHour    = 8;
extern int     TradingMinute  = 52;
extern int     PipsBack       = 22;
extern string     n   =  "---------";
extern int     TakeProfit     = 280;
extern int     StopLoss       = 240;
extern int     MinProfit      = 130;
extern int     TrailingStop   = 140;
extern double  CoeffToLot     = 1;
extern string     s   =  "---------";
extern bool    UseTrailing    = true;
extern bool    SendMail_      = false;
extern bool    MM             = false;
extern bool    TradeAllowed   = true;             // Îñòàíîâêà òîðãîâëè ñîâåòíèêîì


static int     TrailingStep   = 3;
static int     ticket;

int            modeSetOrders  =  1;                //  0 - ïî çàäàííîé öåíå
                                                   //  1 - ñêîððåêòèðîâàòü öåíû
                                                   //  2 - âõîä ïî òåêóùèì öåíàì
int            Slippage       =  0;
color          clOpenBuy      =  LightBlue;         // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
color          clOpenSell     =  LightCoral;        // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
color          clCloseBuy     =  Blue;              // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color          clCloseSell    =  Red;               // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color          clModifyBuy    =  Aqua;              // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
color          clModifySell   =  Tomato;            // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
bool           MarketWatch    =  True;              // Çàïðîñû ïîä èñïîëíåíèå "Market Watch".
static double        Point_;
static int           Magic,MagicOfName,MagicOfSymbol;
static string        symbol,ExpertName, AccNumber;
static double        Price_high     =  0;
static double        Price_low      =  0;
static datetime      DateExp        =  0;
static bool          Start          =  true;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int init(){
   symbol            =  Symbol();
   ExpertName        =  WindowExpertName();
   Magic=Magic(ExpertName,symbol);
   Price_high=GlobalVariableGet(Magic+"_Price_high");
   Price_low=GlobalVariableGet(Magic+"_Price_low");
   DateExp=GlobalVariableGet(Magic+"_DateExp");
   Start=GlobalVariableGet(Magic+"_Start");
   Point_=Point;
   if((Digits == 3 || Digits == 5)){Point_ = 10*Point;
   }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int deinit(){
   ObjectsDeleteAll();
   if(IsTesting()){
      GlobalVariableSet(Magic+"_DateExp",0);
      GlobalVariableSet(Magic+"_Price_high",0); 
      GlobalVariableSet(Magic+"_Price_low",0);
      GlobalVariableSet(Magic+"_Start",1);
      GlobalVariableSet("Time",0);  
      GlobalVariableSet("Lot",0.1);  
   }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int start(){   
   SetLot();
   Mail();
   if (UseTrailing && !IsTradeContextBusy()) TrailPositions();
   if (!TradeAllowed)return(0);
   if(Hour()==TradingHour && Minute() >= TradingMinute && DateExp< TimeCurrent()) {
      if(DayOfWeek()==5 && TradingHour >=22){DateExp=TimeCurrent()+24*60*60; return(0);}
      int shift=TradingHour-LevelHour; 
      if(shift<=0) {
        if(DayOfWeek()==1) {shift=23+shift;}
        else shift=24+shift;
      }
      int pl=3;
      if(Month()==5 || Month()==6|| Month()==7 || Month()==11 || Month()==12)pl=NormalizeDouble(pl*1.7,0);
      Price_high=iHigh(symbol,60,iHighest(symbol,60,MODE_HIGH,LevelRange,shift)) + (3+pl)*Point_;
      Price_low=iLow(symbol,60,iLowest(symbol,60,MODE_LOW,LevelRange,shift))-pl*Point_;
      DateExp=TimeCurrent()+24*60*60;
      GlobalVariableSet(Magic+"_Price_high",Price_high);
      GlobalVariableSet(Magic+"_Price_low",Price_low);
      GlobalVariableSet(Magic+"_Start",0);
      GlobalVariableSet(Magic+"_DateExp",DateExp);            
   }                      
   if(!IsTesting())   Comment("Price_high - ",DoubleToStr(Price_high,Digits),"\n", 
                              "Price_low - ",DoubleToStr(Price_low,Digits),"\n", 
                              "Magic - ",DoubleToStr(Magic,0));
   Start=GlobalVariableGet(Magic+"_Start");
   if(Start || IsTradeContextBusy())return(0);
   double MA14 = iMA(symbol,60,14,0,MODE_SMMA,PRICE_MEDIAN,1);
   double MA41 = iMA(symbol,60,41,0,MODE_SMMA,PRICE_MEDIAN,1);   
   Price_high=GlobalVariableGet(Magic+"_Price_high");
   Price_low=GlobalVariableGet(Magic+"_Price_low");
   int pb=PipsBack;
   if(Month()==5 || Month()==6|| Month()==7 || Month()==11  || Month()==12)pb=NormalizeDouble(PipsBack*1.7,0); 
   if(Bid >= Price_high+10*Point_){
      double k=1;
      if(Price_low>MA41){k=0.5;Price_high=Price_high-pb*Point_;}      
      double SSP=Price_high;
      DateExp=GlobalVariableGet(Magic+"_DateExp");     
      if(Price_high>MA14)
         ticket = OrderSend_(symbol, OP_SELLSTOP, GlobalVariableGet("Lot"), SSP, Slippage,
            SSP+StopLoss*k*Point_, SSP - TakeProfit*k*Point_, ExpertName, Magic,DateExp);
      if(ticket>0){ticket=-1;
         Price_high=0;
         Price_low=0;
         Start=1;
         GlobalVariableSet(Magic+"_Price_high",Price_high); 
         GlobalVariableSet(Magic+"_Price_low",Price_low);
         GlobalVariableSet(Magic+"_Start",Start);
         return(0);
      }
   }

   if(Ask<=Price_low-10*Point_){
      k=1;
      if(Price_high<MA41){k=0.5;Price_low=Price_low+pb*Point_;}
      DateExp=GlobalVariableGet(Magic+"_DateExp");
      double BSP=Price_low;
      if(Price_low<MA14)
         ticket = OrderSend_(symbol, OP_BUYSTOP, GlobalVariableGet("Lot"), BSP, Slippage, 
            BSP-StopLoss*k*Point_, BSP + TakeProfit*k*Point_, ExpertName, Magic,DateExp);
      if(ticket>0){ticket=-1;
         Price_high=0;
         Price_low=0;
         Start=1;
         GlobalVariableSet(Magic+"_Price_high",Price_high); 
         GlobalVariableSet(Magic+"_Price_low",Price_low);
         GlobalVariableSet(Magic+"_Start",Start);
         return(0);
      }
   }
}         

//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Îòïðàâëÿåò îðäåð                                               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    op - îïåðàöèÿ                                                           |
//|    ll - ëîò                                                                |
//|    pp - öåíà                                                               |
//|    slip-ñëèïïàäæ                                                           |
//|    sl - óðîâåíü ñòîï                                                       |
//|    tp - óðîâåíü òåéê                                                       |
//|    co - êîììåíòàðèé                                                        |
//|    mn - Magic Number                                                       |
//|    ex - Ñðîê èñòå÷åíèÿ                                                     |
//+----------------------------------------------------------------------------+
int OrderSend_(string sy, int op, double ll, double pp,double Slippage,
              double sl=0, double tp=0,  string co="",int mn=0, datetime ex=0, color cl=0) {
  cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, clOpenBuy, clOpenSell);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;

  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=5; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    pp=NormalizeDouble(pp,Digits);
    sl=NormalizeDouble(sl,Digits);
    tp=NormalizeDouble(tp,Digits);
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, ex, cl);
    if (ticket>0) {
       break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (OrderExist_(sy, op, mn, ot)) {
           break;
        }
        Print("Error(",err,") set order: ",", try ",it);
        continue;
      }
      
      mp=Point_;
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);

      Print("Error(",err,") set order: ",", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",op,
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Íåïðàâèëüíûå ñòîïû
      if (err==130) {
        // Êîððåêòèðîâêà öåíîâûõ óðîâíåé
        if (modeSetOrders==1) {
          Sleep(1000*5.3);
          switch (op) {
            case OP_BUYLIMIT:
              if (pp>pa-msl*mp) pp=pa-msl*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_BUYSTOP:
              if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_SELLLIMIT:
              if (pp<pb+msl*mp) pp=pb+msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
            case OP_SELLSTOP:
              if (pp>pb-msl*mp) pp=pb-msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
          }
          Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè");
          continue;
        }
        // Âõîä ïî òåêóùèì öåíàì
        if (modeSetOrders==2) {
          Print("SetOrder(): Âõîä ïî òåêóùèì öåíàì");
          if (op==OP_BUYLIMIT || op==OP_BUYSTOP) OpenPosition(sy, OP_BUY, ll, sl, tp, mn, co);
          if (op==OP_SELLLIMIT || op==OP_SELLSTOP) OpenPosition(sy, OP_SELL, ll, sl, tp, mn, co);
          break;
        }
      }
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        TradeAllowed=false; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Îáíóëåíèå äàòû èñòå÷åíèÿ
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
return(ticket);
}
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Âîçâðàùàåò ðåçóëüòàò ïðîâåðêè ñóùåñòâîâàíèÿ îòêðûòîé ïîçèöèè   |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ óñòàíîâêè)          |
//+----------------------------------------------------------------------------+
bool OrderExist_(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}

//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 10.04.2008                                                     |
//|  Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå.                            |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    op - îïåðàöèÿ                                                           |
//|    ll - ëîò                                                                |
//|    sl - óðîâåíü ñòîï                                                       |
//|    tp - óðîâåíü òåéê                                                       |
//|    mn - MagicNumber                                                        |
//|    co - êîììåíòàðèé                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0, string co="") {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;

  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=5; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    sl=NormalizeDouble(sl, dg);  
    tp=NormalizeDouble(tp, dg);        
    ot=TimeCurrent();
    if (MarketWatch)
      ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, co, mn, 0, clOpen);
    else
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, 0, clOpen);
    if (ticket>0) {
       break;
    } else {
      err=GetLastError();
      
      
      // Âûâîä ñîîáùåíèÿ îá îøèáêå
      Print("Error(",err,") opening position: ",", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        TradeAllowed=false; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
           break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
    if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify_(-1, sl, tp);
  }
}
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 06.03.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé                          |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ îòêðûòèÿ)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    pp - öåíà óñòàíîâêè îðäåðà                                              |
//|    sl - öåíîâîé óðîâåíü ñòîïà                                              |
//|    tp - öåíîâîé óðîâåíü òåéêà                                              |
//|    ex - äàòà èñòå÷åíèÿ                                                     |
//+----------------------------------------------------------------------------+
bool OrderModify_(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm=true;
  color  cl=IIFc(OrderType()==OP_BUY
              || OrderType()==OP_BUYLIMIT
              || OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;

  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);

  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=5; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm){
         return(true);
      } 
      else {
        er=GetLastError();

        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
   return(fm);
}
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ

void TrailPositions() //ïîðîãîâûé òðåéëèíã ñòîï
{  
  double MA14 = iMA(symbol,60,14,0,MODE_SMMA,PRICE_MEDIAN,1);
  double MA41 = iMA(symbol,60,41,0,MODE_SMMA,PRICE_MEDIAN,1);
  int Orders = OrdersTotal();
  
  for (int i=Orders-1;i>=0;i--) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderMagicNumber()!=Magic) continue; 
      int mp=MinProfit;
      int ts =TrailingStop;
      int tp =TakeProfit;      
    if (OrderType() == OP_BUY) {
      if (MA14<MA41){mp=MinProfit*0.7;ts=TrailingStop*0.7;tp=TakeProfit*0.7;}
      if((Bid-OrderOpenPrice())/(OrderTakeProfit()-OrderOpenPrice()) >0.7){ts=TrailingStop*0.5;}
      if (Bid-OrderOpenPrice() > mp*Point_) {
        if (OrderStopLoss() <= Bid-(ts+TrailingStep)*Point_) {
          OrderModify_(OrderOpenPrice(), Bid-ts*Point_, OrderTakeProfit(), 0);
        }
        if (OrderTakeProfit()<=MA14+(tp-mp-TrailingStep)*Point_) {
          OrderModify_(OrderOpenPrice(), OrderStopLoss(), MA14+(tp-mp)*Point_, 0);        
        }
      }    
    }
    if (OrderType() == OP_SELL) {
      if (MA14>MA41){mp=MinProfit*0.7;ts=TrailingStop*0.7;tp=TakeProfit*0.7;}
      if((OrderOpenPrice()-Ask)/(OrderOpenPrice()-OrderTakeProfit()) > 0.7){ts=TrailingStop*0.5;}      
      if (OrderOpenPrice()-Ask > mp*Point_) {
        if (OrderStopLoss() >= Ask+(ts+TrailingStep)*Point_) {
          OrderModify_(OrderOpenPrice(), Ask+ts*Point_, OrderTakeProfit(), 0);
        }
        if (OrderTakeProfit()>=MA14-(tp-mp-TrailingStep)*Point_) {
          OrderModify_(OrderOpenPrice(), OrderStopLoss(), MA14-(tp-mp)*Point_, 0);        
        }
      }
    }
  }
}
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ        
int Magic(string ExpertName, string symbol){
   for(int i=StringLen(ExpertName)-1;i>=0;i--){
      int MagicOfName=MagicOfName+StringGetChar(ExpertName,i)*(i+1);
   }
   int MagicOfSymbol=StringGetChar(symbol,0)*StringGetChar(symbol,5)+
         StringGetChar(symbol,1)*StringGetChar(symbol,4)+
         StringGetChar(symbol,2)*StringGetChar(symbol,3);
   int Magic=MagicOfSymbol+MagicOfName;
   return(Magic);
}
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ        
void SetLot(){
   if(!MM) return(0);
   if(Hour()!=10 || GlobalVariableGet("Time") + 23*60*60 > TimeCurrent()) return(0);
   double LotNew = NormalizeDouble(AccountEquity()/100000*CoeffToLot,2);
   if (LotNew > GlobalVariableGet("Lot"))GlobalVariableSet("Lot",LotNew);
   GlobalVariableSet("Time",TimeCurrent());
}
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ
void Mail(){
   static int LastHour;
   if(SendMail_ && LastHour!=Hour()){
      int buys=0;
      int sells=0;
      int ords=0; 
      for(int i=OrdersTotal()-1;i>=0;i--){
         OrderSelect(i,SELECT_BY_POS);
         if(OrderType()==0)buys++;
         if(OrderType()==1)sells++;
         if(OrderType()>1)ords++;               
      }
   string Level = "ÌÍÎÃÎ ";
   if(AccountMargin()!=0)Level=DoubleToStr(100*AccountEquity()/AccountMargin(),0);
   SendMail(TimeToStr(TimeCurrent(),TIME_MINUTES)+", "+DoubleToStr(AccountNumber(),0)+"  =",
            "=  "+DoubleToStr(AccountEquity(),0)+", "+Level+"%, b-"+buys+", s-"+sells+", o-"+ords);
   LastHour=Hour();

   } 
}

//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ

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 ---