EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: lovelove on กุมภาพันธ์ 16, 2011, 06:16:26 pm

Title: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove 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ลอตเหมือนเดิม
เขียนยังไงครับ รบกวนขอโคตด้วยครับ พึ่งหัดเขียนครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove 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);
  }
/////
ไม่แน่ใจว่าถุกหรือเปล่าช่วยดูด้วยครับ กอปมาจากหลายที่ :)
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: admin on กุมภาพันธ์ 16, 2011, 10:44:03 pm
อยากให้ code มันทำงานลักษณไหนหรอครับ บอกรายละเอียดนิดหนึ่งครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 17, 2011, 12:04:34 am
ตามนี้เลยครับ

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

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

  ขอบคุณครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: tanapai 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 เบิ่ลลอดอะ :'( :'( :'( :'( :'( :'( :'( :'( :'(
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 17, 2011, 12:40:49 pm
ขอบคุณครับ ;D
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 19, 2011, 04:32:37 am
จากโคดเบิลล็อตด้านบน  ถ้าโปรฟิตเท่ากับ 0 มันไม่ยอมเบิ้ลให้ครับ
ผมลองแก้เป็นแบบนี้ครับ  if((lastprofit<=0))มันไม่เปิดออเด้อครับ
แล้วก้อแก้เป็น  if((lastprofit<0)&& ((lastprofit==0))
มันก้อไม่ทำงานอีก ทำไงดีครับ  รบกวนแอดมินและเพื่อนๆ ด้วยครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: admin on กุมภาพันธ์ 19, 2011, 02:04:23 pm
if(lastprofit<=0 )  ลองแบบนี้ก็น่าจะได้นะครับ

แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove 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 ล็อตต่อ  ขาดทุนตรงนี้แหละครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 20, 2011, 10:12:26 am
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: admin 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 ครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove 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) ;
}
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove 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))ทั้งหรือทั้งและ

มันไม่ยอมเปิดออเด้อให้ครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 21, 2011, 03:16:13 pm
ที่ไม่เปิดออเดอร์นี่คือ ออเดอร์แรกเปิด แต่ถ้าปิดไม่ถึง tp จะไม่เบิ้ลใช่มั้ยครับ อ่านแล้วยังงง
ถ้าดูจากโค้ด ไม่ปิด TP ก็ต้องปิด SL เพราะมีแต่คำสั่งเปิดออเดอร์ ไม่มีคำสั่งปิดออเดอร์  หรือว่าปิดมือเอาครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond 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 เป๊ะๆ

ลองคิดดูเองก่อน ไม่ได้ค่อยเฉลย
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: tanapai on กุมภาพันธ์ 21, 2011, 07:38:00 pm
ลองเอาแบบนี้นะคับ
น่าจะได้

if(lastprofit< lastlot*sl)

ลองดูนะคับไม่รู้ว่าได้หรือเปล่า
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 21, 2011, 11:29:16 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 เป๊ะๆ

ลองคิดดูเองก่อน ไม่ได้ค่อยเฉลย
+++++++++++++++++++++++++++

ผมนึกยังไม่ออกเลยครับ   :'(
ลองเอาแบบนี้นะคับ
น่าจะได้

if(lastprofit< lastlot*sl)

ลองดูนะคับไม่รู้ว่าได้หรือเปล่า

ยังไม่ได้ครับ.. ;)
++++++++++++++++++++
ออเด้อที่ 1 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้  แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
ออเด้อ ที่ 5 จำนวนโปรฟิตที่ได้กับเสียมันไม่เท่ากัน
ปัญหามันอยู่ที่ตรงนี้ครับ เลยอยากให้เบิ้ลต่อ
++++++++
เวลาผมเอามาเทส ผมเห็นปัญหา ถ้านึกไม่ออก ผมก็ขอถามเลยนะครับ ขอบคุณพี่ๆทุกคนและแอดมินครับ
+++++++++++++++++++++++++++++++++++++++++++


