liquidity level finder
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
def find_liquidity_levels(swings, tolerance=0.015, max_distance=100):
|
||||
levels = []
|
||||
highs = [s for s in swings if s["type"] == "high"]
|
||||
lows = [s for s in swings if s["type"] == "low"]
|
||||
|
||||
used = set()
|
||||
for i, h1 in enumerate(highs):
|
||||
if i in used:
|
||||
continue
|
||||
cluster = [h1]
|
||||
for j, h2 in enumerate(highs):
|
||||
if j != i and j not in used:
|
||||
if abs(h1["price"] - h2["price"]) <= tolerance and abs(h1["index"] - h2["index"]) <= max_distance:
|
||||
cluster.append(h2)
|
||||
used.add(j)
|
||||
if len(cluster) >= 2:
|
||||
avg_price = sum(s["price"] for s in cluster) / len(cluster)
|
||||
levels.append({
|
||||
"price": avg_price,
|
||||
"type": "equal_highs",
|
||||
"count": len(cluster),
|
||||
"indexes": [s["index"] for s in cluster]
|
||||
})
|
||||
used.add(i)
|
||||
|
||||
used = set()
|
||||
for i, l1 in enumerate(lows):
|
||||
if i in used:
|
||||
continue
|
||||
cluster = [l1]
|
||||
for j, l2 in enumerate(lows):
|
||||
if j != i and j not in used:
|
||||
if abs(h1["price"] - h2["price"]) <= tolerance and abs(h1["index"] - h2["index"]) <= max_distance:
|
||||
cluster.append(l2)
|
||||
used.add(j)
|
||||
if len(cluster) >= 2:
|
||||
avg_price = sum(s["price"] for s in cluster) / len(cluster)
|
||||
levels.append({
|
||||
"price": avg_price,
|
||||
"type": "equal_lows",
|
||||
"count": len(cluster),
|
||||
"indexes": [s["index"] for s in cluster]
|
||||
})
|
||||
used.add(i)
|
||||
|
||||
return levels
|
||||
Reference in New Issue
Block a user