برای بستن پوزیشن‌ها کافی است یک بار تابع بستن پوزیشنها را بنویسید و سپس در هرجا که لازم داشتید آن تابع را فراخوانی کنید

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);    
				
			

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *