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

 
Artyom Trishkin #:

Подскажите, кто знает: при компиляции файла был глюк дисковой системы. Редактор завис. Файл, изменения в нём, скорее всего сохранены не были. Но он занимает на диске 97 Кб. В редакторе всё пусто. Может где-то что-то повреждено, но можно восстановить?

Кто сталкивался, что делать нужно?

При открытии файла в Notepad++ вот такая картинка:

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

P.S.

А что с файлом исходника?

Вряд ли редактор мог подменить исходник бинарником. Если исходник исчез, тогда да, можно попробовать программы восстановления данных (если на его место не было ни чего записано)
 
Vitaly Murlenko #:

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

P.S.

А что с файлом исходника?

Вряд ли редактор мог подменить исходник бинарником. Если исходник исчез, тогда да, можно попробовать программы восстановления данных (если на его место не было ни чего записано)
Так и произошло. Не смог восстановить. Файл кода так же убился при компиляции и вылет в синий экран. Баки нужны. Грусть что их нет. Обычно по ходу кода запоминаю типа разные версии) проект для разовых проб это слишком)
 
Здравствуйте, подскажите пожалуйста как найти того, у кого можно купить робота от Money cat, или может кто знает как выйти на самого разработчика?
 
LVBcom #:
Здравствуйте, подскажите пожалуйста как найти того, у кого можно купить робота от Money cat, или может кто знает как выйти на самого разработчика?

Может логин написан не верно? Смотрите какие подсказки выдаёт поисковик этого сайта:


 
Подскажите, что означает "islowerpeak" в MQL 4  и MQL 5
 
Igor Nagorniuk #:
Подскажите, что означает "islowerpeak" в MQL 4  и MQL 5
А где Вы это увидели?
 
Igor Nagorniuk #:
islowerpeak

Судя с названия, это кастом-функция минимального экстремума, скорее всего связана с индикатором Zig-Zag

 

Всем добрый день. После проведения теста в тестере стратегий мт4, во вкладке результаты, можно нажать на строку с номером открытия, закрытия ордера и если тест был с визуализацией, то график перематается на место где было открытие ордера. Так можно более быстро посмотреть где открывались ордера и провести визуальный анализ, но окно тестера стратегий перекрывает большую часть графика цены. И приходиться открывать, закрывать тестер стратегий, а это не удобно. Поэтому я хотел написать скрипт, который бы на графике цены отрисовывал мне 2 кнопки- пред сделка и след сделка. И по нажатию на след сделка мне бы эмитировалось нажатие на открытие следующего ордера в окне результаты, тестера стратегий, а при нажатии на пред сделка, перематывался бы график к предыдущей сделки. Скрипт написал вот таким макаром.

//+------------------------------------------------------------------+
//| Скрипт для навигации по сделкам в тестере стратегий             |
//+------------------------------------------------------------------+
#property strict

#include <stdlib.mqh> // Библиотека для удобства работы с объектами

int currentTradeIndex = 0; // Индекс текущей сделки
datetime tradeTimes[];      // Массив времени открытия сделок

//+------------------------------------------------------------------+
//| Инициализация скрипта                                           |
//+------------------------------------------------------------------+
void OnStart()
{
    GetTradeHistory();  // Собираем историю сделок
    CreateButtons();    // Создаем кнопки на графике
}

//+------------------------------------------------------------------+
//| Получаем историю сделок                                         |
//+------------------------------------------------------------------+
void GetTradeHistory()
{
    int total = OrdersHistoryTotal();
    ArrayResize(tradeTimes, total);

    for (int i = 0; i < total; i++)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
            tradeTimes[i] = OrderOpenTime();
        }
    }
}

//+------------------------------------------------------------------+
//| Создание кнопок                                                 |
//+------------------------------------------------------------------+
void CreateButtons()
{
    CreateButton("PrevTrade", "⬅ Пред. сделка", 10, 30);
    CreateButton("NextTrade", "След. сделка ➡", 150, 30);
}

// Функция для создания кнопки
void CreateButton(string name, string text, int x, int y)
{
    ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
    ObjectSetInteger(0, name, OBJPROP_XSIZE, 120);
    ObjectSetInteger(0, name, OBJPROP_YSIZE, 25);
    ObjectSetInteger(0, name, OBJPROP_CORNER, 0);
    ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
    ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
    ObjectSetString(0, name, OBJPROP_TEXT, text);
    ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 10);
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);
}

//+------------------------------------------------------------------+
//| Обработка нажатий кнопок                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if (id == CHARTEVENT_OBJECT_CLICK)
    {
        if (sparam == "PrevTrade") MoveToTrade(-1);
        if (sparam == "NextTrade") MoveToTrade(1);
    }
}

