← К каталогу
Исходный код · ID 660

trade manager.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Это торговый советник для MetaTrader 4, который создаёт интерактивную панель управления на графике. Панель позволяет вручную открывать и закрывать рыночные ордера на покупку и продажу, а также размещать и удалять отложенные ордера (BuyStop, SellStop, BuyLimit, SellLimit). Интерфейс отображает текущие позиции, объёмы, прибыль и состояние счёта в реальном времени.

Советник поддерживает настройку размера лота, проскальзывания, стоп-лосса, тейк-профита, трейлинг-стопа и защиты от убыточных сделок для направлений покупки и продажи. Значения стоп-лосса и тейк-профита сохраняются в глобальных переменных терминала и восстанавливаются после перезагрузки графика. Доступна инкрементальная корректировка параметров через кнопки на панели и диалог подтверждения перед выполнением торговых операций.

Панель предлагает несколько режимов отображения окон и цветовых схем, выбираемых через встроенные элементы управления. Также реализована функция частичного закрытия позиции заданным процентом и возможность перемещения окна панели по графику.

Настройки программы

НастройкаОписание
Lot Размер лота — Задаёт количество лотов для открытия новых ордеров
slippage Проскальзывание — Допустимое отклонение цены исполнения ордера в пунктах
distance for pending orders (delta) Расстояние для отложенных ордеров — Смещение цены от текущей для размещения отложенных ордеров
increment for points (dpips) Шаг изменения в пунктах — Величина шага увеличения или уменьшения стоп-лосса и тейк-профита в пунктах
increment for lot size (dlot) Прирост размера лота — Шаг изменения размера лота при корректировке
increment for risk in % (dpr) Прирост риска в процентах — Шаг изменения процента риска при расчёте размера лота
confirmation Подтверждение операций — Включает диалоговое окно подтверждения перед выполнением торговых действий
TradeNoLossBuy Защита от убытков для покупки — Активирует защиту стоп-лосса на уровне входа для покупочных позиций
TradeNoLossSell Защита от убытков для продажи — Активирует защиту стоп-лосса на уровне входа для продажных позиций
Magic Магическое число — Идентификатор для фильтрации ордеров советника
Font Шрифт — Шрифт, используемый для элементов интерфейса панели
Width Ширина шрифта — Размер шрифта элементов панели
TypeWind Тип окна — Режим отображения панели: определяет компоновку и набор отображаемых элементов
TypeColor Тип цветовой схемы — Выбор цветовой темы интерфейса панели
Color1 Цвет 1 — Цветовой элемент интерфейса панели
Color2 Цвет 2 — Цветовой элемент интерфейса панели
Color3 Цвет 3 — Цветовой элемент интерфейса панели
Color4 Цвет 4 — Цветовой элемент интерфейса панели
Color5 Цвет 5 — Цветовой элемент интерфейса панели
Color6 Цвет 6 — Цветовой элемент интерфейса панели
Color7 Цвет 7 — Цветовой элемент интерфейса панели
Color8 Цвет 8 — Цветовой элемент интерфейса панели
Color9 Цвет 9 — Цветовой элемент интерфейса панели
MoveWindow Перемещение окна — Разрешает перетаскивание панели по графику
Получить полный код

Поиск по коду файла

#property version   "2.00"
#property strict
#property description " no any line of code changed !"

 int     StopLoss_Buy      = 0,         
         TakeProfit_Buy    = 0,          
         TrailingStop_Buy  = 0,          
         NoLoss_Buy        = 0,          
         StopLoss_Sell     = 0,         
         TakeProfit_Sell   = 0,         
         TrailingStop_Sell = 0,          
         NoLoss_Sell       = 0;          

input int      TrailingStep      = 1,           
               TrailingStart     = 0;           

extern double  Lot               = 0.02;       
input int      slippage          = 3;              
input int      delta             = 200;//distance for pending orders               
input int      dpips             = 5; // increment for points 
input double   dlot              = 0.01;// increment for lot size
input double   dpr               = 1; // increment for risk in %
input bool     confirmation      = false;   
extern bool    TradeNoLossBuy    = true;
extern bool    TradeNoLossSell   = true;
extern int     Magic             = 0;  

input string   Font        = "Arial"; 
input int      Width       = 10;                
extern int     TypeWind    = 1;                 

