Modjoy-Liquidity Concepts [BigBeluga]
Introduction to Modjoy-Liquidity Concepts
Modjoy-Liquidity Concepts, powered by BigBeluga, represents a groundbreaking approach to trading and market analysis. This innovative methodology combines cutting-edge technology with advanced liquidity metrics to provide traders with a unique edge in the financial markets. In this article, we will delve into the core logic and trading strategy behind Modjoy-Liquidity Concepts, exploring how BigBeluga's advanced analytics can help optimize trading decisions.
Understanding Liquidity and Its Role in Trading
Liquidity is a crucial concept in trading, referring to the ability to buy or sell an asset quickly and at a stable price. Illiquid markets can lead to significant price volatility, making it challenging for traders to execute trades efficiently. BigBeluga's Modjoy-Liquidity Concepts addresses this issue by analyzing market liquidity and identifying opportunities for profitable trades.
Key Components of Modjoy-Liquidity Concepts
- Liquidity Metrics: BigBeluga's advanced analytics provide a range of liquidity metrics, including order book analysis, trade volume, and market depth. These metrics help traders assess market liquidity and make informed trading decisions.
- Market Sentiment Analysis: Modjoy-Liquidity Concepts incorporates market sentiment analysis to identify trends and potential trading opportunities. This involves analyzing market data, such as price movements, trading volumes, and order flow.
- Trade Optimization: The BigBeluga platform uses advanced algorithms to optimize trading decisions based on real-time market data and liquidity metrics. This ensures that traders can execute trades efficiently and minimize potential losses.
Trading Strategy Using Modjoy-Liquidity Concepts
The trading strategy behind Modjoy-Liquidity Concepts involves a combination of technical analysis, market sentiment analysis, and liquidity metrics. Traders can use the following steps to implement this strategy:
- Identify Trading Opportunities: Use BigBeluga's advanced analytics to identify potential trading opportunities based on market sentiment analysis and liquidity metrics.
- Analyze Market Liquidity: Assess market liquidity using order book analysis, trade volume, and market depth metrics to determine the best entry and exit points for trades.
- Execute Trades: Use the BigBeluga platform to execute trades based on real-time market data and optimized trading decisions.
- Monitor and Adjust: Continuously monitor market conditions and adjust trading decisions as needed to ensure optimal performance.
Benefits of Using Modjoy-Liquidity Concepts
The Modjoy-Liquidity Concepts approach offers several benefits to traders, including:
- Improved Trading Decisions: BigBeluga's advanced analytics and liquidity metrics provide traders with a unique edge in the financial markets, enabling them to make more informed trading decisions.
- Enhanced Risk Management: The platform's trade optimization capabilities help minimize potential losses and ensure that traders can manage risk more effectively.
- Increased Efficiency: Modjoy-Liquidity Concepts streamlines the trading process, allowing traders to execute trades quickly and efficiently.
Conclusion
Modjoy-Liquidity Concepts, powered by BigBeluga, represents a revolutionary approach to trading and market analysis. By combining advanced liquidity metrics, market sentiment analysis, and trade optimization, traders can gain a unique edge in the financial markets. Whether you're a seasoned trader or just starting out, this innovative methodology can help you optimize your trading decisions and achieve greater success in the markets.
Modjoy Exclusive Source Code:
//@version=5
indicator("Modjoy-Liquidity Concepts [BigBeluga]", shorttitle = "Liquidity Concepts [1.0.0]",overlay = true, max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500, max_bars_back = 500)
lookback = input.int(12,"Pivot Point Length",minval = 2,group = "Inputs")
liq_valid = input.int(7,"Liquidation Validity",minval = 1,tooltip = "Measure how many candles should max pass to count as liquidity. Ex: if set to 7, the liquidation should happen in those 7 bars; otherwise, it is not valid.",inline = "AA",group = "Inputs")
liq_bool = input.bool(true,"Use Pivot Length",inline = "AA",group = "Inputs")
switch liq_bool
true => liq_valid := lookback
false => na
=> liq_valid
HH_css = input.color(color.white, "HH & HL", inline = "HHLL2", group = "Inputs")
LL_css = input.color(color.gray , "LL & LH", inline = "HHLL2", group = "Inputs")
css_candle = input.string("CHoCH", "Candle Coloring",options = ["CHoCH","Default"])
// bt_show = input.bool(false,"Show feedbacks result",group = "Settings")
show_liq = input.bool(false,"Hide Liquidity Swipe",group = "Settings")
show_pivot = input.bool(false,"Hide Pivot Point",group = "Settings")
show_wick = input.bool(false,"Hide Liquidation Wicks Point",group = "Settings")
css_bull = input.color(#089981 , "Bull CHoCH", inline = "Color 1", group = "Colors trend")
css_bear = input.color(color.red, "Bear CHoCH", inline = "Color 1", group = "Colors trend")
css_up = input.color(color.gray, "Up Candle", inline = "Color 2", group = "Colors trend")
css_dn = input.color(color.black, "Down Candle", inline = "Color 2", group = "Colors trend")
major_trans = input.int(80,"Transp Major Liquidation",0,100,inline = "trans1",group = "Liquidations Color")
minor_trans = input.int(90,"Transp Minor Liquidation",0,100,inline = "trans2",group = "Liquidations Color")
liq_bear_minor = input.color(color.gray,"Bearish Liquidity Minor Swipe", group = "Liquidations Color")
liq_bull_minor = input.color(color.gray,"Bullish Liquidity Minor Swipe", group = "Liquidations Color")
liq_bear_major = input.color(color.purple,"Bearish Liquidity Major Swipe", group = "Liquidations Color")
liq_bull_major = input.color(color.aqua,"Bullish Liquidity Major Swipe", group = "Liquidations Color")
liq_wick_lh = input.color(color.orange, "Bearish Liquidation wick", group = "Liquidations Color")
liq_wick_hl = input.color(color.aqua, "Bearish Liquidation wick", group = "Liquidations Color")
lbl_size = input.int(1,"Pivot Text size",1,maxval = 5, group = "Text size")
lbl_t = switch lbl_size
1 => size.tiny
2 => size.small
3 => size.normal
4 => size.large
5 => size.huge
txt_size = input.int(1,"Market structure Text size",1,maxval = 5, group = "Text size")
txt_t = switch txt_size
1 => size.tiny
2 => size.small
3 => size.normal
4 => size.large
5 => size.huge
transline = 0
BOS_bull_css = input.color(color.white, "Bullish BOS", inline = "BOS1", group = "BOS and CHoCH colors")
BOS_bear_css = input.color(color.gray , "Bullish BOS", inline = "BOS2", group = "BOS and CHoCH colors")
CHOCH_bull_css = input.color(color.white, "Bullish CHoCH", inline = "BOS1", group = "BOS and CHoCH colors")
CHOCH_bear_css = input.color(color.gray , "Bearish CHoCH", inline = "BOS2", group = "BOS and CHoCH colors")
switch show_liq
true => major_trans := 100, minor_trans := 100
false => na
colinv = color.new(color.white,100) // gay
type bar
float o = open
float h = high
float l = low
float c = close
float v = volume
int idx = bar_index
int t = time
// type col
// color gray = color.gray
// color black = color.black
// color green = color.green
// color red = color.red
// color blue = color.blue
// color purple = color.purple
// color ared = #e60000
// color ablue = #3366ff
// color inv = #ffffff00
type zBin
float[] LH
float[] HL
float[] LL
float[] HH
int[] LHindex
int[] HLindex
int[] LLindex
int[] HHindex
float[] LHchoch
float[] HLchoch
float[] LLchoch
float[] HHchoch
int[] LHchochIndex
int[] HLchochIndex
int[] LLchochIndex
int[] HHchochIndex
float[] _popLH
int[] _popLHidx
var bin = zBin.new(
array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
, array.new()
)
bar = bar.new()
// col = col.new()
var int itrend = 0
f_drawLine(x1, y1, x2, y2, color, widh, bBar, txt, down, dashed,transline) =>
var line id = na
id := line.new(na, na, na, na, xloc = xloc.bar_index, style = dashed ? line.style_dashed : line.style_solid)
line.set_x1(id ,x1)
line.set_y1(id ,y1)
line.set_x2(id ,x2)
line.set_y2(id ,y2)
line.set_color(id, color.new(color,transline))
line.set_width(id, widh)
structure_lbl = label.new(int(math.avg(x1, bBar)), y1, txt
, color = colinv
, textcolor = color
, style = down ? label.style_label_down : label.style_label_up
, size = txt_t)
f_drawBox(left, top, right, bottom, bgcolor, bcolor, trans) =>
var box id = na
id := box.new(left, top, right, bottom)
box.set_bgcolor(id,color.new(bgcolor,trans))
box.set_border_width(id, 1)
box.set_border_color(id, color.new(bcolor,100))
// && => HH LL LH
ph = ta.pivothigh(lookback, lookback)
pl = ta.pivotlow(lookback, lookback)
iff_1 = pl ? -1 : na // Trend direction
hl = ph ? 1 : iff_1
iff_2 = pl ? pl : na // similar to zigzag but may have multiple highs/lows
zz = ph ? ph : iff_2
valuewhen_1 = ta.valuewhen(hl, hl, 1)
valuewhen_2 = ta.valuewhen(zz, zz, 1)
zz := pl and hl == -1 and valuewhen_1 == -1 and pl > valuewhen_2 ? na : zz
valuewhen_3 = ta.valuewhen(hl, hl, 1)
valuewhen_4 = ta.valuewhen(zz, zz, 1)
zz := ph and hl == 1 and valuewhen_3 == 1 and ph < valuewhen_4 ? na : zz
valuewhen_5 = ta.valuewhen(hl, hl, 1)
valuewhen_6 = ta.valuewhen(zz, zz, 1)
hl := hl == -1 and valuewhen_5 == 1 and zz > valuewhen_6 ? na : hl
valuewhen_7 = ta.valuewhen(hl, hl, 1)
valuewhen_8 = ta.valuewhen(zz, zz, 1)
hl := hl == 1 and valuewhen_7 == -1 and zz < valuewhen_8 ? na : hl
zz := na(hl) ? na : zz
findprevious() => // finds previous three points (b, c, d, e)
ehl = hl == 1 ? -1 : 1
loc1 = 0.0
loc2 = 0.0
loc3 = 0.0
loc4 = 0.0
xx = 0
for x = 1 to 1000 by 1
if hl[x] == ehl and not na(zz[x])
loc1 := zz[x]
xx := x + 1
break
ehl := hl
for x = xx to 1000 by 1
if hl[x] == ehl and not na(zz[x])
loc2 := zz[x]
xx := x + 1
break
ehl := hl == 1 ? -1 : 1
for x = xx to 1000 by 1
if hl[x] == ehl and not na(zz[x])
loc3 := zz[x]
xx := x + 1
break
ehl := hl
for x = xx to 1000 by 1
if hl[x] == ehl and not na(zz[x])
loc4 := zz[x]
break
[loc1, loc2, loc3, loc4]
isNot() =>
float a = na
float b = na
float c = na
float d = na
float e = na
if not na(hl)
[loc1, loc2, loc3, loc4] = findprevious()
a := zz
b := loc1
c := loc2
d := loc3
e := loc4
e
_hh = zz and a > b and a > c and c > b and c > d
_ll = zz and a < b and a < c and c < b and c < d
_hl = zz and (a >= c and b > c and b > d and d > c and d > e or a < b and a > c and b < d)
_lh = zz and (a <= c and b < c and b < d and d < c and d < e or a > b and a < c and b > d)
[_hh, _ll, _hl, _lh]
[_hh, _ll, _hl, _lh] = isNot()
float res = na
float sup = na
res := _lh ? zz : res[1]
sup := _hl ? zz : sup[1]
int trend = na
iff_3 = close < sup ? -1 : nz(trend[1])
trend := close > res ? 1 : iff_3
res := trend == 1 and _hh or trend == -1 and _lh ? zz : res
sup := trend == 1 and _hl or trend == -1 and _ll ? zz : sup
rechange = res != res[1]
suchange = sup != sup[1]
//table int
var int tot_structure_bull = 0
var int tot_structure_bear = 0
var float tot_bear_liq = 0
var float tot_bull_liq = 0
var float tot_liq_sell = 0
var float tot_liq_buy = 0
// && => Pivot HH and CHoCH
var bxHHchOchPoint = array.new()
color onetap = na
float src_onetap_lh = na
float src_onetap_hl = na
bodyLength = math.abs(close - open)
downWickLength = low - math.min(open, close)
downWickBigger = downWickLength > bodyLength
if _hh
id = show_pivot ? na : label.new(bar.idx[lookback], bar.h[lookback], text = "HH", text_font_family = font.family_monospace, style = label.style_label_down, size = lbl_t, color = colinv, textcolor = HH_css)
bin.HH.push(bar.h[lookback])
bin.HHindex.push(bar.idx[lookback])
bxHHchOchPoint.push(bar.h[1])
if bin.HH.size() > 0
if bar.idx % (lookback * 2) == 0
bin.HHchoch.push(bin.HH.pop())
bin.HHchochIndex.push(bin.HHindex.pop())
if bin.HH.size() > 0
for j = 0 to bin.HH.size()
if bin.HH.size() <= 0
break
else
var _popHH = array.new()
var _popHHidx = array.new()
var int barsince = ta.barssince(ta.crossunder(bar.c, bin.HH.last()))
if ta.crossover(bar.h, bin.HH.last())
bool choch = false
if itrend < 0
choch := true
txt = choch ? "CHoCH" : "BOS"
_popHH.push(bin.HH.pop())
_popHHidx.push(bin.HHindex.pop())
if math.abs(_popHHidx.last() - bar.idx) > 500
break
else
col = choch ? CHOCH_bull_css : BOS_bull_css
itrend := 1
tot_structure_bull += 1
f_drawLine(_popHHidx.last(), _popHH.last(), bar.idx, _popHH.last(), col, 1, bar.idx, txt, true, txt == "BOS" ? true : false, transline)
if bin.HHchoch.size() > 0
for j = 0 to bin.HHchoch.size()
if bin.HHchoch.size() <= 0
break
else
var _popHHchoch = array.new()
var _popHHchochIndex = array.new()
if ta.crossover(bar.c, bin.HHchoch.last())
bool choch = false
if itrend < 0
choch := true
txt = choch ? "CHoCH" : "BOS"
_popHHchoch.push(bin.HHchoch.pop())
_popHHchochIndex.push(bin.HHchochIndex.pop())
if math.abs(_popHHchochIndex.last() - bar.idx) > 500
break
else
col = choch ? CHOCH_bull_css : BOS_bull_css
f_drawLine(_popHHchochIndex.last(), _popHHchoch.last(), bar.idx, _popHHchoch.last(), col, 1, bar.idx, txt, true, txt == "BOS" ? true : false, transline)
itrend := 1
tot_structure_bull += 1
if bxHHchOchPoint.size() > 0
barsince = ta.barssince(ta.crossover(bar.h ,bxHHchOchPoint.last()))
var float lastLvl = na
var int index = na
if ta.crossover(bar.h, bxHHchOchPoint.last())
lastLvl := bxHHchOchPoint.last()
index := bar.idx[1]
if ta.crossunder(bar.h, bxHHchOchPoint.last()) and barsince <= liq_valid
var maxtop = array.new()
for j = 0 to barsince
maxtop.push(bar.h[j])
f_drawBox(index, maxtop.max(), bar.idx, lastLvl, liq_bear_major, liq_bear_major, major_trans)
tot_liq_sell += ta.cum(volume)
lastLvl := na
index := na
maxtop.clear()
else if ta.crossunder(bar.h, bxHHchOchPoint.last()) and barsince > liq_valid
lastLvl := na
index := na
// && => Pivot LL and CHoCH
var bxLLchOch = array.new()
if _ll
id = show_pivot ? na : label.new(bar.idx[lookback], bar.l[lookback], text = "LL", text_font_family = font.family_monospace, style = label.style_label_up, size = lbl_t, color = colinv, textcolor = LL_css)
bin.LL.push(bar.l[lookback])
bin.LLindex.push(bar.idx[lookback])
bxLLchOch.push(bar.l[1])
if bin.LL.size() > 0
if bar.idx % (lookback * 2) == 0
bin.LLchoch.push(bin.LL.pop())
bin.LLchochIndex.push(bin.LLindex.pop())
if bin.LL.size() > 0
for j = 0 to bin.LL.size()
if bin.LL.size() <= 0
break
else
var _popLL = array.new()
var _popLLidx = array.new()
var int barsince = ta.barssince(ta.crossunder(bar.c, bin.LL.last()))
if ta.crossunder(bar.l, bin.LL.last())
bool choch = false
if itrend > 0
choch := true
txt = choch ? "CHoCH" : "BOS"
_popLL.push(bin.LL.pop())
_popLLidx.push(bin.LLindex.pop())
if math.abs(_popLLidx.last() - bar.idx) > 500
break
else
col = choch ? CHOCH_bear_css : BOS_bear_css
f_drawLine(_popLLidx.last(), _popLL.last(), bar.idx, _popLL.last(), col, 1, bar.idx, txt, false, txt == "BOS" ? true : false, transline)
itrend := -1
tot_structure_bear += 1
if bin.LLchoch.size() > 0
for j = 0 to bin.LLchoch.size()
if bin.LLchoch.size() <= 0
break
else
var _popLLchoch = array.new()
var _popLLchochIndex = array.new()
if ta.crossunder(bar.c, bin.LLchoch.last())
bool choch = false
if itrend > 0
choch := true
txt = choch ? "CHoCH" : "BOS"
_popLLchoch.push(bin.LLchoch.pop())
_popLLchochIndex.push(bin.LLchochIndex.pop())
if math.abs(_popLLchochIndex.last() - bar.idx) > 500
break
else
col = choch ? CHOCH_bear_css : BOS_bear_css
f_drawLine(_popLLchochIndex.last(), _popLLchoch.last(), bar.idx, _popLLchoch.last(), col, 1, bar.idx, txt, false, txt == "BOS" ? true : false, transline)
itrend := -1
tot_structure_bear += 1
if bxLLchOch.size() > 0
barsince = ta.barssince(ta.crossunder(bar.l ,bxLLchOch.last()))
var float lastLvl = na
var int index = na
if ta.crossunder(bar.h, bxLLchOch.last())
lastLvl := bxLLchOch.last()
index := bar.idx[1]
if ta.crossover(bar.h, bxLLchOch.last()) and barsince <= liq_valid
var maxtop = array.new()
for j = 0 to barsince
maxtop.push(bar.l[j])
f_drawBox(index, lastLvl, bar.idx[1], maxtop.min(), liq_bull_major, liq_bull_major, major_trans)
tot_liq_buy += ta.cum(volume)
lastLvl := na
index := na
maxtop.clear()
else if ta.crossover(bar.l, bxLLchOch.last()) and barsince > liq_valid
lastLvl := na
index := na
// && => Pivot HL
var bxHLPoint = array.new()
if _hl
id = show_pivot ? na : label.new(bar.idx[lookback], bar.l[lookback], text = "HL", text_font_family = font.family_monospace, style = label.style_label_up, size = lbl_t, color = colinv, textcolor = HH_css)
bin.HL.push(bar.l[lookback])
bin.HLindex.push(bar.idx[lookback])
bxHLPoint.push(bar.l[lookback])
if bin.HL.size() > 0
for j = 0 to bin.HL.size()
if bin.HL.size() <= 0
break
else
if bin.HL.size() > 0
var _popHL = array.new()
var _popHLidx = array.new()
var int barsince = ta.barssince(ta.crossunder(bar.c, bin.HL.last()))
if ta.crossunder(bar.l, bin.HL.last())
_popHL.push(bin.HL.pop())
_popHLidx.push(bin.HLindex.pop())
if math.abs(_popHLidx.last() - bar.idx) > 500
break
else
show_pivot ? na : f_drawLine(_popHLidx.last(), _popHL.last(), bar.idx, _popHL.last(), HH_css, 1, bar.idx, "", false, false, 0)
if bar.c > _popHL.last() and bar.o > _popHL.last() and math.abs(close - open) <= math.abs(low - (close > open ? open : close))
src_onetap_hl := low
if bxHLPoint.size() > 0
barsince = ta.barssince(ta.crossunder(bar.l ,bxHLPoint.last()))
var float lastLvl = na
var int index = na
if ta.crossunder(bar.h, bxHLPoint.last())
lastLvl := bxHLPoint.last()
index := bar.idx[1]
if ta.crossover(bar.h, bxHLPoint.last()) and barsince <= liq_valid
var maxtop = array.new()
for j = 0 to barsince
maxtop.push(bar.l[j])
f_drawBox(index, lastLvl, bar.idx[1], maxtop.min(), liq_bear_minor, liq_bear_minor, minor_trans)
tot_liq_buy += ta.cum(volume)
lastLvl := na
index := na
maxtop.clear()
else if ta.crossover(bar.l, bxHLPoint.last()) and barsince > liq_valid
lastLvl := na
index := na
// && => Pivot LH and Liquidity Swap
var bxLHPoint = array.new()
if _lh
id = show_pivot ? na : label.new(bar.idx[lookback], bar.h[lookback], text = "LH", text_font_family = font.family_monospace, style = label.style_label_down, size = lbl_t, color = colinv, textcolor = LL_css)
bin.LH.push(bar.h[lookback])
bin.LHindex.push(bar.idx[lookback])
bxLHPoint.push(bar.h[lookback])
if bin.LH.size() > 0
for j = 0 to bin.LH.size()
if bin.LH.size() <= 0
break
else
if ta.crossover(bar.h, bin.LH.last())
bin._popLH.push(bin.LH.pop())
bin._popLHidx.push(bin.LHindex.pop())
if math.abs(bin._popLHidx.last() - bar.idx) > 500
break
else
show_pivot ? na : f_drawLine(bin._popLHidx.last(), bin._popLH.last(), bar.idx, bin._popLH.last(), LL_css, 1, bar.idx, "", false, false, 0)
if bar.c < bin._popLH.last() and bar.o < bin._popLH.last() and math.abs(close - open) <= math.abs(high - (close > open ? close : open))
src_onetap_lh := high
if bxLHPoint.size() > 0
barsince = ta.barssince(ta.crossover(bar.h ,bxLHPoint.last()))
var float lastLvl = na
var int index = na
if ta.crossover(bar.h, bxLHPoint.last())
lastLvl := bxLHPoint.last()
index := bar.idx[1]
if ta.crossunder(bar.h, bxLHPoint.last()) and barsince <= liq_valid
var maxtop = array.new()
for j = 0 to barsince
maxtop.push(bar.h[j])
f_drawBox(index, maxtop.max(), bar.idx[1], lastLvl, liq_bull_minor, liq_bull_minor, minor_trans)
tot_liq_sell += ta.cum(volume)
lastLvl := na
index := na
maxtop.clear()
else if ta.crossunder(bar.h, bxLHPoint.last()) and barsince > liq_valid
lastLvl := na
index := na
css(x) =>
var color col = na
if x == "CHoCH"
col := itrend == 1 ? css_bull : css_bear
else if x == "Default"
col := bar.c > bar.o ? css_up : css_dn
col
css = css(css_candle)
c_src = close > open ? close : open
c_csrc = close > open ? open : close
int b_wick = 0
switch show_wick
false => na
true => b_wick := 100
plotcandle(bar.o ,bar.h, bar.l, bar.c, color = css, wickcolor = css, bordercolor = css,display = display.pane)
plotcandle(src_onetap_lh,c_src, c_src ,c_src, color = colinv,wickcolor = colinv,bordercolor = color.new(liq_wick_lh,b_wick),display = display.pane)
plotcandle(src_onetap_hl,c_csrc, c_csrc ,c_csrc, color = colinv,wickcolor = colinv,bordercolor = color.new(liq_wick_hl,b_wick),display = display.pane)
//src_onetap
// // && =>
⚠️ High Risk Warning
Trading Forex and Futures involves a very high degree of risk and may not be suitable for all investors. The high degree of leverage can result in the complete loss of your funds. These indicators are educational tools and do not guarantee profits. Please trade responsibly with capital you can afford to lose.