CurrencySecrets / Trendlinebreakoutea. mq4

ساخت وبلاگ

کلون از طریق HTTPS کلون با GIT یا پرداخت با SVN با استفاده از آدرس وب مخزن.

درباره URL های کلون بیشتر بدانید

خط روند

این پرونده حاوی متن یونیکد دو طرفه است که ممکن است متفاوت از آنچه در زیر آمده است ، تفسیر یا گردآوری شود. برای بررسی ، پرونده را در یک ویرایشگر باز کنید که شخصیت های پنهان Unicode را نشان می دهد. در مورد شخصیت های دو طرفه یونیکد بیشتر بدانید

 

نسخه رشته = "tl bo 1. 0" ؛
// متغیرهای جهانی خارجی
exte int ext_swings = 2 ؛// سطح نوسان ، 0 پایین ترین ، 2 متداول است
exte int ext_no_swing_lmt = 12 ؛// آخرین میله های X را به عنوان نقاط نوسان برای ترسیم خطوط روند در نظر نگیرید
exte int ext_atr = 300 ؛// ATR (x)
exte double ext_atr_max_slope = 0. 05 ؛// چند ATR که حداکثر شیب در نظر گرفته می شود
exte double ext_atr_buffer = 0. 05 ؛// چند مورد از ATR برای اضافه کردن به کم/زیاد برای اینکه "لمس" در نظر گرفته شود
exte int ext_null_closes = 0 ؛// تعداد بسته شدن فراتر از خط روند برای باطل کردن آن به عنوان یک خط روند معتبر
exte int ext_num_touches = 3 ؛// (شامل) تعداد لمس های مورد نیاز برای در نظر گرفتن یک خط روند معتبر
exte int ext_res_color = indianred ؛// خط مقاومت افقی http://docs. mql4. com/constants/colors
exte int ext_sup_color = palegreen ؛// خط پشتیبانی افقی http://docs. mql4. com/constants/colors
exte int ext_slope_res_color = lightsalmon ؛// خط مقاومت شیب دار http://docs. mql4. com/constants/colors
exte int ext_slope_sup_color = آهک ؛// خط پشتیبانی شیب دار http://docs. mql4. com/constants/colors
exte double ext_atr_ini_stop = 0. 1 ؛// بافر اضافی برای اضافه کردن فراتر از توقف اولیه
exte int ext_lookback = 3 ؛// تعداد میله ها برای یافتن بالاترین بالاترین/پایین ترین پایین
exte double ext_risk_minamt = 50 ؛// ارزش دلار حداقل مبلغ برای ریسک در هر تجارت
exte double ext_risk_divisor = 10 ؛// حساب کاربری/x = ریسک در هر تجارت
exte int ext_max_slip = 10 ؛// حداکثر نقاط لغزش مجاز به سفارش 10 = 1 پیپ
exte double ext_atr_trailstop = 2 ؛// چند برابر برای ردیابی بازار ATR (ext_atr) * x
exte double ext_atr_bo = 2 ؛// چند مورد از ATR برای تعیین اینکه آیا نوار BO است
// متغیرهای جهانی
DateTime Nowper ؛
int gate_active ، trade_tkt ؛
Double Exit_price ، trade_lots ، gate_res ، gate_sup ؛
//+------------------------------------------------------------------+
// |عملکرد اولیه سازی متخصص |
//+------------------------------------------------------------------+
int init ()
 
//----
رشته Sym = نماد () ؛
int در هر دوره () ؛
// بررسی کنید که آیا ارز فعال است
GATE_ACTION = isActive (Sym ، False) ؛
// حذف تمام خطوط و توطئه های روند قبلی
Objectsdeleteall (0) ؛
// خط مقاومت را دریافت کنید
GATE_RES = GetTrendline (Sym ، per ، true) ؛
// خط پشتیبانی را دریافت کنید
GATE_SUP = GetTrendline (Sym ، per ، false) ؛
//----
بازگشت (0) ؛
>
//+------------------------------------------------------------------+
// |عملکرد deinitialization متخصص |
//+------------------------------------------------------------------+
int deinit ()
 
//----
//----
بازگشت (0) ؛
>
//+------------------------------------------------------------------+
// |عملکرد شروع متخصص |
//+------------------------------------------------------------------+
int start ()
 