extern int     TypeColor   = 0;               
input color    Color1     = clrBlack;        
input color    Color2     = clrWhite;          
input color    Color3     = clrBlue;          
input color    Color4     = clrRed;            
input color    Color5     = clrGreen;          
input color    Color6     = clrLemonChiffon;   
input color    Color7     = clrLightGray;      
input color    Color8     = clrSnow;           
input color    Color9     = clrGray;           

extern bool    MoveWindow    = false;

long X=10;
long Y=10;

double StopLossB,TakeProfitB,TrailingStopB,NoLossB,StopLossS,TakeProfitS,TrailingStopS,NoLossS;
string InpName="Trade Manager";
double bid,risk=1,cz=100;
int STOPLEVEL;
string AC,knTpB,knSlB,knTsB,knNlB,knTpS,knSlS,knTsS,knNlS,knTrNlB,knTrNlS;
color Color_1,Color_2,Color_3,Color_4,Color_5,Color_6,Color_7,Color_8,Color_9;

void _color(int t)
{
   switch(t)
   {
   case 0:
      Color_1     = Color1;
      Color_2     = Color2;
      Color_3     = Color3;
      Color_4     = Color4;
      Color_5     = Color5;
      Color_6     = Color6;
      Color_7     = Color7;
      Color_8     = Color8;
      Color_9     = Color9;
      break;
   case 1:
      Color_1     = clrWhite; 
      Color_2     = clrBlack;  
      Color_3     = clrLime;   
      Color_4     = clrRed;    
      Color_5     = clrLime;   
      Color_6     = clrGray;   
      Color_7     = clrGray;   
      Color_8     = clrDarkGray;
      Color_9     = clrBlack;  
      break;
   case 2:
      Color_2     = clrBlack; 
      Color_1     = clrWhite;  
      Color_3     = clrLime;   
      Color_4     = clrRed;    
      Color_5     = clrLime;   
      Color_6     = clrSlateGray; 
      Color_7     = clrSlateGray;
      Color_8     = clrLightSteelBlue;
      Color_9     = clrBlack; 
      break;
   case 3:
      Color_2     = clrBlack;  
      Color_1     = clrWhite;  
      Color_3     = clrLime;   
      Color_4     = clrRed;    
      Color_5     = clrLime;   
      Color_6     = clrDarkGray;
      Color_7     = clrDarkGray;
      Color_8     = clrSilver;  
      Color_9     = clrBlack;
      break;
   default:
      Color_1     = clrWhite;  
      Color_2     = clrBlack;  
      Color_3     = clrLime;   
      Color_4     = clrRed;    
      Color_5     = clrLime;   
      Color_6     = clrDarkGray;
      Color_7     = clrDarkGray;
      Color_8     = clrSilver;  
      Color_9     = clrBlack;
      break;
   }
}

