আমার ভালো বন্ধু Ran Ge দীর্ঘদিন ধরে এই সূচকটি পর্যবেক্ষণ করে আসছেন এবং এটিকে পরিমাণে রূপান্তরিত করা যায় কিনা তা নিয়ে আলোচনা করার জন্য নববর্ষের দিন আগে আমাকে এটি সুপারিশ করেছেন। এটি একটি দুঃখের বিষয় যে আমার বিলম্ব হয়েছে, এবং আমি এখন পর্যন্ত তাকে এই ধরনের একটি ইচ্ছা পূরণ করতে সাহায্য করে চলেছি, এটি আসলে কারণ তার অ্যালগরিদম সম্পর্কে সম্প্রতি লাফিয়ে লাফিয়ে উন্নতি হয়েছে৷ আমি একদিন একটি পাইন অনুবাদক লিখব পরিকল্পনা. সবই পাইথনিক। . ঠিক আছে, আর কিছু না করে, আসুন এই কিংবদন্তি সুপার ট্রেন্ড লাইনটি চালু করি। .
CMC মার্কেটস নতুন প্রজন্মের বুদ্ধিমান ট্রেডিং সিস্টেম - সুপার ট্রেন্ড লাইন (সুপারট্রেন্ড)
এখানে একটি নিবন্ধ এই সিস্টেম প্রবর্তন.
CMC মার্কেটে নতুন প্রজন্মের বুদ্ধিমান ট্রেডিং সিস্টেমে, আপনি প্রযুক্তিগত সূচকগুলিতে “সুপার ট্রেন্ড লাইন” নির্বাচন করে এটি ব্যবহার করতে পারেন। চিত্রে দেখানো হিসাবে, আপনি আপনার নিজের পছন্দ অনুযায়ী ক্রমবর্ধমান সংকেত এবং পতনের সংকেতগুলির “রঙ এবং বেধ” সামঞ্জস্য করতে পারেন। সুতরাং একটি সুপারট্রেন্ড নির্দেশক কি? সুপারট্রেন্ড নির্দেশক সূত্রটি বোঝার আগে, এটিআর বোঝা প্রয়োজন, কারণ সুপারট্রেন্ড নির্দেশকের মান গণনা করতে ATR মান ব্যবহার করে।
মূল অ্যালগরিদমগুলি পরিচয় করিয়ে দেওয়ার জন্য নীচে একটি ছবিও রয়েছে।
একটি মোটামুটি চেহারা নিলে, প্রধান বিবরণ হল HL2 এর চ্যানেল (কে-লাইন গড় মূল্য) n গুণ ATR দ্বারা গুণিত। একটি প্রবণতা ব্রেকআউট করুন.
তবে নিবন্ধটি তুলনামূলকভাবে সংক্ষিপ্তভাবে লেখা হয়েছে। কোন বিস্তারিত অ্যালগরিদম নেই. তারপর আমি ট্রেডিংভিউ, সবচেয়ে ভয়ঙ্কর সম্প্রদায়ের কথা ভেবেছিলাম।
আশানুরূপ। এটা সত্যিই আছে.
ছবি থেকে বিচার করলে, এটি ট্রেন্ডের সাথে বেশ সামঞ্জস্যপূর্ণ। কিন্তু দুর্ভাগ্যবশত এটি শুধুমাত্র একটি সতর্কতা অ্যালার্ম সংকেত।
কোড দেখে মনে হচ্ছে এটি খুব বেশি লম্বা নয়, তাই আসুন এটি অনুবাদ করে চেষ্টা করি। ! (っ•̀ω•́)っ✎⁾⁾!
সম্পূর্ণ পাইন কোড উপরের মত. .
এখানে আমরা FMZ-এ একটি নতুন কৌশল তৈরি করি এবং এর নাম দিই SuperTrade
তারপরে আমরা ফ্যাক্টর এবং পিডি দুটি প্যারামিটার সেট করি
কোডের ক্রিয়াকলাপকে আরও সহজ করার জন্য এবং বোঝার সুবিধার্থে, পাইথনের উন্নত ডেটা সম্প্রসারণ প্যাকেজ ব্যবহার করা হয়।pandas
দুপুরের খাবারের সময়, আমি শিক্ষক মেংমেংকে জিজ্ঞাসা করলাম যে FMZ এই লাইব্রেরিটিকে সমর্থন করে কিনা। বিকেলে দেখলাম এটা আসলে ব্যবহারের জন্য প্রস্তুত। শিক্ষক মেংমেং সত্যিই আশ্চর্যজনক।
1. আমাদের পান্ডাস লাইব্রেরি টাইম লাইব্রেরি আমদানি করতে হবে 2. প্রধান ফাংশনে ত্রৈমাসিক চুক্তি সেট আপ করুন (প্রধানত OKEX চলমান) 3. প্রতি 15 মিনিটে একবার সনাক্ত করতে একটি লুপ doTicker() সেট করুন। 15 মিনিটের সাইকেলে কোডটি চালান তারপর আমরা doTicker() এ মূল কৌশল লিখি।
import pandas as pd
import time
def main():
exchange.SetContractType("quarter")
preTime = 0
Log(exchange.GetAccount())
while True:
records = exchange.GetRecords(PERIOD_M15)
if records and records[-2].Time > preTime:
preTime = records[-2].Time
doTicker(records[:-1])
Sleep(1000 *60)
4. আমরা k লাইনের OHCLV পুনরুদ্ধার করতে চাই, তাই GetRecords() ব্যবহার করুন 5. আমরা পুনরুদ্ধার করা ডেটা পান্ডাস M15 = pd.DataFrame(রেকর্ড) এ আমদানি করি 6. আমরা টেবিলের হেডার ট্যাগ পরিবর্তন করতে চাই। M15.columns =[‘time’,‘open’,‘high’,‘low’,‘close’,‘volume’,‘OpenInterest’] আসলে, এটি হল ‘ওপেন’, ‘হাই’, ‘লো’ এবং ‘ক্লোজ’-এর প্রথম অক্ষরগুলিকে ছোট হাতের অক্ষরে পরিবর্তন করা, যাতে বড় হাতের এবং ছোট হাতের অক্ষর ছাড়াই পরবর্তীতে কোড লেখা সহজ হয়।
def doTicker(records):
M15 = pd.DataFrame(records)
M15.columns = ['time','open','high','low','close','volume','OpenInterest']
7. ডেটা সেট hl2=(উচ্চ+নিম্ন)/2-এ একটি কলাম hl2 যোগ করুন
#HL2
M15['hl2']=(M15['high']+M15['low'])/2
৮. এরপর, ATR গণনা করা যাক যেহেতু ATR গণনার জন্য একটি পরিবর্তনশীল দৈর্ঘ্যের প্রবর্তন প্রয়োজন, এর মান হল Pd
তারপরে আমরা মাই ল্যাঙ্গুয়েজ ম্যানুয়াল এবং গড় ATR সত্যিকারের ওঠানামা প্রশস্ততার জন্য অ্যালগরিদম ধাপগুলি নিম্নরূপ: TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR : RMA(TR,N)
নিম্নলিখিত তিনটি পার্থক্যের মধ্যে TR-এর মান সবচেয়ে বড়। 1. বর্তমান ট্রেডিং দিনের সর্বোচ্চ মূল্য এবং সর্বনিম্ন মূল্যের মধ্যে অস্থিরতা HIGH-LOW 2. আগের ট্রেডিং দিনের ক্লোজিং প্রাইস এবং বর্তমান ট্রেডিং ডে এর সর্বোচ্চ দামের মধ্যে অস্থিরতা REF(CLOSE,1)-HIGH) 3. আগের ট্রেডিং দিনের সমাপ্তি মূল্য এবং বর্তমান ট্রেডিং দিনের সর্বনিম্ন মূল্যের মধ্যে অস্থিরতা REF(CLOSE,1)-LOW) তাই TR: MAX(MAX((High-low), ABS(REF(CLOSE,1)-HIGH)), ABS(REF(CLOSE,1)-LOW));
পাইথন গণনায়
M15['prev_close']=M15['close'].shift(1)
পূর্ববর্তী সারিতে ক্লোজ-এর ডেটা পেতে আপনাকে প্রথমে একটি prev_close সেট আপ করতে হবে, অর্থাৎ, একটি নতুন প্যারামিটার তৈরি করতে 1 স্পেস দিয়ে ডানদিকে সরান।
ranges= [M15['high'] - M15['low'],M15['high']-M15['prev_close'],M15['low']-M15['prev_close']]
তারপর TR-এর তিনটি তুলনামূলক মানের অ্যারে রেকর্ড করতে একটি মধ্যবর্তী ভেরিয়েবল সংজ্ঞায়িত করুন। (HIGH-LOW) (high-prev_close) (low-prev_close)
M15['tr'] = pd.DataFrame(ranges).T.abs().max(axis=1)
আমরা ডেটা সেটে TR নামে একটি নতুন কলাম সংজ্ঞায়িত করি TR এর মান হল abs() এবং max() ফাংশন ব্যবহার করে মধ্যবর্তী ভেরিয়েবলের সবচেয়ে বড় পরম মান।
alpha = (1.0 / length) if length > 0 else 0.5
M15['atr']=M15['tr'].ewm(alpha=alpha, min_periods=length).mean()
অবশেষে, আমাদের ATR, ATR: RMA(TR,N) এর মান গণনা করতে হবে, RMA অ্যালগরিদম আসলে EMA অ্যালগরিদমের একটি নির্দিষ্ট মান বৈকল্পিক। N হল আমাদের আমদানি করা চলক, যেখানে ATR-এর জন্য ডিফল্ট প্যারামিটার হল 14। এখানে আমরা আলফা = দৈর্ঘ্যের পারস্পরিক আমদানি করি।
===
তারপর ema গণনা করতে ewm অ্যালগরিদম ব্যবহার করুন সম্পূর্ণ ATR গণনা প্রক্রিয়া নিম্নরূপ
#ATR(PD)
length=Pd
M15['prev_close']=M15['close'].shift(1)
ranges= [M15['high'] - M15['low'],M15['high']-M15['prev_close'],M15['low']-M15['prev_close']]
M15['tr'] = pd.DataFrame(ranges).T.abs().max(axis=1)
alpha = (1.0 / length) if length > 0 else 0.5
M15['atr']=M15['tr'].ewm(alpha=alpha, min_periods=length).mean()
9 আপ এবং ডিএন গণনা করা শুরু করুন
M15['Up']=M15['hl2']-(Factor*M15['atr'])
M15['Dn']=M15['hl2']+(Factor*M15['atr'])
Up=hl2 -(Factor * atr) Dn=hl2 +(Factor * atr) এটা খুব সহজ না?
নিম্নলিখিতটি টিভিতে 15-21 লাইনের মূল কোড সেগমেন্ট
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown
linecolor = Trend == 1 ? green : red
এই অনুচ্ছেদের মূল অর্থ প্রকাশ করা, যদি বুলিশ পর্যায়ে, (নিম্ন লাইন) TrendUp = max(Up,TrendUp)[1]) যদি এটি নিম্নমুখী পর্যায়ে থাকে, (উপরের লাইন) TrendDown=min(Dn,TrendDown)[1]) অন্য কথায়, একটি প্রবণতায়, ATR-এর মান ব্যানডিট বলিঙ্গার কৌশলের অনুরূপ একটি কৌশল ব্যবহার করছে। চ্যানেলের অন্য পাশ সরু করতে থাকুন
এখানে, TrendUp এবং TrendDown এর প্রতিটি গণনা স্ব-পুনরাবৃত্তি করা প্রয়োজন। অর্থাৎ, প্রতিটি ধাপ পূর্ববর্তী ধাপের উপর ভিত্তি করে গণনা করতে হবে। তাই আমাদের ডেটা সংগ্রহের মাধ্যমে লুপ করতে হবে।
এখানে প্রথমে আমাদের ডেটা সংগ্রহে TrendUp, TrendDown, Trend এবং linecolor-এর নতুন ক্ষেত্র তৈরি করতে হবে। এবং তাদের একটি প্রাথমিক মান দিন তারপর ফিলনা(0) সিনট্যাক্স ব্যবহার করে 0 দিয়ে পূর্বে গণনা করা ফলাফলে শূন্য মান সহ ডেটা পূরণ করুন
M15['TrendUp']=0.0
M15['TrendDown']=0.0
M15['Trend']=1
M15['Tsl']=0.0
M15['linecolor']='Homily'
M15 = M15.fillna(0)
একটি লুপের জন্য সক্রিয় করুন একটি লুপে পাইথন টারনারি অপারেশন ব্যবহার করা
for x in range(len(M15)):
TrendUp গণনা করুন TrendUp = MAX(Up,TrendUp[-1]) if close[-1]>TrendUp[-1] else Up সাধারণ অর্থ হল যদি পূর্ববর্তী ক্লোজ > পূর্ববর্তী TrendUp, যদি এটি সত্য হয়, তাহলে Up এবং পূর্ববর্তী TrendUp-এর মধ্যে সর্বাধিক মান নিন যদি এটি সত্য না হয়, তাহলে Up মানটি নিন এবং এটিকে বর্তমান TrendUp-এ পাস করুন।
M15['TrendUp'].values[x] = max(M15['Up'].values[x],M15['TrendUp'].values[x-1]) if (M15['close'].values[x-1]>M15['TrendUp'].values[x-1]) else M15['Up'].values[x]
একইভাবে, TrendDown গণনা করুন TrendDown=min(Dn,TrendDown[-1]) if close[-1]
M15['TrendDown'].values[x] = min(M15['Dn'].values[x],M15['TrendDown'].values[x-1]) if (M15['close'].values[x-1]<M15['TrendDown'].values[x-1]) else M15['Dn'].values[x]
আমি ছদ্ম কোড সরলীকৃত নিয়ন্ত্রণ দিক গণনা জন্য পতাকা. Trend= 1 if (close > TrendDown[-1]) else (x) x = -1 if (close< TrendUp[-1]) else Trend[-1]
এর অর্থ হল যদি ক্লোজিং প্রাইস > আগের ট্রেন্ডডাউন হয়, তাহলে 1 (বুলিশ) নিন। যদি ক্লোজিং প্রাইস < আগের TrendUp, তাহলে নিন -1 (সংক্ষিপ্ত) যদি এটি সত্য না হয়, তাহলে আগের ট্রেন্ডটি নিন (অর্থাৎ এটি অপরিবর্তিত থাকে)। গ্রাফিক ভাষায় অনুবাদ করা হয়েছে, এর অর্থ হল যদি উপরের ট্র্যাকটি অতিক্রম করা হয়, তাহলে পতাকাটি বুলিশে রূপান্তরিত হবে, এবং যদি নীচের ট্র্যাকটি অতিক্রম করা হয়, তাহলে পতাকাটি অন্য সময় অপরিবর্তিত থাকবে।
M15['Tsl'].values[x] = M15['TrendUp'].values[x] if (M15['Trend'].values[x]==1) else M15['TrendDown'].values[x]
টিএসএল এবং লাইনকালার গণনা করুন Tsl= rendUp if (Trend==1) else TrendDown Tsl চিত্রে সুপারট্রেন্ড মান উপস্থাপন করতে ব্যবহৃত হয়। এর মানে হল আপনি যখন বুলিশ হন, আপনি চার্টে নিচের ট্র্যাকটিকে চিহ্নিত করেন এবং যখন আপনি বিয়ারিশ হন, আপনি চার্টে উপরের ট্র্যাকটিকে চিহ্নিত করেন। linecolor= ‘green’ if (Trend==1) else ‘red’ লাইনকালারের অর্থ হল আপনি যদি লম্বা হন তবে সবুজ লাইন চিহ্নিত করুন, যদি আপনি ছোট হন তবে খালি রঙ চিহ্নিত করুন (প্রধানত ট্রেডিংভিউ প্রদর্শনের জন্য ব্যবহৃত হয়)
M15['Tsl'].values[x] = M15['TrendUp'].values[x] if (M15['Trend'].values[x]==1) else M15['TrendDown'].values[x]
M15['linecolor'].values[x]= 'green' if ( M15['Trend'].values[x]==1) else 'red'
কোডের পরবর্তী 23-30 লাইনগুলি মূলত প্লট অঙ্কন, যা এখানে বিস্তারিতভাবে ব্যাখ্যা করা হবে না।
অবশেষে, সংকেত নিয়ন্ত্রণ ক্রয় এবং বিক্রয়ের জন্য কোডের 2 লাইন রয়েছে ট্রেডিংভিউতে, এর অর্থ হল পতাকা উল্টানোর পর একটি সংকেত দেওয়া। শর্তসাপেক্ষ বিবৃতিগুলিকে পাইথনে রূপান্তর করুন। যদি পূর্ববর্তী ট্রেন্ড পতাকা -১ থেকে ১ এ পরিবর্তিত হয়, তাহলে এর অর্থ হল উপরের প্রতিরোধ ভেঙে গেছে। দীর্ঘ সময় ধরে খোলা যদি পূর্ববর্তী ট্রেন্ড ফ্ল্যাগ 1 থেকে -1 তে পরিবর্তিত হয়, তাহলে এর অর্থ একটি অগ্রগতি এবং সমর্থন জারি করা হয়েছে এবং একটি সংক্ষিপ্ত অবস্থান খোলা হয়েছে।
if(M15['Trend'].values[-1] == 1 and M15['Trend'].values[-2] == -1):
Log('SuperTrend V.1 Alert Long',"Create Order Buy)
if(M15['Trend'].values[-1] == -1 and M15['Trend'].values[-2] == 1):
Log('SuperTrend V.1 Alert Long',"Create Order Sell)
এই বিভাগের জন্য সম্পূর্ণ কোড নিম্নরূপ:
M15['TrendUp']=0.0
M15['TrendDown']=0.0
M15['Trend']=1
M15['Tsl']=0.0
M15['linecolor']='Homily'
M15 = M15.fillna(0)
for x in range(len(M15)):
M15['TrendUp'].values[x] = max(M15['Up'].values[x],M15['TrendUp'].values[x-1]) if (M15['close'].values[x-1]>M15['TrendUp'].values[x-1]) else M15['Up'].values[x]
M15['TrendDown'].values[x] = min(M15['Dn'].values[x],M15['TrendDown'].values[x-1]) if (M15['close'].values[x-1]<M15['TrendDown'].values[x-1]) else M15['Dn'].values[x]
M15['Trend'].values[x] = 1 if (M15['close'].values[x] > M15['TrendDown'].values[x-1]) else ( -1 if (M15['close'].values[x]< M15['TrendUp'].values[x-1])else M15['Trend'].values[x-1] )
M15['Tsl'].values[x] = M15['TrendUp'].values[x] if (M15['Trend'].values[x]==1) else M15['TrendDown'].values[x]
M15['linecolor'].values[x]= 'green' if ( M15['Trend'].values[x]==1) else 'red'
if(M15['Trend'].values[-1] == 1 and M15['Trend'].values[-2] == -1):
Log('SuperTrend V.1 Alert Long',"Create Order Buy)
Log('Tsl=',Tsl)
if(M15['Trend'].values[-1] == -1 and M15['Trend'].values[-2] == 1):
Log('SuperTrend V.1 Alert Long',"Create Order Sell)
Log('Tsl=',Tsl)
আমি সামগ্রিক কোড কাঠামো সামঞ্জস্য করেছি। এবং কৌশলের সাথে দীর্ঘ এবং সংক্ষিপ্ত সম্পর্কিত অর্ডার নির্দেশাবলী একত্রিত করুন। নীচে সম্পূর্ণ কোড আছে
'''backtest
start: 2019-05-01 00:00:00
end: 2020-04-21 00:00:00
period: 15m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
'''
import pandas as pd
import time
def main():
exchange.SetContractType("quarter")
preTime = 0
Log(exchange.GetAccount())
while True:
records = exchange.GetRecords(PERIOD_M15)
if records and records[-2].Time > preTime:
preTime = records[-2].Time
doTicker(records[:-1])
Sleep(1000 *60)
def doTicker(records):
#Log('onTick',exchange.GetTicker())
M15 = pd.DataFrame(records)
#Factor=3
#Pd=7
M15.columns = ['time','open','high','low','close','volume','OpenInterest']
#HL2
M15['hl2']=(M15['high']+M15['low'])/2
#ATR(PD)
length=Pd
M15['prev_close']=M15['close'].shift(1)
ranges= [M15['high'] - M15['low'],M15['high']-M15['prev_close'],M15['low']-M15['prev_close']]
M15['tr'] = pd.DataFrame(ranges).T.abs().max(axis=1)
alpha = (1.0 / length) if length > 0 else 0.5
M15['atr']=M15['tr'].ewm(alpha=alpha, min_periods=length).mean()
M15['Up']=M15['hl2']-(Factor*M15['atr'])
M15['Dn']=M15['hl2']+(Factor*M15['atr'])
M15['TrendUp']=0.0
M15['TrendDown']=0.0
M15['Trend']=1
M15['Tsl']=0.0
M15['linecolor']='Homily'
M15 = M15.fillna(0)
for x in range(len(M15)):
M15['TrendUp'].values[x] = max(M15['Up'].values[x],M15['TrendUp'].values[x-1]) if (M15['close'].values[x-1]>M15['TrendUp'].values[x-1]) else M15['Up'].values[x]
M15['TrendDown'].values[x] = min(M15['Dn'].values[x],M15['TrendDown'].values[x-1]) if (M15['close'].values[x-1]<M15['TrendDown'].values[x-1]) else M15['Dn'].values[x]
M15['Trend'].values[x] = 1 if (M15['close'].values[x] > M15['TrendDown'].values[x-1]) else ( -1 if (M15['close'].values[x]< M15['TrendUp'].values[x-1])else M15['Trend'].values[x-1] )
M15['Tsl'].values[x] = M15['TrendUp'].values[x] if (M15['Trend'].values[x]==1) else M15['TrendDown'].values[x]
M15['linecolor'].values[x]= 'Long' if ( M15['Trend'].values[x]==1) else 'Short'
linecolor=M15['linecolor'].values[-2]
close=M15['close'].values[-2]
Tsl=M15['Tsl'].values[-2]
if(M15['Trend'].values[-1] == 1 and M15['Trend'].values[-2] == -1):
Log('SuperTrend V.1 Alert Long','Create Order Buy')
Log('Tsl=',Tsl)
position = exchange.GetPosition()
if len(position) > 0:
Amount=position[0]["Amount"]
exchange.SetDirection("closesell")
exchange.Buy(_C(exchange.GetTicker).Sell*1.01, Amount);
exchange.SetDirection("buy")
exchange.Buy(_C(exchange.GetTicker).Sell*1.01, vol);
if(M15['Trend'].values[-1] == -1 and M15['Trend'].values[-2] == 1):
Log('SuperTrend V.1 Alert Long','Create Order Sell')
Log('Tsl=',Tsl)
position = exchange.GetPosition()
if len(position) > 0:
Amount=position[0]["Amount"]
exchange.SetDirection("closebuy")
exchange.Sell(_C(exchange.GetTicker).Buy*0.99,Amount);
exchange.SetDirection("sell")
exchange.Sell(_C(exchange.GetTicker).Buy*0.99, vol*2);
পাবলিক কৌশল লিঙ্ক https://www.fmz.com/strategy/200625
আমরা ব্যাকটেস্টিংয়ের জন্য গত বছরের ডেটা নির্বাচন করেছি। 15-মিনিট সময়ের সাথে OKEX ত্রৈমাসিক চুক্তি ব্যবহার করুন। প্যারামিটার সেট হল, Factor=3 Pd=45 vol=100 (প্রতি অর্ডার 100 টুকরা) বার্ষিক রিটার্ন প্রায় 33%। সাধারণভাবে বলতে গেলে, রিট্রেসমেন্ট খুব বড় নয়। প্রধান কারণ হল যে 312 এর তীব্র ড্রপ সিস্টেমে তুলনামূলকভাবে বড় প্রভাব ফেলেছে। যদি 312 না থাকে তবে আয় আরও ভাল হওয়া উচিত।
সুপারট্রেন্ড একটি খুব ভালো ট্রেডিং সিস্টেম
সুপারট্রেন্ড সিস্টেমের মূল নীতি হল ATR চ্যানেল ব্রেকআউট কৌশল গ্রহণ করা (কেন্ট চ্যানেলের অনুরূপ) কিন্তু মূল পরিবর্তনটি দস্যু ব্রিনের সংকীর্ণ কৌশল বা বিপরীত ডনচিয়ান নীতির ব্যবহারের মধ্যে রয়েছে। বাজার আন্দোলনের সময় ক্রমাগত উপরের এবং নীচের চ্যানেলগুলিকে সংকীর্ণ করুন। চ্যানেল ব্রেকথ্রু এবং বাঁক অপারেশন অর্জন করার জন্য. (একবার চ্যানেলটি ভেঙে গেলে, উপরের এবং নীচের রেলগুলি তাদের প্রাথমিক মানগুলিতে ফিরে আসে)
আমি ট্রেডিংভিউতে আলাদাভাবে dn TrendUp TrendDn প্লট করেছি।
এটি আপনাকে এই কৌশলটি আরও ভালভাবে বুঝতে সাহায্য করবে
এক নজরে পরিষ্কার
এছাড়াও, গিথুবে একটি জেএস সংস্করণ রয়েছে। আমি js সম্পর্কে অনেক কিছু জানি না, তবে মনে হচ্ছে if স্টেটমেন্ট থেকে এতে কিছু ভুল আছে। ঠিকানা হলhttps://github.com/Dodo33/gekko-supertrend-strategy/blob/master/Supertrend.js
অবশেষে আমি মূল ট্র্যাক ডাউন. এটি 2013.05.29 তারিখে প্রকাশিত হয়েছিল লিখেছেন রাজন্দ্রন আর Mt4 ফোরামে প্রকাশিত C++ কোডhttps://www.mql5.com/en/code/viewcode/10851/128437/Non_Repainting_SuperTrend.mq4 আমি মোটামুটিভাবে C++ এর অর্থ বুঝি, এবং সুযোগ পেলে আমি এটি পুনরায় লিখব।
আশা করি সবাই এর থেকে সারমর্ম শিখতে পারবেন। করা কঠিন। ~!