Обсуждение статьи "Возможности СhatGPT от OpenAI в контексте разработки на языках MQL4 и MQL5" - страница 2

 
Valeriy Yastremskiy #:
Хорошо бы) в рамках обмена опытом) задача же усложнена тем, что мкл языки гпт не очень хорошо знает. Иногда достаточно сложно получить код без ошибок.
ChatGPT 3.5 нормально пишет на MQL4/5, не надо ляля. Ценность статьи должна быть именно в промптах и показе процесса разработки с помощью ChatGPT, этого нет совсем. Одни готовые сгенеренные коды, которые даром никому не интересны. Ценность статьи ноль, автору двойка и я удивляюсь, как эту халтуру пропустили в публикацию.  
 
Alexey Volchanskiy #:
ChatGPT 3.5 нормально пишет на MQL4/5, не надо ляля. Ценность статьи должна быть именно в промптах и показе процесса разработки с помощью ChatGPT, этого нет совсем. Одни готовые сгенеренные коды, которые даром никому не интересны. Ценность статьи ноль, автору двойка и я удивляюсь, как эту халтуру пропустили в публикацию.  

Для тех кто в танке, давайте еще раз скажу, суть статьи не дать вам промпты а привить мысль о том что вы должны сами их вырабатывать. Вы просто не понимаете что со статьей будет если я вывалю все что я делал. Там тонны ненужного хлама которые только запутают людей. Материал должен быть простым и понятным. И да вы не экзамен у меня принимаете чтобы двойки ставить. Поаккуратнее будьте.

 
Alexey Volchanskiy #:
ChatGPT 3.5 нормально пишет на MQL4/5, не надо ляля. Ценность статьи должна быть именно в промптах и показе процесса разработки с помощью ChatGPT, этого нет совсем. Одни готовые сгенеренные коды, которые даром никому не интересны. Ценность статьи ноль, автору двойка и я удивляюсь, как эту халтуру пропустили в публикацию.  

У меня не получилось получить код выставления рыночного ордера. Если можно промт. Каждый раз возвращал тикет.

 
Valeriy Yastremskiy #:

У меня не получилось получить код выставления рыночного ордера. Если можно промт. Каждый раз возвращал тикет.

напиши процедуру на MQL5, для открытия рыночного ордера. Функция должна принимать следующие входные данные:


1) Лот

2) Тейк профит в виде модуля разницы цен между ценой открытия и закрытия

3) Стоп лосс  в виде модуля разницы цен между ценой открытия и закрытия

4) Направление ордера (bool bDirection) true - BUY ; false - SELL

5) Проскальзывание в пунктах ( это максимально возможное отклонение от цены открытия в пунктах)

6) Магик номер ордера


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


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


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


Нельзя использовать никакие библиотеки, а лишь возможности языка MQL5

// Функция для получения корректированного объема
double CorrectedVolume(double volume)
{
   double minVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double maxVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double VolStep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   
   // Если объем меньше минимального, устанавливаем минимальный
   if(volume < minVol)
       return minVol;
   // Если объем больше максимального, устанавливаем максимальный
   else if(volume > maxVol)
       return maxVol;
   
   // Приводим объем к кратному шагу объема
   return (double)((int)(volume / VolStep)) * VolStep; 
}

// Основная функция выставления ордера
bool OpenOrder(double volume, double stoploss, double takeprofit, bool bDirection, int slip, int magic)
{
   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   // Определяем цену открытия ордера 
   double open_price = bDirection ? last_tick.ask : last_tick.bid;
   // Определяем стоимость пункта 
   double point = SymbolInfoPoint(_Symbol);
   
   // Корректировка SL и TP в зависимости от направления
   double corrected_sl = bDirection ? open_price - stoploss * point : open_price + stoploss * point;
   double corrected_tp = bDirection ? open_price + takeprofit * point : open_price - takeprofit * point;
   
   // Если SL или TP = 0, то ордер открывается без SL или TP
   if (stoploss == 0) corrected_sl = 0; 
   if (takeprofit == 0) corrected_tp = 0;
   
   // Используемый тип сделки
   ENUM_ORDER_TYPE order_type = bDirection ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   
   // Структура для заполнения параметров заявки
   MqlTradeRequest request;
   request.type = order_type;
   request.symbol = _Symbol;
   request.volume = CorrectedVolume(volume);
   request.price = open_price;
   request.sl = corrected_sl;
   request.tp = corrected_tp;
   request.deviation = slip;
   request.magic = magic;
   request.type_filling = ORDER_FILLING_FOK;
   request.type_time = ORDER_TIME_DAY;
   
   MqlTradeResult result;
   return OrderSend(request,result); // Отправляем ордер на биржу
}

