bool ChartXYToTimePrice(Здравствуйте. Как найти время бара, стоящего перед первым видимым баром, на расстоянии 60px?
//+------------------------------------------------------------------+
//| 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
//+------------------------------------------------------------------+
1. при расчетах используй данные зависящие от таймфрейма - iBars, iOpen и тд.Добрый день.
При написании робота столкнулся с такими проблемами:
1) Робот все расчетные данные берет с Д1, а сделки открывает и проводит по ним анализ на М30.
Как зафиксировать тайфрем Д1, а желательно и Д1 и М30, что бы не важно на какой график кинул, он работал по алгоритму?
2) С помощью функции Comment() вывожу на экран все расчетные данные, но также использую описание объектов и то и другое отображается с лева.
Как можно отобразить Comment() в правом верхнем углу, или может есть какая то другая функция?
3) Хочу подсветить свечи на основе которых робот планирует открыть сделку. Подписать их текстом или поставить циферку или хотя бы поставить заначек.
С помощью какой функций это можно реализовать?
Заранее спасибо.
Можно по подробней?1. при расчетах используй данные зависящие от таймфрейма - iBars, iOpen и тд.
2. текстовые метки
3. графические объекты
Спасибо.1. при расчетах используй данные зависящие от таймфрейма - iBars, iOpen и тд.
2. текстовые метки
3. графические объекты
bool ObjectSetDouble(Добрый вечер.
Как заставить красный значек отображаться верх ногами, что бы он не был на свече?
Развернуть его на 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 // желаемое значение угла
);
читаем хелпЭта функция почему то не работает.
Вот как я ее ввел:
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);
а OBJ_ARROW_STOP есть на графике?Все равно не работает.
Подокон нет.
Вставил в код вашу.
Да, есть.а OBJ_ARROW_STOP есть на графике?
Записал.Так запиши их в массив индикаторного буфера.
Можете показать пример?Пользовательский массив и массив индикатора это разные вещи. Индикаторный буфер может быть только в индикаторе. Следовательно делай пользовательский индикатор.
Можете показать пример?