文章 "在 MQL4 和 MQL5 框架下开发 OpenAI 的 ChatGPT 功能" - 页 2

 
Valeriy Yastremskiy #:
作为经验交流的一部分),由于 µl 不太了解 gpt 语言,这项任务变得更加复杂。有时要想代码不出错是相当困难的。
ChatGPT 3.5 在 MQL4/5 中可以正常写入,所以不要有任何想法。这篇文章的价值应该在于提示和展示ChatGPT 的开发过程,但根本 没有 这样的内容。只有现成的生成代码,没有人对这些免费代码感兴趣。这篇文章的价值为零,作者得了个 "D",我不知道这种低劣的作品是如何被允许发表的。
 
Alexey Volchanskiy #:
ChatGPT 3.5 可以在 MQL4/5 中正常写入,别这么油嘴滑舌。这篇文章的价值应该在于提示和展示使用ChatGPT 的开发过程,但根本 没有 这样的东西。只有现成的生成代码,没有人对这些免费代码感兴趣。这篇文章的价值为零,作者得了个 "D",我不知道这种低劣的作品是如何被允许发表的

对于那些在坦克里的人,让我再告诉你们一次,这篇文章的重点不是给你们提示,而是灌输你们应该自己制作提示的想法。你们只是不知道,如果我把我所做的一切都倒掉,这篇文章会变成什么样。有大量不必要的垃圾只会让人感到困惑。材料应该简单明了。而且你参加考试也不是为了给我打 D。小心点

 
Alexey Volchanskiy #:
ChatGPT 3.5 可以在 MQL4/5 中正常写入,别这么油嘴滑舌。这篇文章的价值应该在于提示和展示使用ChatGPT 的开发过程,但根本 没有 这样的东西。只有现成的生成代码,没有人对这些免费代码感兴趣。这篇文章的价值为零,作者得了个 "D",我不知道这篇黑客作品是如何被允许发表的

我没能得到下市场订单的代码。如果你能答应。每次都退票。

 
Valeriy Yastremskiy #:

我无法获得下市场订单的代码。如果可以,请告诉我。每次都退票。

在 MQL5 中编写一个程序来打开市场订单。该函数应接受以下输入数据:


1) 手数

2) 以开盘价和收盘价之间的价差为模块的止盈

3) 以开盘价和收盘价之间的价差为模块的止损

4) 订单方向 (bool bDirection) true - 买入;false - 卖出

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 在那里 ))))。

 
感谢 Eugene 的文章!我也用CHATGPT 和其他人工智能 做过实验 。是的,有时它能写出很好的文本,甚至能写出任何风格的诗歌,但在编程方面,它犯了很多错误,没有检查和编辑,你什么也做不了。
我同意你关于 Promtov 的看法,即使你给人工智能提出同样的要求,它也会生成不同的文本或代码。这就是为什么你必须像个孩子一样与它交流,并向它详细解释你想从它那里得到什么。唯一的问题是,你作为一名程序员,拥有丰富的经验和阅历,再加上接受过数学教育,因此具有适当的思维方式,可以更清晰、更简短地为人工智能制定任务,就像 ToR 一样。许多交易员无法为编写一个简单的智能 交易系统制定基本的职权范围。当我开始在 MQL4 中编写第一个智能交易系统时,我想起了我们在大学里学习 Fortran 时的课程,即首先绘制未来程序的算法,然后根据算法编写代码,这对我帮助很大。此外,作为未来的无线电电子系统设计工程师,我们还学习过编写 TOR,这也很有用。
 
Evgeniy Ilin #:

您最好考虑一下起始 EMA 计算与后续 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) - 应该是这样的。总的来说,您已经明白了...我已经修正了大部分错误。如果这是我的 ts 的代码,我就会看到这一切。有缺陷...如果你不知道自己在做什么,那就没有用。你的方向是对的他经常出错我写那篇文章是有原因的我可以做一个超级提示器,它不会出错,而且能完美地提供一切,但它毫无用处,因为它只是在炫耀。在真实的现场条件下,我们会问一些简单的人性化问题,在最好的情况下,这些问题会更具体,但实践证明,这并不能大大减少后期处理。