остановка советника при достижении уровня стопа

 

Здравствуйте. Вопрос для опытных программеров. У меня советник. Я им работаю направленно. Т.е. если технически есть тренд, я включаю советник по тренду (в настройках метатрейдера). Постоянно при компе не нахожусь. В случае разворота тренда нужно отключать советник. Короче нужен код, который я смогу вставить в советник. Уровень стоп советник (выключатель), при достижении ценой этого уровня, советник, "останавливается ", закрывает все убыточные сделки, убирает все отложенные ордера, ждет дальнейших действий от меня. Таким образом можно минимизировать риски. Помогите кто может.

Спасибо. 

 
dimonik2011:

Здравствуйте. Вопрос для опытных программеров. У меня советник. Я им работаю направленно. Т.е. если технически есть тренд, я включаю советник по тренду (в настройках метатрейдера). Постоянно при компе не нахожусь. В случае разворота тренда нужно отключать советник. Короче нужен код, который я смогу вставить в советник. Уровень стоп советник (выключатель), при достижении ценой этого уровня, советник, "останавливается ", закрывает все убыточные сделки, убирает все отложенные ордера, ждет дальнейших действий от меня. Таким образом можно минимизировать риски. Помогите кто может.

Спасибо. 



Что Вам сказать, "Если включаю советник" (Вручную) то также и выключайте. Чтобы не пролететь не забывайте про  стоплосс, ну и тейкпрофит вам достаточный. Задумайтесь над тем что скорей всего вы будете ловитить отрицательные профиты. Уж если собрались торговать вручную, то торгуйте до самого...
 
dimonik2011:Короче нужен код, который я смогу вставить в советник. Уровень стоп советник (выключатель), при достижении ценой этого уровня, советник, "останавливается "

попробуйте с таким кодом поэкспериментировать:

extern string name_stop_label = "stop_my_expert";
extern double price_up        = 1.3300;
extern double price_down      = 1.3000;

int start(){
   if(GlobalVariableCheck(name_stop_label)) return(0);
   if(Close[0]>price_up)   GlobalVariableSet(name_stop_label,price_up);
   if(Close[0]<price_down) GlobalVariableSet(name_stop_label,price_down);
   if(GlobalVariableCheck(name_stop_label)) return(0);// можно эту строку удалить
   
return(0);
}
 
IgorM:

попробуйте с таким кодом поэкспериментировать:

 

Игорь, а почему просто не остановить работу советника? Достиг уровня стопа и остановился, без повторных запусков на каждом тике
 

можно попробовать

  if  ...условие... 

     { 

   deinit(); 

     }

 

 неполиткорректно, конечно, но задачу свою выполняет   :-)))

 советник деинициализируется и инициализировать его уже придется ручками... 

 

Попробуйте так:

//+------------------------------------------------------------------+
//|                                                    Остановка.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"



double уровень_стопа = 1.33333;//перед началом работы =0, далее когда уходите, выставляете нужный уровень

bool Работаем;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  if(уровень_стопа==0)Работаем=true;  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 

//в место в коде где начинаются открытия ордеров ставим флаг
  if(Работаем){

//код открытия ордеров
   
}
//если достгли заданого уровня - остановка советника
   if(Ask==уровень_стопа){//или Bid
     Работаем=false; 
     fЗакрыть_все_ордера();  
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Кнопку "советники"  нужно отжать через  WinApi. 
 
Просто разделить что-нибудь на ноль,- советник остановится и будет ожидать повторной инициализации. 
 
tara:
Просто разделить что-нибудь на ноль,- советник остановится и будет ожидать повторной инициализации. 

Чёрт, оригинально, ща попробую)))
 
Еще лучше - ошибиться при вызове импортируемой функции https://docs.mql4.com/ru/runtime/errors
 
tara:
Просто разделить что-нибудь на ноль,- советник остановится и будет ожидать повторной инициализации. 



А вот фигушки:

 

#property copyright "Copyright © 2012 Mikhail Kozhemyako"
#property link      "ua3xcm@obninsk.com"
int tick=0,Realtick=0;
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   if(tick>=10) return(0);
   if(Realtick>=10) return(0);
   double x=0.0;
   Alert("Собираемся поделить  на ноль, тик= ",Realtick);
   Realtick++;
   x=x/x;
   Alert("Делили на ноль, А пофигу уже который тик= ",tick);
   tick++;
   return(0);
  }
Причина обращения: