Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder  (Read 30346 times)

vicvic

  • Newbie
  • *
  • Posts: 31
ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« on: พฤศจิกายน 22, 2012, 06:09:39 pm »
int lot=0.01;
    if (OrdersTotal()==1)
    {   
         lot=lot+0.01;
         if(OrderType()==OP_SELL)
         {
         OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+20*Point,3,Ask,Ask+20*Point);
         }
          else
         {     
          OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-20*Point,3,Bid,Bid-20*Point);
         }     
     }

คือพอออเด้อทั้งหมดเหลือ1 ออเ้ด้อให้เชคค่าแล้วเปิดออเด้อ แต่ทำไมไม่เปิด ช่วยดูหน่อยคับ

อีกอย่างคับ ถ้าผมใช้เงื่อนไข
 if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #1 on: พฤศจิกายน 22, 2012, 07:12:38 pm »
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง

if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ

ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ

vicvic

  • Newbie
  • *
  • Posts: 31
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #2 on: พฤศจิกายน 23, 2012, 10:44:12 am »
ขอบคุณคับ Admin ถามอีกหน่อยคับ พอดีมือใหม่ อ่านหนังสือแล้วไม่่ค่อยเข้าใจคับ

OrderSelect(int index, int select, int pool=MODE_TRADES)
index=ตำแหน่งของออเด้อ มีวิธีนับตำแหน่งหรือใส่ค่ายังไงบ้างคับ

แล้วถ้าเราจะถามว่า
ถ้าOrder ที่พึ่งปิดไปมีกำไรหรือไม่ จะกำหนดตำแหน่งและตั้งเงื่อนไขยังไงคับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #3 on: พฤศจิกายน 23, 2012, 01:55:29 pm »
ใช้ loop ในการวนครับ

for(int i=0;i<OrdersTotal();i++)
{
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

   แบบนี้คือมันจะเริ่มตรวจสอบตั้งแต่ Order แรกที่เปิดจนถึง Order สุดท้าย 
}

แต่ถ้าต้องการ Order สุดท้ายที่เปิด Order เดียวก็ใช้แบบนี้เลยครับ
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);

dataxdata

  • Newbie
  • *
  • Posts: 35
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #4 on: พฤศจิกายน 26, 2012, 05:00:26 pm »
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง

if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ

ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ

ขอถามต่อยอดหน่อยครับ สมมติว่าเราเปิด short มากกว่า 1 order พอใช้คำสั่ง orderprofit() > 10 เพื่อให้มันปิด order ค่า order ที่มันเอามาวัดว่า > 10 รึเปล่า ปกติจะเป็น order หลังสุดทุกที
สมมติว่าผมจะให้มันดูเฉพาะ order แต่ละตัวว่า profit > 10 ให้ปิด order ต้องเขียนเพิ่มอย่างไรครับ ต้องวิ่งวน loop for เพื่อหาตำแหน่งแล้วเอามาทำ orderselect รึเปล่าครับ ตอนนี้ผมเขียนไว้แค่นี้ครับ

if(s1count > 0 )
         {
            if(OrderMagicNumber()==MagicNumber1)   
               {
                  if(OrderProfit() > 15)
                     {
                        OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
                        s1count--;
                     }
               }
         }
Name: Ataporn.Tap
Rank : Newbie Trader (- -,)

dataxdata

  • Newbie
  • *
  • Posts: 35
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #5 on: พฤศจิกายน 26, 2012, 05:26:23 pm »
ไม่มีคำสั่ง OrderSelect() ก่อนเรียกใช้งาน OrderType ครับเลยได้ค่าที่ไม่ถูกต้อง

if (OrderProfit()<20) หมายความว่าถ้าออเด้อที่เปิดอยู่ขณะนั้นมีกำไรน้อยกว่า20 ใช่ไหมคับ เขียนอย่างนี้ถูกไหมคับ

ใช้ครับ แต่ต้องมีคำสั่ง OrderSelect ก่อนเรียกใช้งาน OrderProfit ด้วยครับ

