এই কৌশলটি বাজারের শক্তি এবং দুর্বলতা নির্ধারণের জন্য কেডি সূচক ব্যবহার করে এবং গতির উপর ভিত্তি করে উভয় দিকের বাণিজ্য করে। বিশেষত, যখন কে 80 এর উপরে অতিক্রম করে তখন বাজারকে শক্তিশালী এবং যখন কে 20 এর নীচে অতিক্রম করে তখন দুর্বল বলে মনে করা হয়। একটি শক্তিশালী বাজারে, লং পজিশনগুলি যোগ করা হয় যখন কে প্রথম 50 এর নীচে অতিক্রম করে। একটি দুর্বল বাজারে, শর্ট পজিশনগুলি যোগ করা হয় যখন কে প্রথম 50 এর উপরে অতিক্রম করে। শক্তিশালী দুর্বল হয়ে যায় বা বিপরীতভাবে।
এই কৌশলটির সুবিধা হ'ল বিভিন্ন টার্নিং পয়েন্টগুলি সময়মতো দখল করা। তবে, কেডি নিজেই শক্তিশালী পিছিয়ে রয়েছে এবং বাঁকগুলি অগ্রসর করতে পারে না। এছাড়াও, পিরামিডিং উচ্চ ঝুঁকি বহন করে। কঠোর স্টপ লস অত্যন্ত গুরুত্বপূর্ণ, অন্যথায় ক্ষতি দ্রুত প্রসারিত হতে পারে।
সংক্ষেপে, কেডি দ্বৈত-নির্দেশ ট্র্যাকিং কৌশল শক্তিশালী গতির উপর মূলধন করতে পারে তবে উল্লেখযোগ্য ঝুঁকি নিয়ে। স্থিতিশীল লাইভ প্রয়োগের জন্য পুঙ্খানুপুঙ্খ ব্যাকটেস্টিং, পরামিতি অপ্টিমাইজেশন এবং ভাল স্টপ লস প্রক্রিয়া প্রয়োজন।
/*backtest start: 2023-08-11 00:00:00 end: 2023-09-10 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/ // © Tonyder //@version=4 // strategy("KD base strategy", overlay=true, pyramiding=1000, process_orders_on_close=true, precision=6, max_bars_back=720) max=input(defval=20, title="庫存上限(share)", type=input.integer) min=input(defval=-10, title="庫存下限(share)", type=input.integer) period=input(defval=9, title="KD 週期(KD period)", type=input.integer, minval=2) k=0.0 rsv=0.0 dir2=0 sum2=0.0 share2=0 first=0 up=0.0 bottom=0.0 k80=0.0 k50=0.0 k20=0.0 k_value=0.0 share=strategy.position_size rsv:=stoch(close, high, low, period) up:=highest(high,period) bottom:=lowest(low,period) if bar_index <= period k:=rsv dir2:=0 sum2:=0 else k:=k[1]*2/3 + rsv/3 dir2 := dir2[1] sum2 := sum2[1] // rsv = 100 * (close - lowest(low, period)) / (highest(high, period) - lowest(low, period)) // k=k[1]*2/3 + rsv/3 // 3k=k[1]*2 + rsv // 3k-k[1]*2= 100 * (close - lowest(low, period)) / (highest(high, period) - lowest(low, period)) // (3k-k[1]*2)/100*(highest(high, period) - lowest(low, period)) + lowest(low, period) = close // let k = 80, close = (3*80-k[1]*2)/100*(highest(high, period) - lowest(low, period)) + lowest(low, period) k80:=(3*80-k[1]*2)/100*(highest(high, period) - lowest(low, period)) + lowest(low, period) k50:=(3*50-k[1]*2)/100*(highest(high, period) - lowest(low, period)) + lowest(low, period) k20:=(3*20-k[1]*2)/100*(highest(high, period) - lowest(low, period)) + lowest(low, period) // rule 1, strong target, buy when k < 50. if (dir2 == 1 and k[1] >= 50 and k < 50 and sum2 < 1 and sum2 >= 0 and sum2 < 0.66) sum2 := sum2 + 0.33 // rule 2, weak target, sell when k > 50. if (dir2 == -1 and k[1] <= 50 and k > 50 and sum2 > -1 and sum2 <= 0 and sum2 > -0.66) sum2 := sum2 -0.33 // become to strong if (k >= 80) dir2 := 1 // become to weak if (k <= 20) dir2 := -1 // rule 3, strong become to weak, buy when k < 20 if (dir2 == -1 and dir2[1] == 1) sum2 := sum2 + 0.33 // rule 4, weak become to strong, buy when k > 80 if (dir2 == 1 and dir2[1] == -1) sum2 := sum2 - 0.33 // rule 5, strong but share is smaller than 0 if (dir2 == 1 and k[1] >= 50 and k < 50 and sum2 <= 0) sum2 := 0.33 // rule 6, weak but share is bigger than 0 if (dir2 == -1 and k[1] >= 50 and k < 50 and sum2 >= 0) sum2 := -0.33 if sum2 > 0 share2 := round(sum2 * max) else if sum2 < 0 share2 := round(abs(sum2) * min) if share2 > share strategy.order(id='buy', long=true) else if share2 < share strategy.order(id="sell", long=false) plot(share, "持股(share)") plot(dir2, "方向(direction)") plot(k80, "Strong", color.red) plot(k50, "Middle", color.white) plot(k20, "Weak", color.green) plot(k, "k")