Яндекс GPT и программирование на MQL4 - страница 9

 
Sergey Golubev #:
Пожалуйста, не запрашивайте помощь по коду, сгенерированному ChatGPT (или другим искусственным интеллектом). Он генерирует ужасный невалидный код, часто смешивая MQL4 и MQL5. Для таких запросов используйте раздел «Фриланс» — https://www.mql5.com/en/job.

Ну вот вы внесли ясность , и над этим можно работать попросив ии полностью написать код на mql5 . 

Или же вы хотите сказать другими словами не надо продвигать эту тему да бы не отбирать хлеб у разработчиков .

 
__zeus__ #:
другими словами не надо продвигать эту тему да бы не отбирать хлеб у разработчиков

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

Вы потратили несколько секунд чтобы на-кнопать промпт, ИИ ещё за несколько секунд накидал строчек. 
Теперь живому человеку надо заморочиться и найти там ошибку?
 
__zeus__ #:

Ну вот вы внесли ясность , и над этим можно работать попросив ии полностью написать код на mql5 . 

Или же вы хотите сказать другими словами не надо продвигать эту тему да бы не отбирать хлеб у разработчиков .

Вот ваш пост -

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

...

__zeus__, 2025.01.31 09:02

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


#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1

// *** Input *** //
input int InpStep = 2; // Шаг для отображения уровней
input color InpColor = C'235,235,235'; // Цвет фона (не используется)
input color InpUpColor = DeepSkyBlue; // Цвет для положительной дельты
input color InpDownColor = OrangeRed; // Цвет для отрицательной дельты
input bool UseTradeTicks = true; // Использовать COPY_TICK_TRADE (true) или COPY_TICK_ALL (false)
input datetime InpInitialVLineTime = D'2025.02.09 00:00'; // Начальное время для вертикальной линии
input int MaxHistogramWidth = 150000; // Максимальная ширина гистограммы в пикселях

// *** Globals *** //
double iClose[];
int iFontSize = 8;
int iBarsCount = 1;
long iMaxVolume = 1;
double iChartOffset = 0;
string iFontName = "Trebuchet MS";
datetime VLineTime; // Глобальная переменная для времени вертикальной линии

// *** Functions *** //
void OnInit()
{
    VLineTime = InpInitialVLineTime; // Инициализируем время вертикальной линии
    IndicatorSetString(INDICATOR_SHORTNAME, "MarketProfile with Delta");
    IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
    HideLines();
    
    // Создаем вертикальную линию
    CreateVerticalLine();
}

void OnDeinit(const int reason)
{
    HideLines();
    ObjectsDeleteAll(0, 0, OBJ_VLINE); // Удаляем вертикальную линию
}

int OnCalculate(
    const int bars,
    const int counted,
    const datetime &time[],
    const double &open[],
    const double &high[],
    const double &low[],
    const double &close[],
    const long &tickVolume[],
    const long &volume[],
    const int &spread[])
{
    HideLines();
    iBarsCount = bars;
    iChartOffset = ChartGetDouble(0, CHART_SHIFT_SIZE) * ChartGetInteger(0, CHART_WIDTH_IN_BARS) / 120;
    ArrayCopy(iClose, close);

    // Получаем все тиковые данные с начала истории
    MqlTick ticks[];
    int copied = 0;
    if (UseTradeTicks)
    {
        copied = CopyTicks(_Symbol, ticks, COPY_TICKS_TRADE, 0, LONG_MAX);
    }
    else
    {
        copied = CopyTicks(_Symbol, ticks, COPY_TICKS_ALL, 0, LONG_MAX);
    }

    if (copied <= 0)
        return 0;

    // Рассчитываем объем и дельту на основе всех тиков
    CalculateVolumeAndDelta(ticks);

    return(bars);
}

