Event based Robot Control
Event based Robot Control
16 Nov 2013, 21:54
I have built an example that passes an event to a parent robot..
I would like to get some feedback.
using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot()] public class ParentPortfolioRobot : Robot { protected string symbolCode; public int Volu { get; set; } protected string SymbolCode { get { return Symbol.Code; } set { symbolCode = value; } } protected override void OnStart() { var symbol = MarketData.GetSymbol(SymbolCode); Trade.CreateBuyMarketOrder(symbol, Volu); } protected override void OnTick() { foreach (var pos in Account.Positions) Print("{0}", pos.Id); } public void isFirstBar() { Print("Its 10am"); } } } //************************************************************************************************* //#reference: ParentRobot.algo //The Event robot sends events to the Parent robot using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class EventRobot : ParentPortfolioRobot { protected override void OnStart() { //Initialise the variables of the portfolio class Volu = 1000; SymbolCode = Symbol.Code; base.OnStart(); } protected override void OnBar() { int index = MarketSeries.OpenTime.Count - 1; DateTime currentTime = MarketSeries.OpenTime[index]; DateTime previousTime = MarketSeries.OpenTime[index - 1]; //if first bar of the week if (currentTime.DayOfWeek == DayOfWeek.Monday && previousTime.DayOfWeek != DayOfWeek.Monday) sendEvent(); base.OnTick(); } public void sendEvent() { base.isFirstBar(); } } }
Replies
hichem
21 Nov 2013, 12:40
RE:
Hi!
I'm not sure what are you trying to achieve but deriving from a Base robot will not create two robots. The derived robot will inherit from the parent robot and you will have only one instance of a robot running. I made the comments because you mentioned passing events between robots. Which is not the case here. Calling base.isFirstBar(); is nothing else but calling a method in the EventRobot instance.
jhtrader said:
I have built an example that passes an event to a parent robot..
I would like to get some feedback.
using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot()] public class ParentPortfolioRobot : Robot { protected string symbolCode; public int Volu { get; set; } protected string SymbolCode { get { return Symbol.Code; } set { symbolCode = value; } } protected override void OnStart() { var symbol = MarketData.GetSymbol(SymbolCode); Trade.CreateBuyMarketOrder(symbol, Volu); } protected override void OnTick() { foreach (var pos in Account.Positions) Print("{0}", pos.Id); } public void isFirstBar() { Print("Its 10am"); } } } //************************************************************************************************* //#reference: ParentRobot.algo //The Event robot sends events to the Parent robot using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class EventRobot : ParentPortfolioRobot { protected override void OnStart() { //Initialise the variables of the portfolio class Volu = 1000; SymbolCode = Symbol.Code; base.OnStart(); } protected override void OnBar() { int index = MarketSeries.OpenTime.Count - 1; DateTime currentTime = MarketSeries.OpenTime[index]; DateTime previousTime = MarketSeries.OpenTime[index - 1]; //if first bar of the week if (currentTime.DayOfWeek == DayOfWeek.Monday && previousTime.DayOfWeek != DayOfWeek.Monday) sendEvent(); base.OnTick(); } public void sendEvent() { base.isFirstBar(); } } }
@hichem
Hyperloop
22 Nov 2013, 00:20
I think your best bet right now is just wait for the release of Spotware Connect. That should allow more flexbility.
@Hyperloop
hichem
22 Nov 2013, 13:25
RE: Howto link one bot to another
If you want to develop a library then it doesn't need to be implemented in a Robot. You develop a .dll with VS and import in your robot. A robot is not designed to act as a library of functions
jeex said:
A simple question on this subject: how do i link one robot to another, like we do with an indicator and robt?
I want to use one robot as library, so that the methods in that bot can be used in other robots.
@hichem
hichem
22 Nov 2013, 15:29
RE: DLL?
In that case you can create static methods within a Robot class to be reused. You should declare those methods as static to avoid instantiating a Robot object inside another robot. After compiling the first robot add it as a reference to the second one.
But using VS is the cleanest and the best way to do so.
jeex said:
And can that be done within cAlgo. I'm an OSX developer so i am already on thin ice here with cAlgo in a virtual Windows on my MacPro.
@hichem
jeex
21 Nov 2013, 12:02
Very interesting
I like this project. this way it's possible to combine several semi-automatic strategies.
Can an indicator induce such a signal as well? Time for some serious testing.
@jeex