//----
رشته Sym = نماد () ؛
int در هر دوره () ؛
int d = رقم ؛
dateTime t = itime (Sym ، per ، 0) ؛
// اگر سیستم فعال نیست ، به دنبال موقعیت جدید باشید
if (gate_active == - 1)
// به دنبال شکستن
if ( GATE_RES>0)
if ( Bid> GATE_RES && GATE_RES> 0 && isBO ( sym , per , true ) && getTrend ( sym , per , true )>0) Dobuy (Sym ، per) ؛
>
// به دنبال شکستن
if ( GATE_SUP>0)
اگر (پیشنهاد0 && isbo (Sym ، per ، false) && getTrend (Sym ، per ، false)<0 ) doSell ( sym , per );
>
>دیگر
// ابتدا بررسی خواهیم کرد تا ببینیم قیمت خروج به آن رسیده است؟
// معاملات طولانی
if ( GATE_ACTIVE == OP_BUY && EXIT_PRICE> Bid && EXIT_PRICE>0) EXITNOW (SYM ، TRADE_TKT ، TRADE_LOTS ، BID) ؛
// معاملات کوتاه
if ( GATE_ACTIVE == OP_SELL && Ask> EXIT_PRICE && EXIT_PRICE>0) EXITNOW (SYM ، TRADE_TKT ، TRADE_LOTS ، ASK) ؛
// اگر دروازه فعال است ، بیایید تجزیه و تحلیل کنیم که آیا از دست دادن توقف نیاز به اصلاح دارد
GATE_ACTION = isActive (سیم ، درست) ؛
>
// فقط در تغییر هر نوار انجام دهید
if (t! = nowper)
GATE_RES = GetTrendline (Sym ، per ، true) ؛
GATE_SUP = GetTrendline (Sym ، per ، false) ؛
// بیایید مقادیر خط روند را بررسی کنیم تا ببینیم قیمت آنها چیست
نظر ("res =" + doubletoStr (gate_res ، d) + "sup =" + doubletoStr (gate_sup ، d)) ؛
nowper = t ؛
>
//----
بازگشت (0) ؛
>
//+------------------------------------------------------------------+
// این عملکرد تعیین می کند که آیا نوار فعلی یک نوار برک آوت است
BOOL ISBO (STRING SYM ، INT PER ، BOOL ISUP)
// چند برابر ATR را دریافت کنید تا مشخص شود که آیا از بین رفته است
double bo = ext_atr_bo * iAtr (سیم ، در هر ، ext_atr ، 1) ؛
// نوار فعلی را بررسی کنید تا مشخص شود آیا Breakout اتفاق افتاده است
if ( isUp && iClose ( sym , per , 0 ) - iOpen ( sym , per , 0 )>BO) بازگشت (درست) ؛
if ( ! isUp && iOpen ( sym , per , 0 ) - iClose ( sym , per , 0 )>BO) بازگشت (درست) ؛
بازگشت (نادرست) ؛
>
// این عملکرد روند را تعیین می کند
int getTrend (رشته Sym ، int در هر ، BOOL ISUP)
// بررسی اینکه آیا قیمت بیشتر از MA است (300)
if ( isUp && iClose ( sym , per , 0 )>IMA (SYM ، PER ، 300 ، 0 ، MODE_SMA ، PRICE_CLOSE ، 0)) بازگشت (1) ؛
// بررسی اینکه آیا قیمت کمتر از MA است (300)
if (! isup && iClose (سیم ، در هر ، 0)
بازگشت (0) ؛
>
// قرار دادن سفارش فروش در بازار
int dosell (رشته سیم ، int per)
// بررسی کنید که آیا سیستم مجاز به تجارت است
int trade = CheckistrAdealLowed () ، tkt = 0 ؛
if (تجارت == 0) تازه کردن () ؛
if ( trade>0)
// نوع سفارش
int ord = op_sell ؛
// دریافت قیمت ورود
ورودی مضاعف = پیشنهاد ؛
// با پرداخت سفارشات فروش در خروجی خود ، گسترش پیدا کنید
Double Spread = MarketInfo (SYM ، MODE_SPREAD) * MARKETINFO (SYM ، MODE_POINT) ؛
// از دست دادن توقف اولیه - ما از بالاترین دوره در طی دوره های X به علاوه یک بافر استفاده خواهیم کرد
Double Exit = n (ihigh (sym ، per ، ihighest (sym ، per ، mode_high ، ext_lookback ، 0)) + (ext_atr_ini_stop * iatr (sym ، per ، ext_atr ، 1))) ؛
// اضافه کردن به مقدار از دست دادن توقف اولیه
خروج += گسترش ؛
// بررسی کنید که آیا از دست دادن توقف فراتر از سطح توقف ارز است
Double Stoppt = MarketInfo (SYM ، MODE_STOPLEVEL) * MARKETINFO (SYM ، MODE_POINT) ؛
// در صورت عدم اصلاح ، خروج را برای پاسخگویی به الزامات سطح توقف اصلاح کنید
if (mathabs (ورود - خروج)
// مبلغ را برای هر تجارت ریسک کنید
ریسک دوتایی = getRiskAmount () ؛
// اکنون محاسبه کنید که مبلغ خطرناک در هر تجارت در اندازه لوط برابر است
Double Lott = MathMax (GetLots (Sym ، Entry ، Exit ، RiskAmt) ، MarketInfo (SYM ، MODE_LOTSTEP)) ؛
// همانطور که یک فرایند سفارش در بازار داریم ، به ارزش انقضا احتیاج نداریم
DateTime Expy = 0 ؛
// ذخیره یک مقدار برای MagicNumber می تواند ذهنی باشد ، می توانید هر کاری را که می خواهید انجام دهید ، من فقط از آن استفاده خواهم کرد
// ارزش () نمودار فعال ()
int magic = per ؛
// آخرین لحظه ما بررسی می کند که ما سفارش آزاد فعال این ارز نداریم
// اگر از این عملکرد با 0 خارج شویم
اگر (isactive (sym ، false)) بازگشت (0) ؛
// ارسال در سفارش فروش بازار
tkt = ordersend (سیم ، سفارش ، تعداد زیادی ، ورودی ، ext_max_slip ، خروج ، 0 ، نسخه ، جادو ، اکسپرس ، 0) ؛
if ( tkt>0)
// پرچم Gate_active ارز فعال را به درست تغییر دهید
gate_active = ord ؛
// تعیین قیمت خروج جهانی
EXIT_PRICE = خروج ؛
// سفارش ورود ما قرار داده شده است بیایید اکنون خودمان را از سفارش مطلع کنیم
Sendmail ("سفارش فروش جدید" + SYM ،
"Entry =" + D (ورودی) + " n" +
"Stoploss =" + D (خروج) + " n" +
"خطر اولیه =" + D (ریسک ، 2) + " n" +
"ریسک واقعی =" + D (ProfitatStop (Sym ، ورود ، خروج ، تعداد زیادی ، OP_SELL) ، 2) + " n" +
"LOTS =" + D (تعداد زیادی ، 2) + " n" +
"Expiry =" + TimeToStr (Expy) + " n" +
"magicnum =" + جادو + " n" +
"HHV =" + D (ihigh (Sym ، per ، ihighest (sym ، per ، mode_high ، ext_lookback ، 0))) + " n" + +
"نسخه =" + نسخه + " n"
);
>دیگری اگر (tkt == - 1)
// این کاری است که ما در صورت اشتباه انجام خواهیم داد - سعی کنید تا حد ممکن جزئیات را برگردانیم
if ( GetLastError ()>0)
sendmail ("اشتباه با سفارش فروش جدید" + سیم ،
"Entry =" + D (ورودی) + " n" +
"Stoploss =" + D (خروج) + " n" +
"خطر اولیه =" + D (ریسک ، 2) + " n" +
"ریسک واقعی =" + D (ProfitatStop (Sym ، ورود ، خروج ، تعداد زیادی ، OP_SELL) ، 2) + " n" +
"LOTS =" + D (تعداد زیادی ، 2) + " n" +
"Expiry =" + TimeToStr (Expy) + " n" +
"magicnum =" + جادو + " n" +
"HHV =" + D (ihigh (Sym ، per ، ihighest (sym ، per ، mode_high ، ext_lookback ، 0))) + " n" + +
"نسخه =" + نسخه + " n"
);
>
>
>
بازگشت (TKT) ؛
>
int dobuy (رشته سیم ، int per)
int trade = CheckistrAdealLowed () ، tkt = 0 ؛
if (تجارت == 0) تازه کردن () ؛
if ( trade>0)
int ord = op_buy ؛
ورودی دوگانه = بپرسید ؛// گسترش پرداخت شده در هنگام ورود
Double Exit = n (ilow (sym ، per ، ilowest (sym ، per ، mode_low ، ext_lookback ، 0))) - (ext_atr_ini_stop * iatr (sym ، per ، ext_atr ، 1))) ؛// قیمت مناقصه
Double Stoppt = MarketInfo (SYM ، MODE_STOPLEVEL) * MARKETINFO (SYM ، MODE_POINT) ؛
if (mathabs (ورود - خروج)
ریسک دوتایی = getRiskAmount () ؛
Double Lott = MathMax (GetLots (Sym ، Entry ، Exit ، RiskAmt) ، MarketInfo (SYM ، MODE_LOTSTEP)) ؛
DateTime Expy = 0 ؛
int magic = per ؛
اگر (isactive (sym ، false)) بازگشت (0) ؛// بررسی آخرین لحظه!
// ارسال در سفارش ورود به بازار
tkt = ordersend (سیم ، سفارش ، تعداد زیادی ، ورودی ، ext_max_slip ، خروج ، 0 ، نسخه ، جادو ، اکسپرس ، 0) ؛
if ( tkt>0)
gate_active = ord ؛
EXIT_PRICE = خروج ؛
sendmail ("سفارش خرید جدید برای" + Sym ،
"Entry =" + D (ورودی) + " n" +
"Stoploss =" + D (خروج) + " n" +
"خطر اولیه =" + D (ریسک ، 2) + " n" +
"ریسک واقعی =" + D (ProfitatStop (Sym ، ورود ، خروج ، تعداد زیادی ، OP_BUY) ، 2) + " n" +
"LOTS =" + D (تعداد زیادی ، 2) + " n" +
"Expiry =" + TimeToStr (Expy) + " n" +
"magicnum =" + جادو + " n" +
"llv =" + d (ilow (sym ، per ، ilowest (sym ، per ، mode_low ، ext_lookback ، 0))) + " n" + +
"نسخه =" + نسخه
);
>دیگری اگر (tkt == - 1)
if ( GetLastError ()>0)
sendmail ("اشتباه با سفارش خرید جدید برای" + سیم ،
"Entry =" + D (ورودی) + " n" +
"Stoploss =" + D (خروج) + " n" +
"خطر اولیه =" + D (ریسک ، 2) + " n" +
"ریسک واقعی =" + D (ProfitatStop (Sym ، ورود ، خروج ، تعداد زیادی ، OP_BUY) ، 2) + " n" +
"LOTS =" + D (تعداد زیادی ، 2) + " n" +
"Expiry =" + TimeToStr (Expy) + " n" +
"magicnum =" + جادو + " n" +
"llv =" + d (ilow (sym ، per ، ilowest (sym ، per ، mode_low ، ext_lookback ، 0))) + " n" + +
"نسخه =" + نسخه
);
>
>
>
بازگشت (TKT) ؛
>
// اصلاح شده از http://articles. mql4. com/141
int checkistradeallowed (uint maxwaiting_sec = 30)
// ابتدا بررسی کنید که آیا پایان روز فارکس است
// Pepperstone به ما اجازه نمی دهد بین ساعت 17:00 - 17:05 NY EST تجارت کنیم
if (ساعت () == 0 && دقیقه ()<5 )
چاپ (" در این مدت امکان معامله وجود ندارد، بازار بسته می شود");
بازگشت (- 1 );
>
اگر ( ! IsTradeAllowed ())
uint StartWaitingTime = GetTickCount ();
در حالی که (درست)
اگر (توقف شده است ())
چاپ ( "کارشناس توسط کاربر خاتمه یافت!" );
بازگشت (- 1 );
>
if ( GetTickCount () - StartWaitingTime>MaxWaiting_sec * 1000)
چاپ ( " بیش از حد انتظار " );
بازگشت (- 2 );
>
if ( IsTradeAllowed () ) retu ( 0 );
خواب ( 100 );
>
>دیگر
بازگشت (1)؛
>
بازگشت (- 1 );
>
// مقدار پولی که برای هر معامله ریسک می شود را محاسبه می کند
دو برابر getRiskAmount ()
بازگشت ( MathMax ( EXT_RISK_MINAMT , ( AccountBalance () + getStopPL () ) / EXT_RISK_DIVISOR ) );
>
// مجموع سود/زیان همه موقعیت های باز را محاسبه می کند، به گونه ای که گویی هر معامله باز باید انجام شود
// بلافاصله با قیمت توقف فعلی خود خارج شوید
دوبار getStopPL ()
int tot = OrdersTotal ();
نتیجه دو برابر = 0 ;
for ( int i = tot ; i>= 0 ; i -= 1)
if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )
result += profitAtStop ( OrderSymbol (), OrderOpenPrice (), OrderStopLoss (), OrderLots (), OrderType () );
>
>
بازگشت (نتیجه)؛
>
// سود/زیان معامله را در صورت ضربه زدن به استاپ محاسبه می کند
double profitAtStop ( رشته سیم، دو باز، دو استاپ، دو لات، نوع int)
نتیجه مضاعف = تعداد زیادی * MarketInfo ( sym , MODE_TICKVALUE ) / MarketInfo ( sym , MODE_TICKSIZE );
اگر (نوع == OP_BUY)
retu (N (( توقف - باز ) * نتیجه , 2 ) );
>else if (نوع == OP_SELL)
بازگشت (N ((باز توقف) * نتیجه، 2));
>
بازگشت (0) ؛
>
// تابع میانبر برای NormalizeDouble
دو برابر N ( دو برابر d , int dig = 0 )
if ( dig == 0 ) dig = رقم ;
بازگشت (NormalizeDouble (d, dig));
>
// اندازه موقعیت معامله را با توجه به ورود، ضرر اولیه و ریسک محاسبه می کند
دوبار getLots (سیم سیم رشته، دو ورودی، توقف دوگانه، ریسک دوگانه)
دو فاصله = MathAbs (ورود - توقف)،
نتیجه = (ریسک * MarketInfo ( sym , MODE_TICKSIZE ) ) / ( dist * MarketInfo ( sym , MODE_TICKVALUE ) );
بازگشت (N (نتیجه 2));
>
// تابع میانبر برای تبدیل دوبل به رشته
رشته D (d double , int dig = 0 )
if ( dig == 0 ) dig = رقم ;
بازگشت (DoubleToStr (d, dig));
>
// بررسی کنید که آیا نماد در حال حاضر موقعیت باز دارد یا خیر
int isActive ( string sym , bool checkStop )
int tots = OrdersTotal ();
for ( int i = tots ; i>= 0 ; i -= 1)
if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )
اگر ( OrderSymbol () == Sym )
// بررسی کنید که آیا ما در حال بررسی توقف انتهایی در یک سفارش فعال هستیم
اگر ( بررسی Stop && OrderType ()<2 )
// همانطور که ما در حال بررسی استاپ ها هستیم، بیایید این یکی را بررسی کنیم
// در اینجا توجه کنید که چگونه وقتی OrderMagicNumber را ذخیره می کردیم از آن برای ذخیره Period استفاده می کردیم
// هدف از این این است که به ما کمک کند در مورد ما از چه دوره زمانی استفاده شده است
// از چند فریم زمانی برای این EA در یک ارز استفاده کنید
EXIT_PRICE = getTrailingStop ( sym , OrderOpenPrice (), OrderStopLoss (), OrderOpenTime (), OrderMagicNumber (), OrderType () );
TRADE_TKT = Order Ticket ();
TRADE_LOTS = OrderLots ();
>
بازگشت (OderType () );
>
>
>
بازگشت (- 1 );
>
// این تابع به پارامترهای زیر نیاز دارد:
// sym = واحد پول
// op = قیمت افتتاحیه معامله جاری
// sl = قیمت توقف ضرر معامله جاری
// ot = تاریخ افتتاح معامله فعلی
// per = دوره نمودار فعال - برای محاسبه صحیح فاصله ATR
// type = نوع سفارش معامله جاری
double getTrailingStop ( string sym , double op , double sl , datetime ot , int per , int type )
دمای دو برابر؛
// نتیجه این تابع را در ابتدا برابر با توقف ضرر کنید
نتیجه مضاعف = sl ;
// مسافت توقف عقب را محاسبه کنید
مضاعف atr = iATR ( sym , per , EXT_ATR , 1 ) * EXT_ATR_TRAILSTOP ;
// بررسی کنید که آیا ما در نوار ورودی کار می کنیم یا خیر، اگر چنین است به نمودارهای دقیقه ای بروید تا متوجه شوید
// بالاترین بالا یا پایین ترین مقدار از زمان ورود (به جای استفاده از کل نوار) چقدر است
// همانطور که Pepperstone میله های آنها را با زمان باز شدن آن نوار مهر زمانی نشان می دهد، می توانیم قاب کنیم
// منطق ما با بررسی اینکه آیا نوار فعلی کمتر یا مساوی نوار فعلی است
// اگر چنین است، نوار فعلی *نوار ورودی است.
if (iTime (sym , per , 0 )<= ot )
temp = getMinutePrice ( sym , ot , atr , type );
if ( type == OP_BUY && temp>نتیجه ) نتیجه = دما ;
اگر ( == OP_SELL && temp
>
// میله های نمودار دوره های جاری را دریافت کنید
int b = iBars (sym, per);
// بیایید اکنون نوارها را حلقه بزنیم، با آخرین نوار شروع می کنیم
برای (int i = 0; i
// اگر زمان نمودار فعال کمتر از زمان باز شدن معامله باشد، پایان دهید
if (iTime (sym, per, i)
// محاسبه مسافت انتهایی ATR - با استفاده از دوره نمودار فعال
// و همیشه از ATR نوار قبلی به عنوان نوار فعلی استفاده می کند
// تشکیل
atr = iATR ( sym , per , EXT_ATR , i + 1 ) * EXT_ATR_TRAILSTOP ;
// برای معاملات طولانی
اگر (نوع == OP_BUY)
// با استفاده از نمودار اوج دقیقه فاصله ATR را کم کنید
temp = iHigh ( sym , per , i ) - atr ;
// با بهترین نتیجه فعلی مقایسه کنید و اگر بهتر است نتیجه را اصلاح کنید
if ( temp>نتیجه ) نتیجه = دما ;
// برای معاملات کوتاه مدت
>else if (نوع == OP_SELL)
// با استفاده از کمینه نمودار دقیقه فاصله ATR را اضافه کنید
TEMP = ILOW (SYM ، PER ، I) + ATR ؛
// با بهترین نتیجه فعلی مقایسه کنید و اگر بهتر است نتیجه را اصلاح کنید
if (دما
>
>
// نتیجه را برگردانید ، دو برابر را عادی کنید
بازگشت (n (نتیجه)) ؛
>
// این عملکرد بالاترین یا کمترین پایین را در نمودار دقیقه باز می گرداند
// پارامترهای این عملکرد:
// sym = نماد ارز
// ot = افتتاح DateTime از تجارت
// ATR = مقدار ATR که به عنوان فاصله دنباله دار استفاده می شود
// نوع = نوع سفارش تجارت
Double GetMinutePrice (String Sym ، DateTime OT ، Double ATR ، نوع int)
int per = perio_m1 ؛
int b = iBars (sym, per);
// بهتر است با یک مقدار شروع کنید ، نه 0
دو نتیجه = iClose (Sym ، per ، 0) ؛
برای (int i = 0; i
// هنگامی که نوار فعال کمتر از زمان باز است ، ما در حال تجزیه و تحلیل هستیم
// میله های قبل از ورود ، بنابراین از آنجا خارج شوید
if (iTime (sym, per, i)
if ( type == OP_BUY && iHigh ( sym , per , i )>نتیجه) نتیجه = ihigh (Sym ، per ، i) ؛
if (نوع == op_sell && ilow (سیم ، در هر ، i)
>
// اکنون که از زمان ورود بالاترین مقدار را پیدا کرده ایم ، فاصله ATR را کم می کنیم
if (نوع == op_buy) بازگشت (نتیجه - ATR) ؛
// اکنون که از زمان ورود کمترین مقدار را پیدا کرده ایم بیایید فاصله ATR را اضافه کنیم
if (نوع == op_sell) بازگشت (نتیجه + ATR) ؛
>
// این عملکرد در بازار خارج می شود ، اما به پارامترهای زیر نیاز دارد:
// Sym = نماد ارز
// TKT = شماره بلیط معاملات
// تعداد زیادی = اندازه معاملات
// P = قیمت برای خروج در
BOOL EXITNOW (STRING SYM ، INT TKT ، DOUBLE LOTS ، DOUBLE P)
// بررسی کنید که آیا خروج از تجارت اشکالی ندارد
int trade = CheckistrAdeAllowed () ؛
// اگر خوب برای سفارش سفارش دهید ، تجارت کنید
if ( trade>0)
if (OrderClose (tkt ، لات ، p ، ext_max_slip ، 0))
// تجارت موفق شده است
exit_price = 0 ؛
gate_active = - 1 ؛// تنظیم مجدد
// بیایید اکنون از طریق معاملات تاریخی حلقه کنیم و برخی از داده ها را برای بازگشت بدست آوریم
int t = orderShistoryTotal () ؛
for ( int i = t ; i>= 0 ; i -= 1)
if (orderselect (i ، select_by_pos ، mode_history))
if (OrderTicket () == TKT)
Double OP = OrderOpenPrice () ؛
dateTime ot = OrderOpentime () ؛
Double SL = OrderStopLoss () ؛
Double PR = OrderProfit () ؛
int typ = OrderType () ؛
رشته D ؛
if (typ == 0) d = "طولانی" ؛
if (typ == 1) d = "کوتاه" ؛
دوتایی CP = OrderClosePrice () ؛
dateTime ct = OrderClosetime () ؛
int mag = OrderMagicNumber () ؛
Double Comm = OrderCommission () ؛
مبادله دوبل = سفارشات () ؛
لغزش دوتایی ؛
if (typ == op_buy) slip = cp - p ؛
if (typ == op_sell) slip = p - cp ؛
زنگ تفريح ؛
>
>
>
// ارسال هشدارها
Sendmail ("خروج" + D + "برای" + SYM ،
"سود/ضرر =" + D (PR ، 2) + " n" +
"هشدار قیمت =" + D (P) + " n" +
"نزدیک قیمت =" + D (CP) + " n" +
"بستن زمان =" + timeToStr (ct) + " n" +
"کمیسیون شارژ شده =" + D (Comm ، 2) + " n" +
"مبادله های مبادله =" + D (مبادله ، 2) + " n" +
"slippage =" + d (لغزش) + " n" +
" n" +
"قیمت باز =" + D (op) + " n" +
"زمان باز =" + TimeToStr (OT) + " n" +
"شماره جادویی =" + جادو + " n" +
"Stop Loss =" + D (SL) + " n"
);
بازگشت (درست) ؛
>دیگر
// هشدار در عدم موفقیت در تجارت
Sendmail ("ERRE EXIT OF" + D + "برای" + SYM ،
"err =" + getLasterRor () + " n" +
"هشدار قیمت =" + D (P) + " n" +
"نزدیک قیمت =" + D (CP) + " n" +
"بستن زمان =" + TimeToStr (CT) + " n"
);
>
>
بازگشت (نادرست) ؛
>
//
// اسکریپت های خط روند
//
Double GetTrendline (String Sym ، Int Per ، Bool ISUP)
int swingarray [] ، temparray [] ؛
initbarsarray (سیم ، در هر ، swingarray) ؛// آرایه اولیه با تمام میله ها
// آرایه را با توجه به مجموعه سطح نوسان اصلاح کنید
برای (int s = 0 ؛ s<= EXT_SWINGS ; s += 1 )
int arrlen = arraysize (swingarray) ؛
برای (int a = 2 ؛ a
if (isup)
if (ispeak (sym ، swingarray [a - 2] ، swingarray [a - 1] ، swingarray [a] ، per)) intarraypush (temparray ، swingarray [a - 1]) ؛
>دیگر
if (istrough (sym ، swingarray [a - 2] ، swingarray [a - 1] ، swingarray [a] ، per)) intarraypush (temparray ، swingarray [a - 1]) ؛
>
>
// کپی آرایه
Flusharray (swingarray) ؛
Arraycopy (Swingarray ، Temparray) ؛
Flusharray (temparray) ؛
>
// اکنون که مجموعه ای از تمام نقاط نوسان معتبر را داریم ، هر ترکیب را آزمایش می کنیم
// از نقاط برای تعیین اینکه آیا آنها خطوط روند هستند که مشخصات ما را برآورده می کنند
نتیجه مضاعف ، Tempresult ؛
int arrSize = arrySize (swingarray) ؛
برای (a = 0 ؛ a
// ابتدا مقدار خط روند افقی این نقطه نوسان را آزمایش خواهیم کرد
tempresult = getLastValidPoint (Sym ، Swingarray [a] ، swingarray [a] ، per ، isup) ؛
// اگر شماره ای غیر از صفر را از عملکرد نقطه معتبر خود بدست آوریم ، این خط روند را ترسیم خواهیم کرد
if ( tempResult>0)
// بیایید آخرین نقطه معتبر خط روند افقی را مقایسه کنیم تا ببینیم آیا
// از نتیجه فعلی ما به قیمت نزدیکتر است
if (نتیجه == 0) نتیجه = tempresult ؛
if (isup && tempresult
if ( ! isUp && tempResult>نتیجه) نتیجه = tempresult ؛
// خط روند ترسیم
if (isup)
ObjectCreate ("res@" + swingarray [a] ، obj_trend ، 0 ، زمان [swingarray [a]] ، high [swingarray [a]] ، زمان [0] ، tempresult) ؛
ObjectSet ("res@" + swingarray [a] ، objprop_style ، style_solid) ؛
ObjectSet ("res@" + swingarray [a] ، objprop_color ، ext_res_color) ؛
>دیگر
ObjectCreate ("sup@" + swingarray [a] ، obj_trend ، 0 ، زمان [swingarray [a]] ، low [swingarray [a]] ، زمان [0] ، tempresult) ؛
ObjectSet ("sup@" + swingarray [a] ، objprop_style ، style_solid) ؛
ObjectSet ("sup@" + swingarray [a] ، objprop_color ، ext_sup_color) ؛
>
>
// بعد خطوط روند شیب دار را آزمایش خواهیم کرد
برای (int b = a + 1 ؛ b
// آخرین نقطه معتبر خط روند شیب دار را دریافت کنید
tempresult = getLastValidPoint (Sym ، Swingarray [A] ، Swingarray [B] ، در هر ، ISUP) ؛
if ( tempResult>0)
// بیایید آخرین نقطه معتبر خط روند شیب دار را مقایسه کنیم تا ببینیم آیا
// از نتیجه فعلی ما به قیمت نزدیکتر است
if (نتیجه == 0) نتیجه = tempresult ؛
if (isup && tempresult
if ( ! isUp && tempResult>نتیجه) نتیجه = tempresult ؛
// خط روند ترسیم
if (isup)
ObjectCreate ("sloperes@" + swingarray [a] ، obj_trend ، 0 ، زمان [swingarray [a]] ، high [swingarray [a]] ، زمان [0] ، tempresult) ؛
ObjectSet ("sloperes@" + swingarray [a] ، objprop_style ، style_solid) ؛
ObjectSet ("sloperes@" + swingarray [a] ، objprop_color ، ext_slope_res_color) ؛
>دیگر
ObjectCreate ("slopesup@" + swingarray [a] ، obj_trend ، 0 ، زمان [swingarray [a]] ، low [swingarray [a]] ، زمان [0] ، tempresult) ؛
ObjectSet ("slopesup@" + swingarray [a] ، objprop_style ، style_solid) ؛
ObjectSet ("slopesup@" + swingarray [a] ، objprop_color ، ext_slope_sup_color) ؛
>
>
>
>
// مقدار نزدیکترین مقدار فعلی خط روند را برگردانید
بازگشت (نتیجه)؛
>
void intarraypush (int & arr [] ، int elem)
اندازه int = arrySize (arr) ؛
ArrayResize (ARR ، اندازه + 1) ؛
arr [size] = elem ؛
>
void initbarsarray (رشته Sym ، int per ، int & arr [])
int b = iBars (sym, per);
for ( int i = b - 1 ; i>ext_no_swing_lmt ؛من -= 1)
intarraypush (arr ، i) ؛
>
>
void flusharray (int & arr [])
arrayinitialize (arr ، 0) ؛
ArrayResize (arr ، 0) ؛
>
bool istrough (رشته Sym ، سمت چپ ، int mid ، int راست ، int per)
if ( iLow ( sym , per , left )>= ilow (سیم ، در هر ، اواسط) && ilow (سیم ، در هر ، اواسط)
بازگشت (نادرست) ؛
>
BOOL ISPEAK (STRING SYM ، INT LEFT ، INT MID ، INT RIGHT ، INT PER)
اگر (ihigh (sym ، per ، چپ) ihigh (sym ، per ، راست)) بازگشت (درست) ؛
بازگشت (نادرست) ؛
>
Double getLastValidPoint (STRING SYM ، INT B1 ، INT B2 ، INT PER ، BOOL ISUP)
// ابتدا شیب خط روند را برای بررسی شیب آن به دست می آوریم
شیب دوتایی = getSlope (Sym ، B1 ، B2 ، Per ، ISUP) ، Pt ، Buffer ؛
// ما از مضربی از ATR برای بررسی اینکه آیا خط روند خیلی واضح است یا خیر استفاده خواهیم کرد
// اگر باشد با مقدار 0 از آن خارج می شویم
if ( MathAbs ( slope )>iATR (sym , per , EXT_ATR , 0 ) * EXT_ATR_MAX_SLOPE ) retu ( 0 );
// در غیر این صورت اکنون آزمایش خواهیم کرد که آیا خط روند مقدار مناسبی داشته است یا خیر
// بدون تجاوز از تعداد بسته های فراتر از آن لمس می کند.
int x = 0 , t = 0 , lastTouch ;
for ( int i = b1 ; i>= 0 ; i -= 1)
// اضافه کردن یک بافر در صورتی که قیمت به خط روند نزدیک شود اما در واقع لمس نشود
بافر = iATR ( sym , per , EXT_ATR , i ) * EXT_ATR_BUFFER ;
if (isup)
pt = iHigh ( sym , per , b1 ) + ( شیب * ( b1 - i ) );
if ( iClose ( sym , per , i )> pt && i>0 ) x += 1 ;
// یک "لمس" زمانی ایجاد می شود که یک قله را تشکیل داده باشد
if (i == lastTouch && isPeak ( sym , i + 2 , i + 1 , i , per ) ) t += 1 ;
if ( iHigh ( sym , per , i ) + buffer>= pt ) lastTouch = i - 1 ;
>دیگر
pt = iLow ( sym , per , b1 ) + (slope * (b1 - i ) );
if (iClose (sym, per, i)0 ) x += 1 ;
// یک "لمس" زمانی ایجاد می شود که یک فرورفتگی تشکیل داده باشد
if ( i == lastTouch && isTrough ( sym , i + 2 , i + 1 , i , per ) ) t += 1 ;
if ( iLow ( sym , per , i ) - buffer
>
// بررسی کنید که آیا خط روند تعداد بسته ها را شکسته است تا آن را باطل کند
if ( x>EXT_NULL_CLOSES )
// ما می خواهیم خطوط شکسته خود را ترسیم کنیم، با این حال، فقط می خواهیم ترسیم کنیم
// آن خطوط روند شکسته ای که از تعداد لمس های ما فراتر رفته است
// بین نقاط نوسان آنها شکسته نشد
اگر من= EXT_NUM_TOUCHES )
if (isup)
ObjectCreate ( " BrokenTL@ " + b1 , OBJ_TREND , 0 , Time [ b1 ] , High [ b1 ] , Time [ i ] , pt );
ObjectSet (" BrokenTL@" + b1، OBJPROP_RAY، false);
ObjectSet ( " BrokenTL@ " + b1 , OBJPROP_STYLE , STYLE_SOLID );
ObjectSet ( " BrokenTL@ " + b1 , OBJPROP_COLOR , EXT_SLOPE_RES_COLOR );
>دیگر
ObjectCreate ( " BrokenTL@ " + b1 , OBJ_TREND , 0 , Time [ b1 ], Low [ b1 ], Time [ i ], pt );
ObjectSet (" BrokenTL@" + b1، OBJPROP_RAY، false);
ObjectSet ( " BrokenTL@ " + b1 , OBJPROP_STYLE , STYLE_SOLID );
ObjectSet ( " BrokenTL@ " + b1 , OBJPROP_COLOR , EXT_SLOPE_SUP_COLOR );
>
>
بازگشت (0) ؛
>
>
// اگر خط روند از تعداد لمس ها بیشتر شود، مقدار فعلی خط روند را برمی گرداند
if ( t>= EXT_NUM_TOUCHES ) retu ( pt );
// در غیر این صورت 0 را برگردانید
بازگشت (0) ؛
>
double getSlope ( string sym , int b1 , int b2 , int per , bool isUp )
اگر (b1 == b2) برگرداند (0);
if (isup)
بازگشت ( ( iHigh ( sym , per , b1 ) - iHigh ( sym , per , b2 ) ) / ( b2 - b1 ) );// b2 - b1 عمدی است
>دیگر
بازگشت ( ( iLow ( sym , per , b1 ) - iLow ( sym , per , b2 ) ) / ( b2 - b1 ) );// b2 - b1 عمدی است
>
>
فارکس به زبان ساده...
ما را در سایت فارکس به زبان ساده دنبال می کنید

برچسب : نویسنده : طاهره ایرانی بازدید : <-PostHit-> تاريخ : شنبه 21 مرداد 1402 ساعت: 20:25