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

ea_vr-stealth.3.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Советник для MetaTrader 4, реализующий ручное управление торговыми позициями и ордерами. Поддерживает установку и модификацию StopLoss, TakeProfit, Breakeven, трейлинг-стопа, а также закрытие и удаление ордеров через графическую панель на графике. Использует торговые функции MetaTrader 4 для открытия, закрытия и удаления ордеров, включая отложенные ордера типа Buy Limit, Sell Limit, Buy Stop и Sell Stop.

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

НастройкаОписание
0.01; (StartLots) Начальный лот — Начальный объём сделки; в инициализации корректируется по минимальному и максимальному лоту брокера.
Risk Риск — Рисковый параметр целочисленного типа, используемый в расчётах советника.
100; (TakeProfit) Тейк-профит — Расстояние тейк-профита в пунктах, пересчитываемое в цену при инициализации.
100; (StopLoss) Стоп-лосс — Расстояние стоп-лосса в пунктах, пересчитываемое в цену при инициализации.
Trailing Трейлинг — Логический переключатель включения и выключения трейлинг-стопа.
300; (TrailingStop) Трейлинг-стоп — Расстояние трейлинг-стопа в пунктах, пересчитываемое в цену.
50; (TrailingStep) Шаг трейлинга — Шаг изменения трейлинг-стопа в пунктах.
250; (TrailStart) Начало трейлинга — Расстояние в пунктах, при достижении которого начинается движение трейлинг-стопа.
Breakeven Безубыток — Расстояние для перевода позиции в безубыток в пунктах.
Stop_Limit Стоп-лимит — Расстояние для установки стоп-лимитных ордеров в пунктах.
Magic Магический номер — Магический номер для идентификации ордеров данного советника.
Slip Проскальзывание — Допустимое проскальзывание при открытии и закрытии ордеров.
MaxSpread Максимальный спред — Максимальный допустимый спред в пунктах для фильтрации сделок.
MaxOrders Максимум ордеров — Максимальное количество одновременно открытых ордеров.
Получить полный код

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

#property version     "3.3"
#property description "Virtual StopLoss, TakeProfit, Breakeven, Traling stop, OrderClose, OrderDelete "

#import "shell32.dll"
int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import
#include <Dope_mod.mqh>;                   

input double StartLots=1.0; //0.01;
input int    Risk=2; 
input int    TakeProfit=0; //100;
input int    StopLoss=5000; //100;
input bool   Trailing=true;
input int    TrailingStop=2000; //300;
input int    TrailingStep=300; //50;
input int    TrailStart=600; //250;
input int    Breakeven=300;
input int    Stop_Limit=250;
input int    Magic=0;
input int    Slip=20;
input int    MaxSpread=300;
input int    MaxOrders=20;
color  cvit[];
int    w=-1,x=0,y=0,ButX=17,BuyY=15,Coment=10, MagicID, prevSig,Slippage, sig,esig;
string Puti="",InpFileName="",info[],prefix="zr",prfx, addTxt;
double tp=0,sl=0,tr=0,br=0,wlot=0,glot=0, Gd_188, Lots;
bool  noBuy = false, noSell = false;

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

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