ขอถามต่อยอดหน่อยครับ สมมติว่าเราเปิด short มากกว่า 1 order พอใช้คำสั่ง orderprofit() > 10 เพื่อให้มันปิด order ค่า order ที่มันเอามาวัดว่า > 10 รึเปล่า ปกติจะเป็น order หลังสุดทุกที
สมมติว่าผมจะให้มันดูเฉพาะ order แต่ละตัวว่า profit > 10 ให้ปิด order ต้องเขียนเพิ่มอย่างไรครับ ต้องวิ่งวน loop for เพื่อหาตำแหน่งแล้วเอามาทำ orderselect รึเปล่าครับ ตอนนี้ผมเขียนไว้แค่นี้ครับ

if(s1count > 0 )
         {
            if(OrderMagicNumber()==MagicNumber1)   
               {
                  if(OrderProfit() > 15)
                     {
                        OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
                        s1count--;
                     }
               }
         }


เพิ่มโค้ดเป็นอย่างนี้จะถูกรึยังครับ?

for(int j=0;j<OrdersTotal();j++)
         {
            if(s1count > 0 )
               {
                  OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
                  if(OrderMagicNumber()==MagicNumber1)   
                     {
                        if(PlusADX < CurBaseADX && OrderProfit() > 15)
                           {
                              OrderClose(OrderTicket(),OrderLots(),Bid,10,Green);
                              s1count--;
                           }
                     }
               }

ไม่รู้ว่าทำแบบนี้จะได้ค่า orderprofit() ของแต่ละ order อย่างถูกต้องรึยังครับ
Name: Ataporn.Tap
Rank : Newbie Trader (- -,)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #6 on: พฤศจิกายน 26, 2012, 10:05:46 pm »
จะเรียกดู profit ของ order โดยใช้ Magic number เป็นตัวหรอกหรือว่าต้องการอะไรครับ

dataxdata

  • Newbie
  • *
  • Posts: 35
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #7 on: พฤศจิกายน 27, 2012, 04:19:10 pm »
จะเรียกดู profit ของ order โดยใช้ Magic number เป็นตัวหรอกหรือว่าต้องการอะไรครับ

คือที่จริงผมอยากรู้ว่า order ที่เปิดค้างไว้แต่ละใบมี profit เท่าไหร่บ้างอยากเลยอยากให้มันโชว์ให้เห็นครับ แล้วพอ profit ได้ถึงระดับนึงแล้วจะสั่งให้มันปิด order ให้ครับ

ถ้าผมใช้แค่ code ที่เขียนแบบไม่วน loop for มันจะได้ค่า orderprofit ของตั๋วใบล่าสุดเท่านั้น พอใส่ loop เข้าไปก็ไม่แน่ใจอีกว่ามันถูกรึยังครับท่าน

ปล. หนังสือที่ท่าน admin เขียนนี่มีขายที่ไหนบ้างครับ? หนังสือชื่ออะไรเอ่ย? กะว่าจะเอามาอ่านเป็นความรู้หน่อยครับ ^^
Name: Ataporn.Tap
Rank : Newbie Trader (- -,)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #8 on: พฤศจิกายน 27, 2012, 06:22:25 pm »
double temp[100];
 
        for(int j=0;j<OrdersTotal();j++)
         {
               OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
                temp[j] = OrdersTotal();
                 Print("Order : ",j+1," Profit is  " ,OrderProfit() );
                       
         }

ส่วนหนังสือสั่งได้ที่นี้เลยครับ http://www.serv4fx.com/mtbook/orderbook.php  ไม่ได้วางขายตามท้องตลาด ครับ

vicvic

  • Newbie
  • *
  • Posts: 31
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #9 on: พฤศจิกายน 28, 2012, 12:24:40 am »
แล้วถ้า อีเอเราทำงานจนกระทั่งวันนี้มีกำไรแล้วจะหยุดแล้วค่อยไปเริ่มทำตามสูตรใหม่ในวันพรุ่งนี้ มีคำสั้งเงื่อนไขไหนให้ใช้บ้างอะคับ
อีกอย่างคับเผลอไปกดอะไรไม่รู้คับเวลาพิมพ์ไทยจะเป็นภาษาต่างดาวแต่ภาษาอังกฤษปกติ ลองเปลี่ยน font ใน option เป็น fixedsys  thai  ก็จะพิมพ์ไทยได้แต่ไม่ค่อยตรงเท่าไหร่ตัวหนังสือก็แปลกๆคับ ท่านใดพอรู้บ้างคับ ผมแก้ไม่ได้สักที
« Last Edit: พฤศจิกายน 28, 2012, 09:35:34 am by vicvic »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #10 on: พฤศจิกายน 29, 2012, 12:45:11 am »
แล้วถ้า อีเอเราทำงานจนกระทั่งวันนี้มีกำไรแล้วจะหยุดแล้วค่อยไปเริ่มทำตามสูตรใหม่ในวันพรุ่งนี้ มีคำสั้งเงื่อนไขไหนให้ใช้บ้างอะคับ
อีกอย่างคับเผลอไปกดอะไรไม่รู้คับเวลาพิมพ์ไทยจะเป็นภาษาต่างดาวแต่ภาษาอังกฤษปกติ ลองเปลี่ยน font ใน option เป็น fixedsys  thai  ก็จะพิมพ์ไทยได้แต่ไม่ค่อยตรงเท่าไหร่ตัวหนังสือก็แปลกๆคับ ท่านใดพอรู้บ้างคับ ผมแก้ไม่ได้สักที
ฟังก์ชั่นให้หยุดอัตโนมัติไม่มีครับ ต้องเขียนให้ EA ไปอ่านข้อมูลที่ Orderhistory โดยการรวม Profit ของ order ที่ถูกปิดไปในวันนี้ครับ ถ้าหากผลรวมเป็นบวกก็หยุดการทำงานครับ หากไม่ใช่ก็ให้ทำงานต่อ ส่วนภาษาไทยใน Metadeitor ก็ได้เต็มที่แบบที่คุณเห็นครับโชว์รูปแบบอักษรแปลกๆเพราะมันไม่ได้รองรับภาษาไทย 100 % ครับ

vicvic

  • Newbie
  • *
  • Posts: 31
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #11 on: พฤศจิกายน 29, 2012, 05:37:01 am »
ถ้าผลรวมเป็นบวกก็ให้หยุดการทำงาน
ใช้ฟังชั่นไหนหรอคับ หรือช่วยยกตัวอย่างหน่อยคับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #12 on: พฤศจิกายน 29, 2012, 09:42:17 am »
หยุดทำงานใช้คำสั่ง  return (0); ครับ
อยากให้หยุดตรงไหนก็ไปวางไปตรงนั้น

vicvic

  • Newbie
  • *
  • Posts: 31
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #13 on: พฤศจิกายน 30, 2012, 05:11:42 am »
ขอบคุณคับ คุณ D_Diamond

vicvic

  • Newbie
  • *
  • Posts: 31
Re: ช่วยดูหน่อยคับ ทำไมมันไม่เปิดorder
« Reply #14 on: ธันวาคม 01, 2012, 08:14:45 am »
if  ((Ask-Bid) > 0.0005 ) return(0);
ผมเขียนเงื่อนไขเชคเสปรดอย่างนี้ได้เปล่าคับ หรือเขียนแบบไหนได้บ้างคับ

อีกข้อคับ คือผมลองเขียนอีเอ buystop กับ sellstop ทั้งสองฝั่งกำไร 20 พอยค์ตัด ขาดทุน10 ตัด วนไปเรื่อยๆ ทำำไมเวลาเทส ใช้ m1 ก็ออกมาอย่าง ใช้ m15 m30 ก็ออกมาไม่เหมือนกัน ผมไม่ได้ใช้ indy อะไรเลย จริงๆแล้วราคาติ๊กมันเหมือนกันหมดไม่ใช้หรอคับ
« Last Edit: ธันวาคม 01, 2012, 08:44:14 am by vicvic »