
ফিবোনাচি মডেল পরিসংখ্যান বিশ্লেষণ কৌশল একটি উন্নত পরিমাণগত লেনদেনের পদ্ধতি যা ফিবোনাচি রিডাকশন স্তর, প্যাটার্ন সনাক্তকরণ অ্যালগরিদম এবং পরিসংখ্যান বিশ্লেষণের তিনটি মূল প্রযুক্তির সাথে দক্ষতার সাথে একত্রিত করে। এই কৌশলটি মূলত ১৯% এবং ৮২.৫৬% ফিবোনাচি রিডাকশন স্তরকে ট্রেডিং সিগন্যালের ভিত্তি হিসাবে ব্যবহার করে এবং প্যাটার্ন মেলানোর অ্যালগরিদমের মাধ্যমে উচ্চ-সম্ভাব্যতার ট্রেডিং সেটআপগুলি সনাক্ত করে এবং পরিসংখ্যানগত বিশ্লেষণের মাধ্যমে এটি নিশ্চিত করে। এই বহুমুখী সংকেত নিশ্চিতকরণ প্রক্রিয়াটি কৌশলটির নির্ভরযোগ্যতা এবং নির্ভুলতাকে ব্যাপকভাবে উন্নত করে। এই কৌশলটি পরিষ্কার প্রবেশ এবং প্রস্থান নিয়ম সরবরাহ করে, যার মধ্যে একটি সবুজ তীর একটি শক্তিশালী মাল্টি-সিগন্যাল, একটি লাল তীরের নীচে একটি শক্তিশালী ফাঁকা সংকেত, একটি গ্রিন ব্যাকগ্রাউন্ড একাধিক ট্রিগারিং শর্ত, একটি লাল ব্যাকগ্রাউন্ড একটি ফাঁ
ফিবোনাচি মডেলের পরিসংখ্যান বিশ্লেষণ কৌশলটির মূল নীতিটি তিনটি প্রধান উপাদানগুলির উপর ভিত্তি করে কাজ করেঃ
ফিবোনাচি পুনঃনির্ধারণ স্তরকৌশলটি ৯৩টি পিরিয়ডের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন পয়েন্ট ব্যবহার করে একটি বিশেষ ১৯% এবং ৮২.৫৬% ফিবোনাচি রিটার্ন লেভেল গণনা করে। এই অস্বাভাবিক ফিবোনাচি লেভেলগুলি কৌশলটির অনন্যতা, যা বাজারের নির্দিষ্ট আচরণের পরিসংখ্যানগত বিশ্লেষণের উপর ভিত্তি করে তৈরি করা যেতে পারে। যখন দামগুলি এই স্তরগুলিকে স্পর্শ করে বা অতিক্রম করে তখন প্রাথমিক লেনদেনের সংকেত তৈরি করা হয়।
মডেল সনাক্তকরণ: কৌশলটি একটি জটিল প্যাটার্ন-ম্যাচিং অ্যালগরিদম বাস্তবায়ন করে যা অতীতের মূল্য প্যাটার্ন বিশ্লেষণ করে এবং বর্তমান প্যাটার্নের সাথে মিলের পরিমাণ গণনা করে। এটি একটি নির্দিষ্ট দৈর্ঘ্যের গ্রাফ প্যাটার্ন ব্যবহার করে (ডিফল্ট 5) এবং ঐতিহাসিক ডেটা (ডিফল্ট 93 চক্র) এর মধ্যে সেরা মিল খুঁজে বের করে। যদি পাওয়া প্যাটার্নের মিলটি সেট থ্রেশহোল্ড (ডিফল্ট 0.7) অতিক্রম করে তবে কৌশলটি এই ঐতিহাসিক প্যাটার্নের পরে দামের গতির উপর ভিত্তি করে বর্তমান প্যাটার্নের পরে সম্ভাব্য গতির পূর্বাভাস দেয়।
পরিসংখ্যান: কৌশলটি পরিসংখ্যানগত নিশ্চিতকরণ ব্যবস্থা প্রবর্তন করে, যা মূল্যের পরিসংখ্যানগত বন্টন নির্ধারণ করে মধ্যম, চতুর্থাংশ এবং চতুর্থাংশের দূরত্ব (আইকিউআর) গণনা করে। যখন দাম মধ্যম, উপরের চতুর্থাংশ বা উপরের এবং নীচের সীমানা অতিক্রম করে (Q3 + 1.5 * IQR এবং Q1 - 1.5 * IQR হিসাবে সংজ্ঞায়িত), তখন পরিসংখ্যানগত সংকেত তৈরি হয়। এই সংকেতগুলির শক্তিটি বিপরীত স্তর এবং ব্যবহারকারীর সেট করা পরিসংখ্যানগত অধিকারগুলির উপর ভিত্তি করে পুনরায় গণনা করা হয়।
ট্রেডিং সিগন্যালের উৎপত্তি হল এই তিনটি উপাদানের সমন্বিত ফলাফলঃ
কৌশলটি জটিল ঝুঁকি ব্যবস্থাপনা ব্যবস্থাও বাস্তবায়ন করেছে, যার মধ্যে রয়েছেঃ
বহু-মাত্রিক সংকেত নিশ্চিতকরণকৌশলটি প্রযুক্তিগত বিশ্লেষণ (ফিবোনাচি), প্যাটার্ন শনাক্তকরণ এবং পরিসংখ্যান বিশ্লেষণের তিনটি মাত্রা একত্রিত করে একটি শক্তিশালী বহু-নিশ্চিতকরণ প্রক্রিয়া তৈরি করে, যা মিথ্যা সংকেতের সম্ভাবনা হ্রাস করে।
অভিযোজনযোগ্য: কৌশলটি সময়কালের চয়ন, মডেল দৈর্ঘ্য, অনুরূপতা থ্রেশহোল্ড, ঐতিহাসিক রিভিউ উইন্ডো, পরিসংখ্যানগত চক্র ইত্যাদির সমৃদ্ধ প্যারামিটার সেটিং সরবরাহ করে, যা এটিকে বিভিন্ন বাজার পরিবেশ এবং লেনদেনের জাতের সাথে মানিয়ে নিতে সক্ষম করে।
স্মার্ট মডেল সনাক্তকরণ: কৌশলটির প্যাটার্ন-ম্যাচিং অ্যালগরিদমগুলি কেবল প্যাটার্নের আকৃতিই বিবেচনা করে না, তবে অনুরূপতার থ্রেশহোল্ডও বিবেচনা করে, যা নিশ্চিত করে যে কেবলমাত্র অত্যন্ত অনুরূপ প্যাটার্নগুলিই ভবিষ্যদ্বাণী করার জন্য ব্যবহৃত হয়, যা ভবিষ্যদ্বাণীর নির্ভুলতা বাড়ায়।
পরিসংখ্যান: চতুর্ভুজ এবং IQR এর পরিসংখ্যানগত পদ্ধতির প্রবর্তনের মাধ্যমে, কৌশলটি পরিসংখ্যানগত বন্টনের মধ্যে দামের অবস্থান সনাক্ত করতে সক্ষম হয়, যা ট্রেডিং সিদ্ধান্তের জন্য অতিরিক্ত উদ্দেশ্য ভিত্তি প্রদান করে।
ভাল ঝুঁকি ব্যবস্থাপনা: কৌশলটি একাধিক স্টপ লস অপশন (ফিক্সড শতাংশ, এটিআর গুণক, ট্র্যাকিং স্টপ) এবং সাত স্তরের ব্যাচেল প্রফিট মেশিন সরবরাহ করে, যা নমনীয় এবং পদ্ধতিগত ঝুঁকি ব্যবস্থাপনাকে সম্ভব করে।
স্বজ্ঞাত দৃশ্যমানতা: এই কৌশলটি ব্যাকগ্রাউন্ডের রঙ, তীরচিহ্ন, চিহ্ন এবং ট্যাগ সহ প্রচুর ভিজ্যুয়াল উপাদান সরবরাহ করে যা ব্যবসায়ীদের বর্তমান বাজার পরিস্থিতি এবং সংকেতের শক্তিকে সহজেই বুঝতে সহায়তা করে।
রিয়েল-টাইম স্ট্যাটাস প্যানেলকৌশলঃ একটি বাস্তব সময়ে আপডেট হওয়া স্ট্যাটাস প্যানেল প্রদর্শিত হয়, যা ফিবোনাচি, মডেল এবং পরিসংখ্যানের তিনটি উপাদান এবং তাদের সমন্বিত ফলাফলের বর্তমান অবস্থাকে স্পষ্টভাবে প্রদর্শন করে।
পরামিতি সংবেদনশীলতাকৌশলটি একাধিক প্যারামিটার ব্যবহার করে যেমন মডেল দৈর্ঘ্য, অনুরূপতা থ্রেশহোল্ড, পরিসংখ্যান চক্র ইত্যাদি। এই প্যারামিটারগুলির সেটিংগুলি কৌশলটির কার্যকারিতা উল্লেখযোগ্যভাবে প্রভাবিত করে। ভুল প্যারামিটার সেটিংটি অতিরিক্ত ফিট বা সিগন্যাল মিস হতে পারে। ফিডব্যাক অপ্টিমাইজেশনের মাধ্যমে একটি নির্দিষ্ট বাজারের জন্য উপযুক্ত প্যারামিটার প্যাকেজ খুঁজে বের করার পরামর্শ দেওয়া হয়।
বাজার পরিবেশ নির্ভরতা: কিছু বাজারের পরিস্থিতিতে, ফিবোনাচি স্তরগুলি কার্যকর হতে পারে না, বিশেষত শক্তিশালী প্রবণতা বা অত্যন্ত অস্থিরতার সাথে। কৌশলটির কার্যকারিতা বাজারের অবস্থার সাথে পরিবর্তিত হতে পারে। সমাধানটি হ’ল বাজারের পরিবেশের সনাক্তকরণ ব্যবস্থা প্রবর্তন করা, বিভিন্ন বাজারের পরিস্থিতিতে বিভিন্ন প্যারামিটার সেটিং ব্যবহার করা।
গণনার জটিলতা: কৌশলগত প্যাটার্ন-ম্যাচিং অ্যালগরিদমগুলিকে প্রতিটি চক্রের মধ্যে historicalতিহাসিক ডেটা জুড়ে যেতে হবে এবং অনুরূপতা গণনা করতে হবে, যা স্বল্প সময়ের ফ্রেমে গণনা বোঝা তৈরি করতে পারে। এই সমস্যাটি হ্রাস করার জন্য, অ্যালগরিদমগুলিকে অনুকূলিতকরণ বা গণনা ফ্রিকোয়েন্সি হ্রাস করার বিষয়টি বিবেচনা করা যেতে পারে।
অতিরিক্ত লেনদেনের ঝুঁকি: একাধিক সিগন্যাল মেকানিজম ঘন ঘন ট্রেডিং সিগন্যালের কারণ হতে পারে, বিশেষত স্বল্প সময়ের ফ্রেমে। শুধুমাত্র সর্বোচ্চ মানের সিগন্যাল চালানোর জন্য ট্রেডিং ফ্রিকোয়েন্সি সীমাবদ্ধতা বা সিগন্যাল শক্তি ফিল্টার যুক্ত করার পরামর্শ দেওয়া হয়।
স্টপ লস সেটিং চ্যালেঞ্জ: যদিও কৌশলটি বিভিন্ন ধরণের স্টপ অপশন সরবরাহ করে, তবুও সর্বোত্তম স্টপ লেভেল নির্ধারণ করা একটি চ্যালেঞ্জ। খুব সংকীর্ণ স্টপগুলি ঘন ঘন বন্ধ হতে পারে এবং খুব প্রশস্তগুলি খুব বেশি ক্ষতি হতে পারে। বাজারের অস্থির গতিশীলতার সাথে স্টপ লেভেলগুলি সামঞ্জস্য করার পরামর্শ দেওয়া হয়েছে।
মৌলিক বিবেচনার অভাব: কৌশলটি সম্পূর্ণরূপে প্রযুক্তিগত এবং পরিসংখ্যানগত বিশ্লেষণের উপর ভিত্তি করে, মৌলিক বিষয়গুলি বিবেচনা না করে। গুরুত্বপূর্ণ সংবাদ বা ঘটনা ঘটলে খাঁটি প্রযুক্তিগত কৌশলগুলি চ্যালেঞ্জের মুখোমুখি হতে পারে। সমাধানটি হ’ল নিউজ ফিল্টার যুক্ত করা বা বড় ঘটনার আগে বা পরে বাণিজ্য স্থগিত করা।
গতিশীল প্যারামিটার সমন্বয়: স্বনির্ধারণ ব্যবস্থা প্রবর্তন করা যেতে পারে, বাজারের অস্থিরতা বা প্রবণতা শক্তির উপর ভিত্তি করে প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করা যায়, যেমন মডেল দৈর্ঘ্য, অনুরূপতা থ্রেশহোল্ড এবং পরিসংখ্যানগত চক্র। এটি বিভিন্ন বাজারের পরিবেশে কৌশলটির অভিযোজনযোগ্যতা বাড়িয়ে তুলবে।
বর্ধিত মোড মিলিত অ্যালগরিদম: বর্তমান মডেল ম্যাচিং মূলত বন্ধের দাম এবং খোলার দামের সম্পর্কের উপর ভিত্তি করে ((উচ্চ, নিম্ন বা সমতল), আরও জটিল মডেল বৈশিষ্ট্য যেমন উচ্চ-নিম্ন পয়েন্টের সম্পর্ক, ক্রয়-বিক্রয় মডেল বা ওঠানামা মডেলের প্রবর্তন বিবেচনা করা যেতে পারে যাতে মডেল সনাক্তকরণের নির্ভুলতা বাড়ানো যায়।
বাজার পরিবেশের শ্রেণীবিভাগ: প্রবণতা / ব্যাপ্তি / বিশৃঙ্খলা শ্রেণিবদ্ধকরণের মতো বাজার পরিবেশ শ্রেণিবদ্ধকরণ ব্যবস্থা প্রবর্তন করুন এবং বিভিন্ন বাজার পরিবেশে বিভিন্ন ট্রেডিং নিয়ম বা প্যারামিটার সেট ব্যবহার করুন। এটি কৌশলগুলিকে বিভিন্ন বাজার অবস্থার সাথে আরও ভালভাবে খাপ খাইয়ে নিতে সহায়তা করবে।
পরিসংখ্যানগত বিশ্লেষণের অনুকূলন: পরিসংখ্যানগত সিগন্যালের গুণমান উন্নত করতে Z-স্কোর বা শতাংশের র্যাঙ্কিংয়ের মতো আরও জটিল পরিসংখ্যানগত পদ্ধতি ব্যবহার করা বা ডায়নামিক পরিসংখ্যানগত চক্র চালু করার বিষয়টি বিবেচনা করা যেতে পারে।
মেশিন লার্নিং ইন্টিগ্রেটেড: মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে প্যাটার্ন শনাক্তকরণ এবং পরিসংখ্যানগত ওজন বন্টনকে অপ্টিমাইজ করা বা নির্দিষ্ট প্যাটার্নের পরে দামের গতির সম্ভাব্যতা বন্টন পূর্বাভাস দেওয়া বিবেচনা করা যেতে পারে।
ঝুঁকি ব্যবস্থাপনায় উন্নতি: একটি গতিশীল পজিশন ম্যানেজমেন্ট কৌশল বাস্তবায়ন করা যেতে পারে, সিগন্যাল শক্তি, বাজার অস্থিরতা এবং অ্যাকাউন্ট ঝুঁকি অনুসারে পজিশন আকারের সমন্বয় করা যেতে পারে। এছাড়াও, একটি ব্যাচ লাভের প্রক্রিয়াটি অপ্টিমাইজ করা যেতে পারে, বাজার অবস্থার উপর ভিত্তি করে লাভের লক্ষ্যগুলিকে গতিশীলভাবে সামঞ্জস্য করা যায়।
ফিল্টার যোগ করুন: প্রবণতা ফিল্টার, তরঙ্গ হার ফিল্টার বা ট্রান্সফার ভলিউম ফিল্টারগুলির মতো বিভিন্ন ফিল্টারগুলি প্রবর্তন করুন, যা সংকেতের গুণমানকে আরও উন্নত করে এবং মিথ্যা সংকেত হ্রাস করে।
ফিবোনাচি মডেল পরিসংখ্যান বিশ্লেষণ কৌশল একটি কাঠামোগত, কার্যকরী পরিমাণগত ট্রেডিং কৌশল যা ফিবোনাচি রিডাউন স্তর, প্যাটার্ন সনাক্তকরণ এবং পরিসংখ্যান বিশ্লেষণকে উদ্ভাবনীভাবে একত্রিত করে একটি শক্তিশালী বহু-মাত্রিক সংকেত সিস্টেম তৈরি করে। কৌশলটির মূল সুবিধা হ’ল এর বহু-স্তরের নিশ্চিতকরণ প্রক্রিয়া, অভিযোজনযোগ্য নকশা এবং উন্নত ঝুঁকি ব্যবস্থাপনার বৈশিষ্ট্য যা এটিকে বিভিন্ন বাজারের পরিবেশে উচ্চ-সম্ভাব্যতার ব্যবসায়ের সুযোগ সন্ধান করতে সক্ষম করে।
যাইহোক, কৌশলটি প্যারামিটার সংবেদনশীলতা, বাজার পরিবেশের উপর নির্ভরশীলতা এবং গণনার জটিলতার মতো চ্যালেঞ্জের মুখোমুখি। গতিশীল প্যারামিটার সমন্বয়, উন্নত প্যাটার্ন মেলানোর অ্যালগরিদম, বাজার পরিবেশের শ্রেণিবিন্যাস এবং মেশিন লার্নিংয়ের মতো অপ্টিমাইজেশনের দিকগুলি প্রবর্তন করে কৌশলটির আরও অনেক উন্নতির জায়গা রয়েছে।
এই কৌশলটি ব্যবহার করতে ইচ্ছুক ব্যবসায়ীদের জন্য, প্রথমে বিভিন্ন বাজার এবং প্যারামিটার সেটিংসের অধীনে কৌশলটি কীভাবে কাজ করে তা পর্যালোচনা করে, তারপরে একটি ছোট পজিশন থেকে শুরু করে এবং একটি নির্দিষ্ট ট্রেডিং শৈলী এবং বাজারের পরিবেশের সাথে সামঞ্জস্য রেখে ধীরে ধীরে প্যারামিটারগুলিকে সামঞ্জস্য করে এবং অনুকূলিতকরণ করে। সর্বোপরি, এই কৌশলটিকে ট্রেডিং টুলকিটের একটি সরঞ্জাম হিসাবে বিবেচনা করা উচিত, বিচ্ছিন্ন সিস্টেমের পরিবর্তে, অন্যান্য বিশ্লেষণ পদ্ধতি এবং ঝুঁকি পরিচালনার নীতিগুলির সাথে সংযুক্ত ব্যবহারের মাধ্যমে এর সম্ভাব্যতা সর্বাধিকীকরণ করা উচিত।
/*backtest
start: 2024-03-03 00:00:00
end: 2024-05-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Fibonacci-Only Strategi V2", overlay=true)
timeframe = input.timeframe("15", "Select Timeframe", options=["1", "5", "15", "30", "60", "240", "D"])
use_break_strategy = input(true, "Use Break Strategy")
stop_loss_percent = input.float(1.0, "Stop Loss %", minval=0.1, maxval=2.0, step=0.1)
use_atr_for_sl = input(true, "Use ATR for Stop Loss")
atr_multiplier = input.float(2.0, "ATR Multiplier for SL", minval=0.5, maxval=5.0, step=0.1)
use_trailing_stop = input(true, "Use Trailing Stop")
trailing_stop_percent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=5.0, step=0.1)
pattern_length = input.int(5, "Candle Pattern Length", minval=3, maxval=10)
similarity_threshold = input.float(0.7, "Pattern Similarity Threshold", minval=0.6, maxval=0.95)
lookback_window = input.int(93, "Historical Lookback Window", minval=10, maxval=93)
stat_period = input.int(50, "Statistical Period", minval=20, maxval=200)
stat_weight = input.float(0.5, "Statistical Confirmation Weight", minval=0.1, maxval=1.0, step=0.1)
fib_high = ta.highest(high, 93)
fib_low = ta.lowest(low, 93)
fib_diff = fib_high - fib_low
fib_19 = fib_high - fib_diff * 0.19
fib_8256 = fib_high - fib_diff * 0.8256
fib_19_reverse = fib_low + fib_diff * 0.19
plot(fib_8256, color=color.purple, style=plot.style_line, title="82.56% Fib")
plot(fib_19_reverse, color=color.orange, style=plot.style_line, title="19% Fib (Low to High)")
fib_19_touch = low[1] > fib_19 and low <= fib_19
fib_8256_touch = high[1] < fib_8256 and high >= fib_8256
fib_19_break = close < fib_19 and open > fib_19
fib_8256_break = close > fib_8256 and open < fib_8256
fib_19_reverse_touch = high[1] < fib_19_reverse and high >= fib_19_reverse
fib_19_reverse_break = close > fib_19_reverse and open < fib_19_reverse
bull_confirmation = close > open
bear_confirmation = close < open
getMedianAndQuartiles(src, len) =>
values = array.new_float(0)
for i = 0 to len - 1
array.push(values, src[i])
array.sort(values)
size = array.size(values)
median = size % 2 == 1 ? array.get(values, math.floor(size / 2)) : (array.get(values, size / 2 - 1) + array.get(values, size / 2)) / 2
q1_idx = math.floor(size / 4)
q3_idx = math.floor(3 * size / 4)
q1 = array.get(values, q1_idx)
q3 = array.get(values, q3_idx)
[median, q1, q3]
[price_median, price_q1, price_q3] = getMedianAndQuartiles(close, stat_period)
iqr = price_q3 - price_q1
upper_bound = price_q3 + 1.5 * iqr
lower_bound = price_q1 - 1.5 * iqr
stat_bull_signal = close > price_median and close[1] <= price_median
stat_bear_signal = close < price_median and close[1] >= price_median
stat_strong_bull = close > price_q3 and close[1] <= price_q3
stat_strong_bear = close < price_q1 and close[1] >= price_q1
stat_extreme_bull = close > upper_bound
stat_extreme_bear = close < lower_bound
long_condition_fib_touch = (fib_19_touch or fib_19_reverse_touch) and bull_confirmation
long_condition_fib_break = use_break_strategy and (fib_19_break or fib_19_reverse_break) and bull_confirmation
short_condition_fib_touch = fib_19_touch and bear_confirmation
short_condition_fib_break = use_break_strategy and fib_19_break and bear_confirmation
getPatternSignature(start_idx, len) =>
pattern = array.new_float(len)
for i = 0 to len - 1
if close[start_idx + i] > open[start_idx + i]
array.set(pattern, i, 1.0)
else if close[start_idx + i] < open[start_idx + i]
array.set(pattern, i, -1.0)
else
array.set(pattern, i, 0.0)
pattern
calcSimilarity(current_pattern, hist_pattern) =>
matches = 0.0
for i = 0 to array.size(current_pattern) - 1
if array.get(current_pattern, i) == array.get(hist_pattern, i)
matches := matches + 1.0
matches / array.size(current_pattern)
findBestMatch() =>
curr_pattern = getPatternSignature(1, pattern_length)
best_idx = -1
best_sim = 0.0
direction = 0
for i = pattern_length + 2 to lookback_window + 1
if i < pattern_length * 2
continue
hist_pattern = getPatternSignature(i, pattern_length)
sim = calcSimilarity(curr_pattern, hist_pattern)
if sim > best_sim and sim >= similarity_threshold
best_sim := sim
best_idx := i
next_close = close[i - pattern_length - 1]
curr_close = close[i - pattern_length]
if next_close > curr_close
direction := 1
else if next_close < curr_close
direction := -1
[best_idx, best_sim, direction]
var latest_pattern_sim = 0.0
var pattern_direction = 0
if barstate.isconfirmed
[idx, sim, dir] = findBestMatch()
if sim >= similarity_threshold
latest_pattern_sim := sim
pattern_direction := dir
calculateStatWeight(stat_signal, stat_strong, stat_extreme) =>
weight = 0.0
if stat_signal
weight := stat_weight * 0.5
if stat_strong
weight := weight + stat_weight * 0.3
if stat_extreme
weight := weight + stat_weight * 0.2
weight
stat_bull_weight = calculateStatWeight(stat_bull_signal, stat_strong_bull, stat_extreme_bull)
stat_bear_weight = calculateStatWeight(stat_bear_signal, stat_strong_bear, stat_extreme_bear)
long_condition = (long_condition_fib_touch or long_condition_fib_break) and
(pattern_direction == 1 or pattern_direction == 0)
short_condition = (short_condition_fib_touch or short_condition_fib_break) and
(pattern_direction == -1 or pattern_direction == 0) and
stat_bear_weight > 0
atr = ta.atr(14)
if long_condition
strategy.entry("Long", strategy.long)
if short_condition
strategy.entry("Short", strategy.short)
var float long_stop_loss = na
var float short_stop_loss = na
if strategy.position_size > 0
long_stop_loss := use_atr_for_sl ? strategy.position_avg_price - atr * atr_multiplier : strategy.position_avg_price * (1 - stop_loss_percent / 100)
if strategy.position_size < 0
short_stop_loss := use_atr_for_sl ? strategy.position_avg_price + atr * atr_multiplier : strategy.position_avg_price * (1 + stop_loss_percent / 100)
take_profit_levels = array.new_float(7)
for i = 0 to 6
tp_percent = 1 + (i + 1) * 0.5 / 100
array.set(take_profit_levels, i, tp_percent * strategy.position_avg_price)
if strategy.position_size > 0
if use_trailing_stop
trail_price = high - (high - strategy.position_avg_price) * trailing_stop_percent / 100
strategy.exit("Long TS", "Long", stop=math.max(trail_price, long_stop_loss))
else
strategy.exit("Long SL", "Long", stop=long_stop_loss)
for i = 0 to 6
long_tp_price = array.get(take_profit_levels, i)
strategy.exit("Long TP" + str.tostring(i+1), "Long", limit=long_tp_price, qty_percent=14.28)
if strategy.position_size < 0
if use_trailing_stop
trail_price = low + (strategy.position_avg_price - low) * trailing_stop_percent / 100
strategy.exit("Short TS", "Short", stop=math.min(trail_price, short_stop_loss))
else
strategy.exit("Short SL", "Short", stop=short_stop_loss)
for i = 0 to 6
short_tp_price = array.get(take_profit_levels, i)
strategy.exit("Short TP" + str.tostring(i+1), "Short", limit=short_tp_price, qty_percent=14.28)
bgcolor(long_condition ? color.new(color.green, 80) : short_condition ? color.new(color.red, 80) : na)
plotarrow(long_condition ? 1 : short_condition ? -1 : 0, title="Signal Direction", colorup=color.green, colordown=color.red, minheight=10, maxheight=20)
long_touch_marker = long_condition and long_condition_fib_touch ? low - atr : na
long_break_marker = long_condition and long_condition_fib_break ? low - atr * 1.5 : na
short_touch_marker = short_condition and short_condition_fib_touch ? high + atr : na
short_break_marker = short_condition and short_condition_fib_break ? high + atr * 1.5 : na
plotshape(long_touch_marker, style=shape.circle, color=color.green, size=size.normal, title="Long Touch Marker", location=location.absolute)
plotshape(long_break_marker, style=shape.xcross, color=color.green, size=size.normal, title="Long Break Marker", location=location.absolute)
plotshape(short_touch_marker, style=shape.circle, color=color.red, size=size.normal, title="Short Touch Marker", location=location.absolute)
plotshape(short_break_marker, style=shape.xcross, color=color.red, size=size.normal, title="Short Break Marker", location=location.absolute)
plotshape(stat_bear_signal, style=shape.triangledown, color=color.red, size=size.tiny, title="Statistical Bear Signal", location=location.abovebar)
if barstate.islast
var table info = table.new(position.top_right, 4, 5, color.black, color.white, 2, color.gray, 2)
table.clear(info, 0, 0, 3, 4)
table.cell(info, 0, 0, "Fibonacci-Pattern with Stats", bgcolor=color.blue, text_color=color.white)
table.cell(info, 0, 1, "Fib Status", bgcolor=color.blue, text_color=color.white)
fib_status = "NEUTRAL"
fib_color = color.gray
if long_condition_fib_touch or long_condition_fib_break
fib_status := "LONG"
fib_color := color.green
else if short_condition_fib_touch or short_condition_fib_break
fib_status := "SHORT"
fib_color := color.red
table.cell(info, 1, 1, fib_status, bgcolor=fib_color, text_color=color.white)
table.cell(info, 0, 2, "Pattern", bgcolor=color.blue, text_color=color.white)
pattern_status = "NEUTRAL"
pattern_color = color.gray
if pattern_direction == 1
pattern_status := "LONG"
pattern_color := color.green
else if pattern_direction == -1
pattern_status := "SHORT"
pattern_color := color.red
table.cell(info, 1, 2, pattern_status, bgcolor=pattern_color, text_color=color.white)
table.cell(info, 2, 2, pattern_direction != 0 ? str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "N/A", bgcolor=color.gray, text_color=color.white)
table.cell(info, 0, 3, "Statistics", bgcolor=color.blue, text_color=color.white)
stat_status = "NEUTRAL"
stat_color = color.gray
if stat_bull_weight > 0
stat_status := "BULL"
stat_color := color.green
else if stat_bear_weight > 0
stat_status := "BEAR"
stat_color := color.red
table.cell(info, 1, 3, stat_status, bgcolor=stat_color, text_color=color.white)
table.cell(info, 2, 3, stat_bull_weight > 0 ? str.tostring(math.round(stat_bull_weight * 100)) + "%" :
stat_bear_weight > 0 ? str.tostring(math.round(stat_bear_weight * 100)) + "%" : "0%",
bgcolor=color.gray, text_color=color.white)
table.cell(info, 0, 4, "Combined", bgcolor=color.blue, text_color=color.white)
combined_status = "NEUTRAL"
combined_color = color.gray
if long_condition
combined_status := "LONG"
combined_color := color.green
else if short_condition
combined_status := "SHORT"
combined_color := color.red
table.cell(info, 1, 4, combined_status, bgcolor=combined_color, text_color=color.white)
var label_id = label.new(na, na, "", color=color.gray, style=label.style_label_down, textcolor=color.white)
if long_condition and barstate.isconfirmed
label.set_xy(label_id, bar_index, high)
label.set_text(label_id, "LONG\n" +
(long_condition_fib_touch ? "Touch" : "Break") +
(pattern_direction == 1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
"\nStat: " + str.tostring(math.round(stat_bull_weight * 100)) + "%")
label.set_color(label_id, color.green)
label.set_style(label_id, label.style_label_down)
if short_condition and barstate.isconfirmed
label.set_xy(label_id, bar_index, low)
label.set_text(label_id, "SHORT\n" +
(short_condition_fib_touch ? "Touch" : "Break") +
(pattern_direction == -1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
"\nStat: " + str.tostring(math.round(stat_bear_weight * 100)) + "%")
label.set_color(label_id, color.red)
label.set_style(label_id, label.style_label_up)
alertcondition(long_condition, title="Long Entry", message="Long entry signal detected")
alertcondition(short_condition, title="Short Entry", message="Short entry signal detected")