int OnInit()
{
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
{
   ObjectDelete(0,InpName);
   Del();
   ObjectDelete(0,"kn min");
   ObjectDelete(0,"kn color");
   ObjectDelete(0,"Symbol");
   ObjectDelete(0,"_fon1_");
   ObjectDelete(0,"_fon2_");
   ObjectDelete(0,"NoLoss_NLb");
   ObjectDelete(0,"NoLoss_NLs");
   ObjectDelete(0,"NoLoss_NL");
}

void Del()
{
   ObjectDelete(0,"_fon3_");
   ObjectDelete(0,"_5_");
   ObjectDelete(0,"_6_");
   ObjectDelete(0,"_7_");
   ObjectDelete(0,"_8_");
   ObjectDelete(0,"_9_");
   ObjectDelete(0,"_10_");
   ObjectDelete(0,"_11_");
   ObjectDelete(0,"_12_");
   ObjectDelete(0,"_13_");
   ObjectDelete(0,"_14_");
   ObjectDelete(0,"_15_");
   ObjectDelete(0,"_16_");
   ObjectDelete(0,"_17_");
   ObjectDelete(0,"2");
   ObjectDelete(0,"3");
   ObjectDelete(0,"4");
   ObjectDelete(0,"5");
   ObjectDelete(0,"6");
   ObjectDelete(0,"7");
   ObjectDelete(0,"8");
   ObjectDelete(0,"9");
   ObjectDelete(0,"10");
   ObjectDelete(0,"11");
   ObjectDelete(0,"12");
   ObjectDelete(0,"kn Buy");
   ObjectDelete(0,"kn Sell");
   ObjectDelete(0,"kn BuyStop");
   ObjectDelete(0,"kn SellLimit");
   ObjectDelete(0,"kn BuyLimit");
   ObjectDelete(0,"kn SellStop");
   ObjectDelete(0,"kn Del BuyStop");
   ObjectDelete(0,"kn Del SellLimit");
   ObjectDelete(0,"kn Close Buy");
   ObjectDelete(0,"kn Close Sell");
   ObjectDelete(0,"kn Del BuyLimit");
   ObjectDelete(0,"kn Del SellStop");

   ObjectDelete(0,knTpB);
   ObjectDelete(0,knSlB);
   ObjectDelete(0,knTsB);
   ObjectDelete(0,knNlB);
   ObjectDelete(0,knTpS);
   ObjectDelete(0,knSlS);
   ObjectDelete(0,knTsS);
   ObjectDelete(0,knNlS);
   ObjectDelete(0,knTrNlB);
   ObjectDelete(0,knTrNlS);

   ObjectDelete(0,StringConcatenate(knTpB," up"));
   ObjectDelete(0,StringConcatenate(knSlB," up"));
   ObjectDelete(0,StringConcatenate(knTsB," up"));
   ObjectDelete(0,StringConcatenate(knNlB," up"));

   ObjectDelete(0,StringConcatenate(knTpS," up"));
   ObjectDelete(0,StringConcatenate(knSlS," up"));
   ObjectDelete(0,StringConcatenate(knTsS," up"));
   ObjectDelete(0,StringConcatenate(knNlS," up"));

   ObjectDelete(0,StringConcatenate(knTpB," dn"));
   ObjectDelete(0,StringConcatenate(knSlB," dn"));
   ObjectDelete(0,StringConcatenate(knTsB," dn"));
   ObjectDelete(0,StringConcatenate(knNlB," dn"));

   ObjectDelete(0,StringConcatenate(knTpS," dn"));
   ObjectDelete(0,StringConcatenate(knSlS," dn"));
   ObjectDelete(0,StringConcatenate(knTsS," dn"));
   ObjectDelete(0,StringConcatenate(knNlS," dn"));

   ObjectDelete(0,"lot_");
   ObjectDelete(0,"kn lot pr");
   ObjectDelete(0,"kn lot l");
   ObjectDelete(0,"kn lot up");
   ObjectDelete(0,"kn lot dn");

   ObjectDelete(0,"kn CZ1");
   ObjectDelete(0,"_CZ1_");
   ObjectDelete(0,"kn CZ");

   ObjectDelete(0,"kn cz up");
   ObjectDelete(0,"kn cz dn");

   ObjectDelete(0,"spread");
   ObjectDelete(0,"Profit");
   ObjectDelete(0,"_Profit");
   ObjectDelete(0,"Equity");
   ObjectDelete(0,"_Equity");
   ObjectDelete(0,"Balance");
   ObjectDelete(0,"_Balance");
}

int start()
{
      // код доступен только после оплаты
   }

bool ButtonCreate(const long              chart_ID=0,               
                  const string            name="Button",            
                  const int               sub_window=0,             
                  const long               x=0,                     
                  const long               y=0,                     
                  const int               width=50,                 
                  const int               height=18,                
                  const string            text="Button",            
                  const string            font="Arial",             
                  const int               font_size=10,             
                  const color             clr=clrNONE,      
                  const color             clrON=clrNONE,    
                  const color             clrOFF=clrNONE,   
                  const bool              state=false)             
  {
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE);
   }
   color back_clr;
   if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF;
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}

bool RectLabelCreate(const long             chart_ID=0,               
                     const string           name="RectLabel",        
                     const int              sub_window=0,             
                     const long              x=0,                      
                     const long              y=0,                      
                     const int              width=50,                 
                     const int              height=18,                
                     const color            back_clr=clrNONE,  
                     const color            clr=clrNONE,       
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,       
                     const int              line_width=1,            
                     const bool             back=false,               
                     const bool             selection=false,          
                     const bool             hidden=true,              
                     const long             z_order=0)                
  {
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}

