
مقدمه
میخواهم ایدهی هج کردن روزانه GBP/JPY و EUR/JPY را در اختیار شما قرار دهم. بله، درست دیدید، روزانه. وقتی میخواستم یک سیستم ترید جدید بسازم که با برنامهی روزانه کار میکند، و یکبار در روز معامله باز میکند و فقط حدوداً ۱۰۰ دلار روزانه سود میکند (و نه بیشتر)، و البته تمام اینها خودکار انجام میشوند، این ایده به مُخ اینجانب خطور کرد! بار اول فقط سعی کردم با سیستم ترتیبی TD ترید کنم—همان سیستمی که تام دِمارک آن را عرضه کرده (Tom Demark).
سعی کردم روزانه با آن ترید کنم، و در واقع سیستم خوبیست اما ضرر خانمانبراندازی به من زد، و [از سوختگی آن ضرر جانکاه بود که] ایدهی هج کردن دو جفتاَرز دارای همبستگی از ذهنم تراوش نمود! “چرا هج نکنم؟ بدبخت شاید کمتر از امروز ضرر بدهی یا شاید هم سود کنی. ایدهی خوبیست!” سپس تاریخچهی ۱ ماه قبل را برداشته و روی آن به شکل دستی تست را انجام دادم و نشانههایی از سوددهی خوب یافتم. دیگر صبر کردن کراهت داشت! باید آن را بهشکل خودکار درمیآوردم و واقعی روی چند ماه [گذشته] آن را امتحان میکردم! پس بیایید با هم این کار را انجام دهیم.
ایدهی هج روزانه
قبل از اینکه فرآیند کدنویسی را شروع کنیم، بیایید نقشهای جامع طراحی کنیم که این موارد را شامل شود:
- برای مشخص کردن سیگنال روند ترید روزانه از چه چیزی استفاده خواهیم کرد؟ : این کار به ما برآورد جهت امروز GBP/JPY و EUR/JPY را میدهد (این دو جفتاَرز %۹۰ مواقع همبستگی دارند). در این شرایط، انتخاب من برای دریافت سیگنال روزانه، هنوز سیستم ترتیبی TD است—توانستم یک سیستم ترتیبی TD ساده را در یک انجمن (Forum) پیدا کنم.
- کدام جفتهجها (hedging pairs) را، برای هج کردن انتخاب کنیم؟: کافیست فقط جفتهای موردعلاقه خود را انتخاب کنید. موردعلاقههای من GBP/JPY و EUR/JPY هستند که دلیلش را قبلاً گفتهام.
- کدام جفت، جفتِ پایه (base pair) خواهد بود؟ و کدامیک جفتِ هج؟: این کار کدنویسی اکسپرت را سادهتر میکند. من تصمیم گرفتم EUR/JPY را جفتِ پایه خود قرار داده و GBP/JPY را جفت هج. (“چرا پایه و هج؟”، زیرا این سیستم با روند روزانه هج میشود.) برای مثال، امروز خروجی سیگنال ترتیبی TD، روند رو به بالای EUR/JPY است، آنگاه من EUR/JPY را BUY کرده و با فروش GBP/JPY هج را انجام میدهم. یا شاید شما بتوانید با علامتگذاری روز صعودی (the UP day) وقتیکه EUR/JPY و GBP/JPY، هر دو، سیگنال ترتیبی TD رو به بالا را نشان میدهند، [ابتدا] اطمینان حاصل کنید، و سپس جفتِ پایه را بخرید (buy) و جفتِ هج را به فروش (sell) بگذارید.
- همبستگی چیست؟: همه به این فاکتور نیاز داریم و همانطور که میدانید، در سیستم هج، نقش بسیار مهمی دارد. در این مورد، من فقط زمانی اجازهی هج کردن را میدهم که همبستگی جفتاَرزها ۰.۹ یا بالاتر باشد. بله، لطفاً شگفتزده نشوید، +۰.۹، “چرا؟”، میدانم تمام اساتید هج به شما پیشنهاد میکنند وقتی همبستگی پایین است، هج انجام دهید، اما این کار برای بسیار بسیار بسیار بلندمدت است. بهنظر من و سیستم هج روزآنهام، هج کردن با همبستگی بالا بسیار بهتر است. لطفاً توجه کنید که این مورد فقط برای من و سیستم هج روزانه من است! زیرا نیاز داریم آنها (جفتاَرزها) همیشه در جهت مشابه حرکت کنند، بهخصوص امروز (یعنی روز ترید ما)، آنگاه همیشه یک مثبت و یک منفی خواهیم داشت و سپس مواقع سوئینگ فقط سود جمعآوری میکنیم، و حتی اگر آنها (جفتآرزها) هیچوقت در جهتی سودده سوئینگ نشوند، باز هم شما کمتر از معاملات منفی یکجهته، ضرر خواهید کرد.
بسیار زیبا… اکنون بیایید کدنویسی را شروع کنیم.
اکسپرت هج روزانه
در اینجا، اکسپرت را به ۵ بخش اصلی تقسیم میکنم.
- پارامترهای ورودی
- تابعِ سیگنالِ روندِ روزانه
- تابع ترید
- فرآیند ترید کردن
- تابعِ نشان دادنِ وضعیتِ هج
حال با مورد اول شروع میکنیم.
۱- پارامترهای ورودی
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~External Input Parameters~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// extern bool BlockOpening=false; extern bool ShowStatus=true; extern string Auto_Lot_______________________="_______"; // Always Calculate The Lot Size Automatically extern int PercentMaxRisk=25; // With Max Risk Of 25% by default extern string How_Much_You_Xpect?____________ ="_______"; // The Getting Profit Part extern double Daily_Percent_ROI=7.98; // How many daily %ROI you wish. extern double AcceptableLoss_ROI=3.08; // daily Acceptable loss calculated in ROI scheme. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Internal Input Parameters~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// string BaseSymbol="GBPJPY"; string H_Symbol="EURJPY"; int CorPeriod_1=3; // just for checking that short-term int CorPeriod_2=5; //& long-term Correlation are the same concederation level bool AutoLot=true; double H_B_LotsRatio=1.50; // always hedge those 2 pairs by 1:1.5 ratio int MMBase=3; string ExpectCorrelation______________= "______"; // the concederation level of their correlation. double Between=1.05; double And=0.9; string TDSequential="______"; // my easy TD-Sequential signal int cntFrom=1; // only refer the today signal by yesterday candle int cntTo=3; // count back to the 3rd candle bool ClearTradeDaily?=true; // always clear the yesterday hedge string MISC___________________________= "______"; int MagicNo=317; bool PlayAudio=false; int BSP ,HSP ,gsp ,BOP=-1 ,HOP=-1 ,up=0 ,Hcnt=0 ,u=0 ,d=0 ,day=0 ,sent=0 ,cntm ,curm ; double Lot ,BaseOpen ,HOpen ,BaseLots ,HLots ,BUM //Base Used Margin ,GBUM //Get BUM ,HUM //Hedge Used Margin ,GHUM //Get HUM ,TUM //Total Used Margin ,BPt ,HPt ,midpt3; bool SResult=false,BResult=false; bool allmeetcor=false,BlockOpen=false,cleared=false; string candletxt,tdstxt=""; double Min_Lot; double Max_Lot; double lot_step; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- BSP=MarketInfo(BaseSymbol,MODE_SPREAD); HSP=MarketInfo(H_Symbol,MODE_SPREAD); BPt=MarketInfo(BaseSymbol,MODE_POINT); HPt=MarketInfo(H_Symbol,MODE_POINT); lot_step=MarketInfo(BaseSymbol, MODE_LOTSTEP); Min_Lot=MarketInfo(BaseSymbol, MODE_MINLOT); if(Min_Lot<=0)Min_Lot=1*lot_step; Max_Lot=MarketInfo(BaseSymbol, MODE_MAXLOT); if(BSP>HSP)gsp=HSP; else gsp=BSP; //---- return(0); }
۲- تابعِ سیگنالِ روندِ روزانه
//+------------------------------------------------------------------+ //|TOM DEMARK SEQUENTIAL : Return +Value for UP & -Value for DOWN Sig| //+------------------------------------------------------------------+ int DeMark(string sym,int s) { int i,pos=36,num=0,num1=0,Rnum,w,m; for(i=pos; i>=0; i--) { double midPt3=(iClose(sym,0,i+s+cntTo)+iOpen(sym,0,i+s+cntTo))/2; if(iClose(sym,0,i+s+cntFrom)<midPt3) { w++;m=0;num++; num1=0; Rnum=-1*num; } else if(iClose(sym,0,i+cntFrom)>midPt3) { m++;w=0;num1++;num=0; Rnum=num1; } else {num1=0;num =0;Rnum=0;} } return(Rnum); } //+------------------------------------------------------------------+ //| CORRELATION : Calculate the correlation of the 2 pairs | //+------------------------------------------------------------------+ double symboldif(string symbol,int shift,int CorPeriod) { return(iClose(symbol,1440,shift)-iMA(symbol,1440,CorPeriod,0,MODE_SMA,PRICE_CLOSE,shift)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double powdif(double val) { return(MathPow(val,2)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double u(double val1,double val2) { return((val1*val2)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Cor(string base,string hedge,int CorPeriod) { double u1=0,l1=0,s1=0; for(int i=CorPeriod-1 ;i >=0 ;i--) { u1 +=u(symboldif(base,i,CorPeriod),symboldif(hedge,i,CorPeriod)); l1 +=powdif(symboldif(base,i,CorPeriod)); s1 +=powdif(symboldif(hedge,i,CorPeriod)); } if(l1*s1 >0) return(u1/MathSqrt(l1*s1)); }
۳- تابع ترید
//+------------------------------------------------------------------+ //| TOTAL PROFIT | //+------------------------------------------------------------------+ double TotalCurProfit(int magic) { double MyCurrentProfit=0; for(int cnt=0;cnt < OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==magic) { MyCurrentProfit+= (OrderProfit()+OrderSwap()); } } return(MyCurrentProfit); } //+------------------------------------------------------------------+ //| CLOSE HEDGE | //+------------------------------------------------------------------+ bool CloseHedge(int magic) { //_______________________________________________________________________ for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic) { if(OrderClose(OrderTicket() ,OrderLots() ,OrderClosePrice() ,MarketInfo(OrderSymbol(),MODE_SPREAD) ,CLR_NONE) )SResult=true; } } if(SResult||BResult){return(true);if(PlayAudio){PlaySound("ok.wav");}} else Print("CloseHedge Error: ",ErrorDescription(GetLastError())); //_______________________________________________________________________ RefreshRates(); } //+------------------------------------------------------------------+ //| SEND HEDGE | //+------------------------------------------------------------------+ bool SendH(string symbol,int op,double lots,double price,int sp,string comment,int magic) { if(OrderSend(symbol ,op ,lots ,price ,sp ,۰ ,۰ ,comment ,magic ,۰ ,CLR_NONE) >0) { return(true); if(PlayAudio)PlaySound("expert.wav"); } else {Print(symbol,": " ,magic," : " ,ErrorDescription(GetLastError())); return(false); } } //+------------------------------------------------------------------+ //| EXISTING POSITION | //+------------------------------------------------------------------+ int ExistPositions(string symbol,int magic) { int NumPos=0; for(int i=0;i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) &&OrderSymbol()==symbol &&OrderMagicNumber()==magic ) { NumPos++;} } return(NumPos); } //+------------------------------------------------------------------+ //| EXISTING OP POSITION | //+------------------------------------------------------------------+ int ExistOP(string symbol,int magic) { int NumPos=-1; for(int i=0;i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) &&OrderSymbol()==symbol &&OrderMagicNumber()==magic ) { NumPos=OrderType();} } return(NumPos); } //+------------------------------------------------------------------+ //| CLOSE SCRAP | //+------------------------------------------------------------------+ bool CloseScrap(string sym,int op,int magic) { //_______________________________________________________________________ for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic &&OrderSymbol()==sym &&OrderType()==op) { if(OrderClose(OrderTicket() ,OrderLots() ,OrderClosePrice() ,MarketInfo(OrderSymbol(),MODE_SPREAD) ,CLR_NONE) )BResult=true; } } if(SResult||BResult){return(true);if(PlayAudio){PlaySound("ok.wav");}} else Print("CloseScrap Error: ",ErrorDescription(GetLastError())); //_______________________________________________________________________ RefreshRates(); } //+------------------------------------------------------------------+ //| Transform OP Value To string | //+------------------------------------------------------------------+ string OP2Str(int op) { switch(op) { case OP_BUY : return("BUY"); case OP_SELL: return("SELL"); default : return("~~"); } } //+------------------------------------------------------------------+ //| ET ORDERTIME OF EXISTING POSITION | //+------------------------------------------------------------------+ int GetTimeExistOP(string symbol,int magic) { int NumPos=-1; for(int i=0;i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) &&OrderSymbol()==symbol &&OrderMagicNumber()==magic ) { NumPos=OrderOpenTime();} } return(NumPos); } //+------------------------------------------------------------------+ //| Translate bool to string | //+------------------------------------------------------------------+ string bool2str( bool boolval) { if(boolval==true) return("Yes"); if(boolval==false)return("No"); } //+------------------------------------------------------------------+ //|AUTO LOT | //+------------------------------------------------------------------+ double Base(int MM) { switch(MM) { case 1: return(AccountBalance()); break; case 2: return(AccountEquity()); break; case 3: return(AccountFreeMargin()); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Lots(string symbol, double risk) { if(risk > 100) risk=100; Lot=NormalizeDouble(Base(MMBase)*(risk/100)/AccountLeverage()/10.0, 2); Lot=NormalizeDouble(Lot/lot_step, 0)*lot_step; if(Lot < Min_Lot) Lot=Min_Lot; if(Lot > Max_Lot) Lot=Max_Lot; return(Lot); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double AutoBLots() { double z=1+H_B_LotsRatio ,BLot=Lots(BaseSymbol,PercentMaxRisk)/z; BLot=NormalizeDouble(BLot/lot_step, 0)*lot_step; if(BLot < Min_Lot) BLot=Min_Lot; if(BLot > Max_Lot) BLot=Max_Lot; return(BLot); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double AutoHLots() { double HLot=AutoBLots()*H_B_LotsRatio; HLot=NormalizeDouble(HLot/lot_step, 0)*lot_step; if(HLot < Min_Lot) HLot=Min_Lot; if(HLot > Max_Lot) HLot=Max_Lot; return(HLot); }
۴- پردازش ترید
//+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { midpt3=(iClose(BaseSymbol,1440,3)+iOpen(BaseSymbol,1440,3))/2; int hb=FileOpen("B317.csv", FILE_CSV|FILE_READ) // Get the latest Used Margin ,hh=FileOpen("H317.csv", FILE_CSV|FILE_READ); // for calculating the %ROI if(hb>0) { GBUM=StrToDouble(FileReadString(hb)); FileClose(hb); } if(hh>0) { GHUM=StrToDouble(FileReadString(hh)); FileClose(hh); } TUM=GBUM+GHUM; { if(Period()==1440) // only allow to atatch on D1 timeframe { //---- if(day!=Day()) // the new day has come { sent=0;cleared=false; if(ExistPositions(BaseSymbol,MagicNo)==1&&ExistPositions(H_Symbol,MagicNo)==1) { //if the hedge exist. if(Day()!= TimeDay(GetTimeExistOP(BaseSymbol,MagicNo)) && Day()!=TimeDay(GetTimeExistOP(H_Symbol,MagicNo))) //the order-time is not the same as today { if(ClearTradeDaily? && (TotalCurProfit(MagicNo)/TUM)*100>AcceptableLoss_ROI) //allow to clear hedge daily and in acceptable loss { if(CloseHedge(MagicNo)){cleared=true;BUM=0;HUM=0;} //cleared. } else //in case the Demark's signal has changed if((DeMark(BaseSymbol,0)>0&&DeMark(H_Symbol,0)>0&&DeMark(BaseSymbol,1)<0&& DeMark(H_Symbol,1)<0) ||(DeMark(BaseSymbol,0)<0&&DeMark(H_Symbol,0)<0&&DeMark(BaseSymbol,1)>0&& DeMark(H_Symbol,1)>0) ) { if(CloseHedge(MagicNo)){cleared=true;BUM=0;HUM=0;} //cleared. } } } else // in case there was any acident occure during clearing the hedge. { if(ExistPositions(BaseSymbol,MagicNo)>=1&&Day()!= TimeDay(GetTimeExistOP(BaseSymbol,MagicNo))) { if(ExistOP(BaseSymbol,MagicNo)==OP_SELL){CloseScrap(BaseSymbol,OP_SELL,MagicNo); {cleared=true;BUM=0;HUM=0;}} if(ExistOP(BaseSymbol,MagicNo)==OP_BUY ){CloseScrap(BaseSymbol,OP_BUY,MagicNo); {cleared=true;BUM=0;HUM=0;}} } else if(ExistPositions(H_Symbol,MagicNo)>=1&&Day()!= TimeDay(GetTimeExistOP(H_Symbol,MagicNo))) { if(ExistOP(H_Symbol,MagicNo)==OP_BUY) {CloseScrap(H_Symbol,OP_BUY,MagicNo); {cleared=true;BUM=0;HUM=0;}} if(ExistOP(H_Symbol,MagicNo)==OP_SELL){CloseScrap(H_Symbol,OP_SELL,MagicNo); {cleared=true;BUM=0;HUM=0;}} } } // block opening if the correlation are not in allowed level. if(( Cor(BaseSymbol,H_Symbol,CorPeriod_1)>Between || Cor(BaseSymbol,H_Symbol,CorPeriod_1)<And ) ||( Cor(BaseSymbol,H_Symbol,CorPeriod_2)>Between || Cor(BaseSymbol,H_Symbol,CorPeriod_2)<And ) ) BlockOpen=true; else BlockOpen=false; day=Day(); // the new day process finished } else // The intra-day tick comes. if(TimeCurrent()>Time[0]&&ExistPositions(BaseSymbol,MagicNo)+ExistPositions(H_Symbol,MagicNo)>1) { // there are the hedge exist if((!cleared&&(TotalCurProfit(MagicNo)/TUM)*100>AcceptableLoss_ROI&& Day()!= TimeDay(GetTimeExistOP(BaseSymbol,MagicNo))) ||((TotalCurProfit(MagicNo)/TUM)*100>Daily_Percent_ROI) ) {CloseHedge(MagicNo);BlockOpen=true;BUM=0;HUM=0;} // closed hedge when rich daily expected ROI. } //~~~~~~~ double BMid=(MarketInfo(BaseSymbol,MODE_ASK)+MarketInfo(BaseSymbol,MODE_BID))/2 ,HMid=(MarketInfo(H_Symbol,MODE_ASK)+MarketInfo(H_Symbol,MODE_BID))/2 ,BLS,HLS ,BLST,HLST; BLS=AutoBLots(); // auto calculate the hedge lots HLS=AutoHLots(); //~~~~~~~ { if(MathAbs((BMid-iOpen(BaseSymbol,1440,0)))<=BPt*gsp&& MathAbs(HMid-iOpen(H_Symbol,PERIOD_D1,0))<=HPt*gsp) // only open trade when the prices are both near each daily open { int handleB=FileOpen("B"+DoubleToStr(317,0)+".csv", FILE_CSV|FILE_WRITE, ';') ,handleH=FileOpen("H"+DoubleToStr(317,0)+".csv", FILE_CSV|FILE_WRITE, ';') ;// prepair to write the used margin to the files to recallable if(DeMark(BaseSymbol,0)>0&&DeMark(H_Symbol,0)>0 && iClose(BaseSymbol,1440,1)>midpt3 )// Demark signaled the UP TREND { up=1; BaseOpen=MarketInfo(BaseSymbol,MODE_ASK); // Buy Base Symbol HOpen =MarketInfo(H_Symbol,MODE_BID); // Sell Hedge Symbol if(MathAbs((BaseOpen-iOpen(MarketInfo(BaseSymbol,MODE_BID),1440,0)))<=BPt*gsp &&MathAbs(MarketInfo(H_Symbol,MODE_BID)-iOpen(H_Symbol,PERIOD_D1,0))<=HPt*gsp )// if they both near daily open { if(!BlockOpen && !BlockOpening) // not both Manual blocking and Correlation blocking { if(ExistPositions(BaseSymbol,MagicNo)!=0 && ExistOP(BaseSymbol,MagicNo)==OP_SELL) { // there's one (or more) old base order exist CloseScrap(BaseSymbol,OP_SELL,MagicNo);BUM=0;HUM=0; } else if(ExistPositions(BaseSymbol,MagicNo)==0 // no base order exist &&(ExistOP(H_Symbol,MagicNo)==OP_SELL || ExistOP(H_Symbol,MagicNo)==-1 ) ) { BUM=((MarketInfo("EURUSD",MODE_BID)+MarketInfo("EURUSD",MODE_ASK))/2)*BLS* (MarketInfo("EURJPY",MODE_LOTSIZE)/100); // calculate base used margin if(handleB>0) { FileWrite(handleB,BUM); // write to a file FileClose(handleB); } if(SendH(BaseSymbol,OP_BUY,BLS,BaseOpen,BSP ,"TDS UP : "+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_1),2) +"|"+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_2),2),MagicNo)) {sent++;} // sent base order BLST=BLS; } if(ExistPositions(H_Symbol,MagicNo)!=0 && ExistOP(H_Symbol,MagicNo)==OP_BUY) { // there's one (or more) old hedge order exist CloseScrap(H_Symbol,OP_BUY,MagicNo);BUM=0;HUM=0; } else // no hedge order exist if(ExistPositions(H_Symbol,MagicNo)==0 &&(ExistOP(BaseSymbol,MagicNo)==OP_BUY || ExistOP(BaseSymbol,MagicNo)==-1 ) ) { HUM=((MarketInfo("GBPUSD",MODE_BID)+MarketInfo("GBPUSD",MODE_ASK))/2)*HLS* (MarketInfo("GBPJPY",MODE_LOTSIZE)/100); // calculate the hedge used margin if(handleH>0) { FileWrite(handleH,HUM); // write to a file FileClose(handleH); } if(SendH(H_Symbol,OP_SELL,HLS,HOpen,HSP ,"TDS UP : "+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_1),2) +"|"+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_2),2),MagicNo)) {sent++;} // sent hedge order HLST=HLS; } } } } //~~~~~~~~~~~~ if(DeMark(BaseSymbol,0)<0&&DeMark(H_Symbol,0)<0 && iClose(BaseSymbol,1440,1)<midpt3 )// same thing but the DOWN signal came out { up=-1; BaseOpen=MarketInfo(BaseSymbol,MODE_BID); HOpen =MarketInfo(H_Symbol,MODE_ASK); if(MathAbs((BaseOpen-iOpen(MarketInfo(BaseSymbol,MODE_BID),1440,0)))<=BPt*gsp &&MathAbs(MarketInfo(H_Symbol,MODE_BID)-iOpen(H_Symbol,PERIOD_D1,0))<=HPt*gsp ) { if(!BlockOpen && !BlockOpening) { if(ExistPositions(BaseSymbol,MagicNo)!=0 && ExistOP(BaseSymbol,MagicNo)==OP_BUY) { CloseScrap(BaseSymbol,OP_BUY,MagicNo);BUM=0;HUM=0; } else if(ExistPositions(BaseSymbol,MagicNo)==0 &&(ExistOP(H_Symbol,MagicNo)==OP_BUY || ExistOP(H_Symbol,MagicNo)==-1 ) ) {BUM=((MarketInfo("EURUSD",MODE_BID)+MarketInfo("EURUSD",MODE_ASK))/2)*BLS* (MarketInfo("EURJPY",MODE_LOTSIZE)/100); if(handleB>0) { FileWrite(handleB,BUM); FileClose(handleB); } if(SendH(BaseSymbol,OP_SELL,BLS,BaseOpen,BSP ,"TDS DN : "+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_1),2) +"|"+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_2),2),MagicNo)) {sent++;} BLST=BLS; } if(ExistPositions(H_Symbol,MagicNo)!=0 && ExistOP(H_Symbol,MagicNo)==OP_SELL) { CloseScrap(H_Symbol,OP_SELL,MagicNo);BUM=0;HUM=0; } else if(ExistPositions(H_Symbol,MagicNo)==0 &&(ExistOP(BaseSymbol,MagicNo)==OP_SELL || ExistOP(BaseSymbol,MagicNo)==-1 ) ) {HUM=((MarketInfo("GBPUSD",MODE_BID)+MarketInfo("GBPUSD",MODE_ASK))/2)*HLS* (MarketInfo("GBPJPY",MODE_LOTSIZE)/100); if(handleH>0) { FileWrite(handleH,HUM); FileClose(handleH); } if(SendH(H_Symbol,OP_BUY,HLS,HOpen,HSP ,"TDS DN : "+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_1),2) +"|"+DoubleToStr(Cor(BaseSymbol,H_Symbol,CorPeriod_2),2),MagicNo)) {sent++;} HLST=HLS; } } } } //~~~~~~~~~~~~~~~~~ } else if(day==Day() // just check if there still be any scrab orde left by any reason. &&TimeCurrent()>Time[0] // and clear it or them &&ExistPositions(BaseSymbol,MagicNo)+ExistPositions(H_Symbol,MagicNo)!=0 ) { if((TotalCurProfit(MagicNo)/TUM)*100>AcceptableLoss_ROI) { if(ExistPositions(BaseSymbol,MagicNo)!=0 &&ExistPositions(H_Symbol,MagicNo)==0 ) { if(ExistOP(BaseSymbol,MagicNo)==OP_SELL) {CloseScrap(BaseSymbol,OP_SELL,MagicNo);BlockOpen=true;BUM=0;HUM=0;} else if(ExistOP(BaseSymbol,MagicNo)==OP_BUY) {CloseScrap(BaseSymbol,OP_BUY,MagicNo);BlockOpen=true;BUM=0;HUM=0;} } if(ExistPositions(BaseSymbol,MagicNo)==0 &&ExistPositions(H_Symbol,MagicNo)!=0 ) { if(ExistOP(H_Symbol,MagicNo)==OP_BUY) {CloseScrap(H_Symbol,OP_BUY,MagicNo);BlockOpen=true;BUM=0;HUM=0;} else if(ExistOP(H_Symbol,MagicNo)==OP_SELL) {CloseScrap(H_Symbol,OP_SELL,MagicNo);BlockOpen=true;BUM=0;HUM=0;} } } } } //---- } else Alert("Please Attatch The EA On D1 Only."); }
۵- تابعِ نشان دادنِ وضعیتِ هج
//~~~~~~~~~~~~~~~~~~~~~~~For Showing Status Section~~~~~~~~~~~~~~~~~~~~~~// if (DeMark(BaseSymbol,0)>0&&DeMark(H_Symbol,0)>0) tdstxt="UP"; else if(DeMark(BaseSymbol,0)<0&&DeMark(H_Symbol,0)<0) tdstxt="DN"; else tdstxt="~~"; if(curm!=Minute()) { cntm++; curm=Minute(); } if(cntm<=15) string timetxt="\n\nThis text section will disappear in 15 minutes after this." +"\n" +"\n\nIn order to run this EA you need to turn off every other EAs." +"\nThis EA was created to be standed alone due to the AccountMargin() function." +"\nRunning other EA at the same time will cause the WRONG calculation of your Daily ROI function." +"\nPLS Strickly follow the instruction above to see the real performance of Daily Hedge Strategy." +"\nThank You ^_^." +"\n~~~~~~~"; else timetxt=""; if(ShowStatus) { Comment( "\n\nDailyH : Daily GBPJPY ~ EURJPY Hedge." ,"\nBy sexytrade.wordpress.com" ,"\nWith A Static Magic No. of 317" ,timetxt ,"\n\nBlockOpen : "+bool2str(BlockOpen || BlockOpening) ,"\n\nB/H [sp] : "+BaseSymbol+" ["+BSP+"]"+" / "+H_Symbol+" ["+HSP+"]" ,"\nCurOp [Lots]: "+OP2Str(ExistOP(BaseSymbol,MagicNo))+" ["+DoubleToStr(BLST,2)+"]" +" ~ "+OP2Str(ExistOP(H_Symbol,MagicNo))+" ["+DoubleToStr(HLST,2)+"]" ,"\nCurPF [Expect]: $" +DoubleToStr(TotalCurProfit(MagicNo),2) +" [$" +DoubleToStr(TUM*(Daily_Percent_ROI/100),2) +" / ROI: " +DoubleToStr(Daily_Percent_ROI,2) +"]" ); } else Comment("");
بگذارید تصویری نشان دهم
سیستم هج روزانهی من با بعضی از نتایج تستهای واقعی:
نتیجهگیری
با توجه به گزارش یک ماه، و نتیجهی تست بازگشتی (Back Testing) که امکان کسب درآمد در فارکس با استفاده از ایدهی هج روزانه را نشان میدهد، من فکر میکنم این سیستم حداقل میتواند کمک کند یک ایده در ذهن شما جرقهاش بخورد (هی! نظر تو چیست [با کمک این سیستم] این کار را انجام دهیم؟ تازه به ذهنم رسیده است!) و یک سیستم پولساز بسازید که بسیار بهتر باشد.
یا شاید سبک کدنویسی من بتواند حداقل به یک تازهکار کمک کند سبک کدنویسی سنتی را تمرین کرده و در عمل ببیند و پیادهسازی کند. قویاً امیدوارم مقالهی من برای همهی خوانندهها مفید بوده باشد و آن را دوست داشته باشند، حتی اگر سیستم من بعداً شکست خورد! اکنون قصد دارم این سیستم را روی ۶ ماه گذشته امتحان کنم و در صورت امکان نتایج را منتشر خواهم کرد. فی امان الله!
این مقاله دارای فایل پیوست است.
۳۰ مورد نظر
Novost
urenrjrjkvnm
viagra without doctor prescription
real viagra without a doctor prescription usa natural ed treatment over the counter ed medication
website medicine for erectile impotence pills
best ed medicine ed vacuum pump ed treatment options
generic cialis pay pal best price for daily cialis cialis c800
ivermectin dose scabies fda ivermectin guinea pig ivermectin topical dose
prednisone uk over the counter order prednisone online prednisone 5mg
prednisone 50 mg coupon order prednisone prednisolone prednisone
ivermectin budgies ivermectin poisoning in dogs cost of stromectol medication
natural ed medications ed medication cheapest ed pills
propecia proscar where to buy finasteride propecia hair loss
prescription drugs canadian drugs online online canadian pharmacy
ed drug prices п»їerectile dysfunction medication ed medications list
buy prescription drugs without doctor the canadian drugstore how to get prescription drugs without doctor
legal to buy prescription drugs from canada buy prescription drugs from canada non prescription ed drugs
buy propecia cheap buy cheap propecia merck propecia
pharmacy without dr prescriptions highest rated canadian pharmacies order prescriptions online without doctor
reputable online pharmacies in india reputable online pharmacies in india cheap generic drugs from india
top rated canadian pharmacies online reputable canadian mail order pharmacies canadian pharmacy certified canada pharmacy online
buy prescription online from india generic drugs without doctor’s prescription pharmacy from india
ed medication top ed pills compare ed drugs
cialis pharmacy tadalafil 20 mg buy online tadalafil
stromectol 12 mg tablets stromectol without a doctor prescription stromectol pills for humans
stromectol for sale stromectol for sale stromectol 3 mg tablets price
sildenafil citrate tablets 100 mg sildenafil citrate tablets 100 mg sildenafil 100 mg
sildenafil 100 mg viagra sildenafil 100 mg lowest price
ivermectin without a doctor prescription prescribing stromectol stromectol for humans for sale
clomid buy clomid clomid tablets for sale