小飞鱼20123 发表于 2024-8-20 22:13:05

叫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应用于一个图表上,它将自动监控并处理订单。

请根据实际需求调整代码中的参数和逻辑。



小飞鱼20123 发表于 2024-8-20 22:26:08

今天的日元就是出信号后如果按信号做没有赢利,下一小时我开了空,结果赚钱了,不过是手动的,还没编到EA中去。
页: [1]
查看完整版本: 叫CHATGPT4帮忙编写MT4语句(验用)