এই পরিমাণগত ট্রেডিং সিস্টেমটি এন্ট্রি সিগন্যালগুলির জন্য সম্ভাব্য প্রবণতা বিপরীততা সনাক্ত করতে বহুভুজীয় রিগ্রেশন বিশ্লেষণ ব্যবহার করে। এটি একটি পদ্ধতিগত, নিয়ম ভিত্তিক পদ্ধতিতে গতির উপর মূলধন অর্জনের লক্ষ্য।
কিভাবে কাজ করে
কৌশলটি সাম্প্রতিক উচ্চ এবং নিম্ন মূল্যগুলিতে বহুপদীয় রিগ্রেশন লাইনগুলিকে ফিট করে। এটি সাম্প্রতিক উচ্চ বা নিম্ন কতগুলি রিগ্রেশন পূর্বাভাস অতিক্রম করে তা ট্র্যাক করে।
যদি উচ্চ বা নিম্নের একটি নির্দিষ্ট প্রান্তিক ভাঙ্গন হয়, একটি ক্রয় বা বিক্রয় সংকেত উত্পন্ন হয় যা একটি উদীয়মান প্রবণতা নির্দেশ করে। ইনপুট শতাংশের উপর ভিত্তি করে স্টপ এবং লক্ষ্য নির্ধারণ করা হয়।
বিপণনের গতিশীলতা হ্রাস করার জন্য যখন ভোল্টেবিলিটি কোণ একটি সর্বনিম্ন অতিক্রম করে তখন পজিশনগুলি প্রবেশ করা হয়। ট্রেডগুলি নির্ধারিত ঝুঁকি পরামিতিগুলির উপর ভিত্তি করে পরিচালিত হয়।
উপকারিতা ও অসুবিধা
গাণিতিক বিশ্লেষণের উপর ভিত্তি করে প্রবণতা সংকেতগুলি স্বয়ংক্রিয় করে, কৌশলটি বিবেচনার ভিত্তিতে ট্রেডিংয়ের একটি উদ্দেশ্যমূলক পদ্ধতি সরবরাহ করে। অপ্টিমাইজেশন কর্মক্ষমতা উন্নত করতে পারে।
তবে, কার্ভ ফিটিং অতিরিক্ত অপ্টিমাইজেশনের দিকে পরিচালিত করতে পারে। যে কোনও প্রযুক্তিগত সিস্টেমের মতো, পারফরম্যান্স বাজারের অবস্থার উপর নির্ভর করে। কোনও কৌশল সতর্ক ঝুঁকি ব্যবস্থাপনা প্রতিস্থাপন করে না।
বিভিন্ন সময়সীমা, সম্পদ শ্রেণি এবং বাজারের পরিবেশ জুড়ে সাবধানে পরীক্ষা করা স্থিতিশীলতা মূল্যায়নের মূল চাবিকাঠি। কোনও কৌশলই বোকা-নিশ্চিত নয়, তাই ঝুঁকি পরিচালনা অত্যন্ত গুরুত্বপূর্ণ।
সামগ্রিকভাবে, পরিমাণগত কৌশলগুলি সম্ভাব্য ব্যবসায় সনাক্তকরণের জন্য একটি নিয়ম-ভিত্তিক পদ্ধতি সরবরাহ করে। গাণিতিক এবং প্রযুক্তিগত কৌশলগুলি মিশ্রিত করা সময় এবং ঝুঁকি ক্যালিব্রেশন উন্নত করতে পারে।
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-10 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // //Ultima version underground09 // strategy(title = " underground09", // shorttitle = "Under09", // overlay = true, // precision = 8, // calc_on_order_fills = true, // calc_on_every_tick = true, // backtest_fill_limits_assumption = 0, // default_qty_type = strategy.fixed, // default_qty_value = 2, // initial_capital = 10000, // pyramiding=5, // currency = currency.USD, // linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // var sl = 0.0 var tp = 0.0 var acumaldor_vxp = 0.0 var acomuldor_vol = 0.0 //stop_loss = input(defval=0.2, title="Porcentaje Stop Loss", type=input.float, step=0.2) stop_loss = input(defval=1.4, title="Porcentaje Stop Loss", type=input.float, step=0.2) //take_profit = input(defval=4.4, title="Porcentaje Take Profit", type=input.float, step=0.2) take_profit = input(defval=5.6, title="Porcentaje Take Profit", type=input.float, step=0.2) //pintar_trade = input(defval=false, title="Pintar trade TP SL") angulo_permitido = input(defval=26.8, title="Angulo permitido", type=input.float, step=0.2) backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Month", minval = 1) FromDay = input(defval = 1, title = "Day", minval = 1) FromYear = input(defval = 2019, title = "Year", minval = 2014) backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Month", minval = 1) ToDay = input(defval = 12, title = "Day", minval = 1) ToYear = input(defval = 9999, title = "Year", minval = 2014) Config = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool) //p = input(6) p = input(4) //length = input(30) length = input(26) // backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // x1 = bar_index x2 = sqrt(x1) y = high // S11 = sum(x2,length) - sqrt(sum(x1,length)) / length S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length // max1 = sma(x1,length) max2 = sma(x2,length) may = sma(y,length) b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12)) b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12)) b1 = may - b2*max1 - b3*max2 qr = b1 + b2*x1 + b3*x2 // yl = low // Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length // mayl = sma(yl,length) b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12)) b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12)) b1l = mayl - b2l*max1 - b3l*max2 qrl = b1l + b2l*x1 + b3l*x2 // period = round(p/2)+1 hh = qr[period] ll = qrl[period] countH = 0 countL = 0 buy=0 sell=0 // for i = 1 to period-1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 for i = period+1 to p+1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 if countH==p pivotH = high[period] buy := 1 if countL==p pivotL = low[period] sell := 1 // Angulo(_serie) => atan( _serie - _serie[1] ) * 180 / acos(-1) //calcular elvwap vxp = volume*hlc3 //:= signo de acumulador acumaldor_vxp := acumaldor_vxp + vxp acomuldor_vol := acomuldor_vol + volume vwap2 = acumaldor_vxp / acomuldor_vol pendiente = Angulo(vwap2) // plotshape(buy == 1 , text='⬆️', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto) if buy == 1 alert("Posible long",alert.freq_all ) plotshape(sell == 1 , text='⬇️', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto) if sell == 1 alert("Posible short",alert.freq_all ) // //if (backTestPeriod()) //strategy.entry("long", true, 1, when = buy == 1) // strategy.entry("short", false, 1, when = sell == 1) if buy == 1 and pendiente > angulo_permitido //if buy == 1 cantidad = round(strategy.equity / close ) strategy.entry("long", true, cantidad, comment = "Compra") sl := close * ( 1 - (stop_loss/100)) tp := close * ( 1 + (take_profit/100)) if sell == 1 and pendiente > angulo_permitido //if sell == 1 cantidad = round(strategy.equity / close ) strategy.entry("short", false, cantidad, comment = "Venta") sl := close * ( 1 + (stop_loss/100)) tp := close * ( 1 - (take_profit/100)) //Validaciones comprado = strategy.position_size > 0 //true si es positivo vendido = strategy.position_size < 0 //true si es negativo if comprado //Salir sl if close >= tp //plotshape(close >= tp, style=shape.xcross) strategy.close("long", comment="TP") //Salir tp if close <= sl strategy.close("long", comment="SL") if vendido //Salir sl if close <= tp strategy.close("short", comment="TP") //Salir tp if close >= sl strategy.close("short", comment="SL") //sl tp plot( sl , color =color.red, style=plot.style_cross) plot( tp , color= color.green , style=plot.style_circles) //color //bgcolor (comprado ? color.green: na) //bgcolor (vendido ? color.red: na) //if pintar_trade //bgcolor (close >= tp ? color.green : na, transp=80) //bgcolor (close >= sl ? color.red : na, transp=80)