কৌশল অনুসরণ করে সহজ প্রবণতা

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-১৪ ১৮ঃ০১ঃ০৭
ট্যাগঃ

কৌশলগত যুক্তি

এই কৌশলটি বাজারের প্রবণতার দিকনির্দেশনা এবং প্রবণতা অনুসরণ করার জন্য চলমান গড় এবং হেল কার্ভকে একত্রিত করে।

মূল যুক্তি হচ্ছে:

  1. ম্যাকগিনলি ডায়নামিক এমএ সামগ্রিক প্রবণতার দিকনির্দেশনা দেয়

  2. হুল কার্ভ ক্রসওভারগুলি নির্দিষ্ট দীর্ঘ / সংক্ষিপ্ত সংকেত উত্পন্ন করে

  3. সিগন্যাল যাচাইকরণের জন্য ইচ্ছাকৃত নিশ্চিতকরণ সূচক

  4. স্টপ লস এবং লাভ নেওয়ার নীতির মাধ্যমে ঝুঁকি ব্যবস্থাপনা

  5. হুল বক্ররেখা বিপরীত হলে অবস্থান বন্ধ করুন

এই কৌশলটির লক্ষ্য হল প্রবণতা অনুসরণ করে যান্ত্রিকভাবে পদ্ধতিগতকরণ করা, স্বতন্ত্র স্বতন্ত্র প্রভাবকে হ্রাস করা।

সুবিধা

  • এমএ সামগ্রিক দিকনির্দেশনা বিচার করে, নমনীয় নিশ্চিতকরণ

  • হুল পরিষ্কার দীর্ঘ / সংক্ষিপ্ত সংকেত

  • নিয়ম-ভিত্তিক ঝুঁকি ব্যবস্থাপনা ত্রুটিগুলিকে কমিয়ে দেয়

ঝুঁকি

  • প্যারামিটার টিউনিং এবং ফিল্টার অপ্টিমাইজেশান প্রয়োজন

  • প্রবণতা সঠিকতা অনিশ্চয়তা আছে

  • হুল বক্ররেখা বিলম্ব সংকেত প্রবণ

সংক্ষিপ্তসার

এই কৌশলটি বাজারের গতির সাথে সামঞ্জস্য রেখে ট্রেন্ড অনুসরণকারী অপারেশনগুলিকে পদ্ধতিগত করার চেষ্টা করে। তবে প্যারামিটার অপ্টিমাইজেশন এবং সূচক সীমাবদ্ধতা স্থিতিশীলতার জন্য সতর্কতার প্রয়োজন।


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Milleman
//@version=4
strategy("Millebot", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.04)

// Risk management settings
Spacer2 = input(false, title="=== Risk management settings ===")
Risk = input(1.0, title="% Risk")/100
RRR = input(2,title="Risk Reward Ratio",step=0.1,minval=0,maxval=20)
SL = input(5,title="StopLoss %",step=0.25)/100

// Baseline : McGinley Dynamic
Spacer3 = input(false, title="=== Baseline - Switch L/S ===")
McG_Source = input(close, title="McGinley source")
McG_length = input(50, title=" McG length", minval=1)
McG_LS_Switch = 0.0
McG_LS_Switch := na(McG_LS_Switch[1]) ? ema(McG_Source, McG_length) : McG_LS_Switch[1] + (McG_Source - McG_LS_Switch[1]) / (McG_length * pow(McG_Source/McG_LS_Switch[1], 4))

// Confirmation indicator
Spacer4 = input(false, title="=== Confirmation indicator ===")
C1_Act = input(false, title=" Confirmation indicator Activation")
C1_src = input(ohlc4, title="Source")
C1_len = input(5,title="Length")
C1 = sma(C1_src,C1_len)

// Entry indicator : Hull Moving Average
Spacer5 = input(false, title="=== Entry indicator configuration ===")
src = input(ohlc4, title="Source")
length = input(50,title="Length HMA")
HMA = ema(wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))),1)

//VARIABLES MANAGEMENT
TriggerPrice = 0.0, TriggerPrice := TriggerPrice[1]
TriggerxATR = 0.0, TriggerxATR := TriggerxATR[1]
SLPrice = 0.0, SLPrice := SLPrice[1], TPPrice = 0.0, TPPrice := TPPrice[1]
isLong = false, isLong := isLong[1], isShort = false, isShort := isShort[1]

//LOGIC
GoLong = crossover(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] > 1) and (not C1_Act or C1>C1[1])
GoShort = crossunder(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] < 1) and (not C1_Act or C1<C1[1])

//FRAMEWORK

//Long
if GoLong and not GoLong[1]
    isLong := true, TriggerPrice := close
    TPPrice := TriggerPrice * (1 + (SL * RRR))
    SLPrice := TriggerPrice * (1-SL)
    Entry_Contracts = strategy.equity * Risk / ((TriggerPrice-SLPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts
    strategy.entry("Long", strategy.long, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice, qty_percent = 100)
if isLong and crossunder(HMA[0],HMA[1])
    strategy.close_all(comment="TrendChange")
    isLong := false

//Short
if GoShort and not GoShort[1]
    isShort := true, TriggerPrice := close
    TPPrice := TriggerPrice * (1 - (SL * RRR))
    SLPrice := TriggerPrice * (1 + SL)
    Entry_Contracts = strategy.equity * Risk / ((SLPrice-TriggerPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts
    strategy.entry("Short", strategy.short, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)//, qty_percent = 100)
if isShort and crossover(HMA[0],HMA[1])
    strategy.close_all(comment="TrendChange")
    isShort := false

//VISUALISATION
plot(McG_LS_Switch,color=color.blue,title="Baseline")
plot(C1_Act?C1:na,color=color.white,title="confirmation Indicator")
plot(HMA, color=(HMA[0]>HMA[1]? color.green : color.red), linewidth=4, transp=40, title="Entry Indicator")
plot(isLong or isShort ? TPPrice : na, title="TakeProfit", color=color.green, style=plot.style_linebr)
plot(isLong or isShort ? SLPrice : na, title="StopLoss", color=color.red, style=plot.style_linebr)
bgcolor(isLong[1] and cross(low,SLPrice) and low[1] > SLPrice ? color.yellow : na, transp=75, title="SL Long")
bgcolor(isShort[1] and cross(high,SLPrice) and high[1] < SLPrice ? color.yellow : na, transp=75, title="SL Short")

আরো