Как отключить советника программно?

 
А?
 
vlandex писал(а) >>
А?


В советнике проверять какое-либо условие (глобальная переменная, внешний файл и т.д.). Если оно истино - ничего не делать
 
//+------------------------------------------------------------------+
//|                                                     Tralling.mq4 |
//|                                                        CoreWinTT |
//|                                       http://truetrade.ucoz.net/ |
//+------------------------------------------------------------------+
#property copyright "CoreWinTT"
#property link      "http://truetrade.ucoz.net/"

//---- input parameters
extern int       ТралингСтоп=18;
extern color Color_On = Aqua;
extern color Color_Off = Purple;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 int   МинимальныйСтоп= MarketInfo(Symbol(),MODE_STOPLEVEL) ;
int СопровождающийСтоп;
button(1,"On");
button(2,"Min");

if (buttonget(2)) СопровождающийСтоп = МинимальныйСтоп;
else СопровождающийСтоп = ТралингСтоп;

if (buttonget(1)) TralStop(СопровождающийСтоп);


 return(0);
  
  }
  
 void TralStop (int СопровождающийСтоп)
  {
//----
      int Total = OrdersTotal()-1;

      
      for(int i = Total; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
      if(OrderSymbol()== Symbol())
      { 
          
 //---tral for buy это бид
            if(СопровождающийСтоп>0 && OrderType() == 0)  
              {                 
            if((Bid-OrderOpenPrice())>(Point*СопровождающийСтоп))
                 {

                  if((OrderStopLoss() < (Bid-Point*СопровождающийСтоп)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*СопровождающийСтоп,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }     
//      
 //---tral for sell
            if(СопровождающийСтоп>0 && OrderType() == 1)  
              {      
                if((OrderOpenPrice()-Ask)>(Point*СопровождающийСтоп))
                 {
           
                  if((OrderStopLoss()>(Ask+Point*СопровождающийСтоп)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*СопровождающийСтоп,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }     
//      
       }
}
      
      
//----
}  






//+------------------------------------------------------------------+
bool button(int Pozz,string text)
{
bool SNDFX=false;
string name ="button"+Pozz;
if ( ObjectFind(name) != -1 )
{

 //---
   int  X_shift      = ObjectGet(name, OBJPROP_XDISTANCE); 
   color  x_color = ObjectGet(name, OBJPROP_COLOR);

   if (x_color == Color_On) SNDFX = true;
   else SNDFX = false;

   if (!(X_shift ==  5 || X_shift ==  20))
      {
         if (SNDFX) SNDFX = false;
         else  SNDFX = true;
      }
}
//---
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);// Создание объ.   
ObjectSet(name, OBJPROP_CORNER, 1);    // Привязка угол   
ObjectSet(name, OBJPROP_YDISTANCE, 15+Pozz*15);// Координата y
if (SNDFX){
      ObjectSetText(name,text,9,"Arial Black",Color_On);   
      ObjectSet(name, OBJPROP_XDISTANCE, 5);// Координата Х  
      }
else {
      ObjectSetText(name,text,9,"Arial Black",Color_Off);   
      ObjectSet(name, OBJPROP_XDISTANCE, 5+15);// Координата Х  
      }
return(SNDFX);
}


bool buttonget(int Pozz)
{
bool SNDFX=false;
string name ="button"+Pozz;
if ( ObjectFind(name) != -1 )
{

 //---
   color  x_color = ObjectGet(name, OBJPROP_COLOR);

   if (x_color == Color_On) SNDFX = true;
   else SNDFX = false;
}

return(SNDFX);
}
вот тут через графическую штуку сделано
 
 
вставив блок "кнопка" и "получение статуса кнопки", в любой части программы можно всегда создать кнопку и получить её статус по порядковому номеру, кнопка сама выберет себе расположение согласно своей позиции.
 
А по проще ничего не ту?
 
ну можно просто его удалить с чарта....
 
// 5. Функция включения/отключения эксперта.
void ExpertEnabled(bool Switch) // TRUE - включить эксперт, FALSE - отключить эксперт.
 {
  int HandlWindow = WindowHandle(Symbol(), Period()); // Системный дескриптор окна.
  int HandlMT4;        // Системный дескриптор окна МТ4.
  int HandlToolbar;    // Системный дескриптор окна инструментов.
  // Массвы.
  int    ArIntTemp[1]; // Временный массив.
  //----
  if (Switch == true) // Если требуется разрешить работу эксперта.
   {
    if (!IsExpertEnabled()) // Разрешаем работу экспертов, если она была запрещена.
     {
      HandlMT4 = GetAncestor(HandlWindow, 2);   
      HandlToolbar = GetDlgItem(HandlMT4, 0x63);
      ArIntTemp[0] = HandlToolbar;
      SendMessageA(HandlMT4, WM_COMMAND, 33020, ArIntTemp);
     }
   }
  else // Если требуется запретить работу эксперта.
   {
    if (IsExpertEnabled()) // Разрешаем работу экспертов, если она была запрещена.
     {
      HandlMT4 = GetAncestor(HandlWindow, 2);   
      HandlToolbar = GetDlgItem(HandlMT4, 0x63);
      ArIntTemp[0] = HandlToolbar;
      SendMessageA(HandlMT4, WM_COMMAND, 33020, ArIntTemp);
     }
   }
 }
 
Ну, кто еще проще выложит? :))
 
CoreWinTT >>:
ну можно просто его удалить с чарта....

Кого?

 
Вчера, что бы не ждать когда откроется рынок и зная что будет гэп запустил такое. Рынок открылся, позиция открылась, советник отключился.
extern double Kot=1.3570;
extern bool   Work=true;
extern double Lot=0.1;
int start()
{
if (Work==false) return(0);
if (Bid>=Kot)
{ 
int ret=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,0,0,"",0,0,Red);
if (ret>0)Work=false;
}
}
Проще сделать будет сложно.
Причина обращения: