Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано

Подскажите ,пожалуйста, есть советник ,когда то был установлен с маркета ,теперь не доступен для скачивания ,работает на любом счете в любом терминале в пределах одного ПК на котором был установлен! Как можно сделать чтоб он фурычил на других ПК ,возможно просто скопировать и перенести какие то dll-ки или не все так просто?)

Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано

Добрый день всем)

 

Я только начинаю изучать программирование mql4, пишу советника на основе ADX, возникла проблемка:

Когда adx выше 55, линия + больше линии -, то входим в позицию, но при этом когда мы зашли в позицию то можем выйти из рынка по стоп лос, но индикатор при том остается выше 55 и советник начинает снова открывать позицию.

 

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

 

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

 

Буду очень благодарен помощи)

Experts.rar

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
2 минуты назад, Ronnnnn сказал:

Добрый день всем)

 

Я только начинаю изучать программирование mql4, пишу советника на основе ADX, возникла проблемка:

Когда adx выше 55, линия + больше линии -, то входим в позицию, но при этом когда мы зашли в позицию то можем выйти из рынка по стоп лос, но индикатор при том остается выше 55 и советник начинает снова открывать позицию.

 

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

 

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

 

Буду очень благодарен помощи)

Experts.rar 13 \u043a\u0411 · 0 загрузок

Вот что получается сейчас

Screenshot_8.png

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

У Вас противоречивое условие на вход. Сначала пишите, что

14 минут назад, Ronnnnn сказал:

Когда adx выше 55, линия + больше линии -, то входим в позицию

а ниже 

16 минут назад, Ronnnnn сказал:

Как сделать так чтобы ..... советник снова ждал нового сигнала когда линия пересечет уровень 55? 

Если хотите поймать именно пересечение, то смотрите значение индикатора на [2] и [1] свечах.
Если на 2-й свече линия + ниже, на на 1-й свече выше, чем линия -, значит поступил сигнал

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
14 минут назад, usver73 сказал:

У Вас противоречивое условие на вход. Сначала пишите, что

а ниже 

Если хотите поймать именно пересечение, то смотрите значение индикатора на [2] и [1] свечах.
Если на 2-й свече линия + ниже, на на 1-й свече выше, чем линия -, значит поступил сигнал

 

Сделал как вы сказали, но советник по прежнему после вылета по стопу снова заходит в позицию, а мне нужно чтоб это совершалось 1 раз за данный сигнал индикатора т.е первый раз зашел, закрылся ордел и чтоб советник опять ждал нового сигнала когда индикатор уйдет ниже 55 и вернется уже на другой свечи. Надеюсь нормально описал))

Screenshot_8.png

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
5 минут назад, Ronnnnn сказал:

Сделал как вы сказали, но советник по прежнему после вылета по стопу снова заходит в позицию, а мне нужно чтоб это совершалось 1 раз за данный сигнал индикатора т.е первый раз зашел, закрылся ордел и чтоб советник опять ждал нового сигнала когда индикатор уйдет ниже 55 и вернется уже на другой свечи. Надеюсь нормально описал))

 

не правильный скрин прислал

Screenshot_9.png

 

Изменено пользователем Ronnnnn
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
16 минут назад, Ronnnnn сказал:

Сделал как вы сказали

сомневаюсь.
Скиньте исправленную версию, вечером посмотрю код

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
7 минут назад, usver73 сказал:

сомневаюсь.
Скиньте исправленную версию, вечером посмотрю код

Вот, буду благодарен

Тест.rar

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
19 минут назад, Ronnnnn сказал:

Вот, буду благодарен

Тест.rar 13 \u043a\u0411 · 0 загрузок

логика действий правильная, но т.к ордер слетает по стопу, то возможно советнику нужно запретить торговать на этом же баре, тогда он не откроет следующие ордера, и тогда по идее будет все норм, но как это сделать?)))

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

PERIOD_M5 на ваше усмотрение

 

для селл  && !CheckCloseOnCurBar(PERIOD_M5,Symbol(),OP_SELL)

для бай  && !CheckCloseOnCurBar(PERIOD_M5,Symbol(),OP_BUY)

*************************************************************************

функция

