traderider forex ไทย

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

  • 2 replies
  • 719 views

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

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

แนวคิดคือ
bay เมื่อ ma 20 > ma 200 และ macd >0
sall เมื่อ ma 20 < ma 200 และ macd <0

close bay เมื่อ ma 20 < ma 50
close sall เมื่อ ma 20 > ma 50

และตอนนี้ที่เทสแล้วมันเปิด ออเดอร์รัวเลยครับ ก็เลยอยากได้แบบเปิด- ปิด ออเดอร์เดียวก่อนแล้วค่อยเปิดออเดอร์ใหม่ ครับ ขอความกรุณาด้วยครับ ขอบคุณครับ
(โค้ตที่ได้ผมเขียนผ่านเว็บนี้ครับ  http://www.forexeadvisor.com/expert_generator.aspx )




extern int MagicNumber=10002;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
 
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 )
  {
     int result=0;
     if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0))&&(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>0)) // Here is your open buy rule
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0))&&(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)<0)) // Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
 
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber
         ) 
        {
         if(OrderType()==OP_BUY) 
           {
              if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) //here is your close buy rule
              {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0) 
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else
           {
                if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) // here is your close sell rule
                {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
                }
            if(TrailingStop>0) 
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}



 (TH)**

Share Topic.

Follow Me.

« แก้ไขครั้งสุดท้าย: 18, สิงหาคม 2019, 09:41:15 AM โดย chiantra »

traderider forex ไทย
traderider forex ไทย
traderider forex ไทย
*

ออฟไลน์ iRuler

  • *
  • 1,231
  • 39
เงื่อนไขเปิด order กับ เงื่อนไขปิด order บางทีมันก็เป็นจริงได้พร้อมกันนะครับ
ดังนั้นถ้าเราเปิด order แล้วเช็คเงื่อนไขปิดในทันที มันก็จะปิด order ที่เพิ่งเปิดไป

ให้หน่วงเวลาก่อน แล้วค่อยเช็คเงื่อนไขปิด
ตัวอย่างนั้นคือเปิด order แล้วจะรอให้เกิดแท่งถัดไปก่อน ถึงจะเช็คเงื่อนไขอีกที

 (TH)**

โค๊ด
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
extern int MagicNumber=10002;
extern double Lots=0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
int bars=-1;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
  {
   if(bars==Bars)
      return;
   bars=Bars;

   double MyPoint=Point;
   if(Digits==3 || Digits==5) MyPoint=Point*10;

   double TheStopLoss=0;
   double TheTakeProfit=0;
   if(TotalOrdersCount()==0)
     {
      int result=0;
      if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0)) && (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>0)) // Here is your open buy rule
        {
         result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
         if(result>0)
           {
            TheStopLoss=0;
            TheTakeProfit=0;
            if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
            if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
            OrderSelect(result,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
           }
         return(0);
        }
      if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0)) && (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)<0)) // Here is your open Sell rule
        {
         result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
         if(result>0)
           {
            TheStopLoss=0;
            TheTakeProfit=0;
            if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
            if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
            OrderSelect(result,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
           }
         return(0);
        }
     }

   for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber
         )
        {
         if(OrderType()==OP_BUY)
           {
            if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) //here is your close buy rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else
           {
            if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) // here is your close sell rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TotalOrdersCount()
  {
   int result=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber) result++;

     }
   return (result);
  }
//+------------------------------------------------------------------+

เงื่อนไขเปิด order กับ เงื่อนไขปิด order บางทีมันก็เป็นจริงได้พร้อมกันนะครับ
ดังนั้นถ้าเราเปิด order แล้วเช็คเงื่อนไขปิดในทันที มันก็จะปิด order ที่เพิ่งเปิดไป

ให้หน่วงเวลาก่อน แล้วค่อยเช็คเงื่อนไขปิด
ตัวอย่างนั้นคือเปิด order แล้วจะรอให้เกิดแท่งถัดไปก่อน ถึงจะเช็คเงื่อนไขอีกที

 (TH)**

โค๊ด
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
extern int MagicNumber=10002;
extern double Lots=0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
int bars=-1;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
  {
   if(bars==Bars)
      return;
   bars=Bars;

   double MyPoint=Point;
   if(Digits==3 || Digits==5) MyPoint=Point*10;

   double TheStopLoss=0;
   double TheTakeProfit=0;
   if(TotalOrdersCount()==0)
     {
      int result=0;
      if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0)) && (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>0)) // Here is your open buy rule
        {
         result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
         if(result>0)
           {
            TheStopLoss=0;
            TheTakeProfit=0;
            if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
            if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
            OrderSelect(result,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
           }
         return(0);
        }
      if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0)) && (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)<0)) // Here is your open Sell rule
        {
         result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
         if(result>0)
           {
            TheStopLoss=0;
            TheTakeProfit=0;
            if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
            if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
            OrderSelect(result,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
           }
         return(0);
        }
     }

   for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber
         )
        {
         if(OrderType()==OP_BUY)
           {
            if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) //here is your close buy rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else
           {
            if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0))) // here is your close sell rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TotalOrdersCount()
  {
   int result=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber) result++;

     }
   return (result);
  }
//+------------------------------------------------------------------+

ขอบคุณมากๆนะครับ  (TH)** (TH)** (TH)**

Tags:
 

เครื่องมือเทรด Forex

ข่าว Forex กราฟ Forex EURUSD GBPUSD GBPJPY ตารางข่าว Forex

เครื่องมือเทรดทองคำ

ราคาทอง วันนี้ ราคาทอง ย้อนหลัง SPDR ล่าสุด กราฟราคาทองคำ วิเคราะห์ ราคาทอง ข่าว ราคาทองคำ ข่าว ราคาน้ำมัน

โบรคเกอร์ Forex

XM Exness FBS Nordfx Land-FX Admiral Markets

Tickmill