多空隔离,逻辑清晰多 / 空使用独立魔术号,持仓统计、加仓、平仓完全分开,不会出现订单混乱,复盘和风控一目了然。
入场有趋势过滤,非纯盲网格依靠大周期均线(默认 700 周期 SMMA)判定趋势,只顺着趋势开单加仓,相比无序逆势网格,单边行情下存活率更高。
双层止盈 + 主动减仓,利润保护完善既有整体统一止盈,又有按盈利比例分批平仓,行情小幅回撤时能提前兑现利润,降低浮亏压力。
仓位、层数双重硬限制限制最大订单数、最大持仓手数,从代码层面杜绝无限加仓、仓位爆拉,基础风控有底线。
均线参数极度极端(700 周期 MA)700 周期平滑均线反应极度滞后,只能捕捉超长期大趋势,短线震荡、波段行情完全失效;行情反转后,信号会严重滞后。
顺势网格本质缺陷:单边深度回调必深套顺着趋势一路加仓,一旦出现趋势反转 + 深度回调,同方向层层持仓会形成大额浮亏,虽有平仓规则,但无法彻底规避被套。
分批平仓规则存在逻辑漏洞平仓优先级:先平盈利单、再平亏损单,相当于 “砍盈利、留亏损”,长期运行会出现 “赚小钱、扛大亏” 的资金曲线特征。
锁仓规避不彻底仅 “有持仓则不开反向单”,但原有持仓被套后,行情快速反转依旧无法对冲风险,没有止损机制。
无硬性止损(重大短板)整段代码没有任何止损(SL)逻辑,所有订单均不带止损,遇到黑天鹅、跳空、极速反向行情,会直接产生巨额亏损。