void CalculateVolumeAndDelta(const MqlTick &ticks[])
{
    double priceMin = ChartGetDouble(0, CHART_PRICE_MIN);
    double priceMax = ChartGetDouble(0, CHART_PRICE_MAX);
    double priceCurrent = priceMin;

    long deltas[], volumes[];
    int count = int((priceMax - priceMin) / _Point);

    ArrayResize(deltas, count);
    ArrayInitialize(deltas, 0);
    ArrayResize(volumes, count);
    ArrayInitialize(volumes, 0);

    iMaxVolume = 1;
    long maxDelta = 0; // Переменная для хранения максимальной дельты
    double maxDeltaPrice = priceMin; // Цена, на которой достигается максимальная дельта

    // Анализируем все тики с начала истории
    for (int i = 0; i < ArraySize(ticks); i++)
    {
        double price = ticks[i].last;
        long vol = ticks[i].volume;
        int index = int((price - priceMin) / _Point);

        if (index >= 0 && index < count)
        {
            volumes[index] += vol;

            // Определяем направление тика (покупка или продажа)
            if (ticks[i].flags & TICK_FLAG_BUY)
            {
                deltas[index] += vol; // Покупка
            }
            else if (ticks[i].flags & TICK_FLAG_SELL)
            {
                deltas[index] -= vol; // Продажа
            }

            iMaxVolume = MathMax(iMaxVolume, volumes[index]);

            // Обновляем максимальную дельту
            if (MathAbs(deltas[index]) > MathAbs(maxDelta))
            {
                maxDelta = deltas[index];
                maxDeltaPrice = price;
            }
        }
    }

    priceCurrent = priceMin;

    // Используем глобальное время вертикальной линии
    datetime vlineTime = VLineTime;

    for (int i = 0; i < count; i++)
    {
        if (volumes[i] > 0)
        {
            // Нормализуем объем относительно максимального объема
            double normalizedVolume = (double)volumes[i] / iMaxVolume;
            // Рассчитываем ширину гистограммы на основе нормализованного объема
            double offset = normalizedVolume * MaxHistogramWidth * _Point; // Ширина гистограммы
            datetime startX = vlineTime; // Начинаем от вертикальной линии
            datetime endX = startX - datetime(offset * PeriodSeconds()); // Смещаем влево

            ShowVolume(StringFormat("DeltaMarketProfile%i", i), priceCurrent, startX, endX, deltas[i]);
        }

        priceCurrent += _Point;
    }

    // Отображаем максимальную дельту на графике
    if (maxDelta != 0) // Проверяем, что дельта не равна нулю
    {
        ShowMaxDelta(maxDelta, maxDeltaPrice);
    }
}

void ShowVolume(string name, double price, datetime time1, datetime time2, long delta)
{
    long fontSize = iFontSize;
    double scale = GetScale(InpStep - 1) * _Point;

    // Rectangle
    if (ObjectFind(0, name) < 0)
    {
        ObjectCreate(0, name, OBJ_RECTANGLE, 0, time1, price, time2, price - scale);
    }

    // Убираем заливку фона (делаем её прозрачной)
    ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrNONE); // Прозрачный фон
    ObjectSetInteger(0, name, OBJPROP_COLOR, delta > 0 ? InpUpColor : InpDownColor);
    ObjectSetInteger(0, name, OBJPROP_FILL, false); // Отключаем заливку
    ObjectSetInteger(0, name, OBJPROP_BACK, true);
}

void CreateVerticalLine()
{
    // Создаем вертикальную линию
    if (ObjectFind(0, "VLine") < 0)
    {
        ObjectCreate(0, "VLine", OBJ_VLINE, 0, VLineTime, 0);
    }

    // Настраиваем стиль линии
    ObjectSetInteger(0, "VLine", OBJPROP_COLOR, clrRed);
    ObjectSetInteger(0, "VLine", OBJPROP_STYLE, STYLE_SOLID);
    ObjectSetInteger(0, "VLine", OBJPROP_WIDTH, 2);
    ObjectSetInteger(0, "VLine", OBJPROP_SELECTABLE, true); // Разрешаем выделение и перемещение
    ObjectSetInteger(0, "VLine", OBJPROP_SELECTED, false); // По умолчанию не выделена
}

void HideLines()
{
    ObjectsDeleteAll(0, 0, OBJ_TEXT);
    ObjectsDeleteAll(0, 0, OBJ_RECTANGLE);
}

double GetScale(double factor)
{
    double min = ChartGetDouble(0, CHART_PRICE_MIN);
    double max = ChartGetDouble(0, CHART_PRICE_MAX);

    return (((max - min) / _Point) / MathMax(ChartGetInteger(0, CHART_VISIBLE_BARS), 1)) / GetZoom() * factor;
}

long GetZoom()
{
    return MathMax(ChartGetInteger(0, CHART_SCALE), 1);
}

void ShowMaxDelta(long maxDelta, double price)
{
    string name = "MaxDeltaLabel"; // Имя объекта
    int xOffset = 10; // Смещение по оси X (в пикселях)
    int yOffset = 0; // Смещение по оси Y (в пикселях)
    color textColor = (maxDelta > 0) ? InpUpColor : InpDownColor; // Цвет текста в зависимости от дельты

    // Удаляем старый объект, если он существует
    if (ObjectFind(0, name) >= 0)
    {
        ObjectDelete(0, name);
    }

    // Создаем текстовый объект
    ObjectCreate(0, name, OBJ_TEXT, 0, 0, price);
    ObjectSetString(0, name, OBJPROP_TEXT, "Max Delta: " + IntegerToString(maxDelta));
    ObjectSetInteger(0, name, OBJPROP_COLOR, textColor); // Цвет текста
    ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrYellow); // Временный цвет фона для отладки
    ObjectSetInteger(0, name, OBJPROP_FONTSIZE, iFontSize); // Размер шрифта
    ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_LOWER); // Позиция в левом нижнем углу
    ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_LEFT); // Текст привязан к левому краю
    ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xOffset); // Смещение по X
    ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yOffset); // Смещение по Y

    // Отладочное сообщение
    Print("Max Delta: ", maxDelta, " at price: ", price);
}

