Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: เขียน EA เบสแท่งเทียน  (Read 19239 times)

lancelot

  • Newbie
  • *
  • Posts: 48
เขียน EA เบสแท่งเทียน
« on: มีนาคม 15, 2015, 03:24:06 pm »
ผมกำลังหัดเขียน EA ครับ  ;D กำลังว่าจะพัฒนาให้ไปสู่ candle stick pattern แบบต่าง ๆ เลยตั้งเงื่อนไขแรกง่าย ๆ ก่อน เช่น
ถ้า แท่งก่อนหน้า ราคาเปิดต่ำกว่าปิด ให้ Buy แท่งถัดไป แล้วถ้าแท่งก่อนหน้า ราคาปิดต่ำกว่าเปิดให้ Sell แท่งต่อไป ผมเลยเขียน code ตามหนังสือที่เขียนแอ๊ดมิน แต่มันไม่ส่งครับ ผมอยากทราบว่า ผมเขียนตรงไหนผิดครับ = ="

===============================

//+------------------------------------------------------------------+
//|                                               Candle Trading.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input double   Lot=0.01;
input string   Instru = "EURUSD";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()

  {
//---
int lastbar= iClose(Instru,PERIOD_H1,0);
int curbar= iOpen(Instru,PERIOD_H1,1);
if(OrdersTotal()==0)
   if(curbar>lastbar)
   {

      OrderSend(Symbol(),OP_BUY,Lot,Ask,4,0,0,"Candle Trading",0,0,clrAliceBlue);
   }
 
 
  }
 
   
   
 
//+------------------------------------------------------------------+

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: เขียน EA เบสแท่งเทียน
« Reply #1 on: มีนาคม 15, 2015, 05:32:43 pm »
double lastbar= iClose(NULL,PERIOD_H1,0);
double curbar= iOpen(NULL,PERIOD_H1,1);

ไม่ต้องระบุว่า EURUSD ครับ อีเออยู่กราฟไหนมันก็เทรดกราฟนั้นเอง

ตัวเลขชิพ 0 1 มันแปลกๆนะครับ
if(curbar>lastbar)  ราคาเปิดแท่งที่แล้ว สูงกว่า ราคาปิดแท่งปัจจุบัน ให้ Buy

lancelot

  • Newbie
  • *
  • Posts: 48
Re: เขียน EA เบสแท่งเทียน
« Reply #2 on: มีนาคม 15, 2015, 08:24:13 pm »
shift 0 กับ 1 ผมนึกว่า เป็นแท่ง 0 คือแท่งก่อนปัจจุบัน ส่วนแท่งหนึ่งคือแท่งก่อนแท่ง 0 ครับ ผมเลยใส่ 0,1 เพื่อจะได้บอกว่าเป็นราคาเปิดปิดของคนละแท่งเทียน ไม่รู้ใช่รึเปล่าครับ แต่ขอบคุณมากครับ เดี๋ยวจะไปลงอดูครับ

lancelot

  • Newbie
  • *
  • Posts: 48
Re: เขียน EA เบสแท่งเทียน
« Reply #3 on: มีนาคม 15, 2015, 08:48:34 pm »
ไปลองมาละ เปิดออเดอร์เดียว เอาอเดอร์ Total ออกเปิดออเดอร์บานเลย  = =" ได้ฟามรู้ใหม่

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: เขียน EA เบสแท่งเทียน
« Reply #4 on: มีนาคม 15, 2015, 08:52:59 pm »
แท่งปัจจุบันอันขวาสุดที่มันยังขยับอยู่คือ 0 ครับ นับถัดไปทางซ้ายคือ 1 2 3  ;D

lancelot

  • Newbie
  • *
  • Posts: 48
Re: เขียน EA เบสแท่งเทียน
« Reply #5 on: มีนาคม 15, 2015, 09:16:25 pm »
เรียนถามท่าน D_Diamond อีกนิดครับ ผมจะให้มันปิดตอนปิดแท่งเทียน ครับ อ่านไปอ่านมา function นี้มันไม่มีรึเปล่าคับ เพราะว่า หรือว่ามันทำไม่ได้ครับ = =" งงเบย  :o

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: เขียน EA เบสแท่งเทียน
« Reply #6 on: มีนาคม 15, 2015, 09:42:14 pm »
ปกติแล้วจะทำไม่ได้ครับ เพราะถ้ามันปิดแท่งไป มันก็มีแท่งใหม่เปิดมา

ดังนั้นเราจะเปลี่ยนใหม่ เทรดเมื่อแท่งใหม่เปิด ซึ่งมีด้วยกันหลายวิธี

วิธีแรก ง่ายสุด ใช้การเลื่อน shift

ปกติจะท่านจะเขียนเป็นแบบนี้ใช่ไหมครับ
 iClose(NULL,PERIOD_H1,0);

