Bot Engine Settings - Strooth Version [FEBE Mod]
stableDescription
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!