Packages

TIC Crypto Liquidity Integrator

Current section

Files

Jump to
tic src snapshot.erl
Raw

src/snapshot.erl

-module(snapshot).
-include("core.hrl").
-compile(export_all).
sync(Venue,Topic) -> Venue:left_cut(Topic).
check(Venue,Topic) -> Venue:right_cut(Topic).
book(Venue,Topic) -> [ X || X <- kvs:all(Venue:name(Topic)), element(#tick.size,X) /= 0].
sort(B1) -> lists:sort(fun(X,Y) -> element(#tick.price,X) > element(#tick.price,Y) end,B1).
ok(V,A,B,Shot) -> ok1(V,sort(B),sort(A),0,Shot,[]).
ok1(V,[],[],C,Shot,A) -> {ok,C,length(A),A};
ok1(V,[],Y,C,Shot,A) -> kvs:info(?MODULE,"Error Y: ~p Left ~p Count ~p~n",[hd(Y),length(tl(Y)),C]);
ok1(V,X, [],C,Shot,A) -> kvs:info(?MODULE,"Error X: ~p Left ~p Count ~p~n",[hd(X),length(tl(X)),C]);
ok1(V,[X|XR]=XF,[Y|YR]=YF,C,Shot,A) -> case element(#tick.price,Y) == element(#tick.price,X) of
true -> case element(#tick.size,Y) == element(#tick.size,X) of
true -> ok1(V,XR,YR,C+1,Shot,A);
false -> Acc = [V:shotlevel(Shot,element(#tick.price,X)),
pricelevel(element(1,Y),element(#tick.price,X))],
% kvs:info(?MODULE,"Size Mismatch~nTick: ~p~nBook: ~p~n",Acc),
ok1(V,XR,YR,C+1,Shot,[Acc|A])
end;
false -> case element(#tick.price,Y) > element(#tick.price,X) of
true -> ok1(V,XF,YR,C+1,Shot,A);
false -> ok1(V,XR,YF,C+1,Shot,A)
end
end.
shotlevel(Shot,Price) -> [ [tic:normal(P),tic:normal(S),I] || [P,S,I] <- Shot, tic:normal(P) == Price ].
pricelevel(Sym,Price) -> [ [P,S,I] || #order{price=P,uid=I,size=S} <- kvs:index(order,sym,Sym), P == Price ].
do(V,Topic) ->
mnesia:clear_table(tick),
application:get_env(tic,V,[]) ! {right, Topic, self()},
{A2,B2,Shot} = receive X -> X after 4000 -> {[],[],[]} end,
kvs:info(?MODULE,"~p~n",[{length(A2),length(B2)}]),
snapshot:ok(V,A2,B2,Shot).