traderider forex ไทย

กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป

  • 11 replies
  • 982 views

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

สวัสดีครับ รบกวนขอความช่วยเหลือ พอมีตัวอย่างโค๊ต กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป แบบนี้ต้องเขียนโค๊ตอย่างไรครับ

รบกวนขอความช่วยเหลือด้วยครับ ขอบคุณครับ (TH)**

Share Topic.

Follow Me.


traderider forex ไทย
traderider forex ไทย
traderider forex ไทย
*

ออฟไลน์ admin

  • *
  • 61,497
  • 2591
"เอาชนะใจตัวเองให้ได้ ก่อนที่จะไปเอาชนะตลาด"

"สนับสนุนบอร์ดง่ายๆด้วยการเปิด ID Trade forex ผ่าน Link ของบอร์ด ขอบคุณครับ"

*

ออฟไลน์ iRuler

  • *
  • 1,227
  • 39
สวัสดีครับ รบกวนขอความช่วยเหลือ พอมีตัวอย่างโค๊ต กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป แบบนี้ต้องเขียนโค๊ตอย่างไรครับ

รบกวนขอความช่วยเหลือด้วยครับ ขอบคุณครับ (TH)**

ปกติผมทำแบบนี้ครับ

int bar=-1;

void OnTick()
  {
    //code ส่วนนี้จะทำงานทุกๆ tick
   ...
   ...

  if(bar==Bars)
    return;
  bar=Bars;

  //code หลังจากบันทัดนี้ จะทำงานเฉพาะเกิดแท่งใหม่
  ...
  ...

  }

ขอบคุณครับ
สวัสดีครับ รบกวนขอความช่วยเหลือ พอมีตัวอย่างโค๊ต กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป แบบนี้ต้องเขียนโค๊ตอย่างไรครับ

รบกวนขอความช่วยเหลือด้วยครับ ขอบคุณครับ (TH)**

ปกติผมทำแบบนี้ครับ

int bar=-1;

void OnTick()
  {
    //code ส่วนนี้จะทำงานทุกๆ tick
   ...
   ...

  if(bar==Bars)
    return;
  bar=Bars;

  //code หลังจากบันทัดนี้ จะทำงานเฉพาะเกิดแท่งใหม่
  ...
  ...

  }


ขอบคุณครับ  (TH)**

ลองทำแล้วครับ แต่ปรากฎว่า ตรง EntryBuy2() ไม่เข้าออร์เดอร์ให้เลยครับ

แต่พอมาวาง EntryBuy2() ตรงเหนือบรรทัด if(bar==Bars) ก็เข้า ออร์เดอร์ทุก tick ซ้ำๆในแท่งเทียนอันเดียวกันครับ

อยากให้เข้า หนึ่งออร์เดอร์ในแท่งเทียนปัจจุบัน ต่อมาอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป น่ะครับ

รบกวนขอความช่วยเหลือด้วยครับ ขอบคุณครับ

void OnTick(){   

        EntryBuy2(); -----> วางตรงนี้เข้าออร์เดอร์ทุกๆ tick ซ้ำๆในแท่งเทียนอันเดียวกันครับ

   if(bar==Bars)
     return;
      bar=Bars;


   EntryBuy();
        EntryBuy2(); -----> วางตรงนี้ไม่เข้าออร์เดอร์ให้ครับ
}
//+------------------------------------------------------------------+
void EntryBuy(){

      double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3);
      double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3);
      double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3);
      double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3);
     
         if( Move1<Move2 && Move2<Move3 && Move3<Move4 ){
            if( OrderBuyCountMagic0()<1 ){
               tic1=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic0,0,clrGreen);}
   }
}
//+------------------------------------------------------------------+
void EntryBuy2(){

      double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 20
      double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 50
      double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 100
      double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 200
     
         if( Move1<Move2 && Move2<Move3 && Move3<Move4 ){
            if( OrderBuyCountMagic0()==1  && Ask<=Low[1]){
               tic3=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic1,1,clrSeaGreen);}
   }
}
//+------------------------------------------------------------------+
int OrderBuyCountMagic0(){
   int i = OrdersTotal()-1;
   int count =0;
   for(;i>=0;i--)
   {
      if( OrderSelect(i,SELECT_BY_POS) ){
         if(OrderMagicNumber()==Magic0 && OrderSymbol()==Symbol() && OrderType()==OP_BUY)
         count++;
         }
   }
   return(count);
}
//+------------------------------------------------------------------+
« แก้ไขครั้งสุดท้าย: 25, กันยายน 2018, 08:08:46 AM โดย arteefengfu »

