#1929

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

#1930

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

 

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

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

 

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

 

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

 

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

Experts.rar9 скач.

#1931
2 минуты назад, Ronnnnn сказал:

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

 

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

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

 

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

 

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

 

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

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

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

Screenshot_8.png

#1932

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

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

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

а ниже 

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

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

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

 

#1933
14 минут назад, usver73 сказал:

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

а ниже 

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

 

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

Screenshot_8.png

#1934
5 минут назад, Ronnnnn сказал:

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

 

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

Screenshot_9.png

 

Изменено 6 июля, 2021 пользователем Ronnnnn

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

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

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

#1936
7 минут назад, usver73 сказал:

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

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

Тест.rar6 скач.

#1937
19 минут назад, Ronnnnn сказал:

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

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

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

#1938

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);    
}
//+------------------------------------------------------------------+

Изменено 6 июля, 2021 пользователем Vadim_TM

#1939
1 час назад, Ronnnnn сказал:

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

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

#1940

Тест_2.mq46 скач.

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

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

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

#1941

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

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

 

#1942
17 часов назад, usver73 сказал:

Тест_2.mq4

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

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

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

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

#1943
1 час назад, Ronnnnn сказал:

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

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

#1944
2 часа назад, usver73 сказал:

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

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

#1945
45 минут назад, Ronnnnn сказал:

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

 

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

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

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

#1946

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

Mega trend.mq418 скач.

#1947
В 09.07.2021 в 11:45, segaj сказал:

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

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

Спойлер

image.thumb.png.af9ad4b2be64c506da3a2d833e42d056.png

 

#1948

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

 

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

 

 

High_Low.mq44 скач.

Изменено 15 июля, 2021 пользователем drobayura

#1949
6 часов назад, drobayura сказал:

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

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

#1950

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

Изменено 14 июля, 2021 пользователем drobayura

#1951

Маленько изменил. Не знаю правильно не правильно. Не работает. При компиляции ошибок нет. В журнале ошибка 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;
}
//+------------------------------------------------------------------+

#1952
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 то модификации будут запрещены.

 

#1953

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

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

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

Изменено 15 июля, 2021 пользователем drobayura

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

Перейти к списку тем
Форум · 2.0.20260627.0025