LogoLogo
Back to HaasOnline.comSwitch to Trade Platform
3.x
3.x
  • Welcome
  • Getting Started
    • Using Local API Server
    • Authentication
    • Response
      • Error Codes
  • HaasScript
    • Using HaasScript
      • HaasScript Facts
      • Charting
      • Order Handling
      • Interval
      • Input Fields
      • Positions Handling
        • Fee correction
      • Position Information
      • Memory Management
      • Optimizations
      • Signal Handling
      • Trading
    • Script Editor
      • Syntax
      • Parameters
      • Interaction
    • Visual Editor
      • Blocks
      • Parameters
      • Flow Control
      • Interaction
    • Custom Commands
    • Tutorials
      • Trade Bot Guide
        • Creating A Trade Bot
          • Visual Editor Guide
          • Script Editor Guide
          • Custom Containers
        • Customizing Indicators
        • Customizing Safeties
        • Customizing Insurances
        • Creating Easy Indicators
      • Unmanaged Trading Guide
        • Executing Orders
        • Managing Orders
        • Managing Positions
        • Managing Wallet
      • Script Editor
        • Classes
        • MadHatter BBands
        • Percentage Price Change
      • Visual Editor
        • Importing Scripts
        • SmoothRSI
        • Scalper Bot
    • Commands
      • Array Helpers
      • Charting
      • Constants
      • Custom Commands Helpers
      • Easy Indicators
      • Easy Insurances
      • Easy Safeties
      • Equations
      • Flow Control
      • Input Fields
      • Input Settings
      • Mathematical
      • Memory Helpers
      • Miscellaneous
      • Order Handling
      • Order Information
      • Position Information
      • Position Prices
      • Price Data
      • Price Market Information
      • Profit Information
      • Settings
      • Signal Helpers
      • String Helpers
      • Technical Analysis
      • Technical Analysis Helpers
      • Time Information
      • Trade Actions (Managed)
      • Trade Actions (Unmanaged)
      • Trade Bot
      • Trade Market Information
      • Wallet
  • API Endpoints
    • Software API
    • Market Data API
    • Account Data API
    • Trade Data API
    • Advanced Order API
    • Trade Bot API
    • Custom Trade Bot API
    • ENUMS
    • Data Objects
  • Examples
    • Script Bots (C#)
      • Scalper Trade Bot
      • Flash Crash Trade Bot
    • Script Indicators (C#)
      • Indicator Script
      • Technical Analysis Library
    • Pshai Scripts (C#)
      • BBands Ext
      • BBands Ext v2
      • Chaikin A/D Line
      • Calibrator
      • Pshai's RVI
    • Scripted Driver
  • Other Resources
    • YouTube
    • Guides & Tutorials
    • Questions & Answers
    • Community Projects
  • Need Help?
    • Ask on Discord
    • Submit Support Ticket
Powered by GitBook
On this page
  • General
  • Installation
  • Source code

Was this helpful?

  1. Examples
  2. Script Bots (C#)

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);
			}	
        }
    }
}
PreviousScalper Trade BotNextScript Indicators (C#)

Last updated 6 years ago

Was this helpful?