用GPT3.5版本编写的代码,经过反复给GPT纠错,终于修改好没有报错了,但是运行并不能达到逻辑要求。
一运行就把所有订单平仓了,懂得大佬帮忙看看哪里出了问题。
基于MQL4语言写个风控程序
1、整体止损金额N全平
2、整体止盈金额N全平
3、多单止盈金额N全平
4、多单止损金额N全平
5、空单止盈金额N全平
6、空单止损金额N全平
GPT3.5编写的代码
//+------------------------------------------------------------------+
//| 输入参数设置 |
//+------------------------------------------------------------------+
input double MaxTotalLoss = -100.0; // 整体止损金额
input double MaxTotalProfit = 200.0; // 整体止盈金额
input double MaxLongProfit = 50.0; // 多单止盈金额
input double MaxLongLoss = -30.0; // 多单止损金额
input double MaxShortProfit = 40.0; // 空单止盈金额
input double MaxShortLoss = -20.0; // 空单止损金额
//+------------------------------------------------------------------+
//| 主函数 |
//+------------------------------------------------------------------+
int start()
{
// 获取账户净值
double accountEquity = AccountEquity();
// 计算多单和空单的盈利和亏损
double longProfit = 0.0;
double shortProfit = 0.0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
longProfit += OrderProfit();
}
else if (OrderType() == OP_SELL)
{
shortProfit += OrderProfit();
}
}
}
// 检查整体止损和止盈
if (accountEquity <= MaxTotalLoss || accountEquity >= MaxTotalProfit)
{
// 平仓所有仓位
CloseAllPositions();
}
// 检查多单止盈和止损
if (longProfit >= MaxLongProfit || longProfit <= MaxLongLoss)
{
// 平多单仓位
CloseLongPositions();
}
// 检查空单止盈和止损
if (shortProfit >= MaxShortProfit || shortProfit <= MaxShortLoss)
{
// 平空单仓位
CloseShortPositions();
}
return(0);
}
// 平仓所有多单仓位
void CloseLongPositions()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
double closePrice = MarketInfo(OrderSymbol(), MODE_BID);
int closeResult = OrderClose(OrderTicket(), OrderLots(), closePrice, 2, clrNONE);
// 检查平仓结果
if (closeResult > 0)
{
Print("平仓成功,订单号:", closeResult);
}
else
{
Print("平仓失败,错误代码:", GetLastError());
}
}
}
}
}
// 平仓所有空单仓位
void CloseShortPositions()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELL)
{
double closePrice = MarketInfo(OrderSymbol(), MODE_ASK);
int closeResult = OrderClose(OrderTicket(), OrderLots(), closePrice, 2, clrNONE);
// 检查平仓结果
if (closeResult > 0)
{
Print("平仓成功,订单号:", closeResult);
}
else
{
Print("平仓失败,错误代码:", GetLastError());
}
}
}
}
}
// 平仓所有仓位
void CloseAllPositions()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
double closePrice = MarketInfo(OrderSymbol(), OrderType() == OP_BUY ? MODE_BID : MODE_ASK);
int closeResult = OrderClose(OrderTicket(), OrderLots(), closePrice, 2, clrNONE);
// 检查平仓结果
if (closeResult > 0)
{
Print("平仓成功,订单号:", closeResult);
}
else
{
Print("平仓失败,错误代码:", GetLastError());
}
}
}
}
|