کچھی ٹریڈنگ کے فیصلے کا نظام

مصنف:چاؤ ژانگ، تاریخ: 2024-02-29 14:28:25
ٹیگز:

img

جائزہ

ٹرٹل ٹریڈنگ ڈیسشن سسٹم بریک آؤٹ تھیوری پر مبنی ایک رجحان کی پیروی کرنے والی تجارتی حکمت عملی ہے۔ یہ ممکنہ رجحانات کی نشاندہی کرنے کے لئے مخصوص ادوار میں اعلی ترین اور کم ترین قیمتوں کے اوسط حرکت پذیر کرکے تجارتی سگنل تیار کرتا ہے۔ تجارتی سگنل اس وقت پیدا ہوتے ہیں جب قیمتیں مخصوص ادوار میں اعلی ترین یا کم ترین قیمتوں سے اوپر یا نیچے ہوتی ہیں۔ اس حکمت عملی میں نسبتا complete مکمل فیصلہ سازی کا نظام بنانے کے لئے ٹریڈنگ اسٹاپس ، اہرام سازی اور منی مینجمنٹ ماڈیول بھی شامل ہوتے ہیں۔

حکمت عملی کا اصول

ٹرٹل ٹریڈنگ ڈیسیشن سسٹم کے بنیادی حکمت عملی کے سگنل N1 ادوار میں سب سے زیادہ قیمتوں اور N2 ادوار میں سب سے کم قیمتوں کے ساتھ قیمت کا موازنہ کرکے تیار کیے جاتے ہیں۔ جب قیمت N1 ادوار میں سب سے زیادہ قیمت سے تجاوز کرتی ہے تو ایک لمبا سگنل تیار کیا جاتا ہے۔ جب قیمت N2 ادوار میں سب سے کم قیمت سے تجاوز کرتی ہے تو ایک مختصر سگنل تیار کیا جاتا ہے۔ شٹ ڈاؤن موڈ کو نئی سگنل کی پیداوار کو کنٹرول کرنے کے لئے استعمال کیا جاتا ہے۔

ایک پوزیشن کھولنے کے بعد ، قیمت کا مقابلہ اسٹاپ نقصان کی قیمت سے حقیقی وقت میں کیا جائے گا تاکہ ٹریلنگ اسٹاپ سگنل پیدا کیے جاسکیں۔ نیز ، قیمت کا موازنہ ایڈ آن لائن کے ساتھ کریں تاکہ پرامڈائڈنگ سگنل پیدا ہوسکیں۔ اسٹاپ نقصان کی قیمت اور ایڈ آن لائن دونوں ATR سے متعلق ہیں۔

ہر بار پوزیشن کھولنے پر پوزیشن یونٹ کا حساب ابتدائی سرمایہ کا ایک خاص فیصد لے کر کیا جاتا ہے تاکہ کل سرمایہ پر ایک ہی نقصان کے اثرات سے بچا جاسکے۔ ایک ہی نقصان ایک خاص حد تک محدود ہے۔

فوائد کا تجزیہ

کچھی ٹریڈنگ فیصلے کے نظام کے مندرجہ ذیل فوائد ہیں:

  1. ممکنہ رجحانات کو پکڑو: ممکنہ رجحانات کی سمتوں کا تعین کرنے کے لئے ادوار کے دوران قیمتوں کا سب سے زیادہ اور سب سے کم قیمتوں کے ساتھ موازنہ کرکے ، ممکنہ قیمتوں کے رجحانات کو پہلے ہی پکڑ لیا جاسکتا ہے۔

  2. خطرے کا انتظام: واحد اور مجموعی نقصان کے خطرات پر قابو پانے کے لئے منی مینجمنٹ اور اسٹاپ نقصان کا استعمال کریں۔

  3. پرامائڈنگ مینجمنٹ: مناسب پرامائڈنگ رجحانات سے اضافی منافع حاصل کرسکتی ہے۔

  4. سالمیت: منی مینجمنٹ، سٹاپ نقصان مینجمنٹ اور پرامڈ مینجمنٹ کو یکجا کرنے سے فیصلہ سازی کا نظام زیادہ مکمل ہوتا ہے۔

  5. سادہ اور واضح: سگنل کی پیداوار کے قوانین سادہ اور براہ راست ہیں، سمجھنے اور تصدیق کرنے میں آسان ہیں.

