Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ช่วยบอกคำสั่งนี้หน่อยครับ  (Read 19299 times)

Romio

  • Newbie
  • *
  • Posts: 20
ช่วยบอกคำสั่งนี้หน่อยครับ
« on: สิงหาคม 16, 2010, 11:01:50 pm »

คือผมเพิ่งหัดเขียนอีเอ เลยยังไม่รู้คำสั่งมากพอ

เข้าเรื่องเลยนะครับ สมมติว่าผมต้องการใช้คำสั่งในการเรียกค่า close จากกราฟเมื่อตอน 5 นาทีที่แล้วมาใส่ในตัวแปร คำสั่งคืออะไรครับ

แล้วถ้าเป็นค่า close จากกราฟ ณ ปัจจุบันหละครับ คำสั่งคืออะไรครับ



ขอบคุณมากๆเลยครับ อิอิ...



admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #1 on: สิงหาคม 17, 2010, 01:21:08 am »
iClose(Symbol( ) ,PERIOD_M5,1);  นี้คือการเรียกราคา close จากกราฟ 5 นาทีแท่งก่อนหน้าครับ

iClose(Symbol( ) ,PERIOD_M5,0); อันนี้เป็นการเรียกราคา close แท่งปัจจุบันแต่ระวังหน่อยนะครับกราฟแท่งปัจจุบันยังไม่จบค่าที่ได้จะเท่ากับราคาตอนนั่นนะครับ

Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #2 on: สิงหาคม 17, 2010, 01:11:14 pm »

ขอบคุณมากเลยครับ คุณ admin



อิอิ...


Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #3 on: สิงหาคม 18, 2010, 11:23:09 am »

แล้วถ้าผมจะเรียก price ตอนที่เราเปิด order ละครับจะต้องใช้คำสั่งอะไรครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #4 on: สิงหาคม 18, 2010, 03:27:55 pm »
ใช้ฟังก์ชั่น OrderOpenPrice( )  แต่ก่อนใช้ฟังก์ชั่นนี้ต้องใช้ ฟังก์ชั่น OrderSelect ก่อนนะครับเช่น ตามตัวอย่างใน reference

  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("open price for the order 10 ",OrderOpenPrice());
  else
    Print("OrderSelect returned the error of ",GetLastError());


Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #5 on: สิงหาคม 19, 2010, 11:56:53 am »


แล้วถ้าจะเก็บไว้ในตัวแปรอะครับ

ต้องทำยังไงอะครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #6 on: สิงหาคม 19, 2010, 12:31:18 pm »
ก็แค่สรังตัวแปรขึ้นมาตัวหนึ่งไงครับเอาไวรับค่า

เช่น
double open ;
OrderSelect(10, SELECT_BY_POS)
if(Order_Type==OP_SELL)
{
    open = OrderOpenPrice();
}

Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #7 on: สิงหาคม 19, 2010, 01:12:15 pm »

อ่อ...ขอบคุณครับ อิอิ...

ถ้าจะไม่มี if ได้มั้ยครับ

double open ;
OrderSelect(10, SELECT_BY_POS);
open = OrderOpenPrice();


ถ้าใช้แบบนี้เลยจะได้มั้ยครับ
« Last Edit: สิงหาคม 19, 2010, 01:16:29 pm by Romio »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #8 on: สิงหาคม 19, 2010, 01:40:03 pm »

อ่อ...ขอบคุณครับ อิอิ...

ถ้าจะไม่มี if ได้มั้ยครับ

double open ;
OrderSelect(10, SELECT_BY_POS);
open = OrderOpenPrice();


ถ้าใช้แบบนี้เลยจะได้มั้ยครับ

จริงๆๆมันก็ใช้ได้หละครับแต่ที่แสดง if ให้ดูก้เพื่อทีหลังคุณจะมีเงื่อนไขอะไรมากขึ้นในการกรองข้อมูลแค่นั่นเอง

Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #9 on: สิงหาคม 19, 2010, 01:48:31 pm »


คือผมใส่เข้าไปแล้วมันเปิดแล้วปิดเลยครับ สำหรับ sell ครับ ส่วน buy มันไม่ยอมปิดให้เลยครับ  ช่วยดูโค้ดให้หน่อยนะครับ อิอิ...จนปัญญาจริงๆ

Code: [Select]
int start()
{
 
double A, B, C, t, m, p, d, x, y, Lot;
int total;
int ticket;
//int ticket;
int SL = 100;
int TP = 15;
A = iClose(Symbol( ) ,PERIOD_M5,1);  //5 minutes ago
B = iClose(Symbol( ) ,PERIOD_M5,0);  //Present
t = Point*(-8); //SELL
m = Point*8; //BUY
d = B-A;
p = d/5;


Lot = 0.1;
total=OrdersTotal();


   if(total<1)
   {
      if(p<0)
      {
         if(d<=t)
         {
         //SELL
         ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+Point*SL,Bid-Point*TP,"RangerTOX",0,0,Red);
         OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
         //Reduce Loss
         OrderSelect(ticket,SELECT_BY_POS);
         C = OrderOpenPrice();
         x = C+(Point*50);
            if(B>C)
            {
              if(B>=x)
               {
               OrderClose(ticket,Lot,Bid,3,Red); //Close order
               ticket = OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Point*70,Ask+Point*30,"RangerTOX",0,0,Green); //Open order "BUY"
               OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
               }
            }
         }
      }
      if(p>0)
      {
         if(d>=m)
         {
         //BUY
         ticket = OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Point*SL,Ask+Point*TP,"RangerTOX",0,0,Green);
         OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
         //Reduce Loss
         OrderSelect(ticket,SELECT_BY_POS);
         C = OrderOpenPrice();
         y = (C-(Point*50));
            if(B<C)
            {
               if(B<=y)
               {
               OrderClose(ticket,Lot,Ask,3,Green); //Close order
               ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask-Point*70,Bid+Point*50,"RangerTOX",0,0,Red); //Open order "SELL"
               OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
               }
            }
         }
      } 
   }
   
   
}

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #10 on: สิงหาคม 19, 2010, 03:24:01 pm »
ดูแล้วยังงงๆ คือ ถ้าติดลบ 50 จุดให้ปิดใช่ป่าวครับ

