8. 4. 2022

5 0

Close All positions except one

Close All positions except one : the selected “Magic Number Excluded”

 

package SQ.Blocks.Order.Close;

import SQ.Functions.OrderFunctions;
import SQ.Internal.ActionBlock;

import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;


// Modified in France by Emmanuel Evrard for the StrategyQuantX Community :)
@BuildingBlock(returnType = ReturnTypes.Action)
@Help("Close All positions except one")
@SortOrder(600)																			// In AlgoWizard, this is a dropbox position (400 or 500 or 600 etc.) of this function in the menu of "Add New Condition", you may have to adjust it depending on the function already installed on the same dropbox. 
@IgnoreInBuilder
@NotSupportedFor(engines="EL")
public class CloseAllPositionsExcept extends ActionBlock 
{
    
    @Parameter(defaultValue="Current", category="Order identification", showIfDefault=false, allowAny=true)
    public String Symbol;
    
    @Parameter(defaultValue="1", category="Order identification", showIfDefault=false)
    @Editor(type=Editors.Selection, values="Long=1,Short=-1,Any=0")
    public int Direction;

    @Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false)
    @Help("Magic number that can identify the order.")
    @Editor(type=Editors.SelectionVariablesWithAny)
    public int MagicNumber;

    @Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false)
    @Help("MagicNumber of the Excluded order, this order will not be closed")
    @Editor(type=Editors.SelectionVariables)
    public int MagicNumberExcluded;

    //@Parameter(defaultValue="", category="Order identification", showIfDefault=false)
    //@Help("Comment can be also used to identify the order. In case of Comment, order matches if the order comments contains the text specified here.")
    public String Comment;

    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------

    public CloseAllPositionsExcept() 
    {
        
    }
    
    //------------------------------------------------------------------------

    @Override
    public void OnAction() throws TradingException 
    {
        int total = Strategy.Trader.getOpenOrdersCount(false);
        
        for(int i=total-1; i>=0; i--) 
        {
            ILiveOrder order = Strategy.Trader.getOpenOrder(i, false);
            
            if(OrderFunctions.identify(order, Strategy, Symbol, Direction, MagicNumber, Comment)) 
            {
                if (order.getMagicNumber() != MagicNumberExcluded)	
                {
                    order.setExitIndex((byte) -1);
                    order.Close(OrderCloseTypes.ExitSignal);
                }
            }			
        }
    }
}

 

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments

Related posts