Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: สอบถามคำสั่งการใช้งาน  (Read 8121 times)

as08058407

  • Newbie
  • *
  • Posts: 2
สอบถามคำสั่งการใช้งาน
« on: กันยายน 03, 2013, 12:39:40 am »
รบกวนผู้รู้ทุกท่านหน่อยครับ
หากผมต้องการให้มันเปิดออเดอร์ Buy และ Sell สลับกัน ต้องใช้คำสั่งอย่างไรครับ
หมายถึงพอครบเงื่อนไขแล้วมันจะ Buy เมื่อถึงจุดกำหนดแล้วก็ปิดออเดอร์ และจะไม่เปิดออเดอร์ Buy อีกถึงแม้จะมีสัญญาณ Buy
จนกว่าจะได้ Sell และก็อีกเช่นกันเมื่อจบออเดอร์ Sell จะไม่เปิดออเดอร์ Sell เพิ่ม แม้จะมีสัญญาณใดๆก็ตาม

ต้องการให้มันเปิดออเดอร์สลับกันไปมาระหว่าง Sell กับ Buy อ่ะครับ
หรือยากขึ้นหน่อยก็สลับไปมาอย่างละสองครั้งสามครั้ง
กล่าวคือ Buy ได้เต็มที่ 2 ครั้ง แล้วจะไม่ Buy อีกจนกว่าจะได้ Sell อีกซักสอสามครั้ง ตามกำหนด

ต้องการมากๆๆ เบื่อสุดๆเวลา EA มันเปิดออเดอร์ซ้ำ ทั้งๆที่เรารู้ว่าจะหมดเทรนแล้ว เบื่อสุดๆๆๆๆๆ อย่างกะตัวขัดอนาคต

พยายามหาวิธี โดยศึกษามาหลายวันแล้ว ก็ยัง มึนตึ๊บๆอยู่ดี
ตอนแรกก็พยายามหาเงื่อนไข แต่ไม่มีปัญญาจริงๆ มีแต่ไอเดียเฉยๆ ว่า
1. เริ่มต้นกำหนดค่า A ให้เท่ากับเลขใดๆ
2. เมื่อเกิดสัญญาณการ Buy ให้ตรวจสอบค่า A ว่ามีค่า = 2 หรือไม่ ถ้าไม่ใช่ไม่เข้าออเดอร์
3. หากมีการเข้าออเดอร์ Buy ให้ A-1
4. เมื่อเกิดสัญญาณการ Sell ให้ตรวจสอบค่า A ว่ามีค่า = 1 หรือไม่ ถ้าไม่ใช่ก็ไม่เข้าออเดอร์เช่นกัน
5. หากมีการเข้าออเดอร์ Sell ให้ A+1

รบกวนช่วยเขียนให้ด้วยครับๆๆๆๆๆ

ก็ใช้ int (ค่าซักตัวนึง) ให้เท่ากับ เลขตัวนึง
แต่ไม่รู้ว่า เวลาแก้ไข (ค่าตัวนั้น) ให้เป็น เลขตัวอื่น ต้องใช้คำสั่งอะไร refine หรือเปล่าหว่า
ไม่ค่อยรู้เรื่องเลย อันที่จริงอยากได้ความหมายของคำสั่งแต่ละตัวเหมือนกันอยากรู้ว่าใช้อย่างไร
« Last Edit: กันยายน 03, 2013, 12:49:50 am by as08058407 »

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: สอบถามคำสั่งการใช้งาน
« Reply #1 on: กันยายน 03, 2013, 08:53:39 am »


 เบื่อสุดๆเวลา EA มันเปิดออเดอร์ซ้ำ ทั้งๆที่เรารู้ว่าจะหมดเทรนแล้ว เบื่อสุดๆๆๆๆๆ อย่างกะตัวขัดอนาคต


อาจจะตอบได้ไม่ดี  แต่ตัวผมทำแบบนี้

