การเทรดด้วยระบบ

คู่มือการใช้ Multicurrency ใน MetaTrader 5 สำหรับเทรดเดอร์
MetaTrader5
คู่มือการใช้ Multicurrency ใน MetaTrader 5 สำหรับเทรดเดอร์

สวัสดีครับเพื่อน ๆ เทรดเดอร์! วันนี้เรามาพูดถึงฟีเจอร์ใหม่ของ MetaTrader 5 ที่ทุกคนรอคอยกันนะครับ นั่นก็คือการใช้งานแบบหลายสกุลเงิน (Multicurrency) ในฟังก์ชัน OnTick(string symbol) ที่จะช่วยให้การเทรดของเรามีประสิทธิภาพมากยิ่งขึ้น! ข้อดีของการใช้งาน Multicurrency: สามารถใช้งานได้ทั้งบัญชีทดลองและบัญชีจริง ตั้งค่าได้ง่าย ไม่ยุ่งยาก สามารถปรับแต่งรายการเหตุการณ์ใน OnTick(string symbol): NewTick และ/หรือ NewBar ได้ตามต้องการ สามารถกำหนดรายการสัญลักษณ์ได้ (สามารถเลือกได้จาก Market Watch หรือบางสัญลักษณ์ที่ระบุ) เมื่อทำงานกับสัญลักษณ์จาก Market Watch สามารถจัดการเหตุการณ์ได้อย่างรวดเร็วใน OnTick(string symbol) ไม่จำเป็นต้องเข้าใจรายละเอียดการทำงานทั้งหมด เพราะโค้ดจะถูกเก็บในไฟล์ include สามารถใช้ได้ใน Strategy Tester ตัวอย่างเทมเพลตของ Expert Advisor มีลักษณะดังนี้: //+------------------------------------------------------------------+ //|                                            OnTick(string symbol).mq5 | //|                                            Copyright 2010, Lizar | //|                            https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION       "1.00 Build 1 (01 Fab 2011)" #property copyright   "Copyright 2010, Lizar" #property link        "https://www.mql5.com/ru/users/Lizar" #property version     VERSION #property description "Template of the Expert Advisor" #property description "with multicurrency OnTick(string symbol) event handler" //+------------------------------------------------------------------+ //|                MULTICURRENCY MODE SETTINGS                       | //|           of OnTick(string symbol) event handler                 | //|                                                                  | //| 1.1 List of symbols needed to proceed in the events:             | #define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF" //| 1.2 If you want all symbols from Market Watch, use this:         | //#define  SYMBOLS_TRADING    "MARKET_WATCH" //|     Note: Select only one way from 1.1 or 1.2.                   | //|                                                                  | //| 2.  Event type for OnTick(string symbol):                        | #define  CHART_EVENT_SYMBOL CHARTEVENT_TICK //|     Note: the event type must corresponds to the                 | //|                 ENUM_CHART_EVENT_SYMBOL enumeration.             | //|                                                                  | //| 3.  Include file:                                                | #include <OnTick(string symbol).mqh> //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert initialization function                                   | //| This function must be declared, even if it empty.                | //+------------------------------------------------------------------+ int OnInit()   {    //--- Add your code here...    return(0);   }    //+------------------------------------------------------------------+ //| Expert multi tick function                                       | //| Use this function instead of the standard OnTick() function      | //+------------------------------------------------------------------+ void OnTick(string symbol)   {    //--- Add your code here...    Print("New event on symbol: ",symbol);   }    //+------------------------------------------------------------------+ //| ChartEvent function                                              | //| This function must be declared, even if it empty.                | //+------------------------------------------------------------------+ void OnChartEvent(const int id,         // event id                   const long& lparam,   // event param of long type                   const double& dparam, // event param of double type                   const string& sparam) // event param of string type   {    //--- Add your code here...   }    //+------------------------------------------------------------------+ //| Expert deinitialization function                                 | //+------------------------------------------------------------------+ void OnDeinit(const int reason)   {    //--- Add your code here...   } //+------------------------------ end -------------------------------+ ฟีเจอร์เพิ่มเติม: 1. การตั้งค่า การตั้งค่าทั้งหมดสามารถปรับแต่งได้โดยใช้คำสั่ง #define สำหรับการทำงานของฟังก์ชัน OnTick(string symbol) คุณต้องระบุแค่สองพารามิเตอร์เท่านั้นคือ: SYMBOLS_TRADING และ CHART_EVENT_SYMBOL ตัวแรก (SYMBOLS_TRADING) จะกำหนดรายชื่อสัญลักษณ์ที่ใช้สำหรับเหตุการณ์ ส่วนตัวที่สอง (CHART_EVENT_SYMBOL) จะกำหนดประเภทเหตุการณ์สำหรับทุกสัญลักษณ์ SYMBOLS_TRADING สามารถกำหนดได้ว่า: #define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF" รายการต้องอยู่ในรูปแบบของสตริง แยกด้วยเครื่องหมายจุลภาค และรายการจะสิ้นสุดเมื่อถึงบรรทัดใหม่ SYMBOLS_TRADING สามารถกำหนดได้ว่า: #define  SYMBOLS_TRADING    "MARKET_WATCH" วิธีนี้หมายความว่าทุกสัญลักษณ์จาก Market Watch จะถูกใช้ ซึ่งสามารถใช้ในการเปลี่ยนรายชื่อสัญลักษณ์ได้อย่างรวดเร็ว 2. ไฟล์ Include. ไฟล์ #include OnTick(string symbol).mqh เป็นไฟล์ที่จำเป็นสำหรับการทำงานของฟังก์ชัน OnTick(string symbol) ซึ่งทำให้การใช้งานง่ายขึ้น ฟังก์ชันมาตรฐานบางตัวต้องประกาศในโค้ดของ Expert Advisor แม้ว่าอาจจะว่างเปล่า 3. Strategy Tester. ตามที่ทราบกันดีว่า (ในปัจจุบัน) OnChartEvent ไม่รองรับใน Strategy Tester เพื่อแก้ปัญหานี้ ได้มีการใช้ตัวแปรทั่วไประดับโลกในการจัดการเหตุการณ์ วิธีนี้จะใช้เฉพาะใน Strategy Tester เท่านั้น ในกรณีอื่น ๆ (ในบัญชีจริง/ทดลอง) เหตุการณ์จะถูกประมวลผลผ่าน OnChartEvent ฟีเจอร์นี้ ใน Strategy Tester ฟังก์ชัน OnTick(string symbol) จะทำงานตามคำติชมของสัญลักษณ์ที่ระบุในการตั้งค่าของ Strategy Tester กล่าวคือ มันทำงานคล้ายกับ OnTick() แต่จะถูกเรียกเมื่อมีการส่งสัญญาณใหม่ในสัญลักษณ์ที่เลือก สำหรับการทำงานกับ Strategy Tester ต้องระบุ SYMBOLS_TRADING เป็นรายชื่อสัญลักษณ์ 4. "สายลับ". มันใช้ "สายลับ" (เอเจนต์-อินดิเคเตอร์) ไฟล์ "Spy Control panel MCM.ex5" ต้องอยู่ในโฟลเดอร์ \MQL5\Indicators\ 5. ไฟล์จาก archive ต้องถูกแตกไฟล์เข้าไปในโฟลเดอร์ \MQL5 ไฟล์ที่จำเป็น: /MQL5/Experts/OnTick(string symbol).mq5 - ตัวอย่างของ Expert Advisor, โค้ดต้นฉบับของเทมเพลต; /MQL5/Experts/OnTick(string symbol).ex5 - ตัวอย่างของ Expert Advisor ไฟล์ที่ถูกคอมไพล์; /MQL5/Indicators/Spy Control panel MCM.mq5 - เอเจนต์-อินดิเคเตอร์, โค้ดต้นฉบับ; /MQL5/Indicators/Spy Control panel MCM.ex5 - เอเจนต์-อินดิเคเตอร์, ไฟล์ที่ถูกคอมไพล์; /MQL5/Include/OnTick(string symbol).mqh - ไฟล์ include ที่มีฟังก์ชันทั้งหมดที่จำเป็นสำหรับการทำงานของฟังก์ชัน OnTick(string symbol)

2011.02.02
กลยุทธ์การเทรดด้วย EA Bobsley สำหรับ MetaTrader 5
MetaTrader5
กลยุทธ์การเทรดด้วย EA Bobsley สำหรับ MetaTrader 5

สวัสดีครับเพื่อนๆ นักเทรดทุกคน! วันนี้เรามาพูดถึง EA (Expert Advisor) ที่ชื่อว่า Bobsley ซึ่งเป็นระบบเทรดที่น่าสนใจมากๆ สำหรับคนที่ใช้ MetaTrader 5 EA ตัวนี้ไม่ได้เป็นเวอร์ชันดั้งเดิมของ "Mover3MkII" โดย Boris Odintsov แต่เป็นมุมมองของผมเกี่ยวกับการเทรดจากการแข่งขัน Automated Trading Championship 2010 EA นี้จะใช้สัญญาณจาก Moving Average และ Stochastic ในการเปิดตำแหน่ง คู่เงินที่ใช้คือ EURUSD โดยใช้กรอบเวลาที่ M5 และทำการเทรดทุกครั้งที่มีการเคลื่อนไหว โดยใช้ล็อตจำนวน 5-15 ล็อต กลยุทธ์: เปิดตำแหน่ง Buy: เมื่อ MA เพิ่มขึ้น, Stochastic เพิ่มขึ้น และอยู่ต่ำกว่าระดับ oversold เปิดตำแหน่ง Sell: เมื่อ MA ลดลง, Stochastic ลดลง และอยู่สูงกว่าระดับ overbought ปิดตำแหน่ง: โดยใช้ Stop Loss และ Take Profit ที่ตั้งไว้ รูปที่ 1. EA ที่ทดสอบในช่วงการปรับแต่งด้วยพารามิเตอร์ที่ดีที่สุด รูปที่ 2. EA ที่ทดสอบในช่วงหลังการปรับแต่ง พารามิเตอร์ที่ใช้: TakeProfit              =   0.007   -  Take Profit StopLoss               =   0.0035 -  Stop Loss MA_Period             =      76    - ช่วงเวลา Moving Average Stoch_OverSold     =      30     - ระดับ oversold ของ Stochastic Stoch_OverBought  =      70    - ระดับ overbought ของ Stochastic Lot                        =   5-15    -  จำนวนล็อตที่ใช้ในการเทรด คำแนะนำ: แนะนำให้ใช้ EA ตัวนี้เป็นพื้นฐานในการสร้างกลยุทธ์ของคุณเองนะครับ

2011.01.27
สร้างสัญญาณการเทรดด้วย MQL5 Wizard บนแพทฟอร์ม MetaTrader 5
MetaTrader5
สร้างสัญญาณการเทรดด้วย MQL5 Wizard บนแพทฟอร์ม MetaTrader 5

MQL5 Wizard ช่วยให้เราสามารถสร้าง Expert Advisors (EA) ได้โดยอัตโนมัติ (ดูเพิ่มเติมที่ MQL5 Wizard: สร้าง Expert Advisors โดยไม่ต้องเขียนโปรแกรม). คลาส CSignalCandles จะให้สัญญาณการเทรดที่อิงจากรูปแบบแท่งเทียนกลับตัว โดยกลยุทธ์นี้เรียกว่า “สัญญาณจากรูปแบบแท่งเทียนกลับตัว” เมื่อสร้าง EA โดยอัตโนมัติใน MQL5 Wizard. แนวคิดของระบบนี้คือการระบุรูปแบบการกลับตัวโดยการคำนวณแท่งเทียนรวม ซึ่งรูปแบบการกลับตัวนี้คล้ายกับรูปแบบ Hammer และ Hanging Man ในการวิเคราะห์แท่งเทียนญี่ปุ่น แต่ใช้แท่งเทียนรวมแทนแท่งเดียวและไม่ต้องการให้มีขนาดตัวเล็กของแท่งเทียนรวมเพื่อยืนยันการกลับตัว. พารามิเตอร์นำเข้า: Range - จำนวนแท่งสูงสุดที่ใช้ในการคำนวณแท่งเทียนรวม. Minimum - ขนาดขั้นต่ำของแท่งเทียนรวม (ในจุดทั่วไป). ShadowBig และ ShadowSmall - เงา (ในหน่วยของแท่งเทียนรวม). Limit, StopLoss และ TakeProfit - ราคาที่เปิด, ระดับ SL และ TP โดยค่าจะถูกกำหนดสัมพันธ์กับราคาปิดของแท่งเทียนรวม (หน่วยของแท่งเทียนรวม). Expiration - เวลาหมดอายุของคำสั่ง (ในแท่ง), ใช้ในการเทรดด้วยคำสั่งรอดำเนินการ (Limit!=0.0). รูปแบบแท่งเทียนกลับตัวจะถูกกำหนดดังนี้: ระบบจะคำนวณพารามิเตอร์ของแท่งเทียนรวมตั้งแต่แท่งล่าสุดที่เสร็จสมบูรณ์ (ที่ดัชนี 1) ไปยังจำนวนแท่งที่กำหนดโดยพารามิเตอร์นำเข้า Range. หากขนาดของแท่งเทียนรวมมากกว่าค่าที่กำหนดโดยพารามิเตอร์ Minimum มันจะตรวจสอบเงื่อนไขการกลับตัวของแท่งเทียนรวมโดยการวิเคราะห์เงาของแท่ง. พลังของตลาดหมีจะถูกกำหนดจากขนาดของเงาด้านบนของแท่งเทียนรวม ขณะที่พลังของตลาดกระทิงจะถูกกำหนดจากขนาดของเงาด้านล่าง. เพื่อยืนยันการกลับตัวจากแนวโน้มขาลง (และเริ่มต้นของขาขึ้น) จะต้องมีเงื่อนไขดังนี้: ขนาดของเงาด้านล่าง (พลังของตลาดกระทิง) ต้องใหญ่กว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowBig ขนาดของเงาด้านบน (พลังของตลาดหมี) ต้องน้อยกว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowSmall. เพื่อยืนยันการกลับตัวจากแนวโน้มขาขึ้น (และเริ่มต้นของขาลง) จะต้องมีเงื่อนไขดังนี้: ขนาดของเงาด้านบน (พลังของตลาดหมี) ต้องใหญ่กว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowBig ขนาดของเงาด้านล่าง (พลังของตลาดกระทิง) ต้องน้อยกว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowSmall. นอกจากกลยุทธ์การกลับตัวแล้ว ยังสามารถใช้กลยุทธ์การทำลายโดยการกำหนดค่าลบของพารามิเตอร์ Limit (ดูเพิ่มเติมที่ MQL5 Wizard - สัญญาณการเทรดจากการตัดกันของ EMA สองตัวพร้อมตัวกรองระยะเวลา). ขึ้นอยู่กับค่า Limit จะมีวิธีการเข้าตลาดสามวิธี: Limit>0. จะเข้าตลาดเมื่อมีการขยับราคากลับ ซึ่งดีกว่าราคาตลาด (จะวางคำสั่ง Buy Limit หรือ Sell Limit ขึ้นอยู่กับสัญญาณการเทรด) Limit<0. จะเข้าตลาดตามทิศทางการเคลื่อนไหวของราคา (จะใช้คำสั่ง Buy Stop หรือ Sell Stop ขึ้นอยู่กับสัญญาณการเทรด). Limit=0. จะทำการเทรดโดยใช้ราคาตลาด. กลยุทธ์นี้จะถูกนำไปใช้ในคลาส CSignalCandles. รูปที่ 1. สัญญาณการเทรดที่อิงจากรูปแบบแท่งเทียนกลับตัว สัญญาณการเทรด สัญญาณการเทรดจะถูกนำไปใช้ในคลาส CSignalCandles โดยมีฟังก์ชัน Candle() สำหรับการวิเคราะห์: int  Candle(int ind); // คืนค่าหมายเลขบวก/ลบตามประเภทของแท่งเทียนรวม สามารถใช้แท่งหลายๆ แท่ง (บาร์) ในการสร้างแท่งเทียนรวม โดยจำนวนขั้นต่ำของแท่งจะถูกกำหนดโดยพารามิเตอร์ Range. ในบางกรณี แท่งเทียนรวมอาจสร้างจากแท่งที่น้อยกว่า Range (เมื่อเงื่อนไขขนาด/เงาเป็นไปตามที่กำหนด). ฟังก์ชัน Candle จะคืนค่า 0 หากไม่สามารถสร้างแท่งเทียนรวมได้. 1. เปิดตำแหน่งซื้อ ต้องการแท่งเทียนรวมที่เป็นขาขึ้นเพื่อเปิดตำแหน่งซื้อ ฟังก์ชันจะตรวจสอบและคืนค่าหากแท่งเทียนรวมยังไม่ถูกสร้างขึ้นหรือแท่งเทียนรวมเป็นขาลง. หากไม่มีปัญหา มันจะคำนวณขนาดของแท่งเทียนรวม (ซึ่งจำเป็นต่อการคำนวณราคา, SL และ TP) และคำนวณระดับราคาเพื่อวางคำสั่งรอดำเนินการ. หมายเหตุว่าประเภทคำสั่งรอดำเนินการ (Buy Limit หรือ Buy Stop) ขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit (หาก Limit=0 หรือ |ราคา-ask|<ระดับหยุด มันจะวางคำสั่งซื้อในตลาด, ถ้า Limit>0 จะวางคำสั่ง Buy Limit รอดำเนินการ, ถ้า Limit<0 จะวางคำสั่ง Buy Stop รอดำเนินการ). //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งซื้อ                | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาขึ้น    if(Candle(1)<=0) return(false); //--- รับขนาดของแท่งเทียนรวม    double size=m_high_composite-m_low_composite; //--- คำนวณราคาเพื่อวางคำสั่งรอดำเนินการ    price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- คำนวณราคาสำหรับ Stop Loss    sl   =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- คำนวณราคาสำหรับ Take Profit    tp   =m_symbol.NormalizePrice(price+m_take_profit*size); //--- กำหนดเวลาหมดอายุ    expiration+=m_expiration*PeriodSeconds(m_period); //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   } 2. ปิดตำแหน่งซื้อ หากแท่งเทียนรวมที่เป็นขาลงได้ถูกสร้างขึ้น ตำแหน่งซื้อจะถูกปิด. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งซื้อ |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาลง    if(Candle(1)>=0) return(false); //---    price=0.0; //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   } 3. เปิดตำแหน่งขาย ต้องมีการสร้างแท่งเทียนรวมที่เป็นขาลงเพื่อเปิดตำแหน่งขาย หากแท่งเทียนรวมยังไม่ถูกสร้างขึ้น หรือไม่ใช่แท่งขาลง จะคืนค่า. มิฉะนั้นเราจะกำหนดขนาดและคำนวณระดับราคาสำหรับวางคำสั่งรอดำเนินการ. (ประเภทคำสั่งขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit, ดู “เปิดตำแหน่งซื้อ”). //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งขาย |//+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาลง    if(Candle(1)>=0) return(false); //--- รับขนาดของแท่งเทียนรวม    double size=m_high_composite-m_low_composite; //--- คำนวณราคาเพื่อวางคำสั่งรอดำเนินการ    price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- คำนวณราคาสำหรับ Stop Loss    sl   =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- คำนวณราคาสำหรับ Take Profit    tp   =m_symbol.NormalizePrice(price-m_take_profit*size); //--- กำหนดเวลาหมดอายุ    expiration+=m_expiration*PeriodSeconds(m_period); //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   } 4. ปิดตำแหน่งขาย หากแท่งเทียนรวมที่เป็นขาขึ้นได้ถูกสร้างขึ้น ตำแหน่งขายจะถูกปิด. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งขาย |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาขึ้น    if(Candle(1)<=0) return(false); //---    price=0.0; //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   } สร้าง Expert Advisor ด้วย MQL5 Wizard ในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น “สัญญาณจากรูปแบบแท่งเทียนกลับตัว” ในตัวเลือก “สร้าง Expert Advisors พร้อมใช้งาน” ของ MQL5 Wizard: รูปที่ 2. เลือกสัญญาณจากรูปแบบแท่งเทียนกลับตัวใน MQL5 Wizard ต่อไปคุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการและ ระบบการจัดการเงินและความเสี่ยง. โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5. ผลการทดสอบ มาดูการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD M15, ช่วงเวลาทดสอบ: 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4). ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1), อัลกอริธึม Trailing Stop ไม่ถูกใช้ (Trailing ไม่ถูกใช้). รูปที่ 3. ผลการทดสอบของ Expert Advisor ที่ใช้สัญญาณจากรูปแบบแท่งเทียนกลับตัว ไฟล์แนบ: ไฟล์ SignalCandles.mqh ที่มีคลาส CSignalCandles ต้องถูกวางใน terminal_data_folder\MQL5\Include\Expert\Signal folder. ไฟล์ expert_candles.mq5 ประกอบด้วยโค้ดของ Expert Advisor ที่สร้างขึ้นด้วย MQL5 Wizard.