//+------------------------------------------------------------------+
//| Проверка закрытия позиции на текущей свече                                    |
//+------------------------------------------------------------------+
bool CheckCloseOnCurBar(int Per,string sym,int OrType)
{
 for(int i = OrdersHistoryTotal()-1; i >= 0; i--)
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     {
      if(OrderCloseTime() < iTime(sym, Per, 0))  
        return(False);
      if(OrderSymbol() == sym && OrderMagicNumber() == Magic_Number && OrderCloseTime() > iTime(sym, Per, 0) && OrderType()==OrType)
        return(True);
     }
 return(False);    
}
//+------------------------------------------------------------------+

Изменено пользователем Vadim_TM
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
1 час назад, Ronnnnn сказал:

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

Если ордер закрывается по стопу на том же баре, что и открылся, то да, нужна проверка, о которой написал @Vadim_TM

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Тест_2.mq4

по  логике пересечения АДХ уровня 55 вроде нормально.
Вопрос по АДХ на Н1: смысл проверять значение на 0-й свече, если оно еще не стабилизировалось?
Была ошибка в проверке нового бара. Компилятор явно писал, что expression has no effect

По логике также не понял- зачем считать ТП, если при открытии ордера ставится ТП=0?
В общем, если правильно понял, то код немного причесал- были лишние  {}.

Если все таки стопы будут короткие, то добавьте код проверки открытия на одной и той же свече

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Спасибо всем за помощь, очень помогли.

Я код просто не чистил, как ковырялся изменял так все и оставил, поэтому там мусор был)

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
17 часов назад, usver73 сказал:

Тест_2.mq4

по  логике пересечения АДХ уровня 55 вроде нормально.
Вопрос по АДХ на Н1: смысл проверять значение на 0-й свече, если оно еще не стабилизировалось?
Была ошибка в проверке нового бара. Компилятор явно писал, что expression has no effect

По логике также не понял- зачем считать ТП, если при открытии ордера ставится ТП=0?
В общем, если правильно понял, то код немного причесал- были лишние  {}.

Если все таки стопы будут короткие, то добавьте код проверки открытия на одной и той же свече

Иногда м5 противоречит по направлению тренду на н1, и из-за этого не правильно заходит, это редко происходит но бывает, поэтому сделал чтоб еще и на н1 проверял направление цены

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
1 час назад, Ronnnnn сказал:

Иногда м5 противоречит по направлению тренду на н1, и из-за этого не правильно заходи

да я не про логику, а про то, что проверяют сигнал на 0-й свече крайне редко и осмысленно.
В Вашем случае вряд ли это актуально

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
2 часа назад, usver73 сказал:

да я не про логику, а про то, что проверяют сигнал на 0-й свече крайне редко и осмысленно.
В Вашем случае вряд ли это актуально

Кстати правильно подмечено, ранее я делал вход по 0 свече, просто не досмотрел этот момент, спасибо)

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
45 минут назад, Ronnnnn сказал:

Всем доброго дня

 

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

Мартин тест.rar 2 \u043a\u0411 · 0 загрузок

Друзья все нашел что нужно было, вопрос не актуален

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Ребята-программисты, добавьте пожалуйста в приложенный индик возможность, чтобы он показывал стрелку на графике Н4, на М1-Н1 показывает, а выше не хочет.

Mega trend.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 09.07.2021 в 11:45, segaj сказал:

а выше не хочет

все он показывает. В коде нет привязки к какому либо ТФ для стрелок
 

Спойлер

image.thumb.png.af9ad4b2be64c506da3a2d833e42d056.png

 

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Ребята, прошу помощи с модификацией ордеров. При компиляции ошибок нет, но модификация по ТР не работает выдаёт ошибку 4108 и 4051.

 

Код прилагается.

 

 

High_Low.mq4

Изменено пользователем drobayura
другой файл
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
6 часов назад, drobayura сказал:

Ребята, прошу помощи с модификацией ордеров.

Вы в функции _OrdersModify() пытаетесь модифицировать закрытые (исторические) ордера...
В этой же функции разберитесь с логикой (фигурными скобками)

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

А как сделать что бы модифицировался самый убыточный рыночный ордер? Не поможете? Причём что бы ТР тралился в отрицательную зону.

Изменено пользователем drobayura
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Маленько изменил. Не знаю правильно не правильно. Не работает. При компиляции ошибок нет. В журнале ошибка 4051 - Недопустимое значение параметра функции

 

int init()
  {
   Comment ("");
   return(0);
   }
