Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: Dragonpips ที่ปรับ code แล้ว  (Read 42556 times)

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #15 on: กันยายน 03, 2009, 12:21:45 am »
ดูภาพประกอบเหตุการณ์ error1 ข้างบนกันครับ
อ่านทวนขึ้นมานะครับ กราฟแท่งละ 1 นาที

Quote
2009.08.25 03:58  Dragonpips_siwach01 EURCHF,M1: OrderSend error 130
2009.08.25 03:58  Dragonpips_siwach01 EURCHF,M1: OrderSend error 130
2009.08.25 03:40  Dragonpips_siwach01 EURCHF,M1: close #118 sell 0.30 EURCHF at 1.5182 sl: 1.5222 tp: 1.5175 at price 1.5179
2009.08.25 02:24  Dragonpips_siwach01 EURCHF,M1: OrderSend error 130
2009.08.25 02:20  Dragonpips_siwach01 EURCHF,M1: OrderSend error 130
2009.08.25 02:08  Dragonpips_siwach01 EURCHF,M1: OrderClose error 145
2009.08.25 02:08  Dragonpips_siwach01 EURCHF,M1: OrderClose error 145
2009.08.25 02:08  Dragonpips_siwach01 EURCHF,M1: OrderSend error 130
2009.08.25 02:08  Dragonpips_siwach01 EURCHF,M1: OrderClose error 145



- (เริ่มจากเลข ๑) EA ได้ Sell ไว้ แล้วก็ทยอยปิดทำกำไรให้ตามเส้นที่มันลากให้ดู

