Доработка ботов (советников, индикаторов) vol. 2

marattmb

Гуру форума
Уважаемые специалисты! Нельзя ли модифицировать данный индикатор. Данный индикатор я использую для парного трейдинга. В параметрах прописываются два инструмента. А нельзя ли модифицировать его для использования в треугольнике. Например EUR USD, GBPUSD, EURGBP или какой-либо другой треугольник, вписав в параметры названия инструментов.
 

Вложения

  • Zero Point Revers v.2.0_mod..mq4
    15,2 КБ · Просмотры: 77
  • 0.png
    0.png
    15,5 КБ · Просмотры: 274
  • настройки.png
    настройки.png
    75,8 КБ · Просмотры: 134

MrGreen86

Гуру форума
Подключить библиотеку WinUser32 в начале кода:
PHP:
#include <WinUser32.mqh>
Прописать следующую функцию:
PHP:
//+------------------------------------------------------------------+
//| Break Point                                                      |
//+------------------------------------------------------------------+
void BreakPoint()
  {
    if(!IsVisualMode()) return;
   
    keybd_event(19,0,0,0);
    Sleep(20);
    keybd_event(19,0,2,0);
  }
Данную ф-цию вызывать по условию просадки:
PHP:
if(условие определения просадки)  BreakPoint();
Теперь, при работе в тестере в режиме визуализации, как только просадка достигнет заданного значения - будет нажатие на кнопку паузы (нажатие длительностью в 20 мсек. и отпустили). Для продолжения тестирования необходимо будет вручную нажать на кнопку "Старт/пауза" в тестере. При оптимизации данная функция выполняться не будет, работает только при визуализации.
Хотелось бы но нет ) Sleep в тестере не вызывает задержек.
SNAG-0367.png
 

MrGreen86

Гуру форума
Как понимаю, необходимо вставить этот код, чтобы тестирование приостанавливалось на паузу при заданном уровне просадки в валюте депозита?
Но какой параметр вывести в настройки? и что написать вместо слов "условие определения просадки"? как в коде обозначается максимальная просадка в валюте депозита?

1) Для начала определимся с настройками, сделаем вариант в деньгах или в процентах. вот этот кусок кода вставь в самое начало. И есть опция в которой задается пауза в секундах. Также этот кусок кода содержит 2 глобальные переменные которые нам потребуются в дальнейшем.
PHP:
enum ENUM_DD_TYPE{
   money = 0,
   percent = 1
   };

input ENUM_DD_TYPE   drow_down_type    = money;
input double         drow_down_money   = 500;
input double         drow_down_percent = 15;

input int            paused_seconds    = 20;

double max_equity;
bool   drow_down_flag = false;
В первой настройке ты выбираешь какая просадка тебе нужна, во вторых двух опциях вводишь значение для выбранного варианта.

2) теперь разберемся с функцией паузы, вставь ее в конец кода для удобства.
PHP:
void Paused() {
   uint start_time = GetTickCount();
   while(GetTickCount() - start_time < (uint)(paused_seconds*1000)) {
      int seconds_left = MathFloor((start_time + paused_seconds*1000 - GetTickCount()) / 1000); 
      Comment("Paused seconds left: ",(string)seconds_left);
      }
   Comment("");
   }


3) Теперь нужно поймать просадку.
Вставить текущий код в функцию start() или OnTick() (смотря какая будет в советнике, будет только одна из них, по сути они одинаковые).

Варианта на скидку я вижу 2:
А) по открытым позициям, подходит для сеток чтобы просадка считалась именно по текущей сетке.
PHP:
   double current_drow_down = 0;
   for(int dd = OrdersTotal()-1;dd>=0;dd--) if(OrderSelect(dd,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()==magic) {
      current_drow_down += OrderProfit()+OrderSwap()+OrderCommission();
      }
   if(!drow_down_flag) {
      if(drow_down_type == money && current_drow_down<=-drow_down_money) {
         drow_down_flag = true;
         Paused();
         }
      if(drow_down_percent == percent && current_drow_down <= - AccountBalance()*(drow_down_percent/100.0)) {
         drow_down_flag = true;
         Paused();
         }
      }
   if(drow_down_flag && current_drow_down>=0) drow_down_flag = false;

Б) Вариант просадки от баланса, подойдет для позиционной торговли, тоже довольно простой вариант:
PHP:
   if(!drow_down_flag) {
      if(drow_down_type == money && AccountBalance() - AccountEquity() >= drow_down_money) {
         drow_down_flag = true;
         Paused();
         }
      if(drow_down_type == percent && AccountBalance() - AccountEquity() <= - AccountBalance()*(drow_down_percent/100.0)) {
         drow_down_flag = true;
         Paused();
         }
      }
   if(drow_down_flag && AccountEquity() >= AccountBalance()) drow_down_flag = true;


