Ваши вопросы по языку MQL4

1Игорь1

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

zQuant

Местный житель
Всем добрый день.
Скажите, как можно оптимизировать параметры индикатора? Или надо делать простейшего эксперта, и через него оптимизировать? Интересно, бывают такие шаблоны экспертов,к которым можно было прикрепить индикатор и оптимизировать?

Да, через эксперта. Да, есть такой, поищите
 

panamamaster

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

1Игорь1

Интересующийся
Добрый день.
У меня советник выдает на "табло" информацию. В коде прописано так:
TEX2="MA4("+DoubleToStr(MAperiod4,0)+"-TF2("+DoubleToStr(ma4TF2)+"): "+gtex(S7)
на "табло" печатает так:
МА4(5-TF2(60.00000000):Селл
Подскажите, пжл, что надо поправить, чтобы появилась скобка у МА4(5 и таймфрейм(переменная ma4TF2) печатался как целое число, чтобы на "табло" получилось так:
МА4(5)-TF2(60):Селл
 

AlexeyVik

Программист mql4 mql5
Добрый день.
У меня советник выдает на "табло" информацию. В коде прописано так:
TEX2="MA4("+DoubleToStr(MAperiod4,0)+"-TF2("+DoubleToStr(ma4TF2)+"): "+gtex(S7)
на "табло" печатает так:
МА4(5-TF2(60.00000000):Селл
Подскажите, пжл, что надо поправить, чтобы появилась скобка у МА4(5 и таймфрейм(переменная ma4TF2) печатался как целое число, чтобы на "табло" получилось так:
МА4(5)-TF2(60):Селл
Сравни
DoubleToStr(MAperiod4,0)
DoubleToStr(ma4TF2) ??? Где второй параметр функции отвечающий за разрядность?
 

Sergej1124

Прохожий
Здравствуйте!
Индикатор не рисует стрелки в реальном времени при соблюдении условий. Стрелки появляются только если переключить ТФ либо удалить и снова поставить на график.
Компилятор ошибок и предупреждений не даёт. Где мой косяк понять не могу.

PHP:
//+------------------------------------------------------------------+
//|                                                    RsiArrows.mq4 |
//|                                                   Copyright 2015 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

double ArrowUp[];
double ArrowDn[];
double Rsi[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(3);
  
   SetIndexBuffer(0,Rsi);
   SetIndexBuffer(1,ArrowUp);
   SetIndexBuffer(2,ArrowDn);
   
   SetIndexStyle(0,DRAW_NONE,EMPTY);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);
   SetIndexArrow(1,233);
   SetIndexStyle(2,DRAW_ARROW,EMPTY);
   SetIndexArrow(2,234);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i, limit;
   
   limit = rates_total - prev_calculated - 1;
   if(rates_total < 1) return(0);
   
   for(i=0;i<limit;i++)
   {
    Rsi[i] = iRSI(Symbol(),0,4,PRICE_CLOSE,i);
   }
   
   for(i=0;i<limit;i++)
     {
      if(Rsi[i+1] <= 10) ArrowUp[i+1] = low[i+1];
      if(Rsi[i+1] >= 90) ArrowDn[i+1] = high[i+1];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

zQuant

Местный житель
Здравствуйте!
Индикатор не рисует стрелки в реальном времени при соблюдении условий. Стрелки появляются только если переключить ТФ либо удалить и снова поставить на график.
Компилятор ошибок и предупреждений не даёт. Где мой косяк понять не могу.

PHP:
//+------------------------------------------------------------------+ u
//|                                                    RsiArrows.mq4 |
//|                                                   Copyright 2015 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

double ArrowUp[];
double ArrowDn[];
double Rsi[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(3);
  
   SetIndexBuffer(0,Rsi);
   SetIndexBuffer(1,ArrowUp);
   SetIndexBuffer(2,ArrowDn);
   
   SetIndexStyle(0,DRAW_NONE,EMPTY);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);
   SetIndexArrow(1,233);
   SetIndexStyle(2,DRAW_ARROW,EMPTY);
   SetIndexArrow(2,234);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i, limit;
   
   limit = rates_total - prev_calculated - 1;
   if(rates_total < 1) return(0);
   
   for(i=0;i<limit;i++)
   {
    Rsi[i] = iRSI(Symbol(),0,4,PRICE_CLOSE,i);
   }
   
   for(i=0;i<limit;i++)
     {
      if(Rsi[i+1] <= 10) ArrowUp[i+1] = low[i+1];
      if(Rsi[i+1] >= 90) ArrowDn[i+1] = high[i+1];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
Измените расчет переменной limit
limit = rates_total - prev_calculated;
if(prev_calculated == 0)
limit--;

Перед вторым for
Еще раз
if(prev_calculated == 0)
limit--;
 
Последнее редактирование:

zQuant

Местный житель
у меня что то только крсные стрелки показывает.

Можете исправить?
Индексы надо поправить. Чтоб 0 и 1 были стрелки, а 2й - невидимый )
У Вас возможно фон черный, поэтому не заметили что цвет не назначен стрелке
Код:
//+------------------------------------------------------------------+ u
//|                                                    RsiArrows.mq4 |
//|                                                   Copyright 2015 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

double ArrowUp[];
double ArrowDn[];
double Rsi[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(3);
  
   SetIndexBuffer(2,Rsi);
   SetIndexBuffer(0,ArrowUp);
   SetIndexBuffer(1,ArrowDn);
   
   SetIndexStyle(2,DRAW_NONE,EMPTY);
   SetIndexStyle(0,DRAW_ARROW,EMPTY);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);
   SetIndexArrow(1,234);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i, limit;
   
   limit = rates_total - prev_calculated;
   if(prev_calculated == 0) 
           limit--;
   if(rates_total < 1) return(0);
   
   for(i=0;i<limit;i++)
   {
    Rsi[i] = iRSI(Symbol(),0,4,PRICE_CLOSE,i);
   }
     if(prev_calculated == 0) 
           limit--;
  
   for(i=0;i<limit;i++)
     {
      if(Rsi[i+1] <= 10) ArrowUp[i+1] = low[i+1];
      if(Rsi[i+1] >= 90) ArrowDn[i+1] = high[i+1];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Vladdim

Активный участник
Господа программисты помогите ! Нужно определить профит последнего закрытого ордера на покупку или на продажу. Из того что нашел в инете собрал функцию к примеру на покупку, посмотрите пожалуйста, буде работать моя писанина или нет ? ошибок компилятор не выдает, но уверенности что функция вернет нужное нет. За ранее СПАСИБО
double historyBuy()
{
double profit = 0;
datetime time = 0;
for(int i = OrdersHistoryTotal();i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol() == Symbol()&& OrderMagicNumber () == Magic && OrderType() == OP_BUY)
{
if(time<OrderCloseTime())
{
time=OrderCloseTime();

profit = OrderProfit();
}
}
}
}

return(profit);
}
 

zQuant

Местный житель
Господа программисты помогите ! Нужно определить профит последнего закрытого ордера на покупку или на продажу. Из того что нашел в инете собрал функцию к примеру на покупку, посмотрите пожалуйста, буде работать моя писанина или нет ? ошибок компилятор не выдает, но уверенности что функция вернет нужное нет. За ранее СПАСИБО
double historyBuy()
{
double profit = 0;
datetime time = 0;
for(int i = OrdersHistoryTotal();i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol() == Symbol()&& OrderMagicNumber () == Magic && OrderType() == OP_BUY)
{
if(time<OrderCloseTime())
{
time=OrderCloseTime();

profit = OrderProfit();
}
}
}
}

return(profit);
}
Не проверял, но выглядит правильно.
Возможно по смыслу не хватает еще ordercommission && orderswap
 

Yurkov

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

Минька

Активный участник
Народ...как оживить советник на внешних индюках, на АВТОНОМНОМ ГРАФИКЕ (или на нестандартном таймфрейме), кто знает?
 

_SERG_

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


Ты вопрос реши, где до следующего месяца флаг "события" хранить будешь, или другие его параметры, время последнего события например, и проверяй как сова или терминал работать будет.
Проще в переменных терминала, там, если что, ручками подправить можно будет, вдруг жадность победит. :laugh:
 

Yurkov

Почетный гражданин
Ты вопрос реши, где до следующего месяца флаг "события" хранить будешь, или другие его параметры, время последнего события например, и проверяй как сова или терминал работать будет.
Проще в переменных терминала, там, если что, ручками подправить можно будет, вдруг жадность победит. :laugh:

Разве нельзя без всяких заморочек решить этот вопрос? Закрылась сделка, проверили прибыль, если >=X%, то не открывать сделки до первого числа следующего месяца.
Индикатор i-Profit, к примеру, показывает прибыль за день, неделю, месяц.
 

ansol

Местный знаток
Разве нельзя без всяких заморочек решить этот вопрос? Закрылась сделка, проверили прибыль, если >=X%, то не открывать сделки до первого числа следующего месяца.
Индикатор i-Profit, к примеру, показывает прибыль за день, неделю, месяц.

Вы не можете найти исходный код этого индикатора, чтобы просто вставить в свой советник?
 

Yurkov

Почетный гражданин
Вы не можете найти исходный код этого индикатора, чтобы просто вставить в свой советник?

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

Вложения

  • i-profit.mq4
    22,9 КБ · Просмотры: 26

_SERG_

Активный участник
Разве нельзя без всяких заморочек решить этот вопрос? Закрылась сделка, проверили прибыль, если >=X%, то не открывать сделки до первого числа следующего месяца.
Индикатор i-Profit, к примеру, показывает прибыль за день, неделю, месяц.
Можно без заморочек - торгуй руками.
Хочешь совой, собери и отдай ей всю необходимую для её работы инфу и наслаждайся созерцанием результата.

PS
Чужой код вставлять в чужой советник, не понимая, как от работает, дело не благодарное.
Про сохранение, обновление, удаление, тоже придётся позаботиться.
 
Последнее редактирование:

Yurkov

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

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

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

_SERG_

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

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

Настрой историю в терминале, и первый параметр в индикаторе и не будет беды.
 
Верх