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

 
Коллеги добрый день! Нужна формула расчета профита позиций на хэджевом счете - зная среднюю цену их входа т.е. по сути цену безубытка однонаправленных позиций, плюс некое значение в пп - типа пипсы жадности - как узнать профит однонаправленных поз зная их обьем общий и цену символа где смотреть этот профит, если их все по этой цене закрыть.
По цене безубытка + пипсы жадности умноженные на пойнт. Если их все если закрыть по этой цене - то какой профит возможен. Будет.
 
Roman Shiredchenko #:
Коллеги добрый день! Нужна формула расчета профита позиций на хэджевом счете - зная среднюю цену их входа т.е. по сути цену безубытка однонаправленных позиций, плюс некое значение в пп - типа пипсы жадности - как узнать профит однонаправленных поз зная их обьем общий и цену символа где смотреть этот профит, если их все по этой цене закрыть.
По цене безубытка + пипсы жадности умноженные на пойнт. Если их все если закрыть по этой цене - то какой профит возможен. Будет.
Общий лот * Стоимость пункта * Кол-во пунктов
 
Valeriy Yastremskiy #:

Нет, открытие и чтение это разные вещи. Файл в винде может быть открыт только одной программой. Режим для пользователя открыть открытый кем то файл только для чтения это уже копия файла. Ошибку возвращает 5004. Не давно парился, в индикаторах вызванный из советника по айКьюстом файлы открываются, а вот ОнДеИнит индикатора в тестере не срабатывает и выгрузка индикатора в ОнДеИнит советника тоже.

Флаг для чтения не помог)))

void OnStart()
  {
//   int file = FileOpen("testfile.txt", FILE_READ|FILE_WRITE|FILE_TXT|FILE_SHARE_READ);
   int file = FileOpen("testfile.txt", FILE_READ|FILE_TXT|FILE_SHARE_READ);
   if(file!=INVALID_HANDLE)
     {
      PrintFormat("file handle=%d",file);
      ResetLastError();
      int file2 = FileOpen("testfile.txt", FILE_READ|FILE_TXT|FILE_SHARE_READ);
      if(file2!=INVALID_HANDLE)
        {
         PrintFormat("file2 handle=%d",file2);
         FileClose(file2);
        }
      else
        {
         PrintFormat("Can't open file! %d",GetLastError());
        }
      FileClose(file);
     }
  }

Получаем:

2023.10.17 10:29:01.440 testscript (SILV-12.23,D1)      file handle=1
2023.10.17 10:29:01.440 testscript (SILV-12.23,D1)      file2 handle=2

Если первый раз открывать по (до)записи (закомментированная строка), получаем:

2023.10.17 10:29:32.319 testscript (SILV-12.23,D1)      file handle=1
2023.10.17 10:29:32.319 testscript (SILV-12.23,D1)      Can't open file! 5004

И по поводу "одной программы" - легко смотрю логи своих роботов, пока они открываются/дописываются/закрываются самими роботами.

 
Tretyakov Rostyslav #:
Общий лот * Стоимость пункта * Кол-во пунктов
спс. Проверю.
 
JRandomTrader #:

Получаем:

Если первый раз открывать по (до)записи (закомментированная строка), получаем:

И по поводу "одной программы" - легко смотрю логи своих роботов, пока они открываются/дописываются/закрываются самими роботами.

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

К тому же ситуация часто бывает, тест закончился, файл остался открытым, новый тест не смог открыть файл. 

Блокнот винды кстати позволяет открывать открытые другими прогами файлы в текущем состоянии и обновлять состояние.   

 

Всем доброго времени суток! Вопрос по тестеру mql4, по включаемым файлам.
У меня есть включаемый файл, в который записан массив со  значениями чисел.