void _OrdersModify(){
{
   bool m;
   double _profitByu=0.0, _profitSell=0.0;
   int i; 
   for (i=OrdersHistoryTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if (OrderType()==OP_BUY && OrderProfit()>0)  
         if (OrderProfit()>0)  _profitByu += OrderProfit() + OrderSwap();         
           if (OrderProfit() < 0) _profitByu = 0;
     }      
       if (OrderType()==OP_SELL && OrderProfit()>0)    
       if (OrderProfit()>0) _profitSell += OrderProfit() + OrderSwap();           
       if (OrderProfit() < 0) _profitSell = 0;   
       
        {
               Comment("Посчитаем профит:" ,"\n","Buy ", _profitByu,
                  "\n"," Sell ", _profitSell);
            }   
       
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS)==true) {
            if (OrderSymbol()==Symbol())
             if (OrderType()==OP_BUY && OrdersTotal()>0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();{
     m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
        NormalizeDouble(OrderOpenPrice() - _profitSell * _procent,Digits),OrderExpiration(),CLR_NONE);  
     }   
     if (OrderType()==OP_SELL && OrdersTotal()>0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();{
     m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
       NormalizeDouble(OrderOpenPrice() + _profitByu * _procent,Digits),OrderExpiration(),CLR_NONE);  
              }
            }
          }
        }
      }       
    } 
  }  
   return;
}
//+------------------------------------------------------------------+

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
45 минут назад, drobayura сказал:

Маленько изменил. Не знаю правильно не правильно. Не работает. При компиляции ошибок нет. В журнале ошибка 4051 - Недопустимое значение параметра функции

 

int init()
  {
   Comment ("");
   return(0);
   }
void _OrdersModify(){
{
   bool m;
   double _profitByu=0.0, _profitSell=0.0;
   int i; 
   for (i=OrdersHistoryTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if (OrderType()==OP_BUY && OrderProfit()>0)  
         if (OrderProfit()>0)  _profitByu += OrderProfit() + OrderSwap();         
           if (OrderProfit() < 0) _profitByu = 0;
     }      
       if (OrderType()==OP_SELL && OrderProfit()>0)    
       if (OrderProfit()>0) _profitSell += OrderProfit() + OrderSwap();           
       if (OrderProfit() < 0) _profitSell = 0;   
       
        {
               Comment("Посчитаем профит:" ,"\n","Buy ", _profitByu,
                  "\n"," Sell ", _profitSell);
            }   
       
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS)==true) {
            if (OrderSymbol()==Symbol())
             if (OrderType()==OP_BUY && OrdersTotal()>0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();{
     m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
        NormalizeDouble(OrderOpenPrice() - _profitSell * _procent,Digits),OrderExpiration(),CLR_NONE);  
     }   
     if (OrderType()==OP_SELL && OrdersTotal()>0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();{
     m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
       NormalizeDouble(OrderOpenPrice() + _profitByu * _procent,Digits),OrderExpiration(),CLR_NONE);  
              }
            }
          }
        }
      }       
    } 
  }  
   return;
}
//+------------------------------------------------------------------+

Я не совсем понимаю, а что вы пытаетесь с ордером сделать?

Вы берете каждый ордер на покупку и пытаетесь переставить тейки ниже цены на почему-то профит продаж, умноженный на процент.

Профит, вообще говоря, в деньгах. А цена в... безразмерная величина :)

Если вам хочется перевести прибыль/убыток в размерность цены, то нужно поделить сумму на цену тика (TICK_VALUE) и домножить на размер тик TICK_SIZE, который в пунктах - то есть нужно потом домножить еще и на пункт.

Ну и нужно как-то проверять на близость к текущей цене закрытия: по меньшей мере тейк покупки не может быть ниже текущего бида. Я если быть точнее, то не может быть ближе, чем STOPLEVEL от текущего бида. И если он во FREEZELEVEL то модификации будут запрещены.

 

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Идея в общем такая:

От любого закрытого ордера с профитом берём скажем 30%  и ТР убыточного ордера переносим в убыток и таким образом тралим его в убыток до закрытия (это своеобразный SL, только сначала берем прибыль потом возвращаем процент от этой прибыли.

Система "сначала взял, потом отдал"). Уверен такого алгоритма нет нигде. Если открывать  ордера на каждом баре на пробой хай, лоу,  то берем всё движение минус процент, который возвращаем для закрытия самого убыточного ордера.

Изменено пользователем drobayura
Ссылка на сообщение
Поделиться на другие сайты

  • idinesh changed the title to Assae Elite Pro tlap version source code need i have plan convert this mt4 to mt5 and it possible mt4 dll file modified mt5 version

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...