Save to file and read from file and copy trades.

Created at 07 Apr 2014, 12:53
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!
breakermind's avatar

breakermind

Joined 17.07.2013

Save to file and read from file and copy trades.
07 Apr 2014, 12:53


Hi write and read from file:

using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
using System.IO;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class WriteToFileExample : Robot
    {

//================================================================================
//                                                                            Vars
//================================================================================
        // stream for file
        StreamWriter _fileWriter;
        // desktop folder
        static string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        // path to file
        string filePath = Path.Combine(desktopFolder, "z.txt");

//================================================================================
//                                                                         OnStart
//================================================================================
        protected override void OnStart()
        {
            Print("Hello Master ... ");
        }

//================================================================================
//                                                                          OnTick
//================================================================================
        protected override void OnTick()
        {
            //=============================================================================== save to file
            _fileWriter = File.AppendText(filePath);
            //creating file
            _fileWriter.AutoFlush = true;
            //file will be saved on each change
            _fileWriter.WriteLine("Server Time: " + Server.Time);
            // close file and next read from file
            _fileWriter.Close();


            //===========================================================================  read from file
            var dFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            var fPath = Path.Combine(dFolder, "z.txt");

            string[] lines = System.IO.File.ReadAllLines(fPath);
            foreach (string line in lines)
            {
                // Use a tab to indent each line of the file.
                Print("Text from file: \t" + line);
            }

        }

//================================================================================
//                                                                          OnStop
//================================================================================
        protected override void OnStop()
        {
            Print("Bye Master ...");
        }
    }
}

Bye ...


@breakermind
Replies

breakermind
07 Apr 2014, 14:26

Write and read opened positions from one robot to another

Write robot:

using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
using System.IO;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class WriteToFileExample : Robot
    {

//================================================================================
//                                                                            Vars
//================================================================================
        // stream for file
        StreamWriter _fileWriter;
        // desktop folder
        static string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        // path to file
        string filePath = Path.Combine(desktopFolder, "z.txt");

        private string responseFromServer = "";
        private string openPositionsString = "";

        [Parameter("Position label", DefaultValue = "Master Position Label")]
        public string MyLabel { get; set; }

        [Parameter("Position comment", DefaultValue = "Master Position Comment")]
        public string MyComment { get; set; }

        [Parameter("Volume", DefaultValue = 10000)]
        public int Volume { get; set; }

        [Parameter("Volume Max", DefaultValue = 100000)]
        public int VolumeMax { get; set; }

        [Parameter("Stop Loss (pips)", DefaultValue = 30)]
        public int StopLoss { get; set; }

        [Parameter("Take Profit (pips)", DefaultValue = 15)]
        public int TakeProfit { get; set; }

        [Parameter(DefaultValue = 5)]
        public int MaxPositions { get; set; }

//================================================================================
//                                                                         OnStart
//================================================================================
        protected override void OnStart()
        {
            Print("Hello Master ... ");
        }

//================================================================================
//                                                                           OnBar
//================================================================================
        protected override void OnBar()
        {
            if (Positions.Count < MaxPositions)
            {

                if (Volume > VolumeMax)
                {
                    Volume = VolumeMax;
                }
                ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
                ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
            }
        }

//================================================================================
//                                                                          OnTick
//================================================================================
        protected override void OnTick()
        {


            // get all opened positions with label and put to openPositionsString
            var AllPositions = Positions.FindAll(MyLabel);
            openPositionsString = "";
            foreach (var position in AllPositions)
            {
                // BUY positions
                if (position.TradeType == TradeType.Buy)
                {
                    // OPENED POSITION STRING
                    openPositionsString += position.EntryTime + "_" + position.Id + "_" + position.SymbolCode + "_TRUE" + "_" + position.Volume + "_" + position.EntryPrice + "_" + position.StopLoss + "_" + position.TakeProfit + "_" + position.Label + "_" + position.Comment + "_##";
                }
                // SELL positions
                if (position.TradeType == TradeType.Sell)
                {
                    // OPENED POSITION STRING
                    openPositionsString += position.EntryTime + "_" + position.Id + "_" + position.SymbolCode + "_FALSE" + "_" + position.Volume + "_" + position.EntryPrice + "_" + position.StopLoss + "_" + position.TakeProfit + "_" + position.Label + "_" + position.Comment + "_##";
                }

            }


            //=============================================================================== save to file
            Print(File.Exists(filePath) ? "============== File exists." : "================= File does not exist.");

            if (!File.Exists(filePath))
            {
                _fileWriter = File.AppendText(filePath);
                //creating file
                _fileWriter.AutoFlush = true;
                //file will be saved on each change
                //_fileWriter.WriteLine("All opened positions <---> Server Time: " + Server.Time);
                _fileWriter.WriteLine(openPositionsString);
                // close file and next read from file
                _fileWriter.Close();
            }

            //===========================================================================  read from file
            var dFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            var fPath = Path.Combine(dFolder, "z.txt");

            string[] lines = System.IO.File.ReadAllLines(fPath);
            foreach (string line in lines)
            {
                // Use a tab to indent each line of the file.
                Print("Text from file: \t" + line);
            }

        }

//================================================================================
//                                                                          OnStop
//================================================================================
        protected override void OnStop()
        {
            Print("Bye Master ...");
        }
    }
}

 

