Need help to close all positions after x hours
Need help to close all positions after x hours
29 Mar 2022, 00:36
I will leave the code here.
when the hours >24, the robot dont seems recognize my -24
Can you help?
using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class z : Robot { [Parameter("Max time position open(hours)", DefaultValue = 2, MinValue = 1)] public int MaxTimeOpen { get; set; } protected override void OnStart() { // Put your initialization logic here Print("Start robot: ", Server.Time.Hour); if (Server.Time.Hour == 0) { ExecuteMarketOrder(TradeType.Sell, Symbol, 10000, "", 100, 100); } } protected override void OnTick() { // Put your core logic here Print("OnTick: ", Server.Time.Hour); foreach (var position in Positions) { Print(position.EntryTime.TimeOfDay); int posOpenTimeHours = position.EntryTime.Hour + MaxTimeOpen; int posOpenTimeMinutes = position.EntryTime.Minute; if (posOpenTimeHours > 24) { posOpenTimeHours = posOpenTimeHours - 24; } Print("Pos open time: ", posOpenTimeHours); if (Server.Time.Hour > posOpenTimeHours && Server.Time.Minute > posOpenTimeMinutes) { ClosePosition(position); } } } protected override void OnStop() { // Put your deinitialization logic here } } }
Replies
hugicardoso
29 Mar 2022, 19:03
RE:
Thank you very much, but when I use the optimization it is very slow, it goes from 7h to 5 days. which makes it very difficult to use
amusleh said:
Hi,
Try this:
using cAlgo.API; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class z : Robot { [Parameter("Max time position open(hours)", DefaultValue = 2, MinValue = 1)] public int MaxTimeOpen { get; set; } protected override void OnStart() { Timer.Start(1); // Put your initialization logic here Print("Start robot: ", Server.Time.Hour); if (Server.Time.Hour == 0) { ExecuteMarketOrder(TradeType.Sell, SymbolName, 10000, "", 100, 100); } } protected override void OnTimer() { foreach (var position in Positions) { var timeElapsedSincePositionEntryTime = Server.TimeInUtc - position.EntryTime; Print("timeElapsedSincePositionEntryTime: {0}", timeElapsedSincePositionEntryTime); if (timeElapsedSincePositionEntryTime.TotalHours >= MaxTimeOpen) { ClosePosition(position); } } } } }
@hugicardoso
amusleh
29 Mar 2022, 19:26
( Updated at: 29 Mar 2022, 19:27 )
Hi,
Try to increase the timer interval, ex:
using cAlgo.API;
namespace cAlgo
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class z : Robot
{
[Parameter("Max time position open(hours)", DefaultValue = 2, MinValue = 1)]
public int MaxTimeOpen { get; set; }
protected override void OnStart()
{
Timer.Start(3600);
// Put your initialization logic here
Print("Start robot: ", Server.Time.Hour);
if (Server.Time.Hour == 0)
{
ExecuteMarketOrder(TradeType.Sell, SymbolName, 10000, "", 100, 100);
}
}
protected override void OnTimer()
{
foreach (var position in Positions)
{
var timeElapsedSincePositionEntryTime = Server.TimeInUtc - position.EntryTime;
Print("timeElapsedSincePositionEntryTime: {0}", timeElapsedSincePositionEntryTime);
if (timeElapsedSincePositionEntryTime.TotalHours >= MaxTimeOpen)
{
ClosePosition(position);
}
}
}
}
}
@amusleh
hugicardoso
29 Mar 2022, 20:41
RE:
Works very good thanks for the help.
amusleh said:
Hi,
Try to increase the timer interval, ex:
using cAlgo.API; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class z : Robot { [Parameter("Max time position open(hours)", DefaultValue = 2, MinValue = 1)] public int MaxTimeOpen { get; set; } protected override void OnStart() { Timer.Start(3600); // Put your initialization logic here Print("Start robot: ", Server.Time.Hour); if (Server.Time.Hour == 0) { ExecuteMarketOrder(TradeType.Sell, SymbolName, 10000, "", 100, 100); } } protected override void OnTimer() { foreach (var position in Positions) { var timeElapsedSincePositionEntryTime = Server.TimeInUtc - position.EntryTime; Print("timeElapsedSincePositionEntryTime: {0}", timeElapsedSincePositionEntryTime); if (timeElapsedSincePositionEntryTime.TotalHours >= MaxTimeOpen) { ClosePosition(position); } } } } }
@hugicardoso
amusleh
29 Mar 2022, 10:50
Hi,
Try this:
@amusleh