//+----------------------------------------------------------------------------+
//|                                                         Çàñàäà.mq4         |
//|                                                          Zuzabush          |
//|                                                  www.Zuzabush@yandex.ru    |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//+----------------------------------------------------------------------------+
#property copyright "Zuzabush"
#property link      "www.Zuzabush@yandex"
 
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern bool  AllSymbols   = False;     // Óïðàâëÿòü âñåìè ñòîïîâûìè îðäåðàìè
extern int   Otstup  = 10;             // Íà÷àëüíàÿ äèñòàíöèÿ
extern int   TrailingStop = 10;        // Ôèêñèðîâàííûé ðàçìåð òðàëà îòë
extern int   TrailingStep = 1;         // Øàã òðàëà îòë
extern int   PK = 15;                  // Êîýô âèðò ïðîôèò
extern int   SK = 1;                   // Êîýô âèðò ñòîï
extern bool  UseSound     = True;      // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern bool  ShowComment  = True;      // Ïîêàçûâàòü êîììåíòàðèé
extern color clModifyBuy  = Aqua;      // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
extern color clModifySell = Tomato;    // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
 
 
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool   gbNoInit     = False;           // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
string SoundSuccess = "ok.wav";        // Çâóê óñïåõà
string SoundError   = "timeout.wav";   // Çâóê îøèáêè
int    NumberOfTry  = 3;               // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
double Take;
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>             // Ñòàíäàðòíàÿ áèáëèîòåêà
 
 
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  expert initialization function                                            |
//+----------------------------------------------------------------------------+
void init() {
  gbNoInit=False;
  if (!IsTradeAllowed()) {
    Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
    gbNoInit=True; return;
  }
  if (!IsLibrariesAllowed()) {
    Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
    gbNoInit=True; return;
  }
  if (!IsTesting()) {
    if (IsExpertEnabled()) Comment("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
    else Comment("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
  }
  start();
}
 
//+----------------------------------------------------------------------------+
//|  expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }
 
//+----------------------------------------------------------------------------+
//|  expert start function                                                     |
//+----------------------------------------------------------------------------+
void start() {
 
   bool   result;
   int    error;
   int Lots  ;
   int order;
   int KO = AccountBalance()/500; 
      
       Lots = KO ;
 
           if   (OrdersTotal()<1||((OrdersTotal()<2)&&(OrderType()==OP_BUYSTOP))) //åñëè , òî îòêðûâàåì
            order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",16384,0,Green);
            
                      if  ((OrderType()==OP_SELLSTOP)&&(OrdersTotal()<2))  //åñëè , òî îòêðûâàåì
       
            order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",16384,0,Green);
            
        
          
       if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         if (((AccountEquity()-AccountBalance())>KO*PK)||(AccountEquity()-AccountBalance())<-KO*SK )
     {   if(OrderType()==OP_BUY)    result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); 
          if(OrderType()==OP_SELL)  result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),30,CLR_NONE); 
          if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
           OrderDelete(OrderTicket());
 
          
           if(result!=TRUE) { error=GetLastError();
              Print("LastError = ",error, " ",Symbol()); }
           else error=0; }
   else Print( "Error when order select ", GetLastError());
  if (gbNoInit) {
    Comment("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
  }
  if (IsTesting()) {
    if (ShowComment) {
      Comment(IIFs(AllSymbols, "AllSymbols  ", "")
             ,"TrailingStop=", DoubleToStr(TrailingStop, 0), "ï.  "
             ,"TrailingStep=", DoubleToStr(TrailingStep, 0), "ï.  "
             ,IIFs(UseSound, "UseSound  ", "")
             );
    } else Comment("");
  }
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllSymbols || OrderSymbol()==Symbol()) {
        TrailingOrders();
      }
    }
  }
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 18.07.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
 
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  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<=NumberOfTry; it++) {
   
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm) {
        if (UseSound) PlaySound(SoundSuccess); break;
      } else {
        er=GetLastError();
        if (UseSound) PlaySound(SoundError);
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//|  Ñîïðîâîæäåíèå îðäåðîâ ïðîñòûì òðàëîì                                      |
//+----------------------------------------------------------------------------+
void TrailingOrders() {
  double di, pa, pb, pp, sl, tp;
 
  pp=MarketInfo(OrderSymbol(), MODE_POINT);
 
  if (OrderType()==OP_BUYSTOP) {
    pa=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderOpenPrice()-pa!=(TrailingStop+TrailingStep-1)*pp) {
      di=OrderOpenPrice()-pa-TrailingStop*pp;
 
        ModifyOrder(pa+TrailingStop*pp, sl, tp);
    }
  }
  if (OrderType()==OP_SELLSTOP) {
    pb=MarketInfo(OrderSymbol(), MODE_BID);
 
    if (pb-OrderOpenPrice()!=(TrailingStop+TrailingStep-1)*pp) {
      di=pb-OrderOpenPrice()-TrailingStop*pp;
 
     ModifyOrder(pb-TrailingStop*pp, sl, tp);
    }
  }
}
 
 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
             
            
            
            
Comments