
شکارِ رَوَند
هشدار
اطلاعات موجود در این مقاله، صرفاً نظرات من هستند. بهعنوان نویسندهی این مقاله شما را ملزم به عمل کردن مطابق با الگوریتم توصیفشده در این مقاله نمیدانم. علاوه بر این، به شما هشدار میدهم که اطلاعات موجود در این مقاله شاید باعث ضرر و زیان شما بشوند، پس مسئولیت استفاده از این مقاله کاملاً برعهدهی خود شما است.
مقدمه
این مقاله به صحبت دربارهی یک روش برای معامله کردن میپردازد – [یعنی] جمعآوری و بهنوعی انباشت حجم معاملات سود. فرض من بر این است که فقط معاملات سود را میتوان انباشته کرد. این مقاله روش مطلوب برای انجام این کار را توضیح میدهد و کد اکسپرتی که به شما کمک میکند چنین معاملاتی را صحیح اجرا کنید را در اختیار شما قرار میدهد.
مفهوم الگوریتم
جمعآوری حجم یک معاملهی سودده اجازه میدهد حداکثر سود از حرکت بازاری که با آن مواجه هستیم را کسب کنیم. اما حجم باید طوری جمعآوری شود که نتیجهاَش افزایش ریسک نباشد. یکی از الگوریتمهای مناسب برای این کار، در این مقاله توضیح داده شدهاست.
ابتدا، به یک نقطه مرجع نیاز داریم – یعنی اولین ترید اصلی. ترید اصلی باید حجمی بیشتر از حجم هر یک از تریدهای کمکی داشته باشد. فرض کنید حجم ترید اصلی ۰.۲ (دو دَهم) لات است، آنگاه حجم تریدهای کمکی ۰.۱ لات خواهد بود. برای تمام معاملات از Trailing Stop Loss استفاده میشود، برای مثال پنجاه پوینت (points). وقتی سود ترید اصلی به +۱۰۰ points میرسد، Stop Loss، +۵۰ خواهد بود. در این لحظه، معاملهای با ۰.۱ لات در همان جهت با حد ضررِ -۵۰ points باز میشود. اگر قیمت به عقب برگردد، هر دو معامله با دستور Stop Loss بسته میشوند. سود بدستآمده برابر با ۵۰ پوینت (points) از ۰.۲ لات خواهد بود، و ضرر -۵۰ پوینت (points) از ۰.۱ لات. رویهمرفته، سود برابر است با ۵۰ پوینت (points) از ۰.۱ لات. بنابراین حفاظت در برابر ضرر در اینجا انجام شده، درحالیکه حجم معامله افزایش یافته است.
اگر یک معامله حرکت در جهت لازم را ادامه دهد، وقتی سود معاملهی کمکی به +۵۰ points میرسد، Trailing Stop Loss فعال میشود. و وقتی در ترید اصلی به سود ۲۰۰ points میرسیم، و معاملهی کمکی نیز به سود ۱۰۰ points میرسد، آنگاه یک معاملهی کمکی دیگر باز میشود. مجدد SL برابر با -۵۰ است و اِلی آخر.
این روش کاملاً ساده به ما اجازه میدهد از جمعآوری لاتیج سود خوبی بدست آوریم. و همزمان ریسک هم به حداقل میرسد. در حقیقت ریسک اینجا فقط آن قسمت از ترید اصلی است که از دست میرود؛ بهعبارت دیگر، ریسک این است که اولین معاملهی کمکی ضرر شود. اما این، ریسکِ ضرر کردن نیست، بلکه ریسکِ بدستنیاوردنِ سود کامل است.
Trailing Stop Loss استاندارد به ما اجازهی تریلینگ معاملات را فقط در صورتی میدهد که سود وجود داشته باشد. اما اگر این [کار] روی معاملات کمکی قبل از کسب سود مورد نیاز انجام شود، سوددهیِ چنین رویکردی برای جمعآوری لاتیج را میتوان افزایش داد. میتوانید این کار را انجام دهید و همچنین بازشدن معاملات کمکی را با استفاده از MQL4، بهینهسازی کنید.
پیادهسازی
اکسپرتی که برای این منظور نوشته شدهاست، بر اساس اکسپرتی است که در مقالهی(اِسکلپینگ راحت) توصیف شدهاست. در این مقاله، این اکسپرت توابع ترکیبی دارد: نقش یک جور کد تقلب در بازی و ابزاری برای باز کردن معاملات را دارد. برای این معامله، عملکرد بازی از آن حذف شدهاست. بنابراین، اکسپرت دو فِلِش روی نمودار میکِشد – بالا و پایین. حذف یکی از آنها سیگنالی است برای باز کردن معاملات در جهت لازم. برای مثال، با حذف فِلِش رو به پایین، فِلِش رو به بالا روی نمودار باقی میماند. و برای اکسپرت این سیگنالی است که میگوید یک معاملهی Buy انجام بده و چند معاملهی انتظاری Buy Stop هم درج کن.
معاملهی بازار در اینجا معاملهی اصلی است. و معاملات انتظاری عملکرد معاملات کمکی را دارند که نسبت به معاملهی اصلی دارای لاتیج کمتری میباشند. برای محاسبهی “تناوب”بازشدنِ معاملات کمکی و کمیت آنها، از دو مفهوم در اینجا استفاده شدهاست. اولین آنها، هدف نهایی، یعنی Take Profit است. که برای تمام معاملات (اصلی و کمکی) برابر است. مفهوم دوم، گامی برای باز کردن معاملات انتظاری است. بسته به هدف نهایی، اکسپرت محاسبه میکند که در فاصلۀ بین قیمت فعلی تا خط Take Profit، چه تعداد معامله میتواند درج کند.
برای مثال، اگر از Take Profit برابر با ۴۰۰ points استفاده کنیم، و گام ما برای باز کردن معامله ۱۰۰ points (بهطور پیشفرض) باشد، ۴ معاملهی Buy باز خواهد شد. اولین معامله، Buy در قیمت پیشنهادی فروش (Ask price) است، که یعنی معاملهی اصلی. معاملهی دوم، یک معاملهی کمکی Buy Stop در قیمت پیشنهادی فروش +۱۰۰ points است. معاملهی سوم، باز هم یک معاملهی کمکی Buy Stop در قیمت پیشنهادی فروش +۲۰۰ points است. و معاملهی چهارم نیز معاملهی کمکی Buy Stop در قیمت پیشنهادی فروش +۳۰۰ points خواهد بود. حد سود برای همهی معاملات، برابر با Ask +400 points خواهد بود؛ بهعبارت دیگر، برای اولین معامله، حد سودی برابر با ۴۰۰ points را خواهیم داشت، برای معاملهی دوم ۳۰۰، برای معاملهی سوم ۲۰۰، و۱۰۰ points برای معاملهی چهارم.
Trailing Stop Loss برای ترید اصلی تنها در صورتی کار میکند که سود مورد نیاز کسب شده باشد (بهطور پیشفرض ۵۰ points). و برای معاملههای کمکی Trailing Stop Loss از لحظهی بازشدن عمل خواهد کرد (بهعبارت دیگر، Stop Loss در محدودهی ضرر هم قابلیت Trail دارد). خطTrailing Stop Loss برای تمام معاملات یکی است. علاوه بر این، Trailing Stop Loss برای معاملههای کمکی یک خط Stop Loss بهحساب میآید.
اگر معاملهی اصلی بسته شود، معاملات انتظاری باقیمانده حذف میشوند. بعد از آن مجدد دو فِلِش روی نمودار رسم میشود. و این یعنی اکسپرت مجدد برای باز کردن معاملات آماده است.
تمام این مواردی که مطرح شدند، بهنظر طولانی میآید اما میتوان آنها را بهسادگی در عمل پیادهسازی کرد. بیایید کد اکسپرت را آنالیز کنیم.
//+------------------------------------------------------------------+ //| take_trend.mq4 | //| Copyright © ۲۰۰۸, FXRaider | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © ۲۰۰۸, FXRaider" extern int gap=20; //level at which arrows are placed extern int TP=400; //Take Profit level extern int SL=0; //Stop Loss level extern double Lots1=0.2; //lot of a main trade extern double Lots2=0.1; //lot of auxiliary trades extern int slippage=2; //level of acceptable requote extern int MagicNumber1=5345; //magic number of the main trade extern int MagicNumber2=4365; //magic number of auxiliary trades extern int Open_Step=100; //step for opening auxiliary trades extern bool UseTrailing = true; //enabling/disabling T-SL extern int TrailingStop = 50; //Trailing Stop Loss level extern int TrailingStep = 1; //Trailing Stop Loss step int start() { //------------------------------ //+----------------------------------------------------------------------------------------------+ //| searching open orders for a pair | int pos_sell=0; for (int i_op_sell=OrdersTotal()-1; i_op_sell>=0; i_op_sell--) { if (!OrderSelect(i_op_sell,SELECT_BY_POS,MODE_TRADES)) break; if (Symbol()==OrderSymbol() &&OrderMagicNumber()==MagicNumber1 &&(OrderType()==OP_SELL)) { pos_sell=1; break; } } int pos_buy=0; for (int i_op_buy=OrdersTotal()-1; i_op_buy>=0; i_op_buy--) { if (!OrderSelect(i_op_buy,SELECT_BY_POS,MODE_TRADES)) break; if (Symbol()==OrderSymbol() &&OrderMagicNumber()==MagicNumber1 &&(OrderType()==OP_BUY)) { pos_buy=1; break; } } //| searching open orders for a pair | //+----------------------------------------------------------------------------------------------+ //+------------------------------------------------------------------------------------+ //| working with objects | //+----------------------------------------------------------+ //| deleting objects | if(iBarShift(NULL,0,ObjectGet("down",OBJPROP_TIME1))>0 ||ObjectGet("down",OBJPROP_PRICE1)!=Open[0]-gap*Point) { ObjectDelete("down"); } if(iBarShift(NULL,0,ObjectGet("up",OBJPROP_TIME1))>0 ||ObjectGet("up",OBJPROP_PRICE1)!=Open[0]+gap*Point) { ObjectDelete("up"); } //| deleting objects | //+----------------------------------------------------------+ //+----------------------------------------------------------+ //| drawing objects | if((ObjectFind("down") != 0&&ObjectFind("up") != 0) //if no objects &&!pos_sell&&!pos_buy) //if no open orders { ObjectCreate("down", OBJ_ARROW, 0, Time[0], Open[0]-gap*Point); //draw a down arrow ObjectSet("down", OBJPROP_STYLE, STYLE_DOT); ObjectSet("down", OBJPROP_ARROWCODE, 234); ObjectSet("down", OBJPROP_COLOR, Red); ObjectCreate("up", OBJ_ARROW, 0, Time[0], Open[0]+gap*Point); //draw an up arrow ObjectSet("up", OBJPROP_STYLE, STYLE_DOT); ObjectSet("up", OBJPROP_ARROWCODE, 233); ObjectSet("up", OBJPROP_COLOR, Blue); } //| drawing objects | //+----------------------------------------------------------+ //| working with objects | //+------------------------------------------------------------------------------------+ //+----------------------------------------------------------------------------------------------+ //| deleting unnecessary orders | int cnt_del; if(pos_buy==0) { for (cnt_del=0; cnt_del<OrdersTotal(); cnt_del++) { if (!(OrderSelect(cnt_del, SELECT_BY_POS, MODE_TRADES))) continue; if(OrderSymbol()==Symbol()) { if (OrderType()==OP_BUYSTOP && OrderMagicNumber()==MagicNumber2) OrderDelete(OrderTicket()); } } } if(pos_sell==0) { for (cnt_del=0; cnt_del<OrdersTotal(); cnt_del++) { if (!(OrderSelect(cnt_del, SELECT_BY_POS, MODE_TRADES))) continue; if(OrderSymbol()==Symbol()) { if (OrderType()==OP_SELLSTOP && OrderMagicNumber()==MagicNumber2) OrderDelete(OrderTicket()); } } } //| deleting unnecessary orders | //+----------------------------------------------------------------------------------------------+ //+------------------------------------------------------------------------------------+ //| opening trades | double sl_buy, sl_sell; if(!SL) { sl_buy=0; sl_sell=0; } else { sl_buy=Ask-SL*Point; sl_sell=Bid+SL*Point; } int stop_positions=MathFloor(TP/Open_Step-1); int i, open_step_2; if( ObjectGet("up", OBJPROP_PRICE1)==Open[0]+gap*Point &&iBarShift(NULL,0,ObjectGet("up",OBJPROP_TIME1))==0 &&ObjectFind("down") != 0 &&ObjectFind("up") == 0 &&!pos_buy ) { OrderSend(Symbol(),OP_BUY, Lots1,Ask,slippage,sl_buy,Ask+TP*Point,"take_trend",MagicNumber1,0,Blue); for(i=stop_positions;i>=0; i--) { open_step_2=open_step_2+Open_Step; OrderSend(Symbol(),OP_BUYSTOP, Lots2, Ask+open_step_2*Point,slippage, ۰,Ask+TP*Point,"take_trend",MagicNumber2,0,Blue); } } if( ObjectGet("down", OBJPROP_PRICE1)==Open[0]-gap*Point &&iBarShift(NULL,0,ObjectGet("down",OBJPROP_TIME1))==0 &&ObjectFind("up") != 0 &&ObjectFind("down") == 0 &&!pos_sell ) { OrderSend(Symbol(),OP_SELL, Lots1,Bid,slippage,sl_sell,Bid-TP*Point,"take_trend",MagicNumber1,0,Red); for(i=stop_positions;i>=0; i--) { open_step_2=open_step_2+Open_Step; OrderSend(Symbol(),OP_SELLSTOP, Lots2, Bid-open_step_2*Point,slippage, ۰,Bid-TP*Point,"take_trend",MagicNumber2,0,Red); } } //| opening trades | //+------------------------------------------------------------------------------------+ //+-------------------------------------------------------------------------------------------------+ //| trail of open orders | if (UseTrailing) { for (int trall=0; trall<OrdersTotal(); trall++) { if (!(OrderSelect(trall, SELECT_BY_POS, MODE_TRADES))) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == OP_BUY ) { if (Bid-OrderOpenPrice() > TrailingStop*Point || OrderMagicNumber()==MagicNumber2) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point, OrderTakeProfit(), 0, Blue); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice()-Ask > TrailingStop*Point || OrderMagicNumber()==MagicNumber2) { if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point, OrderTakeProfit(), 0, Blue); } } } } } //| trail of open orders | //+-------------------------------------------------------------------------------------------------+ return(0); } //+------------------------------------------------------------------+
این کد تمام کامنتهای مورد نیاز را در خود دارد.
متغیرها:
gap – level, on which arrows are placed
TP – Take Profit level
SL – Stop Loss level
Lots1 – lot of a main trade
Lots2 – lot of auxiliary trades
slippage – level of acceptable requote
MagicNumber1 – magic number of the main trade
MagicNumber2 – magic number of auxiliary trades
Open_Step – step for opening auxiliary trades
UseTrailing – enabling/disabling T-SL
TrailingStop – Trailing Stop Loss level
TrailingStep – Trailing Stop Loss step
وقتی اکسپرت را روی نمودار میآوریم، دو فِلِش برای ما رسم میکند:

