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

mobidik

-----
Дорогие коллеги. Подскажите, есть индикатор, по нему написан эксперт. Что бы потестировать эксперт нужно накидывать его в тестере через визуализатор, в связи с чем все работает очень медленно и не возможно оптимизировать параметры индикатора. Можно ли объединить код эксперта и индикатора, совместить их логику?
Есть два варианта решения проблемы:
1) Доработать индикатор, а именно: вывести в буферы ценовые значения уровней.
2) Перенести сам расчет уровней в код советника.
Все реализуемо, был бы смысл...
 

instantt

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

Clank

Новичок форума
Хочу спросить по поводу автоматического расчета мани менеджмента исходя из результатов сделок, думаю мало кто просил об этом в этой теме.

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

Например:
стандартный риск на сделку 2%
если мы получили -
советник должен рассчитать вход с риском 0.5% до того момента, пока не будет плюсовая сделка, есть плюсовая, дальше возврат к риску 2%.

Насколько это сложно реализовать?
 
Последнее редактирование:

ZIKILO

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

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

Например:
стандартный риск на сделку 2%
если мы получили -
советник должен рассчитать вход с риском 0.5% до того момента, пока не будет плюсовая сделка, есть плюсовая, дальше возврат к риску 2%.

Насколько это сложно реализовать?
Вообще элементарно и таких советников полно в сети!
 

Surem

Местный житель
Приветствую уважаемые специалисты! Прошу сделать в индикаторе возможность отключать ненужные ТФ и оставлять необходимые. Ещё желательно (но смотрите сами) менять размер шрифта. Либо вообще просто сделать чтоб все ТФ было видно в подвале, открываю индюк не все влазят ТФ.
 

Вложения

  • MTF_ATR.ex4
    6 КБ · Просмотры: 16
  • MTF_ATR.mq4
    3,6 КБ · Просмотры: 30
Последнее редактирование:

MakarFX

Элитный участник
Приветствую уважаемые специалисты! Прошу сделать в индикаторе возможность отключать ненужные ТФ и оставлять необходимые. Ещё желательно (но смотрите сами) менять размер шрифта. Либо вообще просто сделать чтоб все ТФ было видно в подвале, открываю индюк не все влазят ТФ.
Безымянный.png
 

Вложения

  • MTF_ATR.mq4
    8,5 КБ · Просмотры: 41

A.S.V.

VIP-участник
Приветствую уважаемые специалисты! Прошу сделать в индикаторе возможность отключать ненужные ТФ и оставлять необходимые. Ещё желательно (но смотрите сами) менять размер шрифта. Либо вообще просто сделать чтоб все ТФ было видно в подвале, открываю индюк не все влазят ТФ.
Сделать самому возможность выбирать TF для отображения у меня не получилось, поэтому я скопировал код у доработанного MakarFX индикатора, а для закрепления новой для меня информации сделал реверсивное отображение TF .
Сделал удобнее выбор TF, для показаний ATR установил формат точности четыре знака после точки, и на всякий случай сделал возможность сдвигать показания индикатора по горизонтали.
Спасибо MakarFX и Всем тем Программистам кто делится открытым кодом.
 

Вложения

  • MTF_ATR.mq4
    15,6 КБ · Просмотры: 41
  • 1.png
    1.png
    147,4 КБ · Просмотры: 173

Surem

Местный житель
Сделать самому возможность выбирать TF для отображения у меня не получилось, поэтому я скопировал код у доработанного MakarFX индикатора, а для закрепления новой для меня информации сделал реверсивное отображение TF .
Сделал удобнее выбор TF, для показаний ATR установил формат точности четыре знака после точки, и на всякий случай сделал возможность сдвигать показания индикатора по горизонтали.
Спасибо MakarFX и Всем тем Программистам кто делится открытым кодом.
Ну мне думается и тебе огромное человеческое спасибо!)
 

AlexeNP

Гуру форума
Хочу спросить по поводу автоматического расчета мани менеджмента исходя из результатов сделок, думаю мало кто просил об этом в этой теме.

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

Например:
стандартный риск на сделку 2%
если мы получили -
советник должен рассчитать вход с риском 0.5% до того момента, пока не будет плюсовая сделка, есть плюсовая, дальше возврат к риску 2%.

Насколько это сложно реализовать?
в уму примерно прикинул что ты хочешь (точнее - как я это представляю). тут, наверное, лучше всего использовать моральное ожидание
 

