Bot Engine Settings - Strooth Version [FEBE Mod]

stable
By Strooth in Trading Bots Published June 2021 👁 1,234 views 💬 0 comments

Description

For providing the settings to Bot engine https://www.haasscripts.com/t/bot-engine-strooth-version-febe-mod/
HaasScript
HideOrderSettings();HideTradeAmountSettings()
---
--- Variables 
---
local name, type, tooltip, required, default, group, suggestions, command
---
--- Functions
---
local ParseOrderType = function(type)
    local ret
    local arr = {
    LimitOrderType,
    MarketOrderType,
    MakerOrCancelOrderType,
    NoTimeOutOrderType,
    StopLimitOrderType,
    StopMarketOrderType,
    TakeProfitLimitOrderType,
    TakeProfitMarketOrderType
    }
    for i=1, #arr do
        if type == i then
            ret = arr[i]
            break
        elseif type == arr[i] then
            ret = i
            break
        end
    end
    return ret 
end 
---
local listadd = function(list, item, index)
        list[IfNull(index, #list+1)] = item 
        return list 
 
end
---
--- Define Command
---
local cmd = {
title = 'BotEngine_Settings',
info = 'Used to configure settings for BotEngine',
}
DefineCommand(cmd.title, cmd.info)
---
--- Input Parameters from List
---
local input = {
name = 'params',
type = ListDynamicType,
tooltip = 'Parameters for BotEngine',
required = false,
default = {},
suggestions = 'NewArray',
}
--- Set Params
---
local params = DefineParameter(input.type, input.name, input.tooltip, input.required, input.default, input.suggestions)
local p = {}
---
--- Enable 
---
local enable = {
name = 'Enable',
type = BooleanType,
tooltip = 'Whether or not this position is enabled. Default: true',
required = false,
default = true ,
group = 'BotEngine',
suggestions = 'True, False',
}
---
local enabled = DefineParameter(enable.type, enable.name, enable.tooltip, enable.required, enable.default, enable.suggestions)
---
--- Input PositionIds from List
---
local pos = {
name = 'positionId',
type = DynamicType,
tooltip = 'PositionId for BotEngine',
required = false,
default = 'Position1',
suggestions = 'String/NewGuid()',
}
--- Set Position Ids
---
local posid = DefineParameter(pos.type, pos.name, pos.tooltip, pos.required, pos.default, pos.suggestions)
---
--- Orders Settings
--- 
local max_open = {
name = 'Open Order Limit' ,
type = NumberType,
required = false,
default = 1,
tooltip = 'Maximum amount of open orders. Default: 1',
group = 'BotEngine_Orders',
suggestions = 'Input, Number',
}
---
local size = {
name = 'Order Size' ,
type = NumberType,
required = false,
default = 1,
tooltip = 'Size of the order(s). Default: TradeAmount()',
group = 'BotEngine_Orders',
suggestions = 'Input, Number, TradeAmount',
}
---
local spread = {
name = 'Order Spread' ,
type = NumberType,
required = false,
default = 1,
tooltip = 'Spread between orders in percentage. If only one order, will be considered as the distance from current prices. Default: 0.1',
group = 'BotEngine_Orders',
suggestions = 'Input, Number',
}
---
local cancel_dist = {
name = 'Order Cancel Distance' ,
type = NumberType,
required = false,
default = 1,
tooltip = 'Cancel distance threshold percentage, after which orders will be cancelled and re-positioned. Default: 0 (deactivated)',
group = 'BotEngine_Orders',
suggestions = 'Input, Number',
}
---
local trigger = {
name = 'Order Trigger Percent' ,
type = NumberType,
required = false,
default = 1,
tooltip = 'Trigger Percent distance for Takeprofit and Stop order types. Default: 0.1 ',
group = 'BotEngine_Orders',
suggestions = 'Input, Number',
}
---
local bestprice = {
name = 'Order Uses Bestprice' ,
type = BooleanType,
required = false,
default = true,
tooltip = 'Set wether to use bestprice (Lowest or highest of enterprice, lastlong, lastshort) or currentprice (current low, current high). Default: true ',
group = 'BotEngine_Orders',
suggestions = 'Input, True/False',
}
---
p=listadd(p, {
    's_orders', {
        {'max_open', DefineParameter(max_open.type, max_open.name, max_open.tooltip, max_open.required, max_open.default, max_open.suggestions)},
        {'size', DefineParameter(size.type, size.name, size.tooltip, size.required, size.default, size.suggestions)},
        {'spread', DefineParameter(spread.type, spread.name, spread.tooltip, spread.required, spread.default, spread.suggestions)},
        {'cancel_dist', DefineParameter(cancel_dist.type, cancel_dist.name, cancel_dist.tooltip, cancel_dist.required, cancel_dist.default, cancel_dist.suggestions)},
        {'trigger', DefineParameter(trigger.type, trigger.name, trigger.tooltip, trigger.required, trigger.default, trigger.suggestions)},
        {'bestprice', DefineParameter(bestprice.type, bestprice.name, bestprice.tooltip, bestprice.required, bestprice.default, bestprice.suggestions)},
    }
})
---
--- Buy Settings
---
local buy_trigger = DefineParameter(BooleanType, 'Buy_Trigger', 'the trigger to enable the bot engine to start placing buy/long orders', false, false, 'true/false') 
---
local buy_order_timeout = {
name = 'Buy Order Timeout',
type = NumberType,
tooltip = 'Order timeout in seconds. Default: 600 (10 minutes)',
required = false,
default = 3600,
group = 'BotEngine_Buy',
suggestions = 'Input, Number',
}
local buy_order_refill = {
name = 'Buy Order Refill',
type = BooleanType,
tooltip = 'Whether or not the filled/cancelled orders should be refilled. Default: false',
required = false,
default = false,
group = 'BotEngine_Buy',
suggestions = 'True, False',
}
local buy_order_atr = {
name = 'Buy Order ATR Spread',
type = BooleanType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = false,
group = 'BotEngine_Buy',
suggestions = 'True, False',
}
local buy_order_atrint = {
name = 'Buy Order ATR Interval',
type = NumberType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = 1440,
group = 'BotEngine_Buy',
suggestions = 'InputInterval, Number',
}
local buy_order_atrper = {
name = 'Buy Order ATR Period',
type = NumberType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = 14,
group = 'BotEngine_Buy',
suggestions = 'Input, Number',
}
local buy_order_dist = {
name = 'Buy Order Distribution' ,
type = StringType,
required = false,
default = 1,
tooltip = 'Spread between orders should increase, decrease or remain flat. "INCREASING" = 1, "DECREASING" = -1, "FLAT" = 0',
group = 'BotEngine_Buy',
suggestions = 'Input, StringType, DynamicType',
}
local buy_order_type = {
name = 'Buy Order Type',
type = EnumType,
tooltip = 'Order type used for the buy orders. If MarketOrderType is used, the buy order(s) will execute immediately and will re-trigger after order_timeout if order_refill is set to TRUE. Default: LimitOrderType',
required = false,
default = LimitOrderType,
group = 'BotEngine_Buy',
suggestions = 'LimitOrderType, MarketOrderType, MakerOrCancelOrderType',
}
local buyordertype = DefineParameter(buy_order_type.type, buy_order_type.name, buy_order_type.tooltip, buy_order_type.required, buy_order_type.default, buy_order_type.suggestions)
local buy = {
    's_buy', 
    {
        {'order_timeout', DefineParameter(buy_order_timeout.type, buy_order_timeout.name, buy_order_timeout.tooltip, buy_order_timeout.required, buy_order_timeout.default, buy_order_timeout.suggestions)},
        {'order_refill', DefineParameter(buy_order_refill.type, buy_order_refill.name, buy_order_refill.tooltip, buy_order_refill.required, buy_order_refill.default,buy_order_refill.suggestions)},
        {'order_atr', DefineParameter(buy_order_atr.type, buy_order_atr.name, buy_order_atr.tooltip, buy_order_atr.required, buy_order_atr.default,buy_order_atr.suggestions)},
        {'order_atrint', DefineParameter(buy_order_atrint.type, buy_order_atrint.name, buy_order_atrint.tooltip, buy_order_atrint.required, buy_order_atrint.default,buy_order_atrint.suggestions)},
        {'order_atrper', DefineParameter(buy_order_atrper.type, buy_order_atrper.name, buy_order_atrper.tooltip, buy_order_atrper.required, buy_order_atrper.default,buy_order_atrper.suggestions)},
        {'order_distribution', DefineParameter(buy_order_dist.type, buy_order_dist.name, buy_order_dist.tooltip, buy_order_dist.required, buy_order_dist.default,buy_order_dist.suggestions)},
        {'order_type', ParseOrderType(buyordertype)}
    }
}
if buy_trigger == true then 
p=listadd(p, buy)
end 
---
--- Sell Settings
---
local sell_trigger = DefineParameter(BooleanType, 'sell_Trigger', 'the trigger to enable the bot engine to start placing sell/short orders', false, false, 'true/false') 
---
local sell_order_timeout = {
name = 'Sell Order Ttimeout',
type = NumberType,
tooltip = 'Order timeout in seconds. Default: 600 (10 minutes)',
required = false,
default = 600,
group = 'BotEngine_Sell',
suggestions = 'Input, Number',
}
local sell_order_refill = {
name = 'Sell Order Refill',
type = BooleanType,
tooltip = 'Whether or not the filled/cancelled orders should be refilled. Default: false',
required = false,
default = false ,
group = 'BotEngine_Sell',
suggestions = 'True, False',
}
local sell_order_atr = {
name = 'Sell Order ATR Spread',
type = BooleanType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = false,
group = 'BotEngine_Sell',
suggestions = 'True, False',
}
local sell_order_atrint = {
name = 'Sell Order ATR Interval',
type = NumberType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = 1440,
group = 'BotEngine_Sell',
suggestions = 'InputInterval, Number',
}
local sell_order_atrper = {
name = 'Sell Order ATR Period',
type = NumberType,
tooltip = 'Use atr for spread percentage calculation. Default: false',
required = false,
default = 14,
group = 'BotEngine_Sell',
suggestions = 'Input, Number',
}
local sell_order_dist = {
name = 'Sell Order Distribution' ,
type = StringType,
required = false,
default = 1,
tooltip = 'Spread between orders should increase, decrease or remain flat. "INCREASING" = 1, "DECREASING" = -1, "FLAT" = 0',
group = 'BotEngine_Sell',
suggestions = 'Input, StringType, DynamicType',
}
local sell_order_type = {
name = 'Sell Order Type',
type = EnumType,
tooltip = 'Order type used for the sell orders. If MarketOrderType is used, the sell order(s) will execute immediately and will re-trigger after order_timeout if order_refill is set to TRUE. Default: LimitOrderType',
required = false,
default = LimitOrderType,
group = 'BotEngine_Sell',
suggestions = 'LimitOrderType, MarketOrderType, MakerOrCancelOrderType',
}
local sellordertype = DefineParameter(sell_order_type.type, sell_order_type.name, sell_order_type.tooltip, sell_order_type.required, sell_order_type.default, sell_order_type.suggestions)
local sell = {
    's_sell',
    {
        {'order_timeout', DefineParameter(sell_order_timeout.type, sell_order_timeout.name, sell_order_timeout.tooltip, sell_order_timeout.required, sell_order_timeout.default, sell_order_timeout.suggestions)},
        {'order_refill', DefineParameter(sell_order_refill.type, sell_order_refill.name, sell_order_refill.tooltip, sell_order_refill.required, sell_order_refill.default, sell_order_refill.suggestions)},
        {'order_atr', DefineParameter(sell_order_atr.type, sell_order_atr.name, sell_order_atr.tooltip, sell_order_atr.required, sell_order_atr.default, sell_order_atr.suggestions)},
        {'order_atrint', DefineParameter(sell_order_atrint.type, sell_order_atrint.name, sell_order_atrint.tooltip, sell_order_atrint.required, sell_order_atrint.default, sell_order_atrint.suggestions)},
        {'order_atrper', DefineParameter(sell_order_atrper.type, sell_order_atrper.name, sell_order_atrper.tooltip, sell_order_atrper.required, sell_order_atrper.default, sell_order_atrper.suggestions)},
        {'order_distribution', DefineParameter(sell_order_dist.type, sell_order_dist.name, sell_order_dist.tooltip, sell_order_dist.required, sell_order_dist.default,sell_order_dist.suggestions)},
        {'order_type', ParseOrderType(sellordertype)}
    }
}
if sell_trigger == true then 
p=listadd(p, sell)
end 
---
--- StopLoss Settings
---
local sl_enabled = DefineParameter(BooleanType, 'Enable_StopLoss', 'Enable using stop loss bot engine module', false, true, 'true/false')
---
local sl_percent = {
name = 'Stop Loss Percent' ,
type = NumberType,
required = false,
default = 0.1,
tooltip = 'Stop-loss percentage value. Default: 0.1',
group = 'BotEngine_StopLoss',
suggestions = 'Input, Number',
}
local sl_order_type = {
name = 'Stop Loss Order Type',
type = EnumType,
tooltip = 'Type of the stop-loss order. If using natives, such as stops, BotEngine will place them beforehand. Default: LimitOrderType',
required = false,
default = LimitOrderType,
group = 'BotEngine_StopLoss',
suggestions = 'InputOrderType, LimitOrderType, MarketOrderType, MakerOrCancelOrderType, StopLimitOrderType, StopMarketOrderType, TakeProfitLimitOrderType, TakeProfitMarketOrderType',
}
---
local sl = {
    's_sl', {
        {'percent', DefineParameter(sl_percent.type, sl_percent.name, sl_percent.tooltip, sl_percent.required, sl_percent.default, sl_percent.suggestions)},
        {'order_type', ParseOrderType(DefineParameter(sl_order_type.type, sl_order_type.name, sl_order_type.tooltip, sl_order_type.required, sl_order_type.default, sl_order_type.suggestions))},
    }
}
if sl_enabled == true then 
p=listadd(p, sl)
end 
---
--- Take Profit
---
local tp_enabled = DefineParameter(BooleanType, 'Enable_TakeProfit', 'Enable using take profit bot engine module', false, true, 'true/false')
---
local tp_percent = {
name = 'Take Profit Percent' ,
type = NumberType,
required = false,
default = 0.1,
tooltip = 'Take-profit percentage value. Default: 0.1',
group = 'BotEngine_TakeProfit',
suggestions = 'Input, Number',
}
---
local tp_order_type = {
name = 'Take Profit Order Type',
type = EnumType,
tooltip = 'Type of the take-profit order. If using natives, such as stops, BotEngine will place them beforehand. Default: LimitOrderType',
required = false,
default = LimitOrderType,
group = 'BotEngine_TakeProfit',
suggestions = 'InputOrderType, LimitOrderType, MarketOrderType, MakerOrCancelOrderType, StopLimitOrderType, StopMarketOrderType, TakeProfitLimitOrderType, TakeProfitMarketOrderType',
}
---
local tp = {
    's_tp', {
        {'percent', DefineParameter(tp_percent.type, tp_percent.name, tp_percent.tooltip, tp_percent.required, tp_percent.default, tp_percent.suggestions)},
        {'order_type', ParseOrderType(DefineParameter(tp_order_type.type, tp_order_type.name, tp_order_type.tooltip, tp_order_type.required, tp_order_type.default, tp_order_type.suggestions))},
    }
}
if tp_enabled == true then
    p=listadd(p, tp)
end 
---
if enabled == true then 
params = listadd(params, {pid = posid, params = p})
end 
local output = {}
output.type = ListDynamicType
output.value = params
output.tooltip = 'Input parameters with added information'
output.suggestions = 'CC_BotEngine'
DefineOutput(output.type, output.value, output.tooltip, output.suggestions)
---

0 Comments

Sign in to leave a comment.

No comments yet. Be the first!