Topics
Replies
vinc.lomiglio
21 Aug 2023, 09:04
( Updated at: 29 Feb 2024, 09:08 )
how can to close all position in the same of two symbols please i want close in the same if simbol1 take a profit i want that simbol2 close in the same
I
//ENTRATE_LONG
if ((FastResultL >0)
{
var q = Symbol.QuantityToVolumeInUnits(quantity);
var q_2 = Symbol.QuantityToVolumeInUnits(quantity_2);
tradeOperation = ExecuteMarketOrderAsync(TradeType.Buy, Symbol1, q, etichettaOperazioni_simbolo1 , StopLoss_Long, TakeProfit_Long);
tradeOperation = ExecuteMarketOrderAsync(TradeType.Sell, Symbol2, q_2, etichettaOperazioni_simbolo2, StopLoss_Short, TakeProfit_Short);/
Print("ORDINI long short INVIATI");
//Print("Positions Count:" + Positions.Count);
//tradeOperation = ExecuteMarketOrderAsync(TradeType.Sell, Symbol2, q_2, etichettaOperazioni);
tradeType = 1;
openedPositions++;
nOp++;
//Print("Position LONG is opened");
}
@vinc.lomiglio
vinc.lomiglio
14 Mar 2024, 16:34
RE: don t close all position HELP
HELLO, I WOULD LIKE YOU TO HELP ME TO CHECK WHY MY FUNCTIONS DO NOT CLOSE BOTH POSITIONS OF THE SYMBOLS WHEN THE TAKE AND STOP CONDITIONS VERIFY:
I WANT THAT WHEN A SYMBOL REACHES ONE OF THE CONDITIONS DEFINED IN CheckTakeProfit(Symbol symbol1, Symbol symbol2) ALL POSITIONS OF THE TWO SYMBOLS MUST BE CLOSED AS THEY MUST WORK IN PAIR
private void CloseAllPositions(Symbol symbol1, Symbol symbol2)
{
List<Position> positionsToClose = Positions.Where(p => p.Symbol == symbol1 || p.Symbol == symbol2).ToList();
// Verifica se ci sono ancora posizioni aperte per i simboli specificati
if (positionsToClose.Count > 0)
{
// Chiudi tutte le posizioni simultaneamente
foreach (var position in positionsToClose)
{
position.Close();
}
// Verifica se ci sono ancora posizioni aperte per i simboli specificati dopo la chiusura
List<Position> remainingPositions = Positions.Where(p => p.Symbol == symbol1 || p.Symbol == symbol2).ToList();
if (remainingPositions.Count > 0)
{
// Se ci sono ancora posizioni rimanenti, chiudi tutte le posizioni di nuovo
CloseAllPositions(symbol1, symbol2);
}
else
{
CloseAllPositions(symbol1, symbol2);
Print(" Non ci sono più posizioni aperte per i simboli specificati");
// Esegui eventuali azioni aggiuntive o stampa messaggi se necessario
}
}
}
public void CheckTakeProfit(Symbol symbol1, Symbol symbol2)
{
// Ottieni l'orario corrente dell'utente
DateTime userTime = DateTime.Now;
// Ottieni le posizioni per i due simboli
var pos1 = Positions.Find(Symbol1, etichettaOperazioni_simbolo1);
var pos2 = Positions.Find(Symbol2, etichettaOperazioni_simbolo2);
// Controlla se almeno una posizione ha raggiunto i suoi obiettivi di take profit o stop loss
if ((pos1 != null && (pos1.TakeProfit >= takeProfitPips_Long || pos1.StopLoss <= -stopLossPips_Long || pos1.TakeProfit <= -takeProfitPips_Short || pos1.StopLoss >= stopLossPips_Short)) ||
(pos2 != null && (pos2.TakeProfit >= takeProfitPips_Long || pos2.StopLoss <= -stopLossPips_Long || pos2.TakeProfit <= -takeProfitPips_Short || pos2.StopLoss >= stopLossPips_Short)))
{
// Chiudi entrambe le posizioni simultaneamente
CloseAllPositions(symbol1, symbol2);
}
}
@vinc.lomiglio