Author: Copyright � 2009-2010 gorby777
Profit factor:
0.00
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