Definir Stop Loss se o Pedido de Preço Aberto estiver acima ou abaixo de um preço limite, exceto um
Define Stop Loss para um nível especificado se o pedido de preço em aberto estiver acima (para posição longa) ou abaixo (para posição curta) de um limite de preço.
Se você tiver várias posições abertas, evitará que a perda de posições seja interrompida. Isto poderia fechar imediatamente a posição
Como abrimos várias ordens de mercado, podemos ter que fechar todas as ordens exceto uma posição ("Número Mágico Excluído")
Aqui está o código :
pacote SQ.Blocos.Pedido.Modificar;
importação SQ.Functions.OrderFunctions;
Importar SQ.Internal.ActionBlock;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;
// Modificado na França por Emmanuel Evrard para a StrategyQuantX Community :)
@BuildingBlock(name="(SIO) Set Stop Loss if Possible Except One", display="Set Stop Loss if Possible Except One", returnType = ReturnTypes.Action)
@Help("Define Stop Loss para um nível especificado se o pedido de preço aberto estiver acima (para posição longa) ou abaixo (para posição curta) um limite de preço, exceto para um pedido: 'Número Mágico Excluído'. Se o SL já existir, ele será movido").
@SortOrder(500) // Em AlgoWizard, esta é uma posição dropbox (400 ou 500 ou 600 etc.) desta função no menu "Add New Condition", você pode ter que ajustá-la dependendo da função já instalada na mesma dropbox.
@CategoryOrder(200)
@IgnoreInBuilder
@NotSupportedFor(engines="EL")
classe pública SetStopLossIfPossibleExceptOne estende ActionBlock
{
@Parameter(defaultValue="Current", category="Order identification", showIfDefault=false, allowAny=true)
Símbolo de corda pública;
@Parameter(defaultValue="0", category="Order identification", showIfDefault=false)
@Editor(type=Editors.Selection, values="Long=1,Short=-1")
direção da int pública;
@Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false)
@Help("Número mágico que pode identificar o pedido")
@Editor(type=Editors.SelectionVariablesWithAny)
público int MagicNumber;
@Parameter(defaultValue="", category="Order identification", showIfDefault=false)
@Help("Comentário também pode ser usado para identificar o pedido. Em caso de Comentário, o pedido corresponde se o comentário do pedido contiver o texto especificado aqui").
Public String Comment;
@Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false)
@Help("MagicNumber of the Excluded order, this order will not be taken into account")
@Editor(type=Editores.SelectionVariables)
público int MagicNumberExcluído;
@Parameter(category="Price Limit")
@Help("Limite de preço do pedido, somente pedido longo com preço aberto mais alto será selecionado ou somente pedido curto com preço aberto mais baixo será selecionado")
@Editor(type=Editors.Formula, formulaName="RangeLevel")
IFormula PriceLimit pública;
@Parameter(category="Stop Loss")
@Editor(type=Editors.Formula, formulaName="RangeLevel")
IFormula StopLoss pública;
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
@Override
vazio público OnAction() atira a TradingException
{
for(int i=0; i= PriceLimit.evaluationFormula(Estratégia, Símbolo, preço aberto, Direção))
{
double sl = StopLoss.evaluationFormula(Estratégia, Símbolo, Preço Aberto, Direção);
order.setSL(sl).Send();
}
if (Direção != -1 && openPrice <= PriceLimit.evaluationFormula(Estratégia, Símbolo, preço aberto, Direção))
{
double sl = StopLoss.evaluationFormula(Estratégia, Símbolo, Preço Aberto, Direção);
order.setSL(sl).Send();
}
}
}
}
}
}