ผมลองเปลี่ยนเป็น if(((lastprofit< lastlot*10))&&(lastprofit< tp)) ก็ยังไม่ได้ครับ
++++++
ผมลองเปลี่ยนเป็น if(((lastprofit< lastlot*100))  เบิ้ลไม่หยุดเลยครับ  เบิ้ลต่อเนื่องเลยครับ
+++
if(((lastprofit< lastlot*10))||((lastprofit< lastlot*100)))   ก็ยังไม่ได้ครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: admin on กุมภาพันธ์ 22, 2011, 01:27:25 am
ปัญหาคุณคือ order ที่5 ใช้ไหมเพราะว่า order ที่ 4 มีการขบได้ 2 แบบแล้วเปิด lot ของ order ที่5 ต่างกันใช่ไหมเพราะผมอ่านแล้วยังงง เลยถามก่อนว่าปัญหาคุณคือตรงนี้ใช่ไหม
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: tanapai on กุมภาพันธ์ 22, 2011, 10:28:57 am
แบที่คุณ D_Diamond บอก น่าจะถูกแล้วคับ
ลองแบบนี้คับ

if(lastprofit< lastlot*tp*10)  ------->ที่โค๊ส TP ต้องเป็นตัวพิมพ์เล็ก tp เพราะตอนแรกกำหนดค่าเป็นตัวพิมพ์เล็กอะคับ------

หรือว่าแบบนี้

if(lastprofit< lastlot*sl*10)

น่าจะได้นะคับถ้าไม่ได้จริงๆ เดี๋ยวจะลองหาให้ใหม่
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 22, 2011, 12:36:16 pm
แบที่คุณ D_Diamond บอก น่าจะถูกแล้วคับ
ลองแบบนี้คับ

if(lastprofit< lastlot*tp*10)  ------->ที่โค๊ส TP ต้องเป็นตัวพิมพ์เล็ก tp เพราะตอนแรกกำหนดค่าเป็นตัวพิมพ์เล็กอะคับ------

หรือว่าแบบนี้

if(lastprofit< lastlot*sl*10)

น่าจะได้นะคับถ้าไม่ได้จริงๆ เดี๋ยวจะลองหาให้ใหม่
ลองแล้วครับเบิ้ลไม่หยุดเลยครับ
ปัญหาคุณคือ order ที่5 ใช้ไหมเพราะว่า order ที่ 4 มีการขบได้ 2 แบบแล้วเปิด lot ของ order ที่5 ต่างกันใช่ไหมเพราะผมอ่านแล้วยังงง เลยถามก่อนว่าปัญหาคุณคือตรงนี้ใช่ไหม

ครับผม
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 22, 2011, 04:14:52 pm
ผมมีข้อสงสัย  ในเมื่อโค้ดของอีเอ  มีแต่คำสั่ง เปิดออเดอร์+TP+SL  แต่ไม่มีคำสั่ง ปิดออเดอร์

++++++++++++++++++++
ออเด้อที่ 1 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้  แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
1.แล้วออเดอร์ที่ 4 ปิด 0ได้ยังไง  ออเดอร์ที่5 ปิดไม่ชน TP ได้ยังไง?

2.ณ ตอนนี้ ความต้องของคือ ปิดตรงไหนก็ต้องเบิ้ล  ยกเว้นชน TP กลับไปเริ่มใหม่ ใช่ไหมครับ?
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 22, 2011, 07:06:45 pm
ผมมีข้อสงสัย  ในเมื่อโค้ดของอีเอ  มีแต่คำสั่ง เปิดออเดอร์+TP+SL  แต่ไม่มีคำสั่ง ปิดออเดอร์

++++++++++++++++++++
ออเด้อที่ 1 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้  แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
1.แล้วออเดอร์ที่ 4 ปิด 0ได้ยังไง  ออเดอร์ที่5 ปิดไม่ชน TP ได้ยังไง?

2.ณ ตอนนี้ ความต้องของคือ ปิดตรงไหนก็ต้องเบิ้ล  ยกเว้นชน TP กลับไปเริ่มใหม่ ใช่ไหมครับ?
ตอบครับ
1) ตั่งเวลาปิดครับ  และ ตั่ง tpและsl  สั้นระหว่าง 3- 15 ครับ  เพราะถ้าตั้งเยอะคงจะกินมาจิ้นเยอะ
2) ใช่ครับ  ติดลบก็เบิ้ล เท่ากับ 0 ก้เบิ้ล ไม่ถึงtp ก็เบิ้ล
 ผมยังนึกไม่ออกเลย รบ กวนด้วยนะครับ
ขอบคุณครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 22, 2011, 08:39:37 pm
จากเงื่อนไขคือ  ปิดไม่ถึง TP ให้เบิ้ล ตรงนี้เราต้องดูก่อนครับว่า  TP คือราคาที่อยู่บนกราฟ  ไม่ใช่ กำไรที่เป็นเงิน
การจะเทียบแบบเดิมนั้นผมบอกแล้วว่ามันใช้ได้เหมือนกัน แต่อาจจะติดบั๊ก

การจะเทียบราคาTP ใช้คำสั่ง  OrderTakeprofit() ครับ  ทีนี้เราจะต้องเปลี่ยน ไม่เอากำไรมาเทียบ  แต่เอาราคาปิดมาเทียบแทน

if( OrderClosePrice() != Ordertakeprofit() )   ไม่แน่ใจสะกดถูกไหม

แบบนี้จะเอาราคาปิดของออเดอร์ก่อนหน้ามาดู  ถ้าปิดไม่ชน TP เขียว ออเดอร์ต่อไปต้องเบิ้ล
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 22, 2011, 08:51:55 pm
จากเงื่อนไขคือ  ปิดไม่ถึง TP ให้เบิ้ล ตรงนี้เราต้องดูก่อนครับว่า  TP คือราคาที่อยู่บนกราฟ  ไม่ใช่ กำไรที่เป็นเงิน
การจะเทียบแบบเดิมนั้นผมบอกแล้วว่ามันใช้ได้เหมือนกัน แต่อาจจะติดบั๊ก