Как можешь обратить внимание, присутсвует флаг drow_down_flag. Он помечает что просадка была достигнута чтобы на следующем тике при сохранении просадки снова не была вызвана пауза, так как это приведет к бесконечной паузе. Флаг в данных вариантах обнулится когда будет хотя бы минимальная прибыль, или все позиции будут закрыты.

Во время паузы у тебя будет возможность нажать на паузу или стоп. при этом само нажатие произойдет только когда пауза пройдет, так как терминал даст этой функции возможность завершить себя нормально без прерываний.
 
Последнее редактирование:

tulqin

Прохожий
Здравствуйте товарищи программисты.кто может ренж барах не работает это индикатор UTPOW
 

wintrades

Новичок форума
Благодарю, сделал! Но, как вижу, после достижения заданного уровня просадки - тестирование приостанавливается на время, а потом само опять продолжается... Но как сделать так - чтобы тестирование приостанавливалось на паузу (включалась пауза), и тестирование продолжалось бы только после того, как я отожму кнопку паузы?
Также еще один нюанс - после уменьшения просадки до заданного уровня также тестирование приостанавливается (а необходимо чтобы по данной серии ордеров уже больше пауза на просадке не срабатывала, а то пока просадка колеблется туда-сюда вокруг заданного уровня - все время тестирование приостанавливается).
 
Последнее редактирование:

Nazan

Интересующийся
здравствуйте. подскажите где найти советника по параболику без всяких наворотов, только открытие по стандартным сигналам( точка сверху сел, точка снизу бай)
 

cmillion

Гуру форума
cm_ea_Parabolic

здравствуйте. подскажите где найти советника по параболику без всяких наворотов, только открытие по стандартным сигналам( точка сверху сел, точка снизу бай)

Из наворотов здесь только стоплосс и тейкпрофит. Но если установите их = 0 то они отключены. На обратном сигнале позиция закрывается и открывается противоположная.

HTML:
extern int     Stoploss    = 0,
               Takeprofit  = 0;     
extern double  Lot         = 0.1;

extern double  Step        = 0.02;  //параметр Parabolic Step
extern double  Maximum     = 0.2;   //параметр Parabolic Maximum

extern int     Magic       = 123,   //уникальный номер ордеров этого советника, если 0 то ведет все ордера, в том числе выставленные вручную
               slippage    = 3;     //Максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------

Обращайтесь, если нужно будет что то добавить....
 

Вложения

  • cm_ea_Parabolic.mq4
    7,5 КБ · Просмотры: 38
Последнее редактирование:

Sergey BAwenko

Интересующийся
Здравствуйте УВАЖАЕМЫЕ ПРОГРАММИСТЫ прошу вашей помощи подправить данный советник.

1.Открытие ордеров автоматически.
2.При достижении + открывает ордер в туже сторону с начальным лотом.
3.При достижении - переворачивает ордер (открывает ордер в сторону в которую был получен - ).



Посмотреть вложение Nevalyashka_MartinGeil_.mq4
 
Последнее редактирование:

cmillion

Гуру форума
Здравствуйте УВАЖАЕМЫЕ ПРОГРАММИСТЫ прошу вашей помощи подправить данный советник.

1.Открытие ордеров автоматически.
2.При достижении + открывает ордер в туже сторону с начальным лотом.
3.При достижении - переворачивает ордер (открывает ордер в сторону в которую был получен - ).



Посмотреть вложение 315065
В ветка этого советника я уже писал такие модификации. Не пробовали поискать?
Не смотрел, что Вы выложили, но советник именно так изначально и должен работать :)
Во всяком случае я его так изначально и задумывал. И именно так он и торговал в первых версиях.
 
Последнее редактирование:

Sergey BAwenko

Интересующийся
В ветка этого советника я уже писал такие модификации. Не пробовали поискать?
Не смотрел, что Вы выложили, но советник именно так изначально и должен работать :)
Во всяком случае я его так изначально и задумывал. И именно так он и торговал в первых версиях.


смотрел, такого нету, там есть где при достижении + или - он переворачиваеться
 

MrGreen86