//+------------------------------------------------------------------+
//| Перемещение графика к сделке                                    |
//+------------------------------------------------------------------+
void MoveToTrade(int step)
{
    int totalTrades = ArraySize(tradeTimes);
    if (totalTrades == 0) return;

    currentTradeIndex += step;

    if (currentTradeIndex < 0) currentTradeIndex = 0;
    if (currentTradeIndex >= totalTrades) currentTradeIndex = totalTrades - 1;

    datetime moveToTime = tradeTimes[currentTradeIndex];

    // Преобразуем время в индекс бара
    int barIndex = iBarShift(Symbol(), 0, moveToTime, false);

    // Проверяем, что бар найден
    if (barIndex != -1)
    {
        // Перемещаем график на найденный бар
        ChartSetInteger(0, CHART_FIRST_VISIBLE_BAR, barIndex);

        // Добавляем команду для обновления графика
        RefreshRates(); // Обновляем данные на графике
    }
    else
    {
        Print("Ошибка: не найден бар для времени ", TimeToString(moveToTime));
    }
}

Кнопки появились, но при нажатии на них график не перематывается к открытию ордеров. Потом попробовал искать место на которое надо перемотать график по объектам на графике цены, написал вот так.

//+------------------------------------------------------------------+
//| Скрипт для навигации по объектам ордеров                        |
//+------------------------------------------------------------------+
#property strict

int currentOrderIndex = 0;  // Текущий индекс
string orderObjects[];      // Список объектов

//+------------------------------------------------------------------+
//| Функция запуска скрипта                                          |
//+------------------------------------------------------------------+
void OnStart()
{
    GetOrderObjects();  // Сбор списка объектов
    CreateButtons();    // Создание кнопок
}

//+------------------------------------------------------------------+
//| Получение списка объектов с ордерами                            |
//+------------------------------------------------------------------+
void GetOrderObjects()
{
    int totalObjects = ObjectsTotal();
    ArrayResize(orderObjects, 0);

    for (int i = 0; i < totalObjects; i++)
    {
        string name = ObjectName(i);
        string description = ObjectDescription(name);

        if (StringFind(name, "#") == 0 && (StringFind(name, "BUY") != -1 || StringFind(name, "SELL") != -1) && description == "супер ордер")
        {
            int newSize = ArraySize(orderObjects) + 1;
            ArrayResize(orderObjects, newSize);
            orderObjects[newSize - 1] = name;
        }
    }
}

//+------------------------------------------------------------------+
//| Создание кнопок                                                  |
//+------------------------------------------------------------------+
void CreateButtons()
{
    CreateButton("PrevTrade", "⬅ Пред. ордер", 10, 30);
    CreateButton("NextTrade", "След. ордер ➡", 150, 30);
}

// Функция создания кнопки
void CreateButton(string name, string text, int x, int y)
{
    ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
    ObjectSetInteger(0, name, OBJPROP_XSIZE, 120);
    ObjectSetInteger(0, name, OBJPROP_YSIZE, 25);
    ObjectSetInteger(0, name, OBJPROP_CORNER, 0);
    ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
    ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
    ObjectSetString(0, name, OBJPROP_TEXT, text);
    ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 10);
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);
}

//+------------------------------------------------------------------+
//| Обработка нажатий кнопок                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if (id == CHARTEVENT_OBJECT_CLICK)
    {
        if (sparam == "PrevTrade") MoveToOrder(-1);
        if (sparam == "NextTrade") MoveToOrder(1);
    }
}

//+------------------------------------------------------------------+
//| Перемещение графика к ордеру                                    |
//+------------------------------------------------------------------+
void MoveToOrder(int step)
{
    int totalOrders = ArraySize(orderObjects);
    if (totalOrders == 0) return;

    currentOrderIndex += step;
    if (currentOrderIndex < 0) currentOrderIndex = 0;
    if (currentOrderIndex >= totalOrders) currentOrderIndex = totalOrders - 1;

    string orderName = orderObjects[currentOrderIndex];

    // Получаем координаты объекта
    double price = ObjectGetDouble(0, orderName, OBJPROP_PRICE1);
    datetime time = ObjectGetInteger(0, orderName, OBJPROP_TIME1);

    // Получаем индекс бара
    int barIndex = iBarShift(Symbol(), 0, time, false);
    if (barIndex != -1)
    {
        ChartSetInteger(0, CHART_FIRST_VISIBLE_BAR, barIndex);
        RefreshRates();
    }
    else
    {
        Print("Не удалось найти бар для объекта: ", orderName);
    }
}

Тут кнопки тоже появились но никуда не перемещают график при нажатии.

 Подскажите пожалуйста что я делаю не так и как эти кнопки завести чтобы нажатие по ним перекидывало к месту открытия ордера на графике?

 

Подскажите, в чём у меня косяк: 'ObjectsDeleteAll' - no one of the overloads can be applied to the function call

Вот сам код:

int OnDeinit(const int reason)
{
    ObjectsDeleteAll();
}
 
Igor Nagorniuk #:

Подскажите, в чём у меня косяк: 'ObjectsDeleteAll' - no one of the overloads can be applied to the function call

Вот сам код:

Поставите курсор внутрь круглых скобок и нажмите ctrl+shift+пробел. Всë и увидите. Ну, или нажмите F1 на функции.