Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ผมเขียนโคดแบบนี้ถูกไม๊ครับ  (Read 27837 times)

lovelove

  • Newbie
  • *
  • Posts: 44
ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« on: กุมภาพันธ์ 16, 2011, 06:16:26 pm »
rderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastprofit=OrderProfit();
    if(lastprofit < 0.00 )   
     {
        Lots = NormalizeDouble(OL*2, 2); //เลขสอง สองตัวนี้คืออะไรครับ                               
            }
         else
            {
            Lots = 0.1;
            }
   return(0);
  }
 ++++++++++++++++++++++++++++++++++++++++++
ถ้าผมจะเขียนโคดว่า
-ออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ให้เบิลล็อด  ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ

ถ้าออเด้อที่3 ได้  ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิม
เขียนยังไงครับ รบกวนขอโคตด้วยครับ พึ่งหัดเขียนครับ

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #1 on: กุมภาพันธ์ 16, 2011, 09:48:11 pm »
 for(int i=0;i<OrdersTotal();i++)
    {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(TimeCurrent()-OrderOpenTime()>300)
          {
             int type   = OrderType();
               
            bool result = false;
             
       switch(type)
          {
         
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
                         break;     
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
                         
          }
     
       }}
    OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
 
   double lastprofit=OrderProfit();
    if(lastprofit < 0.0 )   
     {
        Lots = NormalizeDouble(OL*2, 2);
                               
            }
         else
            {
            Lots = 0.1;
            }
   return(0);
  }
/////
ไม่แน่ใจว่าถุกหรือเปล่าช่วยดูด้วยครับ กอปมาจากหลายที่ :)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #2 on: กุมภาพันธ์ 16, 2011, 10:44:03 pm »
อยากให้ code มันทำงานลักษณไหนหรอครับ บอกรายละเอียดนิดหนึ่งครับ

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #3 on: กุมภาพันธ์ 17, 2011, 12:04:34 am »
ตามนี้เลยครับ

หากออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ก็ให้เบิลล็อด  //ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ

ถ้าออเด้อที่3 ได้  ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิมครับผม

  ขอบคุณครับ
« Last Edit: กุมภาพันธ์ 17, 2011, 12:12:02 am by lovelove »

tanapai

  • Jr. Member
  • **
  • Posts: 50
  • เล่นจริงเจ็บจริง รู้ให้จริง ๆ ไม่รู้ก็ถาม อิ ๆ
    • เทรด forex ไม่ต้องนั่งหน้าคอม ด้วยการ copy คนเก่ง ๆ คลิก
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #4 on: กุมภาพันธ์ 17, 2011, 10:35:42 am »
ตามนี้เลยครับ

หากออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ก็ให้เบิลล็อด  //ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ

ถ้าออเด้อที่3 ได้  ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิมครับผม

  ขอบคุณครับ

extern double lot =0.1;
extern double sl =45;
extern double tp =45;
extern int MaxOrder =1;  
int start() {
    if(OrdersTotal()<MaxOrder)
{
 double var1 = 0.00025;
 double var2 = -0.00025;
   double ma1 =iMA(NULL,0,10,0,MODE_SMMA,PRICE_MEDIAN,0);
   double ma2 =iMA(NULL,0,20,0,MODE_SMMA,PRICE_MEDIAN,0);
  
 double min = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
 double sig = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

      {
                   OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
                     double lastlot=OrderLots();
                     double lastprofit=OrderProfit();
                     double lastlot2=lastlot*2;
               if((lastprofit<0))
                        {
                    
                           if ((min<=0))
                                 {
                                 if ((sig <=0)&&(ma2>ma1))
                                    {
                                    if ((sig-var1)>=min)    
                                    {OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red);  }
                                    }
                                 }
                         if ((min>=-0))
                                 {
                                 if ((sig>=-0)&&(ma2<ma1))
                                    {
                                    if ((sig+var1)<=min)    
                                    {OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
                                    }  
                                 }
                       }
                    
               else
                           {
                           if ((min<=0))
                                 {
                                 if ((sig <=0)&&(ma2>ma1))
                                    {
                                    if ((sig-var1)>=min)    
                                    {OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
                                    }
                                 }  
                           if ((min>=-0))
                                 {
                                 if ((sig>=-0)&&(ma2<ma1))
                                    {
                                   if ((sig+var1)<=min)                        
                                    {OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);}
                                    }
                                 }
                           }
}}
 
return(0) ;
}


