Is there any way to add code to cAlgo.API?

Created at 10 Feb 2017, 17:11
fermjy's avatar

fermjy

Joined 23.07.2016

Is there any way to add code to cAlgo.API?
10 Feb 2017, 17:11


Hi guys, I'm new at this, I don't have too much experience, so forgive me if I make a disaster..

Well, I've been programming, and my custom methods, properties, etc... are making a mess of a code, having more than 1k of custom code.

So, the main question is: Can I add any Property to the, let's say cAlgo.API.dll? So when I start coding I already have my "things" included? Or..
I can create another DLL, and include it, but I have problems like..

Error    1    An object reference is required for the non-static field, method, or property 'cAlgo.API.Internals.Symbol.Ask.get' 

 Let's say that I have this code..

public class SpreadClass
    {

        public double Price
        {
            get { return Symbol.Ask - Symbol.Bid; }
        }

        public double Pips
        {
            get { return Price / Symbol.PipSize; }
        }

    }

So the previous error comes out.. even if I make It static..

Some people says "just pass the reference".. and I end with a code like this.. which... after a couple of houndred of lines.. It becomes a nightmare...... (the entire post is about avoiding this kind of code, one way or another)

public class SpreadClass
    {

        private Symbol BS;

        public SpreadClass(Robot robot)
        {
            BS = robot.Symbol;
        }

        public double Price
        {
            get { return BS.Ask - BS.Bid; }
        }

        public double Pips
        {
            get { return Price / BS.PipSize; }
        }

    }


If what I want is possible, is there any tutorial or post so I can learn how to avoid this "need of passing the reference"?
Modifying the cAlgo.API.dll would be awesome, for example I have to create the property "Entries".. because "Positions" can't be modified. If I can't change the default dll.. how can I do this with a custom DLL?


Ty for your patience and time.
Greetings.


@fermjy
Replies

mindbreaker
10 Feb 2017, 22:11

Hi,

look at this /api/guides/trading_api

use functions

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
 
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC)]
    public class NewcBot : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }
 

        protected override void OnTick()
        {
            SayHello("JIMBO");
            if(SayHello("JIN") == "Baraki"){
               Print("Booooooo");
            }
        }
        

        /// !!!!!!!!!!!!!!!!!!!!!!!!!!!! YOUR CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    
        public string SayHello(string Name = "AlojzyBombel")
        {
            // Print to log
            Print("HELLO " + Name);

            // return value, string ...
            return "Baraki";
         }

    }
}

 

Or try decompile DLL for example with https://www.jetbrains.com/decompiler/

and see how they do it ;)

It C# search in google how to create dll library in visual studio on youtube and ....

Bye.

 


@mindbreaker

fermjy
10 Feb 2017, 22:22

RE:

mindbreaker said:

Hi,

look at this /api/guides/trading_api

use functions

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
 
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC)]
    public class NewcBot : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }
 

        protected override void OnTick()
        {
            SayHello("JIMBO");
            if(SayHello("JIN") == "Baraki"){
               Print("Booooooo");
            }
        }
        

        /// !!!!!!!!!!!!!!!!!!!!!!!!!!!! YOUR CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    
        public string SayHello(string Name = "AlojzyBombel")
        {
            // Print to log
            Print("HELLO " + Name);

            // return value, string ...
            return "Baraki";
         }

    }
}

 

Or try decompile DLL for example with https://www.jetbrains.com/decompiler/

and see how they do it ;)

It C# search in google how to create dll library in visual studio on youtube and ....

Bye.

 

I already have my code... thats what I'm saying... and I have almost 1k of lines... I don't want to put them in every cBot that I make... I prefer to do It loading a DLL... but I have that problem with reference for example... (I know hot to make a dll.. thank you for the google search)

If there is no way to change the cAlgo.API.dll... I will have to use my own DLL... but sooner or later... DLL or not... I have to pass the reference.. at least for what I know...
So If someone knows how to avoid this.. please help


@fermjy

mindbreaker
10 Feb 2017, 23:04

cAlgo create dll file

It's simple   :D

DLL class in visual studio (Boo.dll):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// cAlgo.Api References
// using cAlgo.API.Collections;
// using cAlgo.API.Indicators;
// using cAlgo.API.Internals;
// using cAlgo.API.Requests;

namespace Boo
{
    public static class Class1
    {      
        public static double Price(double p1 = 100, double p2  = 200)
        {
            return p1 - p2;
        }

        public static  double Pips(double Price = 0)
        {
            return  Price;
        }
    }

}

And code in cBot (cAlgo):

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

// My dll name
using Boo;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class DLL : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        protected override void OnStart()
        {
            // Put your initialization logic here
            Print(Boo.Class1.Price(666, 333));
        }
    }
}

It work in my cAlgo :)

Bye.


@mindbreaker

mindbreaker
10 Feb 2017, 23:21

And here your first example with cAlgo Api dll (you need include calgo api dll to your ddl as reference)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// cAlgo.Api References
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;

namespace Boo
{
    public static class Class1
    {       
        public static double Price(Symbol my)
        {
            return my.Ask - my.Bid;
        }

        public static  double PipSize(Symbol my)
        {
            return  my.PipSize;
        }
    }

}

And in cbot:

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
using Boo;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class DLL : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        protected override void OnStart()
        {
            // Add Symbol
            Print(Boo.Class1.Price(Symbol));
        }
    }
}

And works fine. :)


@mindbreaker

fermjy
10 Feb 2017, 23:35

RE:

mindbreaker said:

And here your first example with cAlgo Api dll (you need include calgo api dll to your ddl as reference)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// cAlgo.Api References
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;

namespace Boo
{
    public static class Class1
    {       
        public static double Price(Symbol my)
        {
            return my.Ask - my.Bid;
        }

        public static  double PipSize(Symbol my)
        {
            return  my.PipSize;
        }
    }

}

And in cbot:

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
using Boo;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class DLL : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        protected override void OnStart()
        {
            // Add Symbol
            Print(Boo.Class1.Price(Symbol));
        }
    }
}

And works fine. :)

Thanks mindbreaker, that's what I'm doing for now, but the code is passing something by reference. If It isn't Robot, is Symbol :(
I will figure it out eventually.

Thanks for your time and patience.


@fermjy

mindbreaker
11 Feb 2017, 10:56

        public cAlgo.API.Robot robot { get; set; }

@mindbreaker