Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 908

 
AlexeyVik:

Ну извини, не сочти за грубость. А зачем тогда вообще заниматься тебе программированием?

Хотя, здесь много таких которые пишут куски кода вместо того чтобы объяснить что для чего. Надо ж.дать.

А я предпочитаю объяснить, но не писать кусочки.

 Разобрался! Как то так. Спс.

      int bar1=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_D1,0));//Print(bar1); //первый бар 
  int MaxVol=0;
      int i=0, n=0;
      for (i=bar1; i>0; i--)
         {
          //if (i<bar);
          //if (TimeMinute(Time[i])!=Minute()) break;
          if (iVolume(Symbol(),0,i)>MaxVol)
            {
             MaxVol=iVolume(Symbol(),0,i);
             n=i;
            }
          //Print(MaxVol," MaxVol ", n, " n");
         }
          datetime MaxVolT = iTime(NULL, PERIOD_M1, n);

 
sashasonik:

 Разобрался! Как то так. Спс.

      int bar1=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_D1,0));//Print(bar1); //первый бар 
  int MaxVol=0;
      int i=0, n=0;
      for (i=bar1; i>0; i--)
         {
          //if (i<bar);
          //if (TimeMinute(Time[i])!=Minute()) break;
          if (iVolume(Symbol(),0,i)>MaxVol)
            {
             MaxVol=iVolume(Symbol(),0,i);
             n=i;
            }
          //Print(MaxVol," MaxVol ", n, " n");
         }
          datetime MaxVolT = iTime(NULL, PERIOD_M1, n);

Ну вот и чудненько.

Теперь можно и о сокращении, упрощении кода подумать.

Вот нашёл ты первый бар. Значит столько баров надо копировать в массив. Вот и получается код сокращается до трёх строк.

1. находим первый бар.

2. копируем в массив объёмы по первому примеру

int  CopyTickVolume(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем (с нулевого или первого)
   int              count,            // сколько копируем(первым пунктом определили)
   long             volume_array[]    // массив для копирования тиковых объемов(предварительно объявляем массив глобального уровня или локального)
   );

3. ArrayMaximum(из этого массива)


И непонятно для чего ты используешь переменную n

 

Скачал архив котировок. Вот пример одной записи:
4071656556,D,EUR/USD,2015-05-31 17:00:02.803000000,1.098020,1.098120
Заголовки полей следующие: lTid,cDealable,CurrencyPair,RateDateTime,RateBid,RateAsk
Что означают первые 2 поля?

 
PostoronnimV:

Скачал архив котировок. Вот пример одной записи:
4071656556,D,EUR/USD,2015-05-31 17:00:02.803000000,1.098020,1.098120
Заголовки полей следующие: lTid,cDealable,CurrencyPair,RateDateTime,RateBid,RateAsk
Что означают первые 2 поля?

Первые три столбца можно смело отбросить, они не имеют практического применения для создания котировок под МТ4.
 

Добрый день!

В эксперте я использую много блоков, в каждом блоке есть один и тот же индикатор. Могу я как то сделать что этот индикатор объявил один раз в OnTick() и потом в каждом блоке не надо било заново объявлять?

 
abeiks:

Добрый день!

В эксперте я использую много блоков, в каждом блоке есть один и тот же индикатор. Могу я как то сделать что этот индикатор объявил один раз в OnTick() и потом в каждом блоке не надо било заново объявлять?

Можете
 
Как? На примере покажите пожалуйста.
void OnTick()
{
double MA_High = iMA(NULL, 0, 9, 1, MODE_EMA, PRICE_LOW, cnt);
}

int exampl()
{
a = MA_High;
}

int exampl1()
{
a = MA_High;
}
 
abeiks:
Как? На примере покажите пожалуйста.
Курите мануал про видимость переменных, объявленных на разных уровнях кода.
double MA_High=0; 
void OnTick()
{
double MA_High = iMA(NULL, 0, 9, 1, MODE_EMA, PRICE_LOW, cnt);
}

int exampl()
{
a = MA_High;
}

int exampl1()
{
a = MA_High;
}
 
evillive:
Курите мануал про видимость переменных, объявленных на разных уровнях кода.
Спасибо!
 

Здравствуйте,

Подскажите пожалуйста, почему возникают предупреждения - implicit conversion from 'string' to 'number'  и implicit conversion from 'number' to 'string' в местах расположения переменных (после команды int и далее после message).  Это наверное одно и тоже предупреждение? я плохо разбираюсь в программировании.

И скажите ещё, если код работает, а есть только предупреждения это плохо? на что влияет?

И ещё один вопрос, как в сообщение вывести локальное время? Пишу message= TimeLocal()+.....  и ничего не происходит..


Фрагмент кода:

if(last_sell_1_price==0 || TimeCurrent()-last_sell_1_price>alarm_limit_notification*60)
                 {
                  Print("");
                  if(Session_Check())
                    {
            
//сооб sell

                     int sell1 = DoubleToStr( (Bid - Price_Line)/Point,0);
                     int sell2=DoubleToStr( (Bid - Price_Line2)/Point,0);
                     int rsi=DoubleToStr(ExtRSIBuffer[0] - Price_RSI_Line, 2);
                                  
                     message=
                     TimeCurrent()+"  (Level)"+"   \n"+
                     "\n"+
                     Symbol()+"  TF:"+TF_in_String()+"   \n"+
                     "Price: "+DoubleToStr(Bid,4)+"   \n"+
                     "sell_1: "+(sell1>0?"+":"")+sell1+"   \n"+
                     "sell_2: "+(sell2>0?"+":"")+sell2+"   \n"+
                     "RSI:  "+(rsi>0?"+":"")+rsi;
  
                     SendNotification(message);
                     Print(message);
                     if(mail_message==on)
                     SendMail(Symbol(),message);

                    }
                  last_sell_1_price=TimeCurrent();
                 }
              }
Причина обращения: