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

 

Добрый день. Не получается считать данные из файла и тут же записать обратно. Если раскомментировать кусок кода с циклами и MathRand(), то в файл как положено пишется каша. Но если строчки оставить закомментированными (уже при наличии каши в файле), то при следующем включении-выключении эксперта в файл записываются нули. Массивы для записи-чтения double ROM1[128][128] и double ROM2[3][128]. Больше массивы нигде в коде не изменяются, только читаются. Кусок кода:

int init()                                     
   {
   Print ("Сработала ф-ия init"); // Сообщение
   Handle=FileOpen("Neuro",FILE_BIN|FILE_READ|FILE_WRITE);// Открытие файла на чтение и запись   
   FileSeek(Handle, 0, SEEK_SET); //указатель на начало файла
   FileReadArray(Handle, ROM1);
   FileSeek(Handle, 131073, SEEK_SET); //указатель на конец первого массива
   FileReadArray(Handle, ROM2);

/*
   for(i=0; i<128; i++) //заполнение памяти первого слоя кашей
      {
      for(k=0; k<128; k++)
         {
         ROM1[i][k] = (MathRand()-16383)/3200;
         }
      }
   for(i=0; i<3; i++) //заполнение памяти второго слоя кашей
      {
      for(k=0; k<128; k++)
         {
         ROM1[i][k] = (MathRand()-16383)/3200;
         }
      }
*/         
   return(0);                                       
   }   
//--------------------------------------------------------------------
int deinit()                                   
   {
   FileSeek(Handle, 0, SEEK_SET);
   FileWriteArray(Handle, ROM1);
   FileSeek(Handle, 131073, SEEK_SET);
   FileWriteArray(Handle, ROM2);
   FileClose(Handle);
   return(0);                                     
   }

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

Например:
В рынке есть ордер с магиком 565 открытый в 13:00 
в сове прописано условие , что для открытия ордера должен быть
 в рынке ордер с магиком 565, как в советнике отсрочить поиск сигнала на одну
 свечу от открытого ордера чтобы поиск начинался с 14:00.

Сейчас наблюдаю ситуацию что в 13:00 открылся ордер  с магиком 565
а сова открывает свой ордер в 13:00:02. получается в рынке практически 

два одинаковых ордера.


Спасибо.

 
var58:
Здравствуйте,подскажите пожалуйста как можно прописать в коде советника 
условие начала поиска сигнала

Например:
В рынке есть ордер с магиком 565 открытый в 13:00 
в сове прописано условие , что для открытия ордера должен быть
 в рынке ордер с магиком 565, как в советнике отсрочить поиск сигнала на одну
 свечу от открытого ордера чтобы поиск начинался с 14:00.

Сейчас наблюдаю ситуацию что в 13:00 открылся ордер  с магиком 565
а сова открывает свой ордер в 13:00:02. получается в рынке практически 

два одинаковых ордера.


Спасибо.

Искать сигнал можете когда угодно, а вот разрешать открывать позицию нужно по времени.

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

 
Artyom Trishkin:

Искать сигнал можете когда угодно, а вот разрешать открывать позицию нужно по времени.

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


Спасибо большое. А в коде это как выглядит?
 
Добрый день. Не получается считать данные из файла и тут же записать обратно. Если раскомментировать кусок кода с циклами и MathRand(), то в файл как положено пишется каша. Но если строчки оставить закомментированными (уже при наличии каши в файле), то при следующем включении-выключении эксперта в файл записываются нули. Массивы для записи-чтения double ROM1[128][128] и double ROM2[3][128]. Больше массивы нигде в коде не изменяются, только читаются. Кусок кода:

Немного разобрался. Двумерный массив double функция ни в какую читать не хочет, хотя записывает нормально.

Сделал чтение поэлементно в цикле. Может кому пригодится.

{
FileSeek(Handle, n,  SEEK_SET); //изменение позиции файлового курсора        
Neuron[k][i].rom[l] = FileReadDouble(Handle, DOUBLE_VALUE); //загрузка из файла
n=n+8;
}
 
var58:

Спасибо большое. А в коде это как выглядит?

А тут же не бесплатное написание кодов, а помощь тем, кто сам пытается их написать, да что-то не получается.

Покажите что у вас не получается в вашем коде - поможем.

 
Tamul:

Немного разобрался. Двумерный массив double функция ни в какую читать не хочет, хотя записывает нормально.

Сделал чтение поэлементно в цикле. Может кому пригодится.

{
FileSeek(Handle, n,  SEEK_SET); //изменение позиции файлового курсора        
Neuron[k][i].rom[l] = FileReadDouble(Handle, DOUBLE_VALUE); //загрузка из файла
n=n+8;
}

Зачем-же такие костыли предлагать людям только потому, что сам не справился с задачей???

Чтобы считать из файла двухмерный массив под него должен быть приготовлен именно двухмерный массив.

Если я правильно помню тот пример кода, я не видел там закрытия файла после записи. Файл создаётся пустой, пишутся в него данные, но этот заполненный файл находится в оперативной памяти, а читать данные из файла можно уже только с диска. Вот и получается, что вроде-бы файл записан, а физически его на диске нету... Чтобы данные скинуть на диск надо либо закрыть его либо принудительно сохранить его на диск.

 
Artyom Trishkin:

А тут же не бесплатное написание кодов, а помощь тем, кто сам пытается их написать, да что-то не получается.

Покажите что у вас не получается в вашем коде - поможем.


спасибо
 

Здравствуйте! Напишите пожалуйста простой(очень простой) пример на языке mql4. Я прям совсем новичок.

1)открыть отложенный ордер когда он достиг какого либо значения(т.е. если цена равна 0.7777, то открыть отложенный ордер)

2)закрыть ордер(рыночный) если он достиг какого либо значения (т.е. если цена равно 0.6666, то закрыть ордер)

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

Пытался читать учебник с этого сайта, но толка нет(может я такой тугой), а элементарных примеров почему то нет в интернете. Заранее спасибо

 
maxon777:

Здравствуйте! Напишите пожалуйста простой(очень простой) пример на языке mql4. Я прям совсем новичок.

1)открыть отложенный ордер когда он достиг какого либо значения(т.е. если цена равна 0.7777, то открыть отложенный ордер)

2)закрыть ордер(рыночный) если он достиг какого либо значения (т.е. если цена равно 0.6666, то закрыть ордер)

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

Пытался читать учебник с этого сайта, но толка нет(может я такой тугой), а элементарных примеров почему то нет в интернете. Заранее спасибо


Примеров полно в CodeBase  ищите советники на отложенных ордерах и смотрите как написан код.
Причина обращения: