Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: รบกวนแอดมินหน่อยครับ  (Read 26227 times)

Jummum

  • Newbie
  • *
  • Posts: 29
รบกวนแอดมินหน่อยครับ
« on: กันยายน 01, 2010, 11:34:56 pm »
พอดีผมอ่านจากกระทู้เก่าๆมาเรื่องการเอาค่าจากอินดิเคเตอร์มาใช้ตามนี้เลย
double a,b,c;
if( เส้นแรก == เส้นสอง หรือ คอนดิชั่นที่คิดว่ามันตัดกันหรืออะไรก็ได้ที่เป็น event ของคุณ)
   {
       c=b;
       b=a;
       a=ค่าที่อยากบันทึก อะไรก็ว่ากันไป ;
    }

ใช้ได้กับอะไรก็ได้ที่ส่งค่าออกมา ไม่ได้ส่งค่า null ออกมา

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

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #1 on: กันยายน 02, 2010, 01:24:02 am »
ถ้าคุณต้องการ EA ที่เปิดจากการตัดกันของ อินดิเคเตอร์ ลองเอา code เก่าตัวนี้ไปดูครับเป็น EA ที่จะเปิดเมื่อค่าของเส้น MA ตัดกับราคาปัจจุบันครับ



int check (double bidprice ,double sma) // ฟังก์ชั่นตรวจสอบการตัดกัน
{    static int lastway =0;
     static int way     =0;
     
     if(bidprice > sma)
     {
        way=1;
     
     }
   
    if(bidprice < sma)
     {
        way=2;
     
     }
     
     if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);

}

int start()
  {     
         double ma =iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,0);
         
         int kway = check(Bid,ma); // เรียกใช้งานฟังก์ชั่นตรวจสอบ
         
         int total =OrdersTotal();
         int ticket;
         double Lots=0.1;
         
         if(total==0)
         {
             if(kway==1)
             {
                OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*20,Ask+Point*10,"smaaa",0,0,Green);
             
             
             
             }
         
             if(kway==2)
             {
             
                 OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Point*20,Bid-Point*10,"smaaa",555,0,Red);
               
             
             }
         
         
         }
         
         
         
         
         
         
         

   return(0);
  }

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #2 on: กันยายน 02, 2010, 08:07:45 am »
ขอบคุนครับ พอดีเพิ่งศึกษา
ไม่เข้าใจอันนี้
     if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);
หมายความว่าอะไรครับ
« Last Edit: กันยายน 02, 2010, 10:10:32 am by Jummum »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #3 on: กันยายน 02, 2010, 11:39:39 am »
 if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);

เป็นการตรวจสอบการตัดครับ way เป็นตัวแปรที่เราให้บันทึกการตัดครั้งสุดท้ายเอาไว หากเราตรวจสอบได้ว่าปัจจุบัน ราคากับ ma เกิดการเปลี่ยนแปลงจาก way ก็คือมีการตัดกันเกิดขึ้นครับ

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #4 on: กันยายน 02, 2010, 11:55:41 am »
เข้าใจยากจังครับ!!
ขอรบกวนอีกหน่อยแล้วถ้าจะบันทึกค่าไว้
คือเจตนาอยากได้สามค่าที่ตัดขึ้นล่าสุดน่ะครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #5 on: กันยายน 02, 2010, 01:08:09 pm »
จะบันทึกค่าใช่ไหมครับ มี 2 วิธีคือ
1.คือใช้ตัวแปร แบบ static  โดยประกาศก่อนฟังก์ชั่น  start()
    static int way;
int start()
{


}

แบบนี้ตัวแปร way จะจำค่าเอาไวจนกว่าเราจะปิด EA หรือมีการเปลี่ยนแปลงค่าครับ

2.วิธีที่ 2 คือการเขียนลงไฟล์วิธีการนี้ยุ่งยากครับเพราะต้องมีการอ่านไฟล์ และ เขียนไฟล์ควบคู่กันครับแต่วิธีนี้ค่าที่ได้จะอยู่ถึงแม้เราจะปิด EA ก็ตามก้เหมือนการ save ไฟล์ทั่วไปครับ

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #6 on: กันยายน 02, 2010, 10:09:15 pm »
คือช่วยแก้ให้ผมหน่อย คือพยายามแล้วแต่ไม่ได้
ยังไงมันก็ไม่จำค่าน่ะครับ
จุดประสงค์คือ Stochistic ตัดขึ้นสามครั้ง ค่าน้อยลงเรื่อยๆ
ให้เปิดสัญญาซื้อ ต่อมาถ้าตัดลงให้เปิดสัญญา
« Last Edit: กันยายน 02, 2010, 10:30:18 pm by Jummum »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #7 on: กันยายน 02, 2010, 10:56:11 pm »
จุดประสงค์คือ Stochistic ตัดขึ้นสามครั้ง ค่าน้อยลงเรื่อยๆ   งง ตรงนี้หละครับช่วยอธิบายให้ละเอียดหน่อยครับ

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #8 on: กันยายน 02, 2010, 10:59:45 pm »
ก็คือสมุติ ตัดขึ้นครั้งที่ 1 = 30; 2=25; 3=20
ก็จะเปิดสัญญา เลยอยากหาวิธีจำค่าที่ตัดกันไว้เพื่อเอามาเทียบน่ะครับ
แต่stoตอนที่ตัดกันมันไม่มีค่า(ใช้โปรแกรมของแอดมินดู)เลยใช้ก่อนหลังบวกกันหารสองแทน
ขอบคุนที่ตอบ แล้วก็ขอบคุนล่วงหน้าที่ช่วยแก้ให้ครับ
« Last Edit: กันยายน 02, 2010, 11:11:47 pm by Jummum »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #9 on: กันยายน 02, 2010, 11:37:10 pm »
งั้นถามต่อ การตัดนี้เราเริ่มนับ 1 จากตอนที่เปิด EA ใช่ไหมครับ ตัดครั้งแรกก็เก็บค่าไวที่ตัวแปรตัวแรก   ตัวครั้งที่ 2 ก็เก็บค่าไวตัวแปรตัวที่ 2 ตัดครั้งที่ 3 ก็เก็บค่าไวตัวแปรตัวที่ 3 ใช่ไหม

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #10 on: กันยายน 03, 2010, 08:27:55 am »
ใช่ครับ ช่วยหน่อยนะครับ
พอดีผมอ่านมาจากเวบนอกเรื่องเอาไปใช้
มีทั้งดูไดเวิด ดูค่าอย่างที่บอกหาจุดกลับตัว
แต่ยังไงก็ต้องหาวิธีอ่านค่าที่ตัดกันออกมาก่อน
ก็อยากเอามาพัฒนาต่อ รบกวนด้วยนะครับ
« Last Edit: กันยายน 03, 2010, 02:13:21 pm by Jummum »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #11 on: กันยายน 04, 2010, 03:23:10 am »
ลองเอาไปดูครับ


extern double Lots=0.1;
extern int SL=20;
extern int TP=10;
static double one;
static double two;
static double three;


int check (double stosignal ,double stomain)
{    static int lastway =0;
     static int way     =0;
     
     if(stosignal > stomain)
     {
        way=1;
     
     }
   
    if(stosignal < stomain)
     {
        way=2;
     
     }
     
     if(way!= lastway)
     {
        lastway = way;
       
        if( ( one == 0) &&   (two == 0)   &&   (three== 0)    )
       
        {
            one=Bid;
       
           return(0);
       
        }
       
         if( ( one != 0) &&   (two == 0)   &&   (three== 0)    )
       
        {
            two=Bid;
           
            return(0);
       
        }
       
          if( ( one != 0) &&   (two != 0)   &&   (three== 0)    )
       
        {
            three=Bid;
           
            return(0);
       
        }
       
         if( ( one != 0) &&   (two != 0)   &&   (three!= 0)    )
       
        {    one=Bid;
             two=0;
             three=0;
           
            return(0);
       
        }
       
           
     }
 
       return (0);

}

int start()
  {     
         double stomain=iStochastic(Symbol(),30,5,5,5,MODE_SMA,1,MODE_MAIN,0);
          double stosignal=iStochastic(Symbol(),30,5,5,5,MODE_SMA,1,MODE_SIGNAL,0);
         
         int kway = check(stosignal,stomain);
         
         int total =OrdersTotal();
     
       
         
         if(total==0)
         {
             if(one > (two > three) )
             {
                OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*SL,Ask+Point*TP,"smaaa",0,0,Green);
             
             
             
             }
         
             if(one < (two < three) )
             {
             
                 OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Point*SL,Bid-Point*TP,"smaaa",555,0,Red);
               
             
             }
         
         
         }
         
           
   return(0);
  }

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #12 on: กันยายน 04, 2010, 12:12:23 pm »
สงสัยครับว่า one=Bid Bid คืออะไร ราคาในตอนนั้นหรือป่่าว
เอาไปรันแล้วมันไม่เห็นจำค่าเลย
ก็ยังเข้าทุกครั้งที่ตัดกันเหมือนเดิมอ่ะ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: รบกวนแอดมินหน่อยครับ
« Reply #13 on: กันยายน 04, 2010, 12:28:35 pm »
one = Bid คือให้มันจำค่าตอนตัด ที่มันยังเปิดอยู่เพราะเงื่อไขการเปิดนี้ครับ

   if(total==0)
         {
             if(one > (two > three) )
             {
                OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*SL,Ask+Point*TP,"smaaa",0,0,Green);
             
             
             
             }
         
             if(one < (two < three) )
             {
             
                 OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Point*SL,Bid-Point*TP,"smaaa",555,0,Red);
               
             
             }
         
         
         }
คุณต้องเอาไปเขียนต่อเองครับว่าจะให้มันทำงานยังไง ค่าจะถูกจำอยู่ใน ตัวแปร one two three ครับ ลอง print ออกมาดูครับ

Jummum

  • Newbie
  • *
  • Posts: 29
Re: รบกวนแอดมินหน่อยครับ
« Reply #14 on: กันยายน 04, 2010, 04:01:32 pm »
ผมคงอธิบายงง..
คือเอาแบบในรูปอ่ะครับ คงเข้าใจง่ายผมอธิบาย
ตัดขึ้นแต่ละครั้งค่าจุดตัดของStoมากขึ้นเรื่อยๆ
ดูเหมือนง่ายแต่พยายามเท่าไหร่ก็เขียนไม่ได้
เอาค่าจุดตัดออกมาไม่ได้ ช่วยทีนะครับ
ขอบคุณอีกครั้ง แล้วก็ขอโทดที่ทำให้เสียเวลาหลายรอบ ;D
« Last Edit: กันยายน 04, 2010, 04:03:55 pm by Jummum »