module.jl
1 using Engine 2 using Engine.Exchanges 3 using Remote: Remote 4 using .Exchanges.ExchangeTypes.Python 5 using Engine.Data 6 using Engine.Misc 7 using .Misc: Lang 8 using .Misc.TimeTicks: @tf_str 9 using Pkg: Pkg as Pkg 10 11 include("logmacros.jl") 12 include("repl.jl") 13 include("strat.jl") 14 15 function _doinit() 16 # default to using lmdb store for data 17 @debug "Initializing LMDB zarr instance..." 18 Data.zi[] = Data.zinstance() 19 end 20 21 @doc """ Brings most planar modules into scope (generally used inside the repl). """ 22 macro environment!(pln=@__MODULE__) 23 quote 24 if !isdefined($(__module__), :pln) 25 const $(esc(:pln)) = $pln 26 end 27 using .pln.Exchanges 28 using .pln.Exchanges: Exchanges as exs 29 using .pln.Engine: 30 OrderTypes as ot, 31 Instances as inst, 32 Collections as co, 33 Simulations as sml, 34 Strategies as st, 35 Executors as ect, 36 SimMode as sm, 37 PaperMode as pm, 38 LiveMode as lm, 39 Engine as egn 40 41 using .pln.Engine.Lang: @m_str 42 using .pln.Engine.TimeTicks 43 using .TimeTicks: TimeTicks as tt 44 using .st: strategy 45 using .pln.Engine.Misc 46 using .Misc: Misc as mi 47 using .pln.Engine.Instruments 48 using .Instruments: Instruments as im 49 using .Instruments.Derivatives 50 using .Instruments.Derivatives: Derivatives as der 51 using .pln.Engine.Data: Data as da, DFUtils as du 52 53 using .da.Cache: save_cache, load_cache 54 using .pln.Engine.Processing: Processing as pro 55 using .pln.Remote: Remote as rmt 56 using .pln.Engine.LiveMode.Watchers 57 using .pln.Engine: fetch_ohlcv, load_ohlcv 58 using .Watchers: WatchersImpls as wi 59 60 if !isdefined($(__module__), :Stubs) 61 using Stubs 62 end 63 using .sml.Random 64 using .inst 65 using .ot 66 end 67 end 68 69 @doc """ Binds modules, types, functions commonly used inside a strategy module. """ 70 macro strategyenv!() 71 expr = quote 72 __revise_mode__ = :eval 73 using Planar: Planar as pln 74 using .pln.Engine 75 using .pln.Engine: Strategies as st 76 using .pln.Engine.Instances: Instances as inst 77 using .pln.Engine.OrderTypes: OrderTypes as ot 78 using .pln.Engine.Executors: Executors as ect 79 using .pln.Engine.LiveMode.Watchers: Watchers as wa 80 using .pln.Engine.Processing: Processing as pc 81 using .wa.WatchersImpls: WatchersImpls as wim 82 using .st 83 using .ect 84 using .ot 85 86 using .ot.ExchangeTypes 87 using .pln.Engine.Data 88 using .pln.Engine.Data.DFUtils 89 using .pln.Engine.Data.DataFrames 90 using .pln.Engine.Instruments 91 using .pln.Engine.Misc 92 using .pln.Engine.TimeTicks 93 using .pln.Engine.Lang 94 95 using .st: freecash, setattr!, attr 96 using .ect: orders 97 using .pln.Engine.Exchanges: getexchange!, marketsid 98 using .pc: resample, islast, iscomplete, isincomplete 99 using .Data: propagate_ohlcv!, stub!, load_ohlcv 100 using .Data.DataStructures: CircularBuffer 101 using .Misc: after, before, rangeafter, rangebefore, LittleDict, DFT 102 using .Misc: istaskrunning, start_task, stop_task 103 using .inst: AssetInstance 104 using .inst: asset, ohlcv, ohlcv_dict, raw, lastprice, bc, qc 105 using .inst: takerfees, makerfees, maxfees, minfees 106 using .inst: ishedged, cash, committed, instance, isdust, nondust 107 using .pln.Engine.LiveMode: updated_at!, @retry 108 using .pln.Engine.LiveMode: ohlcvmethod, ohlcvmethod! 109 using .Instruments: compactnum 110 using .Lang: @m_str 111 112 using .ect: OptSetup, OptRun, OptScore 113 using .ect: NewTrade 114 using .ect: WatchOHLCV, UpdateData, InitData 115 using .ect: UpdateOrders, CancelOrders 116 117 using .pln.Engine.LiveMode: asset_tasks, strategy_tasks, @retry 118 119 $(Planar.Engine.Strategies).@interface 120 121 const EXCID = ExchangeID(isdefined(@__MODULE__, :EXC) ? EXC : Symbol()) 122 if !isdefined(@__MODULE__, :MARGIN) 123 const MARGIN = NoMargin 124 end 125 const S{M} = Strategy{M,nameof(@__MODULE__()),typeof(EXCID),MARGIN} 126 const SC{E,M,R} = Strategy{M,nameof(@__MODULE__()),E,R} 127 end 128 esc(expr) 129 end 130 131 @doc """ Sets up the environment for contract management in the Planar module. 132 133 $(TYPEDSIGNATURES) 134 135 This macro imports necessary modules and aliases for managing contracts in the Planar module. 136 It prepares the environment for working with positions, leverage, and updates to leverage, margin, and positions. 137 """ 138 macro contractsenv!() 139 quote 140 using .inst: PositionOpen, PositionUpdate, PositionClose 141 using .inst: position, leverage, PositionSide 142 using .ect: UpdateLeverage, UpdateMargin, UpdatePositions 143 144 using .inst: ishedged, margin, additional, leverage, mmr, maintenance 145 using .inst: price, entryprice, liqprice, posside, collateral 146 end 147 end 148 149 @doc """ Sets up the environment for optimization in the Planar module. 150 151 $(TYPEDSIGNATURES) 152 153 This macro imports necessary modules and aliases for optimization in the Planar module. 154 It prepares the environment for working with simulation modes and statistics. 155 """ 156 macro optenv!() 157 quote 158 using Planar.Engine.SimMode: SimMode as sm 159 using Opt 160 using Opt.Metrics: Metrics as mt 161 end 162 end 163 164 export ExchangeID, @tf_str, @strategyenv!, @contractsenv!, @optenv!, @environment! 165 export Isolated, NoMargin