EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: lancelot 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);
}
}
//+------------------------------------------------------------------+
-
double lastbar= iClose(NULL,PERIOD_H1,0);
double curbar= iOpen(NULL,PERIOD_H1,1);
ไม่ต้องระบุว่า EURUSD ครับ อีเออยู่กราฟไหนมันก็เทรดกราฟนั้นเอง
ตัวเลขชิพ 0 1 มันแปลกๆนะครับ
if(curbar>lastbar) ราคาเปิดแท่งที่แล้ว สูงกว่า ราคาปิดแท่งปัจจุบัน ให้ Buy
-
shift 0 กับ 1 ผมนึกว่า เป็นแท่ง 0 คือแท่งก่อนปัจจุบัน ส่วนแท่งหนึ่งคือแท่งก่อนแท่ง 0 ครับ ผมเลยใส่ 0,1 เพื่อจะได้บอกว่าเป็นราคาเปิดปิดของคนละแท่งเทียน ไม่รู้ใช่รึเปล่าครับ แต่ขอบคุณมากครับ เดี๋ยวจะไปลงอดูครับ
-
ไปลองมาละ เปิดออเดอร์เดียว เอาอเดอร์ Total ออกเปิดออเดอร์บานเลย = =" ได้ฟามรู้ใหม่
-
แท่งปัจจุบันอันขวาสุดที่มันยังขยับอยู่คือ 0 ครับ นับถัดไปทางซ้ายคือ 1 2 3 ;D
-
เรียนถามท่าน D_Diamond อีกนิดครับ ผมจะให้มันปิดตอนปิดแท่งเทียน ครับ อ่านไปอ่านมา function นี้มันไม่มีรึเปล่าคับ เพราะว่า หรือว่ามันทำไม่ได้ครับ = =" งงเบย :o
-
ปกติแล้วจะทำไม่ได้ครับ เพราะถ้ามันปิดแท่งไป มันก็มีแท่งใหม่เปิดมา
ดังนั้นเราจะเปลี่ยนใหม่ เทรดเมื่อแท่งใหม่เปิด ซึ่งมีด้วยกันหลายวิธี
วิธีแรก ง่ายสุด ใช้การเลื่อน 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(.....);
}
}
-
โหว ต้องใช้ความรู้ประยุกต์มาก ๆ EA นี่พัฒนาได้จริง ๆ
-
ใช่ครับมันประยุกต์ได้มาก ผมก็อาศัยแกะโค้ดอีเออื่นเอาทั้งนั้น อิอิ
เดี๋ยวนี้ mt4 มันก็พัฒนาขึ้นมากนะครับ เมื่อก่อนมันทำอะไรไม่ค่อยได้มากเท่าไร พวกเซียนๆเขาก็เขียนเอา dll ภายนอกมาใช้กันเยอะ
เดี๋ยวนี้มันเพิ่มคำสั่งใหม่ๆให้ ทำได้เยอะแยะ ทำเป็นปุ่มกด ใส่ข้อความ ทำกล่องลอกอินก่อนใช้อีเอก็ได้แล้ว
แต่สมัยนี้มันแกะโค้ดไม่ออก เลยลอกกันไม่ได้แล้ว มันน่าเซ็งจริงๆ ความรู้ใหม่ๆหายาก >:(
-
ผมทำสำเร็จแล้วครับ แต่มันขาดทุน 5555 = =" ตูละเซ็ง อีเอในฝันนึกว่าจะกำไร เคยคิดว่า ความคิดเราน่าจะได้กำไร ทำให้เข้าใจความรู้สึกคนเขียน EA ฟรี ว่า กูก็อยากช่วยมึงเขียนนะ แต่มึงช่วยเอาระบบที่มันทำกำไรได้มาให้ดูซักอันหน่อย เดี๋ยวกูเขียนให้ฟรี แต่ต้องกำไรจริง ๆ นะ ไม่กำไรไม่เอา ถ้าตรรกะไม่ผ่านไม่ต้องเสนอ (คือ เข้าใจเลยว่า เขียนจนเหนื่อย ก็หาระบบกำไรลำบากมาก)
รบกวนถามคุณ D_Diamon ทำไมระบบที่ Back Test กำไร (พวก Scalping โดยมาก) พอมาทำเทรดจริง ทำไมมันขาดทุนครับ เป็นเพราะ Spread หรือว่าการกระชากของราคาไม่เหมือนกันทำให้ Re quote หรอคับ?
ขอบคุณที่เสวนาครับ น้อยประสบการจริง ๆ