خطرے کا تجزیہ

کچھ خطرات کے ساتھ بھی کچھی ٹریڈنگ کے فیصلے کا نظام ہے:

  1. جھوٹے بریک آؤٹ کا خطرہ: قیمتوں میں اعلی یا کم قیمتوں سے اوپر یا نیچے جھوٹے بریک آؤٹ ہوسکتے ہیں ، جس سے غلط سگنل پیدا ہوتے ہیں۔ کچھ جھوٹے بریک آؤٹ کو فلٹر کرنے کے لئے پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کیا جاسکتا ہے۔

  2. رجحان کے الٹ جانے کا خطرہ: قیمتوں میں الٹ جانے پر pyramiding کے بعد نقصان میں اضافہ ہونے کا خطرہ ہے۔ pyramiding کی تعداد کو مناسب حد تک محدود کیا جانا چاہئے اور وقت پر نقصانات کو روکنا چاہئے۔

  3. پیرامیٹرز کی اصلاح کا خطرہ: پیرامیٹرز کی ترتیبات مختلف مارکیٹوں کے لئے بہت مختلف ہوسکتی ہیں ، خطرات کو کم کرنے کے لئے پیرامیٹرز کو ہر مارکیٹ کے لئے الگ الگ بہتر بنایا جانا چاہئے۔

اصلاح کی ہدایات

Turtle Trading Decision System کو مندرجہ ذیل پہلوؤں میں بھی بہتر بنایا جاسکتا ہے:

  1. فلٹرز شامل کریں: کچھ جھوٹے بریک آؤٹ کو فلٹر کرنے کے لئے قیمتوں میں بریک آؤٹ کی رفتار کا پتہ لگائیں۔

  2. اسٹاپ نقصان کی حکمت عملی کو بہتر بنائیں: اسٹاپ نقصانات کو معقول حد تک کیسے ٹریک کریں اور منافع کی حفاظت اور غیر ضروری اسٹاپ نقصانات کو کم کرنے کے درمیان توازن قائم کریں۔

  3. مارکیٹ کے مطابق پیرامیٹر کی اصلاح: مختلف اقسام کی خصوصیات کے لئے پیرامیٹر کے مجموعے کو بہتر بنائیں۔

  4. مشین لرننگ شامل کریں: رجحانات کی سمتوں کا فیصلہ کرنے میں مدد کے لئے مشین لرننگ الگورتھم کا استعمال کریں۔

خلاصہ

ٹرٹل ٹریڈنگ ڈیسیشن سسٹم مخصوص ادوار میں قیمتوں کا سب سے زیادہ اور سب سے کم قیمتوں کے ساتھ موازنہ کرکے ممکنہ رجحان کی سمت کا فیصلہ کرتا ہے ، اور خطرے کے انتظام کے ماڈیولز کے ساتھ پورے فیصلے کے نظام کی تعمیر کرتا ہے۔ اس میں رجحان کی مضبوط نگرانی کی صلاحیت ہے ، اور اس میں غلط خرابیوں اور پیرامیٹر کی اصلاح کے کچھ خطرات بھی ہیں۔ یہ حکمت عملی مقداری تجارت کے لئے ایک بنیادی ماڈل کی حیثیت رکھ سکتی ہے ، اور اس کی بنیاد پر اپنے لئے مناسب فیصلے کے نظام تیار کرنے کے لئے اس کی توسیع اور اصلاح کی جاسکتی ہے۔


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 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/
// © 李和邪 
// 本脚本所有内容只适用于交流学习,不构成投资建议,所有后果自行承担。
//@version=5
strategy(title='Turtle Trading Strategy@lihexie',
   shorttitle='OKX-海龟交易系统@李和邪',
   overlay=true,
   pyramiding=4,
   initial_capital = 1000,
   default_qty_type = strategy.percent_of_equity,
   default_qty_value=100,
   slippage = 0,
   commission_type = strategy.commission.percent,
   commission_value = 0.05)