- (เลข ๒) อนิจจา...มีSellอยู่สถานะหนึ่งที่ปิดไม่ได้
   EA มันพยายามปิดให้ที่เวลา 02:08 (ที่เลข #2-1#) ตรงนั้นเป็น error 145 ถึงสามที
   เมื่อไม่สามารถปิดสถานะได้ ก็เลยต้องถือลุ้นต่อไปซะงั้น

- ที่เดียวกัน 02:08 มี error 130 ด้วย
   เข้าใจว่า EA พยายามเปิดสถานะ Buy แต่ไม่สำเร็จ เสียโอกาสไปอย่างน่าเสียดาย

- (เลข ๓) ที่เลข #2-2# ซ้อนเหลื่อมกันอยู่ เป็นเวลา 02:20 และ 02:24 มัน error 130
   เข้าใจว่า EA พยายามเปิดสถานะ Sell แต่ไม่สำเร็จ เสียโอกาสไปอย่างน่าเสียดายเช่นกัน

- (เลข ๔) กว่าจะปิดสถานะคงค้าง(จากข้อ ๑)ได้ ก็ปาเข้าไป 03:40 แถมปิดน้อยกว่าพวกที่ Sell พร้อมกันซะอีก ช่วง 02:37 ราคาดีกว่าตั้งเยอะ ทำไมนะมันไม่ปิดให้ตรงนั้น

- (เลข ๕) เวลา 03:58 ที่เลข #3-1#
   เข้าใจว่า EA พยายามเปิดสถานะ Buy แต่ไม่สำเร็จ เสียโอกาสไปอีกแล้ว น่าเสียดายมากๆ

ถ้าเจออย่างนี้กับการเทรดจริง ก็น่าเสียใจจังเลยครับ
คงต้องรบกวนผู้รู้ช่วยด้วยแล้วครับ
« Last Edit: กันยายน 03, 2009, 12:33:07 am by Protector »

Bauer

  • Guest
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #16 on: กันยายน 03, 2009, 12:24:27 am »
มาแล้วครับ รูป กดที่ภาพแล้วมันจะขยายขึ้นมาครับ
อันนี้ผมใช้ตัวที่คุณ Bauer ให้มาเลยนะครับ เซทค่า default ทั้งหมด เทสกับ Echf เดือนสิงหาคมครับ
ใน report ไม่มี mismatch chart เลยครับ แต่ model quality มีแค่ 25% เอง

ภาพที่สองมี error 4107 อยู่ด้วยครับ

เห็นคำว่า order close error แล้วน่ากลัวจัง
แปลว่ามันพยายามปิดสถานะให้เรา แต่ปิดไม่ได้ใช่ไหมครับ?
อย่างนี้ก็แปลว่าเรายังติดสถานะต่อไป
แทนที่จะปิดบวกได้กำไร ก็อาจต้องถือต่อจนกลายเป็นขาดทุนได้ เพราะ EA ปิดorderไม่ได้อย่างนั้นหรือเปล่าครับ

จากรูป 4107 น่าจะเป็นที่ข้อมูลเราไม่ถูกต้องที่ price มีทศยมแปลกๆ ครับ
ส่วน 145 ยังไม่มั่นใจครับ

แต่ทำไม model quanlity แค่ 25% แสดงว่าได้ข้อมูล 1M ของเดือนสิงหามาไม่หมดหรือครับ

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #17 on: กันยายน 03, 2009, 12:39:11 am »
ทำไม model quanlity แค่ 25% แสดงว่าได้ข้อมูล 1M ของเดือนสิงหามาไม่หมดหรือครับ

โฮ่ โพสต่อๆกันเลย เรื่อง Model Quality ไม่ทราบเหมือนกันครับ
ผมก็โหลดมาโดยตรงผ่าน MT4 Fxopen Demo มาเลยนา
เวลาทดสอบก็รันได้ แต่ก็อย่างว่าทำไมไม่รู้มันแจ้งคุณภาพ 25% ครับ

Bauer

  • Guest
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #18 on: กันยายน 03, 2009, 08:06:30 pm »
ทำไม model quanlity แค่ 25% แสดงว่าได้ข้อมูล 1M ของเดือนสิงหามาไม่หมดหรือครับ

โฮ่ โพสต่อๆกันเลย เรื่อง Model Quality ไม่ทราบเหมือนกันครับ
ผมก็โหลดมาโดยตรงผ่าน MT4 Fxopen Demo มาเลยนา
เวลาทดสอบก็รันได้ แต่ก็อย่างว่าทำไมไม่รู้มันแจ้งคุณภาพ 25% ครับ

Model quanlity ให้ดีต้อง 90%

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #19 on: กันยายน 03, 2009, 11:53:04 pm »
แถวๆ นี้หรือเปล่าครับ ชุดคำสั่งปิด position? ผมยังอ่านแล้วไม่เข้าใจว่ามันคำนวนกับอะไรบ้างครับ
แต่อยากทดลองเพิ่มคำสั่งว่า ถ้าบวก 4 แล้วให้คำนวนกับเงื่อนไขอื่นๆเพื่อเตรียมปิดได้ถ้าไม่เห็นว่าจะไปได้ไกลกว่านี้อ่ะครับ พอจะมีหนทางดีๆไหมครับ


Quote
//Close existing opening order
   for (int l_pos_24 = 0; l_pos_24 < OrdersTotal(); l_pos_24++) {
      closeOrder_1(l_pos_24);
   }
   for (int l_pos_28 = 0; l_pos_28 < OrdersTotal(); l_pos_28++) {
      closeOrder_2(l_pos_28);
   }
   
   
   if (Ask < iOpen(Symbol(), PERIOD_M5, 0) - price_diff_01) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 0) + price_diff_01) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 1) - price_diff_02) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 1) + price_diff_02) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 2) - price_diff_03) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 2) + price_diff_03) return;
   if (Ask - Bid > Spread * point_decimal) return (0);
   
   half_maxtrade_int = NormalizeDouble(MaxTrades / 2, 0);
   lot_min = MarketInfo(Symbol(), MODE_MINLOT);
   lot_max = MarketInfo(Symbol(), MODE_MAXLOT);
   leverage = AccountLeverage();
   lot_size_price = MarketInfo(Symbol(), MODE_LOTSIZE);
   open_lot_1 = MathMin(lot_max, MathMax(lot_min, Lots));
   if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * open_lot_1 * lot_size_price / leverage){
      open_lot_1 = NormalizeDouble(AccountFreeMargin() * Risk / lot_size_price, LotDecimal);
      }else{
      open_lot_1 = lot_min;
   }   
   open_lot_1 = MathMax(lot_min, MathMin(lot_max, NormalizeDouble(open_lot_1 / lot_min, 0) * lot_min));
   open_lot_1 = NormalizeDouble(open_lot_1 / half_maxtrade_int, LotDecimal);
   if (open_lot_1 > LotLimit) open_lot_1 = LotLimit;
   open_lot_1=MathMax(open_lot_1,lot_min);//Added by siwach;
   if (AccountFreeMargin() < Ask * open_lot_1 * lot_size_price / leverage) {
      Print("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      Comment("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      return;
   }
   
   double l_irsi_64 = iRSI(NULL, PERIOD_M15, 6, PRICE_CLOSE, 0);
   double l_irsi_72 = iRSI(NULL, PERIOD_M1, 20, PRICE_CLOSE, 0);
   double iMA_01 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_02 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_03 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double iMA_04 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double l_icci_96 = iCCI(Symbol(), PERIOD_M15, 14, PRICE_CLOSE, 0);
   double l_icci_104 = iCCI(Symbol(), PERIOD_M5, 42, PRICE_CLOSE, 0);
   double l_icci_112 = iCCI(Symbol(), PERIOD_M1, 210, PRICE_CLOSE, 0);
   double l_icci_120 = iCCI(Symbol(), PERIOD_M1, 80, PRICE_CLOSE, 0);
   double l_imomentum_136 = iMomentum(Symbol(), PERIOD_M5, 4, PRICE_CLOSE, 0);
   double l_iwpr_160 = iWPR(Symbol(), PERIOD_M5, 14, 0);
   double l_ibands_184 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_UPPER, 1);
   double l_ibands_200 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_LOWER, 1);
   double l_ima_208 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_HIGH, 0);
   double l_ima_224 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_LOW, 0);
   if (IsTradeTime() && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition1()){
         if (l_irsi_64 < 30.0 || l_irsi_72 < 36.0 && iMA_01 >= Ask + 20.0 * point_decimal) {
            if (allow_buy_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }   
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_BUY, open_lot_2, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#1-1#", Blue);
               allow_buy_1 = FALSE;
               allow_sell_1 = TRUE;
            }
         }
         if (l_irsi_64 > 70.0 || l_irsi_72 > 64.0 && iMA_02 <= Bid - 20.0 * point_decimal) {
            if (allow_sell_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }     
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_SELL, open_lot_2, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#1-2#", Blue);
               allow_sell_1 = FALSE;
               allow_buy_1 = TRUE;
            }
         }
         if (l_irsi_64 > 40.0 && l_irsi_64 < 60.0) {
            allow_sell_1 = TRUE;
            allow_buy_1 = TRUE;
         }
      }
   }
   if (IsTradeTime() && Fractals_M15_up_lo_diff_point < stop_loss_point_2 && ATR_M15_4_0_point < atr_value && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition2()){
         if (l_icci_104 <= -150.0 && l_icci_112 <= -120.0 || l_icci_96 <= -150.0 && l_icci_112 <= -120.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_2) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#2-1#", Blue);
               allow_buy_2 = FALSE;
               allow_sell_2 = TRUE;
            }
         }
         if (l_icci_104 >= 150.0 && l_icci_112 >= 120.0 || l_icci_96 >= 150.0 && l_icci_112 >= 120.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_2) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#2-2#", Blue);
               allow_sell_2 = FALSE;
               allow_buy_2 = TRUE;
            }
         }
         if (l_icci_96 < 50.0 && l_icci_96 > -50.0) {
            allow_sell_2 = TRUE;
            allow_buy_2 = TRUE;
         }
      }
      if (!ExistPosition3()){
         if (l_imomentum_136 >= 99.85 && l_icci_120 <= -200.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_3) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Fractals_M15_lower - stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#3-1#", Blue);
               allow_buy_3 = FALSE;
               allow_sell_3 = TRUE;
            }
         }
         if (l_imomentum_136 <= 100.15 && l_icci_120 >= 200.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_3) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Fractals_M15_upper + stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#3-2#", Blue);
               allow_sell_3 = FALSE;
               allow_buy_3 = TRUE;
            }
         }
         if (l_icci_120 >= -50.0 && l_icci_120 <= 50.0) {
            allow_sell_3 = TRUE;
            allow_buy_3 = TRUE;
         }
      }
      if (!ExistPosition4()) {
         if (l_iwpr_160 <= -90.0 && l_ima_224 < l_ibands_200 && Ask <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_4) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Ask - stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_4, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#4-1#", Blue);
               allow_buy_4 = FALSE;
               allow_sell_4 = TRUE;
            }
         }
         if (l_iwpr_160 >= -10.0 && l_ima_208 > l_ibands_184 && Bid >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_4) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Bid + stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#4-2#", Blue);
               allow_sell_4 = FALSE;
               allow_buy_4 = TRUE;
            }
         }
         if (l_irsi_64 < 60.0 && l_irsi_64 > 40.0) {
            allow_sell_4 = TRUE;
            allow_buy_4 = TRUE;
         }
      }
   }
   return (0);

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #20 on: กันยายน 04, 2009, 03:24:31 am »
คำสั่งปิด Order คือ Orderclose ครับ ค้นหา Orderclose ครับก็จะเจอส่วนปิด order ครับ

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #21 on: กันยายน 04, 2009, 08:15:43 am »
เจอปัญหาครับ
Quote
order sell 0.01 EURCHF. opening at 1.5146 sl: 1.5178 tp: 1.5139 failed [Invalid S/L or T/P]
อันนี้มันกำหนด T/P ต่ำไป (ต่ำกว่า 10 จุด) มันเลยฟ้องInvalid S/L or T/P
มีวิธีเขียนคำสั่งที่กำหนด T/P ให้ขั้นต่ำต้อง 10 ช่องเสมอไหมครับ

