function Init() strategy:name("Bid-Triggered Buy"); strategy:description(""); strategy.parameters:addString("account", "Account to trade on", "", ""); strategy.parameters:setFlag("account", core.FLAG_ACCOUNT); strategy.parameters:addDouble("rate", "Bid price", "", 0); strategy.parameters:addInteger("amount", "Amount in Lots", "", 1, 1, 100); end local account; local offer_id; local base_unit_size; local amount; function Prepare() trade = instance.parameters.trade; local name = profile:id() .. "(" .. instance.parameters.rate .. ", " .. instance.parameters.amount .. " lots)"; instance:name(name); amount = instance.parameters.amount; account = instance.parameters.account; offer_id = core.host:findTable("offers"):find("Instrument", instance.bid:instrument()).OfferID; base_unit_size = core.host:execute("getTradingProperty", "minQuantity", instance.bid:instrument(), account); ExtSubscribe(1, nil, "t1", true, "tick"); end local triggered = false; function ExtUpdate(id, source, period) if triggered then return; end if core.crossesUnder(source, instance.parameters.rate, NOW) or source[NOW] == instance.parameters.rate then enter("B"); triggered = true; end end -- enter into the specified direction function enter(buy_sell) local valuemap, success, msg; valuemap = core.valuemap(); valuemap.OrderType = "OM"; valuemap.OfferID = offer_id; valuemap.AcctID = account; valuemap.Quantity = amount * base_unit_size; valuemap.BuySell = buy_sell; success, msg = terminal:execute(100, valuemap); if not(success) then terminal:alertMessage(instance.bid:instrument(), instance.bid[NOW], "Open order failed" .. msg, instance.bid:date(NOW)); return false; end return true; end dofile(core.app_path() .. "\\strategies\\standard\\include\\helper.lua");