bool LabelCreate(const long              chart_ID=0,               // ID ???????
                 const string            name="Label",             // ??? ?????
                 const int               sub_window=0,             // ????? ???????
                 const long              x=0,                      // ?????????? ?? ??? X
                 const long              y=0,                      // ?????????? ?? ??? y
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // ???? ??????? ??? ????????
                 const string            text="Label",             // ?????
                 const string            font="Arial",             // ?????
                 const int               font_size=10,             // ?????? ??????
                 const color             clr=clrNONE,      
                 const double            angle=0.0,                // ?????? ??????
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ?????? ????????
                 const bool              back=false,               // ?? ?????? ?????
                 const bool              selection=false,          // ???????? ??? ???????????
                 const bool              hidden=true,              // ????? ? ?????? ????????
                 const long              z_order=0)                // ????????? ?? ??????? ?????
{
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
      {
         Print(__FUNCTION__,": failed to create text label! Error code = ",GetLastError());
         return(false);
      }
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   return(true);
  }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{

   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      string clickedChartObject=sparam;
      if (clickedChartObject=="kn min")
      {
         PlaySound("Ok.wav");
         TypeWind++;
         if (TypeWind>2) TypeWind=0;
         Del();
      }
      if (clickedChartObject=="kn color")
      {
         PlaySound("Ok.wav");
         TypeColor++;
         if (TypeColor>4) TypeColor=0;
      }
      Comment(clickedChartObject);
      chekbuttom();
   }
}