Bauer

  • Guest
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #22 on: กันยายน 04, 2009, 09:17:29 am »
แถวๆ นี้หรือเปล่าครับ ชุดคำสั่งปิด position? ผมยังอ่านแล้วไม่เข้าใจว่ามันคำนวนกับอะไรบ้างครับ
แต่อยากทดลองเพิ่มคำสั่งว่า ถ้าบวก 4 แล้วให้คำนวนกับเงื่อนไขอื่นๆเพื่อเตรียมปิดได้ถ้าไม่เห็นว่าจะไปได้ไกลกว่านี้อ่ะครับ พอจะมีหนทางดีๆไหมครับ


Quote
//Close existing opening order
   for (int l_pos_24 = 0; l_pos_24 < OrdersTotal(); l_pos_24++) {
      closeOrder_1(l_pos_24);
   }
   for (int l_pos_28 = 0; l_pos_28 < OrdersTotal(); l_pos_28++) {
      closeOrder_2(l_pos_28);
   }
   
   
   if (Ask < iOpen(Symbol(), PERIOD_M5, 0) - price_diff_01) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 0) + price_diff_01) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 1) - price_diff_02) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 1) + price_diff_02) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 2) - price_diff_03) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 2) + price_diff_03) return;
   if (Ask - Bid > Spread * point_decimal) return (0);
   
   half_maxtrade_int = NormalizeDouble(MaxTrades / 2, 0);
   lot_min = MarketInfo(Symbol(), MODE_MINLOT);
   lot_max = MarketInfo(Symbol(), MODE_MAXLOT);
   leverage = AccountLeverage();
   lot_size_price = MarketInfo(Symbol(), MODE_LOTSIZE);
   open_lot_1 = MathMin(lot_max, MathMax(lot_min, Lots));
   if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * open_lot_1 * lot_size_price / leverage){
      open_lot_1 = NormalizeDouble(AccountFreeMargin() * Risk / lot_size_price, LotDecimal);
      }else{
      open_lot_1 = lot_min;
   }   
   open_lot_1 = MathMax(lot_min, MathMin(lot_max, NormalizeDouble(open_lot_1 / lot_min, 0) * lot_min));
   open_lot_1 = NormalizeDouble(open_lot_1 / half_maxtrade_int, LotDecimal);
   if (open_lot_1 > LotLimit) open_lot_1 = LotLimit;
   open_lot_1=MathMax(open_lot_1,lot_min);//Added by siwach;
   if (AccountFreeMargin() < Ask * open_lot_1 * lot_size_price / leverage) {
      Print("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      Comment("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      return;
   }
   
   double l_irsi_64 = iRSI(NULL, PERIOD_M15, 6, PRICE_CLOSE, 0);
   double l_irsi_72 = iRSI(NULL, PERIOD_M1, 20, PRICE_CLOSE, 0);
   double iMA_01 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_02 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_03 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double iMA_04 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double l_icci_96 = iCCI(Symbol(), PERIOD_M15, 14, PRICE_CLOSE, 0);
   double l_icci_104 = iCCI(Symbol(), PERIOD_M5, 42, PRICE_CLOSE, 0);
   double l_icci_112 = iCCI(Symbol(), PERIOD_M1, 210, PRICE_CLOSE, 0);
   double l_icci_120 = iCCI(Symbol(), PERIOD_M1, 80, PRICE_CLOSE, 0);
   double l_imomentum_136 = iMomentum(Symbol(), PERIOD_M5, 4, PRICE_CLOSE, 0);
   double l_iwpr_160 = iWPR(Symbol(), PERIOD_M5, 14, 0);
   double l_ibands_184 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_UPPER, 1);
   double l_ibands_200 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_LOWER, 1);
   double l_ima_208 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_HIGH, 0);
   double l_ima_224 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_LOW, 0);
   if (IsTradeTime() && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition1()){
         if (l_irsi_64 < 30.0 || l_irsi_72 < 36.0 && iMA_01 >= Ask + 20.0 * point_decimal) {
            if (allow_buy_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }   
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_BUY, open_lot_2, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#1-1#", Blue);
               allow_buy_1 = FALSE;
               allow_sell_1 = TRUE;
            }
         }
         if (l_irsi_64 > 70.0 || l_irsi_72 > 64.0 && iMA_02 <= Bid - 20.0 * point_decimal) {
            if (allow_sell_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }     
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_SELL, open_lot_2, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#1-2#", Blue);
               allow_sell_1 = FALSE;
               allow_buy_1 = TRUE;
            }
         }
         if (l_irsi_64 > 40.0 && l_irsi_64 < 60.0) {
            allow_sell_1 = TRUE;
            allow_buy_1 = TRUE;
         }
      }
   }
   if (IsTradeTime() && Fractals_M15_up_lo_diff_point < stop_loss_point_2 && ATR_M15_4_0_point < atr_value && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition2()){
         if (l_icci_104 <= -150.0 && l_icci_112 <= -120.0 || l_icci_96 <= -150.0 && l_icci_112 <= -120.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_2) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#2-1#", Blue);
               allow_buy_2 = FALSE;
               allow_sell_2 = TRUE;
            }
         }
         if (l_icci_104 >= 150.0 && l_icci_112 >= 120.0 || l_icci_96 >= 150.0 && l_icci_112 >= 120.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_2) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#2-2#", Blue);
               allow_sell_2 = FALSE;
               allow_buy_2 = TRUE;
            }
         }
         if (l_icci_96 < 50.0 && l_icci_96 > -50.0) {
            allow_sell_2 = TRUE;
            allow_buy_2 = TRUE;
         }
      }
      if (!ExistPosition3()){
         if (l_imomentum_136 >= 99.85 && l_icci_120 <= -200.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_3) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Fractals_M15_lower - stop_loss_point_1 * point_decimal;
               if ((Ask-stop_loss_price_1)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point){ //Added by siwach
                   stop_loss_price_1=Ask-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;   
                   Alert("Calculated stop loss was less than minimum allowable stop loss,mininum allowable stop loss will be used");
                }   

               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#3-1#", Blue);
               allow_buy_3 = FALSE;
               allow_sell_3 = TRUE;
            }
         }
         if (l_imomentum_136 <= 100.15 && l_icci_120 >= 200.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_3) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Fractals_M15_upper + stop_loss_point_1 * point_decimal;
               if ((stop_loss_price_1-Bid)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point){ //Added by siwach
                  Alert("Calculated stop loss was less than minimum allowable stop loss,mininum allowable stop loss will be used");
                  stop_loss_price_1=Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               } 

               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#3-2#", Blue);
               allow_sell_3 = FALSE;
               allow_buy_3 = TRUE;
            }
         }
         if (l_icci_120 >= -50.0 && l_icci_120 <= 50.0) {
            allow_sell_3 = TRUE;
            allow_buy_3 = TRUE;
         }
      }
      if (!ExistPosition4()) {
         if (l_iwpr_160 <= -90.0 && l_ima_224 < l_ibands_200 && Ask <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_4) {
               target_price_1 = Fractals_M15_upper;
               stop_loss_price_1 = Ask - stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_4, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#4-1#", Blue);
               allow_buy_4 = FALSE;
               allow_sell_4 = TRUE;
            }
         }
         if (l_iwpr_160 >= -10.0 && l_ima_208 > l_ibands_184 && Bid >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_4) {
               target_price_1 = Fractals_M15_lower;
               stop_loss_price_1 = Bid + stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#4-2#", Blue);
               allow_sell_4 = FALSE;
               allow_buy_4 = TRUE;
            }
         }
         if (l_irsi_64 < 60.0 && l_irsi_64 > 40.0) {
            allow_sell_4 = TRUE;
            allow_buy_4 = TRUE;
         }
      }
   }
   return (0);

