Knocks/BackEnd/Knoks.Operate/Views/VW_EndedKnoks.sql

47 lines
2.8 KiB
Transact-SQL

CREATE VIEW [dbo].[VW_EndedKnoks]
AS SELECT k.Duration, k.CreateDate, k.KnokId KnokId, k.Currency1 Currency1, k.Currency2 Currency2, k.Currency, t.TickerDisplayName as MarketDisplayName, k.ExchangeId, k.CreatorUserId as UserId,
EntryPriceFrom, EntryPriceTo, ExitPriceFrom, ExitPriceTo, StopLoss, e.ExchangeName, k.TickerId,
(CASE
WHEN k.EntryPriceTouched = 1 AND k.ExitPriceTouched = 1 AND k.StopLossTouched = 0
THEN --if successful knok (knok that touched entry and exit) ;result = (mid exit -mid entry) / mid entry x 100
(((k.ExitPriceFrom + ExitPriceTo) / 2) - ((k.EntryPriceFrom + EntryPriceTo) / 2)) / ((k.EntryPriceFrom + EntryPriceTo) / 2)
WHEN (k.StopLossTouched = 0 AND k.ExitPriceTouched = 0 AND status.IsClosed = 0) OR status.IsClosed = 1
THEN --else; result = (close rate -mid entry) / mid entry x 100
IIF(ISNULL(k.CloseRate, 0) = 0, 0, (k.CloseRate - ((k.EntryPriceFrom + EntryPriceTo) / 2)) / ((k.EntryPriceFrom + EntryPriceTo) / 2))
WHEN k.StopLossTouched = 1
THEN --if touched SL; result = (SL -mid entry) / mid entry x 100
(k.StopLoss - ((k.EntryPriceFrom + EntryPriceTo) / 2)) / ((k.EntryPriceFrom + EntryPriceTo) / 2)
ELSE 0 -- Unknown
END) AS CurrentProfit,
k.DistanceFromTarget,
k.PotentialProfitValue,
k.CloseRate AS CurrentPrice,
ISNULL(k.UserReview, 0) AS UserReview,
(SELECT count(1) FROM UserKnoks uk WHERE uk.KnokId = k.KnokId) AS Purchases,
u.HasAvatar, u.UserName, u.FirstName, u.LastName,
k.ExitPriceTouched,
(CASE
WHEN k.EntryPriceTouched = 1 AND k.ExitPriceTouched = 1 AND k.StopLossTouched = 0 THEN 4 -- Successful
WHEN k.StopLossTouched = 0 AND k.ExitPriceTouched = 0 AND status.IsClosed = 0 THEN 1 -- ExitPriceMissed
WHEN k.StopLossTouched = 1 THEN 2 -- Stop loss reached
WHEN status.IsClosed = 1 THEN 3 --ClosedByKnokser
ELSE 0 -- Unknown
END) AS EndedStatus,
-- amount of purchases * knok price * knokser commission (70%)
(SELECT SUM(pk.Price) FROM UserKnoks uk
INNER JOIN Signals pk ON pk.KnokId = uk.KnokId
WHERE pk.knokId = k.knokId
GROUP BY uk.knokId) AS PricePoolData,
CloseDate, CloseRate,
CAST(ISNULL(s.Decimals, 8) AS smallint) AS Precision
FROM [dbo].[Signals] k with(nolock)
LEFT JOIN [dbo].[_KnokStatuses] status on k.KnokStatusId = status.KnokStatusId
LEFT JOIN [dbo].[Users] u on u.UserId = k.CreatorUserId
LEFT JOIN [dbo].[Exchanges] e on e.ExchangeId = k.ExchangeId
LEFT JOIN [dbo].[Tickers] t on t.TickerId = k.TickerId
LEFT JOIN (select count(f.UserId) UserFollowers, f.FollowUserId userId from [dbo].[UserFollows] f group by f.FollowUserId) follow on follow.userId = k.CreatorUserId
left join [dbo].[Symbols] s on s.Symbol = k.Currency2
Where (status.KnokStatusId = 5 OR status.KnokStatusId = 6) -- 5 - Resolved, 6 - Resolved and closed