#property copyright "狼人EA"#property link ""#include <stderror.mqh>#include <stdlib.mqh>//===================================================================================================================================================extern string EAName = "聚宝盆2.0";//===================================================================================================================================================extern int 多单魔术号 = 123456789;extern int 空单魔术号 = 987654321;extern string s1 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";extern bool 显示图表信息 = false; // 显示图表信息extern bool 显示图表时间 = false; // 图表显示时间extern bool 平均价格线 = false; // 画平均价格线extern bool 允许买卖 = false; // 允许买卖extern bool 做多 = true; // 允许购买extern bool 做空 = true; // 允许销售extern string s4 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";extern string s5 = ">>> pip值设置";extern bool CheckNewBar = true; // 在新的K线extern int 最大下数量 = 30; // 最大下数量extern double 加仓间距 = 20; // 加仓间距extern double 加仓间距指数 = 1.0; // 加仓间距指数extern int 止盈点数 = 8; // 止盈点数extern string s6 = ">>> 平仓顺序设置";extern double 止盈百分比 = 100; // 收市百分比(10…50)//收市百分比extern double 第二止盈百分比 = 60; // 关闭上一个订单的百分比extern string s8 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";extern string s9 = ">>> 计算盈利进出场顺序";extern double 初始仓位 = 0.02; // 初始批量extern double 加仓振幅 = 0.02; // 增加批次extern double 加仓后的最大仓位 = 0.5; // Maximum lot size最大批量extern bool 使用自动仓位开仓 = false; // 使用自动收取%存款extern double 自动初始仓位百分比 = 0.5; // 百分比-从资产净值计算批次大小extern double 自动加仓振幅百分比 = 0.3; // 要添加的百分比extern string s10 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";extern string s11 = ">>> Enter opposite MA";extern int iMA_Period = 700;extern int iMA_OpenDistance = 60;//===================================================================================================================================================int i = 0;int TimePrev = 0;int vDigits;int OrderSended = 0;int TotalBuyOrders = 0, TotalSellOrders = 0;int Lpos, Lpos1, Cpos;double Spread;double mPipStep;double vPoint;double PriceTarget, AveragePrice, LastBuyPrice, LastSellPrice;double BuySummLot,SellSummLot,TotalProfitBuy,TotalProfitSell;double BLot, SLot;double Cprofit, Lprofit, Lprofit1, PrcCL;string LastOrderComment = "";string BComment, SComment;//===================================================================================================================================================//===================================================================================================================================================intinit(){vPoint = Point;vDigits = Digits;TimePrev = Time[0];Spread = NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD),vDigits)*vPoint;// 5 digit brokerint DcD = 1;if((vDigits == 5)||(vDigits == 3)) DcD = 10;加仓间距 *= DcD;止盈点数 *= DcD;iMA_OpenDistance *= DcD;if(显示图表信息) DrawInfo();return(0);}//===================================================================================================================================================//===================================================================================================================================================intdeinit(){ObjectDelete("CurrTime");ObjectDelete("BuyZeroLevel");ObjectDelete("BuyAveragePrice");ObjectDelete("SellZeroLevel");ObjectDelete("SellAveragePrice");return(0);}//===================================================================================================================================================//===================================================================================================================================================intstart(){// clockif(显示图表时间) ShowCurrentTime();// infoif(显示图表信息) DrawInfo();// checking new barif(TimePrev == Time[0] && CheckNewBar == true) return(0);CheckOverlapping();//-------------------------------------------------------------------------------------------------------------------------------------------------// New buy ordersTotalBuyOrders = CountOfOrders(多单魔术号);if(TotalBuyOrders > 0 && TotalBuyOrders < 最大下数量){OrderSended = -1;LastBuyPrice = FindLastOrderParameter(多单魔术号, "price");if(LastBuyPrice - Ask >= GetPipstepForStep(TotalBuyOrders + 1) * vPoint){BLot = GetLotForStep(多单魔术号, TotalBuyOrders);BComment = StringSubstr(LastOrderComment, 0, StringFind(LastOrderComment, "|", 0)) + "|";OrderSended = SendMarketOrder(OP_BUY, BLot, 0, 0, 多单魔术号, BComment);}}//-------------------------------------------------------------------------------------------------------------------------------------------------// New sell ordersTotalSellOrders = CountOfOrders(空单魔术号);if(TotalSellOrders > 0 && TotalSellOrders < 最大下数量){OrderSended = -1;LastSellPrice = FindLastOrderParameter(空单魔术号, "price");if (Bid - LastSellPrice >= GetPipstepForStep(TotalSellOrders + 1) * vPoint){SLot = GetLotForStep(空单魔术号, TotalSellOrders);SComment = StringSubstr(LastOrderComment, 0, StringFind(LastOrderComment, "|", 0)) + "|";OrderSended = SendMarketOrder(OP_SELL, SLot, 0, 0, 空单魔术号, SComment);}}//-------------------------------------------------------------------------------------------------------------------------------------------------//Move Take ProfitCheckTakeProfit();//-------------------------------------------------------------------------------------------------------------------------------------------------//Check new bar...first orders of the series only according to new barsif (TimePrev == Time[0]) return(0);TimePrev = Time[0];int TradeSignal = GetSignal();// New buy series ...if (TotalBuyOrders == 0 && 做多 && TradeSignal > 0 && (允许买卖 == true || TotalSellOrders == 0))SendMarketOrder(OP_BUY, GetStartLot(), 止盈点数, 0, 多单魔术号, TimeCurrent() + "|");// New sell series ...if (TotalSellOrders == 0 && 做空 && TradeSignal < 0 && (允许买卖 == true || TotalBuyOrders == 0))SendMarketOrder(OP_SELL, GetStartLot(), 止盈点数, 0, 空单魔术号, TimeCurrent() + "|");return(0);}//===================================================================================================================================================//===================================================================================================================================================voidCheckTakeProfit(){//BUYTotalBuyOrders = CountOfOrders(多单魔术号);PriceTarget = 0;AveragePrice = 0;if(TotalBuyOrders > 0){PriceTarget = FindFirstOrderParameter(多单魔术号, "price") + 止盈点数*vPoint;AveragePrice = CalculateAveragePrice(多单魔术号);}for (i = 0; i < OrdersTotal(); i++)if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if (OrderSymbol() == Symbol() && OrderMagicNumber() == 多单魔术号)if (NormalizeDouble(OrderTakeProfit(),vDigits) != NormalizeDouble(PriceTarget,vDigits)) ModifyTakeProfit(PriceTarget);if(平均价格线 == true){if(AveragePrice == 0){if(ObjectFind("BuyZeroLevel") != -1) ObjectDelete("BuyZeroLevel");if(ObjectFind("BuyAveragePrice") != -1) ObjectDelete("BuyAveragePrice");}else{if(ObjectFind("BuyZeroLevel") == -1){ObjectCreate("BuyZeroLevel",OBJ_HLINE, 0, 0, AveragePrice);ObjectSet("BuyZeroLevel", OBJPROP_COLOR, Blue);ObjectSet("BuyZeroLevel", OBJPROP_STYLE, DRAW_SECTION);}else ObjectSet("BuyZeroLevel", OBJPROP_PRICE1, AveragePrice);if(ObjectFind("BuyAveragePrice") == -1){ObjectCreate("BuyAveragePrice",OBJ_HLINE, 0, 0, AveragePrice + 止盈点数*vPoint);ObjectSet("BuyAveragePrice", OBJPROP_COLOR, Blue);ObjectSet("BuyAveragePrice", OBJPROP_STYLE, DRAW_LINE);}else ObjectSet("BuyAveragePrice", OBJPROP_PRICE1, AveragePrice + 止盈点数*vPoint);}}//<_BUY//SELLPriceTarget = 0;AveragePrice = 0;TotalSellOrders = CountOfOrders(空单魔术号);if(TotalSellOrders > 0){PriceTarget = FindFirstOrderParameter(空单魔术号, "price") - 止盈点数*vPoint;AveragePrice = CalculateAveragePrice(空单魔术号);}for (i = 0; i < OrdersTotal(); i++)if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if (OrderSymbol() == Symbol() && OrderMagicNumber() == 空单魔术号)if (NormalizeDouble(OrderTakeProfit(),vDigits) != NormalizeDouble(PriceTarget,vDigits)) ModifyTakeProfit(PriceTarget);if(平均价格线 == true){if(AveragePrice == 0){if(ObjectFind("SellZeroLevel") != -1) ObjectDelete("SellZeroLevel");if(ObjectFind("SellAveragePrice") != -1) ObjectDelete("SellAveragePrice");}else{if(ObjectFind("SellZeroLevel") == -1){ObjectCreate("SellZeroLevel",OBJ_HLINE, 0, 0, AveragePrice);ObjectSet("SellZeroLevel", OBJPROP_COLOR, Red);ObjectSet("SellZeroLevel", OBJPROP_STYLE, DRAW_SECTION);}else ObjectSet("SellZeroLevel", OBJPROP_PRICE1, AveragePrice);if(ObjectFind("SellAveragePrice") == -1){ObjectCreate("SellAveragePrice",OBJ_HLINE, 0, 0, AveragePrice - 止盈点数*vPoint);ObjectSet("SellAveragePrice", OBJPROP_COLOR, Red);ObjectSet("SellAveragePrice", OBJPROP_STYLE, DRAW_LINE);}else ObjectSet("SellAveragePrice", OBJPROP_PRICE1, AveragePrice - 止盈点数*vPoint);}}//<_SELL}//===================================================================================================================================================//===================================================================================================================================================doubleCalculateAveragePrice(int mNumber){double AveragePrice = 0;double Count = 0;for (int i = 0; i < OrdersTotal(); i++)if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber)if (OrderType() == OP_BUY || OrderType() == OP_SELL){AveragePrice += OrderOpenPrice() * OrderLots();Count += OrderLots();}if(AveragePrice > 0 && Count > 0)return( NormalizeDouble(AveragePrice / Count, vDigits));elsereturn(0);}//===================================================================================================================================================//===================================================================================================================================================intGetSignal(){int Signal = 0;double iMA_Signal = iMA(Symbol(), 0, iMA_Period, 0, MODE_SMMA, PRICE_CLOSE, 0);int Ma_Bid_Diff = MathAbs(iMA_Signal - Bid)/vPoint;if(Ma_Bid_Diff > iMA_OpenDistance && Bid > iMA_Signal) Signal = -1;if(Ma_Bid_Diff > iMA_OpenDistance && Bid < iMA_Signal) Signal = 1;return(Signal);}//===================================================================================================================================================//===================================================================================================================================================intCountOfOrders(int mNumber){int count = 0;for (int i = 0; i < OrdersTotal(); i++)if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber))if ((OrderType() == OP_SELL) || (OrderType() == OP_BUY))count++;return(count);}//===================================================================================================================================================//===================================================================================================================================================doubleGetLotForStep(int mNumber, int OrdCount){double CurrLot = 0;double LastOrderLot = FindLastOrderParameter(mNumber, "lot");if(使用自动仓位开仓 == true){if(LastOrderLot != 0) CurrLot = NormalizeDouble(LastOrderLot + NormalizeDouble(AccountEquity() * 加仓振幅/10000, 2)*OrdCount, 2);}else{if(LastOrderLot != 0) CurrLot = NormalizeDouble(LastOrderLot + 加仓振幅*OrdCount, 2);}//if(CurrLot > 加仓后的最大仓位) CurrLot = 加仓后的最大仓位;if(CurrLot < 初始仓位) CurrLot = 初始仓位;if(CurrLot == 0) CurrLot = 初始仓位;return(CurrLot);}//===================================================================================================================================================//===================================================================================================================================================doubleGetStartLot(){double FirstLot = 0;if(使用自动仓位开仓 == true){FirstLot = NormalizeDouble(AccountEquity() * 自动初始仓位百分比/10000, 2);}else{FirstLot = 初始仓位;}if(FirstLot > 加仓后的最大仓位) FirstLot = 加仓后的最大仓位;if(FirstLot < 初始仓位) FirstLot = 初始仓位;return(FirstLot);}//===================================================================================================================================================//===================================================================================================================================================doubleGetPipstepForStep(int CurrStep){double CurrPipstep = NormalizeDouble(加仓间距 * MathPow(加仓间距指数,CurrStep), 0);return(CurrPipstep);}//===================================================================================================================================================//===================================================================================================================================================doubleFindFirstOrderParameter(int mNumber, string ParamName){int mOrderTicket = 0;double mOrderPrice = 0;double mOrderLot = 0;double mOrderProfit = 0;int PrevTicket = 0;int CurrTicket = 0;for (i = OrdersTotal() - 1; i >= 0; i--)if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber){CurrTicket = OrderTicket();if (CurrTicket < PrevTicket || PrevTicket == 0){PrevTicket = CurrTicket;mOrderPrice = OrderOpenPrice();mOrderTicket = OrderTicket();mOrderLot = OrderLots();mOrderProfit = OrderProfit() + OrderSwap() + OrderCommission();}}if(ParamName == "price") return(mOrderPrice);else if(ParamName == "ticket") return(mOrderTicket);else if(ParamName == "lot") return(mOrderLot);else if(ParamName == "profit") return(mOrderProfit);}//===================================================================================================================================================//===================================================================================================================================================doubleFindLastOrderParameter(int mNumber, string ParamName){int mOrderTicket = 0;double mOrderPrice = 0;double mOrderLot = 0;double mOrderProfit = 0;int PrevTicket = 0;int CurrTicket = 0;for (i = OrdersTotal() - 1; i >= 0; i--)if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber){CurrTicket = OrderTicket();if (CurrTicket > PrevTicket){PrevTicket = CurrTicket;mOrderPrice = OrderOpenPrice();mOrderTicket = OrderTicket();mOrderLot = OrderLots();mOrderProfit = OrderProfit() + OrderSwap() + OrderCommission();LastOrderComment = OrderComment();}}if(ParamName == "price") return(mOrderPrice);else if(ParamName == "ticket") return(mOrderTicket);else if(ParamName == "lot") return(mOrderLot);else if(ParamName == "profit") return(mOrderProfit);}//===================================================================================================================================================//===================================================================================================================================================doubleGetClosedProfit(int mNumber){double ClosedProfit = 0;for (i = OrdersHistoryTotal(); i > 0; i--)if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber)if(StringSubstr(LastOrderComment, 0, StringFind(LastOrderComment, "|", 0)) == StringSubstr(OrderComment(), 0, StringFind(OrderComment(), "|", 0)))ClosedProfit = ClosedProfit + OrderProfit();return(ClosedProfit);}//===================================================================================================================================================//===================================================================================================================================================boolModifyTakeProfit(double takeprofit){while(!IsStopped()){if(IsTradeContextBusy()){Sleep(3000);continue;}if(!IsTradeAllowed()){return(False);}if(!OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(takeprofit,vDigits), 0, Yellow)){int Err = GetLastError();Print("!!! Error(",Err,"): ",ErrorDescription(Err));return(False);}else{break;}}return(True);}//===================================================================================================================================================//===================================================================================================================================================intSendMarketOrder(int Type, double Lots, int TP, int SL, int Magic, string Cmnt, double OpenPrice = 0, string mSymbol = ""){double Price, Take, Stop;int Ticket, Color, Err;int ErrorCount = 0;while(!IsStopped()){if(ErrorCount > 5) return(0);if(!IsConnected()){ErrorCount = ErrorCount + 1;Print("No connection with server!");Sleep(1000);}if(IsTradeContextBusy()){Sleep(3000);continue;}switch(Type){case OP_BUY:if(mSymbol == "")Price = NormalizeDouble(Ask, vDigits);elsePrice = NormalizeDouble(MarketInfo(mSymbol, MODE_ASK), vDigits);Take = IIFd(TP == 0, 0, NormalizeDouble( Price + TP * vPoint, vDigits));Stop = IIFd(SL == 0, 0, NormalizeDouble( Price - SL * vPoint, vDigits));Color = Blue;break;case OP_SELL:if(mSymbol == "")Price = NormalizeDouble( Bid, vDigits);elsePrice = NormalizeDouble(MarketInfo(mSymbol, MODE_BID), vDigits);Price = NormalizeDouble( Bid, Digits);Take = IIFd(TP == 0, 0, NormalizeDouble( Price - TP * vPoint, vDigits));Stop = IIFd(SL == 0, 0, NormalizeDouble( Price + SL * vPoint, vDigits));Color = Red;break;default:return(-1);}if(IsTradeAllowed()){if(mSymbol == "")Ticket = OrderSend(Symbol(), Type, Lots, Price, 2*Spread, 0, 0, Cmnt, Magic, 0, Color); // amended code// Ticket = OrderSend(Symbol(), Type, Lots, Price, 2*Spread, Stop, Take, Cmnt, Magic, 0, Color); // original code for this lineelseTicket = OrderSend(mSymbol, Type, Lots, Price, 2*Spread, Stop, Take, Cmnt, Magic, 0, Color);if(Ticket < 0){Err = GetLastError();if (Err == 4 || /* SERVER_BUSY */Err == 129 || /* INVALID_PRICE */Err == 135 || /* PRICE_CHANGED */Err == 137 || /* BROKER_BUSY */Err == 138 || /* REQUOTE */Err == 146 || /* TRADE_CONTEXT_BUSY */Err == 136 ) /* OFF_QUOTES */{Sleep(3000);continue;}else{break;}}break;}else{break;}}return(Ticket);}//===================================================================================================================================================//===================================================================================================================================================doubleIIFd(bool condition, double ifTrue, double ifFalse){if (condition) return(ifTrue); else return(ifFalse);}//===================================================================================================================================================//===================================================================================================================================================voidDrawInfo(){BuySummLot = 0; TotalProfitBuy = 0;for(i=OrdersTotal();i>=0;i--){if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && (OrderMagicNumber()==多单魔术号)){BuySummLot += OrderLots();TotalProfitBuy += OrderProfit() + OrderCommission() + OrderSwap();}}double ClosedBuyProfit = GetClosedProfit(多单魔术号);SellSummLot = 0; TotalProfitSell = 0;for(i=OrdersTotal();i>=0;i--){if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && (OrderMagicNumber()==空单魔术号)){SellSummLot += OrderLots();TotalProfitSell += OrderProfit() + OrderCommission() + OrderSwap();}}double ClosedSellProfit = GetClosedProfit(空单魔术号);Comment("\n",">>> BUY Orders: ",TotalBuyOrders," lots: ",BuySummLot," Profit: ",TotalProfitBuy,"\n",">>> Profit Taken:",ClosedBuyProfit,"\n","\n",">>> SELL Orders: ",TotalSellOrders," lots: ",SellSummLot," Profit: ",TotalProfitSell,"\n",">>> Profit taken :", ClosedSellProfit);}//===================================================================================================================================================//===================================================================================================================================================voidShowCurrentTime(){int min,sec;min = Time[0] + Period()*60 - CurTime();sec = min%60;min = (min - min%60)/60;if(ObjectFind("CurrTime") != 0)ObjectCreate("CurrTime", OBJ_TEXT, 0, Time[0], Close[0]);elseObjectMove("CurrTime", 0, Time[0], Close[0]);ObjectSetText("CurrTime", " <" + min + ":" + sec, 14, "Verdana", Black);}//===================================================================================================================================================//===================================================================================================================================================voidCheckOverlapping(){//BUY--->TotalBuyOrders = CountOfOrders(多单魔术号);if (TotalBuyOrders >= 2){Lpos = 0; Cpos = 0; Lprofit = 0; Cprofit = 0;Lpos = LidingProfitOrder(多单魔术号);Cpos = CloseProfitOrder(多单魔术号);if(Lprofit > 0 && Lprofit1 <= 0){if(Lprofit + Cprofit > 0 && (Lprofit + Cprofit)*100/Lprofit > 止盈百分比){Lpos1 = 0;CloseSelectOrder(多单魔术号);}}else if(Lprofit > 0 && Lprofit1 > 0){if(Lprofit + Lprofit1 + Cprofit > 0 && (Lprofit + Lprofit1 + Cprofit)*100/(Lprofit + Lprofit1) > 第二止盈百分比) CloseSelectOrder(多单魔术号);}}//<---BUY//SELL--->TotalSellOrders = CountOfOrders(空单魔术号);if (TotalSellOrders >= 2){Lpos = 0; Cpos = 0; Lprofit = 0; Cprofit = 0;Lpos = LidingProfitOrder(空单魔术号);Cpos = CloseProfitOrder(空单魔术号);if(Lprofit > 0 && Lprofit1 <= 0){if(Lprofit + Cprofit > 0 && (Lprofit + Cprofit)*100/Lprofit > 止盈百分比){Lpos1 = 0;CloseSelectOrder(空单魔术号);}}if(Lprofit > 0 && Lprofit1 > 0){if(Lprofit + Lprofit1 + Cprofit > 0 && (Lprofit + Lprofit1 + Cprofit)*100/(Lprofit + Lprofit1) > 第二止盈百分比) CloseSelectOrder(空单魔术号);}}//<---SELL}//======================================== Most profitable order =======================================intLidingProfitOrder(int mNumber){Lprofit1 = 0;Lpos1 = 0;int TotalOrders = CountOfOrders(mNumber);double profit = 0;int Pos = 0;for (i = 0; i < OrdersTotal(); i++){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber)){if (OrderType() == OP_SELL || OrderType() == OP_BUY){profit = OrderProfit();Pos = OrderTicket();if (profit > 0 && profit > Lprofit) {// Previous valueLprofit1 = Lprofit;Lpos1 = Lpos;// Maximum valueLprofit = profit;Lpos = Pos;}}}}}return (Lpos);}//======================================== Least Profitable Order =======================================intCloseProfitOrder(int mNumber){double profit = 0;int Pos = 0;for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber)){if (OrderType() == OP_SELL || OrderType() == OP_BUY) {profit = OrderProfit();Pos = OrderTicket();if (profit < 0 && profit < Cprofit) {Cprofit = profit;Cpos = Pos;}}}}}return (Cpos);}//========================================== Closing Orders ===============================================intCloseSelectOrder(int mNumber){int error = 0;int error1 = 0;int error2 = 0;int Result = 0;// ---------------------- Last Order -----------------------while (error1 == 0){RefreshRates();i = OrderSelect(Lpos, SELECT_BY_TICKET, MODE_TRADES);if (i != 1 ) {Print ("Error! Not possible to select most profitable order . Operation cancelled.");return (0);}if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber)) {if (OrderType() == OP_BUY) {error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Spread, Blue));if (error1 == 1) {Print ("Leading Order closed successfully");Sleep (500);} else {Print ("Error closing leading order, Repeat Operation. ");}}// -----------------------------------------------------if (OrderType() == OP_SELL) {error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Spread, Red));if (error1 == 1) {Print ("Leading Order closed successfully");Sleep (500);} else {Print ("Error closing leading order, Repeat Operation. ");}}}}// ---------------------- Previous Last -----------------------if(Lpos1 != 0){while (error2 == 0) {RefreshRates();i = OrderSelect(Lpos1, SELECT_BY_TICKET, MODE_TRADES);if (i != 1 ) {Print ("Error! Not possible to select previous most profitable order . Operation cancelled.");return (0);}if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber)) {if (OrderType() == OP_BUY) {error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Spread, Blue));if (error2 == 1) {Print ("Previous leading order closed successfully");Sleep (500);} else {Print ("Error closing previous leading order, Repeat Operation. ");}}// -----------------------------------------------------if (OrderType() == OP_SELL) {error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Spread, Red));if (error2 == 1) {Print ("Previous leading order closed successfully");Sleep (500);} else {Print ("Error closing previous leading order, Repeat Operation. ");}}}}}// ----------- Selected (Least profitable order ) -----------while (error == 0) {RefreshRates();int i = OrderSelect(Cpos, SELECT_BY_TICKET, MODE_TRADES);if (i != 1 ) {Print ("Error! Not possible to select least profitable order. Operation cancelled");return (0);}if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber)) {if (OrderType() == OP_BUY) {error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Spread, Blue));if (error == 1 ) {Print ("Order closed successfully.");Sleep (500);} else {Print ("Error during Order Close. Repeat operation. ");}}// --------------------------------------------------if (OrderType() == OP_SELL) {error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Spread, Red));if (error == 1) {Print ("Order closed successfully.");Sleep (500);} else {Print ("Error during Order Close. Repeat operation. ");}}}}Result = 1;return (Result);}
夜雨聆风