จะมีจุด open ที่มีโอกาสที่ stop loss จะน้อยเกินไป ให้เพิ่ม code ตามที่ผม mark น่าจะช่วยได้ คือ ถ้า stop loss น้อยเกินไป ให้ใช้ค่าต่ำสุดที่อนุญาตครับ

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #23 on: กันยายน 04, 2009, 09:37:54 am »
ขอบคุณมากครับ ไวจริงๆ
แต่ตอนนี้รู้สึกปัญหาจะไปอยู่ที่ T/P แทนซะแล้วครับ
Quote
Quote
order sell 0.01 EURCHF. opening at 1.5146 sl: 1.5178 tp: 1.5139 failed [Invalid S/L or T/P]
อันนี้มันกำหนด T/P ต่ำไป (ต่ำกว่า 10 จุด) มันเลยฟ้องInvalid S/L or T/P
มีวิธีเขียนคำสั่งที่กำหนด T/P ให้ขั้นต่ำต้อง 10 ช่องเสมอไหมครับ

โอย งง พอย้อนกลับไปดู order ที่ผ่านๆมาก็เห็นมันรับorderที่ T/P แค่ 9 ช่องก็มี
ทำไมเป็นงั้น (ใช้ของ FXOpen ซึ่งปกติจะบังคับ T/P 10 ช่องจากราคา)
« Last Edit: กันยายน 04, 2009, 10:01:10 am by Protector »