Гуру форума
Благодарю, сделал! Но, как вижу, после достижения заданного уровня просадки - тестирование приостанавливается на время, а потом само опять продолжается... Но как сделать так - чтобы тестирование приостанавливалось на паузу (включалась пауза), и тестирование продолжалось бы только после того, как я отожму кнопку паузы?
Также еще один нюанс - после уменьшения просадки до заданного уровня также тестирование приостанавливается (а необходимо чтобы по данной серии ордеров уже больше пауза на просадке не срабатывала, а то пока просадка колеблется туда-сюда вокруг заданного уровня - все время тестирование приостанавливается).
1) функцию Paused() заменить на эту:
PHP:
void Paused() {
   Comment("start");
   ObjectCreate(0,"paused",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"paused",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"paused",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"paused",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"paused",OBJPROP_YSIZE,20);
   ObjectSetInteger(0,"paused",OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
   ObjectSetInteger(0,"paused",OBJPROP_CORNER,CORNER_LEFT_LOWER);
   ObjectSetInteger(0,"paused",OBJPROP_FONTSIZE,12);
   ObjectSetString(0,"paused",OBJPROP_FONT,"Verdana");
   ObjectSetString(0,"paused",OBJPROP_TEXT,"Play");
   ObjectSetInteger(0,"paused",OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,"paused",OBJPROP_BGCOLOR,clrGreen);
   ObjectSetInteger(0,"paused",OBJPROP_STATE,false);
   while(!ObjectGetInteger(0,"paused",OBJPROP_STATE)) {
      continue;
      }
   ObjectDelete(0,"paused");
   Comment("end");
   }

2) Вместе с флагом запоминать тикет одного из открытых ордеров и каждый тик проверять не закрылся ли этот ордер. если закрылся - снимать флаг. если не закрылся не снимать.
и соответсвенно часть которая отвечала за отмену флага при 0 прибыли убрать.
 

Bullra

Новичок
Я может не в теме?
Что такое "курить сигу"?

Сига - это сигмоид. Курить сигу - значит наблюдать. ;) В индикаторе сига рассчитывается по количеству точек (баров). Следственно с каждым новым баром нужно вручную добавлять в расчет новый бар. В принципе можно курить и так, но было бы веселее, если бы расчет сиги можно было менять прямо с графика или функцией StartDate. :)
 

Вложения

  • geSigmoid.mq4
    8 КБ · Просмотры: 48
Последнее редактирование:

FOTINI

Местный житель
Добрый вечер!
Пожалуйста,если возможно уменьшить размер файла, после компиляции он вот такого размера стал...А индюк замечательный и нужный...
Спасибо.
 

Вложения

  • ZUP_v135 Shark Attack.mq4
    662,1 КБ · Просмотры: 67

wintrades

Новичок форума
1) функцию Paused() заменить на эту:
PHP код:
void Paused() {
Comment("start");
ObjectCreate(0,"paused",OBJ_BUTTON,0,0,0);
ObjectSetInteger(0,"paused",OBJPROP_XDISTANCE,20);
ObjectSetInteger(0,"paused",OBJPROP_YDISTANCE,40);
ObjectSetInteger(0,"paused",OBJPROP_XSIZE,100);
ObjectSetInteger(0,"paused",OBJPROP_YSIZE,20);
ObjectSetInteger(0,"paused",OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
ObjectSetInteger(0,"paused",OBJPROP_CORNER,CORNER_LEFT_LOWER);
ObjectSetInteger(0,"paused",OBJPROP_FONTSIZE,12);
ObjectSetString(0,"paused",OBJPROP_FONT,"Verdana");
ObjectSetString(0,"paused",OBJPROP_TEXT,"Play");
ObjectSetInteger(0,"paused",OBJPROP_COLOR,clrWhite);
ObjectSetInteger(0,"paused",OBJPROP_BGCOLOR,clrGreen);
ObjectSetInteger(0,"paused",OBJPROP_STATE,false);
while(!ObjectGetInteger(0,"paused",OBJPROP_STATE)) {
continue;
}
ObjectDelete(0,"paused");
Comment("end");
}
2) Вместе с флагом запоминать тикет одного из открытых ордеров и каждый тик проверять не закрылся ли этот ордер. если закрылся - снимать флаг. если не закрылся не снимать.
и соответсвенно часть которая отвечала за отмену флага при 0 прибыли убрать.
Благодарю, функцию заменил! Как вижу, прекрасно срабатывает. Кнопочка play - супер, очень удобно и наглядно.
Касательно избежания повторов паузы при повторении этой же просадки в одной и той же серии ордеров по сетке - не совсем понял, но это не критично. Еще раз благодарю.
 

Sergey BAwenko

Интересующийся
Здравствуйте УВАЖАЕМЫЕ ПРОГРАММИСТЫ прошу вашей помощи подправить данный советник.

1.Открытие ордеров автоматически.
2.При достижении + открывает ордер в туже сторону с начальным лотом.
3.При достижении - переворачивает ордер (открывает ордер в сторону в которую был получен - ).


Посмотреть вложение Nevalyashka_MartinGeil_.mq4 :please:
 

Sanz

Новичок форума
Привет друзья, я хотел бы знать, что это за индикатор и версия mql4, перерисовать?
Благодарю вас
 

Вложения

  • M5.ex4
    22 КБ · Просмотры: 75
Верх