Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1596

 

собрал свой первый советник из любезно представленных кодов (отдельное спасибо  MakarFX_ за мотивацию и код)

всё работает как надо но с одним косяком. Из за недостатка знаний не могу понять где искать косяк.

алгоритм такой:

есть сигнал - открывает ордер

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

если стоп -следующий ордер с маритном, если тейк, CountProfit,  CountLoss -сброс лота к стартовому

так вот, при закрытии по лимиту убытка - CountLoss , следующий ордер открывается не стартовым лотом а самым минимальным, например:

во внешних переменных задан стартовый лот 0,02, то при CountLoss  следующий ордер будет лотом 0,01.

может кто подсказать где ошибка ?

MakarFX
MakarFX
  • 2021.03.19
  • www.mql5.com
Профиль трейдера
Файлы:
oilim1p11.mq4  17 kb
 
законопослушный гражданин:

собрал свой первый советник из любезно представленных кодов (отдельное спасибо  MakarFX_ за мотивацию и код)

всё работает как надо но с одним косяком. Из за недостатка знаний не могу понять где искать косяк.

алгоритм такой:

есть сигнал - открывает ордер

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

если стоп -следующий ордер с маритном, если тейк, CountProfit,  CountLoss -сброс лота к стартовому

так вот, при закрытии по лимиту убытка - CountLoss , следующий ордер открывается не стартовым лотом а самым минимальным, например:

во внешних переменных задан стартовый лот 0,02, то при CountLoss  следующий ордер будет лотом 0,01.

может кто подсказать где ошибка ?

Посмотри что я поменял в функции double Lots()

Файлы:
oilim1p11.mq4  17 kb
 
MakarFX:

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

Спасибо мысль понял. Сделал сравнение времени закрытия текущего ордера со временем закрытия прошлого ордера и все пошло как нужно. Функцию открытия ордера в противоположном направлении при стоплоссе тоже сделал, хотя не особо помогло.
 
Petronet:
Спасибо мысль понял. Сделал сравнение времени закрытия текущего ордера со временем закрытия прошлого ордера и все пошло как нужно. Функцию открытия ордера в противоположном направлении при стоплоссе тоже сделал, хотя не особо помогло.

Конкретнее...

 

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

  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  

  
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

В чём ошибка, что профит всегда одна и таже величина? О_о?

 
DanilaMactep:

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

В чём ошибка, что профит всегда одна и таже величина? О_о?

   // ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
   if(Tip_tp == en_TP_po_atr)
     {
      tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
     }
   //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+
 
MakarFX:
Благодарю за помощь- поменял кусок кода- всё заработало. Но можешь на словах описать в чём была ошибка т.к на глаз опередить не могу?
 
MakarFX:

Посмотри что я поменял в функции double Lots()

супер! спасибо помогло!

 
DanilaMactep:
Благодарю за помощь- поменял кусок кода- всё заработало. Но можешь на словах описать в чём была ошибка т.к на глаз опередить не могу?

твой код разделил

В этой части кода ты задаешь tp значение АТР
  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
А в этой части ты обнуляешь предыдущее действие и задаешь непонятно что...
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
 
Добрый день! Пожалуйста помогите наладить терминал- не работает маркет. Хочу загрузить бесплатный индикатор из маркета и не могу.
 

Меняла пароль, перегружала и ничего не получается.

Программа пишет в журнале следующее

2021.08.23 11:54:18.236 MQL5 Market failed download product 'MACD Intraday Trend' (www.mql5.com:443 send failed [426: ])


С уважением, Ольга

Причина обращения: