我创建了此代码来在条件为真时打开交易并在条件为真时关闭它们 但他只开仓,不平仓。
这是我的代码
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);
}
}
}
}
//}
}
我编写此代码是为了在满足条件时进行交易。如果满足买入条件,则建立买入交易,如果满足卖出条件,则建立卖出交易。此外,当满足特定条件时,还有关闭交易的条件。当总利润达到一定金额时,还有一个关闭交易的条件。但是,我的问题是,此代码仅打开交易,并且在满足条件时不会关闭交易。
在您的
CloseAllOrdersIfProfitReached
中,您正在迭代未平仓交易并在 MarketInfo(OrderSymbol(), MODE_BID)
关闭它们,这是与买入相关的。
最好在方向中立的
OrderClosePrice()
关闭它们。