সুপার ট্রেন্ড ভি.১ -- সুপার ট্রেন্ড লাইন সিস্টেম

লেখক:লিডিয়া, সৃষ্টিঃ ২০২২-১২-০১ ১১ঃ৩৬ঃ৩৩, আপডেটঃ ২০২৩-০৯-১১ ২০ঃ০৪ঃ৩৮

img

I. গল্পের উৎপত্তি

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

II. সিস্টেম চালু

সিএমসি মার্কেটে নতুন প্রজন্মের ইন্টেলিজেন্ট ট্রেডিং সিস্টেমে, আমরা ব্যবহার করার জন্য প্রযুক্তিগত সূচক থেকে সুপার ট্রেন্ড লাইন নির্বাচন করতে পারি, আমরা আমাদের নিজস্ব পছন্দ অনুসারে ক্রমবর্ধমান এবং হ্রাসকারী সংকেতগুলির রঙ এবং বেধ সামঞ্জস্য করতে পারি। সুপার ট্রেন্ড সূচক কি? সুপার ট্রেন্ড সূচক সূত্র বুঝতে আগে, এটি ATR বুঝতে প্রয়োজন, কারণ সুপার ট্রেন্ড সূচক মান গণনা করার জন্য ATR মান গ্রহণ করে। প্রধান অ্যালগরিদমগুলিও নিম্নলিখিত চিত্রটিতে বর্ণনা করা হয়েছেঃ

img

এটি মূলত চ্যানেলটি বর্ণনা করে যেখানে HL2 (k-লাইন গড় মূল্য) + n বার ATR। একটি ট্রেন্ডের অগ্রগতি করুন। কিন্তু নিবন্ধটি সহজ. কোন বিস্তারিত অ্যালগরিদম নেই. তারপর আমি সবচেয়ে আশ্চর্যজনক সম্প্রদায়ের চিন্তা, ট্রেডিংভিউ. প্রকৃতপক্ষে, এটা সত্যিই আছে।

img

চার্টে দেখা যাচ্ছে, এটা প্রবণতার সাথে সামঞ্জস্যপূর্ণ। দুর্ভাগ্যবশত, এটি কেবল সতর্কতার একটি সতর্কতা সংকেত।

৩. সোর্স কোড শেখা

কোডটি খুব বেশি লম্বা নয়, তাই আসুন এটি অনুবাদ করার চেষ্টা করি।!

img

সম্পূর্ণ পাইন কোড উপরের মত।

VI. কোড রূপান্তর

এখানে আমরা এফএমজেডে একটি নতুন কৌশল তৈরি করি, এর নাম দিন সুপারট্রেন্ড

img

পরবর্তী, আমরা দুটি পরামিতি সেট করব, ফ্যাক্টর এবং পিডি

img