การเขียนโปรแกรม ต้ิองเขียน flow chart ขึ้นมาก่อนแล้วก็เขียนคำสั่งหรือฟังก์ชั่น เพื่อทำตาม flow chart

เช่น เงื่อนไข การเปิด เมื่ออะไร...........................เปิดแล้วก็ออกจากฟังก์ชั่นนั้น แล้วต่อไปทำอะไร

ตรวจสอบว่า กำไร  หรือ ขาดทุน       ขาดทุนแล้วทำไรต่อ    กำไรแล้วทำไรต่อ   กำไรแล้วปิด     ปิดแล้วมาเปิดใหม่

อ่านโค๊ดแล้วงงๆ อะครับ ทำไมใช้ ออร์เดอร์ซีเลค ต่อกันถึง 2 อัน

ยังไงลองเขียน Flow chart ขึ้นมาก่อนแล้ว จะเขียนได้ง่ายขึ้นเยอะ แล้วผิดพลาดก็หาทางแก้ได้อย่างรวดเร็วด้วยครับ

Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #11 on: สิงหาคม 19, 2010, 04:44:00 pm »


ครับผมเขียนตาม flow chart ครับซึ่งโครงสร้างของโปรแกรมคล้ายๆภาษา c , c++ แตกต่างกันเพียงแค่คำสั่ง

ซึ่งผมเองยังไม่รู้จักคำสั่งต่างๆมากพอครับ ต้องเรียนรู้อีกเยอะเลยครับ ต้องขอโทษด้วยครับที่ไม่ได้อธิบายการทำงาน

ของ ea


- เมื่อ ea เปิด sell แล้วเกิดติดลบเกิน 50 จุด ให้ปิด order แล้วเปิด buy ต่อ

- และอีกกรณีถ้าเมื่อ ea เปิด buy แล้วเกิดติดลบเกิน 50 จุด ให้ปิด order แล้วเปิด sell ต่อ


ส่วน  OrderSelect นั้นผมลองใส่แค่อันเดียวแล้วมันไม่มีอะไรเกิดเลยครับ ก็เลยใส่เข้าไปอีกอันดู แล้ว sell ปิด order ได้

ส่วน buy ไม่มีอะไรเกิดขึ้นเลยคับ ช่วยหา bug ด้วยนะครับ อิอิ...

linconz

  • VIP
  • Sr. Member
  • *
  • Posts: 357
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #12 on: สิงหาคม 20, 2010, 08:38:33 pm »
1 เปิดออร์เดอร์ เพราะอะไรก็ว่ากันไป
2 เมือเปิดแล้ว ให้เช็คออร์เดอร์ที่เปิดแล้ว ว่ากำไรหรือขาดทุน โดยเช็คจาก magic number หรือ ออร์เดอร์คอมเมนต์ก็ได้
       
   เช่น จากข้อ 1 เราใส่ magic & comment ไว้
   คำสั่งออร์เดอร์ซีเลค  ให้ทำเป็น loop มันจะตรวจสอบทุกออร์เดอร์ ว่าใช่ตัวที่เราต้องการหรือไม่ในกรณีที่ max_trade  มากกว่า 1

   

    for (int I = 0; I < OrdersTotal(); I++)
         {
                 OrderSelect(I, SELECT_BY_POS, MODE_TRADES);
                 if (OrderSymbol() == Symbol() && MagicNum == OrderMagicNumber()) -----------------ตรวจสอบซิมันใช่ของเราป่าว  ถ้าใช่ให้มันทำไรดีหว่า
                      {   
                           ทำตามนี้แล้วกัน
                           ตวจดูซิมันลบหรือบวกเท่าไหร่แล้ว
                           ถ้ามันบวกน๊ะ ปิดเลย หรือจะเลื่อน stop เป็นกำไรแล้วปล่อยยาวดีกว่ากำไรเห็นๆ
                           ถ้ามันลบน๊ะ  เออดูซิ เกิน 50 จุดหรือยัง ถ้ายังก็ รอก่อนใกล้หมดตัวแล้ว  ถ้าเกินแล้วปิดดีกว่า ก่อนจะหมดตรูดดด แล้วเปิดสวนเลยโดยใช้ ordertype()เช็ค
                           ถ้ามันเป็น op_buy น๊ะเราก็เปิดใหม่เป็น sell ซะ   แล้วนั่งรอแป๊ปกราฟกลับมาทางเดิม ติดลบอีกละ(อะล้อเล่นครับ) 

                       }
         }
เอาแค่นี้ก่อน ถ้างงค่อยถามใหม่ครับ

Romio

  • Newbie
  • *
  • Posts: 20
Re: ช่วยบอกคำสั่งนี้หน่อยครับ
« Reply #13 on: สิงหาคม 20, 2010, 10:19:14 pm »

โอ้...ขอบคุณมากๆๆครับ เอาไว้ลองทำพรุ่งนี้ละกัน วันนี้เหนื่อยมากเลยครับ   ;D