/ Planar / src / module.jl
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