চলমান গড় ক্রসওভার কৌশল


সৃষ্টির তারিখ: 2023-10-24 16:39:40 অবশেষে সংশোধন করুন: 2023-10-24 16:39:40
অনুলিপি: 0 ক্লিকের সংখ্যা: 671
1
ফোকাস
1617
অনুসারী

চলমান গড় ক্রসওভার কৌশল

ওভারভিউ

এই কৌশলটি চলমান গড়ের ক্রস নীতির উপর ভিত্তি করে তৈরি করা হয়েছে, যখন স্বল্পমেয়াদী গড় নীচে থেকে দীর্ঘমেয়াদী গড় অতিক্রম করে এবং যখন স্বল্পমেয়াদী গড় নীচে থেকে দীর্ঘমেয়াদী গড় অতিক্রম করে তখন এটি খালি হয়, এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল।

কৌশল নীতি

এই কৌশলটি মূলত দুটি স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী সরল চলমান গড় গণনা করে এবং তাদের ক্রস-পরিস্থিতির উপর ভিত্তি করে প্রবণতার দিক নির্ধারণ করে।

বিশেষ করে, কৌশলটি প্রথমে স্বল্পমেয়াদী গড় xMA এবং দীর্ঘমেয়াদী গড় গণনা করে, যার স্বল্পমেয়াদী গড় দৈর্ঘ্য Len এবং দীর্ঘমেয়াদী গড় দৈর্ঘ্য 2*Len。

তারপরে কৌশলটি সিদ্ধান্ত নেয় যে স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করেছে কিনা, যদি এটি অতিক্রম করে তবে এটি একটি মাল্টিসিগন্যাল উত্পন্ন করে। সিদ্ধান্ত নিন যে স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করেছে কিনা, যদি এটি অতিক্রম করে তবে এটি একটি ফাঁকা সংকেত উত্পন্ন করে।

যদি কোন পজিশন না থাকে, তাহলে মার্কেট প্রাইসে পজিশন খুলুন।

এছাড়াও, কৌশলটি একটি স্টপ লস স্টপ পয়েন্টও সেট করে। অতিরিক্ত কাজ করার পরে স্টপ লস মূল্যটি প্রবেশ মূল্য-স্টপ লস শতাংশ হিসাবে সেট করুন*এন্ট্রি মূল্য, স্টপ মূল্য হল এন্ট্রি মূল্য + স্টপ মূল্য শতাংশ*প্রবেশ মূল্য; স্টপ লস স্টপ মূল্য + স্টপ লস শতাংশ হিসাবে সেট করুন*প্রবেশ মূল্য, স্টপ মূল্য হল প্রবেশ মূল্য-স্টপ মূল্যের শতাংশ*প্রবেশ মূল্য

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

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

  • এটি সহজ, পরিষ্কার, সহজেই বোঝা যায় এবং নতুনদের জন্য উপযুক্ত।

  • মুভিং এভারেজের উপর ভিত্তি করে ট্রেন্ডের দিকনির্দেশনা কার্যকরভাবে বাজারের প্রবণতা অনুসরণ করতে পারে;

  • স্টপ লস স্টপ পয়েন্ট, যা ঝুঁকি নিয়ন্ত্রণ করে।

  • ভিজ্যুয়ালি দেখানো হয় সমান্তরাল বক্ররেখা, এবং স্বতঃস্ফূর্তভাবে প্রতিফলিত হয় প্রবণতা পরিবর্তন।

কৌশলগত ঝুঁকি

  • গড় লাইনটি পিছিয়ে রয়েছে, যার ফলে সেরা প্রবেশের সময়টি মিস করার ঝুঁকি রয়েছে;

  • অযৌক্তিকভাবে স্টপ-আপ সেট করা যা স্টপ-আপকে খুব হালকা বা খুব কঠোর করে তুলতে পারে;

  • শেয়ারের দামের তীব্র ওঠানামা হলে মিডলাইনে মিথ্যা সংকেত জাগ্রত হওয়ার সম্ভাবনা;

  • কেবলমাত্র গড়-রেখার সময়কালের প্যারামিটারগুলির উপর ভিত্তি করে প্যারামিটার অপ্টিমাইজেশানগুলি অতিরিক্ত মিলিত হতে পারে।