*

ออฟไลน์ iRuler

  • *
  • 1,227
  • 39
ลองแบบนี้ดูครับ

void OnTick()
  {
   if(bar==Bars)
      return;
   bar=Bars;

   int c=OrderBuyCountMagic0();

   if(c==0)
      EntryBuy();
   else if(c==1)
      EntryBuy2();
  }
//+------------------------------------------------------------------+
void EntryBuy()
  {
   double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3);

   if(Move1<Move2 && Move2<Move3 && Move3<Move4)
     {
      //if( OrderBuyCountMagic0()<1 ){
      tic1=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic0,0,clrGreen);
      //}
     }
  }
//+------------------------------------------------------------------+
void EntryBuy2()
  {
   double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 20
   double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 50
   double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 100
   double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 200

   if(Move1<Move2 && Move2<Move3 && Move3<Move4)
     {
      //if(OrderBuyCountMagic0()==1  && Ask<=Low[1])
      if(Ask<=Low[1])
        {
         tic3=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic1,1,clrSeaGreen);
        }
     }
  }

*

ออฟไลน์ admin

  • *
  • 61,497
  • 2591
ขอบคุณครับท่านเป็นแหล่ง เทพ Code Mql4 เลยจริงๆ
 ็Hea** ็Hea**
"เอาชนะใจตัวเองให้ได้ ก่อนที่จะไปเอาชนะตลาด"

"สนับสนุนบอร์ดง่ายๆด้วยการเปิด ID Trade forex ผ่าน Link ของบอร์ด ขอบคุณครับ"

ขอบคุณครับ ลองทำตามแล้ว เข้าแค่ออร์เดอร์ EntryBuy() แต่ไม่เข้าออร์เดอร์ EntryBuy2() ให้ครับ
รบกวนด้วยครับ

ลองแบบนี้ดูครับ

void OnTick()
  {
   if(bar==Bars)
      return;
   bar=Bars;

   int c=OrderBuyCountMagic0();

   if(c==0)
      EntryBuy();
   else if(c==1)
      EntryBuy2();
  }
//+------------------------------------------------------------------+
void EntryBuy()
  {
   double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3);
   double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3);

   if(Move1<Move2 && Move2<Move3 && Move3<Move4)
     {
      //if( OrderBuyCountMagic0()<1 ){
      tic1=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic0,0,clrGreen);
      //}
     }
  }