การจะเทียบราคาTP ใช้คำสั่ง  OrderTakeprofit() ครับ  ทีนี้เราจะต้องเปลี่ยน ไม่เอากำไรมาเทียบ  แต่เอาราคาปิดมาเทียบแทน

if( OrderClosePrice() != Ordertakeprofit() )   ไม่แน่ใจสะกดถูกไหม

แบบนี้จะเอาราคาปิดของออเดอร์ก่อนหน้ามาดู  ถ้าปิดไม่ชน TP เขียว ออเดอร์ต่อไปต้องเบิ้ล

ขอบคุณมากๆ เลยครับ ขอลองก่อนนะครับ ;D
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 23, 2011, 08:31:55 pm
รบกวนคุณ  D_Diamond อีกครั้งครับ ผมวางโค็ตแบบนี้ถูกไหมครับ ทำไมมันไม่ยอมเปิดออเด้อให้ครับ
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
                     double lastlot=OrderLots();
                     double lastprofit=OrderProfit();
                     double lastlot2=lastlot*2;
                     
               
               if( OrderClosePrice() != OrderTakeProfit() )
                 {
                  if((lastprofit< lastlot*10))
                     {
                         if(a  >  b )
                                {OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
                               
                         else if( a < b )
                                {OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red);  }
                      }
                else
                      {
                         if( a > b )
                                {OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
                               
                         else if( a <= b )
                                {OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red);  }
                               
                       }
                       
                       
                 }
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 23, 2011, 08:44:30 pm
เปลี่ยนเงื่อนอะไรอีกรึเปล่าครับ แล้ว a กับ b นี่คือออะไรครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 23, 2011, 09:02:05 pm
เปลี่ยนเงื่อนอะไรอีกรึเปล่าครับ แล้ว a กับ b นี่คือออะไรครับ

โทษทีครับ ตัวบนผมตั่งใจจะดัดแปลงใส่กับอินดี้ตัวอื่นครับ


OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
                     double lastlot=OrderLots();
                     double lastprofit=OrderProfit();
                     double lastlot2=lastlot*2;
            if( OrderClosePrice() != OrderTakeProfit() )
               {
               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);}
                                    }
                                 }
                           }
}}}
 รบกวนด้วยครับ ขอบคุณครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 23, 2011, 10:47:59 pm
แล้วความต้องการคืออะไรครับ
แล้วปัญหาตอนนี้คือยังไงครับ ละเอียดกว่านี้หน่อย
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 24, 2011, 01:56:41 am
แล้วความต้องการคืออะไรครับ
แล้วปัญหาตอนนี้คือยังไงครับ ละเอียดกว่านี้หน่อย

ครับผม ตามนี้เลยครับ
เพิ่มเติมครับ
ออเด้อที่ 1 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย  ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย  ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้  แต่ไม่ชน tp ให้เบิ้ลล็อตต่อในออเด้อที่ 6
ออเด้อที่ 6 ได้ ชน tp
ออเด้อที่ 7 กลับมาเทรดที่ 0.1 เหมือนเดิมครับ
+++++++
เอาโคตไปวางใส่ macd เบิ้ลล็อตด้านบนแล้วอีเอเปิดออเด้อตามปกติน่ะครับ 
ขอบคุณครับ.. :D  รบกวนคุณD_Diamond และ admin และ เพื่อนๆ ด้วยนะครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: D_Diamond on กุมภาพันธ์ 24, 2011, 06:12:05 pm
แปลว่าตอนนี้ได้ตามความต้องการแล้วเหรอครับ  หรือยังติดปัญหาตรงไหนอีก ถ้ายังติดก็แนบไฟล์ mq4 ไว้นะครับ
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 24, 2011, 06:34:00 pm
แปลว่าตอนนี้ได้ตามความต้องการแล้วเหรอครับ  หรือยังติดปัญหาตรงไหนอีก ถ้ายังติดก็แนบไฟล์ mq4 ไว้นะครับ
ยังครับ อิอิ
เด๋วผมอัพให้นะครับ ตอนนี้ ใช้ gprs อยู่ครับ.. ;D
Title: Re: ผมเขียนโคดแบบนี้ถูกไม๊ครับ
Post by: lovelove on กุมภาพันธ์ 24, 2011, 09:07:54 pm
ขออนุญาติปิดกะทู้นะครับ พอดีทำได้แล้ว เบิ้ลไป 200 กว่าล้อต ไม่เวิคครับ
พอดีพึ่งหัดเขียนด้วยครับ เลยงมอยู่ตั่งนาน อิอิ

ขอบคุณคุณD_Diamond และ admin และ เพื่อนๆ ด้วยนะครับ