//+------------------------------------------------------------------+
//| MovingTakeProfit.mq5 |
//| Copyright 2023, |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023"
#property link "https://openai.com"
#property version "1.00"
#property strict
// 输入参数
input double TakeProfitDistance = 50; // 初始止盈距离(以点为单位)
input double TakeProfitStep = 10; // 移动步长(以点为单位)
// 全局变量
double g_takeProfitLevel = 0; // 止盈水平
//+------------------------------------------------------------------+
//| 根据价格移动止盈 |
//+------------------------------------------------------------------+
void MoveTakeProfit()
{
// 获取当前价格
double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
// 如果当前价格超过止盈水平,则更新止盈水平
if(currentPrice - g_takeProfitLevel >= TakeProfitStep)
{
g_takeProfitLevel += TakeProfitStep;
// 将止盈水平设置为新值
bool result = OrderModify(OrderTicket(), OrderOpenPrice(), g_takeProfitLevel, OrderStopLoss(), 0, CLR_NONE);
if(result)
{
Print("移动止盈至:", g_takeProfitLevel);
}
else
{
Print("移动止盈失败:错误代码", GetLastError());
}
}
}
//+------------------------------------------------------------------+
//| Expert Advisor初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
// 获取当前订单的止盈水平
g_takeProfitLevel = OrderTakeProfit();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert Advisor主函数 |
//+------------------------------------------------------------------+
void OnTick()
{
// 检查是否存在订单
if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
// 检查订单类型和状态
if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber())
{
// 移动止盈
MoveTakeProfit();
}
}
}
//+------------------------------------------------------------------+
|