فِلِشی که باقی میماند، تا کندلاِستیک بعدی روی نمودار، خواهد بود:

بلافاصله بعد از اینکه یکی از فِلِشها حذف شدند، اکسپرت معاملات را باز میکند:

میبینید که فِلِش باقیمانده در اِسکرینشات نشان داده نشدهاست – همانطور که قبلتر درج شده بود، روی کندلاِستیک بعدی حذف گردیده است و فِلِشها دیگر ظاهر نمیشوند تا زمانی که تمام معاملات بسته شوند. بهمحض اینکه سود اولین معامله به حد مطلوب برسد، Trailing Stop Loss شروع به فعالیت میکند (و برای معاملات کمکی نیز همیشه فعال است). در این مثال فقط اولین معامله در بازگشت (Rollback)، بسته شدهاست. و همراه با این، تمام دیگر معاملات حذف شدهاند:

نتیجهگیری
در نتیجهگیری میخواهم این را اضافه کنم که خط Trailing Stop Loss، Take Profit و خطی که برای باز کردن معاملات کمکی است، برای هر جفتاَرز باید بهطور جداگانه انتخاب شوند. همچنین باید این را مطرح کنم که برای استفادهی موثر، خط بازشدن معاملات کمکی باید بزرگتر از خط Trailing Stop Loss باشد. در معاملهی اصلی توصیه میشود اندازهی لاتیج را بزرگتر از لاتیجِ معاملات کمکی درنظر بگیرید.
این مقاله دارای فایل پیوست است.
فایل پیوست را می توانید از اینجا دانلود کنید .
۲۴ مورد نظر
help with ed
prednisone 10 mg tablet generic prednisone can i purchase prednisone without a prescription
prednisone 5 mg tablet without a prescription where can you buy prednisone prednisone 2 5 mg
ivermectin pour on for humans can humans take animal ivermectin where to buy stromectol
ivermectin injectable dosage for goats orally ivermectin pill cost ivermectin for cows
۱۰ mg cialis for sale purchasing cialis in the usa benefits of cialis
cialis dosage purchasing cialis in the usa cheap cialis canada
cialis how long cialis usa prescription cialis price comparison no prescription
cat antibiotics without pet prescription ed meds online canada prescription drugs online
ivermectin guinea pig ivermectin solution ivermectin fungal infection
ed treatment drugs buy ed pills online how to cure ed
best male ed pills best erection pills ed treatment pills
prescription drugs canada buy online carprofen without vet prescription pain meds without written prescription
online canadian pharmacy canadian online pharmacy how to get prescription drugs without doctor
propecia tablets propecia uk propecia 5 mg
best erection pills natural remedies for ed buy erection pills
ordering prescription drugs from canada pharmacy without dr prescriptions trusted online canadian pharmacy reviews
india pharmacy india pharmacies online india pharmacies online
stromectol without a doctor prescription stromectol 12 mg tablets stromectol for sale
buy clomid 50mg online clomid for sale clomid for sale canada
clomid for sale canada clomid for sale canada clomid tablets for sale
sildenafil citrate 100mg for sale viagra tablets for men sildenafil 100 mg lowest price
viagra where to buy viagra where to buy viagra where to buy
stromectol for humans for sale prescribing stromectol stromectol for humans for sale