MakarFX

Элитный участник
в уму примерно прикинул что ты хочешь (точнее - как я это представляю). тут, наверное, лучше всего использовать моральное ожидание
Примерно так
Код:
//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double lot=0;
   double minlot  = MarketInfo(Symbol(),MODE_MINLOT);
   double maxlot  = MarketInfo(Symbol(),MODE_MAXLOT);
   double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP));
   // если последняя закрытая сделка убыточная
   if(GetInfoLastPos()<0)
     {
      lot="риск 0,5%";
     }
   // если последняя закрытая сделка прибыльная
   if(GetInfoLastPos()>0)
     {
      lot="риск 2%";
     }
   if(lot<minlot) lot = minlot;
   if(lot>maxlot) lot = maxlot;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Профит последнего ордера                                         |
//+------------------------------------------------------------------+
double GetInfoLastPos()
  {
   datetime t=0;
   double result=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); result=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
 

A.S.V.

VIP-участник
Сделать самому возможность выбирать TF для отображения у меня не получилось, поэтому я скопировал код у доработанного MakarFX индикатора, а для закрепления новой для меня информации сделал реверсивное отображение TF .
Сделал удобнее выбор TF, для показаний ATR установил формат точности четыре знака после точки, и на всякий случай сделал возможность сдвигать показания индикатора по горизонтали.
Спасибо MakarFX и Всем тем Программистам кто делится открытым кодом.
Прошу пардону, индикатор не корректно показывал значения ATR (количество знаков после точки) на валютных парах с JPY и металлами, пришлось исправить...
 

Вложения

  • MTF_ATR.mq4
    15,5 КБ · Просмотры: 44
  • 1.png
    1.png
    200,9 КБ · Просмотры: 132

mobidik

-----
Маленькая поправочка: нет смысла дважды вызывать ф-цию GetInfoLastPos(), перед её вызовом присвоить переменной lot="риск 2%"; а затем уже сам вызов ф-ции. Если она вернет отрицательный результат, тогда переназначим: lot="риск 0,5%".
 

MakarFX

Элитный участник
Маленькая поправочка: нет смысла дважды вызывать ф-цию GetInfoLastPos(), перед её вызовом присвоить переменной lot="риск 2%"; а затем уже сам вызов ф-ции. Если она вернет отрицательный результат, тогда переназначим: lot="риск 0,5%".
Я вообще хотел else поставить, но копипаст подвел)
 

AlexeNP

Гуру форума
Примерно так
Код:
//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double lot=0;
   double minlot  = MarketInfo(Symbol(),MODE_MINLOT);
   double maxlot  = MarketInfo(Symbol(),MODE_MAXLOT);
   double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP));
   // если последняя закрытая сделка убыточная
   if(GetInfoLastPos()<0)
     {
      lot="риск 0,5%";
     }
   // если последняя закрытая сделка прибыльная
   if(GetInfoLastPos()>0)
     {
      lot="риск 2%";
     }
   if(lot<minlot) lot = minlot;
   if(lot>maxlot) lot = maxlot;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Профит последнего ордера                                         |
//+------------------------------------------------------------------+
double GetInfoLastPos()
  {
   datetime t=0;
   double result=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); result=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
ты уже полный расклад написал)
а я сейчас какую-нибудь глупость скажу...но меня потянуло)
Моральное ожидание было введено Бернулли лет 300 тому назад (в 1730 каком-то там году). Формула простая
screenshot.1.png
Deposit - имеющийся на руках финанс, Profit - ожидаемый профит от сделки, Loss - возможный убыток, p - вероятность выигрыша. Сейчас этот расклад известен под названием критерий Келли.
Это формула одной сделки, но тут вмешиваются трейдеры со своими хотелками. По условиям их задачи профит в будущей сделки должен покрывать убыток предыдущей. Переписываем формулу
screenshot.2.png
тут, TP - ожидаемая прибыль в пересчете на один лот (т.е. тейкпрофит в пунктах умноженный на стоимость пункта),
Loss - убыток в прошлой сделке (или 0, если была прибыль)
SL - возможный убыток в пересчете на один лот.
Решаем всё это дело и получаем
screenshot.3.png
ну, или как-то так (если я с минусами ничего не напортачил)
lot = (Deposit*TP*p-(Deposit-Loss)*(1-p)*SL) / TP*SL
 
Верх