int STOP[31][2] = 
{
1       ,       0       ,
1       ,       16      ,
1       ,       19      ,
1       ,       23      ,
2       ,       0       ,
2       ,       4       ,
2       ,       5       ,
2       ,       6       ,
2       ,       7       ,
3       ,       0       ,
3       ,       1       ,
3       ,       4       ,
3       ,       5       ,
3       ,       7       ,
3       ,       8       ,
3       ,       23      ,
4       ,       0       ,

Программа позволяет использовать этот файл с записанными в него значениями массива в нескольких различных Советниках.

Я написал код в котором  читаю из включаемого файла, и  меняю данные записанные во включаемый файл.

#include <STOP.mqh>
void OnTick()
{
if (STOP[0][0]==1){STOP[0][1]=10;Print("--------ПРОВЕРКА---------------DayOfWeek()--- ",DayOfWeek()," BAY[0][0]  ",STOP[0][1]);}
if (STOP[0][1]==10)STOP[0][0]=10;
}

В данном Советнике эти данные меняются успешно и Советник прекращает исполнять первую строку. То есть, значение элемента массива  из включаемого файла  было   STOP[0][1]=0; , а после изменения - стало  STOP[0][1]=10; значение  STOP[0][0] было =1, стало = 10

ВОПРОС 1

Почему после изменения этих значений в программе  в самом массиве во включаемом файле значение этих  элементов этого массива в этом включаемом файле остались прежними, то есть не изменились? . Это значит что новые значения этих элементов массива этого включаемого файла    я не смогу использовать в другом Советнике, поскольку в массиве включаемого файла измененные значения элементов массива  не сохранились.

int STOP[31][2] = 
{
1       ,       0       ,
1       ,       16      ,
1       ,       19      ,
1       ,       23      ,

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

ВОПРОС 2

В вышеуказанный включаемый файл я записывал данные массива путем копирования из таблицы ЕКСЕЛЬ. А при помощи какого кода можно заполнять массив из включаемого файла прямо из программы? Я пробовал делать это при помощи цикла... но безуспешно

#include <STOP.mqh>
void OnTick()
{
for(int a=0; a<=31; a++){STOP[a][0]=10;}
}

Всем спасибо за помощь.


 
ANDREY #:

Всем доброго времени суток! Вопрос по тестеру mql4, по включаемым файлам.
У меня есть включаемый файл, в который записан массив со  значениями чисел.

Программа позволяет использовать этот файл с записанными в него значениями массива в нескольких различных Советниках.

Я написал код в котором  читаю из включаемого файла, и  меняю данные записанные во включаемый файл.

В данном Советнике эти данные меняются успешно и Советник прекращает исполнять первую строку. То есть, значение элемента массива  из включаемого файла  было   STOP[0][1]=0; , а после изменения - стало  STOP[0][1]=10; значение  STOP[0][0] было =1, стало = 10

ВОПРОС 1

Почему после изменения этих значений в программе  в самом массиве во включаемом файле значение этих  элементов этого массива в этом включаемом файле остались прежними, то есть не изменились? . Это значит что новые значения этих элементов массива этого включаемого файла    я не смогу использовать в другом Советнике, поскольку в массиве включаемого файла измененные значения элементов массива  не сохранились.

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

ВОПРОС 2

В вышеуказанный включаемый файл я записывал данные массива путем копирования из таблицы ЕКСЕЛЬ. А при помощи какого кода можно заполнять массив из включаемого файла прямо из программы? Я пробовал делать это при помощи цикла... но безуспешно

Всем спасибо за помощь.


Файл включается во время компиляции программы.

Если хотите во время исполнения - смотрите в сторону FileWriteArray()/FileReadArray() https://docs.mql4.com/ru/files , но там работа с бинарными файлами. Для парсинга текста придётся писать свой код.

 
ANDREY #:


ВОПРОС 1

Почему после изменения этих значений в программе  в самом массиве во включаемом файле значение этих  элементов этого массива в этом включаемом файле остались прежними, то есть не изменились? . Это значит что новые значения этих элементов массива этого включаемого файла    я не смогу использовать в другом Советнике, поскольку в массиве включаемого файла измененные значения элементов массива  не сохранились.

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

Всё это описано в документации. Функция FileFlush вам в помощь.

Документация по MQL5: Файловые операции / FileFlush
Документация по MQL5: Файловые операции / FileFlush
  • www.mql5.com
FileFlush - Файловые операции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:
Функция FileFlush вам в помощь.

Спасибо за ценную информацию. Если я правильно понял   FileFlush  из языка MQL5 . А я пишу код пока на  MQL4
Правильно ли я понял что для четверки функция   FileFlush   не подходит. Если не подходит , то какую альтернативу ей можете посоветовать для решения моей проблемы именно на MQL4 ? 

 И еще... правильно ли я понял, что  FileFlush  запишет данные не в включаемый файл mqh  а в файл стороннего приложения , например сvv ?

Еще раз спасибо.

Документация по MQL5: Файловые операции / FileFlush
Документация по MQL5: Файловые операции / FileFlush
  • www.mql5.com
FileFlush - Файловые операции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
JRandomTrader #:

Файл включается во время компиляции программы.

Если хотите во время исполнения - смотрите в сторону FileWriteArray()/FileReadArray() https://docs.mql4.com/ru/files , но там работа с бинарными файлами. Для парсинга текста придётся писать свой код.

Спасибо за ценную информацию

Если я Вас правильно понял, Вы предлагаете писать массив не в включаемый файл mqh , а в файл стороннего приложения типа сvv и ему подобных. Это делать я уже умею.
Но я хочу научиться записывать из программы на mql 4  данные именно в файл  mqh. Если это возможно.

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