AI - mql4 如果0柱收盘价就平所有仓,如果0柱开盘价就计算仓量和建仓,仓量为前一历史平仓仓量加平台最小手数,如果仓量大于平台最大手数,则仓量等于平台最大仓量,1柱是阳柱就建多仓,1柱是阴柱就建空仓。
void OnTick()
{
//获取当前柱的开盘价和收盘价
double openPrice = iOpen(Symbol(), PERIOD_CURRENT, 0);
double closePrice = iClose(Symbol(), PERIOD_CURRENT, 0);
// 前一柱的收盘价
double prevClosePrice = iClose(Symbol(), PERIOD_CURRENT, 1);
// 如果0柱收盘价就平所有仓
if(closePrice!= 0)
{
CloseAllPositions();
}
//如果0柱开盘价就计算仓量和建仓
if(openPrice!= 0)
{
double lotSize = prevCloseLotSize() + MarketInfo(Symbol(), MODE_MINLOT); // 前一历史平仓仓量加平台最小手数
if(lotSize > MarketInfo(Symbol(), MODE_MAXLOT))
{
lotSize = MarketInfo(Symbol(), MODE_MAXLOT); // 如果仓量大于平台最大手数,则仓量等于平台最大仓量
}
//1柱是阳柱就建多仓
if(iClose(Symbol(), PERIOD_CURRENT, 1) > iOpen(Symbol(), PERIOD_CURRENT, 1))
{
OpenLongPosition(lotSize);
}
//1柱是阴柱就建空仓
else if(iClose(Symbol(), PERIOD_CURRENT, 1) < iOpen(Symbol(), PERIOD_CURRENT, 1))
{
OpenShortPosition(lotSize);
}
}
}
//平掉所有持仓的函数
void CloseAllPositions()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderSymbol() == Symbol())
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrNONE);
}
}
}
}
//获取前一历史平仓仓量的函数
double prevCloseLotSize()
{
double lotSize = 0;
for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY || OrderType() == OP_SELL)
{
lotSize = OrderLots();
break;
}
}
}
return lotSize;
}
// 开多仓的函数
void OpenLongPosition(double lotSize)
{
OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, 0, 0, "Long Position", MagicNumber, 0, clrNONE);
}
//开空仓的函数
void OpenShortPosition(double lotSize)
{
OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, 0, 0, "Short Position", MagicNumber, 0, clrNONE);
}
- help with my code i want it to run once per bar/candle but keeps placing multiple trades at the same time and i dont have a clue why? can anyone help me out
- Help
- Please, help me solve EA problem

【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
- 2023.06.13
- Sky All
- www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能...