เรารู้ได้อย่างไรว่า มันจะหมดเทรนแล้ว เราก็เขียนเงื่อนไขให้อีเอมันรู้ด้วย  มันก็จะไม่เทรดเองครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: สอบถามคำสั่งการใช้งาน
« Reply #2 on: กันยายน 03, 2013, 12:33:04 pm »
เรื่องเงื่อนไขก็ตามที่ท่าน D_Diamond  ว่านั่นหละครับ ส่วนตัวเลขที่ใช้ตรวจสอบคุณประกาสเป็นตัวแปร Global ครับ จากนั่นก็ในเงื่อนไขที่หมดเทรดก็แค่กำหนค่าตัวเลขให้เท่ากับค่าใหม่แค่นั่นเองครับ ตัวแปรนี้จะทำงานจนกว่าเราจะปิด MT4 เลยไม่ใช่แค่จบการทำงานของ EA ครับ

as08058407

  • Newbie
  • *
  • Posts: 2
Re: สอบถามคำสั่งการใช้งาน
« Reply #3 on: กันยายน 04, 2013, 12:08:02 am »
คับผม ขอบคุณมากๆเลยครับ โง่อยู่ตั้งนาน มัวแต่โมโห ไอ้เจ้า ea อยู่ บ้าอยู่คนเดียวไปพักนึง
ก็ไม่ทันได้คิดว่า ทำไมเราไม่ยัดความรู้เราลงในหัวมัน แหม ผมนี่โง่จิงๆ ยังโง่ได้อีก

ตอนนี้ Back test งามคับ สงสัยอย่างเดียว
เวลาผมสร้าง ea เนี่ย ผมกำหนดให้ มันใช้อินดี้แต่ละตัว
เวลาผมเอาไปใช้จริงในหน้าชาร์ท ผมต้องเปิดอินดี้นั้นๆ ด้วยไหมคับ (รู้แต่ว่าตอน Backtest ไม่ต้องเปิดอินดี้ตาม)

veronika

  • Newbie
  • *
  • Posts: 44
Re: สอบถามคำสั่งการใช้งาน
« Reply #4 on: กันยายน 05, 2013, 06:47:06 am »
ไม่จำเป็นต้องเปิดไปด้วยครับ แต่แค่ใน folder indicator ให้มี indi ตัวนั้นอยู่ก็พอ

ส่วนที่ต้องการให้จำนวน order เท่ากับที่ต้องการของฝั่ง Buy หรือ sell ก้ให้สร้าง function ที่ใช้ในการนับ order เพิ่มเข้าไปครับ
ตัวอย่างครับ

Code: [Select]
//+------------------------------------------------------------------+
//| Count Sell Order                                                 |
//+------------------------------------------------------------------+
int CountSell()
  {
   int sells=0;
//----
   if(OrdersTotal()==0) sells=0;
   else {
      for(int i=0;i<OrdersTotal();i++){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
           {
            if(OrderType()==OP_SELL)  sells++;
           }
      }
   }
//----
   if(sells>0) return(sells);
  }

//+------------------------------------------------------------------+
//| Count Buy Order                                                  |
//+------------------------------------------------------------------+
int CountBuy()
  {
   int buys=0;
//----
   if(OrdersTotal()==0) buys=0;
   else {
      for(int i=0;i<OrdersTotal();i++){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
           {
            if(OrderType()==OP_BUY)  buys++;
           }
      }
   }
//----
   if(buys>0) return(buys);
  }

Function ข้างบน จะเป็นการนับ Order ที่ถูกเปิดขึ้นมาแล้วครับ โดยจะนับ Order ที่ใส่ค่ าmagic ให้ด้วย พร้มกับนับ Order ที่เปิดในแต่ละคู่เงินครับ

เวลาที่จะใช้งานก็ให้เรียกขึ้นมา และสร้างเงื่อไขให้มันครับ เช่น

Code: [Select]
      if(CountBuy()<2){
            res=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"",MAGICMA,0,Lime);
            return;
         }
      //----------------------   
         if(CountSell()<2){
            res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"",MAGICMA,0,Red);
            return;
         } 

ตัวอย่างข้างต้นคือ เมื่อมี OrderBuy ต่ำกว่า 2 ให้เปิด open Buy และเมื่อ OrderSell ต่ำกว่า 2 ให้เปิด open Sell ประมาณนี้ครับ
« Last Edit: กันยายน 05, 2013, 06:54:07 am by veronika »