Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 62

 
TEXX:

Рома, на фою висит 509 и не обновляется.....
На Альпари. Запустил их терминал - 509-й, и не обновляется. Хрень какая-то. Пойду РобоФорекс запущу - уже прямо интересно становится.
 
Zhunko:
Работает сейчас.


да, ни хрена не работает (извините) ! сами попробуйте вот код

 
#property strict 

int init()
  {
   string source="1,2,3",token=",";

   string ar[];
   stringToStringSplit(ar,source,token);

   for(int i=0; i<ArraySize(ar); i++)
     {
      Print(i," ",ar[i]);
     }
   return(0);
  }
 
int start()
  {

   return(0);
  }
 
void stringToStringSplit(string &out[],string source,string token)
  {
   int count=0,tokenCount=0;
   string value="";

   ArrayResize(out,0);
   if(source == "") return;
   tokenCount= tokenCounter(source,token);
   while(count<=tokenCount) 
     {
      count++;
      value=strToken(source,token,count);
      ArrayResize(out,count);
      Print("in ",count-1," write ",value);
      out[count-1]=value;
     }
  }
  
int tokenCounter(string source,string token)
  {
   int counter=0,pos=0;

   while(token!="") 
     {
      pos=StringFind(source,token);
      if(pos>EMPTY) 
        {
         counter++;
         source=StringSubstr(source,pos+StringLen(token));
           } else {
         break;
        }
     }
   return(counter);
  }
 
string strToken(string source,string token,int count)
  {
   string sub="";
   int i=0,pos=EMPTY;

   if(token=="" || count<1) 
     {
      return(sub);
     }
   pos=StringFind(source,token);
   if(pos==EMPTY) 
     {
      if(count==1) 
        {
         return(source);
           } else {
         return(sub);
        }
     }
   for(i=1; i<=count; i++) 
     {
      pos=StringFind(source,token);
      if(pos == EMPTY) 
        {
         if(i< count) 
           {
            sub="";
              } else {
            sub=source;
           }
         break;
           } else {
         if(pos==0) 
           {
            sub="";
              } else {
            sub=StringSubstr(source,0,pos); 
           }
        }
      source=StringSubstr(source,pos+1);
     }
   return(sub);
  }
 

1. создайте скрипт, вставьте, скомпилируйте (F7), киньте на график и увидите неправильный результат

2. запустите дебагер (F5) - о фантастика правильный результат

3. опять скомпилируйте (F7) и киньте на график - WTF опять неправильный результат

или это только у меня одного так работает ?

 
keekkenen:


да, ни хрена не работает (извините) ! сами попробуйте вот код

1. создайте скрипт, вставьте, скомпилируйте (F7), киньте на график и увидите неправильный результат

2. запустите дебагер (F5) - о фантастика правильный результат

3. опять скомпилируйте (F7) и киньте на график - WTF опять неправильный результат

или это только у меня одного так работает ?

Стало интересно: добавил другие варианты решений. Результат в логе:

2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: 2:     | 3 | 3
2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: 1:     | 2 | 2
2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: 0:    3 | 1 | 1
2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: in 2 write 
2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: in 1 write 
2014.02.12 23:38:17.219 TestArrayString AUDCAD.GI,M30: in 0 write 3

Ищите причины в своём коде. :)

Файлы:
 
TarasBY:

Стало интересно: добавил другие варианты решений. Результат в логе:

Ищите причины в своём коде. :)

где ошибка я нашел, но почему ?!

до вызова строки tokenCount= tokenCounter(source,token); в функции stringToStringSplit()

в source значение "1,2,3", а после source = "3", господа разработчики почему так и почему в дебагере код корректно работает, а после компиляции хрень происходит?

void stringToStringSplit(string &out[],string source,string token)
  {
   int count=0,tokenCount=0;
   string value="";

   ArrayResize(out,0);
   if(source == "") return;    
   tokenCount= tokenCounter(source,token);    
   while(count<=tokenCount) 
     {
      count++;
      value=strToken(source,token,count);
      ArrayResize(out,count);
      Print("in ",count-1," write ",value);
      out[count-1]=value;
     }
  }
int tokenCounter(string source,string token)
  {
   int counter=0,pos=0;

   while(token!="") 
     {
      pos=StringFind(source,token);
      if(pos>EMPTY) 
        {
         counter++;
         source=StringSubstr(source,pos+StringLen(token));
           } else {
         break;
        }
     }
   return(counter);
  }
 

Обнаружил при сортировке 2-ух мерного массива встроенными средствами ArraySort():

void OnStart()
{
    int    lia_Ar[5][2];
    string ls_txt = "", ls_delimiter = "";
//---
    lia_Ar[0][0] = 52;
    lia_Ar[1][0] = 16;
    lia_Ar[2][0] = 2;
    lia_Ar[3][0] = 5;
    lia_Ar[4][0] = 100;
    lia_Ar[0][1] = 0;
    lia_Ar[1][1] = 1;
    lia_Ar[2][1] = 2;
    lia_Ar[3][1] = 3;
    lia_Ar[4][1] = 4;
    ArraySort (lia_Ar);
    for (int i = 0; i < ArrayRange (lia_Ar, 0); i++)
    {
        ls_txt = StringConcatenate ("Ar[", i, "]: ");
        for (int j = 0; j < ArrayRange (lia_Ar, 1); j++)
        {
            if (j == 0) ls_delimiter = "/"; else ls_delimiter = "";
            ls_txt = StringConcatenate (ls_txt, lia_Ar[i][j], ls_delimiter);
        }
        Print (ls_txt);       
    }
//---
}

Лог:

2014.02.13 00:27:13.448 TestArraySort AUDCAD.GI,M30: Ar[4]: 100/4
2014.02.13 00:27:13.448 TestArraySort AUDCAD.GI,M30: Ar[3]: 52/0
2014.02.13 00:27:13.448 TestArraySort AUDCAD.GI,M30: Ar[2]: 16/1
2014.02.13 00:27:13.448 TestArraySort AUDCAD.GI,M30: Ar[1]: 5/3
2014.02.13 00:27:13.448 TestArraySort AUDCAD.GI,M30: Ar[0]: 2/2

Всё корректно сортируется! В справке ничего по этому вопросу не нашёл. Это и раньше так было или только в новом языке добавили???

 

Верно ли я понимаю:

раньше FileIsEnding(-1)=1,

сейчас FileIsEnding(-1)=0

С чем это связано?

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

Сначала удаляем все в папке \history\downloads\. Потом делаем так:

Жмём кнопку ОК. Потом сразу обязательно перезагружаем терминал.

Потом жмем на чарте F2

Открываем нужную пару, дважды клацаем по минуткам. Даже если минутки "синие" при открытии окна, все равно для верности дважды клацаем. После жмем кнопку "Загрузить" и получаем чего хотели.

В этом терминале у меня активирован Альпари-Демо. На всё-провсё понадобилось 2-3 минуты. Котировки с 1999 г.

 

Блин не все так просто.

1. В настройках поставил все 999999999999, после того как все почистил и перезагрузил в настройках значения поменялись автоматом


2. Защел в history там небыло download,были другие файлы все удалил


3. Далее зашел в архив, нажал 2 раза на валютную пару появилось 2048 баров,


потом нажимаю загрузить

соглашаюсь и ... вот такая вот фигня

И не знаю как решить этот вопрос, тех поддержка не помогает, и при чем такая ситуация не только у roboforex у альпари так же. build 604 альпари и робофорекс build 600

 
А что это за символы такие "EURUSD.m"?
Причина обращения: