ইচিমোকু কিনকো হিও + শিফট ট্রেন্ড সুপারপজিশন কোয়ান্টেটিভেটিভ স্ট্র্যাটেজি


সৃষ্টির তারিখ: 2024-02-20 16:46:56 অবশেষে সংশোধন করুন: 2024-02-20 16:46:56
অনুলিপি: 0 ক্লিকের সংখ্যা: 768
1
ফোকাস
1617
অনুসারী

ইচিমোকু কিনকো হিও + শিফট ট্রেন্ড সুপারপজিশন কোয়ান্টেটিভেটিভ স্ট্র্যাটেজি

ওভারভিউ

এই কৌশলটি একটি সামঞ্জস্যপূর্ণ সূচক এবং চলমান ওভারল্যাপিং সূচকগুলির সমন্বয় যা শেয়ারের দামের সম্ভাব্য প্রবণতা আবিষ্কার করে এবং কেনার এবং বিক্রয়ের সময় নির্ধারণ করে। এই কৌশলটি প্রবণতার দিকনির্দেশ এবং ট্রেডিং সংকেত প্রদানের জন্য একটি সামঞ্জস্যপূর্ণ লাইন গণনা করে, চলমান ওভারল্যাপিং সূচকগুলির সাথে মিলিত হয়, আরআরএসআই ব্যবহার করে ট্রেডিং ঝুঁকি নিয়ন্ত্রণের জন্য ফিল্টার করা হয়।

কৌশল নীতি

এই কৌশলটি মূলত তিনটি অংশে বিভক্তঃ

  1. একনজরে সমতা সূচক: একনজরে সমতা সূচকটি মূলত টার্ন পয়েন্ট (টেনকান-সেন) এবং বেস পয়েন্ট (কিজুন-সেন) দুটি লাইন ব্যবহার করে গঠিত, যা একনজরে সমতা স্তম্ভের আকৃতি গঠন করে। টার্ন পয়েন্ট লাইনটি দামের স্বল্পমেয়াদী প্রবণতা প্রতিনিধিত্ব করে এবং বেস পয়েন্ট লাইনটি দামের মধ্যমেয়াদী প্রবণতা প্রতিনিধিত্ব করে। টার্ন পয়েন্ট লাইন এবং বেস পয়েন্ট লাইনের ক্রস ক্রয় এবং বিক্রয় সংকেত গঠন করে।

  2. মুভমেন্টাল ওভারল্যাপিং সূচক: মুভমেন্টাল ওভারল্যাপিং সূচকটি প্রবণতার দিক নির্ধারণ করে বিচ্ছিন্ন আপেক্ষিক মানের অন্তর্বর্তী এবং স্লাইড আপেক্ষিক মান গণনা করে। যখন দামগুলি বাইরের অঞ্চলের অঞ্চল থেকে মধ্যবর্তী অঞ্চলের অঞ্চলে প্রবেশ করে তখন একটি লেনদেনের সংকেত উত্পন্ন হয়।

  3. RSI সূচক: RSI সূচকটি মূল্যের ওভারওভার বা ওভারসোল্ড কিনা তা নির্ধারণের জন্য ব্যবহৃত হয়, ওভারবই লাইন এবং ওভারসোল্ড ব্যাপ্তি সেট করে, মুভমেন্টাল ওভারল্যাপিং সূচকের সাথে একত্রে লেনদেনের সংকেত দিয়ে ক্রয় এবং বিক্রয় সংকেত প্রেরণ করে।

বিশেষত, এই কৌশলটি ট্রান্সফার পয়েন্ট লাইন এবং বেস পয়েন্ট লাইনের উপর গোল্ড ফর্ক (যেটি ট্রান্সফার পয়েন্ট লাইনের উপর বেস পয়েন্ট লাইন অতিক্রম করে) এবং ডেড ফর্ক (যেটি ট্রান্সফার পয়েন্ট লাইনের নীচে বেস পয়েন্ট লাইন অতিক্রম করে) পর্যবেক্ষণ করে। এটি ক্রয়-বিক্রয় করার সময় নির্ধারণ করে। একই সাথে সামগ্রিক প্রবণতার দিকনির্দেশের জন্য একটি চলমান ওভারলেড সূচককে সংযুক্ত করে। যখন দুটি সূচক একই সাথে সংকেত দেয়, তখন যদি আরএসআই সূচকটি কোনও ওভার-বিক্রয় না দেখায় তবে এটি একটি লেনদেনের সংকেত দেয়।

কৌশলগত সুবিধা

এই কৌশলটি বিভিন্ন সূচক ব্যবহার করে ট্রেন্ডের দিকনির্দেশনা এবং ট্রেডিংয়ের সময় নির্ধারণের সাথে মিলিত হয়, যা বিচারযোগ্যতা বাড়িয়ে তুলতে পারে, সূচকগুলির মধ্যে পারস্পরিক সুবিধাগুলি ব্যবহার করে, একটি একক সূচকের বিচার ভুল হওয়ার সম্ভাবনা এড়ানো যায়। নির্দিষ্ট সুবিধাগুলি নিম্নরূপঃ

  1. টার্নওভার পয়েন্ট লাইন এবং বেস পয়েন্ট লাইন ব্যবহার করে একটি সামঞ্জস্যপূর্ণ সূচক গঠন করা হয়, যা স্বল্পমেয়াদী প্রবণতা এবং মধ্যমেয়াদী প্রবণতা উভয়ই প্রতিফলিত করে, যা একক এমএ সূচকের চেয়ে উচ্চতর নির্ভুলতা নির্ধারণ করে।

  2. চলমান ওভারল্যাপিং সূচকটি সামগ্রিক প্রবণতার দিকনির্দেশের জন্য নির্ভুল এবং নির্ভরযোগ্য, এবং প্রথম দৃষ্টিতে ভারসাম্য সূচকের সাথে পরিপূরক গঠন করে।

  3. আরএসআই সূচকটি ফিল্টারিংয়ের শর্তগুলি সেট করে যা কার্যকরভাবে মিথ্যা ব্রেকআউটগুলি ফিল্টার করে এবং ট্রেডিংয়ের ঝুঁকি এড়ায়।

  4. এই কৌশলটি সহজেই বোঝা যায় এবং বাস্তবায়িত হয় এবং এটি পরিমাণগত লেনদেনের জন্য উপযুক্ত।

কৌশলগত ঝুঁকি

যদিও এই কৌশলটি একাধিক সূচক ব্যবহার করে বিচারকে সমন্বিত করে, যা কিছু পরিমাণে ভুল সিদ্ধান্তের সম্ভাবনা হ্রাস করে, তবে নিম্নলিখিত প্রধান ঝুঁকিগুলি রয়েছেঃ

  1. প্যারামিটার সেটিংয়ের ঝুঁকি। ডাইভার্শন পয়েন্ট লাইন, বেঞ্চমার্ক পয়েন্ট লাইন ইত্যাদির মতো সূচক প্যারামিটারগুলির ভুল সেটিং ট্রেডিং সিগন্যালের ত্রুটির কারণ হতে পারে। বিভিন্ন জাতের সাথে খাপ খাইয়ে নিতে প্যারামিটারগুলি অপ্টিমাইজ করা দরকার।

  2. প্রবণতা বিপরীত ঝুঁকি

  3. আরএসআই ফিল্টারিংয়ের শর্তগুলি খুব কঠোর। ঝুঁকিগুলি আরও বেশি ব্যবসায়ের সুযোগগুলি বাদ দিতে পারে। আরএসআইয়ের প্যারামিটারগুলি যথাযথভাবে শিথিল করা যেতে পারে।

সমাধানঃ

  1. বিভিন্ন জাতের জন্য প্যারামিটার অপ্টিমাইজেশনের জন্য আরও ঐতিহাসিক ডেটা ব্যবহার করুন, যাতে প্যারামিটার সেটিং যুক্তিসঙ্গত হয়।

  2. কৌশলটিতে একটি স্টপ লস মেকানিজম যুক্ত করুন। যখন দাম বিপরীত দিকে স্টপ লস লাইন ভেঙে যায় তখন পজিশন থেকে বেরিয়ে আসুন।

  3. RSI এর প্যারামিটারগুলিকে অপ্টিমাইজ করুন, সঠিকভাবে ফিল্টারিং শর্তগুলি শিথিল করুন এবং ঝুঁকি নিয়ন্ত্রণের গ্যারান্টি দিয়ে আরও বেশি ব্যবসায়ের সুযোগ পান।

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

এই কৌশলটি আরও উন্নত করা যেতে পারেঃ

  1. মেশিন লার্নিং অ্যালগরিদম যুক্ত করুন যাতে কৌশলগত প্যারামিটারগুলি বাজারের পরিবর্তনের সাথে গতিশীলভাবে সামঞ্জস্য করতে পারে এবং কৌশলগত অভিযোজনযোগ্যতা উন্নত করতে পারে।

  2. কৌশলগত উপাদানগুলিকে মডিউল হিসাবে প্যাকেজ করা, মডিউল পরিচালনার জন্য, দ্রুত প্রতিস্থাপনের জন্য বা পৃথকভাবে পরীক্ষার জন্য অপ্টিমাইজ করা উপাদানগুলিকে উন্নত করার জন্য, বিকাশের দক্ষতা বাড়ানোর জন্য।

  3. ডেটা ইন্টিগ্রেশন মডিউল যুক্ত করুন, আরও ডেটা উত্স থেকে বাজার তথ্য সংগ্রহ করুন, উচ্চ মানের প্রশিক্ষণ সেট তৈরি করুন এবং মেশিন লার্নিং কার্যকারিতা উন্নত করুন।

  4. পুনঃনির্ধারণের সরঞ্জামগুলি বিকাশ করুন যাতে কৌশলগুলি সম্পূর্ণরূপে পুনঃনির্ধারণ করা যায়, বিভিন্ন মূল্যায়ন সূচক রেকর্ড করা যায়, প্যারামিটার অপ্টিমাইজেশান এবং মডেল নির্বাচনকে সহায়তা করে।

  5. ক্লাউড কম্পিউটিং প্ল্যাটফর্ম ব্যবহার করে কৌশল সিস্টেম স্থাপন করুন, নমনীয় কম্পিউটিং সংস্থানগুলি ব্যবহার করে দ্রুত সমান্তরাল প্রতিক্রিয়া, প্যারামিটার সমন্বয় পুনরাবৃত্তি ত্বরান্বিত করুন এবং কৌশল বিকাশের ব্যয় হ্রাস করুন।

সারসংক্ষেপ

এই কৌশলটি একনজরে ভারসাম্য সূচক এবং চলমান ওভারল্যাপিং সূচক দুটি সূচক ব্যবহার করে, দামের প্রবণতা এবং লেনদেনের সময় নির্ধারণের জন্য। একই সাথে, আরএসআই সূচকগুলি ফিল্টার করার জন্য, লেনদেনের ঝুঁকি নিয়ন্ত্রণের জন্য। এই ধরনের একাধিক সূচক সমন্বয় কৌশলটি বিচারযোগ্যতা বাড়িয়ে তুলতে পারে এবং আরও ভাল কৌশল কার্যকারিতা অর্জন করতে পারে। তবে কৌশলটিতে প্যারামিটার সেট এবং সূচক নির্বাচন এখনও বিভিন্ন জাতের জন্য ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের প্রয়োজন। কৌশলটি প্যারামিটার সমন্বয় এবং সূচক নির্বাচন করার জন্য এখনও বিভিন্ন পণ্যের জন্য ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের প্রয়োজন, যাতে কৌশলটি দ্রুত বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে এবং দীর্ঘস্থায়ী মুনাফার ক্ষমতা রাখে।

কৌশল সোর্স কোড
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KryptoNight

//@version=4
// comment/uncomment Study/Strategy to easily switch modes
// study("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - alerts", shorttitle="IchiCloud + RSI - alerts", overlay=true)
// ============================================================================== Strategy mode - uncomment to activate
strategy("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - strategy", shorttitle="IchiCloud + RSI - Strategy Tester Mode", overlay=true, pyramiding = 0,
  currency = currency.EUR, initial_capital = 2000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100,
  calc_on_every_tick = true, calc_on_order_fills = true, commission_type = strategy.commission.percent, commission_value = 0.15)
// ==============================================================================

// ------------------------------------------------------------------------------

ichiCloud_offset   = input(false, title="Standard Ichimoku Cloud")                  // with the visual offset
ichiCloud_noOffset = input(true,  title="Ichimoku Cloud - no offset - no repaint")  // without the visual offset

conversion_prd = input(9, minval=1, title="Conversion Line Period - Tenkan-Sen")
baseline_prd   = input(27, minval=1, title="Base Line Period - Kijun-Sen")
baselineA_prd  = input(52, minval=1, title="Base Line Period - Kijun-Sen (auxiliary)")
leadingSpan_2prd = input(52, minval=1, title="Lagging Span 2 Periods - Senkou Span B")
displacement = input(26, minval=0, title="Displacement: (-) Chikou Span; (+) Senkou Span A")
extra_bars = input(1, minval=0, title="Displacement: additional bars")
laggingSpan_src = input(close, title="Lagging Span price source - Chikou-Span")

donchian(len) => avg(lowest(len), highest(len))
displ = displacement-extra_bars
// ------------------------------------------------------------------------------
// OFFSET:
conversion = donchian(conversion_prd)   // Conversion Line - Tenkan-Sen (9 Period)
baseline  = donchian(baseline_prd)      // Base Line - Kijun-Sen (26 Period)
baselineA = donchian(baselineA_prd)     // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA = avg(conversion, baseline)
leadingSpanB = donchian(leadingSpan_2prd)
laggingSpan = laggingSpan_src

// Color - bullish, bearish
col_cloud = leadingSpanA>=leadingSpanB ? color.green : color.red

// Cloud Lines
spanA = plot(ichiCloud_offset? leadingSpanA : na, offset=displ, title="Offset: Lead Line 1 - Senkou Span A cloud", color=color.green)
spanB = plot(ichiCloud_offset? leadingSpanB : na, offset=displ, title="Offset: Lead Line 2 - Senkou Span B cloud", color=color.red)
fill(spanA, spanB, color=col_cloud, transp=80, title="Offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p = plot(ichiCloud_offset? conversion : na, title="Offset: Conversion Line - Tenkan-Sen", color=#0496ff)
standard_p = plot(ichiCloud_offset? baseline : na, title="Offset: Base Line - Kijun-Sen", color=#991515)
standardA_p = plot(ichiCloud_offset? baselineA : na, title="Offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal)
lagging_Span_p = plot(ichiCloud_offset? laggingSpan : na, offset=-displ, title="Offset: Chikou Span (Lagging Span)", color=#459915)

// ------------------------------------------------------------------------------
// NO OFFSET:
conversion_noOffset = conversion[displ] // Conversion Line - Tenkan-Sen (9 Period)
baseline_noOffset  = baseline[displ]    // Base Line - Kijun-Sen (26 Period)
baselineA_noOffset = baselineA[displ]   // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA_noOffset = leadingSpanA[displ*2]
leadingSpanB_noOffset = leadingSpanB[displ*2]
laggingSpan_noOffset = laggingSpan[0]

// Color - bullish, bearish
col_cloud_noOffset = leadingSpanA_noOffset>=leadingSpanB_noOffset ? color.green : color.red

// Cloud Lines
spanA_noOffset = plot(ichiCloud_noOffset? leadingSpanA_noOffset : na, title="No offset: Lead Line 1 - Senkou Span A cloud", color=color.green, transp=0)
spanB_noOffset = plot(ichiCloud_noOffset? leadingSpanB_noOffset : na, title="No offset: Lead Line 2 - Senkou Span B cloud", color=color.red, transp=0)
fill(spanA_noOffset, spanB_noOffset, color=col_cloud_noOffset, transp=80, title="No offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p_noOffset = plot(ichiCloud_noOffset? conversion_noOffset : na, title="No offset: Conversion Line - Tenkan-Sen", color=#0496ff, transp=0)
baseline_p_noOffset = plot(ichiCloud_noOffset? baseline_noOffset : na, title="No offset: Base Line - Kijun-Sen", color=#991515, transp=0)
baselineA_p_noOffset = plot(ichiCloud_noOffset? baselineA_noOffset : na, title="No offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal, transp=0)
laggingSpan_p_noOffset = plot(ichiCloud_noOffset? laggingSpan_noOffset : na, title="No offset: Chikou Span (Lagging Span)", color=#459915, transp=0)

// ==============================================================================
// Conditions & Alerts (based on the lines without offset)

maxC = max(leadingSpanA_noOffset,leadingSpanB_noOffset)
minC = min(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Trend start signals: crosses between Chikou Span (Lagging Span) and the Cloud (Senkou Span A, Senkou Span B)
uptrend_start   = crossover(laggingSpan_noOffset,maxC)
downtrend_start = crossunder(laggingSpan_noOffset,minC)

// Trends
uptrend   = laggingSpan_noOffset>maxC // Above Cloud
downtrend = laggingSpan_noOffset<minC // Below Cloud

// No trend: choppy trading - the price is in transition
notrend = maxC>=laggingSpan_noOffset and laggingSpan_noOffset>=minC

// Confirmations
uptrend_confirm   = crossover(leadingSpanA_noOffset,leadingSpanB_noOffset)
downtrend_confirm = crossunder(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Signals - crosses between Conversion Line (Tenkan-Sen) and Base Line (Kijun-Sen)
bullish_signal = crossover(conversion_noOffset,baseline_noOffset)
bearish_signal = crossunder(conversion_noOffset,baseline_noOffset)

// Various alerts
alertcondition(uptrend_start,   title="Uptrend Started",   message="Uptrend Started")
alertcondition(downtrend_start, title="Downtrend Started", message="Downtrend Started")

alertcondition(uptrend_confirm,   title="Uptrend Confirmed",   message="Uptrend Confirmed")
alertcondition(downtrend_confirm, title="Downtrend Confirmed", message="Downtrend Confirmed")

alertcondition(bullish_signal, title="Buy Signal",  message="Buy Signal")
alertcondition(bearish_signal, title="Sell Signal", message="Sell Signal")

rsi_OBlevel = input(50, title="RSI Filter: Overbought level (0 = off)")
rsi_OSlevel = input(100,title="RSI Filter: Oversold level (100 = off)")
rsi_len = input(14,title="RSI Length")
rsi_src = input(close,title="RSI Price source")
rsi = rsi(rsi_src,rsi_len)

// Strategy -------------------------------
long_signal  = bullish_signal and uptrend   and rsi<=rsi_OSlevel // breakout filtered by the rsi
exit_long    = bearish_signal and uptrend
short_signal = bearish_signal and downtrend and rsi>=rsi_OBlevel // breakout filtered by the rsi
exit_short   = bullish_signal and downtrend

// Strategy alerts
alertcondition(long_signal, title="Long Signal - Uptrend",      message="Long Signal - Uptrend")
alertcondition(exit_long,   title="Long Exit Signal - Uptrend", message="Long Exit Signal - Uptrend")

alertcondition(short_signal, title="Long Signal - Downtrend",       message="Long Signal - Downtrend")
alertcondition(exit_short,   title="Short Exit Signal - Downtrend", message="Short Exit Signal - Downtrend")

// Plot areas for trend and transition
color_trend = uptrend? #00FF00 : downtrend? #FF0000 : notrend? color.new(#FFFFFF, 50) : na
fill(spanA_noOffset, spanB_noOffset, color=color_trend, transp=90, title="No offset: Ichimoku Cloud - Lagging Span & Cloud based coloring")

plotshape(ichiCloud_noOffset?uptrend_start:na, title="No offset: Uptrend Started", color=color.green, style=shape.circle, location=location.belowbar, size=size.tiny, text="Up")
plotshape(ichiCloud_noOffset?downtrend_start:na, title="No offset: Downtrend Started", color=color.red, style=shape.circle,location=location.abovebar, size=size.tiny, text="Down")

plotshape(ichiCloud_noOffset?uptrend_confirm:na, title="No offset: Uptrend Confirmed", color=color.green, style=shape.circle, location=location.belowbar, size=size.small, text="Confirm Up")
plotshape(ichiCloud_noOffset?downtrend_confirm:na, title="No offset: Downtrend Confirmed", color=color.red, style=shape.circle, location=location.abovebar, size=size.small, text="Confirm Down")

plotshape(ichiCloud_noOffset?long_signal:na, title="No offset: Long Signal", color=#00FF00, style=shape.triangleup, location=location.belowbar, size=size.small, text="Long")
plotshape(ichiCloud_noOffset?exit_long:na, title="No offset: Exit Long Signal", color=color.fuchsia, style=shape.triangledown, location=location.abovebar, size=size.small, text="Exit long")

plotshape(ichiCloud_noOffset?short_signal:na, title="No offset: Short Signal", color=#FF0000, style=shape.triangledown, location=location.abovebar, size=size.small, text="Short")
plotshape(ichiCloud_noOffset?exit_short:na, title="No offset: Exit Short Signal", color=color.fuchsia, style=shape.triangleup, location=location.belowbar, size=size.small, text="Exit short")

// ============================================================================== Strategy Component - uncomment to activate
if (long_signal)
    strategy.entry("Long",strategy.long)
if (exit_long)
    strategy.close("Long")
// if (short_signal)
//    strategy.entry("Short",strategy.short)
// if (exit_short)
//    strategy.close("Short")
// ==============================================================================


//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © colinmck


RSI_Period = input(10, title='RSI Length')
SF = input(5, title='RSI Smoothing')
QQE = input(2.438, title='Fast QQE Factor')
ThreshHold = input(10, title="Thresh-hold")

src = close
Wilders_Period = RSI_Period * 3 - 1

Rsi = rsi(src, RSI_Period)
RsiMa = ema(Rsi, SF)
AtrRsi = abs(RsiMa[1] - RsiMa)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
dar = ema(MaAtrRsi, Wilders_Period) * QQE

longband = 0.0
shortband = 0.0
trend = 0

DeltaFastAtrRsi = dar
RSIndex = RsiMa
newshortband = RSIndex + DeltaFastAtrRsi
newlongband = RSIndex - DeltaFastAtrRsi
longband := RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1], newlongband) : newlongband
shortband := RSIndex[1] < shortband[1] and RSIndex < shortband[1] ? min(shortband[1], newshortband) : newshortband
cross_1 = cross(longband[1], RSIndex)
trend := cross(RSIndex, shortband[1]) ? 1 : cross_1 ? -1 : nz(trend[1], 1)
FastAtrRsiTL = trend == 1 ? longband : shortband

// Find all the QQE Crosses

QQExlong = 0
QQExlong := nz(QQExlong[1])
QQExshort = 0
QQExshort := nz(QQExshort[1])
QQExlong := FastAtrRsiTL < RSIndex ? QQExlong + 1 : 0
QQExshort := FastAtrRsiTL > RSIndex ? QQExshort + 1 : 0

//Conditions

qqeLong = QQExlong == 1 ? FastAtrRsiTL[1] - 50 : na
qqeShort = QQExshort == 1 ? FastAtrRsiTL[1] - 50 : na

// Plotting

plotshape(qqeLong, title="QQE long", text="Long", textcolor=color.white, style=shape.labelup, location=location.belowbar, color=color.green, transp=0, size=size.tiny)
plotshape(qqeShort, title="QQE short", text="Short", textcolor=color.white, style=shape.labeldown, location=location.abovebar, color=color.red, transp=0, size=size.tiny)

// Alerts

alertcondition(qqeLong, title="Long", message="Long")
alertcondition(qqeShort, title="Short", message="Short")