Bauer

  • Guest
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #24 on: กันยายน 04, 2009, 10:19:48 am »
แถวๆ นี้หรือเปล่าครับ ชุดคำสั่งปิด position? ผมยังอ่านแล้วไม่เข้าใจว่ามันคำนวนกับอะไรบ้างครับ
แต่อยากทดลองเพิ่มคำสั่งว่า ถ้าบวก 4 แล้วให้คำนวนกับเงื่อนไขอื่นๆเพื่อเตรียมปิดได้ถ้าไม่เห็นว่าจะไปได้ไกลกว่านี้อ่ะครับ พอจะมีหนทางดีๆไหมครับ


Quote
//Close existing opening order
   for (int l_pos_24 = 0; l_pos_24 < OrdersTotal(); l_pos_24++) {
      closeOrder_1(l_pos_24);
   }
   for (int l_pos_28 = 0; l_pos_28 < OrdersTotal(); l_pos_28++) {
      closeOrder_2(l_pos_28);
   }
  
  
   if (Ask < iOpen(Symbol(), PERIOD_M5, 0) - price_diff_01) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 0) + price_diff_01) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 1) - price_diff_02) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 1) + price_diff_02) return;
   if (Ask < iOpen(Symbol(), PERIOD_M5, 2) - price_diff_03) return;
   if (Bid > iOpen(Symbol(), PERIOD_M5, 2) + price_diff_03) return;
   if (Ask - Bid > Spread * point_decimal) return (0);
  
   half_maxtrade_int = NormalizeDouble(MaxTrades / 2, 0);
   lot_min = MarketInfo(Symbol(), MODE_MINLOT);
   lot_max = MarketInfo(Symbol(), MODE_MAXLOT);
   leverage = AccountLeverage();
   lot_size_price = MarketInfo(Symbol(), MODE_LOTSIZE);
   open_lot_1 = MathMin(lot_max, MathMax(lot_min, Lots));
   if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * open_lot_1 * lot_size_price / leverage){
      open_lot_1 = NormalizeDouble(AccountFreeMargin() * Risk / lot_size_price, LotDecimal);
      }else{
      open_lot_1 = lot_min;
   }  
   open_lot_1 = MathMax(lot_min, MathMin(lot_max, NormalizeDouble(open_lot_1 / lot_min, 0) * lot_min));
   open_lot_1 = NormalizeDouble(open_lot_1 / half_maxtrade_int, LotDecimal);
   if (open_lot_1 > LotLimit) open_lot_1 = LotLimit;
   open_lot_1=MathMax(open_lot_1,lot_min);//Added by siwach;
   if (AccountFreeMargin() < Ask * open_lot_1 * lot_size_price / leverage) {
      Print("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      Comment("Low Account Balance. Lots = ", open_lot_1, " , Free Margin = ", AccountFreeMargin());
      return;
   }
  
   double l_irsi_64 = iRSI(NULL, PERIOD_M15, 6, PRICE_CLOSE, 0);
   double l_irsi_72 = iRSI(NULL, PERIOD_M1, 20, PRICE_CLOSE, 0);
   double iMA_01 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_02 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double iMA_03 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double iMA_04 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 2), 4);
   double l_icci_96 = iCCI(Symbol(), PERIOD_M15, 14, PRICE_CLOSE, 0);
   double l_icci_104 = iCCI(Symbol(), PERIOD_M5, 42, PRICE_CLOSE, 0);
   double l_icci_112 = iCCI(Symbol(), PERIOD_M1, 210, PRICE_CLOSE, 0);
   double l_icci_120 = iCCI(Symbol(), PERIOD_M1, 80, PRICE_CLOSE, 0);
   double l_imomentum_136 = iMomentum(Symbol(), PERIOD_M5, 4, PRICE_CLOSE, 0);
   double l_iwpr_160 = iWPR(Symbol(), PERIOD_M5, 14, 0);
   double l_ibands_184 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_UPPER, 1);
   double l_ibands_200 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_LOWER, 1);
   double l_ima_208 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_HIGH, 0);
   double l_ima_224 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_LOW, 0);
   if (IsTradeTime() && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition1()){
         if (l_irsi_64 < 30.0 || l_irsi_72 < 36.0 && iMA_01 >= Ask + 20.0 * point_decimal) {
            if (allow_buy_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }  
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_BUY, open_lot_2, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#1-1#", Blue);
               allow_buy_1 = FALSE;
               allow_sell_1 = TRUE;
            }
         }
         if (l_irsi_64 > 70.0 || l_irsi_72 > 64.0 && iMA_02 <= Bid - 20.0 * point_decimal) {
            if (allow_sell_1) {
               target_price_1 = 0;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               if (NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal) < LotLimit){
                  open_lot_2 = NormalizeDouble(open_lot_1 + open_lot_1 / half_maxtrade_int, LotDecimal);
                  }else{
                  open_lot_2 = open_lot_1;
               }      
               open_lot_2=MathMax(lot_min,open_lot_2); //Added by siwach
               OrderSend(Symbol(), OP_SELL, open_lot_2, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_1, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#1-2#", Blue);
               allow_sell_1 = FALSE;
               allow_buy_1 = TRUE;
            }
         }
         if (l_irsi_64 > 40.0 && l_irsi_64 < 60.0) {
            allow_sell_1 = TRUE;
            allow_buy_1 = TRUE;
         }
      }
   }
   if (IsTradeTime() && Fractals_M15_up_lo_diff_point < stop_loss_point_2 && ATR_M15_4_0_point < atr_value && order_count < MaxTrades && price_betw_fractal_lo_up) {
      if (!ExistPosition2()){
         if (l_icci_104 <= -150.0 && l_icci_112 <= -120.0 || l_icci_96 <= -150.0 && l_icci_112 <= -120.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_2) {
               target_price_1 = Fractals_M15_upper;
               if ((target_price_1-Ask)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Ask - stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#2-1#", Blue);
               allow_buy_2 = FALSE;
               allow_sell_2 = TRUE;
            }
         }
         if (l_icci_104 >= 150.0 && l_icci_112 >= 120.0 || l_icci_96 >= 150.0 && l_icci_112 >= 120.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_2) {
               target_price_1 = Fractals_M15_lower;
               if ((Bid-target_price_1)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Bid + stop_loss_point_1 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_2, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#2-2#", Blue);
               allow_sell_2 = FALSE;
               allow_buy_2 = TRUE;
            }
         }
         if (l_icci_96 < 50.0 && l_icci_96 > -50.0) {
            allow_sell_2 = TRUE;
            allow_buy_2 = TRUE;
         }
      }
      if (!ExistPosition3()){
         if (l_imomentum_136 >= 99.85 && l_icci_120 <= -200.0 && Bid <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_3) {
               target_price_1 = Fractals_M15_upper;
               if ((target_price_1-Ask)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Fractals_M15_lower - stop_loss_point_1 * point_decimal;
               if ((Ask-stop_loss_price_1)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point){ //Added by siwach
                   stop_loss_price_1=Ask-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;    
                   Alert("Calculated stop loss was less than minimum allowable stop loss,mininum allowable stop loss will be used");
                }  

               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#3-1#", Blue);
               allow_buy_3 = FALSE;
               allow_sell_3 = TRUE;
            }
         }
         if (l_imomentum_136 <= 100.15 && l_icci_120 >= 200.0 && Ask >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_3) {
               target_price_1 = Fractals_M15_lower;
               if ((Bid-target_price_1)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Fractals_M15_upper + stop_loss_point_1 * point_decimal;
              if ((stop_loss_price_1-Bid)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point){ //Added by siwach
                  Alert("Calculated stop loss was less than minimum allowable stop loss,mininum allowable stop loss will be used");
                  stop_loss_price_1=Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               }  

               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#3-2#", Blue);
               allow_sell_3 = FALSE;
               allow_buy_3 = TRUE;
            }
         }
         if (l_icci_120 >= -50.0 && l_icci_120 <= 50.0) {
            allow_sell_3 = TRUE;
            allow_buy_3 = TRUE;
         }
      }
      if (!ExistPosition4()) {
         if (l_iwpr_160 <= -90.0 && l_ima_224 < l_ibands_200 && Ask <= Fractals_M15_center - fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_buy_4) {
               target_price_1 = Fractals_M15_upper;
               if ((target_price_1-Ask)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Ask - stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_BUY, open_lot_1, Ask, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_4, 0, Green);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Ask, "#4-1#", Blue);
               allow_buy_4 = FALSE;
               allow_sell_4 = TRUE;
            }
         }
         if (l_iwpr_160 >= -10.0 && l_ima_208 > l_ibands_184 && Bid >= Fractals_M15_center + fractal_target_point * point_decimal) {
            if (0 < half_maxtrade_int && allow_sell_4) {
               target_price_1 = Fractals_M15_lower;
               if ((Bid-target_price_1)<MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)target_price_1=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
               stop_loss_price_1 = Bid + stop_loss_point_2 * point_decimal;
               OrderSend(Symbol(), OP_SELL, open_lot_1, Bid, Slippage, stop_loss_price_1, target_price_1, "Dragonpips", magic_no_3, 0, Red);
               drawMatchPoint(TimeToStr(Time[0],TIME_DATE)+TimeToStr(Time[0],TIME_MINUTES), Time[0], Bid, "#4-2#", Blue);
               allow_sell_4 = FALSE;
               allow_buy_4 = TRUE;
            }
         }
         if (l_irsi_64 < 60.0 && l_irsi_64 > 40.0) {
            allow_sell_4 = TRUE;
            allow_buy_4 = TRUE;
         }
      }
   }
   return (0);

