MQL4 交易结束时的错误

问题描述 投票:0回答:1

我创建了此代码来在条件为真时打开交易并在条件为真时关闭它们 但他只开仓,不平仓。

这是我的代码



extern double lotSize = 0.02;

extern double stopLoss = 50;

extern double takeProfit = 100;

extern double targetProfit = 1;

datetime tradeOpenTime = 0;

int slippage = 3;

// دالة لفتح صفقة شراء

void OnTick() {

//void OpenBuyOrder() {

if (true) {

if (TimeCurrent() > tradeOpenTime + PeriodSeconds()) {

if (TimeMinute(TimeCurrent()) == 0) {

if ((Close[1] < Open[1]) && (Close[2] < Open[2]) && (Close[2] < Open[2])) {

OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), slippage, 0, 0, "", 0, clrNONE);

tradeOpenTime = TimeCurrent();

}

}

}

}

//}

// دالة لشروط فتح صفقة بيع

//void OpenSellOrder() {

if (true) {

if (TimeCurrent() > tradeOpenTime + PeriodSeconds()) {

if (TimeMinute(TimeCurrent()) == 0) {

if ((Close[1] > Open[1]) && (Close[2] > Open[2]) && (Close[2] > Open[2])) {

OrderSend(Symbol(), OP_SELL, lotSize, MarketInfo(Symbol(), MODE_BID), slippage, 0, 0, "", 0, clrNONE);

tradeOpenTime = TimeCurrent();

}

}

}

}

//}

// دالة لإغلاق صفقات شراء وبيع بشروط معينة

//void CloseOrdersBasedOnConditions() {

if (OrdersTotal() == 1) {

//if (true) {

if (TimeCurrent() > tradeOpenTime + PeriodSeconds()) {

if (TimeMinute(TimeCurrent()) == 0) {

if ((Close[1] > Open[1]) && (OrderType() == OP_BUY)) {

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 2, clrNONE);

} else if ((Close[1] < Open[1]) && (OrderType() == OP_SELL)) {

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 2, clrNONE);

}

}

}

}

//}

// دالة لإغلاق جميع الصفقات إذا كان الربح الإجمالي يساوي القيمة المحددة

//void CloseAllOrdersIfProfitReached() {

else if (OrdersTotal() > 1) {

//if (true) {

double totalProfit = 0;

for (int i = OrdersTotal() - 1; i >= 0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

totalProfit += OrderProfit();

}

}

if (totalProfit >= targetProfit) {

for (int x = OrdersTotal() - 1; x >= 0; x--) {

if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) {

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 2, clrNONE);

}

}

}

}

//}

}

我编写此代码是为了在满足条件时进行交易。如果满足买入条件,则建立买入交易,如果满足卖出条件,则建立卖出交易。此外,当满足特定条件时,还有关闭交易的条件。当总利润达到一定金额时,还有一个关闭交易的条件。但是,我的问题是,此代码仅打开交易,并且在满足条件时不会关闭交易。

datetime conditional-operator mql4 metatrader4 fclose
1个回答
0
投票

在您的

CloseAllOrdersIfProfitReached
中,您正在迭代未平仓交易并在
MarketInfo(OrderSymbol(), MODE_BID)
关闭它们,这是与买入相关的。

最好在方向中立的

OrderClosePrice()
关闭它们。

© www.soinside.com 2019 - 2024. All rights reserved.