ลองเอาตัวนี้ไปใช้ดูนะคับ แต่ระวังนะคับ การเบิ้ลลอต ถ้าทุนไม่มากพอ ล้างพอตอย่างเดียวคับ ให้ลองเทรสดูก่อนคับ ลองปรับค่าต่าง ๆ ให้ดีนะคับ
ปล. ระวังซิบหายวายวอด  EA เบิ่ลลอดอะ :'( :'( :'( :'( :'( :'( :'( :'( :'(
« Last Edit: กุมภาพันธ์ 17, 2011, 10:37:41 am by tanapai »

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #5 on: กุมภาพันธ์ 17, 2011, 12:40:49 pm »
ขอบคุณครับ ;D

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #6 on: กุมภาพันธ์ 19, 2011, 04:32:37 am »
จากโคดเบิลล็อตด้านบน  ถ้าโปรฟิตเท่ากับ 0 มันไม่ยอมเบิ้ลให้ครับ
ผมลองแก้เป็นแบบนี้ครับ  if((lastprofit<=0))มันไม่เปิดออเด้อครับ
แล้วก้อแก้เป็น  if((lastprofit<0)&& ((lastprofit==0))
มันก้อไม่ทำงานอีก ทำไงดีครับ  รบกวนแอดมินและเพื่อนๆ ด้วยครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #7 on: กุมภาพันธ์ 19, 2011, 02:04:23 pm »
if(lastprofit<=0 )  ลองแบบนี้ก็น่าจะได้นะครับ

แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #8 on: กุมภาพันธ์ 20, 2011, 02:01:03 am »
if(lastprofit<=0 )  ลองแบบนี้ก็น่าจะได้นะครับ

แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
ลอลแล้วครับแอดมิน ไม่ได้เลยครับ มันไม่ยอมเปิดออเด้อให้ครับ ทำไงดีครับ

ออเด้อที่1 เสีย
ที่2 เบิ้ล
ที่3 เบิ้ลเสียอีก
ที่4 ออเด้อปิดที่ 0 โปรฟิต
ที่5 มันไม่เบิ้ลต่อ  แต่กับมาเทรดที่ 0.1 ล็อตต่อ  ขาดทุนตรงนี้แหละครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #9 on: กุมภาพันธ์ 20, 2011, 10:12:26 am »
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #10 on: กุมภาพันธ์ 20, 2011, 11:52:25 am »
if(lastprofit<=0 )  ลองแบบนี้ก็น่าจะได้นะครับ

แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
ลอลแล้วครับแอดมิน ไม่ได้เลยครับ มันไม่ยอมเปิดออเด้อให้ครับ ทำไงดีครับ

ออเด้อที่1 เสีย
ที่2 เบิ้ล
ที่3 เบิ้ลเสียอีก
ที่4 ออเด้อปิดที่ 0 โปรฟิต
ที่5 มันไม่เบิ้ลต่อ  แต่กับมาเทรดที่ 0.1 ล็อตต่อ  ขาดทุนตรงนี้แหละครับ
เอา code คุณมาโพสให้หน่อยครับจะได้ช่วยกันหาว่าทำไมมัน error ครับ

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #11 on: กุมภาพันธ์ 20, 2011, 05:34:27 pm »
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)


ขอบคุณครับ ได้แล้วครับ

เอา code คุณมาโพสให้หน่อยครับจะได้ช่วยกันหาว่าทำไมมัน error ครับ
++++++++++
extern double lot =0.1;
extern double sl =45;
extern double tp =45;
extern int MaxOrder =1; 
int start() {
    if(OrdersTotal()<MaxOrder)
{
 double var1 = 0.00025;
 double var2 = -0.00025;
   double ma1 =iMA(NULL,0,10,0,MODE_SMMA,PRICE_MEDIAN,0);
   double ma2 =iMA(NULL,0,20,0,MODE_SMMA,PRICE_MEDIAN,0);
 
 double min = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
 double sig = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

      {
                   OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
                     double lastlot=OrderLots();
                     double lastprofit=OrderProfit();
                     double lastlot2=lastlot*2;
               if(lastprofit< lastlot*10)
                        {
                     
                           if ((min<=0))
                                 {
                                 if ((sig <=0)&&(ma2>ma1))
                                    {
                                    if ((sig-var1)>=min)   
                                    {OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red);  }
                                    }
                                 }
                         if ((min>=-0))
                                 {
                                 if ((sig>=-0)&&(ma2<ma1))
                                    {
                                    if ((sig+var1)<=min)   
                                    {OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
                                    }   
                                 }
                       }
                     
               else
                           {
                           if ((min<=0))
                                 {
                                 if ((sig <=0)&&(ma2>ma1))
                                    {
                                    if ((sig-var1)>=min)   
                                    {OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
                                    }
                                 }   
                           if ((min>=-0))
                                 {
                                 if ((sig>=-0)&&(ma2<ma1))
                                    {
                                   if ((sig+var1)<=min)                         
                                    {OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);}
                                    }
                                 }
                           }
}}
 
return(0) ;
}

lovelove

  • Newbie
  • *
  • Posts: 44
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #12 on: กุมภาพันธ์ 21, 2011, 02:06:31 pm »
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)

if((lastprofit< lastlot*10))
จากโคดด้านบน ถ้าโปรฟิตเท่ากับ 0 มันก้อเบิ้ลล็อตให้ เยี่ยมไปเลยครับ
แล้ว ถ้าเราจะเปลี่ยนใหม่เป็น

ถ้าไม่ถึงโปรฟิตที่กำหนดก้อให้เบิ้ลล่ะครับ  หมายถึง ถ้ามันไม่ชนทาเก็ตน่ะครับ  คือ ถ้าเราปิดออเด้อก่อนและ + มากกว่า 0 แต่ไม่ถึงทาเก็ต  ก้อให้เบิ้ลล็อตอีก
เราจะเขียนโคดว่ายังๆไงครับ

ผมลอง   if(lastprofit < 10)
if((lastprofit< lastlot*10)||(lastprofit < 10))ทั้งหรือทั้งและ

มันไม่ยอมเปิดออเด้อให้ครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #13 on: กุมภาพันธ์ 21, 2011, 03:16:13 pm »
ที่ไม่เปิดออเดอร์นี่คือ ออเดอร์แรกเปิด แต่ถ้าปิดไม่ถึง tp จะไม่เบิ้ลใช่มั้ยครับ อ่านแล้วยังงง
ถ้าดูจากโค้ด ไม่ปิด TP ก็ต้องปิด SL เพราะมีแต่คำสั่งเปิดออเดอร์ ไม่มีคำสั่งปิดออเดอร์  หรือว่าปิดมือเอาครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
« Reply #14 on: กุมภาพันธ์ 21, 2011, 03:26:49 pm »
ลองแก้ดูเองนะครับ ผมจะขออธิบายเงื่อนไขนี้ให้

if(lastprofit< lastlot*10)
 เบิ้ลต่อ
else
  ไม่เบิ้ล

จากเงื่อนไข  lastprofit คือ profit ของออเดอร์ล่าสุด ที่เราปิดไปแล้ว จะปิดมือหรืออีเอก็ตาม  จะต้องน้อยกว่า lastlot*10 ถึงจะเบิ้ล
ทำไมผมถึงเขียนแบบนั้น สมมุติเทรด 0.1ลอต คูณ10 ก็จะได้ 1 ซึ่งถ้าเทรด 0.1ลอต 1จุดก็จะมีไรเท่ากับ 1  แปลง่ายๆว่า  
lastprofit< lastlot*10  กำไรของออเดอร์ล่าสุด จะต้องน้อยกว่า 1 จุด แต่ต้องเขียนแบบนี้ เพราะกำไรนับเป็น $ ไม่ได้นับเป็นจุด

 น้อยกว่า 1 จุด ก็คือ 0 นั่นแหละครับ แต่ทำไมถ้าเขียน lastprofit = 0 มันจะใช้ไม่ได้ เพราะจริงๆแล้วมันไม่ได้ปิด +0 เป๊ะๆ มันอาจจะปิด +0.000001 ซึ่ง mt4 มันปัดให้เราเห็นเป็น 0 เขียนแบบนี้จึงเกิดบั๊กได้

ดังนั้นถ้าจะบอกว่า ถ้าปิดน้อยกว่า TP ให้เบิ้ล ก็เอา TP ไปคูณ
if(lastprofit< lastlot*TP*10)  ----ของเดิมคือ 1จุด คูณ TP เข้าไป ก็กลายเป็น TPจุด แต่เขียนแบบนี้ก็มีปัญหาอีกครับ เพราะมันอาจจะไม่ได้ปิดเท่า TP เป๊ะๆ

ลองคิดดูเองก่อน ไม่ได้ค่อยเฉลย
« Last Edit: กุมภาพันธ์ 21, 2011, 03:29:24 pm by D_Diamond »