using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo
{
[Robot("Sample close profitable positions", TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class CloseProfitablePositions : Robot
{
[Parameter("Account profit to trigger closing positions", DefaultValue = 1000, Step = 100)]
public double Size { get; set; }
[Parameter("Profit required on a position to close it", DefaultValue = 1000, Step = 100)]
public double SizePosition { get; set; }
[Parameter("Close by only considering winning positions", DefaultValue = true)]
public bool CloseByProfitablePositionsOnly { get; set; }
[Parameter("Account loss to trigger closing positions", DefaultValue = 1000, Step = 100)]
public double LossSize { get; set; }
[Parameter("Loss required on a position to close it", DefaultValue = 1000, Step = 100)]
public double LossSizePosition { get; set; }
[Parameter("Close by only considering losing positions", DefaultValue = true)]
public bool CloseByLosingPositionsOnly { get; set; }
protected override void OnTick()
{
if (Account.UnrealizedNetProfit > Size || CloseByProfitablePositionsOnly == true)
{
foreach (var position in Positions)
{
if (position.NetProfit > SizePosition)
ClosePosition(position);
}
}
if (Account.UnrealizedNetProfit < LossSize || CloseByLosingPositionsOnly == true)
{
foreach (var position in Positions)
{
if (position.NetProfit < LossSizePosition)
ClosePosition(position);
}
}
}
}
}