void but()
  {
   proverca_sl_tp_ti();   
   proverca_br_tr();      
   if(ObjectFind(0,prefix+"TradeLine")!=0) 
      ButtonCreate(0,"TradeLine",0,5,15,90,5,0,"","Arial",10,clrBlack,clrBlue,clrNONE,false,false,true); 

   int x0=(int)IntGetX ("TradeLine");         
   int y0=(int)IntGetY ("TradeLine");        

   ButtonCreate(0,"Lots",0,x0,y0+14,90,16,0,"LOTS "+DoubleToStr(glot,2),"Arial",10,clrBlack,C'236,233,216'); 
   ButtonCreate(0,"Buy",0,x0,y0+34,90,16,0,"BUY","Arial",10,clrBlack,C'236,233,216');                    
   ButtonCreate(0,"Sel",0,x0,y0+54,90,16,0,"SELL","Arial",10,clrBlack,C'236,233,216');                      
   ButtonCreate(0,"BuyL",0,x0,y0+74,90,16,0,"BUY LIMIT","Arial",10,clrBlack,C'236,233,216');              
   ButtonCreate(0,"SelL",0,x0,y0+94,90,16,0,"SELL LIMIT","Arial",10,clrBlack,C'236,233,216');         
   ButtonCreate(0,"BuyS",0,x0,y0+114,90,16,0,"BUY STOP","Arial",10,clrBlack,C'236,233,216');            
   ButtonCreate(0,"SelS",0,x0,y0+134,90,16,0,"SELL STOP","Arial",10,clrBlack,C'236,233,216');               
   ButtonCreate(0,"Close",0,x0,y0+154,90,16,0,"CLOSE ALL","Arial",9,clrBlack,clrPink);         
   ButtonCreate(0,"Sclp",0,x0,y0+174,90,16,0,"Auto-Scalp","Arial",9,clrBlack,C'236,233,216');
   ButtonCreate(0,"Trl",0,x0,y0+194,90,16,0,"Trail All","Arial",9,clrBlack,C'236,233,216'); 
   ButtonCreate(0,"NB",0,x0,y0+214,90,16,0,"No BUY","Arial",9,clrBlack,C'236,233,216'); 
   ButtonCreate(0,"NS",0,x0,y0+234,90,16,0,"No SELL","Arial",9,clrBlack,C'236,233,216'); 
   ButtonCreate(0,"CB",0,x0,y0+254,90,16,0,"Close BUY","Arial",9,clrBlack,C'236,233,216'); 
   ButtonCreate(0,"CS",0,x0,y0+274,90,16,0,"Close SELL","Arial",9,clrBlack,C'236,233,216'); 

   ButtonCreate(0,"Sep",0,x0,y0+294,90,5,0,"","Arial",10,clrBlack,clrBlue,clrNONE,false,false,true); 
   ButtonCreate(0,"TimeT",0,x0,y0+314,90,16,0,"Candle Time","Arial",9,clrBlack,C'236,233,216');      
   ButtonCreate(0,"ScreenShot",0,x0,y0+334,90,16,0,"SCREENSHOT","Arial",9,clrBlack,C'236,233,216'); 
   ChartRedraw(0);

   if(but_stat(prefix+"TimeT")==true)
      tim();
   else
      obj_del("clock");

   if(but_stat(prefix+"LOTS")==true) 
     {
      for(int i=0; i<=20; i++)
        {
         ButtonCreate(0,StringConcatenate("lot",i),0,x0+105,y0+15+20*i,50,18,0,DoubleToStr(wlot*(i+1),2),"Arial",10,clrBlack,C'236,233,216'); 
         if(but_stat(StringConcatenate(prefix,"lot",i))==true) 
           {
            glot=wlot*(i+1);                                                                           
            button_off(StringConcatenate("lot",i));                                                 
            button_off("LOTS");                                                                      
           }
        }
     }
   else                                                                                            
   for(int xx=0; xx<=20; xx++)
              ObjectDelete(StringConcatenate(prefix,"lot",xx));                                        
   ChartRedraw(0);

   double Dist=NormalizeDouble(Stop_Limit*_Point,_Digits);
   if(but_stat(prefix+"Buy")==true) 
      if(openorders(_Symbol,0,glot)==true) 
         button_off("Buy");                
   if(but_stat(prefix+"Sel")==true) 
      if(openorders(_Symbol,1,glot)==true) 
         button_off("Sel");                           
   if(but_stat(prefix+"BuyL")==true) 
      if(openorders(_Symbol,2,glot,Ask-Dist)==true) 
         button_off("BuyL");                     
   if(but_stat(prefix+"SelL")==true) 
      if(openorders(_Symbol,3,glot,Bid+Dist)==true)
         button_off("SelL");                     
   if(but_stat(prefix+"BuyS")==true) 
      if(openorders(_Symbol,4,glot,Ask+Dist)==true) 
         button_off("BuyS");                         
   if(but_stat(prefix+"SelS")==true) 
      if(openorders(_Symbol,5,glot,Bid-Dist)==true) 
         button_off("SelS");  
   if(but_stat(prefix+"Close")==true) 
      {
         CloseAll(); 
         button_off("Close");
      }                       
   if(but_stat(prefix+"Sclp")==true) 
   {  addTxt="DOPE scalping ON";
      dope();
   }
   else {addTxt=""; button_off("Sclp");}

   if(but_stat(prefix+"Trl")==true) //overrides Trailing in input settings; the function is in mqh
   {  

      trailing();
   }
   else { button_off("Trl");}

  if(but_stat(prefix+"NB")==true) 
   {  noBuy=true;
   }
   else {noBuy=false; button_off("NB");}

  if(but_stat(prefix+"NS")==true) 
   {  noSell=true;
   }
   else {noSell=false; button_off("NS");}

   if(but_stat(prefix+"CB")==true) 
   {  CloseBuy();
      button_off("CB");
   } 
  if(but_stat(prefix+"CS")==true) 
   {  CloseSell();
   button_off("CS");}

   for( i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==Magic || Magic==-1)
            if(OrderSymbol()==_Symbol)
              {
               x=y=0;ChartTimePriceToXY(0,0,(OrderOpenTime()),OrderOpenPrice(),x,y); 
               if(ObjectFind(StringConcatenate(prefix+"Re",OrderTicket()))!=0)      
                  ButtonCreate(0,StringConcatenate("Re",OrderTicket()),0,x+20,y,ButX+5,BuyY,0,"< >","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,true,true,0,"Move the menu");     
               SetX(StringConcatenate(prefix+"Re",OrderTicket()),y);                                                                                                                    
               int x2=(int)IntGetX (StringConcatenate("Re",OrderTicket()));                                                                                                           
               int y2=(int)IntGetY (StringConcatenate("Re",OrderTicket()));                                                                                                            
               ButtonCreate(0,StringConcatenate("Sl",OrderTicket()),0,x2+25,y2,ButX,BuyY,0,"Sl","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"StopLoss");       
               ButtonCreate(0,StringConcatenate("Tp",OrderTicket()),0,x2+45 ,y2,ButX,BuyY,0,"Tp","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"TakeProfit");      
               ButtonCreate(0,StringConcatenate("Br",OrderTicket()),0,x2+65 ,y2,ButX,BuyY,0,"Br","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Breakeven");       
               ButtonCreate(0,StringConcatenate("Tr",OrderTicket()),0,x2+85 ,y2,ButX,BuyY,0,"Tr","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Ttrailing Stop");  
               ButtonCreate(0,StringConcatenate("Ti",OrderTicket()),0,x2+105,y2,ButX,BuyY,0,"Ti","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Time Close");   
               ButtonCreate(0,StringConcatenate("Xx",OrderTicket()),0,x2+125,y2,ButX,BuyY,0,"X","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Close Order");   
              }

   for( i=ObjectsTotal()-1; i>=0; i--)
      if(ObjectType(ObjectName(i))==OBJ_BUTTON)
         if(but_stat(ObjectName(i))==true)
            ObjectSetInteger(0,ObjectName(i),OBJPROP_BGCOLOR,clrLightGreen);
   else
      ObjectSetInteger(0,ObjectName(i),OBJPROP_BGCOLOR,C'236,233,216'); 

   if(but_stat(prefix+"ScreenShot")==true) 
     {
      Puti=StringConcatenate(TimeS()+" "+_Symbol+".png");              
      if(WindowScreenShot(Puti,(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS),(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS))==true)
         w=MessageBox(" Open ? "+Puti,"Open SCREENSHOT "+Puti,MB_OKCANCEL|MB_ICONQUESTION);                                  
      if(w==1)
         if(ShellExecuteW(NULL,"open",TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files\\"+Puti,NULL,NULL,1)>0)              
            button_off("ScreenShot");                                                                                           
      if(w==2)                                                                                               
         button_off("ScreenShot");               
     }

   int tik=-1,typ=-1;
   string nameX="",nameTP="",nameSL="",nameBR="",nameTR="",nameTI="";
   double op=0;
   for( i=OrdersTotal()-1; i>=0; i--)                                                          
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                                               
         if(OrderMagicNumber()==Magic || Magic==-1)                                              
            if(OrderSymbol()==_Symbol)                                                     
              {
               tik=OrderTicket();                                                         
               typ=OrderType();                                                           
               op=OrderOpenPrice();                                                          
               nameX =StringConcatenate(prefix,"Xx",tik);                                
               nameTP=StringConcatenate(prefix,"Tp",tik);                              
               nameSL=StringConcatenate(prefix,"Sl",tik);                                 
               nameBR=StringConcatenate(prefix,"Br",tik);                                   
               nameTR=StringConcatenate(prefix,"Tr",tik);                                    
               nameTI=StringConcatenate(prefix,"Ti",tik);                                        
               if(ObjectGetInteger(0,nameX,OBJPROP_STATE)==true) closeorders(tik);              

               if(typ==0 )
                 {
                  if(but_stat(nameTP)==true)                                                     
                     obj_cre(StringConcatenate("tp",tik),(Ask+tp),clrGreen);                         
                  else                                                                             
                  obj_del(StringConcatenate("tp",tik));                                           

                  if(but_stat(nameSL)==true)                                                       
                     obj_cre(StringConcatenate("sl",tik),(Bid-sl),clrRed);                          
                  else                                                                              
                  obj_del(StringConcatenate("sl",tik));                                           
                 }
               if(typ==1 )
                 {
                  if(but_stat(nameTP)==true)                                                       
                     obj_cre(StringConcatenate("tp",tik),(Bid-tp),clrGreen);                        
                  else                                                                             
                  obj_del(StringConcatenate("tp",tik));                                         

                  if(but_stat(nameSL)==true)                                                       
                     obj_cre(StringConcatenate("sl",tik),(Ask+sl),clrRed);                        
                  else                                                                          
                  obj_del(StringConcatenate("sl",tik));                                         
                 }

               if(typ==2 || typ==4)
                 {
                  if(but_stat(nameTP)==true)                                                     
                     obj_cre(StringConcatenate("tp",tik),(op+tp),clrGreen);                     
                  else                                                                         
                  obj_del(StringConcatenate("tp",tik));                                   

                  if(but_stat(nameSL)==true)                                                    
                     obj_cre(StringConcatenate("sl",tik),(op-sl),clrRed);                     
                  else                                                                         
                  obj_del(StringConcatenate("sl",tik));                                         
                 }
               if(typ==3 || typ==5)
                 {
                  if(but_stat(nameTP)==true)                                                      
                     obj_cre(StringConcatenate("tp",tik),(op-tp),clrGreen);                    
                  else                                                                             
                  obj_del(StringConcatenate("tp",tik));                                         

                  if(but_stat(nameSL)==true)                                                     
                     obj_cre(StringConcatenate("sl",tik),(op+sl),clrRed);                    
                  else                                                                  
                  obj_del(StringConcatenate("sl",tik));                             
                 }

               if(but_stat(nameBR)==true) 
                 {
                  if(((Ask-br)>op) && typ==0) obj_cre(StringConcatenate("br",tik),op,clrGreen);       
                  if(((Bid+br)<op) && typ==1) obj_cre(StringConcatenate("br",tik),op,clrGreen);     
                 }
               else obj_del(StringConcatenate("br",tik));                                         

               if(but_stat(nameTR)==true) 
                 {
                  if(((Ask-tr)>op) && typ==0) obj_cre(StringConcatenate("tr",tik),op,clrGreen);      
                  if(((Bid+tr)<op) && typ==1) obj_cre(StringConcatenate("tr",tik),op,clrGreen);    
                 }
               else obj_del(StringConcatenate("tr",tik));                                         

               if(but_stat(nameTI)==true)                                                          
                  obj_cre_v_line(StringConcatenate("ti",tik),clrGreen);                   
               else                                                                           
               obj_del(StringConcatenate("ti",tik));                                          
              }

   his_del_obj();        

   uroven();            
  }

void uroven()
  {
   int typ=-1,tik=-1;   double op=0;   string name="";
   for(int i=OrdersTotal()-1; i>=0; i--)                                                        
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                                     
         if(OrderMagicNumber()==Magic || Magic==-1)                                                 
            if(OrderSymbol()==_Symbol)
              {
               typ=OrderType();                                                                  
               tik=OrderTicket();                                                                
               op=NormalizeDouble(OrderOpenPrice(),_Digits);                                   
               name=StringConcatenate("Op",tik);                                                   
               if(typ==2 || typ==4)                                                          
                 {
                  if(ObjectFind(0,name)==-1)                                                    
                     obj_cre_h_line(name,op,clrBlue);                                    
                 }
               if(typ==3 || typ==5) 
                 {
                  if(ObjectFind(0,name)==-1)                                                 
                     obj_cre_h_line(name,op,clrOrangeRed);                                  
                 }
               if(ObjectFind(0,name)==0)                                                   
                  if(op!=NormalizeDouble(get_object(name),_Digits))                          
                     if(OrderModify(OrderTicket(),NormalizeDouble(get_object(name),_Digits),OrderStopLoss(),OrderTakeProfit(),0,clrGreen)==true)
                        pr(" OrderModify Ok !");                                               
               else                                                                          
               pr(__FUNCTION__+"OrderModify Error !");                                       
              }
  }

void obj_cre_h_line(string txt,double pri,color col)
  {
   if(ObjectFind(0,txt)==-1)
     {
      ObjectCreate(0,txt,OBJ_HLINE,0,0,0);
      ObjectSetDouble(0,txt,OBJPROP_PRICE1,pri);
      ObjectSetInteger(0,txt,OBJPROP_COLOR,col);
      ObjectSetInteger(0,txt,OBJPROP_WIDTH,1);
      ObjectSetInteger(0,txt,OBJPROP_STYLE,3);
      ObjectSetString(0,txt,OBJPROP_TOOLTIP,txt);
      WindowRedraw();
     }
  }

void proverca_br_tr()
  {
   int tik=-1;
   double bb=0,rr=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==Magic || Magic==-1)
            if(OrderSymbol()==_Symbol)
              {
               tik=OrderTicket();
               bb=NormalizeDouble(get_object(StringConcatenate("br",tik)),_Digits);
               rr=NormalizeDouble(get_object(StringConcatenate("tr",tik)),_Digits);
               RefreshRates();
               if(OrderType()==0)
                  if(bb>0)
                     if(Bid<=bb)
                        closeorders(tik);

               if(OrderType()==1)
                  if(bb>0)
                     if(Ask>=bb)
                        closeorders(tik);

               if(OrderType()==0)
                  if(rr>0)
                    {
                     if((Bid-tr)>rr)
                        set_object(StringConcatenate("tr",tik),(Ask-tr));
                     if(Bid<=rr)
                        closeorders(tik);
                    }
               if(OrderType()==1)
                  if(rr>0)
                    {
                     if((Ask+tr)<rr)
                        set_object(StringConcatenate("tr",tik),(Bid+tr));
                     if(Ask>=rr)
                        closeorders(tik);
                    }
              }
  }

bool set_object(string name,double pri)
  {
   return ObjectSetDouble(0,name,OBJPROP_PRICE,pri);
  }

bool proverca_sl_tp_ti()
  {
   int tik=-1;
   string ti="";
   double tt=0,ss=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==Magic || Magic==-1)
            if(OrderSymbol()==_Symbol)
              {
               tik=OrderTicket();
               tt=NormalizeDouble(get_object(StringConcatenate("tp",tik)),_Digits);
               ss=NormalizeDouble(get_object(StringConcatenate("sl",tik)),_Digits);
               ti=StringConcatenate("ti",tik);
               RefreshRates();
               if(OrderType()==0)
                 {
                  if(tt>0)
                     if(Bid>tt)
                        closeorders(tik);

                  if(ss>0)
                     if(Bid<ss)
                        closeorders(tik);

                  if(ObjectFind(ti)==0)if((int)TimeCurrent()>(int)get_object_ti(ti))closeorders(tik);
                 }
               if(OrderType()==1)
                 {
                  if(tt>0)
                     if(Ask<tt)
                        closeorders(tik);

                  if(ss>0)
                     if(Ask>ss)
                        closeorders(tik);

                  if(ObjectFind(ti)==0)if((int)TimeCurrent()>(int)get_object_ti(ti))closeorders(tik);
                 }
               if(OrderType()>1)
                  if(ObjectFind(ti)==0)if((int)TimeCurrent()>(int)get_object_ti(ti))closeorders(tik);
              }
   return false;
  }

datetime get_object_ti(string name)
  {
   return (datetime)ObjectGetInteger(0,name,OBJPROP_TIME);
  }

double get_object(string name)
  {
   double rez=0;
   ObjectGetDouble(0,name,OBJPROP_PRICE,0,rez);
   return rez;
  }

void his_del_obj()
  {
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         if(OrderMagicNumber()==Magic || Magic==-1)
            if(OrderSymbol()==_Symbol)
              {
               ObjectDelete(0,StringConcatenate(prefix,"Sl",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Tp",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Br",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Tr",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Ti",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Re",OrderTicket()));
               ObjectDelete(0,StringConcatenate(prefix,"Xx",OrderTicket()));
               ObjectDelete(0,StringConcatenate("Op",OrderTicket()));
               ObjectDelete(0,StringConcatenate("sl",OrderTicket()));
               ObjectDelete(0,StringConcatenate("tp",OrderTicket()));
               ObjectDelete(0,StringConcatenate("br",OrderTicket()));
               ObjectDelete(0,StringConcatenate("tr",OrderTicket()));
               ObjectDelete(0,StringConcatenate("ti",OrderTicket()));

              }
  }

void obj_cre_v_line(string txt,color col)
  {
   if(ObjectFind(0,txt)==-1)
     {
      ObjectCreate(0,txt,OBJ_VLINE,0,Time[0]+_Period*10*60,0);
      ObjectSetInteger(0,txt,OBJPROP_TIME,Time[0]+_Period*10*60);
      ObjectSetInteger(0,txt,OBJPROP_COLOR,col);
      ObjectSetInteger(0,txt,OBJPROP_WIDTH,2);
      ObjectSetString(0,txt,OBJPROP_TOOLTIP,txt);
      WindowRedraw();
     }
  }

void obj_cre(string txt,double pri,color col)
  {
   if(ObjectFind(0,txt)==-1)
     {
      ObjectCreate(0,txt,OBJ_ARROW_RIGHT_PRICE,0,Time[0],pri);
      ObjectSetInteger(0,txt,OBJPROP_TIME,Time[0]);
      ObjectSetDouble(0,txt,OBJPROP_PRICE,pri);
      ObjectSetInteger(0,txt,OBJPROP_COLOR,col);
      ObjectSetInteger(0,txt,OBJPROP_WIDTH,3);
      ObjectSetString(0,txt,OBJPROP_TOOLTIP,txt);
      WindowRedraw();
     }
  }

void obj_del(string txt)
  {
   ObjectDelete(0,txt);
  }

bool closeorders(int tik)
  {
   string sy="";
   if(OrderSelect(tik,SELECT_BY_TICKET))
      if(OrderMagicNumber()==Magic || Magic==-1)
         if(OrderSymbol()==_Symbol)
            if(OrderTicket()==tik)
              {
               sy=OrderSymbol();
               if(OrderType()==0) 
                  if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(sy,MODE_BID),Slip,clrBlue)==true)
                     pr("BUY order closed");                                                        
               else
                  pr("BUY order close Error !!!"+Error(GetLastError()),clrRed);            

               if(OrderType()==1) 
                  if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(sy,MODE_ASK),Slip,clrRed)==true)
                     pr("SELL order closed ");                                                       
               else
                  pr("SELL order close Error !!!"+Error(GetLastError()),clrRed);               

               if(OrderType()>1)                                                                 
                  if(OrderDelete(tik,clrRed)==true)                                                
                     pr("Pending ord. deleted");                                                     
               else
                  pr("Pending ord. delete Error !!!"+Error(GetLastError()),clrRed);                       
              }
   return false;
  }

void SetX(const string name,int xx)
  {
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,xx);              
  }

