กองทุน SPDR Gold Shares

ประจำวันที่

เวลา ครั้งที่ ก่อนหน้า ถือล่าสุด เปลี่ยนแปลง
- - - - -
รวมวันนี้-
เดือนนี้ - : 
ปีนี้  : 
*หน่วยตัน
*อ้างอิงจาก SPDR Gold Share

ราคาทองตามประกาศสมาคมค้าทองคำ

ประจำวันที่ ครั้งที่ เวลา น.

ชนิดทองคำ รับซื้อ ขายออก
ทองคำแท่ง 96.5% - -
ทองรูปพรรณ 96.5% - -
รวมวันนี้-
เปลี่ยนแปลงล่าสุด-
*หน่วยเงินบาท
*ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ

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

  • 11 replies
  • 3,067 views
*

arteefengfu

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

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

*

admin

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

*

iRuler

  • 1,283
อ้างจาก: arteefengfu ที่ 23, กันยายน  2018, 10:11:05 PM
สวัสดีครับ รบกวนขอความช่วยเหลือ พอมีตัวอย่างโค๊ต กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป แบบนี้ต้องเขียนโค๊ตอย่างไรครับ

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

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

int bar=-1;

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

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

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

  }

*

arteefengfu

ขอบคุณครับ
อ้างจาก: iRuler ที่ 24, กันยายน  2018, 07:07:43 AM
อ้างจาก: arteefengfu ที่ 23, กันยายน  2018, 10:11:05 PM
สวัสดีครับ รบกวนขอความช่วยเหลือ พอมีตัวอย่างโค๊ต กรณีเมื่อเข้าออร์เดอร์แรกในแท่งเทียนอันแรกแล้ว ต่อมาเราอยากจะให้เข้าออร์เดอร์ที่สองในแท่งเทียนถัดไป แบบนี้ต้องเขียนโค๊ตอย่างไรครับ

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

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

int bar=-1;

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

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

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

  }


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

*

arteefengfu

ลองทำแล้วครับ แต่ปรากฎว่า ตรง 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);
}
//+------------------------------------------------------------------+

*

iRuler

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

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

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

*

arteefengfu

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

อ้างจาก: iRuler ที่ 25, กันยายน  2018, 08:44:47 AM
ลองแบบนี้ดูครับ

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);
        }
     }
  }


*

iRuler

  • 1,283
ลองเปลี่ยน 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);
   }
}

*

arteefengfu

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

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

อ้างจาก: iRuler ที่ 25, กันยายน  2018, 12:06:02 PM
ลองเปลี่ยน 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,283
อธิบายหลักการทำงานของ ea ตัวนี้มาหน่อยครับ

*

arteefengfu

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

ขอบคุณครับ

 

XM Global Limited