second robot read from file opened positions:

using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
using System.IO;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class WriteToFileExample : Robot
    {

//================================================================================
//                                                                            Vars
//================================================================================
        // stream for file
        StreamWriter _fileWriter;
        // desktop folder
        static string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        // path to file
        string filePath = Path.Combine(desktopFolder, "z.txt");

        private string responseFromServer = "";
        private string openPositionsString = "";

        [Parameter("Position label", DefaultValue = "Master Position Label")]
        public string MyLabel { get; set; }

        [Parameter("Position comment", DefaultValue = "Master Position Comment")]
        public string MyComment { get; set; }

        [Parameter("Volume", DefaultValue = 10000)]
        public int Volume { get; set; }

        [Parameter("Volume Max", DefaultValue = 100000)]
        public int VolumeMax { get; set; }

        [Parameter("Stop Loss (pips)", DefaultValue = 30)]
        public int StopLoss { get; set; }

        [Parameter("Take Profit (pips)", DefaultValue = 15)]
        public int TakeProfit { get; set; }

        [Parameter(DefaultValue = 5)]
        public int MaxPositions { get; set; }

//================================================================================
//                                                                         OnStart
//================================================================================
        protected override void OnStart()
        {
            Print("Hello Master ... ");
        }

//================================================================================
//                                                                           OnBar
//================================================================================
        protected override void OnBar()
        {
            if (Positions.Count < MaxPositions)
            {

                if (Volume > VolumeMax)
                {
                    Volume = VolumeMax;
                }
                ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
                ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
            }
        }

//================================================================================
//                                                                          OnTick
//================================================================================
        protected override void OnTick()
        {


            //=============================================================================== if file exists
            Print(File.Exists(filePath) ? "============== File exists." : "================= File does not exist.");

            if (File.Exists(filePath))
            {
                //===========================================================================  read from file
                var dFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                var fPath = Path.Combine(dFolder, "z.txt");

                string[] lines = System.IO.File.ReadAllLines(fPath);
                foreach (string line in lines)
                {
                    // Use a tab to indent each line of the file.
                    Print("Opened positions line: \t" + line);
                    File.Delete(fPath);
                }
            }

        }

//================================================================================
//                                                                          OnStop
//================================================================================
        protected override void OnStop()
        {
            Print("Bye Master ...");
        }
    }
}

 


@breakermind

breakermind
07 Apr 2014, 14:29

RE: Write and read opened positions from one robot to another

and why it does not work?



string[] stringArray = { "one", "two", "three", "four" };
var last=stringArray.Last();
var first=stringArray.First();

thx


@breakermind

deansi
06 Mar 2017, 05:24

Caution this code may open trades every bar..!

I wouldnt run this live, it looks like the lines in the second bot:

//================================================================================
        protected override void OnBar()
        {
            if (Positions.Count < MaxPositions)
            {
 
                if (Volume > VolumeMax)
                {
                    Volume = VolumeMax;
                }
                ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
                ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit);
            }
        }
 
//================================================================================

would open a trade in both directions every single bar regardless of any input file or copy trades. In other words it wont do what it says and will empty your account.!


@deansi

mindbreaker
06 Mar 2017, 12:33

RE: Caution this code may open trades every bar..!

It was only example (for tests).

 

Working example with mysql databse you can see here:

https://github.com/fxstar/Copex-FxStar

Client: https://github.com/fxstar/Copex-FxStar/blob/master/_Copex-FxStar-Client-SL-TP-EquityStopLoss-SSL-Secure-Last.cs

Provider: https://github.com/fxstar/Copex-FxStar/blob/master/_Copex-FxStar-Trader.cs


@mindbreaker