void OnChartEvent(
    const int id,
    const long &lparam,
    const double &dparam,
    const string &sparam)
{
    if (id == CHARTEVENT_CHART_CHANGE)
    {
        // Обновляем отображение при изменении графика
        ChartRedraw();
    }
    else if (id == CHARTEVENT_OBJECT_DRAG) // Обработка перемещения объекта
    {
        if (sparam == "VLine") // Если перемещается вертикальная линия
        {
            // Получаем новое время линии
            datetime newTime = (datetime)ObjectGetInteger(0, "VLine", OBJPROP_TIME, 0);
            VLineTime = newTime; // Обновляем время линии
            ChartRedraw(); // Перерисовываем график
        }
    }
}

 

кстати...

то что GPT несёт откровенную чушь в коде,

говорит не о том что ИИ говно, а о том что в языке и платформе много чего неочевидного и не соотв. общим подходам.

ИИ он же не думает и не изобретает - просто выдаёт общепринятое по взвеси тегов. И немного гаусса.

 
Maxim Kuznetsov #:

кстати...

то что GPT несёт откровенную чушь в коде,

говорит не о том что ИИ говно, а о том что в языке и платформе много чего неочевидного и не соотв. общим подходам.

ИИ он же не думает и не изобретает - просто выдаёт общепринятое по взвеси тегов. И немного гаусса.

На мой взгляд у вас странное суждение. Скажите, вот этот искусственный идиот учитывает перезагрузку терминала при открытых позициях\ордерах? Что он может написать кроме тестерного, да и далеко не грааля…

 
Alexey Viktorov #:

На мой взгляд у вас странное суждение. Скажите, вот этот искусственный идиот учитывает перезагрузку терминала при открытых позициях\ордерах? Что он может написать кроме тестерного, да и далеко не грааля…

ИИ ничего не учитывает...

у него только сэмплирование и выборка. "Вот просто в интернетах на ваш конкретный запрос были вот такие вот части"

 
Maxim Kuznetsov #:

ИИ ничего не учитывает...

у него только сэмплирование и выборка. "Вот просто в интернетах на ваш конкретный запрос были вот такие вот части"

Просто многие начитались рекламу инфо-цыган, которые рассказывают волшебные истории типа: 5 студентов дали задания GPT4 написать им дипломы и пошли на ночь бухать в кабак. Утром вернулись с девками, дипломы готовы, сдали на высший бал. Далее приглашение на ну совсем-пресовсем «бесплатный вебинар», где они узнают, что просто не умеют писать промпты. Но за ничтожные 150000 р. они могут поступить в  «Университет искусственного интеллекта», где за 6 месяцев научатся этому ремеслу для интеллектуалов! Занятие ведет мужик с безумно выпученными глазами и рваной майке, сидя на раздолбанном табурете в загаженной кухне. Дальше сам знаешь, сыпятся в чат восторги а-ля «уря-я-я, я сразу оплатил!!!» 

А теперь серьезно. Я юзаю https://heybro.ai/web/ , версия GPT-4o mini там бесплатна и вполне устраивает, как поисковик лучше Гугла и Яндекса. Просто надо трезво понимать, что никакого ИИ нет, есть Экспертная Система, которые трудились еще во времена СССР! Вот вчера мне надо было попробовать варианты с вейвлетами, а их типов довольно много. Я не стал просить мне написать код, я спросил о фришных библиотеках по DSP, он выдал солидный список на гитхабе и других ресурсах. Далее я попросил отобрать те, где есть что-то по вейвлетам. Бинго! 

Эй, Бро!
  • heybro.ai
— твой персональный помощник на базе нейросети Чат GPT 4, который поможет тебе в учебе и работе. Попробуй бесплатно!
 
Alexey Volchanskiy #:

Просто многие начитались рекламу инфо-цыган, которые рассказывают волшебные истории типа: 5 студентов дали задания GPT4 написать им дипломы и пошли на ночь бухать в кабак. Утром вернулись с девками, дипломы готовы, сдали на высший бал. Далее приглашение на ну совсем-пресовсем «бесплатный вебинар», где они узнают, что просто не умеют писать промпты. Но за ничтожные 150000 р. они могут поступить в  «Университет искусственного интеллекта», где за 6 месяцев научатся этому ремеслу для интеллектуалов! Занятие ведет мужик с безумно выпученными глазами и рваной майке, сидя на раздолбанном табурете в загаженной кухне. Дальше сам знаешь, сыпятся в чат восторги а-ля «уря-я-я, я сразу оплатил!!!» 

А теперь серьезно. Я юзаю https://heybro.ai/web/ , версия GPT-4o mini там бесплатна и вполне устраивает, как поисковик лучше Гугла и Яндекса. Просто надо трезво понимать, что никакого ИИ нет, есть Экспертная Система, которые трудились еще во времена СССР! Вот вчера мне надо было попробовать варианты с вейвлетами, а их типов довольно много. Я не стал просить мне написать код, я спросил о фришных библиотеках по DSP, он выдал солидный список на гитхабе и других ресурсах. Далее я попросил отобрать те, где есть что-то по вейвлетам. Бинго! 

Когда ваши посты стал пропускать как спам стал торговать   спокойнее и в плюса! )