Ваши вопросы по языку MQL4

griz

Активный участник
Здравствуйте. Как найти время бара, стоящего перед первым видимым баром, на расстоянии 60px?
 

AlexeNP

Гуру форума
Здравствуйте. Как найти время бара, стоящего перед первым видимым баром, на расстоянии 60px?
bool ChartXYToTimePrice(
long chart_id, // идентификатор графика
int x, // координата X на графике
int y, // координата Y на графике
int& sub_window, // номер подокна
datetime& time, // время на графике
double& price // цена на графике
);
 
  • Like
Реакции: griz

nurfirdaus

Новичок форума
Я попытался "flushfilebuffers" файла, но безуспешно. Кто-нибудь может помочь или привести пример ?.

Код:
Expand Collapse Copy
//+------------------------------------------------------------------+
//|                                                        Flush.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <WinUser32.mqh>
#include <stdlib.mqh>
//---
#import "kernel32.dll"
int CreateFileW(string, uint, int, int, int, int, int);
int FlushFileBuffers(int);
int GetFileSize(int, int);
int ReadFile(int, uchar&[], int, int&[], int);
int CloseHandle(int);
#import
//---
int BytesToRead = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart() {
//---                           
   string path = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\" + "Logs\\" + "20201101.log";
   
   UpdateLogs(path);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void UpdateLogs(string Filename) {
//---
   int Handle = CreateFileW(Filename, 0x80000000 /*GENERIC_READ*/, 3 /*SHARE READ|WRITE*/, 0, 3 /*OPEN_EXISTING*/, 0, 0);

   if (Handle == -1) {
      //error opening file
      Print("Error opening log file, error code: ", IntegerToString(GetLastError()));
      return;
   } else {
      int LogFileSize = GetFileSize(Handle, 0);
      BytesToRead = LogFileSize;
      if(LogFileSize <= 0) {
         //File empty
         Print("Log file is empty ");
         return;
      } else {
         uchar buffer[];
         ArrayResize(buffer, BytesToRead);
         int read[1];
         ReadFile(Handle, buffer, BytesToRead, read, 0);
         if (read[0] == BytesToRead) {
            if(FlushFileBuffers(Handle))
               Print("File is flushed ");
            else
               Print("File is failed to flush");
         } else {
            //Read failed
            Print("Error reading log file ");
            return;
         }
      }
      CloseHandle(Handle);
   }
}
// Result Failed to Flush
//+------------------------------------------------------------------+
 

Leva20

Новичок форума
Добрый день.
При написании робота столкнулся с такими проблемами:
1) Робот все расчетные данные берет с Д1, а сделки открывает и проводит по ним анализ на М30.
Как зафиксировать тайфрем Д1, а желательно и Д1 и М30, что бы не важно на какой график кинул, он работал по алгоритму?
2) С помощью функции Comment() вывожу на экран все расчетные данные, но также использую описание объектов и то и другое отображается с лева.
Как можно отобразить Comment() в правом верхнем углу, или может есть какая то другая функция?
3) Хочу подсветить свечи на основе которых робот планирует открыть сделку. Подписать их текстом или поставить циферку или хотя бы поставить заначек.
С помощью какой функций это можно реализовать?

Заранее спасибо.
 

AlexeNP

Гуру форума
Добрый день.
При написании робота столкнулся с такими проблемами:
1) Робот все расчетные данные берет с Д1, а сделки открывает и проводит по ним анализ на М30.
Как зафиксировать тайфрем Д1, а желательно и Д1 и М30, что бы не важно на какой график кинул, он работал по алгоритму?
2) С помощью функции Comment() вывожу на экран все расчетные данные, но также использую описание объектов и то и другое отображается с лева.
Как можно отобразить Comment() в правом верхнем углу, или может есть какая то другая функция?
3) Хочу подсветить свечи на основе которых робот планирует открыть сделку. Подписать их текстом или поставить циферку или хотя бы поставить заначек.
С помощью какой функций это можно реализовать?

Заранее спасибо.
1. при расчетах используй данные зависящие от таймфрейма - iBars, iOpen и тд.
2. текстовые метки
3. графические объекты
 

Leva20

Новичок форума
Добрый вечер.
Как заставить красный значек отображаться верх ногами, что бы он не был на свече?
Развернуть его на 180 градусов с помощью функции не вышло
ObjectSetDouble(PERIOD_CURRENT,name,OBJPROP_ANGLE,180);

2020-11-20_222811.png
 

AlexeNP

Гуру форума
Добрый вечер.
Как заставить красный значек отображаться верх ногами, что бы он не был на свече?
Развернуть его на 180 градусов с помощью функции не вышло
ObjectSetDouble(PERIOD_CURRENT,name,OBJPROP_ANGLE,180);

Посмотреть вложение 408110
bool ObjectSetDouble(
long chart_id, // идентификатор графика chart_id=0 на текущем графике
string object_name, // имя объекта
OBJPROP_ANGLE, // меняем угол
double prop_value // желаемое значение угла
);
 

Leva20

Новичок форума
bool ObjectSetDouble(
long chart_id, // идентификатор графика chart_id=0 на текущем графике
string object_name, // имя объекта
OBJPROP_ANGLE, // меняем угол
double prop_value // желаемое значение угла
);
Эта функция почему то не работает.
Вот как я ее ввел:
ObjectSetDouble(0,name,OBJPROP_ANGLE,180);

Также почему то не работает и эта:
ObjectsDeleteAll(0,OBJ_ARROW_STOP);

Удаляет только в таком формате, а мне это не совсем подходит:
ObjectsDeleteAll();
 

AlexeNP

Гуру форума
Эта функция почему то не работает.
Вот как я ее ввел:
ObjectSetDouble(0,name,OBJPROP_ANGLE,180);

Также почему то не работает и эта:
ObjectsDeleteAll(0,OBJ_ARROW_STOP);

Удаляет только в таком формате, а мне это не совсем подходит:
ObjectsDeleteAll();
читаем хелп
int ObjectsDeleteAll(
long chart_id, // идентификатор графика
int sub_window=EMPTY, // индекс окна
int object_type=EMPTY // тип объекта для удаления
);

продолжаем читать:

Замечания: нумерация подокон графика (если на графике есть подокна с индикаторами) начинается с 1

пробуем так
ObjectsDeleteAll(0,-1,OBJ_ARROW_STOP);
 

Leva20

Новичок форума
читаем хелп
int ObjectsDeleteAll(
long chart_id, // идентификатор графика
int sub_window=EMPTY, // индекс окна
int object_type=EMPTY // тип объекта для удаления
);

продолжаем читать:

Замечания: нумерация подокон графика (если на графике есть подокна с индикаторами) начинается с 1

пробуем так
ObjectsDeleteAll(0,-1,OBJ_ARROW_STOP);
Все равно не работает.
Подокон нет.
Вставил в код вашу.
 

Leva20

Новичок форума
Добрый вечер

Не подскажете функцию которая бы отображала значки, на всех барах которые были записаны в массив.
Как на скрине ниже.
2020-11-23_183226.png
 

AlexeyVik

Программист mql4 mql5
Пользовательский массив и массив индикатора это разные вещи. Индикаторный буфер может быть только в индикаторе. Следовательно делай пользовательский индикатор.
 
Верх