কোড অপারেশনকে আরও সহজ করার জন্য এবং বোঝার জন্য, আমাদের পাইথনের উন্নত ডেটা সম্প্রসারণ প্যাকেজ পান্ডাস ব্যবহার করতে হবে (https://pandas.pydata.org/) এফএমজেড এখন এই লাইব্রেরীকে সমর্থন করে।

  1. আমাদের পান্ডা লাইব্রেরি এবং টাইম লাইব্রেরি আমদানি করতে হবে
  2. প্রধান ফাংশনে, ত্রৈমাসিক চুক্তির ব্যবহার সেট করুন (প্রধানত okex এর জন্য)
  3. প্রতি ১৫ মিনিটে একবার সনাক্ত করতে একটি চক্র doTicker (() সেট করুন। কোডটি ১৫ মিনিটের মধ্যে চালান তারপর আমরা 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)
  1. আমাদের কে-লাইনের OHCLV পুনরুদ্ধার করতে হবে, তাই আমরা GetRecords ব্যবহার করি (()
  2. আমরা পান্ডা M15 = pd.DataFrame ((রেকর্ড) এ উদ্ধার করা তথ্য আমদানি
  3. M15.columns = [time,open,high,low,close,volume,OpenInterest] প্রকৃতপক্ষে, এটি open, high, low, এবং close এর প্রাথমিক অক্ষরগুলিকে ছোট অক্ষরে পরিবর্তন করা, যাতে আমাদের পরবর্তী কোড লেখার জন্য বড় অক্ষর থেকে ছোট অক্ষরে পরিবর্তন করার প্রয়োজন হয় না।
def doTicker(records):
    M15 = pd.DataFrame(records)
    M15.columns = ['time','open','high','low','close','volume','OpenInterest']  
  1. ডাটা সেটে একটি কলাম যোগ করুন hl2 hl2=(উচ্চ + নিম্ন) /২
#HL2
M15['hl2']=(M15['high']+M15['low'])/2
  1. তাহলে আসুন এটিআর গণনা করি কারণ ATR গণনা একটি পরিবর্তনশীল দৈর্ঘ্য আমদানি করতে হবে, যার মান Pd

তারপরে আমরা মাইল্যাঙ্গুয়েজের ম্যানুয়ালটি উল্লেখ করি, এবং এটিআর বাস্তব ওঠানামা ব্যাপ্তির গড় মানের অ্যালগরিদম পদক্ষেপগুলি নিম্নরূপঃ 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 সেট আপ করতে হবে, অর্থাৎ, একটি নতুন পরামিতি গঠনের জন্য এক গ্রিড দ্বারা ডানদিকে বন্ধ সরানো

ranges= [M15['high'] - M15['low'],M15['high']-M15['prev_close'],M15['low']-M15['prev_close']]

এরপরে, আমরা একটি মধ্যবর্তী পরিবর্তনশীল সংজ্ঞায়িত করি যা TR এর জন্য 3 টি বিপরীত মানের একটি অ্যারে রেকর্ড করে। (উচ্চ-নিম্ন) (উচ্চ-prev_close) (নিম্ন-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. এখানে আমরা আলফা = দৈর্ঘ্যের বিপরীত আমদানি করি।

===

তারপর Ewm অ্যালগরিদম ব্যবহার করা হয় ema গণনা করতে সম্পূর্ণ এটিআর গণনা প্রক্রিয়া নিম্নরূপঃ

    #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 Up এবং Dn গণনা শুরু করুন

    M15['Up']=M15['hl2']-(Factor*M15['atr'])
    M15['Dn']=M15['hl2']+(Factor*M15['atr'])

Up=hl2 - ((ফ্যাক্টর * atr) Dn=hl2 +(ফ্যাক্টর * 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

এই অনুচ্ছেদের মূল উদ্দেশ্য হচ্ছে, যদি এটি উত্থানমুখী পর্যায়ে থাকে, (নিচের লাইন) ট্রেন্ডআপ=ম্যাক্স (উপরে, ট্রেন্ডআপ [1]) যদি এটি পতনের পর্যায়ে থাকে, (উপরের লাইন) TrendDown=min (Dn, TrendDown [1]) অর্থাৎ, একটি প্রবণতা হিসাবে, ATR মানটি Bandit Bollinger কৌশল অনুরূপ একটি প্রযুক্তি ব্যবহার করা হয়েছে। চ্যানেলের অন্য দিকে সংকীর্ণ রাখা

এখানে, ট্রেন্ডআপ এবং ট্রেন্ডডাউন এর প্রতিটি গণনার জন্য স্ব-ইটারেশন প্রয়োজন। অর্থাৎ, প্রতিটি ধাপ পূর্ববর্তী ধাপ অনুযায়ী গণনা করা উচিত। অতএব, ডেটা সেটটি লুপে পুনরাবৃত্তি করা উচিত।

প্রথমত, আমরা নতুন ক্ষেত্র TrendUp, TrendDown, Trend, linecolor তৈরি করি ডাটা সেটের জন্য। এবং তাদের একটি প্রাথমিক মান দিন তারপর আমরা 0 দিয়ে পূর্বে গণনা ফলাফলের শূন্য মান দিয়ে তথ্য পূরণ করতে ব্যাকরণ fillna (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)):

ট্রেন্ডআপ গণনা করুন ট্রেন্ডআপ = MAX(আপ,ট্রেন্ডআপ[-1]) যদি বন্ধ হয়[-1]>ট্রেন্ডআপ[-1] অন্যথায় আপ এর অর্থ হল যদি পূর্ববর্তী বন্ধ> পূর্ববর্তী ট্রেন্ডআপ সত্য হয় তবে আপ এবং পূর্ববর্তী ট্রেন্ডআপের মধ্যে সর্বাধিক মান নেওয়া হবে; যদি না হয় তবে আপ মান নেওয়া হবে এবং বর্তমান ট্রেন্ডআপের কাছে পাস করা হবে

        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=min(Dn,TrendDown[-1]) যদি বন্ধ হয়[-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]

নিম্নলিখিত নিয়ন্ত্রণ দিক গণনা করার জন্য পতাকা. আমি ছদ্ম কোড সরলীকৃত ট্রেন্ড= ১ যদি (বন্ধ > ট্রেন্ডডাউন[-১]) অন্যথায় (x) x = -1 যদি (close

এর অর্থ হল যে যদি বন্ধের মূল্য> পূর্ববর্তী ট্রেন্ডডাউন হয়, তাহলে 1 এর মান নিন। যদি না হয়, তাহলে x এর মান নিন। যদি বন্ধের মূল্য পূর্ববর্তী ট্রেন্ডআপের চেয়ে কম হয়, তাহলে -1 (ধীরগতির) মান নিন। যদি না হয়, তাহলে পূর্ববর্তী ট্রেন্ড (অপরিবর্তিত মানে) নিন চিত্র ভাষায় অনুবাদ করার জন্য বলা যায় যে উপরের ট্র্যাক ট্রানজিশন পতাকার একটি ব্রেকআউট bullish এর জন্য; এবং নিম্ন ট্র্যাক ট্রানজিশন পতাকার একটি ব্রেকআউট bearish এর জন্য। অন্য সময় পরিবর্তন হবে না।

        M15['Tsl'].values[x] = M15['TrendUp'].values[x] if  (M15['Trend'].values[x]==1) else M15['TrendDown'].values[x]

Tsl এবং Linecolor গণনা করুন Tsl= rendUp if (Trend==1) অন্যথায় TrendDown Tsl হল ইমেজে সুপার ট্রেন্ড উপস্থাপনের জন্য ব্যবহৃত মান। এর অর্থ হল যখন আমরা উত্থানমুখী থাকি তখন ইমেজে ডাউন ট্র্যাক চিহ্নিত করা এবং যখন আমরা হ্রাসমুখী থাকি তখন ইমেজের উপরের ট্র্যাক চিহ্নিত করা। linecolor= green if (Trend==1) অন্যথায় 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'

পরবর্তী ২৩-৩০ লাইন কোড মূলত প্লট অঙ্কন, যা এখানে ব্যাখ্যা করা হয় না।

অবশেষে, ক্রয় এবং বিক্রয় সংকেত নিয়ন্ত্রণ করার জন্য কোড 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)

img img

V. সম্পূর্ণ কোড

আমি কোডের কাঠামো সামঞ্জস্য করেছি। এবং আমি লং এবং শর্ট অর্ডার নির্দেশাবলীকে কৌশলতে একত্রিত করেছি। এখানে সম্পূর্ণ কোড আছে:

'''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

VI. ব্যাকটেস্টিং এবং সংক্ষিপ্তসার

আমরা ব্যাকটেস্টিংয়ের জন্য গত বছরের তথ্য নির্বাচন করেছি। আমরা OKEX ত্রৈমাসিক চুক্তি 15 মিনিটের জন্য ব্যবহার করি। সেট করা পরামিতি হলঃ ফ্যাক্টর=৩ Pd=৪৫ Vol=100 (প্রতিটি অর্ডারের জন্য ১০০টি চুক্তি) বার্ষিক আয় প্রায় ৩৩%। সাধারণভাবে বলতে গেলে, প্রত্যাহার খুব বেশি নয়, ৩১২ এর তীব্র হ্রাস সিস্টেমে তুলনামূলকভাবে বড় প্রভাব ফেলেছে, যদি ৩১২ না থাকে, তাহলে রিটার্ন ভালো হবে।

img

সপ্তম. শেষে লিখুন

সুপারট্রেন্ড একটি খুব ভাল ট্রেডিং সিস্টেম

সুপারট্রেন্ড সিস্টেমের মূল নীতি হল এটিআর চ্যানেলের অগ্রগতি কৌশল গ্রহণ করা (কেন্ট চ্যানেলের অনুরূপ) তবে এর পরিবর্তন মূলত ব্যাণ্ডিট বোলিংগারের সংকীর্ণকরণ কৌশল বা ডোনচিয়ান নীতির বিপরীত ব্যবহারের কারণে ঘটে। বাজারের ক্রিয়াকলাপে, উপরের এবং নীচের চ্যানেলগুলি ক্রমাগত সংকীর্ণ হয়। চ্যানেলের মাধ্যমে স্টিয়ারিংয়ের কাজটি অর্জনের জন্য (একবার চ্যানেলটি ভেঙে গেলে, উপরের এবং নীচের ট্র্যাকগুলি প্রাথমিক মানটিতে ফিরে আসবে)

আমি ট্রেডভিউতে, ডিএন, ট্রেন্ডআপ এবং ট্রেন্ডডিএন আলাদাভাবে গ্রাফ করি, যা কৌশলকে আরও ভালভাবে বুঝতে সাহায্য করে। এক নজরে দেখে নিনঃ

img

উপরন্তু, গিটহাব এ জেএস এর একটি সংস্করণ আছে। আমি জেএস এ ভাল নই, কিন্তু মনে হচ্ছে যদি বিবৃতিতে কিছু ভুল আছে। ঠিকানা:https://github.com/Dodo33/gekko-supertrend-strategy/blob/master/Supertrend.js

অবশেষে, আমি মূল সংস্করণটি খুঁজে পেয়েছি। ২৯ মে ২০১৩ তারিখে প্রকাশিত। লেখক রাজন্দ্রন আর। এমটি৪ ফোরামে সি++ কোড প্রকাশিত হয়েছে:https://www.mql5.com/en/code/viewcode/10851/128437/Non_Repainting_SuperTrend.mq4আমি C++ এর অর্থ মোটামুটি বুঝতে পেরেছি, এবং যখন সুযোগ হবে তখন আমি এটি পুনরায় লিখব।

আমি আশা করি আপনি এর থেকে মূল বিষয়টা শিখতে পারবেন। এটা কঠিন!


সম্পর্কিত

আরো