// 输入参数
from_date = input(timestamp("2013-01-01T00:00:00+08:00"), "From Date/开始日期")
end_date = input(timestamp("2024-08-01T00:00:00+08:00"), "To Date/结束日期")
valid_date() => true
current_mode = input.string("Mode 1", "Enter Mode/进场系统",['Mode 1','Mode 2'])
// mode 1
entry_length = input.int(20, 'Entry Length/系统1进场长度', minval=1)  // 进场长度
exit_length = input.int(10, 'Exit Length/系统2出场长度', minval=1)  // 出场长度
// mode 2
entry_length_mode2 = input.int(55, 'Mode2 Entry Length/系统2进场长度', minval=1)  // 进场长度
exit_length_mode2 = input.int(20, 'Mode2 Exit Length/系统2出场长度', minval=1) 
atr_period = input.int(14, "ATR Period/计算ATR的周期", minval=1)  // ATR周期
risk_per_trade = input.float(0.02, "Risk Per Trade/每笔交易的风险,0.02就是2%", minval=0.001, maxval=1)  // 每笔交易的风险
initial_stop_atr_multiple = input.float(2, "Initial Stop ATR Multiple/止损使用的ATR倍数", minval=0.1, maxval=10)  // 初始止损ATR倍数
pyramid_atr_multiple = input.float(0.5, "Pyramid ATR Multiple/加仓使用的ATR倍数", minval=0.1, maxval=10)  // 加仓ATR倍数
max_units = input.int(4, "Max Units/最大头寸单位数", minval=1, maxval=10)  // 最大头寸单位数

highlighting = input(title='Highlighter On/Off ?/是否高亮显示', defval=true)  // 是否高亮显示


// 初始化变量
var int units = 0
var float trailing_stop_long = na
var float trailing_stop_short = na
var float real_entry_price_long = na
var float real_entry_price_short = na
var float add_unit_price_long = na
var float add_unit_price_short = na
var bool last_trade_win = false
// 计算ATR
atr = ta.atr(atr_period)

// 计算单位大小
unit_size = (strategy.equity * risk_per_trade) / (initial_stop_atr_multiple * atr)

// 切换模式
mode_signal = current_mode == "Mode 1" ? (last_trade_win==false?true:false) : true

float entry_price_long = na
float entry_price_short = na
float exit_price_long = na
float exit_price_short = na
// 计算进场和出场价格
if current_mode == "Mode 1"
    entry_price_long := ta.highest(entry_length)
    entry_price_short := ta.lowest(entry_length)
    exit_price_long := ta.lowest(exit_length)
    exit_price_short := ta.highest(exit_length)
else
    entry_price_long := ta.highest(entry_length_mode2)
    entry_price_short := ta.lowest(entry_length_mode2)
    exit_price_long := ta.lowest(exit_length_mode2)
    exit_price_short := ta.highest(exit_length_mode2)

// 计算止损价格
stop_price_long = entry_price_long - (initial_stop_atr_multiple * atr)
stop_price_short = entry_price_short + (initial_stop_atr_multiple * atr)

// 交易逻辑
// 生成买入和卖出信号
long_signal = ta.crossover(close, entry_price_long[1]) and strategy.position_size==0 and valid_date()
short_signal = ta.crossunder(close, entry_price_short[1]) and strategy.position_size==0 and valid_date()
// 生成出场信号
exit_long_signal = ta.crossunder(close, exit_price_long[1]) and strategy.position_size > 0 and valid_date()
exit_short_signal = ta.crossover(close, exit_price_short[1]) and strategy.position_size < 0 and valid_date()

