叫CHATGPT4帮忙编写MT4语句(验用)
本帖最后由 小飞鱼20123 于 2024-8-20 22:23 编辑前几天发贴提问如何获取开单时间,如果一个小时后不赢利的话,就平仓。今天叫CHATGPT4写了一段,还没试用,先分享给大家,如果可行的话,倒不失为学习的一种新的选择。
我的问题:请帮我编写一段 Mt4的代码。获取开单的时间。并且在开单之后一个小时如果利润是0或者为负数。则关闭所有的单。
CHATGPT4的回答:
下面是一个示例的MetaTrader 4 (MT4) 代码,
它会在开单后一个小时检查所有订单的利润,如果利润为0或负数,则关闭所有订单。
这个代码可以放在一个自定义的EA(专家顾问)中。
```
mql4
//+------------------------------------------------------------------+
//| CloseOrders.mq4 |
//| Copyright 2023, Your Name |
//| https://www.example.com |
//+------------------------------------------------------------------+
input double TakeProfit = 10; // 设置止盈点数
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 遍历所有订单
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
// 选择订单
if (OrderSelect(i, SELECT_BY_POS))
{
// 检查订单类型(买入或卖出)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
// 获取开单时间
datetime openTime = OrderOpenTime();
// 获取当前时间
datetime currentTime = TimeCurrent();
// 检查是否已开单一个小时
if (currentTime - openTime >= 3600) // 3600秒 = 1小时
{
// 获取订单的当前利润
double profit = OrderProfit();
// 检查利润是否为0或负数
if (profit <= 0)
// 关闭订单
if (OrderType() == OP_BUY)
{
// 平仓买单
OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrRed);
}
else if (OrderType() == OP_SELL)
{
// 平仓卖单
OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrRed);
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
### 代码说明:
1. **OnInit()** 和 **OnDeinit()**:初始化和去初始化函数,分别在EA启动和停止时调用。
2. **OnTick()**:每当市场有新报价时调用的函数。
3. **OrdersTotal()**:获取当前账户中的订单总数。
4. **OrderSelect()**:选择指定位置的订单。
5. **OrderOpenTime()**:获取订单的开单时间。
6. **TimeCurrent()**:获取当前时间。
7. **OrderProfit()**:获取订单的当前利润。
8. **OrderClose()**:平仓订单,使用当前的买入或卖出价格。
### 使用方法:
1. 将代码复制到MetaEditor中并保存为 `.mq4` 文件。
2. 编译代码并在MT4中将其加载为专家顾问(EA)。
3. 将EA应用于一个图表上,它将自动监控并处理订单。
请根据实际需求调整代码中的参数和逻辑。
今天的日元就是出信号后如果按信号做没有赢利,下一小时我开了空,结果赚钱了,不过是手动的,还没编到EA中去。
页:
[1]