এই ঝুঁকিগুলি যথাযথভাবে স্টপ লস, সমান্তরাল চক্রের প্যারামিটার সমন্বয়কে অনুকূলিতকরণ এবং অন্যান্য সূচক ফিল্টারিং যুক্ত করে হ্রাস করা যেতে পারে।

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

  • অন্যান্য সূচক যেমন MACD, KDJ ইত্যাদি ফিল্টার করার জন্য যোগ করুন, যাতে ভুল সংকেত এড়ানো যায়;

  • স্বল্পমেয়াদী গড়রেখা এবং দীর্ঘমেয়াদী গড়রেখার দৈর্ঘ্যের জন্য একাধিক সমন্বয় অপ্টিমাইজেশন, সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করা;

  • বিভিন্ন স্টপ-অফ-লস কৌশল পরীক্ষা করা, যেমন শব্দ স্টপ, মুভিং স্টপ ইত্যাদি;

  • পজিশন ম্যানেজমেন্ট মডিউল যুক্ত করুন, তহবিলের ব্যবহারের দক্ষতা অনুকূলিত করুন।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@strategy_alert_message {{strategy.order.alert_message}} 
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 19/09/2023
// MA Crossover Bot for OKX Exchange
////////////////////////////////////////////////////////////
var ALERTGRP_CRED = "entry"
signalToken = input("", "Signal Token", inline = "11", group = ALERTGRP_CRED)
OrderType = input.string("market", "Order Type", options = ["market", "limit"], inline = "21", group = ALERTGRP_CRED)
OrderPriceOffset = input.float(0, "Order Price Offset", minval = 0, maxval = 100, step = 0.01, inline = "21", group = ALERTGRP_CRED)
InvestmentType = input.string("percentage_balance", "Investment Type", options = ["margin", "contract", "percentage_balance", "percentage_investment"], inline = "31", group = ALERTGRP_CRED)
Amount = input.float(100, "Amount", minval = 0.01, inline = "31", group = ALERTGRP_CRED)

getAlertMsg(action, instrument, signalToken, orderType, orderPriceOffset, investmentType, amount) =>
    str = '{'
    str := str + '"action": "' + action + '", '
    str := str + '"instrument": "' + instrument + '", '
    str := str + '"signalToken": "' + signalToken + '", '
    //str := str + '"timestamp": "' + str.format_time(timenow, "yyyy-MM-dd'T'HH:mm:ssZ", "UTC+0") + '", '
    str := str + '"timestamp": "' + '{{timenow}}' + '", '
    str := str + '"orderType": "' + orderType + '", '
    str := str + '"orderPriceOffset": "' + str.tostring(orderPriceOffset) + '", '
    str := str + '"investmentType": "' + investmentType + '", '
    str := str + '"amount": "' + str.tostring(amount) + '"'
    str := str + '}'
    str

getOrderAlertMsgExit(action, instrument, signalToken) =>
    str = '{'
    str := str + '"action": "' + action + '", '
    str := str + '"instrument": "' + instrument + '", '
    str := str + '"signalToken": "' + signalToken + '", '
    str := str + '"timestamp": "' + '{{timenow}}' + '", '
    str := str + '}'
    str

strategy(title='OKX: MA Crossover', overlay=true)
Len = input(13)
Profit = input.float(7, title='Take Profit %', minval=0.01) / 100
Stop =  input.float(7, title='Stop Loss %', minval=0.01) / 100
xMA = ta.sma(close, Len)
//Robot State
isLong = strategy.position_size > 0 
isShort = strategy.position_size < 0 
isFlat = strategy.position_size == 0 
//Current Signal
doLong = low < xMA[1] ? true : false
doShort =   high > xMA[1] ? true:  false
//Backtest Start Date
tm =  timestamp(2022, 01, 01, 09, 30)
//Entry and exit orders
if  doLong[2] == false and isLong == false and doLong and time > tm
    strategy.cancel_all()
    buyAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_LONG', instrument = syminfo.ticker, signalToken = signalToken)
    buyAlertMsg = getAlertMsg(action = 'ENTER_LONG', instrument = syminfo.ticker, signalToken = signalToken, orderType =  OrderType, orderPriceOffset =  OrderPriceOffset, investmentType =  InvestmentType, amount = Amount)
    strategy.entry('Long', strategy.long, limit = close, comment='Long', alert_message =buyAlertMsg)
    strategy.exit("ExitLong", 'Long', stop=close - close * Stop  , limit = close + close * Profit , qty_percent = 100, alert_message = buyAlertMsgExit)  
if doShort[2] == false and isShort == false and doShort and time > tm
    strategy.cancel_all()
    sellAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_SHORT', instrument = syminfo.ticker, signalToken = signalToken)
    sellAlertMsg = getAlertMsg(action = 'ENTER_SHORT', instrument = syminfo.ticker, signalToken = signalToken, orderType =  OrderType, orderPriceOffset =  OrderPriceOffset, investmentType =  InvestmentType, amount = Amount)
    strategy.entry('Short', strategy.short, limit=close, comment='Short', alert_message = sellAlertMsg)
    strategy.exit("ExitShort", 'Short', stop=close + close * Stop  , limit = close - close * Profit  , qty_percent = 100, alert_message = sellAlertMsgExit)  
//Visual
barcolor(isShort  ? color.red : isLong ? color.green : color.blue)
plot(xMA, color=color.new(color.red, 0), title='MA')