Получилось не сразу, раза с пятого, промпт пришлось подробнее делать. Заметьте заняло это минут 5 всего. И промпты никакие я не искал а просто написал что хочу и как. Промпт это вообще не вопрос... 

 
Это все бессмысленно при текущих умениях GPT, потому что "заказчик" должен находить ошибки в сгенерированном исходнике, то есть фактически знать правильный ответ или написать большую его часть. Текущие GPT - это болтуны.
 
Stanislav Korotky #:
Это все бессмысленно при текущих умениях GPT, потому что "заказчик" должен находить ошибки в сгенерированном исходнике, то есть фактически знать правильный ответ или написать большую его часть. Текущие GPT - это болтуны.

Ну фактически вы то же самое что и я говорите, действительно без знания языка и корректировки того что он выдает это бесполезно, я пытался это в статье объяснить, но видно пока не очень до людей доходит). Они же хотят дай мне промпт и все и я в шоколаде )) А то что думать надо нее ты что, GPT есть же )))

 
Спасибо Евгений за статью! Я тоже экспериментировал с СhatGPT и с другими ИИ. Тексты, да, иной раз придумывает хорошие, даже стихи может писать в любом стиле, но в программировании делает много ошибок, без проверки и правки никак нельзя.
Согласен с вами насчет промтов, даже когда ИИ даешь один и тот же запрос, он генерирует разный текст или код. Поэтому, приходится, общаться с ним, как с ребёнком и обстоятельно объяснять ему, что ты от него хочешь получить. Единственно, что вы как программист с опытом и стажем, плюс с математическим образованием, а значит, с соответствующим стилем мышления, можете более четко и коротко сформулировать задачу для ИИ, типа ТЗ. Многие трейдеры не могут составить элементарное ТЗ для написания простейшего советника. Я когда начинал писать первые советники на MQL4, вспомнил, как в универе нас учили, еще для языка Фортран, сначала нарисовать алгоритм будущей программы и по ней уже писать код, очень помогло. Также, как будущих инженеров-конструкторов по радиоэлектронным системам, нас учили составлять ТЗ, тоже пригодилось.
 
Evgeniy Ilin #:

Вы лучше подумайте тогда о том что стартовый расчет EMA не равноценен к последующим, так как бары копить надо до посинения, а торговать надо здесь и сейчас. Насчет циклов, по барам все работает, не заметил ощутимых замедлений. Можно доделать вычисления так как вы хотите именно для этого индикатора, только много ли оно вам даст ) я просто знаю что совсем ничего )

В этом и задача писателя EMA - чтобы все его последующие расчеты были равнозначный к предыдущим. До посинение копить бары не надо, а, как уже писал выше, нужно только раз в 10-20 больше баров, чем период.

Про циклы очень убедительно... Конечно, совершенно нет разницы между циклом в 10 баров и циклом в 100 баров... Особенно если учесть существование быстрых алгоритмом для расчета средних.

 
Evgeniy Ilin #:

Сразу и не заметил)

   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   
   // Определяем стоимость пункта 
   double point = SymbolInfoPoint(_Symbol); // видимо по аналогии придумано)))
   
   
 
Valeriy Yastremskiy #:

Сразу и не заметил)

SymbolInfoDouble(_Symbol,SYMBOL_POINT)  - так должно было быть. В общем вы поняли... Это я еще большую часть ошибок исправил. Я бы увидел это все если бы это был код для моих тс. Есть изъяны... и какой угодно промпт сделай если не понимаешь что делаешь, то это все бесполезно. Вот вы уже на верном пути. Он часто ошибается.. Не просто так я именно такую статью написал. Я бы мог сделать супер промпт, он бы не ошибся и выдал все идеально но толку от него не будет так как это все показуха. В реальных полевых условиях мы задаем простые человеческие вопросы, которые в лучшем случае могут быть более конкретными, но как показывает практика не сильно это сокращает пост обработку.