bool SendOrder(int tip, double lot, double p)
{
   if (confirmation)
   {
      string txt;
      if (tip==OP_BUY) txt=StringConcatenate(" Open order BUY ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_SELL) txt=StringConcatenate("Open order SELL ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_BUYSTOP) txt=StringConcatenate("Open order BUYSTOP ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_SELLSTOP) txt=StringConcatenate("Open order SELLSTOP ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_BUYLIMIT) txt=StringConcatenate("Open order BUYLIMIT ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_SELLLIMIT) txt=StringConcatenate("Open order SELLLIMIT ",DoubleToStr(lot,2)," set order at price ",DoubleToStr(p,Digits)," ?");
      int ret=MessageBox(txt,"", MB_YESNO);
      if (ret==IDNO) return(1);
   }
   int nn;
   while(true)
   {
      RefreshRates();
      if (OrderSend(Symbol(),tip,lot,p,slippage,0,0,NULL,Magic,0,clrNONE)==-1)
      {
         Print("Order Send Error ",GetLastError()," Lot ",lot);
         Sleep(1000);
      }
      else return(1);
      nn++;
      if (nn>10) return(0);
   }
   return(0);
}

int Redraw()
{
   RefreshRates();
   double StLo,OSL,OTP,OOP,SL,TP;
   STOPLEVEL=StrToInteger(DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),0));
   double stoplevel=STOPLEVEL*Point;
   int b=0,s=0,bs=0,ss=0,bl=0,sl=0,tip;
   double OL,LB=0,LS=0,ProfitB=0,ProfitS=0;

   StopLossB     = Kn(knSlB,StopLossB);
   TakeProfitB   = Kn(knTpB,TakeProfitB);
   NoLossB       = Kn(knNlB,NoLossB);
   TrailingStopB = Kn(knTsB,TrailingStopB);
   StopLossS     = Kn(knSlS,StopLossS);
   TakeProfitS   = Kn(knTpS,TakeProfitS);
   NoLossS       = Kn(knNlS,NoLossS);
   TrailingStopS = Kn(knTsS,TrailingStopS);

   bool TrNoLossB = Kn(knTrNlB,1)==1;
   bool TrNoLossS = Kn(knTrNlS,1)==1;

   int i,Ticket;

   double price_b=0,price_s=0;
   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
         { 
            OSL = NormalizeDouble(OrderStopLoss(),Digits);
            OTP = NormalizeDouble(OrderTakeProfit(),Digits);
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket=OrderTicket();
            SL=OSL;TP=OTP;
            tip = OrderType(); 
            OL = OrderLots();
            if (tip==OP_BUY)             
            {  
               b++; 
               LB+=OL;price_b+=(Bid-OOP)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
               if (OSL==0 && Bid-NormalizeDouble(OOP - StopLossB   * Point,Digits)>=stoplevel && StopLossB!=0)
               {
                  SL = NormalizeDouble(OOP - StopLossB   * Point,Digits);
               } 
               if (StopLossB==0 && NoLossB==0 && TrailingStopB==0) SL=0;
               if (TakeProfitB==0) TP=0;
               if (!TrNoLossB)
               {
                  if (OTP==0 && NormalizeDouble(OOP + TakeProfitB * Point,Digits)-Ask>=stoplevel && TakeProfitB!=0)
                  {
                     TP = NormalizeDouble(OOP + TakeProfitB * Point,Digits);
                  } 
                  if (OSL<OOP && NoLossB!=0)
                  {
                     if (Bid-OOP >= NoLossB*Point && Bid-OOP >= stoplevel) SL = OOP;
                  }
                  if (TrailingStopB!=0)
                  {
                     StLo = NormalizeDouble(Bid - TrailingStopB*Point,Digits); 
                     if (StLo >= OOP+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
                  }
               }
               if (SL != OSL || TP != OTP)
               {  
                  Comment("Order Modify ",Ticket," Buy, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                  if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
               }
            }                                         
            if (tip==OP_SELL)        
            {
               s++;
               LS+=OL;price_s+=(OOP-Ask)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
               if (OSL==0 && NormalizeDouble(OOP + StopLossS   * Point,Digits)-Ask>=stoplevel && StopLossS!=0)
               {
                  SL = NormalizeDouble(OOP + StopLossS   * Point,Digits);
               }
               if (StopLossS==0 && NoLossS==0 && TrailingStopS==0) SL=0;
               if (TakeProfitS==0) TP=0;
               if (!TrNoLossS)
               {
                  if (OTP==0 && Bid-NormalizeDouble(OOP - TakeProfitS * Point,Digits)>=stoplevel && TakeProfitS!=0)
                  {
                     TP = NormalizeDouble(OOP - TakeProfitS * Point,Digits);
                  }
                  if ((OSL>OOP || OSL==0) && NoLossS!=0)
                  {
                     if (OOP-Ask >= NoLossS*Point && (OOP < OSL || OSL==0) && OOP-Ask >= stoplevel) SL = OOP;
                  }
                  if (TrailingStopS!=0)
                  {
                     StLo = NormalizeDouble(Ask + TrailingStopS*Point,Digits); 
                     if (StLo <= OOP-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo;
                  }
               }
               if (SL != OSL || TP != OTP)
               {  
                  Comment("Order Modify ",Ticket," Sell, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                  if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
               }
            } 
            if (tip==OP_BUYSTOP)             
            {  
               bs++; 
            }                                         
            if (tip==OP_SELLLIMIT)        
            {
               sl++;
            } 
            if (tip==OP_BUYLIMIT)             
            {  
               bl++; 
            }                                         
            if (tip==OP_SELLSTOP)        
            {
               ss++;
            } 
         }
      }
   }

   double NL=0,NLb=0,NLs=0;

   if (TrNoLossB || TrNoLossS)
   {
      for (i=0; i<OrdersTotal(); i++)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
            if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
            { 
               OSL = NormalizeDouble(OrderStopLoss(),Digits);
               OTP = NormalizeDouble(OrderTakeProfit(),Digits);
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               Ticket=OrderTicket();
               SL=OSL;TP=OTP;
               tip = OrderType(); 
               OL = OrderLots();
               if (tip==OP_BUY && TrNoLossB)             
               {  
                  if (NormalizeDouble(NLb + TakeProfitB * Point,Digits)-Ask>=stoplevel && TakeProfitB!=0)
                  {
                     TP = NormalizeDouble(NLb + TakeProfitB * Point,Digits);
                  } 
                  if (OSL<OOP && NoLossB!=0)
                  {
                     if (Bid-NLb >= NoLossB*Point && Bid-NLb >= stoplevel) SL = NLb;
                  }
                  if (TrailingStopB!=0)
                  {
                     StLo = NormalizeDouble(Bid - TrailingStopB*Point,Digits); 
                     if (StLo >= NLb+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
                  }
                  if (SL != OSL || TP != OTP)
                  {  
                     Comment("Order Modify ",Ticket," Buy, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                     if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
                  }
               }                                         
               if (tip==OP_SELL && TrNoLossS)        
               {
                  if (Bid-NormalizeDouble(NLs - TakeProfitS * Point,Digits)>=stoplevel && TakeProfitS!=0)
                  {
                     TP = NormalizeDouble(NLs - TakeProfitS * Point,Digits);
                  }
                  if ((OSL>NLs || OSL==0) && NoLossS!=0)
                  {
                     if (NLs-Ask >= NoLossS*Point && (NLs < OSL || OSL==0) && NLs-Ask >= stoplevel) SL = NLs;
                  }
                  if (TrailingStopS!=0)
                  {
                     StLo = NormalizeDouble(Ask + TrailingStopS*Point,Digits); 
                     if (StLo <= NLs-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo;
                  }
                  if (SL != OSL || TP != OTP)
                  {  
                     Comment("Order Modify ",Ticket," Sell, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                     if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
                  }
               } 
            }
         }
      }
   }
   

Показано первые 50% кода (символов: 35751)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
3 575,10₽ ≈ $43.69