برای بستن پوزیشنها کافی است یک بار تابع بستن پوزیشنها را بنویسید و سپس در هرجا که لازم داشتید آن تابع را فراخوانی کنید
1.تابع بستن پوزیشنها
تابع بستن پوزیشنها را یک بار کپی کنید.
void Close()
{
MqlTradeRequest regues;
MqlTradeResult result2;
for(int i=PositionsTotal()-1; i>=0; i--)
{
PositionSelect(_Symbol);
ulong Postion_Tieket=PositionGetTicket(i);
string Postion_Symbol=PositionGetString(POSITION_SYMBOL);
ulong Postion_Magic=PositionGetInteger(POSITION_MAGIC);
double Postion_Volume=PositionGetDouble(POSITION_VOLUME);
ENUM_ORDER_TYPE Postion_Type=(ENUM_ORDER_TYPE)PositionGetInteger(POSITION_TYPE);
if(Postion_Symbol==Symbol() && Postion_Magic==magicPo)
{
ZeroMemory(regues);
ZeroMemory(result2);
regues.action=TRADE_ACTION_DEAL;
regues.position=Postion_Tieket;
regues.symbol=Symbol();
regues.volume=Postion_Volume;
regues.magic=Postion_Magic;
regues.deviation=30;
if(Postion_Type==ORDER_TYPE_BUY)
{
regues.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
regues.type=ORDER_TYPE_SELL;
}
if(Postion_Type==ORDER_TYPE_SELL)
{
regues.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
regues.type=ORDER_TYPE_BUY;
}
bool closs=OrderSend(regues,result2);
}
}
}
2. فراخوانی تابع بستن پوزیشنها
هر کجا که خواستید پوزیشنها بسته شود کافی است تابع بستن پوزیشنها را فراخوانی کنید.
Close();
بستن پوزیشنها با تفکیک نوع پوزیشن و شماره مجیک
گاهی وقتها لازم است که فقط پوزیشنها خرید یا فقط پوزیشنهای فروش بسته شود و مثل تابع بالا نمیخواهیم تمام پوزیشنها بسته شود.
برای اینکار از تابع زیر استفاده میکنیم.
void Close(int mac,ENUM_ORDER_TYPE order)
{
MqlTradeRequest regues;
MqlTradeResult result2;
for(int i=PositionsTotal()-1; i>=0; i--)
{
PositionSelect(_Symbol);
ulong Postion_Tieket=PositionGetTicket(i);
string Postion_Symbol=PositionGetString(POSITION_SYMBOL);
ulong Postion_Magic=PositionGetInteger(POSITION_MAGIC);
double Postion_Volume=PositionGetDouble(POSITION_VOLUME);
ENUM_ORDER_TYPE Postion_Type=(ENUM_ORDER_TYPE)PositionGetInteger(POSITION_TYPE);
if(mac==Postion_Magic)
{
if(order==Postion_Type)
{
ZeroMemory(regues);
ZeroMemory(result2);
regues.action=TRADE_ACTION_DEAL;
regues.position=Postion_Tieket;
regues.symbol=Symbol();
regues.volume=Postion_Volume;
regues.magic=Postion_Magic;
regues.deviation=10;
if(Postion_Type==ORDER_TYPE_BUY)
{
regues.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
regues.type=ORDER_TYPE_SELL;
}
if(Postion_Type==ORDER_TYPE_SELL)
{
regues.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
regues.type=ORDER_TYPE_BUY;
}
bool closs=OrderSend(regues,result2);
}
}
}
}
فراخوانی تابع
1.بستن پوزیشنهای خرید
Close(0,ORDER_TYPE_BUY);
در تابع بالا علاوه بر اینکه نوع پوزیشن را مشخص میکنیم میتوانیم شماره مجیک پوزیشن را هم مشخص کنیم و فقط اون پوزیشنهایی که با شماره مجیک ما برابر است را میبندد.
2.بستن پوزیشنهای فروش
Close(0,ORDER_TYPE_SELL);
بدون دیدگاه