//+------------------------------------------------------------------+
void EntryBuy2()
  {
   double Move1=NormalizeDouble(iMA(Symbol(),0,20,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 20
   double Move2=NormalizeDouble(iMA(Symbol(),0,50,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 50
   double Move3=NormalizeDouble(iMA(Symbol(),0,100,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 100
   double Move4=NormalizeDouble(iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,Bar),3); // 200

   if(Move1<Move2 && Move2<Move3 && Move3<Move4)
     {
      //if(OrderBuyCountMagic0()==1  && Ask<=Low[1])
      if(Ask<=Low[1])
        {
         tic3=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"1",Magic1,1,clrSeaGreen);
        }
     }
  }

« แก้ไขครั้งสุดท้าย: 25, กันยายน 2018, 10:28:06 AM โดย arteefengfu »

*

ออฟไลน์ iRuler

  • *
  • 1,227
  • 39
ลองเปลี่ยน EntryBuy2() เป็นแบบนี้ครับ แล้วดูว่า มันวาดเส้นให้ไหม
ถ้าวาดเส้น vertical ให้ก็แสดงว่า ปัญหาอยู่ที่เงื่อนไขพวกเส้น MA ใน EntryBuy2()

void EntryBuy2()
{
drawVerticalLine();
}





//
void drawVerticalLine() {
   
   string lineName = "Line"+MathRand();

   if (ObjectFind(lineName) != 0) {
      ObjectCreate(lineName,OBJ_VLINE,0,Time[0],0);
      ObjectSet(lineName,OBJPROP_COLOR, clrRed);
      ObjectSet(lineName,OBJPROP_WIDTH,1);
      ObjectSet(lineName,OBJPROP_STYLE,STYLE_DOT);
   }
}

ขอบคุณท่าน iRuler มากครับ ผมลองทำแล้วปรากฎว่า มันวาดเส้นแนวตั้งให้ ไม่ทราบว่าจะแก้ไขปัญหานี้อย่างไรครับ
เพราะผมลองเปลี่ยน ตรง EntryBuy2() เป็น if(Ask >= Low[1]) ปรากฎว่า มันเข้าออร์เดอร์ให้ในทุกแท่งเทียนครับ

รบกวนด้วยครับ ของคุณครับ

ลองเปลี่ยน EntryBuy2() เป็นแบบนี้ครับ แล้วดูว่า มันวาดเส้นให้ไหม
ถ้าวาดเส้น vertical ให้ก็แสดงว่า ปัญหาอยู่ที่เงื่อนไขพวกเส้น MA ใน EntryBuy2()

void EntryBuy2()
{
drawVerticalLine();
}





//
void drawVerticalLine() {
   
   string lineName = "Line"+MathRand();

   if (ObjectFind(lineName) != 0) {
      ObjectCreate(lineName,OBJ_VLINE,0,Time[0],0);
      ObjectSet(lineName,OBJPROP_COLOR, clrRed);
      ObjectSet(lineName,OBJPROP_WIDTH,1);
      ObjectSet(lineName,OBJPROP_STYLE,STYLE_DOT);
   }
}

*

ออฟไลน์ iRuler

  • *
  • 1,227
  • 39
อธิบายหลักการทำงานของ ea ตัวนี้มาหน่อยครับ

หลักการทำงานของ ea ตัวนี้ คือ
๑. เมื่อ Moving Average 20 >50 > 100 > 200
๒. ให้เข้า ออร์เดอร์ Buy (EntryBuy()) ในครั้งแรก
๓. หลังจากเข้า ออร์เดอร์ Buy ในครั้งแรกแล้ว ให้เข้า ออร์เดอร์ Buy (EntryBuy2()) ในครั้งที่สองในแท่งเทียนถัดไป
๔. ออร์เดอร์ Buy (EntryBuy2()) ในครั้งที่สอง ให้เข้าต่อเมื่อ ราคา Ask ลงมาถึง จุดต่ำสุดของแท่งเทียนก่อนหน้า
๕.และให้เข้า ออร์เดอร์ Buy (EntryBuy2()) ตามเงื่อนไขข้อ ๔ ต่อไปเรื่อยๆ โดยให้เข้าออร์เดอร์เดียวต่อแท่งเทียน เท่านั้น

ขอบคุณครับ

Tags:
 

เครื่องมือเทรด Forex

ข่าว Forex กราฟ Forex EURUSD GBPUSD GBPJPY ตารางข่าว Forex

เครื่องมือเทรดทองคำ

ราคาทอง วันนี้ ราคาทอง ย้อนหลัง SPDR ล่าสุด กราฟราคาทองคำ วิเคราะห์ ราคาทอง ข่าว ราคาทองคำ ข่าว ราคาน้ำมัน

โบรคเกอร์ Forex

XM Exness FBS Nordfx Land-FX Admiral Markets

Tickmill