จะมีจุด open ที่มีโอกาสที่ stop loss จะน้อยเกินไป ให้เพิ่ม code ตามที่ผม mark น่าจะช่วยได้ คือ ถ้า stop loss น้อยเกินไป ให้ใช้ค่าต่ำสุดที่อนุญาตครับ

เพิ่มเติมครับ ส่วนของ target price แก้ไขตามที่ mark น้ำเงินครับ ผมเปลี่ยนให้ดูแค่จุดเดียวเหลืออีก 2 จุด buy 2 จุด sell ต้องแก้นะครับ สำหรับจุดที่ target price เป็น 0 ไม่ต้องเพิ่มบรรทัดนี้นะครับ (แก้ไขเพิ่มคูณ point) ลองดูนะครับยังไม่ได้ test
แก้ไข : ใส่เพิ่มให้ครบเลยแล้วกัน
« Last Edit: กันยายน 04, 2009, 11:37:42 am by Bauer »

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #25 on: กันยายน 04, 2009, 11:29:41 am »
Quote
ผมเปลี่ยนให้ดูแค่จุดเดียวเหลืออีก 2 จุด buy 2 จุด sell ต้องแก้นะครับ สำหรับจุดที่ target price เป็น 0 ไม่ต้องเพิ่มบรรทัดนี้นะครับ (แก้ไขเพิ่มคูณ point)