ก็เปลี่ยนเป็นแบบนี้
 iClose(NULL,PERIOD_H1,1);  ใส่เป็นชิพ 1 คือราคาปิดของแท่งที่แล้ว
iOpen(NULL,PERIOD_H1,0);  เปลี่ยน open 0 คือราคาเปิดของแท่งนี้ 

หรือถ้าใช่อินดิเคเตอร์ เช่น rsi  iRSI(Symbol(),Period(),14,PRICE_CLOSE,0)
ก็เปลี่ยนเป็น iRSI(Symbol(),Period(),14,PRICE_CLOSE,1)

วิธีที่ 2 ยากกว่า จะใช้การนับ Bars ( จำนวนแท่งเทียน )
สมมุติว่าคุณเปิด mt มา มันมี 20 bar พอซักพักมันจบแท่ง มันก็จะมีแท่งใหม่เปิดมา เป็น 21 bar

วิธีทำก็สร้างตัวแปรมาตัวนึงเอาไว้เก็บจำนวน bar สมมุติว่า
 int bar = Bars ; เขียนถูกรึเปล่าผมไม่แน่ใจไม่ได้เปิด mt4 ดู

พอเปิดกราฟมา bar ก็จะเท่ากับ 20
แล้วก็เอาไปเทียบกับ Bars จริง  if ( Bars > bar ) ถ้ามีแท่งใหม่เปิดมา Bars ก็จะกลายเป็น 21 แล้ว เงื่อนไขจะเป็นจริง ก็ใส่คำสั่งเทรดลงไป
แล้วทีนี้จะทำไงต่อ ก็ต้องปรับค่าในตัวแปรให้เท่ากับ Bars จริง เพื่อเอาไว้ตรวจสอบแท่งถัดไปที่กำลังจะเกิดต่อไปเรื่อยๆ

สรุปเขียนได้แบบนี้ครับ ถ้าผิดแก้เอาเองนะ

int bar;

void start
{
  bar = Bars;

  if ( Bars > bar )
 {
     bar = Bars;
     Ordersend(.....);
 }
}



lancelot

  • Newbie
  • *
  • Posts: 48
Re: เขียน EA เบสแท่งเทียน
« Reply #7 on: มีนาคม 15, 2015, 10:00:18 pm »
โหว ต้องใช้ความรู้ประยุกต์มาก ๆ EA นี่พัฒนาได้จริง ๆ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: เขียน EA เบสแท่งเทียน
« Reply #8 on: มีนาคม 15, 2015, 11:29:15 pm »
ใช่ครับมันประยุกต์ได้มาก ผมก็อาศัยแกะโค้ดอีเออื่นเอาทั้งนั้น อิอิ

เดี๋ยวนี้ mt4 มันก็พัฒนาขึ้นมากนะครับ  เมื่อก่อนมันทำอะไรไม่ค่อยได้มากเท่าไร  พวกเซียนๆเขาก็เขียนเอา dll ภายนอกมาใช้กันเยอะ

เดี๋ยวนี้มันเพิ่มคำสั่งใหม่ๆให้ ทำได้เยอะแยะ ทำเป็นปุ่มกด ใส่ข้อความ ทำกล่องลอกอินก่อนใช้อีเอก็ได้แล้ว

แต่สมัยนี้มันแกะโค้ดไม่ออก เลยลอกกันไม่ได้แล้ว มันน่าเซ็งจริงๆ ความรู้ใหม่ๆหายาก  >:(

lancelot

  • Newbie
  • *
  • Posts: 48
Re: เขียน EA เบสแท่งเทียน
« Reply #9 on: พฤษภาคม 19, 2015, 06:23:12 pm »
ผมทำสำเร็จแล้วครับ แต่มันขาดทุน 5555 = =" ตูละเซ็ง อีเอในฝันนึกว่าจะกำไร เคยคิดว่า ความคิดเราน่าจะได้กำไร ทำให้เข้าใจความรู้สึกคนเขียน EA ฟรี ว่า กูก็อยากช่วยมึงเขียนนะ แต่มึงช่วยเอาระบบที่มันทำกำไรได้มาให้ดูซักอันหน่อย เดี๋ยวกูเขียนให้ฟรี แต่ต้องกำไรจริง ๆ นะ ไม่กำไรไม่เอา ถ้าตรรกะไม่ผ่านไม่ต้องเสนอ (คือ เข้าใจเลยว่า เขียนจนเหนื่อย ก็หาระบบกำไรลำบากมาก)

รบกวนถามคุณ D_Diamon ทำไมระบบที่ Back Test กำไร (พวก Scalping โดยมาก) พอมาทำเทรดจริง ทำไมมันขาดทุนครับ เป็นเพราะ Spread หรือว่าการกระชากของราคาไม่เหมือนกันทำให้ Re quote หรอคับ? 

ขอบคุณที่เสวนาครับ น้อยประสบการจริง ๆ