if long_signal 
    if mode_signal
        strategy.entry("Long", strategy.long, qty=unit_size, stop=stop_price_long)
        units := 1
        trailing_stop_long := stop_price_long
        real_entry_price_long := close
        add_unit_price_long := real_entry_price_long+pyramid_atr_multiple*atr
    else
        last_trade_win:=false
if short_signal 
    if mode_signal
        strategy.entry("Short", strategy.short, qty=unit_size, stop=stop_price_short)
        units := 1
        trailing_stop_short := stop_price_short
        real_entry_price_short := close
        add_unit_price_short := real_entry_price_short-pyramid_atr_multiple*atr
    else
        last_trade_win:=false
// 出场逻辑
if exit_long_signal
    last_trade_win := strategy.position_avg_price<close?true:false
    strategy.close_all("SL")
    units := 0
    real_entry_price_long := na
    add_unit_price_long := na
    trailing_stop_long := na
if exit_short_signal
    last_trade_win := strategy.position_avg_price>close?true:false
    strategy.close_all("SS")
    units := 0
    real_entry_price_short := na
    add_unit_price_short := na
    trailing_stop_short := na

// 生成加仓信号
add_unit_signal = (close > add_unit_price_long or close < add_unit_price_short) and units[1] < max_units and valid_date()
// 加仓逻辑
if add_unit_signal
    if strategy.position_size > 0
        strategy.entry("AL", strategy.long, qty=unit_size)
        real_entry_price_long := close
        add_unit_price_long := real_entry_price_long+pyramid_atr_multiple*atr
        trailing_stop_long := real_entry_price_long - (initial_stop_atr_multiple * atr)
    if strategy.position_size < 0
        strategy.entry("AS", strategy.short, qty=unit_size)
        real_entry_price_short := close
        add_unit_price_short := real_entry_price_short-pyramid_atr_multiple*atr
        trailing_stop_short := real_entry_price_short + (initial_stop_atr_multiple * atr)
    units := units + 1

// 移动止损逻辑
trailing_stop_long_signal = ta.crossunder(close, trailing_stop_long) and strategy.position_size > 0 and valid_date()
trailing_stop_short_signal = ta.crossover(close, trailing_stop_short) and strategy.position_size < 0 and valid_date()

if trailing_stop_long_signal
    last_trade_win := strategy.position_avg_price<close?true:false
    strategy.close_all("TSL")
    units := 0
    real_entry_price_long := na
    add_unit_price_long := na
    trailing_stop_long := na
if trailing_stop_short_signal
    last_trade_win := strategy.position_avg_price>close?true:false
    strategy.close_all("TSS")
    units := 0
    real_entry_price_short := na
    add_unit_price_short := na
    trailing_stop_short := na

// 美化图表
plot_entry_lowest = plot(entry_price_short, 'Lower', color=color.new(#0094FF, 0))  // 绘制进场最低线
plot_entry_highest = plot(entry_price_long, 'Upper', color=color.new(#0094FF, 0))  // 绘制进场最高线
entry_line = ta.barssince(short_signal) <= ta.barssince(long_signal) ? entry_price_short : entry_price_long  // 进场线
exit_line = ta.barssince(short_signal) <= ta.barssince(long_signal) ? exit_price_short : exit_price_long  // 出场线
plot(entry_line, title='Trend Line', color=color.new(#ff52f1, 0), linewidth=2)  // 绘制趋势线
plot_exit = plot(exit_line, title='Exit Line', color=color.new(color.blue, 0), linewidth=1, style=plot.style_circles)  // 绘制出场线

entry_long_color = highlighting and strategy.position_size>0 ? color.new(color.green, transp = 88) : na
entry_short_color = highlighting and strategy.position_size<0 ? color.new(color.red, transp = 88) : na
fill(plot_entry_highest, plot_exit, color=entry_long_color, title='Background') // 高亮多头趋势
fill(plot_entry_lowest, plot_exit, color=entry_short_color, title='Background') // 高亮空头趋势

مزید