bool openorders(string sy="",int typ=0,double lot=0,double price=0,string com="") 
  {
   int tik=-2,p=0;  
   color col;  
   string otype;                                                          
   if(sy=="")sy=_Symbol;                                                       
   if(lot<MarketInfo(sy,MODE_MINLOT))lot=MarketInfo(sy,MODE_MINLOT);         
   if(price==0) // Если цена не указана
     {
      if(typ==0) {price=MarketInfo(sy,MODE_ASK); col=clrBlue; otype="BUY"; }                              
      else       {price=MarketInfo(sy,MODE_BID); col=clrRed; otype="SELL";}                             
     }
   if(com=="") com=StringConcatenate(WindowExpertName(),"  ",Magic);            

   while(!IsTradeContextBusy())
     {
      tik=OrderSend(sy,typ,NormalizeDouble(lot,2),NormalizeDouble(price,(int)MarketInfo(sy,MODE_DIGITS)),Slip,0,0,com,Magic,0,col); 
      if(tik>=0) { pr(otype+" order opened");          return true;}
      else
        {
         p++;
         pr(__FUNCTION__+"_Error_"+Error(GetLastError()));
         Sleep(500);
         if(p>=5){ pr(otype+" order open error"); return false;} 
        }
     }
   return false;
  }

string Error(int error_code)
  {
   string error_string;
   bool Lan=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian");
   switch(error_code)
     {
      case 0:
         if(Lan)
         error_string="Нет ошибки.";                                                                         break;
         error_string="No error returned.";                                                                  break;
      case 1:
         if(Lan)
         error_string="Нет ошибки, но результат неизвестен.";                                                break;
         error_string="No error returned, but the result is unknown.";                                       break;
      case 2:
         if(Lan)
         error_string="Общая ошибка.";                                                                       break;
         error_string="Common error.";                                                                       break;
      case 3:
         if(Lan)
         error_string="Неправильные параметры.";                                                             break;
         error_string="Invalid trade parameters.";                                                           break;
      case 4:
         if(Lan)
         error_string="Торговый сервер занят.";                                                              break;
         error_string="Trade server is busy.";                                                               break;
      case 5:
         if(Lan)
         error_string="Старая версия клиентского терминала.";                                                break;
         error_string="Old version of the client terminal.";                                                 break;
      case 6:
         if(Lan)
         error_string="Нет связи с торговым сервером.";                                                      break;
         error_string="No connection with trade server.";                                                    break;
      case 7:
         if(Lan)
         error_string="Недостаточно прав.";                                                                  break;
         error_string="Not enough rights.";                                                                  break;
      case 8:
         if(Lan)
         error_string="Слишком частые запросы.";                                                             break;
         error_string="Too frequent requests.";                                                              break;
      case 9:
         if(Lan)
         error_string="Недопустимая операция нарушающая функционирование сервера.";                          break;
         error_string="Malfunctional trade operation.";                                                      break;
      case 64:
         if(Lan)
         error_string="Счет заблокирован.";                                                                  break;
         error_string="Account disabled.";                                                                   break;
      case 65:
         if(Lan)
         error_string="Неправильный номер счета.";                                                           break;
         error_string="Invalid account.";                                                         

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

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

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

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

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

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

Стоимость полного кода
3 128,90₽ ≈ $38.25