Flash Crash Trade Bot

General

The following example shows how to make a simple FCB bot. It shows the usage of technologies like having many open orders.

Installation

  • Open the My documents\HTS\ScriptBots folder.

  • Create a new text file, name it simplefcb.cs

  • Open the file and paste the source code inside it

  • Save the file and start the HaasBot

  • Create a new custom scripted bot and you should be able to select an item called simplefcb

Source code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TradeServer.ScriptingDriver.DataObjects;
using TradeServer.ScriptingDriver.Interfaces;

namespace BotScripts
{
    public class SimpleFCBBot : IScriptBot
    {
		public string slot_buy_1 = "";
		public string slot_buy_2 = "";
		public string slot_buy_3 = "";

		public string slot_sell_1 = "";
		public string slot_sell_2 = "";
		public string slot_sell_3 = "";
		
        public string Name
        {
            get { return "Simple FCB-bot"; }
        }

		public ScriptBotType BotType
		{
            get { return ScriptBotType.SpotBot; }
        }
		
		private decimal _spread = 10.0M;
		
        public List<ScriptParameter> GetParameters()
        {
            List<ScriptParameter> res = new List<ScriptParameter>();
            res.Add(new ScriptParameter("Spread", ScriptParameterType.Double, _spread.ToString()));
            return res;
        }

        public void SetParameters(Dictionary<string, object> parameters)
        {
            foreach (var item in parameters) // lets just loop them all
            {
                if (item.Key == "Spread") { _spread = Convert.ToDecimal(item.Value); }
            }
        }

        public void Init()
        {

        }

        public void DoUpdate(ScriptBotContext context)
        {
            // Check for open orders
            if (context.OpenOrders.Count == 6)
            {
                context.Logger.Log("Perfect, all orders are set.");
                return;
            }

			if (slot_buy_1 == "" || !context.OpenOrders.Contains(slot_buy_1))
			{
				context.Logger.Log("Filling buy slot 1");
				var price = (decimal)context.PriceTick.Ask - _spread;
				slot_buy_1 = context.API.PlaceBuyOrder(context.TradeAmount, price);
			}
			
			if (slot_buy_2 == "" || !context.OpenOrders.Contains(slot_buy_2))
			{
				context.Logger.Log("Filling buy slot 2");
				var price = (decimal)context.PriceTick.Ask - (_spread * 2.0M);
				slot_buy_2 = context.API.PlaceBuyOrder(context.TradeAmount, price);
			}

			if (slot_buy_3 == "" || !context.OpenOrders.Contains(slot_buy_3))
			{
				context.Logger.Log("Filling buy slot 3");
				var price = (decimal)context.PriceTick.Ask - (_spread * 3.0M);
				slot_buy_3 = context.API.PlaceBuyOrder(context.TradeAmount, price);
			}		

			if (slot_sell_1 == "" || !context.OpenOrders.Contains(slot_sell_1))
			{
				context.Logger.Log("Filling sell slot 1");
				var price = (decimal)context.PriceTick.Bid + _spread;
				slot_sell_1 = context.API.PlaceSellOrder(context.TradeAmount, price);
			}
			
			if (slot_sell_2 == "" || !context.OpenOrders.Contains(slot_sell_2))
			{
				context.Logger.Log("Filling sell slot 2");
				var price = (decimal)context.PriceTick.Bid + (_spread * 2.0M);
				slot_sell_2 = context.API.PlaceSellOrder(context.TradeAmount, price);
			}

			if (slot_sell_3 == "" || !context.OpenOrders.Contains(slot_sell_3))
			{
				context.Logger.Log("Filling sell slot 3");
				var price = (decimal)context.PriceTick.Bid + (_spread * 3.0M);
				slot_sell_3 = context.API.PlaceSellOrder(context.TradeAmount, price);
			}	
        }
    }
}

Last updated