2011.01.20
ใช้ MQL5 Wizard สร้างสัญญาณเทรดจาก Alligator Indicator
MetaTrader5
ใช้ MQL5 Wizard สร้างสัญญาณเทรดจาก Alligator Indicator

MQL5 Wizard ช่วยให้เราสร้าง Expert Advisor (EA) ได้โดยอัตโนมัติ (ดูเพิ่มเติมที่ MQL5 Wizard: สร้าง Expert Advisors โดยไม่ต้องเขียนโปรแกรม). วันนี้เรามาพูดถึงสัญญาณการเทรดที่ใช้ Alligator Indicator ที่ถูกนำเสนอโดย B. Williams ในหนังสือ "Trading Chaos" โดยกลยุทธ์นี้มีชื่อว่า "สัญญาณจาก Alligator" ซึ่งสามารถสร้าง EA โดยอัตโนมัติใน MQL5 Wizard. ระบบนี้ใช้ค่าเฉลี่ยเคลื่อนที่ 3 ตัว (Lips, Teeth และ Jaw) รวมถึงออสซิลเลเตอร์ที่คำนวณจากผลต่างระหว่างกัน สัญญาณการเทรดจะถูกสร้างขึ้นหลังจากที่เส้น Alligator ตัดกัน โดยขึ้นอยู่กับแนวโน้มที่กำหนดจากลำดับของเส้นเหล่านี้ ในกรณีที่แนวโน้มขาขึ้น เส้น Lips (ซึ่งมีช่วงเวลาน้อยที่สุด) จะอยู่สูงสุด รองลงมาคือ เส้น Teeth และต่ำสุดคือ เส้น Jaw ขณะที่แนวโน้มขาลงจะเป็นกรณีตรงกันข้าม. สัญญาณการเทรด: เปิดตำแหน่งซื้อ: เมื่อเส้น Alligator ตัดกันและระยะห่างระหว่างเส้นเพิ่มขึ้นในแนวโน้มขาขึ้น; ปิดตำแหน่งซื้อ: เมื่อเส้น Lips ข้ามเส้น Jaw ขึ้น; เปิดตำแหน่งขาย: เมื่อเส้น Alligator ตัดกันและระยะห่างระหว่างเส้นเพิ่มขึ้นในแนวโน้มขาลง; ปิดตำแหน่งขาย: เมื่อเส้น Lips ข้ามเส้น Jaw ลง; กลยุทธ์นี้ถูกใช้งานในคลาส CSignalAlligator. สัญญาณการเทรดจาก Alligator Indicator รายละเอียดของสัญญาณการเทรด กลยุทธ์การเทรดนี้ถูกนำไปใช้งานใน CSignalAlligator ซึ่งมีวิธีการที่ถูกป้องกันเพื่อให้ง่ายต่อการเข้าถึงค่าของอินดิเคเตอร์: double&nbsp; Jaw(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้น Jaw ของแท่ง double&nbsp; Teeth(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้น Teeth ของแท่ง double&nbsp; Lips(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้น Lips ของแท่ง double&nbsp; LipsTeethDiff(int ind)&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างเส้น Lips และ Teeth double&nbsp; TeethJawDiff(int ind)&nbsp;&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างเส้น Teeth และ Jaw double&nbsp; LipsJawDiff(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างเส้น Lips และ Jaw bool&nbsp;&nbsp;&nbsp;&nbsp; CheckCross();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // ใช้เพื่อตรวจสอบการตัดกันของเส้น Alligator 1. เปิดตำแหน่งซื้อ การตรวจสอบเงื่อนไขการเทรดมีคุณสมบัติบางอย่างที่เกิดจากการเปลี่ยนแปลงของเส้น Lips, Teeth และ Jaw. เงื่อนไขในการเปิดตำแหน่งซื้อ: ใช้ CheckCross เพื่อตรวจสอบการตัดกันและการเพิ่มขึ้นของความแตกต่างระหว่างเส้น; LipsTeethDiff(-2)>=LipsTeethDiff(-1) และ LipsTeethDiff(-1)>=LipsTeethDiff(0); ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Lips และ Teeth; LipsTeethDiff(0)>=0.0; เส้น Lips สูงกว่าเส้น Teeth; TeethJawDiff(-2) >=TeethJawDiff(-1) และ TeethJawDiff(-1) >=TeethJawDiff(0) ; ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Teeth และ Jaw; TeethJawDiff(0) >=0.0; เส้น Teeth สูงกว่าเส้น Jaw. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ (buy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; if(CheckCross()) return(false); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =0.0; &nbsp;&nbsp; tp&nbsp;&nbsp; =0.0; //--- &nbsp;&nbsp; if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) &amp;&amp; LipsTeethDiff(-1)>=LipsTeethDiff(0) &amp;&amp; LipsTeethDiff(0)>=0.0 &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TeethJawDiff(-2) >=TeethJawDiff(-1)&nbsp;&nbsp;&amp;&amp; TeethJawDiff(-1) >=TeethJawDiff(0)&nbsp;&nbsp;&amp;&amp; TeethJawDiff(0) >=0.0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_crossed=true; //--- &nbsp;&nbsp; return(m_crossed); &nbsp;&nbsp;} 2. ปิดตำแหน่งซื้อ เงื่อนไขในการปิดตำแหน่งซื้อ: LipsTeethDiff(-1)=0; เส้น Lips ของแท่งปัจจุบันสูงกว่าหรือเท่ากับเส้น Teeth; LipsTeethDiff(1)>0; เส้น Lips ของแท่งก่อนหน้าสูงกว่าเส้น Teeth. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งซื้อ | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; //--- &nbsp;&nbsp; return(LipsTeethDiff(-1)< 0 &amp;&amp; LipsTeethDiff(0)>=0 &amp;&amp; LipsTeethDiff(1)< 0); &nbsp;&nbsp;} 3. เปิดตำแหน่งขาย เงื่อนไขในการเปิดตำแหน่งขาย: ใช้ CheckCross เพื่อตรวจสอบการตัดกันและการเพิ่มขึ้นของความแตกต่างระหว่างเส้น; LipsTeethDiff(-2)

2011.01.15
สร้าง EA ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก MACD Crossover
MetaTrader5
สร้าง EA ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก MACD Crossover

MQL5 Wizard ช่วยให้คุณสร้าง EA อัตโนมัติได้อย่างง่ายดาย (ดู MQL5 Wizard: สร้าง EA โดยไม่ต้องเขียนโปรแกรม). วันนี้เราจะมาพูดถึงสัญญาณการซื้อขายที่เกิดจากการตัดกันของเส้น MACD โดยกลยุทธ์นี้เรียกว่า “สัญญาณจากการตัดกันของเส้นหลักและเส้นสัญญาณ MACD” (เมื่อสร้าง EA โดยอัตโนมัติใน MQL5 Wizard). เส้นหลักของ MACD คำนวณจากผลต่างระหว่าง EMA เร็วและ EMA ช้า ส่วนเส้นสัญญาณของ MACD จะเป็นการทำให้เส้นหลักเรียบขึ้นตามระยะเวลาที่กำหนด. สัญญาณการซื้อขาย: ซื้อ: เส้นหลักตัดขึ้นเหนือเส้นสัญญาณของ MACD. ขาย: เส้นหลักตัดลงต่ำกว่าเส้นสัญญาณของ MACD. กลยุทธ์นี้ถูกนำไปใช้ใน CSignalMACD ภายใน คลาสกลยุทธ์การซื้อขาย ของ MQL5 Standard Library (อยู่ใน MQL5\Include\Expert\Signal\SignalMACD.mqh). Figure 1. สัญญาณการซื้อขายจากการตัดกันของเส้นหลักและเส้นสัญญาณ MACD สัญญาณการซื้อขาย กลยุทธ์การซื้อขายนี้ถูกนำไปใช้ใน CSignalMACD ซึ่งมีฟังก์ชันที่ช่วยง่ายต่อการเข้าถึงค่าของ indikator: double&nbsp; MainMACD(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้นหลัก MACD ของแท่งราคา double&nbsp; SignalMACD(int ind)&nbsp;&nbsp;&nbsp; // คืนค่าของเส้นสัญญาณ MACD ของแท่งราคา double&nbsp; StateMACD(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าผลต่างระหว่างเส้นหลักและเส้นสัญญาณ MACD int&nbsp;&nbsp;&nbsp;&nbsp; ExtStateMACD(int ind); // คืนค่าจำนวนการเปลี่ยนแปลงสัญญาณของความแตกต่างระหว่างเส้นหลักและเส้นสัญญาณ 1. เปิดสถานะซื้อ เงื่อนไขในการเปิดสถานะซื้อ: ExtStateMACD(1)==1; หมายความว่าเส้นหลักตัดขึ้นเหนือเส้นสัญญาณ MACD //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดสถานะซื้อ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CSignalMACD::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Ask()-m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- &nbsp;&nbsp; return(ExtStateMACD(1)==1); &nbsp;&nbsp;} 2. ปิดสถานะซื้อ เงื่อนไขในการปิดสถานะซื้อ: ExtStateMACD(1)==1; หมายความว่าเส้นหลักตัดลงต่ำกว่าเส้นสัญญาณ MACD //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดสถานะซื้อ | //+------------------------------------------------------------------+ bool CSignalMACD::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; //--- &nbsp;&nbsp; return(ExtStateMACD(1)==-1); &nbsp;&nbsp;} 3. เปิดสถานะขาย เงื่อนไขในการเปิดสถานะขายจะเหมือนกับเงื่อนไขการปิดสถานะซื้อ. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดสถานะขาย&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CSignalMACD::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Bid()+m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- &nbsp;&nbsp; return(ExtStateMACD(1)==-1); &nbsp;&nbsp;} 4. ปิดสถานะขาย เงื่อนไขในการปิดสถานะขายจะเหมือนกับเงื่อนไขการเปิดสถานะซื้อ. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดสถานะขาย | //+------------------------------------------------------------------+ bool CSignalMACD::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; //--- &nbsp;&nbsp; return(ExtStateMACD(1)==1); &nbsp;&nbsp;} การสร้าง EA ด้วย MQL5 Wizard ในการสร้างหุ่นยนต์ซื้อขายตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น “สัญญาณจากการตัดกันของเส้นหลักและเส้นสัญญาณ MACD” ในตัวเลือก “การสร้าง EA ที่พร้อมใช้งาน” ของ MQL5 Wizard: Figure 2. เลือก 'สัญญาณจากการตัดกันของเส้นหลักและเส้นสัญญาณ MACD' ใน MQL5 Wizard จากนั้นให้คุณระบุอัลกอริธึม Trailing Stop และระบบ การจัดการเงินและความเสี่ยง. โค้ดของ EA จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5. ผลการทดสอบ มาดูการทดสอบย้อนหลังก่อนการใช้งานจริงของ EA บนข้อมูลประวัติ (EURUSD H1, ช่วงการทดสอบ: 1.1.2010-05.01.2011, PeriodFast=12, PeriodSlow=24, PeriodSignal=9, StopLoss=20, TakeProfit=80). ในการสร้าง EA เราใช้ขนาดล็อตคงที่ (Trading Fixed Lot, 0.1), อัลกอริธึม Trailing Stop ไม่ได้ถูกใช้ (Trailing ไม่ได้ถูกใช้). Figure 3. ผลการทดสอบของ EA ที่มีสัญญาณการซื้อขายจากการตัดกันของเส้น MACD เอกสารแนบ: SignalMACD.mqh ที่มี CSignalMACD คลาส (รวมอยู่ใน MQL5 Standard Library) ตั้งอยู่ที่ MQL5\Include\Expert\Signal โฟลเดอร์. testmacd.mq5 มีโค้ดของ EA ที่สร้างขึ้นโดยใช้ MQL5 Wizard.

2011.01.14
สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: การใช้ EMA และกรองเวลาภายใน
MetaTrader5
สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: การใช้ EMA และกรองเวลาภายใน

MQL5 Wizard ช่วยให้คุณสร้างโค้ดของ EA (Expert Advisor) ได้อย่างอัตโนมัติ ดูรายละเอียดเพิ่มเติมได้ที่ การสร้าง EA ที่พร้อมใช้งานใน MQL5 Wizard. สัญญาณการซื้อขายของกลยุทธ์ที่อิงจากการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัว (Moving Averages) จะถูกพิจารณาใน MQL5 Wizard - สัญญาณการซื้อขายจากการตัดกันของค่าเฉลี่ยเคลื่อนที่ที่เรียบตามเวลาสองตัว. ค่าเฉลี่ยเคลื่อนที่จะมีประสิทธิภาพในช่วงที่มีแนวโน้ม ในกรณีอื่นๆ อาจให้สัญญาณที่ผิดพลาดมากมาย หนึ่งในวิธีการปรับปรุงกลยุทธ์นี้คือการใช้กรองเวลา (Time Filters) เช่น เปิดตำแหน่งใหม่เมื่อมีการซื้อขายในช่วงยุโรปของ FOREX. ในที่นี้เราจะพิจารณากลยุทธ์ที่อิงจากการตัดกันของค่าเฉลี่ยเคลื่อนที่ที่เรียบสองตัว (Fast EMA และ Slow EMA) พร้อมกับกรองเวลาภายใน โดยกลยุทธ์นี้เรียกว่า "สัญญาณการซื้อขายจากการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวพร้อมกรองเวลาภายใน" (เมื่อสร้าง EA โดยอัตโนมัติใน MQL5 Wizard). สัญญาณการซื้อขาย: เปิดตำแหน่ง Long: Fast EMA ตัดขึ้นเหนือ Slow EMA และเงื่อนไขกรองเวลาภายในไม่เป็นที่พอใจ. เปิดตำแหน่ง Short: Fast EMA ตัดลงต่ำกว่า Slow EMA และเงื่อนไขกรองเวลาภายในไม่เป็นที่พอใจ. กลยุทธ์นี้จะถูกนำไปใช้ในคลาส CSignal2EMA_ITF. การกรองสัญญาณที่อิงจากช่วงเวลาที่กำหนดจะถูกนำไปใช้ในคลาส CSignalITF โดยในตัวอย่างการใช้งาน เราจะพิจารณาคลาส CSignal2EMA_ITF (ซึ่งมีวัตถุของ CSignalITF อยู่). ระบบการซื้อขายนี้จะอิงจากคำสั่งที่รอดำเนินการ (Pending Orders) โดยระดับราคาจะถูกคำนวณขึ้นอยู่กับค่าของค่าเฉลี่ยเคลื่อนที่และหน่วย ATR (Average True Range). รูปที่ 1 สัญญาณการซื้อขายตามการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวพร้อมกรองเวลาภายใน สัญญาณการซื้อขาย กลยุทธ์การซื้อขายนี้จะถูกนำไปใช้ใน CSignal2EMA_ITF โดยมีวิธีการที่ถูกป้องกันเพื่อทำให้การเข้าถึงค่าตัวชี้วัดง่ายขึ้น: double&nbsp;&nbsp;FastEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ Fast EMA ของแท่ง double&nbsp;&nbsp;SlowEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ Slow EMA ของแท่ง double&nbsp;&nbsp;StateFastEMA(int ind) // คืนค่าบวก/ลบถ้า Fast EMA เพิ่มขึ้น/ลดลง double&nbsp;&nbsp;StateSlowEMA(int ind) // คืนค่าบวก/ลบถ้า Slow EMA เพิ่มขึ้น/ลดลง double&nbsp;&nbsp;StateEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่าง Fast และ Slow EMA double&nbsp;&nbsp;ATR(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ ATR ของแท่ง คุณสมบัติของระบบนี้คือการซื้อขายจะขึ้นอยู่กับพารามิเตอร์ Limit ที่กำหนด หากเปลี่ยนสัญญาณจะมีกรณีแตกต่างกัน: Limit&gt;0. จะเข้าซื้อในช่วงการเคลื่อนไหวเมื่อเกิดการหลุดพ้นที่ผิดพลาดจากค่าเฉลี่ยเคลื่อนที่ในราคาที่ดีกว่าราคาตลาด (Buy Limit และ Sell Limit จะถูกวางตามสัญญาณการซื้อขาย) Limit&lt;0. จะเข้าซื้อในทิศทางการเคลื่อนไหวของราคา (Buy Stop และ Sell Stop จะถูกวางตามสัญญาณการซื้อขาย). Limit=0. ในกรณีนี้จะทำการซื้อขายโดยใช้ราคาตลาด. 1. เปิดตำแหน่ง Long ระบบจะตรวจสอบเงื่อนไขในการเปิดตำแหน่ง Long: หากความแตกต่างระหว่าง Fast และ Slow EMA บนแท่งที่เสร็จสมบูรณ์ล่าสุดได้เปลี่ยนสัญญาณจาก "-" เป็น "+" (StateEMA(1)&gt;0 &amp;&amp; StateEMA(2)&lt;0). ถัดไปจะตรวจสอบเงื่อนไขกรองเวลาภายในโดยการเรียกใช้เมธอด CheckOpenLong() ของคลาส CSignalITF หากอนุญาตให้ทำการซื้อขาย ก็จะคำนวณระดับราคาพื้นฐาน (ค่าของค่าเฉลี่ยเคลื่อนที่) และค่าช่วง ATR ของแท่งที่เสร็จสมบูรณ์ล่าสุด. ขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit ระบบจะวางคำสั่งซื้อ Pending Order คำสั่งซื้อ, Take Profit และ Stop Loss จะถูกคำนวณสัมพันธ์กับระดับราคาพื้นฐาน (ในหน่วย ATR). เวลาหมดอายุของคำสั่งจะถูกกำหนด (ในแท่ง) โดยพารามิเตอร์ Expiration. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง Long (ซื้อ)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(1)&gt;0 &amp;&amp; StateEMA(2)&lt;0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(false); &nbsp;&nbsp; if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false); //--- &nbsp;&nbsp; double ema=SlowEMA(1); &nbsp;&nbsp; double atr=ATR(1); &nbsp;&nbsp; double spread=m_symbol.Ask()-m_symbol.Bid(); //--- &nbsp;&nbsp; price=m_symbol.NormalizePrice(ema-m_limit*atr+spread); &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.NormalizePrice(price+m_stop_loss*atr); &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.NormalizePrice(price-m_take_profit*atr); &nbsp;&nbsp; expiration+=m_expiration*PeriodSeconds(m_period); //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 2. ปิดตำแหน่ง Long ในกรณีนี้ฟังก์ชันที่ตรวจสอบเงื่อนไขในการปิดตำแหน่ง Long จะคืนค่าเป็น false เสมอ ซึ่งถือว่าตำแหน่ง Long จะถูกปิดโดย Take Profit หรือ Stop Loss. หากจำเป็น คุณสามารถเขียนโค้ดของคุณเองเพื่อใช้วิธีนี้. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่ง Long | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 3. เปิดตำแหน่ง Short ระบบจะตรวจสอบเงื่อนไขในการเปิดตำแหน่ง Short: หากความแตกต่างระหว่าง Fast และ Slow EMA บนแท่งที่เสร็จสมบูรณ์ล่าสุดได้เปลี่ยนสัญญาณจาก "+" เป็น "-" (StateEMA(1)&lt;0 &amp;&amp; StateEMA(2)&gt;0). ถัดไปจะตรวจสอบเงื่อนไขกรองเวลาภายในโดยการเรียกใช้เมธอด CheckOpenLong() ของคลาส CSignalITF หากอนุญาตให้ทำการซื้อขาย ก็จะคำนวณระดับราคาพื้นฐาน (ค่าของค่าเฉลี่ยเคลื่อนที่) และค่าช่วง ATR ของแท่งที่เสร็จสมบูรณ์ล่าสุด. ขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit ระบบจะวางคำสั่งขาย Pending Order คำสั่งซื้อ, Take Profit และ Stop Loss จะถูกคำนวณสัมพันธ์กับระดับราคาพื้นฐาน (ในหน่วย ATR). เวลาหมดอายุของคำสั่งจะถูกกำหนด (ในแท่ง) โดยพารามิเตอร์ Expiration. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง Short (ขาย)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(1)&lt;0 &amp;&amp; StateEMA(2)&gt;0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(false); &nbsp;&nbsp; if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false); //--- &nbsp;&nbsp; double ema=SlowEMA(1); &nbsp;&nbsp; double atr=ATR(1); //--- &nbsp;&nbsp; price&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=m_symbol.NormalizePrice(ema+m_limit*atr); &nbsp;&nbsp; sl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =m_symbol.NormalizePrice(price+m_stop_loss*atr); &nbsp;&nbsp; tp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =m_symbol.NormalizePrice(price-m_take_profit*atr); &nbsp;&nbsp; expiration+=m_expiration*PeriodSeconds(m_period); //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 4. ปิดตำแหน่ง Short ในกรณีนี้ฟังก์ชันที่ตรวจสอบเงื่อนไขในการปิดตำแหน่ง Short จะคืนค่าเป็น false เสมอ ซึ่งถือว่าตำแหน่งจะถูกปิดโดย Take Profit หรือ Stop Loss. หากจำเป็น คุณสามารถเขียนโค้ดของคุณเองเพื่อใช้วิธีนี้. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่ง Short | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 5. Trailing Stop ของคำสั่งซื้อ Pending Long Expert Advisor จะติดตามคำสั่ง Pending ขึ้นอยู่กับค่าปัจจุบันของค่าเฉลี่ยเคลื่อนที่และ ATR. ระบบการซื้อขายจะวางคำสั่ง Pending ขึ้นอยู่กับสัญญาณการซื้อขาย หากคำสั่งถูกวางสำเร็จ ระบบจะติดตามคำสั่ง Pending ตามค่าเฉลี่ยเคลื่อนที่ คำสั่งจะถูกดำเนินการหากราคาตลาดถึงราคาคำสั่ง. //+--------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปรับคำสั่งซื้อ Pending Long | //+--------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double&amp; price) &nbsp;&nbsp;{ //--- ตรวจสอบ &nbsp;&nbsp; if(order==NULL) return(false); //--- &nbsp;&nbsp; double ema=SlowEMA(1); &nbsp;&nbsp; double atr=ATR(1); &nbsp;&nbsp; double spread=m_symbol.Ask()-m_symbol.Bid(); //--- &nbsp;&nbsp; price=m_symbol.NormalizePrice(ema-m_limit*atr+spread); //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 6. Trailing Stop ของคำสั่งซื้อ Pending Short Expert Advisor จะติดตามคำสั่ง Pending ขึ้นอยู่กับค่าปัจจุบันของค่าเฉลี่ยเคลื่อนที่และ ATR. คำสั่งจะถูกดำเนินการหากราคาตลาดถึงราคาคำสั่ง. //+--------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปรับคำสั่งซื้อ Pending Short | //+--------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double&amp; price) &nbsp;&nbsp;{ //--- ตรวจสอบ &nbsp;&nbsp; if(order==NULL) return(false); //--- &nbsp;&nbsp; double ema=SlowEMA(1); &nbsp;&nbsp; double atr=ATR(1); //--- &nbsp;&nbsp; price=m_symbol.NormalizePrice(ema+m_limit*atr); //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} การสร้าง Expert Advisor ด้วย MQL5 Wizard ในการสร้างหุ่นยนต์การซื้อขายตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น "สัญญาณการซื้อขายจากการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวพร้อมกรองเวลาภายใน" ในตัวเลือก "การสร้าง Expert Advisors ที่พร้อมใช้งาน" ของ MQL5 Wizard: รูปที่ 2 เลือก "สัญญาณการซื้อขายจากการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวพร้อมกรองเวลาภายใน" ใน MQL5 Wizard ถัดไปคุณต้องระบุ อัลกอริธึม Trailing Stop ที่จำเป็นและ ระบบการจัดการเงินและความเสี่ยง. โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของโปรแกรม MetaTrader 5. ผลการทดสอบ มาพิจารณาผลการทดสอบย้อนกลับของ Expert Advisor บนข้อมูลย้อนหลัง (EUenSD H1, ระยะเวลาในการทดสอบ: 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0). ในการสร้าง Expert Advisor เราใช้ปริมาตรคงที่ (Trading Fixed Lot, 0.1), ไม่ได้ใช้ Trailing Stop algorithm (Trailing not used). รูปที่ 3 ผลการทดสอบของ Expert Advisor ที่มีสัญญาณการซื้อขายตามการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวโดยไม่ใช้กรอง ITF เนื่องจากไม่ใช้กรองเวลาภายใน ทำให้เกิดสัญญาณที่ผิดพลาดมากมาย สัญญาณการซื้อขายสามารถปรับปรุงได้หากเราทำการวิเคราะห์ผลของการซื้อขายตามชั่วโมงการซื้อขาย. ในกรณีของเรา พบว่าการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวให้สัญญาณที่ผิดพลาดมากมายตั้งแต่เวลา 6:00 จนถึง 23:59. เราสามารถกำหนดกรองเวลาภายในโดยตั้งค่าพารามิเตอร์กรอง. ตัวอย่างเช่น เราสามารถกำหนดกรองเวลาให้เปิดตำแหน่งเฉพาะตั้งแต่ 0:00 ถึง 5:59. ซึ่งสามารถทำได้โดยตั้งค่าค่าของ BadHoursOfDay=16777152=111111111111111111000000b. ชั่วโมงการซื้อขายอื่นๆ จะถือว่าเป็น "ไม่ดี" ดังนั้นจึงควรห้ามเปิดตำแหน่งใหม่ตั้งแต่ 6:00 จนถึงสิ้นวัน. หากเราตั้งค่าค่าของ BadHoursOfDay=16777152 เราจะกรองสัญญาณที่ผิดพลาดได้มากมาย: รูปที่ 4 ผลการทดสอบของ Expert Advisor ที่มีสัญญาณการซื้อขายตามการตัดกันของค่าเฉลี่ยเคลื่อนที่สองตัวพร้อมกรองเวลา (BadHoursofDay=16777152) CSignalITF มีฟีเจอร์การกรองเวลาอื่นๆ มากมาย (เพียงระบุ "นาทีดี" และ "นาทีไม่ดี" ในชั่วโมง, ชั่วโมงในวัน, วันในสัปดาห์). การใช้กรองเวลาอนุญาตให้ปรับปรุงสัญญาณการซื้อขายและคำนึงถึงพลศาสตร์ของตลาด (ตัวอย่างเช่น ลักษณะของช่วงการซื้อขาย). แนบไฟล์: Signal2EMA-ITF.mqh ที่มีคลาส CSignal2EMA_ITF ต้องถูกวางใน terminal_data_folder\MQL5\Include\Expert\Signal โฟลเดอร์. expert_2ema_itf.mq5 มีโค้ดของ Expert Advisor ที่สร้างขึ้นโดยใช้ MQL5 Wizard.

2011.01.13
ใช้ MQL5 Wizard สร้างสัญญาณซื้อขายจากการตัดกันของ EMA
MetaTrader5
ใช้ MQL5 Wizard สร้างสัญญาณซื้อขายจากการตัดกันของ EMA

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้างโค้ด EA (Expert Advisor) ได้อย่างอัตโนมัติ สำหรับผู้ที่อยากรู้รายละเอียดเพิ่มเติมสามารถดูได้ที่ การสร้าง EA ที่พร้อมใช้งานใน MQL5 Wizard. วันนี้เราจะพูดถึงกลยุทธ์ที่อิงจากการตัดกันของค่าเฉลี่ยเคลื่อนที่แบบเอ็กซ์โพเนนเชียล (EMA) สองตัว ได้แก่ EMA เร็วและ EMA ช้า ซึ่งกลยุทธ์นี้เรียกว่า "สัญญาณจากการตัดกันของสอง EMA" เมื่อเราสร้าง EA โดยอัตโนมัติใน MQL5 Wizard. สัญญาณการซื้อขายมีดังนี้: ซื้อ: เมื่อ EMA เร็วตัดขึ้นเหนือ EMA ช้า ขาย: เมื่อ EMA เร็วตัดลงต่ำกว่า EMA ช้า กลยุทธ์นี้ถูกนำไปใช้ในคลาส CSignalCrossEMA. Figure 1. สัญญาณการซื้อขายจากการตัดกันของ EMA สองตัว สัญญาณการซื้อขาย กลยุทธ์การซื้อขายนี้ถูกนำไปใช้ในคลาส CSignalCrossEMA และมีฟังก์ชันที่ช่วยให้เข้าถึงค่าอินดิเคเตอร์ได้ง่ายขึ้น: double&nbsp;&nbsp; FastEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของค่าเฉลี่ยเคลื่อนที่เร็วของแท่ง double&nbsp;&nbsp; SlowEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของค่าเฉลี่ยเคลื่อนที่ช้าของแท่ง double&nbsp;&nbsp; StateEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างค่าเฉลี่ยเคลื่อนที่เร็วและช้าของแท่ง 1. เปิดสถานะซื้อ เงื่อนไขในการเปิดสถานะซื้อ: StateEMA(1) > 0 และ StateEMA(2) < 0: เมื่อ EMA เร็วตัดขึ้นเหนือ EMA ช้าในแท่งล่าสุดที่เสร็จสิ้น. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดสถานะซื้อ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(2)&lt;0 &amp;&amp; StateEMA(1)&gt;0)) return(false); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =0.0; &nbsp;&nbsp; tp&nbsp;&nbsp; =0.0; //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 2. ปิดสถานะซื้อ เงื่อนไขในการปิดสถานะซื้อ: StateEMA(1) < 0 และ StateEMA(2) > 0: เมื่อ EMA เร็วตัดลงต่ำกว่า EMA ช้าในแท่งล่าสุดที่เสร็จสิ้น. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดสถานะซื้อ | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(2)&gt;0 &amp;&amp; StateEMA(1)&lt;0)) return(false); //--- &nbsp;&nbsp; price=0.0; //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 3. เปิดสถานะขาย เงื่อนไขในการเปิดสถานะขายจะเหมือนกับเงื่อนไขในการปิดสถานะซื้อ. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดสถานะขาย (ขาย)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(2)&gt;0 &amp;&amp; StateEMA(1)&lt;0)) return(false); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =0.0; &nbsp;&nbsp; tp&nbsp;&nbsp; =0.0; //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} 4. ปิดสถานะขาย เงื่อนไขในการปิดสถานะขายจะเหมือนกับเงื่อนไขในการเปิดสถานะซื้อ. //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดสถานะขาย | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; if(!(StateEMA(2)&lt;0 &amp;&amp; StateEMA(1)&gt;0)) return(false); //--- &nbsp;&nbsp; price=0.0; //--- &nbsp;&nbsp; return(true); &nbsp;&nbsp;} การสร้าง Expert Advisor ด้วย MQL5 Wizard ในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น "สัญญาณจากการตัดกันของสอง EMA" ในตัวเลือก "การสร้าง EA ที่พร้อมใช้งาน" ของ MQL5 Wizard: Figure 2. เลือก 'สัญญาณจากการตัดกันของสอง EMA' ใน MQL5 Wizard จากนั้นคุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการ และ การจัดการเงินและความเสี่ยง. โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5. นอกจากนี้ คลาสใน Standard library ยังมี "สัญญาณจากการตัดกันของสอง MA" ที่ถูกนำไปใช้ในคลาส CSignalCrossMA ความคิดการซื้อขายคล้ายกัน แต่มีฟีเจอร์เพิ่มเติมมากมาย (ระบุประเภท, ชนิด, และวิธีการเฉลี่ย รวมถึงการใช้ระดับ Take Profit และ Stop Loss). Figure 3. 'สัญญาณจากการตัดกันของสอง MA' ใน MQL5 Wizard ผลการทดสอบ มาดูการทดสอบย้อนหลังก่อนหน้านี้ของ Expert Advisor บนข้อมูลประวัติ (EURUSD H1, ระยะเวลาทดสอบ: 1.1.2010-05.01.2011, FastPeriod=12, SlowPeriod=24). ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1) และไม่ได้ใช้ Trailing Stop (ไม่ใช้ Trailing). Figure 4. ผลการทดสอบย้อนกลับของ Expert Advisor จากการตัดกันของสอง EMA ไฟล์แนบ: ไฟล์ SignalCrossEMA.mqh ที่มีคลาส CSignalCrossEMA ต้องถูกวางไว้ที่ terminal_data_folder\MQL5\Include\Expert\Signal folder.ไฟล์ crossover_2ema.mq5 มีโค้ดของ Expert Advisor ที่สร้างขึ้นโดยใช้ MQL5 Wizard.

2011.01.12
กลยุทธ์การเทรดด้วย MQL5 Wizard: สัญญาณซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่
MetaTrader5
กลยุทธ์การเทรดด้วย MQL5 Wizard: สัญญาณซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้างโค้ดของ EA (Expert Advisor) อัตโนมัติได้อย่างง่ายดาย หากใครสนใจรายละเอียดเพิ่มเติมสามารถดูได้ที่ การสร้าง EA ที่พร้อมใช้งานใน MQL5 Wizard.ในบทความนี้เราจะพูดถึงกลยุทธ์ที่อิงจากการตัดกันของราคากับตัวบ่งชี้ค่าเฉลี่ยเคลื่อนที่ (Moving Average) ที่ได้รับการยืนยันจากตัวบ่งชี้ ADX (Average Directional Index) กลยุทธ์นี้เรียกว่า "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" (เมื่อสร้าง EA อัตโนมัติใน MQL5 Wizard).สัญญาณการซื้อขาย:ซื้อ: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่ และค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นทั้งในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้.ขาย: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่ และค่าเฉลี่ยเคลื่อนที่ลดลงทั้งในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้.เพื่อกรองสัญญาณเท็จ จะมีการตรวจสอบพลังของแนวโน้ม (ADX&gt;ADXmin) และทิศทางของแนวโน้มด้วยการใช้ Directional Movement Indexes (DI+ และ DI-).กลยุทธ์นี้ถูกนำไปใช้งานในคลาส CSignalADX_MA (ต้องนำไปไว้ที่ terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh).รูปที่ 1. สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่รายละเอียดสัญญาณการซื้อขายกลยุทธ์การเทรดนี้ถูกนำไปใช้งานในคลาส CSignalADX_MA ซึ่งมีเมธอดที่ป้องกันการเข้าถึงข้อมูลตัวบ่งชี้และราคาง่ายขึ้น:double&nbsp;&nbsp; PlusADX(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้น DI+ ของแท่งเทียน double&nbsp;&nbsp; MainADX(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของเส้นหลักของแท่งเทียน double&nbsp;&nbsp; MinusADX(int ind)&nbsp;&nbsp;&nbsp; // คืนค่าของเส้น DI- ของแท่งเทียน double&nbsp;&nbsp; EMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของค่าเฉลี่ยเคลื่อนที่ของแท่งเทียน double&nbsp;&nbsp; Close(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของราคาปิดของแท่งเทียน double&nbsp;&nbsp; StateADX(int ind)&nbsp;&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างเส้น DI+ และ DI- double&nbsp;&nbsp; StateEMA(int ind)&nbsp;&nbsp;&nbsp; // คืนค่าเป็นบวกถ้า EMA เพิ่มขึ้นและเป็นลบถ้า EMA ลดลง double&nbsp;&nbsp; StateClose(int ind)&nbsp; // คืนค่าความแตกต่างระหว่างราคาปิดและค่าเฉลี่ยเคลื่อนที่จุดเด่นของการนำไปใช้งานนี้คือการตรวจสอบแนวโน้มเพิ่มเติม (โดยใช้ Directional Movement Indicator) ซึ่งช่วยกรองสัญญาณเท็จและตรวจสอบสภาวะการเทรดด้วยค่าของแท่งเทียนปัจจุบัน (ที่ยังไม่ปิด).1. เปิดตำแหน่งซื้อ (Long Position)เงื่อนไขในการเปิดตำแหน่งซื้อ:StateEMA(0)&lt;0 และ StateEMA(1)&gt;0: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้;StateClose(1)&gt;0: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่;MainADX(0)&gt;minimum_ADX: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด (สำหรับตรวจสอบการมีแนวโน้ม);StateADX(0)&gt;0: DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน.//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ (buy) | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ //--- condition 1: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้ &nbsp;&nbsp; bool Buy_Condition_1=(StateEMA(0)&gt;0 &amp;&amp; StateEMA(1)&gt;0); //--- condition 2: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่ &nbsp;&nbsp; bool Buy_Condition_2=(StateClose(1)&gt;0); //--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด &nbsp;&nbsp; bool Buy_Condition_3=(MainADX(0)&gt;m_minimum_ADX); //--- condition 4: ค่าของ DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน &nbsp;&nbsp; bool Buy_Condition_4=(StateADX(0)&gt;0); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Ask()-m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- ตรวจสอบเงื่อนไขทั้งหมด &nbsp;&nbsp; return(Buy_Condition_1 &amp;&amp; Buy_Condition_2 &amp;&amp; Buy_Condition_3 &amp;&amp; Buy_Condition_4); &nbsp;&nbsp;}2. ปิดตำแหน่งซื้อ (Close Long Position)เงื่อนไขในการปิดตำแหน่งซื้อ:StateEMA(0)&lt;0 และ StateEMA(1)&lt;0: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้;StateClose(1)&lt;0: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่;MainADX(0)&gt;minimum_ADX: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด;StateADX(0)&lt;0: DI- สูงกว่า DI+ ของแท่งเทียนปัจจุบัน.//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งซื้อ | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ //--- condition 1: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้ &nbsp;&nbsp; bool Sell_Condition_1=(StateEMA(0)&lt;0 &amp;&amp; StateEMA(1)&lt;0); //--- condition 2: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่ &nbsp;&nbsp; bool Sell_Condition_2=(StateClose(1)&lt;0); //--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด &nbsp;&nbsp; bool Sell_Condition_3=(MainADX(0)&gt;m_minimum_ADX); //--- condition 4: ค่าของ DI- ต่ำกว่า DI+ ของแท่งเทียนปัจจุบัน &nbsp;&nbsp; bool Sell_Condition_4=(StateADX(0)&lt;0); //--- &nbsp;&nbsp; price=0.0; //--- ตรวจสอบเงื่อนไขทั้งหมด &nbsp;&nbsp; return(Sell_Condition_1 &amp;&amp; Sell_Condition_2 &amp;&amp; Sell_Condition_3 &amp;&amp; Sell_Condition_4); &nbsp;&nbsp;}3. เปิดตำแหน่งขาย (Short Position)เงื่อนไขในการเปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการปิดตำแหน่งซื้อ.//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งขาย (sell) | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ //--- condition 1: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้ &nbsp;&nbsp; bool Sell_Condition_1=(StateEMA(0)&lt;0 &amp;&amp; StateEMA(1)&lt;0); //--- condition 2: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่ &nbsp;&nbsp; bool Sell_Condition_2=(StateClose(1)&lt;0); //--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด &nbsp;&nbsp; bool Sell_Condition_3=(MainADX(0)&gt;m_minimum_ADX); //--- condition 4: ค่าของ DI- ต่ำกว่า DI- ของแท่งเทียนปัจจุบัน &nbsp;&nbsp; bool Sell_Condition_4=(StateADX(0)&lt;0); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Bid()+m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- ตรวจสอบเงื่อนไขทั้งหมด &nbsp;&nbsp; return(Sell_Condition_1 &amp;&amp; Sell_Condition_2 &amp;&amp; Sell_Condition_3 &amp;&amp; Sell_Condition_4); &nbsp;&nbsp;}4. ปิดตำแหน่งขาย (Close Short Position)เงื่อนไขในการปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการเปิดตำแหน่งซื้อ.//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งขาย | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ //--- condition 1: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้ &nbsp;&nbsp; bool Buy_Condition_1=(StateEMA(0)&gt;0 &amp;&amp; StateEMA(1)&gt;0); //--- condition 2: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่ &nbsp;&nbsp; bool Buy_Condition_2=(StateClose(1)&gt;0); //--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด &nbsp;&nbsp;&nbsp; bool Buy_Condition_3=(MainADX(0)&gt;m_minimum_ADX); //--- condition 4: ค่าของ DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน &nbsp;&nbsp; bool Buy_Condition_4=(StateADX(0)&gt;0); //--- &nbsp;&nbsp; price=0.0; //--- ตรวจสอบเงื่อนไขทั้งหมด return(Buy_Condition_1 &amp;&amp; Buy_Condition_2 &amp;&amp; Buy_Condition_3 &amp;&amp; Buy_Condition_4); &nbsp;&nbsp;}การสร้าง Expert Advisor โดยใช้ MQL5 Wizardในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" ในตัวเลือก MQL5 Wizard:รูปที่ 2. เลือก "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" ใน MQL5 Wizardจากนั้นคุณต้องระบุอัลกอริธึม trailing stop ที่ต้องการ และระบบ การจัดการเงินและความเสี่ยง โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5.ผลการทดสอบมาดูการทดสอบย้อนกลับของ Expert Advisor บนข้อมูลย้อนหลัง (EURUSD H1, ช่วงเวลาทดสอบ: 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1) และไม่ได้ใช้ Algorithm Trailing Stop (Trailing not used).รูปที่ 3. ผลการทดสอบย้อนหลังของ Expert Advisor ตามแนวทางการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADXไฟล์แนบ: ไฟล์ SignalADX-MA.mqh ที่มีคลาส CSignalADX_MA ต้องถูกวางไว้ที่ terminal_data_folder\MQL5\Include\Expert\Signal\.ไฟล์ ma_crossover_adx.mq5 มีโค้ดของ Expert Advisor ที่สร้างขึ้นโดยใช้ MQL5 Wizard.

2011.01.11
สร้างสัญญาณเทรดด้วย Moving Average 3 ตัวใน MQL5 Wizard
MetaTrader5
สร้างสัญญาณเทรดด้วย Moving Average 3 ตัวใน MQL5 Wizard

MQL5 Wizard ช่วยให้เราสามารถสร้างโค้ดสำหรับ Expert Advisors ได้โดยอัตโนมัติ สำหรับรายละเอียดเพิ่มเติม ดูที่ การสร้าง Expert Advisors ที่พร้อมใช้งานใน MQL5 Wizard. วันนี้เราจะมาทำความรู้จักกับกลยุทธ์การเทรดที่ใช้ Moving Average 3 ตัว ซึ่งเรียกว่า “สัญญาณจาก Moving Average 3 ตัว” โดยกลยุทธ์นี้จะใช้ Moving Average แบบ Exponential 3 ตัว ได้แก่ FastEMA, MediumEMA และ SlowEMA เพื่อช่วยในการวิเคราะห์แนวโน้มของตลาด. สัญญาณการเทรดมีดังนี้: สัญญาณซื้อ: FastEMA > MediumEMA > SlowEMA (แนวโน้มขาขึ้น). สัญญาณขาย: FastEMA < MediumEMA < SlowEMA (แนวโน้มขาลง). กลยุทธ์นี้ได้ถูกนำไปใช้ในคลาส CSignal3EMA (ไฟล์ signal3ema.mqh ต้องถูกวางไว้ใน terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh). Figure 1. สัญญาณการเทรดจาก Moving Average 3 ตัว สัญญาณการเทรด กลยุทธ์การเทรดนี้ได้ถูกสร้างขึ้นในคลาส CSignal3EMA โดยมีวิธีการที่ป้องกันเพื่อให้เข้าถึงค่า Moving Average 3 ตัวได้ง่ายขึ้น: double FastEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ Fast EMA ของแท่งราคา double MediumEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ Medium EMA ของแท่งราคา double SlowEMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// คืนค่าของ Slow EMA ของแท่งราคา หมายเหตุ: ค่า Indicator ของแท่งที่ 0 (ที่ยังไม่สมบูรณ์) อาจมีการเปลี่ยนแปลง ดังนั้นจึงจำเป็นต้องตรวจสอบเงื่อนไขการเทรดโดยใช้ข้อมูลของแท่งที่ถูกสร้างเสร็จแล้ว. 1. เปิดตำแหน่งซื้อ (Long Position) แนวโน้มขาขึ้นถูกกำหนดโดยเงื่อนไขดังนี้: FastEMA > MediumEMA > SlowEMA: FastEMA(1) > MediumEMA(1): Fast EMA สูงกว่า Medium EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด); MediumEMA(2) > SlowEMA(1): Medium EMA สูงกว่า Slow EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด); //+------------------------------------------------------------------+ //| เช็คเงื่อนไขการเปิดตำแหน่งซื้อ (Long Position) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; double medium=MediumEMA(1); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Ask()-m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- ตรวจสอบแนวโน้มขาขึ้น (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) > MediumEMA(1) > SlowEMA(1) &nbsp;&nbsp; return(FastEMA(1)&gt;medium &amp;&amp; medium&gt;SlowEMA(1)); &nbsp;&nbsp;} 2. ปิดตำแหน่งซื้อ (Close Long Position) แนวโน้มขาลงถูกกำหนดโดยเงื่อนไขดังนี้: FastEMA < MediumEMA < SlowEMA: FastEMA(1) < MediumEMA(1): Fast EMA ต่ำกว่า Medium EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด); MediumEMA(2) < SlowEMA(1): Medium EMA ต่ำกว่า Slow EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด); //+------------------------------------------------------------------+ //| เช็คเงื่อนไขการปิดตำแหน่งซื้อ | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; double medium=MediumEMA(1); //--- &nbsp;&nbsp; price=0.0; //--- ตรวจสอบแนวโน้มขาลง (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) < MediumEMA(1) < SlowEMA(1) &nbsp;&nbsp; return(FastEMA(1)&lt;medium &amp;&amp; medium&lt;SlowEMA(1)); &nbsp;&nbsp;} คุณสามารถปรับปรุงการปิดตำแหน่งซื้อได้ โดยไม่จำเป็นต้องรอแนวโน้มขาลง คุณสามารถปิดตำแหน่งซื้อเมื่อราคาอยู่ในช่วงราบ โดยสามารถตรวจสอบได้จากเงื่อนไข: FastEMA < MediumEMA > SlowEMA. 3. เปิดตำแหน่งขาย (Short Position) //+------------------------------------------------------------------+ //| เช็คเงื่อนไขการเปิดตำแหน่งขาย (Short Position) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; double medium=MediumEMA(1); //--- &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =m_symbol.Bid()+m_stop_loss*m_adjusted_point; &nbsp;&nbsp; tp&nbsp;&nbsp; =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- ตรวจสอบแนวโน้มขาลง (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) < MediumEMA(1) < SlowEMA(1) &nbsp;&nbsp; return(FastEMA(1)&lt;medium &amp;&amp; medium&lt;SlowEMA(1)); &nbsp;&nbsp;} 4. ปิดตำแหน่งขาย (Close Short Position) //+------------------------------------------------------------------+ //| เช็คเงื่อนไขการปิดตำแหน่งขาย | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; double medium=MediumEMA(1); //--- &nbsp;&nbsp; price=0.0; //--- ตรวจสอบแนวโน้มขาขึ้น (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) > MediumEMA(1) > SlowEMA(1) &nbsp;&nbsp; return(FastEMA(1)&gt;medium &amp;&amp; medium&gt;SlowEMA(1)); &nbsp;&nbsp;} คุณสามารถปรับปรุงการปิดตำแหน่งขายได้ โดยไม่จำเป็นต้องรอแนวโน้มขาขึ้น คุณสามารถปิดตำแหน่งขายเมื่อราคาอยู่ในช่วงราบ โดยสามารถตรวจสอบได้จากเงื่อนไข: FastEMA > MediumEMA < SlowEMA. การสร้าง Expert Advisor ด้วย MQL5 Wizard ในการสร้างหุ่นยนต์เทรดที่ใช้กลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น “สัญญาณจาก Moving Average 3 ตัว” ในตัวเลือก MQL5 Wizard: Figure 2. เลือก "สัญญาณจาก Moving Average 3 ตัว" ใน MQL5 Wizard ถัดไปคุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการ และ ระบบการจัดการเงินและความเสี่ยง. โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5. ผลการทดสอบ มาดูกันว่าผลลัพธ์จากการทดสอบ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD H1, ช่วงทดสอบ: 1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900) เป็นอย่างไร. ในการสร้าง Expert Advisor เราใช้ขนาดล็อตที่คงที่ (Trading Fixed Lot, 0.1) และไม่ได้ใช้ Trailing Stop (ไม่ใช้ Trailing). Figure 3. ผลการทดสอบย้อนหลังของ Expert Advisor ที่ใช้ Moving Average 3 ตัว ไฟล์แนบ: ไฟล์ Signal3EMA.mqh ที่มีคลาส CSignal3EMA ต้องถูกวางไว้ใน terminal_data_folder\MQL5\Include\Expert\Signal. ไฟล์ threeema.mq5 มีโค้ดของ Expert Advisor ที่สร้างขึ้นโดยใช้ MQL5 Wizard.

2011.01.10
สร้างระบบเทรดอัตโนมัติด้วย MQL5 Wizard: สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่
MetaTrader5
สร้างระบบเทรดอัตโนมัติด้วย MQL5 Wizard: สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้างโค้ดสำหรับ EA (Expert Advisor) ได้อย่างอัตโนมัติ ดูรายละเอียดเพิ่มเติมได้ที่ การสร้าง EA ที่พร้อมใช้งานใน MQL5 Wizard นะครับ ในบทความนี้ เราจะมาพูดถึงกลยุทธ์ที่อิงจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่ ซึ่งเรียกว่า “สัญญาณจากการตัดกันของราคาและ MA” (เมื่อสร้าง EA โดยอัตโนมัติใน MQL5 Wizard) สัญญาณการเทรด: ซื้อ: ราคาไปตัดขึ้นเหนือค่าเฉลี่ยเคลื่อนที่ ขาย: ราคาไปตัดลงต่ำกว่าค่าเฉลี่ยเคลื่อนที่ การตรวจสอบการเพิ่ม/ลดของ MA ใช้กรองสัญญาณเท็จ กลยุทธ์นี้ถูกใช้งานในคลาส CSignalMA ของ คลาสกลยุทธ์การเทรด ใน MQL5 Standard Library (ตั้งอยู่ที่ MQL5\Include\Expert\Signal\SignalMA.mqh) รูปที่ 1. สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่ สัญญาณการเทรด กลยุทธ์การเทรดนี้ถูกใช้งานในคลาส CSignalMA โดยมีวิธีการที่ป้องกันเพื่อให้ง่ายต่อการเข้าถึงค่าสัญญาณและราคาต่างๆ: double&nbsp; MA(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าของค่าเฉลี่ยเคลื่อนที่ของแท่ง double&nbsp; Open(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าราคาการเปิดของแท่ง double&nbsp; Close(int ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าราคาปิดของแท่ง double&nbsp; StateMA(int ind)&nbsp;&nbsp;&nbsp;&nbsp; // คืนค่าเชิงบวกถ้าเฉลี่ยเพิ่มขึ้นและเชิงลบถ้าเฉลี่ยลดลง double&nbsp; StateOpen(int ind)&nbsp;&nbsp; // คืนค่าความแตกต่างระหว่างราคาการเปิดและค่าเฉลี่ยเคลื่อนที่ double&nbsp; StateClose(int ind)&nbsp; // คืนค่าความแตกต่างระหว่างราคาปิดและค่าเฉลี่ยเคลื่อนที่ ต้องระวัง: ค่าของราคาและสัญญาณในแท่งที่ 0 (ยังไม่สมบูรณ์) อาจมีการเปลี่ยนแปลง ดังนั้นควรตรวจสอบเงื่อนไขการเทรดจากข้อมูลของแท่งที่สมบูรณ์เท่านั้น 1. เปิดตำแหน่งซื้อ เงื่อนไขในการเปิดตำแหน่งซื้อ (การตัดกันของราคาและ MA และตรวจสอบการเพิ่มของ MA): Open(1) &lt; MA(1): ราคาการเปิดต่ำกว่าค่าเฉลี่ยเคลื่อนที่; Close(1) &gt; MA(1): ราคาปิดสูงกว่าค่าเฉลี่ยเคลื่อนที่; MA(1) &gt; MA(2): ตรวจสอบการเพิ่มขึ้นของค่าเฉลี่ยเคลื่อนที่ (กรองสัญญาณเท็จ) //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =0.0; &nbsp;&nbsp; tp&nbsp;&nbsp; =0.0; //--- ราคาตัดขึ้นเหนือ MA และ MA เพิ่มขึ้น &nbsp;&nbsp; return(StateOpen(1)&lt;0 &amp;&amp; StateClose(1)&gt;0 &amp;&amp; StateMA(1)&gt;0); &nbsp;&nbsp;} 2. ปิดตำแหน่งซื้อ เงื่อนไขในการปิดตำแหน่งซื้อ (การตัดกันของราคาและ MA และตรวจสอบการลดของ MA): Open(1) &gt; MA(1): ราคาการเปิดสูงกว่าค่าเฉลี่ยเคลื่อนที่; Close(1) &lt; MA(1): ราคาปิดต่ำกว่าค่าเฉลี่ยเคลื่อนที่; MA(1) &lt; MA(2): ตรวจสอบการลดลงของค่าเฉลี่ยเคลื่อนที่ (กรองสัญญาณเท็จ) //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งซื้อ | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; //--- ราคาตัดลงต่ำกว่าค่าเฉลี่ยเคลื่อนที่และค่าเฉลี่ยลดลง &nbsp; return(StateOpen(1)&gt;0 &amp;&amp; StateClose(1)&lt;0 &amp;&amp; StateMA(1)&lt;0); &nbsp;&nbsp;} 3. เปิดตำแหน่งขาย เงื่อนไขในการเปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการปิดตำแหน่งซื้อ //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งขาย (ขาย)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double&amp; price,double&amp; sl,double&amp; tp,datetime&amp; expiration) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; &nbsp;&nbsp; sl&nbsp;&nbsp; =0.0; &nbsp;&nbsp; tp&nbsp;&nbsp; =0.0; //--- ราคาตัดขึ้นเหนือค่าเฉลี่ยเคลื่อนที่และค่าเฉลี่ยลดลง &nbsp; return(StateOpen(1)&gt;0 &amp;&amp; StateClose(1)&lt;0 &amp;&amp; StateMA(1)&lt;0); &nbsp;&nbsp;} 4. ปิดตำแหน่งขาย เงื่อนไขในการปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการเปิดตำแหน่งซื้อ //+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งขาย | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double&amp; price) &nbsp;&nbsp;{ &nbsp;&nbsp; price=0.0; //--- ราคาตัดขึ้นเหนือค่าเฉลี่ยเคลื่อนที่และค่าเฉลี่ยเพิ่มขึ้น &nbsp; return(StateOpen(1)&lt;0 &amp;&amp; StateClose(1)&gt;0 &amp;&amp; StateMA(1)&gt;0); &nbsp;&nbsp;} //+------------------------------------------------------------------+ สร้าง Expert Advisor โดยใช้ MQL5 Wizard ในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น “สัญญาณจากการตัดกันของราคาและ MA” ในตัวเลือก MQL5 Wizard: รูปที่ 2. เลือก 'สัญญาณจากการตัดกันของราคาและ MA' ใน MQL5 Wizard จากนั้นคุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการและระบบ การจัดการเงินและความเสี่ยง โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5 ได้เลย ผลการทดสอบ มาดูการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD H1, ช่วงเวลา: 1.1.2010-05.01.2011, MA_period=12, MA_Shift=0)

2011.01.08
Grr-al: ระบบเทรดอัจฉริยะสำหรับ MetaTrader 5
MetaTrader5
Grr-al: ระบบเทรดอัจฉริยะสำหรับ MetaTrader 5

สวัสดีครับเพื่อนๆ เทรดเดอร์ทุกคน! วันนี้เรามาพูดถึง Grr-al ซึ่งเป็นระบบเทรดที่น่าสนใจมากๆ สำหรับแพลตฟอร์ม MetaTrader 5 กันครับจาก ความคิดเห็นในฟอรัม MQL5 ได้มีการพูดถึงการใช้ความรู้เกี่ยวกับ อัลกอริธึมการสร้างแท่ง OHLC บน M1 ใน Strategy Tester ของ MetaTrader 5: ถ้าราคาเริ่มลดลงหลังจากการเปิดแท่งใหม่ ก็จะ รับประกัน ว่ามันจะเพิ่มขึ้นในการเปลี่ยนแปลงราคาครั้งถัดไป และในทางกลับกันหมายเหตุ: โหมด "Open prices only" และ "1 minute OHLC" ของ Strategy Tester ใช้ได้เฉพาะสำหรับการประเมินผลกลยุทธ์อย่างคร่าวๆ และรวดเร็วเท่านั้นระบบเทรดนี้จะทำกำไรได้ดีเมื่อใช้โหมด "Open prices only" หรือ "1 minute OHLC" ใน Strategy Tester โดยมีปริมาณการเทรดคงที่ที่ 0.1 Lotและเมื่อเปิดใช้งาน Money Management (พารามิเตอร์ RISK)ระบบนี้ใช้ความสามารถในการอ่าน OHLC ticks (โดยใช้ onTimer event) ที่สร้างขึ้นโดย Strategy Tester ในโหมด "Open prices only" และ "1 minute OHLC"

2011.01.05
FAT PANEL - ระบบเทรดอัตโนมัติสำหรับ MetaTrader 5
MetaTrader5
FAT PANEL - ระบบเทรดอัตโนมัติสำหรับ MetaTrader 5

FAT PANEL เป็นเครื่องมือที่ช่วยให้การเทรดด้วยมือสามารถเป็นระบบอัตโนมัติได้ โดยมีฟังก์ชันมากมาย รวมถึงการสร้างกลยุทธ์การเทรดในแบบที่มองเห็นได้ การเทรดอัตโนมัติได้รับความนิยมอย่างมากในหมู่เทรดเดอร์ แต่ไม่ใช่ทุกคนที่มีพื้นฐานด้านการเขียนโปรแกรม การสร้าง EA ด้วยกลยุทธ์การเทรดบางอย่างนั้นต้องการความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรมใน MQL5 การใช้แผงควบคุมแบบภาพช่วยให้การทำงานในการเทรดง่ายขึ้น แต่การสร้างอัลกอริธึมการเทรดพื้นฐานยังต้องการการเขียนโค้ดหรือหาผู้พัฒนาที่จะช่วยดำเนินการ FAT Panel 0.2 ช่วยให้คุณสามารถสร้างกลยุทธ์การเทรดอัตโนมัติโดยไม่ต้องเขียนโค้ด FAT Panel 0.2 มาพร้อมกับอินเตอร์เฟซที่ใช้งานง่าย: มีแท็บเครื่องมือแบบภาพ หน้าต่างคุณสมบัติ กล่องตรวจสอบ ปุ่มวิทยุ การเลื่อนและการซูม ดูการสาธิต แท็บ 'Algorithm' พื้นที่ทำงานสำหรับการสร้างอัลกอริธึม EA แบบภาพ บล็อกตรรกะที่พร้อมใช้งาน ซึ่งรวมตามวัตถุประสงค์ ค่าของตัวชี้วัดสามารถใช้เป็นพารามิเตอร์นำเข้า และยังมีบล็อกสัญญาณเพิ่มเติม (bid, constants) 4 บล็อกตรรกะสำหรับการประมวลผลสัญญาณ 4 บล็อกสถานะ (ช่วงเวลา วันในสัปดาห์ การมีตำแหน่งเปิด) 3 การดำเนินการตรรกะ (AND, OR, NOT) 2 บล็อกคำสั่ง (ซื้อ, ขาย) การใช้งานที่เข้าใจง่ายในการเพิ่ม เลือก จัดการ เชื่อมต่อ ย้ายและลบบล็อกกลุ่ม การตรวจสอบความเข้ากันได้ของอินพุตและเอาต์พุต พารามิเตอร์ของแต่ละบล็อกสามารถปรับแต่งได้ การสร้างกลยุทธ์การเทรดหลายคู่สกุลเงิน การซูมและเลื่อนพื้นที่ทำงาน บันทึก/โหลดอัลกอริธึมการเทรดและการตั้งค่า แผนภาพจะทำงานแม้ว่าจะมีการเพิ่มหรือลบบล็อกตรรกะ การทดสอบย้อนหลังด้วยแผนภาพที่บันทึกไว้ พารามิเตอร์นำเข้าสำหรับการปรับแต่งใน Strategy Tester การควบคุมแบบภาพ แผนในอนาคต: ขยายรายการตัวชี้วัด ขยายบล็อกพฤติกรรม (การแจ้งเตือนเสียง วัตถุกราฟิกบนแผนภูมิ ฯลฯ) ปรับแต่งพื้นที่ทำงาน รูปแบบการเก็บแผนใหม่ บล็อกตรรกะที่บูรณาการพร้อมอัลกอริธึมและการตั้งค่าที่สร้างไว้ในตัว การติดตั้ง: ทำการแตกไฟล์จากที่เก็บไปยังโฟลเดอร์ของเทอร์มินัลลูกค้า เปิด MetaEditor (กด F4 ในเทอร์มินัล) และคอมไพล์ตัวชี้วัดที่อยู่ใน MQL5/indicators/fatpanel และ EA ที่อยู่ใน MQL5/Experts/fatpanel จากนั้นแนบ EA กับแผนภูมิ (อนุญาตให้ใช้ DLLs) การสร้างอัลกอริธึมการเทรด: แผนการเทรดที่ง่ายที่สุดสามารถสร้างได้โดยใช้บล็อกตรรกะ 4 บล็อก เมื่อต้องการเพิ่มบล็อกตรรกะลงในพื้นที่ทำงาน ให้คลิกที่บล็อกแล้วคลิกที่ตำแหน่งที่ต้องการในพื้นที่ทำงาน มาลองเพิ่มบล็อก "ซื้อ" จากแท็บ "พฤติกรรม" บล็อก "MA" และ "Bid" จากแท็บ "สัญญาณ" และบล็อก "&gt;" จากแท็บ "การดำเนินการ" มันจะดูเหมือนภาพนี้: ตอนนี้ถึงเวลาที่จะเชื่อมต่อบล็อกแล้ว เมื่อคุณคลิกที่บล็อก คุณจะเห็นสี่เหลี่ยมสีน้ำเงิน แสดงว่าบล็อกถูกเลือก ตอนนี้คุณสามารถย้ายไปยังตำแหน่งใดก็ได้ในพื้นที่ทำงาน หากคุณลากบล็อกไปยังบล็อกอื่น มันจะพยายามเชื่อมต่อโดยอัตโนมัติ ให้เชื่อมต่อบล็อกสัญญาณกับบล็อกการดำเนินการ "&gt;" และบล็อกการดำเนินการกับบล็อกคำสั่ง บล็อกตรรกะทั้งหมดมีอินพุตและเอาต์พุต การเชื่อมต่อบล็อกที่ไม่ถูกต้องจะไม่เกิดขึ้น เมื่อต้องการลบบล็อก ให้เลือกและคลิกที่ปุ่ม "ลบ" เมื่อต้องการปรับแต่งคุณสมบัติของบล็อก ให้คลิกเมื่อเลือก (หรือดับเบิ้ลคลิกที่บล็อกตรรกะที่ยังไม่ได้เลือก) มาปรับตั้งค่าพารามิเตอร์ของบล็อก "&gt;" กันเถอะ ตั้งค่า tp=120 และ sl=60 สำหรับบล็อก "ซื้อ" หลังจากนั้นให้เปิดการทำงานของแผน หากคุณเปิด "AutoTrading" EA จะเริ่มทำการเทรด หมายเหตุ! ไม่แนะนำให้ทดสอบการทำงานของ EA บนบัญชีจริง! ในกรณีของเรา EA จะวางคำสั่งถ้าระยะห่างระหว่างค่าเฉลี่ยเคลื่อนที่และราคาประมูลสูงกว่า 200 จุด การทดสอบย้อนหลัง: เพื่อทดสอบกลยุทธ์บนข้อมูลเก่า คุณต้องบันทึกแผนโดยคลิกที่ปุ่ม "บันทึก". จากนั้นเลือก "Fatpanel/FatPanel.ex5" ใน Strategy Tester ของเทอร์มินัลลูกค้า สัญลักษณ์และระยะเวลาไม่สำคัญ EA จะเทรดตามกลยุทธ์ที่ระบุในบล็อกคำสั่งหรือแทนเวลา ตอนนี้ถึงเวลาที่จะดูผลลัพธ์กลยุทธ์ หากเราระบุ 300 แทนที่จะเป็น 200 ในบล็อกการดำเนินการของแผน ผลลัพธ์จะเป็นดังนี้ (2010): 2. แท็บ 'Chart' แท็บ Chart ให้ข้อมูลเกี่ยวกับสัญลักษณ์และตำแหน่งที่เปิดอยู่ และช่วยให้การเทรดด้วยมือได้ง่ายขึ้น สัญลักษณ์ที่จัดอยู่ในแท็บ การจัดการตำแหน่งที่ง่าย ปิดตำแหน่ง (หากตำแหน่งเกินปริมาณการเทรดสูงสุด ตำแหน่งจะถูกปิดโดยใช้คำขอการเทรดหลายครั้ง) สีของแท็บสัญลักษณ์ขึ้นอยู่กับกำไรปัจจุบันของตำแหน่งที่เปิดอยู่ ตรวจสอบพารามิเตอร์และแสดงข้อความแจ้งเตือน การวางคำสั่ง pending ที่ง่าย

2010.12.24
แนะนำ MCM Control Panel สำหรับ EA และอินดิเคเตอร์หลายสกุลเงิน
MetaTrader5
แนะนำ MCM Control Panel สำหรับ EA และอินดิเคเตอร์หลายสกุลเงิน

หนึ่งในประโยชน์ของภาษา MQL5 คือความสามารถในการใช้ตัวชี้วัดและที่ปรึกษาผู้เชี่ยวชาญ (EA) หลายสกุลเงิน ลองดู Multicurrency OnTickMarketWatch tick event handler ใน MQL5 CodeBase การใช้แนวคิดที่เสนอในสคริปต์อาจไม่สะดวกนัก ในกรณีที่มีหลายเหตุการณ์ อาจเกิดการล้นของคิวเหตุการณ์ได้ นี่คือหมายเหตุจาก MQL5 Reference:เทอร์มินัลของลูกค้าเพิ่มเหตุการณ์ที่ปรากฏเข้าสู่คิวเหตุการณ์ ดังนั้นเหตุการณ์จะถูกประมวลผลทีละอย่างตามลำดับที่ได้รับ มีข้อยกเว้นสำหรับเหตุการณ์ NewTick หากในคิวมีเหตุการณ์ดังกล่าวอยู่แล้วหรือเหตุการณ์นี้กำลังถูกประมวลผล เหตุการณ์ NewTick ใหม่จะไม่ถูกเพิ่มเข้าไปในคิวขนาดของคิวเหตุการณ์มีการจำกัด ขณะเกิดการล้นของคิว เหตุการณ์เก่าจะถูกลบโดยไม่ได้รับการประมวลผลเพื่อให้สามารถรับเหตุการณ์ใหม่ได้ ดังนั้นจึงแนะนำให้เขียนตัวจัดการเหตุการณ์ที่มีประสิทธิภาพ และไม่แนะนำให้ใช้ลูปไม่สิ้นสุด (ยกเว้นสคริปต์ที่จัดการกับเหตุการณ์ Start เท่านั้น)นอกจากนี้ บางครั้งอาจจำเป็นต้องคำนวณค่าของตัวชี้วัดใหม่ก็ต่อเมื่อมีแท่งใหม่ปรากฏขึ้น อีกทั้งถ้าคุณต้องการปิดการซื้อขาย "ตามความไหล" บนสัญลักษณ์บางตัวใน EA หลายสกุลเงิน เพื่อเปลี่ยนกรอบเวลาของสัญลักษณ์บางตัว หรือสิ่งอื่นๆสิ่งที่ "อื่นๆ" อาจเป็นข้อมูลภายนอก MCM (MultiCurrency Mode) Control Panel ถูกสร้างขึ้นจากแนวคิดนี้ นอกจากนี้ยังสามารถใช้ในกรณีการซื้อขายสกุลเงินเดียวได้อีกด้วยคุณสมบัติของ "MCM Control Panel" (เวอร์ชันการแข่งขัน):มีฟังก์ชันขั้นต่ำที่จำเป็นสำหรับการใช้โหมดหลายสกุลเงินใน EA และอินดิเคเตอร์:เพิ่ม/ลบสัญลักษณ์สำหรับการซื้อขายและวิเคราะห์สามารถติดตามเหตุการณ์ "new tick" และ "new bar" สำหรับสัญลักษณ์และช่วงเวลาใดๆการตั้งค่าทั้งหมดสามารถเปลี่ยนแปลงได้ "ตามความไหล" โดยไม่ต้องรีสตาร์ท EA หรืออินดิเคเตอร์แผงสามารถใช้กับ EA และอินดิเคเตอร์ของเราได้ยังสามารถรวมอยู่ในโค้ดของคุณ จะถูกโหลดพร้อมกับพวกเขามันโปร่งใส คุณไม่จำเป็นต้องเพิ่มโค้ดของ MCM Control Panel ลงใน EA หรืออินดิเคเตอร์ของคุณการใช้ "MCM Control Panel" คุณสามารถเพิ่มคุณสมบัติของคุณเอง ดูรายละเอียดเพิ่มเติมด้านล่างการบันทึก/กู้คืนการตั้งค่า Panel ไม่ได้รับการสนับสนุนในเวอร์ชันนี้เริ่มต้น MCM Control Panelการเปิด "MCM Control Panel" สามารถทำได้หลายวิธี:&nbsp;แนบ "iControl panel MCM" เข้ากับกราฟเปิดสคริปต์ "scControl panel MCM" สคริปต์นี้จะโหลดตัวชี้วัด "iControl panel MCM"โหลด Panel จาก EA หรืออินดิเคเตอร์ของคุณ ดูรายละเอียดใน "exControl panel MCM"ในกรณีที่ 3 แผงจะถูกโหลดพร้อมกับ EA หรืออินดิเคเตอร์ของเราและแนบเข้ากับกราฟEA ของคุณควรมีตัวจัดการเหตุการณ์ OnChartEvent() เพื่อประมวลผลเหตุการณ์จาก MCM Control Panelอินเตอร์เฟซอินเตอร์เฟซผู้ใช้งานง่าย ถูกออกแบบเป็นเมนู ขนาดและสีของเมนูสามารถตั้งค่าได้จากพารามิเตอร์นำเข้าหน้าตาเป็นดังนี้:&nbsp;การออกแบบแผงถูกใช้เพื่อกำหนดเหตุการณ์สำหรับ EA และอินดิเคเตอร์หลายสกุลเงินขนาดและตำแหน่งของแผงขึ้นอยู่กับขนาดกราฟและขนาดฟอนต์ (ที่กำหนดในพารามิเตอร์นำเข้า) เพื่อให้พื้นที่ทำงานว่าง แผงสามารถย่อได้&nbsp;ขนาดของแผงสามารถเปลี่ยนได้โดยการเปลี่ยนขนาดฟอนต์ในพารามิเตอร์นำเข้า (ขนาดฟอนต์=10 ตามค่าเริ่มต้น):&nbsp;คุณสามารถตั้งค่าสีใดๆ ที่คุณต้องการตัวอย่างเช่น โทนสีชมพู:โทนสี EMO:&nbsp;&nbsp;ใช้งานง่ายเมนูใช้งานง่าย สะดวกต่อการใช้งานปุ่ม "MCM Control Panel" มีฟีเจอร์เพิ่มเติม (ไม่ได้รวมในเวอร์ชันนี้):โดยใช้ปุ่ม "Chart" คุณสามารถเปลี่ยนสัญลักษณ์และกรอบเวลาได้ง่ายๆ เพียงเลือก:&nbsp;ปุ่ม "Events" จะช่วยให้คุณเปิด/ปิดเหตุการณ์ "ตามความไหล" (โดยไม่ต้องรีสตาร์ท EA หรืออินดิเคเตอร์) สำหรับสัญลักษณ์บางตัวและระบุประเภทเหตุการณ์ที่ต้องการ เหตุการณ์เหล่านี้สามารถประมวลผลได้ภายในฟังก์ชัน OnChartEvent() ของ EA หรืออินดิเคเตอร์ เมนูสัญลักษณ์ประกอบด้วยเฉพาะสัญลักษณ์ที่เลือกจาก "Market Watch" คุณสามารถรวมเหตุการณ์ใดๆ ก็ได้ ทุกเหตุการณ์จะถูกประมวลผลตัวอย่างเช่น ไม่จำเป็นต้องกังวลเกี่ยวกับการเกิดขึ้นของ tick/bar ใหม่สำหรับสัญลักษณ์ในกรอบเวลา แผงจะส่งเหตุการณ์:&nbsp;&nbsp;นี่คือ "ช่วยเหลือ":&nbsp;ความรู้และการนำไปใช้การแก้ปัญหาของฉันได้เผยแพร่ใน Multicurrency OnTickMarketWatch tick event handler แต่แผงนี้มีฟีเจอร์เพิ่มเติม:"MCM Control panel MCM" ให้อินเตอร์เฟซซึ่งไม่ได้ถูกติดตั้งในเทอร์มินัลของลูกค้าโดยตรง ทำให้คุณสามารถใช้โหมดหลายสกุลเงินผ่านตัวจัดการเหตุการณ์ OnChartEvent() อีกคุณสมบัติคือความสามารถในการเปลี่ยนการตั้งค่า "ตามความไหล"ในการสร้างเหตุการณ์สำหรับตัวจัดการเหตุการณ์ OnChartEvent() แผง MCM Control Panel ใช้ "เอเย่นต์" ของตัวเอง (ตัวชี้วัดที่ถูกเรียกใช้โดยแผง MCM Control Panel บนสัญลักษณ์บางตัว) เพื่อจัดหาเหตุการณ์สำหรับการซื้อขายหลายสกุลเงินแผงสามารถรวมอยู่ใน EA หรืออินดิเคเตอร์แผง MCM Control ให้โอกาสใหม่สำหรับนักพัฒนา MQL5IMHO แผงนี้เป็นตัวอย่างของโครงสร้างใหม่ของ EA และอินดิเคเตอร์ ฉันจะให้ตัวอย่างเพิ่มเติมในภายหลังข้อมูลเกี่ยวกับเหตุการณ์และการแจ้งเตือนแผงมีแถบสถานะเพื่อแสดงเหตุการณ์การติดตั้ง MCM Control Panelแตกไฟล์ mcm_control_panel.zip ลงในโฟลเดอร์ของเทอร์มินัลลูกค้า หลังจากนั้นจะปรากฏไฟล์ดังต่อไปนี้:/mql5/experts/exControl panel MCM.mq5 - ตัวอย่างของ EA;/mql5/scripts/scControl panel MCM.mq5&nbsp; - ตัวอย่างของสคริปต์;/mql5/indicators/iControl panel MCM.mq5 - ตัวชี้วัด เอนจินหลักของ "MCM Control panel";/mql5/indicators/Spy Control panel MCM.mq5 - ตัวชี้วัด "MCM Control panel" agent/mql5/include/Control panel MCM.mqh - ชุดคลาสและฟังก์ชันของ "MCM Control panel".ถัดไป ให้คอมไพล์อินดิเคเตอร์ สคริปต์ และ EAการเปิดใช้งาน MCM Control Panelการเปิดใช้งาน MCM Control Panel สามารถทำได้โดยการแนบตัวชี้วัด iControl panel MCM.mq5 เข้ากับกราฟใดก็ได้แผงสามารถเปิดจาก EA ได้ โดยเพียงแค่แนบ EA "exControl panel MCM" เข้ากับกราฟ:&nbsp;เป็นตัวอย่างของการซื้อขายหลายสกุลเงิน ฉันได้เขียน EA MultiTrend ตัวชี้วัดจะวาดแนวโน้มของ USD โดยอิงจากการวิเคราะห์ 4 สกุลเงิน:นี่คือโค้ด://+------------------------------------------------------------------+ //|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MultiTrend.mq5 | //|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright 2010, Lizar | //|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1.00 Build 2 (09 Dec 2010)" #property copyright&nbsp;&nbsp; "Copyright 2010, Lizar" #property link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"https://www.mql5.com/ru/users/Lizar" #property version&nbsp;&nbsp;&nbsp;&nbsp; VERSION #property description "This Expert Advisor uses the MCM Control Panel" input color bg_color=Gray;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Menu color input color font_color=Gainsboro; // Text color input color select_color=Yellow;&nbsp; // Selected text color input int font_size=10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Font size #include &lt;Control panel MCM.mqh&gt; //&lt;--- Include file //+------------------------------------------------------------------+ //| Expert initialization function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int OnInit() &nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//--- MCM Control Panel initialization.&nbsp;&nbsp;&nbsp;&nbsp; //--- It isn't necessary to set colors, if not specified, the default colors will be used.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; InitControlPanelMCM(bg_color,font_color,select_color,font_size); //---&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;return(0);&nbsp;&nbsp; &nbsp;&nbsp;} //+------------------------------------------------------------------+ //| Expert deinitialization function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ void OnDeinit(const int reason) &nbsp;&nbsp;{ &nbsp;&nbsp; DeinitControlPanelMCM();&nbsp;&nbsp; //&lt;--- MCM Control Panel deinitialization&nbsp;&nbsp; &nbsp; } //+------------------------------------------------------------------+ //| OnChartEvent event handler. | //| See MQL5 Reference for details. | //| Can be used with MCM Control panel for multicurrency trading | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // event identifier:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// if id-CHARTEVENT_CUSTOM==0 - initialization event (when prev_calculated==0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const long&amp;&nbsp;&nbsp; lparam, // timeframe &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const double&amp; dparam, // price&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string&amp; sparam&nbsp;&nbsp;// symbol &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) &nbsp;&nbsp;{ &nbsp;&nbsp; if(id&gt;=CHARTEVENT_CUSTOM) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -&gt; id=", id-CHARTEVENT_CUSTOM, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ":&nbsp;&nbsp;",sparam," ",EventDescription(lparam)," price=",dparam); &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;} //+------------------------------------------------------------------+ พารามิเตอร์ OnChartEvent()แผงสร้างเหตุการณ์ที่กำหนดเอง เหตุการณ์เหล่านี้สามารถประมวลผลใน EA หรืออินดิเคเตอร์โดยใช้ตัวจัดการเหตุการณ์ OnChartEvent()พารามิเตอร์นำเข้า:id - event id:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; หาก id-CHARTEVENT_CUSTOM !=0 - จะเท่ากับสัญลักษณ์ดัชนีในหน้าต่าง "Market Watch";lparam&nbsp; -&nbsp; ธงเหตุการณ์ ดู ENUM_CHART_EVENT_SYMBOL enumeration ใน Control panel MCM.mqh.dparam -&nbsp; ราคาติกหรือราคาการเปิดของแท่งใหม่ในกรอบเวลาใดกรอบเวลาหนึ่งsparam -&nbsp; ชื่อสัญลักษณ์รายการเหตุการณ์ที่รองรับใน MCM Control Panelโดยใช้พารามิเตอร์ lparam แผงสามารถส่งเหตุการณ์ที่กำหนดเองได้สูงสุด 64 เหตุการณ์ในสัญลักษณ์ ในเวอร์ชันนี้เหตุการณ์ที่รองรับ ได้แก่:&nbsp;เหตุการณ์ "Initialization" (Initialization); เหตุการณ์ "New tick" (tick);เหตุการณ์ "New bar" บนกราฟ M1 (M1); เหตุการณ์ "New bar" บนกราฟ M2 (M2); เหตุการณ์ "New bar" บนกราฟ M3 (M3); เหตุการณ์ "New bar" บนกราฟ M4 (M4);เหตุการณ์ "New bar" บนกราฟ M5 (M5); เหตุการณ์ "New bar" บนกราฟ M6 (M6);เหตุการณ์ "New bar" บนกราฟ M10 (M10);เหตุการณ์ "New bar" บนกราฟ M12 (M12);เหตุการณ์ "New bar" บนกราฟ M15 (M15);เหตุการณ์ "New bar" บนกราฟ M20 (M20);เหตุการณ์ "New bar" บนกราฟ M30 (M30);เหตุการณ์ "New bar" บนกราฟ H1 (H1); เหตุการณ์ "New bar" บนกราฟ H2 (H2);เหตุการณ์ "New bar" บนกราฟ H3&nbsp; (H3); เหตุการณ์ "New bar" บนกราฟ H4 (H4);เหตุการณ์ "New bar" บนกราฟ H6 (H6);เหตุการณ์ "New bar" บนกราฟ H8 (H8);เหตุการณ์ "New bar" บนกราฟ H12 (H12);เหตุการณ์ "New bar" บนกราฟ D1 (D1); เหตุการณ์ "New bar" บนกราฟ W1 (W1); เหตุการณ์ "New bar" บนกราฟ MN1 (MN1);&nbsp;คำอธิบายเหตุการณ์ที่ส่งคืนโดย EventDescription() จะปรากฏในวงเล็บ (Initialization, tick, Mxx เป็นต้น) ฟังก์ชัน EventDescription สามารถพบได้ใน Control panel MCM.mqh (ตาม ENUM_CHART_EVENT_SYMBOL enumeration)เหตุการณ์ "Initialization" จะเกิดขึ้นเมื่อ prev_calculated=0 ซึ่งสามารถใช้เตรียมข้อมูลได้ เช่น คำนวณค่าของตัวชี้วัดใหม่การตั้งค่าเหตุการณ์ในการตั้งค่าเหตุการณ์ที่ต้องการ ให้คลิกที่ปุ่ม "Events" เลือกสัญลักษณ์และประเภทเหตุการณ์ เหตุการณ์ที่เลือกจะแสดงเป็นสีเหลือง (หรือสีที่เลือกในพารามิเตอร์นำเข้าสำหรับตัวชี้วัด) คุณสามารถเลือกเหตุการณ์หนึ่งหรือหลายเหตุการณ์ทั้งหมดจะถูกรวมเข้ากับ EA หลายสกุลเงินของเรา เพื่อใช้การเปลี่ยนแปลง ให้คลิกที่ปุ่ม "Enable/Disable events"กระบวนการเดียวกันนี้สามารถทำได้สำหรับสัญลักษณ์ที่จำเป็นทั้งหมด&nbsp;นี่คือบันทึกจากแท็บ "Experts":&nbsp;&nbsp;

2010.12.24
แผงควบคุมสำหรับการแข่งขัน - ระบบเทรดสำหรับ MetaTrader 5
MetaTrader5
แผงควบคุมสำหรับการแข่งขัน - ระบบเทรดสำหรับ MetaTrader 5

คำอธิบาย: แผงควบคุมนี้ออกแบบมาเพื่อการเทรดแบบแมนนวล การทำสกัลปิ้งในวัน (intraday scalping) และอื่นๆ โดยเฉพาะ สำหรับนักเทรดที่ต้องการความรวดเร็วและแม่นยำ หน้าตาของแผงควบคุมเป็นดังนี้: รูปที่ 1. แผงควบคุม แผงด้านบน: ชื่อและเวอร์ชั่น; เวลา GMT; เวลาในท้องถิ่น; แผงด้านซ้าย: ปริมาณการเทรด คือผลรวมของค่าที่เลือกจากแผงการเทรด ซึ่งช่วยให้คุณสามารถตั้งค่าปริมาณการเทรดได้อย่างรวดเร็วและแม่นยำ โดยค่าต่างๆ สามารถกำหนดในพารามิเตอร์ของ Expert Advisor (สูงสุดถึง 9 ค่า); ปุ่มซื้อ/ขาย - ใช้สำหรับเปิดตำแหน่งยาว/สั้น โดยปริมาณของตำแหน่งจะแสดงอยู่ด้านล่างปุ่มซื้อ. แผงด้านขวา: ปิดทั้งหมด จะปิดตำแหน่งที่เปิดอยู่ในราคาปัจจุบัน; หยุดขาดทุน ตั้ง Stop Loss ให้อยู่ในระดับ Even Break ตามที่กำหนดในพารามิเตอร์; กลับตำแหน่ง จะทำการกลับตำแหน่งที่เปิดอยู่;

2010.12.18
eInTradePanel: เครื่องมือช่วยเทรดใน MetaTrader 5 สำหรับเทรดเดอร์ไทย
MetaTrader5
eInTradePanel: เครื่องมือช่วยเทรดใน MetaTrader 5 สำหรับเทรดเดอร์ไทย

หากคุณเป็นเทรดเดอร์ที่ใช้ MetaTrader 5 คุณคงจะมองหาเครื่องมือที่สามารถช่วยในการเทรดอย่างมีประสิทธิภาพ วันนี้เราขอแนะนำ eInTradePanel แผงควบคุมที่ออกแบบมาเพื่อช่วยในการเทรดแบบ Manual อย่างสะดวกสบาย รูปที่ 1. รายการในแผงควบคุม (โหมด 1) รายการในแผงควบคุม 1. ปุ่มแสดง/ซ่อนแผง 2. เปิด/ปิดเสียงเมื่อ Take Profit หรือคำสั่งรอดำเนินการถูกเรียกใช้ 3. ส่งอีเมลเมื่อ Take Profit หรือคำสั่งรอดำเนินการถูกเรียกใช้ 4. ประเภทคำสั่ง: "b" - ตลาดซื้อ (Market Buy) "s" - ตลาดขาย (Market Sell) "bs" - คำสั่งรอดำเนินการซื้อ (Buystop Pending Order) "ss" - คำสั่งรอดำเนินการขาย (Sellstop Pending Order) "bl" - คำสั่งรอดำเนินการซื้อจำกัด (Buylimit Pending Order) "sl" - คำสั่งรอดำเนินการขายจำกัด (Selllimit Pending Order) "bsl" - คำสั่งรอดำเนินการซื้อและขายจำกัด (Buystoplimit Pending Order) "ssl" - คำสั่งรอดำเนินการขายและซื้อจำกัด (Sellstoplimit Pending Order) 5. ปุ่มวางคำสั่ง (ซื้อ/ขาย) 6. ขนาดการเทรด 7. Stop Loss (เป็นจุด) 8. Take Profit (เป็นจุด) โหมดที่รองรับมี 2 โหมด: โหมด 1 (รูปที่ 1) - เปิดตำแหน่งด้วยระดับ Stop Loss และ Take Profit ที่กำหนดไว้ (เป็นจุด) โหมด 2 (รูปที่ 2) - การวางคำสั่งด้วยระดับ Stop Loss และ Take Profit ขึ้นอยู่กับตำแหน่งของเส้นแนวนอน โหมด 1 ใช้สำหรับคำสั่งตลาดโหมด 2 ใช้สำหรับคำสั่งรอดำเนินการ ในโหมดนี้ ปุ่มวางคำสั่งจะแสดงแทนปุ่ม "ขาย" และ "ซื้อ" โดยระดับราคาที่กำหนด, Take Profit และ Stop Loss จะถูกแสดงบนกราฟ เมื่อเลื่อนเส้น คุณสามารถเปลี่ยนพารามิเตอร์คำสั่งได้: รูปที่ 2. โหมด 2 (เลือกคำสั่ง buystoplimit) เส้นต่างๆ เส้นสีส้ม - ระดับ Stop Loss (สีเดียวกันสำหรับทุกประเภทคำสั่ง) เส้นสีเขียว - ระดับ Take Profit (สีเดียวกันสำหรับทุกประเภทคำสั่ง) เส้นสีฟ้าอ่อน - ราคาของคำสั่ง Buy Stop และ Buy Limit เส้นสีชมพู - ราคาของคำสั่ง Sell Stop และ Sell Limit เส้นสีน้ำเงิน - ระดับราคาที่ Buy Stop Limit เปลี่ยนเป็น Buy Limit เส้นสีแดง - ระดับราคาที่ Buy Stop Limit เปลี่ยนเป็น Buy Limit เส้นแนวดิ่ง - เวลาหมดอายุของคำสั่ง หากเส้นอยู่ทางซ้าย หมดเวลาจะไม่ถูกใช้ ขนาดการเทรด ค่าขนาดการเทรดขั้นต่ำ (ตำแหน่ง 6 ในรูปที่ 1) จะถูกตั้งเมื่อคุณกดที่ป้าย "lot" หากเปิดตำแหน่ง จะตั้งค่าขนาดของตำแหน่งเพื่อให้การปิดทำได้ง่ายขึ้น Stop Loss และ Take Profit ระดับ Stop Loss และ Take Profit จะถูกกำหนดเป็นจุด หากคุณไม่ต้องการใช้ SL/TP ให้ตั้งเป็น 0 กดปุ่ม "sl" หรือ "tp" เพื่อกำหนด SL และ TP ที่อนุญาตขั้นต่ำ โปรแกรมจะตรวจสอบค่าของ Stop Loss และ Take Profit โดยค่าที่ไม่ถูกต้องจะแสดงเป็นสีแดง: รูปที่ 3. ค่าที่ไม่ถูกต้องของ Stop Loss และ Take Profit ในโหมดคำสั่งรอดำเนินการ (โหมด 2) ค่าของ Stop Loss และ Take Profit จะขึ้นอยู่กับเส้น Stop Loss และ Take Profit Expert Advisor จะบันทึกค่าที่ใช้ล่าสุดของขนาดคำสั่ง, Stop Loss และ Take Profit (สำหรับแต่ละสัญลักษณ์) และโหลดหลังจากเริ่มต้นใหม่ของเทอร์มินัลลูกค้า การเคลื่อนที่ของแผง ตำแหน่งของแผงเทรดสามารถเปลี่ยนได้ ในการเคลื่อนที่แผง คุณต้องดับเบิ้ลคลิกที่แผง (สีเทา) และเลื่อนแผงไปยังตำแหน่งใดก็ได้บนกราฟ ทุกอย่าง (ปุ่ม, แก้ไข, ป้ายชื่อ) จะถูกซ่อนไว้ (รูปที่ 4) และจะถูกกู้คืนหลังจากดับเบิ้ลคลิก รูปที่ 4. การเคลื่อนที่ของแผง ตำแหน่งของแผงจะถูกบันทึกสำหรับกราฟแต่ละกราฟและจะคืนค่าหลังจากเริ่มต้นใหม่ของเทอร์มินัลลูกค้า ฟังก์ชันอื่นๆ Stop Loss และ Take Profit ยังสามารถกำหนดในสเปรดได้ หากคุณพิมพ์ "s" หลังค่าที่กำหนด หมายความว่า Stop Loss/Take Profit ถูกกำหนดในสเปรด หากคุณพิมพ์ "s" คุณจะเห็นสเปรด พฤติกรรมเดียวกันนี้จะเกิดขึ้นเมื่อพิมพ์ "m" ในกรณีนี้ SL/TP จะถูกกำหนดในระดับหยุดขั้นต่ำ หากคุณพิมพ์ "t" โปรแกรมจะแสดงเวลาที่ผ่านมาจากจุดเริ่มต้นของแท่ง H4 ป้อนคำสั่งอื่นๆ "t2", "t3", "t4", "t6", "t8", "t12" จะตรงกับกรอบเวลา H2, H3, H4, H6, H8, H12 หากคุณพิมพ์ "d" คุณจะเห็นวันที่ปัจจุบันและวันในสัปดาห์ การติดตั้ง แตกไฟล์ในโฟลเดอร์ของเทอร์มินัลลูกค้า ไฟล์ CIntegerTradePanel.mqh จะปรากฏในโฟลเดอร์ MQL5/Include และ eInTradePanel.mq5 จะปรากฏในโฟลเดอร์ MQL5/Experts หลังจากการคอมไพล์ eInTradePanel.mq5 คุณสามารถเริ่มใช้ Expert Advisor ได้ คำแนะนำ เปิดใช้งานการใช้ DLL การดำเนินการอื่นๆ กับตำแหน่ง/คำสั่ง (ปรับเปลี่ยน, ลบ) สามารถทำได้โดยใช้เทอร์มินัลลูกค้า ตำแหน่งสามารถปิดได้โดยการทำการซื้อขายตรงกัน (ขนาดของตำแหน่งที่เปิดจะถูกตั้งหลังจากกดปุ่ม "lot")

2010.12.18
Exp5-VirtualTradePad สำหรับ MT5: เครื่องมือควบคุมการเทรดที่คุณไม่ควรพลาด!
MetaTrader5
Exp5-VirtualTradePad สำหรับ MT5: เครื่องมือควบคุมการเทรดที่คุณไม่ควรพลาด!

Exp5-VirtualTradePad สำหรับ MT5 EA ตัวนี้ถูกออกแบบมาเพื่อควบคุมการเทรดที่ดีที่สุดใน MQL5 Contest &nbsp;แท็บ Pos - การจัดการตำแหน่ง แท็บ Ord - การจัดการคำสั่ง &nbsp;แท็บ INFO - ข้อมูลสัญลักษณ์แท็บ Ind - ข้อมูลสัญญาณ &nbsp;แท็บ Func - ฟังก์ชัน คุณสมบัติของ Control Panel มีดังนี้:ซื้อ, ขาย, ซื้อหยุด, ซื้อจำกัด, ขายหยุด, ขายจำกัด, ปิด, ลบ, แก้ไข, Trailing Stop การติดตั้ง: เริ่มต้นให้คัดลอกไฟล์ในรูปแบบ zip ไปยังโฟลเดอร์ของ client terminal และแตกไฟล์ทั้งหมดออก การเปิดใช้งาน: ค้นหา Exp5-VirtualTradePad ในหน้าต่าง "Navigator": การตั้งค่า client terminal: พารามิเตอร์นำเข้า: รายชื่อสัญลักษณ์การเทรด (สูงสุด 6 สัญลักษณ์) สามารถระบุในพารามิเตอร์นำเข้าสำหรับ EA ได้ แผงควบคุม: &nbsp; แท็บควบคุม: ตำแหน่ง แท็บ แท็บตำแหน่งอนุญาตให้จัดการตำแหน่ง Lots - ตั้งค่าปริมาณการเทรด (ในล็อต) . ปริมาณการเทรดสามารถเพิ่ม/ลดได้โดยใช้ปุ่ม +- โดยจะไม่อนุญาตให้ตั้งค่าต่ำกว่าขนาดล็อตขั้นต่ำที่อนุญาต BUY- สั่งซื้อ (ตามราคาขาย) SELL- สั่งขาย (ตามราคาซื้อ) REVERSE - เปลี่ยนทิศทางตำแหน่ง, ไม่ตั้งค่า Stop levels CLOSE&nbsp;- ปิดตำแหน่งทั้งหมด TakeProfit / StopLoss&nbsp;- ตั้งค่า Take Profit และ Stop Loss สำหรับตำแหน่ง ค่าของ Take Profit/Stop Loss สามารถเพิ่มได้โดยใช้ปุ่ม โดยจะไม่อนุญาตให้ระบุค่าต่ำกว่าระดับ Stop ที่อนุญาตที่เซิร์ฟเวอร์เทรด หากกด + ระดับ Take Profit จะถูกตั้งเป็น Take Profit ที่อนุญาตต่ำสุด หาก TakeProfit/StopLoss=0 ค่าจะแสดงเป็นสีแดง หาก TakeProfit/StopLoss ไม่เป็นศูนย์ สีจะเป็นสีเขียว MODIFY - แก้ไขพารามิเตอร์ตำแหน่งอย่างรวดเร็ว (ตั้งค่า SL/TP) และยังอนุญาตให้รีเซ็ตหยุดหรืเปลี่ยนแปลงได้ Trailing&nbsp;- Trailing Stop ของตำแหน่ง ปุ่ม Trailing เปิดใช้งาน Trailing Stop สำหรับสัญลักษณ์ปัจจุบัน หากต้องการปิดให้กดอีกครั้ง หากระดับ Trailing Stop ไม่เป็นศูนย์ ค่าจะแสดงเป็นสีเขียว ค่าของระดับ Trailing Stop สามารถเพิ่มได้โดยใช้ โดยค่าจะถูกจำกัดด้วยระดับหยุดที่อนุญาตที่เซิร์ฟเวอร์เทรด หากคุณตั้งค่า 0 และกด + ค่าของระดับ Trailing Stop จะเป็นระดับหยุดที่อนุญาตต่ำสุด หากระดับ Trailing Stop = 0 ค่าจะแสดงเป็นสีแดง - แผงเลือกสัญลักษณ์ - ข้อมูลเกี่ยวกับตำแหน่ง &nbsp; เช่น ทิศทางตำแหน่ง, ปริมาณ, ราคาที่เปิด/กำไร สำหรับตำแหน่งสั้น สัญลักษณ์จะแสดงเป็นสีแดง: สำหรับตำแหน่งยาว สัญลักษณ์จะแสดงเป็นสีเขียว:&nbsp; &nbsp; คำสั่ง&nbsp; แท็บ แท็บนี้อนุญาตให้ใช้งานคำสั่งรอดำเนินการ &nbsp; Order LS - ระดับหยุดต่ำสุดที่อนุญาตของคำสั่งรอดำเนินการ (ในจุด) TakeProfit - Take Profit ของคำสั่งรอดำเนินการ (ในจุด) StopLoss - Stop Loss ของคำสั่งรอดำเนินการ Lots - ปริมาณการเทรดของคำสั่งรอดำเนินการ ประเภทคำสั่ง: BUYSTOP - SELLSTOP - BUYLIMIT - SELLIMIT DELETE - ลบคำสั่งรอดำเนินการทั้งหมดของสัญลักษณ์ปัจจุบัน GRID &nbsp;- ใช้สำหรับกลยุทธ์กริด หากค่าที่กำหนดสูงกว่า 1 จะวางกริดด้วยจำนวนคำสั่งที่กำหนด (โดยมีระยะห่างเท่ากัน) ตัวเลือกนี้มีประโยชน์ใน MetaTrader 5 ซึ่งอนุญาตให้เปิดล็อตเพิ่มเติมที่แต่ละระดับและตั้งค่า Stop Loss ที่ระดับใหม่ กล่าวคือ มันทำหน้าที่เหมือน Trailing Stop พร้อมการเพิ่มตำแหน่ง ข้อมูล แท็บ แท็บนี้แสดงกราฟและข้อมูลทั้งหมดเกี่ยวกับสัญลักษณ์ Spread, ระดับ Stop ขั้นต่ำ, ขนาด Point, ปริมาณการเทรดขั้นต่ำ, ปริมาณการเทรดสูงสุดที่อนุญาต, ขั้นล็อต, Swap สำหรับตำแหน่งยาว, Swap สำหรับตำแหน่งสั้น, ยังแสดงประเภทเทียนสำหรับทุกช่วงเวลามาตรฐาน: สีเขียวหากราคาปัจจุบันสูงกว่าราคาเปิด สีแดงหากราคาปัจจุบันต่ำกว่าราคาเปิด คลิกปุ่มช่วงเวลาเพื่อแสดงกราฟทางด้านขวา (สามารถเลือกสัญลักษณ์ได้) &nbsp; แท็บ Ind แท็บนี้แสดงสถานะของตัวชี้วัด &nbsp; &nbsp; ลูกศรสีฟ้าชี้ให้ซื้อ ลูกศรสีแดงชี้ให้ขาย คลิกปุ่มช่วงเวลาเพื่อดูกราฟของสัญลักษณ์ในช่วงเวลาที่กำหนด สามารถตั้งค่าสัญลักษณ์และช่วงเวลาได้ที่แผงควบคุม &nbsp;&nbsp; แท็บ Func แท็บนี้แสดงฟังก์ชันที่มีประโยชน์ แท็บนี้อนุญาตให้ปิดหรือลบตำแหน่ง/คำสั่งทั้งหมด ขึ้นอยู่กับระดับเงินฝากที่กำหนด (เปอร์เซ็นต์/ดอลลาร์/จุด) ตัวอย่าง: คุณต้องการปิดตำแหน่งทั้งหมด แต่ไม่ต้องการขาดทุน กำหนด จาก และ ถึง ระดับ ระบุวิธีการปิดตำแหน่ง/ลบคำสั่ง แล้วกดปุ่ม ใช้ มันจะปิดตำแหน่งทั้งหมดเมื่อพารามิเตอร์ที่กำหนดอยู่นอกช่วง &gt;0 - หากสูงกว่า (0 - ไม่ได้ใช้!!!) &lt;0 - หากต่ำกว่า (ค่าพารามิเตอร์สามารถเป็นลบได้) (0 - ไม่ได้ใช้!!!) $ - คำนวณเป็น USD % - คำนวณเป็น % ของยอดเงิน P - คำนวณเป็น Points ใช้ - เปิดใช้งานตัวเลือกนี้ &nbsp; คุณสมบัติอื่น ๆ: หากเปิดตำแหน่งสำเร็จ จะมีเสียงดังขึ้น คล้ายกับเสียงของ terminal client เมื่อเปิดตำแหน่ง ในกรณีเกิดข้อผิดพลาด จะมีเสียงความผิดพลาด ไม่สามารถตั้งค่าระดับหยุดเป็น 0 หรือต่ำกว่าระดับหยุดขั้นต่ำที่อนุญาตที่เซิร์ฟเวอร์เทรด มีปุ่มให้ย่อลงแผงควบคุม &nbsp; อ้างอิง: ฉันใช้เอกสารอ้างอิงดังต่อไปนี้เมื่อเตรียม VirtualTradePad Control Panel: ChartinChart Expert Advisor (Expert Advisor มาตรฐานของ MetaTrader5 client terminal)&nbsp; 20 Trade Signals in MQL5 (กลยุทธ์การเทรดของแท็บ IND) Migrating from MQL4 to MQL5 ชุดฟังก์ชันจาก "Expert Advisor template" ที่พัฒนาขึ้นเพื่อการใช้งานภายใน

2010.12.17
TradeXpert: ระบบเทรดขั้นสูงสำหรับ MetaTrader 5
MetaTrader5
TradeXpert: ระบบเทรดขั้นสูงสำหรับ MetaTrader 5

โปรเจกต์นี้ถูกสร้างขึ้นเพื่อเข้าร่วม การแข่งขัน MQL5 Best Graphic Panel โดยมีจุดประสงค์ในการขยายฟังก์ชันการทำงานของ MetaTrader 5 ในรูปแบบที่ประหยัดพื้นที่แผนภูมิ Expert Advisor นี้มีแผงควบคุม 4 แผงที่ทำงานอิสระ โดยแต่ละแผงสามารถซ่อนไว้/เรียกคืน หรือแม้แต่ลบออกจากแผนภูมิ (Log Panel) ความละเอียดขั้นต่ำสำหรับการแสดงผล: 600x500 หมายเหตุ: Expert Advisor ใช้ฟอนต์ดังต่อไปนี้:Lucida Console Wingdings Wingdings 3 Arial Black แน่นอนว่าโปรแกรมจะทำงานได้แม้ไม่มีฟอนต์เหล่านี้ติดตั้ง แต่การออกแบบจะไม่เหมือนเดิมและบางข้อความอาจแสดงผลไม่ถูกต้อง หากคุณยังไม่มีฟอนต์นี้ในระบบปฏิบัติการของคุณ กรุณาติดตั้งมัน รายชื่อฟอนต์ที่มีจะปรากฏในคุณสมบัติของวัตถุกราฟิกใน MetaTrader 5 แผงควบคุม Expert Advisor นี้มีแผงควบคุม 4 แผง โดย 3 แผงจะตั้งอยู่ในหน้าต่างหลัก: แผงการตั้งค่า แผงควบคุม แผงข้อมูล แผงสุดท้าย (Log Panel) จะอยู่ในหน้าต่างย่อยแยกต่างหาก และสามารถซ่อนไว้ได้ 1. แผง Log เพื่อแสดงแผง Log จำเป็นต้องเรียกใช้ตัวชี้วัด TradeXpertLog ซึ่งจะแสดงความคิดเห็นจาก Expert Advisor ที่นั่น เพื่อให้การใช้งานพื้นที่ทำงานมีประสิทธิภาพ สามารถเพิ่มไปยังหน้าต่างย่อยของตัวชี้วัดอื่น ๆ ได้ ทุกบันทึกจาก Expert Advisor จะถูกพิมพ์ในบันทึกของ client terminal (Print) แนะนำให้ใช้แผง Log ขณะทำการเทรดเพื่อเห็นการประมวลผลคำสั่ง แผงนี้สามารถใช้สำหรับการดีบักและความคิดเห็นจากแผงอื่น ๆ โดยข้อดีของความคิดเห็นคือ คุณจะมีหน้าต่างบันทึกแยกเพื่อมุ่งเน้นที่ข้อมูลที่จำเป็น เวลาจะแสดงได้อย่างถูกต้อง และจะทำงานในวันหยุด การตั้งค่าที่มีอยู่ ได้แก่: ขนาดฟอนต์; สี; ความยาวบรรทัด; จำนวนบรรทัดสูงสุด. 2. แผง Trade (แผงควบคุม) จุดประสงค์ของแผงนี้คือการเทรด รายการการดำเนินการที่มี ได้แก่: ซื้อปริมาณที่กำหนด; ขายปริมาณที่กำหนด; ซื้อปริมาณที่กำหนดพร้อมการตั้งค่า Take Profit หากปริมาณเป็น 0 จะตั้งค่าเฉพาะ Take Profit; ขายปริมาณที่กำหนดพร้อมการตั้งค่า Take Profit หากปริมาณเป็น 0 จะตั้งค่าเฉพาะ Take Profit; ซื้อปริมาณที่กำหนดพร้อมการตั้งค่า Stop Loss หากปริมาณเป็น 0 จะตั้งค่าเฉพาะ Stop Loss; ขายปริมาณที่กำหนดพร้อมการตั้งค่า Stop Loss หากปริมาณเป็น 0 จะตั้งค่าเฉพาะ Stop Loss; การวางคำสั่ง BuyStop, BuyLimit, SellStop, SellLimit; ปิดตำแหน่งที่เปิดอยู่ในสัญลักษณ์ปัจจุบัน; กลับตำแหน่งที่เปิดอยู่ในสัญลักษณ์ปัจจุบัน โดยระดับ Stop Loss และ Take Profit เก่าจะถูกตั้งค่าเป็น 0. มีฟีเจอร์บางอย่างในการตั้งค่าระดับ Stop ตัวอย่างเช่น หากเรามีตำแหน่งซื้อ (0.5 lots) และขาย 0.1 lots พร้อมการตั้งค่า Take Profit หรือ Stop Loss Expert Advisor จะไม่ตั้งค่า แต่หากปริมาณการเทรดที่ระบุเกิน 0.5 (เช่น 0.7) จะตั้งค่าให้ใหม่สำหรับระดับ Take Profit และ Stop Loss หากปริมาณเป็น 0 Expert Advisor จะตั้งค่า Take Profit และ Stop Loss (ถ้าถูกต้อง) สามารถระบุปริมาณการเทรดได้ที่นี่ โดยยังไม่ได้มีการคำนวณปริมาณการเทรดอัตโนมัติ แต่มีหลายวิธีในการคำนวณประการที่สองฟังก์ชันนี้ไม่ใช้ในการเทรดด้วยมือหากคุณไม่ชอบสามารถเพิ่มการใช้งานของคุณเองได้Expert Advisor จะไม่ตรวจสอบมาร์จิ้น หลังจากตั้งค่าปริมาณการเทรด ค่าของมันจะถูกปรับตามการตั้งค่าของสัญลักษณ์ปัจจุบัน ดังนั้นโปรดตรวจสอบค่าปริมาณการเทรดก่อนการเทรด การตั้งค่าที่มีอยู่ ได้แก่: ประเภทการเติมคำสั่ง สีของแผง ความล่าช้าของการเคลื่อนไหวของแผง รายละเอียดเพิ่มเติมเกี่ยวกับ ประเภทการเติมคำสั่ง มีสามประเภทการเติมคำสั่งที่รองรับ (ดู MQL5 Reference): ORDER_FILLING_FOK -- "Fill or Kill" ORDER_FILLING_IOC -- "Available" ORDER_FILLING_RETURN -- "Available+" 3. แผงข้อมูล จะแสดงข้อมูลสัญลักษณ์และสถานะของตำแหน่งที่เปิดอยู่ การตั้งค่าที่มี ได้แก่: สีของแผง ความล่าช้าของการเคลื่อนไหว จำนวนแท่งเพื่อคำนวณค่าต่ำสุดและสูงสุดของสเปรด เวลา สามารถแสดงเวลาในท้องถิ่น เวลาเซิร์ฟเวอร์ CET, EST, MSK, GMT. 4. แผงการตั้งค่า แผงนี้มีการตั้งค่าของ Expert Advisor คุณสามารถเพิ่มการตั้งค่าของคุณเองได้อย่างง่ายดายโดยการเพิ่มโค้ดเพียงไม่กี่บรรทัด การตั้งค่าที่มีตัวเลือกเพิ่ม/ลดสามารถเปลี่ยนได้โดยใช้ปุ่ม "ขึ้น" และ "ลง" บนแป้นพิมพ์การตั้งค่าที่มี ได้แก่: สีของแผง การสาธิต (แนะนำให้ใช้ความละเอียด 480p): เอกสารแนบ: ตามกฎการแข่งขัน (IV.2) จำนวนไฟล์ .mqh จะถูกจำกัดอยู่ที่ 10 ดังนั้นฉันได้เตรียมสองเวอร์ชันซึ่งอยู่ในไฟล์บีบอัด: original.zip เวอร์ชันต้นฉบับที่มีโครงสร้างไฟล์เริ่มต้น; pack.zip รวมไฟล์ .mqh ทั้งหมดอยู่ในไฟล์ใหญ่ แนะนำให้ใช้เวอร์ชันต้นฉบับ ขอให้การเทรดของคุณประสบความสำเร็จ!

2010.12.17
การแข่งขันกราฟิกพาแนล - ระบบเทรดสำหรับ MetaTrader 5
MetaTrader5
การแข่งขันกราฟิกพาแนล - ระบบเทรดสำหรับ MetaTrader 5

การส่งผลงานเข้าร่วมการแข่งขันกราฟิกพาแนล รหัส: โค้ดต้นฉบับและการนำเสนออยู่ในไฟล์ ZIP ที่แนบมา เคล็ดลับ: 1) การตั้งค่า Take Profit (TP) และ Stop Loss (SL) สามารถทำได้ง่ายๆ โดยการลากเส้นสีน้ำเงิน (suggestedEntryLine) เส้นนี้จะช่วยตั้ง TP และ SL โดยอัตโนมัติตามประเภทการซื้อขาย (BUY หรือ SELL) และกรอกข้อมูลลงในช่อง S/L และ T/P คุณสามารถแก้ไขได้โดยการลากเส้นสีน้ำเงินอีกครั้ง หรือกรอกค่าใหม่ในช่อง S/L หรือ T/P (คลิกสองครั้งเพื่อแก้ไข และกด Enter เพื่อยืนยันการเปลี่ยนแปลง) 2) โมดูลตัวชี้วัด MTF ใช้ค่าตัวชี้วัดจากกรอบเวลา M1 ถึง MN1 คุณอาจสังเกตเห็นว่าไม่ทุกรูปสี่เหลี่ยมจะแสดงค่าตัวชี้วัดเมื่อคุณรันโมดูลนี้ใน MT5 ใหม่ นี่เป็นเรื่องปกติเนื่องจากข้อมูลประวัติจะถูกดาวน์โหลดโดยเทอร์มินัล เมื่อข้อมูลประวัติทั้งหมดถูกดาวน์โหลด โมดูลจะแสดงค่าทั้งหมดอย่างถูกต้องและค่าตัวชี้วัดจะถูกอัปเดตตามการเคลื่อนไหวของตลาด 3) รายการจุดที่น่าสนใจจะถูกสร้างจาก: เส้นแนวนอนใดๆ; ระดับ Fibonacci retracement ใดๆ; จุด PIVOT ใดๆ (ใส่โดยโมดูล PIVOT) เมื่อคุณเพิ่มเส้นเพิ่มเติมเมื่อเปิดแผนการเทรด เพียงกดปุ่ม 'Refresh' เพื่อให้รายการอัปเดตด้วยวัตถุใหม่ 4) เครื่องคิดเลข Fibonacci จะจดจำเส้นในกรอบเวลาที่แตกต่างกัน สามารถสลับระหว่างกรอบเวลาและเลือกจุด PIVOT ที่ต้องการแสดงได้ เครื่องคิดเลขนี้อิงตามเครื่องคิดเลขออนไลน์ที่มีให้บริการที่ http://www.mypivots.com/calculators/pivot-point-calculator.aspx 5) กรุณาดูวิดีโอในส่วน Demos เพื่อดูฟีเจอร์หลักของพาแนล Demos: https://www.youtube.com/watch?v=1qz8Gb--Y68 https://www.youtube.com/watch?v=ztVCPwnrUlQ https://www.youtube.com/watch?v=BDzjKK4ixzk https://www.youtube.com/watch?v=Iv84l6eq6Rk https://www.youtube.com/watch?v=rQeRAMMqkQ0 ขอแสดงความนับถือ, Investeo

2010.12.17
ChartReinit - ระบบการรีเซ็ตกราฟสุดเจ๋งสำหรับ MetaTrader 5
MetaTrader5
ChartReinit - ระบบการรีเซ็ตกราฟสุดเจ๋งสำหรับ MetaTrader 5

สวัสดีครับเพื่อนๆ เทรดเดอร์ทุกคน! วันนี้เรามีระบบ EA (Expert Advisor) ที่ชื่อว่า ChartReinit มานำเสนอ ซึ่งจะช่วยให้การรีเซ็ตกราฟของเราเป็นเรื่องง่ายขึ้นมากตัว EA นี้จะเพิ่มปุ่มไว้ที่มุมขวาล่างของกราฟแต่ละหน้า เมื่อเรากดปุ่มนี้ ระบบจะทำการรีเซ็ตกราฟทั้งหมดที่เกี่ยวข้องกับสัญลักษณ์กราฟนั้นๆ ให้เราอัตโนมัติการรีเซ็ตกราฟนี้ทำได้โดยการเปลี่ยนช่วงเวลา (timeframe) ของกราฟชั่วคราว ซึ่งเป็นวิธีที่ง่ายและไม่ส่งผลข้างเคียงใดๆ เพราะมันไม่ต้องวาด (redraw) หรือคำนวณกราฟใหม่พารามิเตอร์การตั้งค่า://--- พารามิเตอร์การตั้งค่า input string&nbsp;&nbsp; SampleText="คำนวณใหม่";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ข้อความบนปุ่ม input color&nbsp;&nbsp;&nbsp; SampleTextColor=NavajoWhite;&nbsp;&nbsp; // สีข้อความ input color&nbsp;&nbsp;&nbsp; SampleBackColor=SlateGray;&nbsp;&nbsp;&nbsp;&nbsp; // สีพื้นหลังปุ่ม

2010.11.29
แรก ก่อนหน้า 57 58 59 60 61 62 63 64 ถัดไป สุดท้าย