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

 
mila.com:

Спасибо, так будет правильно?

label =ObjectGetInteger(0,nm,OBJPROP_COLOR,0);

if(label==Lime) BUY_ = true;

Нет, так вы получаете данные о цвете типом int

Вот попробуйте посмотреть что будет выведено в коммент

Comment( ColorToString((color)ObjectGetInteger(0,"NaneOBJ",OBJPROP_COLOR,0), true) );

Почитайте о преобразовании

 
Vitaly Muzichenko:

Почитайте о преобразовании

Спасибо,  а само условие верно?
 
mila.com:
Спасибо,  а само условие верно?
string label = ColorToString((color)ObjectGetInteger(0,"MP140269",OBJPROP_COLOR,0), true);
if(label==Lime) BUY_ = true;

if(label==Red) BUY_ = false;
Скорее всего нет. Если данные типа stringто нужно обрамлять кавычками, ну и писать полное посимвольное соответствие цвета: "clrLime"
 
Vitaly Muzichenko:
Скорее всего нет. Если данные типа stringто нужно обрамлять кавычками, ну и писать полное посимвольное соответствие цвета: "clrLime"
Спасибо, всё получилось )
 
Vitaly Muzichenko:
Скорее всего нет. Если данные типа stringто нужно обрамлять кавычками, ну и писать полное посимвольное соответствие цвета: "clrLime"
Нет, в кавычки не нужно - это константы. Т.е., нужно так: if(label==clrLime) {}
 
Artyom Trishkin:
Нет, в кавычки не нужно - это константы. Т.е., нужно так: if(label==clrLime) {}

Спасибо, работает.

Скажите пожалуйста, как правильно получить уровень индикатора стохастик, со старшего таймфрейма.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Когда индикатор установлен на старшем т.ф. то всё правильно, стрелка ставится, когда линия индикатора выше 55.

При переключении на младший график, хаос.

 
mila.com:

Спасибо, работает.

Скажите пожалуйста, как правильно получить уровень индикатора стохастик, со старшего таймфрейма.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Когда индикатор установлен на старшем т.ф. то всё правильно, стрелка ставится, когда линия индикатора выше 55.

При переключении на младший график, хаос.

Если вы о цикле индикатора, то для того, чтобы знать какой бар старшего таймфрейма соответствует тому бару, на который указывает индекс цикла на младшем тф, нужно получить время бара i. Далее по этому времени определять бар старшего тф, который соответствует этому времени. Например: одному бару H4 соответствуют четыре бара H1. Соответственно, четыре значения индекса цикла i с тф Н1 будут указывать на один и тот же бар на тф Н4.

По вашим переменным (их именам) я не могу понять с какого бара вы получаете значения. Поэтому кроме теории сказать что-то ещё - затруднительно.

 
Artyom Trishkin:

Если вы о цикле индикатора, то для того, чтобы знать какой бар старшего таймфрейма соответствует тому бару, на который указывает индекс цикла на младшем тф, нужно получить время бара i. Далее по этому времени определять бар старшего тф, который соответствует этому времени. Например: одному бару H4 соответствуют четыре бара H1. Соответственно, четыре значения индекса цикла i с тф Н1 будут указывать на один и тот же бар на тф Н4.

По вашим переменным (их именам) я не могу понять с какого бара вы получаете значения. Поэтому кроме теории сказать что-то ещё - затруднительно.

Индикатор устанавливается на М1.

Главное условие для стрелки вверх линия индикатора на М5 выше уровня 55.

Это условие не соблюдается, даже если на М5 линия находится ниже уровня 55, стрелка всё равно ставится.

 

как записать в робота условие "если хай 1 бара выше лоу 3го..."

 при этом триггер срабатываания чтоб был не "OnTick()"

а каждый раз как 0 бар становится 1 

 
trader781:

как записать в робота условие "если хай 1 бара выше лоу 3го..."

 при этом триггер срабатываания чтоб был не "OnTick()"

а каждый раз как 0 бар становится 1 

Можно так

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private:
   datetime          curbar;
   datetime          lastbar;
public:
                     CNevBar();
                    ~CNevBar();
   bool              new_bar(string symbol,ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
  {
   curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return(true);
     }
   return(false);
  }

CNevBar newbar;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(newbar.new_bar(_Symbol,PERIOD_CURRENT))
     {
      if(High[1]>Low[3])
        {

        }
     }

  }
//+------------------------------------------------------------------+

...
 

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