อ่านแล้วกลับไปเปิดโค้ดดูแต่ไม่เข้าใจ
ไม่กล้าไปแตะเลยครับ เพราะผมยังไม่เข้าใจระบบโค้ดของมัน
กลัวไปใส่แล้วทำมันพัง ขอโทษด้วยครับเห็นทีต้องรบกวนทำให้แล้วครับ  ;D

Bauer

  • Guest
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #26 on: กันยายน 04, 2009, 11:38:17 am »
Quote
ผมเปลี่ยนให้ดูแค่จุดเดียวเหลืออีก 2 จุด buy 2 จุด sell ต้องแก้นะครับ สำหรับจุดที่ target price เป็น 0 ไม่ต้องเพิ่มบรรทัดนี้นะครับ (แก้ไขเพิ่มคูณ point)


อ่านแล้วกลับไปเปิดโค้ดดูแต่ไม่เข้าใจ
ไม่กล้าไปแตะเลยครับ เพราะผมยังไม่เข้าใจระบบโค้ดของมัน
กลัวไปใส่แล้วทำมันพัง ขอโทษด้วยครับเห็นทีต้องรบกวนทำให้แล้วครับ  ;D

เพิ่มให้ครบแล้วครับ กลับไปดูเลย

Protector

  • Jr. Member
  • **
  • Posts: 84
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #27 on: กันยายน 04, 2009, 12:18:09 pm »
โอ้ว อยากจะบอกว่ามันยอดมากเลยฮะ Error ลดจำนวนไปเยอะเลย (แต่ก็ยังไม่หมด :P)
อย่างไรก็ตามมันก็ทำให้ระบบทดสอบสามารถทำงานได้ดีขึ้นมาก
ขอขอบคุณจริงๆครับ ขออวยพรให้มีความสุขกันมากๆครับ
ความเสียสละของทุกคนทำให้ผมสนใจการเขียนและพัฒนาEAมากขึ้นๆ _/|\_
« Last Edit: กันยายน 04, 2009, 12:30:34 pm by Protector »

sunever1

  • Jr. Member
  • **
  • Posts: 57
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #28 on: กันยายน 04, 2009, 02:54:29 pm »
เยี่ยมเลย 55+ ผมต้องศึกษาบ้างละ

thep

  • Newbie
  • *
  • Posts: 1
Re: Dragonpips ที่ปรับ code แล้ว
« Reply #29 on: กันยายน 05, 2009, 01:41:58 am »
ขอตัวที่แก้แล้ว ได้ป่าวครับ จะเอาไปลองดู ;D