Author
Trader Tan
Introduction (บทนำ)
บทความนี้เกี่ยวกับความเป็นไปได้ในการคำนวณตำแหน่งที่ตั้งของแท่งเทียน เทรนด์และแนวโน้มเส้นแบ่งช่วงเวลาในบางโอกาส หลักการสร้างเส้นแนวโน้มเป็นไปตามข้อกำหนดของ DeMark เกี่ยวกับการสร้าง TD ในช่วงเวลาสุดท้าย
Basic principles of Building Intersecting Channels
(หลักการพื้นฐานของการสร้างช่องที่ตัดกัน)
สาระสำคัญของรูปแบบของ "Chuvashov's Triangle" อยู่ในความคิดที่ว่าเรามักจะมี Fractals สองชั้นล่างและสองชั้นตอนบนที่จุดใดก็ได้ เส้นแนวโน้มจะวาดผ่าน Fractals ด้านบนทั้งสองด้านและด้านล่างสองอัน
หากทั้งสองเส้นตัดกันเมื่อดำเนินการต่อไปทางขวาสร้างรูปสามเหลี่ยมจากนั้นเราจะมีรูปแบบที่เรียกว่า "Chuvashov's Triangle" จุดตัดของทั้งสองสายการทำงานเรียกว่าเอเพ็กซ์ จำนวนทั้งหมด 4 fractals ตามลำดับของการเกิดขึ้นของอินดี้ (ซ้ายไปขวา)
วาดเส้นแนวตั้งผ่าน Fractal ซ้ายที่สอง นอกจากนี้ให้วาดเส้นแนวตั้งผ่านเอเพ็กซ์ จำนวนเชิงเทียนระหว่างทั้งสองเส้นแนวตั้งรวมถึงเชิงเทียนบนเส้นแบ่งออกเป็น 3 กลมตั้งไว้ทางด้านซ้ายของเอเพ็กซ์และวาดเส้นแนวตั้งสามไว้
ระยะห่างระหว่างแนวตั้งที่วาดผ่านทางเศษส่วนที่สองและแนวตรงกลางจะสร้างพื้นที่การพัฒนาที่เกิดขึ้นจริง
หากทั้งสองเส้นตัดกันเมื่อดำเนินการต่อไปทางขวาสร้างรูปสามเหลี่ยมจากนั้นเราจะมีรูปแบบที่เรียกว่า "Chuvashov's Triangle" จุดตัดของทั้งสองสายการทำงานเรียกว่าเอเพ็กซ์ จำนวนทั้งหมด 4 fractals ตามลำดับของการเกิดขึ้นของอินดี้ (ซ้ายไปขวา)
วาดเส้นแนวตั้งผ่าน Fractal ซ้ายที่สอง นอกจากนี้ให้วาดเส้นแนวตั้งผ่านเอเพ็กซ์ จำนวนเชิงเทียนระหว่างทั้งสองเส้นแนวตั้งรวมถึงเชิงเทียนบนเส้นแบ่งออกเป็น 3 กลมตั้งไว้ทางด้านซ้ายของเอเพ็กซ์และวาดเส้นแนวตั้งสามไว้
ระยะห่างระหว่างแนวตั้งที่วาดผ่านทางเศษส่วนที่สองและแนวตรงกลางจะสร้างพื้นที่การพัฒนาที่เกิดขึ้นจริง
ลองไปวาดรูปสามเหลี่ยม
อาจมีหลายตำแหน่งในสี่ fractals สุดท้ายซึ่งเป็นไปไม่ได้ที่จะวาดรูปสามเหลี่ยมหรือสั้นเกินไปหรือยาวเกินไป
อาจมีหลายตำแหน่งในสี่ fractals สุดท้ายซึ่งเป็นไปไม่ได้ที่จะวาดรูปสามเหลี่ยมหรือสั้นเกินไปหรือยาวเกินไป
ดังนั้นจึงมีความจำเป็นที่จะต้องแนะนำเงื่อนไขต่างๆที่เพียงพอสำหรับการวาดรูปสามเหลี่ยม
เงื่อนไขบางอย่างของการรวมกันของเส้นสามเหลี่ยม:
เงื่อนไขบางอย่างของการรวมกันของเส้นสามเหลี่ยม:
- fractals แรกของเส้นบนและล่างควรเว้นระยะห่างมากกว่า 20-30 pips กันตามความสูง (ค่านี้สามารถระบุได้มากขึ้นระหว่างการทดสอบ)
- ขนาดระหว่าง fractals แรกของเส้นบนและล่างควรมีขนาดเล็กกว่าขนาดระหว่าง fractals ที่สองของเส้นเหล่านี้
- เส้นเศษส่วนแรกของเส้นบนควรจะต่ำกว่าเส้นรอบวงที่สองของเส้นเดียวกันในขณะที่เส้นรอบวงแรกของบรรทัดล่างจะอยู่เหนือเส้นที่สองของเส้นล่าง
เงื่อนไขเพิ่มเติมของรูปแบบ
ดูเหมือนว่าจะชัดเจน แต่ขอย้ายไปที่รูปที่ 3. เราจะกำหนดจำนวนบาร์ได้อย่างไรซึ่งจะมีจุดตัดกันของเส้นการทำงานสองเส้น?
รอจังหวะของ line breakthrough,หากยังไม่ทราบว่า line breakthrough ครั้งนี้เป็นจริงแ ม้ว่าจะมีอยู่แล้วเวลาที่จะเข้าสู่ตลาด! บล็อกคำนวณพื้นที่การค้นพบที่เกิดขึ้นจริงได้แก้ปัญหานี้โดยใช้พารามิเตอร์เวลา,กล่าวคือกำหนดส่วนแยกของเส้นการทำงานในช่วงเวลา
เรารู้ว่าแต่ละบาร์จะปรากฏบนกราฟหลังจากช่วงเวลาหนึ่ง ตัวอย่างเช่น แท่งใหม่จะปรากฏบน H1 ทุกๆหนึ่งชั่วโมง การรู้อัตราการเปลี่ยนแปลงราคาต่อหน่วยของแต่ละเส้นทั้งสองเส้นนั้นเป็นไปได้ในการคำนวณเวลาของการตัดกัน รู้ระยะเวลาจาก "ฐาน" ของสามเหลี่ยมถึงจุดตัดกันซึ่งเป็นไปได้ที่จะคำนวณจำนวนบาร์ (หน่วยของเวลา) ก่อนที่จะตัดกัน พื้นที่ที่เป็นความก้าวหน้าที่แท้จริงถูกกำหนดไว้ในบล็อกเดียวกัน
The Expert Advisor(EA) ได้รับการออกแบบขึ้นโดยใช้แบบเป็นกลุ่มทีละขั้นตอน
บล็อกการทำงานที่ทำซ้ำได้บ่อยที่สุดมักจะอยู่ที่จุดเริ่มต้นของโปรแกรม: การเปิดและปิดตำแหน่งฟังก์ชันสำหรับการวาดสัญลักษณ์และเส้น โปรแกรมปฏิบัติการหลักยังประกอบด้วยบล็อกที่แยกต่างหากเช่น:
- บล็อกสำหรับค้นหา fractals บนและล่าง
- บล็อกของรูปแบบการขึ้นรูปเงื่อนไข
- บล็อกสำหรับการคำนวณพื้นที่ที่เกิดขึ้นจริง
- บล็อกเงื่อนไขการเปิดตำแหน่ง
ส่วนของบล็อกการทำงานดังแสดงด้านล่าง
[
// --------------------------------------------------------------------+ void Op_Sell_Ch() { if(!OrderSend(Symbol(),OP_SELL,Lots,Bid,2,Ask+SL_S*Point, Bid-TP_S*Point," ",Magic,0,Red)) { Print(" SELL order open error # ",GetLastError()); } return(0); } // --------------------------------------------------------------------+ void Op_Buy_Ch() { if(!OrderSend(Symbol(),OP_BUY,Lots,Ask,2,Bid-SL_B*Point, Ask+TP_B*Point," ",Magic,0,Blue)) { Print(" SELL order open error # ",GetLastError()); } return(0); } //+--------------------------------------------------------------------+ void Close_S_Ch() { if(!OrderClose(OrderTicket(),OrderLots(),Ask,2,Aqua)) {Print(" Cl.ord.# ",OrderTicket()," Error # ",GetLastError());} return(0); } //+--------------------------------------------------------------------+]
การค้นหาจุดอ้างอิงด้านบนและด้านล่างสำหรับสร้างเส้นการทำงานของรูปสามเหลี่ยมมีอยู่ในแถบเรียงลำดับของแท่งตามกฎของการสร้าง fractals
"การจัดทำดัชนีองค์ประกอบของชุดเวลาจะดำเนินการย้อนกลับจากช่วงก่อนไปแถบแรกแถบปัจจุบันซึ่งเป็นอาร์เรย์ล่าสุดในช่วงนี้มีดัชนีเป็น 0"
[
// ====================================================================+ // (upper and lower fractals searching block) ---------------------------+ for (i=M;i<=N;i++) // reference points (fractals) searching loop {//loop b // searching for upper fractals -----------------------------------------+ if(High[i]>High[i+1] && High[i]>High[i+2] && High[i]>High[i-1] && High[i]>High[i-2]) {// frac_b Tfnb++; // counter // ---------------------------- if(Tfnb==1) { // for the 1 st fractal: price, index, time. TF1B=High[i]; Tf1b=i; timf1b=iTime(Symbol(),Period(),i); }//-counter_1 // ---------------------------- if(Tfnb==2) {//counter_2 // price, index, time. TF2B=High[i]; Tf2b=i; timf2b=iTime(Symbol(),Period(),i); break; }//-counter_2 // ---------------------------- }//-frac_b }//-b loop // --------------------------------------------------------------------+ for (i=M;i<=N;i++) // reference points (fractals) searching loop {//s loop // searching for lower fractals ------------------------------------------+ if(Low[i]<Low[i+1] && Low[i]<Low[i+2] && Low[i]<Low[i-1] && Low[i]<Low[i-2]) {// frac_s Tfns++; if(Tfns==1) {//counter_1 // price, index, time. TF1S=Low[i]; Tf1s=i; timf1s=iTime(Symbol(),Period(),i); }//-counter_1 if(Tfns==2) {//counter_2 // price, index, time. TF2S=Low[i]; Tf2s=i; timf2s=iTime(Symbol(),Period(),i); break; }//-counter_2 }//-frac_s }//- loop s // ---------------------------(upper and lower fractals searching block)-+]
เงื่อนไขต่อไปนี้ได้ถูกรวมไว้ในการลู่เข้าของการทำงานของรูปลักษณ์ของรูปสามเหลี่ยม
- fractals แรกควรเว้นระยะห่างมากกว่า 20-30 pips กัน
- fractals แรกของสายการทำงานหนึ่งควรน้อยกว่า fractals ที่สองของอีกหนึ่ง
- จุดอ้างอิงทั้งหมด 4 จุดแตกต่างจาก "0" ได้แก่ พวกวอลุ่มของจริง
- พารามิเตอร์เวลาของจุดอ้างอิงควรแตกต่างจาก "0"
- จุดอ้างอิงด้านบนด้านล่างอยู่ด้านล่างของส่วนบนที่สองและจุดต่ำสุดแรกสูงกว่าจุดต่ำกว่าที่สอง
- ความแตกต่างระหว่าง fractals ที่สองของเส้นจะต้องไม่เกิน 150 pips
[
// ---------------------------------------------------------------------------+ if((TF1B-TF1S)>25*Point && Tf1b<=Tf2s && Tf1s<=Tf2b && TF1B>0 && TF1S>0 && TF2B>0 && TF2S>0 && timf1b!=0 && timf2b!=0 && timf1s!=0 && timf2s!=0 && TF1B<TF2B && TF1S>TF2S && (TF2B-TF2S)/Point<150) {// triangle drawing conditions //===========================================================================+]
หลังจากปฏิบัติตามเงื่อนไขเบื้องต้นแล้วให้คำนวณอัตราการเปลี่ยนแปลงราคาสำหรับบรรทัดการทำงานทั้งบนและล่าง:
เมื่อมาถึงจุดนี้ 4 fractals สุดท้ายจะตั้งอยู่ตามเงื่อนไขการขึ้นรูปสามเหลี่ยมแม้ว่าจะยังไม่ชัดเจนเท่าไรเอฤเพ็กซ์จะเป็นและที่จะมีการพัฒนาพื้นที่ที่เกิดขึ้นจริง การคำนวณเอฟเพ็กซ์ขึ้นอยู่กับตำแหน่งของเศษส่วนที่สองจากสี่ตัวที่ผ่านมาในระหว่างการสร้าง (จากซ้ายไปขวาบนแผนภูมิ)[
// -----------------------------------------------------------------------------+ // - (block Price change rate calculation)(upper and lower pips per one bar) if(TF1B!=TF2B) {RatePriceH=MathAbs((TF2B-TF1B)/(Tf2b-Tf1b));} // for the upper if(TF1S!=TF2S) {RatePriceS=MathAbs((TF1S-TF2S)/(Tf2s-Tf1s));} // for the lower // Print(" RatePriceS= ",RatePriceS); Print(" RatePriceH= ",RatePriceH); // -------------------------------------(block Price change rate calculation)---+]
จุดเริ่มต้นของเส้นทำงานยาวควรกำหนดเป็นจุดตัดแนวตั้งที่วาดผ่านเส้นรอบวงที่สองของสายการทำงานสั้น ๆ ตามแนวยาว ในส่วนนี้อัลกอริธึมโปรแกรมต่อไปจะแบ่งออกเป็นสองทิศทางของการคำนวณพื้นที่ที่เกิดขึ้นจริง: "ยาว" บนและ "ยาว" สายการทำงานลดลง
โค้ดขั้นพื้นฐานเกี่ยวกับทิศทางใดทิศทางหนึ่งดังแสดงด้านล่าง ทิศทางที่สองถูกคำนวณโดยใช้อัลกอริทึมเดียวกัน
[
// жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 1. upper working line is longer than the lower one жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ // - (block of searching for the working line's intersection point) ----------------------------------------------------------+ // If the upper working line is longer than the lower one - find the intersection point on 50 bars if(Tf2b>Tf2s && TF2B>TF1B && TF2S<TF1S) {// The upper working line is longer // the starting price for calculation of values at each bar of the upper working line Starting_Price_H=TF2B-RatePriceH*(Tf2b-Tf2s); // the starting price for calculation of values at each bar of the upper working line Starting_Price_S=TF2S; //the time of drawing the vertical line at the triangle's base time_starting=timf2s; // ------------------------------------ for(int k=1;k<=50;k++) {//50b loop PricB[k]=Starting_Price_H-RatePriceH*k; // minus fall rate PricS[k]=Starting_Price_S+RatePriceS*k; // plus rising rate // if prices of the upper and lower lines' projections coincide or the price of the upper one if(PricB[k]<=PricS[k]) // has become less than that of the lower one, then there is the intersection with the working line {//there is the intersection P_Tria=PricB[k-1]; // working line intersection price (-1) - should be one bar less cut_left=k; break; // number of bars from the base up to the intersection point }//-there is an intersection }//-50b loop // -------------------------------------- (block of searching for working line's intersection point)--------------------------+]
ตอนนี้เราสามารถเริ่มคำนวณค่าพารามิเตอร์เวลาที่ใช้ในการพัฒนาพื้นที่จริงได้:
[
// ---------------------------------------------------------------------------+ // - (block of calculating time intervals for the actual breakthrough area)-----------+ // Introduce two additional limitations: // 1. The Apex should not be located more than 50 bars far from the triangle's base // 2. The Apex should not be located closer than 15 bars to the triangle's base. if(cut_left<50 && cut_left>12) {//triangle with all limitations time_Apex=timf2s+cut_left*T_period; // Apex generation time // divide the number of bars by three, take 2/3 and round them off to the integer // value: MathRound(cut_left/3*2) -number of bars for the actual breakthrough area time_bar_zona=time_starting+MathRound(cut_left/3*2)*T_period; //area time // pattern creation conditions fulfilled, actual breakthrough area calculated PatternTch=true; // "Chuvashov's Triangle" pattern formed }//-triangle with all limitations // ------------(block of calculating time intervals for the actual breakthrough area)-+]
ตอนนี้หลังจากที่รูปแบบได้รับการจัดตั้งบล็อกการวาดรูปสามเหลี่ยมสามารถเริ่มดำเนินการได้:
บล็อกสำหรับเปิดตำแหน่งกำลังทำงานแล้ว[
// - (block of drawing the triangle after the pattern has been formed) ---+ if(PatternTch==true) {//there is a pattern Del_Frb(); Del_Frs(); // delete previous upper and lower fractals CreateArrow_Frb(); CreateArrow_Frs(); // draw upper and lower fractals Create_Tr_H(); Create_Tr_S(); // draw upper and lower trend lines CreateLzona(); CreateLbasis(); CreateLApex(); // draw vertical lines CreateTriangleH(); // draw the triangle by the upper line ObjectDelete("TRS"); // delete the triangle drawing by the lower line // -----(block of drawing the triangle after the pattern has been formed)-+ ]
ถ้าเงื่อนไขสำหรับการเปิดตำาแหน่งจะได้รับการชดเชยจะมีการคำนวณการวาดช่องที่มีเส้นงานที่เกินขีด สร้างช่องแล้ว
StopLoss และ TakeProfit จะคำนวณตามความต้องการของระบบการจัดการเงินและจะเปิดตำแหน่ง (ในกรณีนี้คือซื้อ - ดูภาพหน้าจอด้านล่าง)
ถ้าเวลาปัจจุบันเกินกว่าเวลาของการพัฒนาที่เกิดขึ้นจริงโปรแกรมแนะนำห้ามเปิดตำแหน่ง ถ้าเวลาปัจจุบันเกินกว่าเอเพ็กซ์โปรแกรมจะลบภาพวาดลายเส้นทั้งหมดที่ทำความสะอาดแผนภูมิจากสัญญาณและเส้นที่ไม่จำเป็นอยู่แล้ว
โค้ดบล็อกชีวิตของรูปแบบแสดงด้านล่าง
[ผลลัพธ์ของการดำเนินการบล็อกนี้จะแสดงที่ด้านขวาของภาพหน้าจอก่อนหน้านี้
// - (block defining the pattern's life time) -------------------------------+ // if the current time exceeds the actual breakthrough area boundary's time, the pattern loses its power if((TimeCurrent()-time_bar_zona)>=T_period) { PatternTch=false; // the pattern is outdated - introduce the ban on opening positions } // after the current time exceeds the Apex one if((TimeCurrent()-time_Apex)>=T_period) { // delete pattern signs and lines from the chart Del_Frs(); Del_Frb(); Del_TrLin(); // delete the lines of channel profit size by the upper working line ObjectDelete("Tr_B1h"); ObjectDelete("Tr_B1hh"); ObjectDelete("Tr_B1hs");ObjectDelete("Tr_B1s"); // delete the lines of channel profit size by the lower working line ObjectDelete("Tr_S1s"); ObjectDelete("Tr_S1sh"); ObjectDelete("Tr_S1ss");ObjectDelete("Tr_S1h"); // delete the vertical lines of the actual breakthrough area ObjectDelete("L1");ObjectDelete("zona");ObjectDelete("Ap"); ObjectDelete("TRH"); ObjectDelete("TRS"); } // --------------------(block defining the pattern's life time)-+]
EA นำเสนอนี่มีผลบวกเป็นระบบการซื้อขายเชิงกลศาสตร์ในระหว่างการทดสอบอัตโนมัติ:
- Gross profit and gross loss ratio P/F = 38869/16480 = 2.36 (more than 2);
- Number of deals = 101 (not less than 100);
- Drawdown percetnage = 25,18% (see attached file).
ข้อสรุปสรุปได้ดังนี้
เทคนิคที่อธิบายไว้นี้สามารถใช้โดยเทรดเดอร์แต่ควรเพิ่มตัวกรองการเปิดตำแหน่งเป็นส่วนปรับปรุง
ตัวกรองที่เสนอในที่นี้สามารถปรับปรุงได้ตามที่แนะนำโดยผู้ที่ใช้เทคนิค Stanislav Chuvashov
- Triangle_H1_v46.mq4 – offered МТС
- Strategy_Tester_Report_46.zip – test result
- table_3.zip – for fans of analysis
ความคิดเห็น
แสดงความคิดเห็น