don t close all position HELP

Created at 14 Mar 2024, 07:19
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
VI

vinc.lomiglio

Joined 19.06.2018

don t close all position HELP
14 Mar 2024, 07:19


Cano you tell me why don t close in the same time the symbols

protected override void OnTick()
{
   Symbol symbol1 = Symbols.GetSymbol(Symbol1);
   Symbol symbol2 = Symbols.GetSymbol(Symbol2);

   CheckTakeProfit(symbol1, symbol2);
}

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


public void CloseAllPositions(Symbol symbol1, Symbol symbol2)
{
   List<Position> positionsToClose = Positions.Where(p => p.Symbol == symbol1 || p.Symbol == symbol2).ToList();
   //bool positionsClosedSuccessfully = true;

   // 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)
       {
            
           Print("Non ci sono più posizioni aperte per i simboli specificati");
       }
   }
   else
   {
       Print("Non ci sono più posizioni aperte per i simboli specificati");
   }
   //return positionsClosedSuccessfully;
}
 


@vinc.lomiglio
Replies

PanagiotisCharalampous
14 Mar 2024, 07:46

Hi there,

Your question is not clear. Can you rephrase and elaborate?

Best regards,

Panagiotis


@PanagiotisCharalampous

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

PanagiotisCharalampous
15 Mar 2024, 07:02

Hi there,

How can we reproduce your problem?

Best regards,

Panagiotis


@PanagiotisCharalampous