SureForexHedging解析

突破型EA,避开了凌晨时段,对冲保护,简单策略
#property copyright "Copyright 2018, sure fire strategy"
#property link      "sure fire forex strategy"

extern double lots = 0.02;
extern double dollars=3;
extern double incr = 0.02;
extern double multiplier=2;
double sellorderprofit,buyorderprofit;
extern int magic=1;
extern double startHour = 2;
extern double endHour = 22;
extern double hedge = 300;
string pending="null";
double a,b;

int xTime = 0;
bool basketdollars=true;
extern string C0 = "#Do not touch values under this!!#";
extern string C99 = "Logics";

bool runnable=true;
bool init=true;
bool result;
double pBid, pAsk, pp;
int i=0;
datetime timeprev=0;
 double b_close;
 double init_lot;
 double LastBuy;
   double LastSell;
  double s_close;
int init() 
{
  init_lot=lots;
  return (0);
}

int deinit() 
{
  return (0);
}

int start() 
{
     double lda_0[][6];
     ArrayCopyRates(lda_0, Symbol(), PERIOD_D1);  //日线数据
     if (xTime != TimeDay(lda_0[0][0]) && DayOfWeek() != 1 ) 
     {
            xTime = TimeDay(lda_0[0][0]);
            a=iLow(Symbol(), PERIOD_D1, 1);//前日线最低
    }
   Strategy_1();
   if(basketdollars)
   {
     sellorderprofit=0;
     buyorderprofit=0;
   }  

   if(OrdersTotal()>0)
   {
     for(i=0;i<=OrdersTotal();i++)
     {
           OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 
           if(OrderType()==OP_SELL && OrderMagicNumber()== magic)
           {
              if(basketdollars) sellorderprofit=sellorderprofit+ OrderProfit()+ OrderSwap() + OrderCommission();
           }
           if(OrderType()==OP_BUY && OrderMagicNumber()== magic)
           {
              if(basketdollars) buyorderprofit=buyorderprofit+ OrderProfit()+ OrderSwap() + OrderCommission();
           }  
     }
   }

   if(basketdollars) 
   {
     if ((sellorderprofit + buyorderprofit) > dollars) 
     {
        CloseAllTrades();
        lots = init_lot;
        sellorderprofit=0;
        buyorderprofit=0;
        pending="null";
     }
   }
   return(0);
}          
         
int Strategy_1() 
{
  string l_dbl2str_12="Scalp Sure";
   b=iLow(Symbol(), PERIOD_M1, 1);//上一分钟最低
   if (b < a) a=b;//新低

  if (lots > init_lot && (CountOrdersThisPairBUY() == 0 && CountOrdersThisPairSELL() == 0)   ) 
  { lots =init_lot;}

   if (CountOrdersThisPairBUY() == 0 && CountOrdersThisPairSELL() == 0  
 && Hour() >=startHour  && Hour() < endHour  // 2-22点,避开凌晨头皮时段
&& Ask > iHigh(Symbol(), PERIOD_D1, 0)  //日内突破新高
&& AccountFreeMargin() > 0 ) 
 {
      OrderSend(Symbol(), OP_BUY,  lots , Ask, 3, 0,0, l_dbl2str_12, magic, 0, RoyalBlue);
      lots=lots + (incr*multiplier);
      if ( CountOrdersThisPairBUY() > 0 ) 
      {
         OrderSend(Symbol(),OP_SELLSTOP, lots ,Bid-hedge*Point,3,0,0,l_dbl2str_12,magic,0,Red);//下方保护
         pending="SELLSTOP";
      }
   }
   if (CountOrdersThisPairBUY() == 0 && CountOrdersThisPairSELL() == 0  && Hour() >=startHour  
 && Hour() < endHour  
 && Bid < a  && AccountFreeMargin() > 0   ) {
     OrderSend(Symbol(), OP_SELL,  lots , Bid, 3, 0, 0, l_dbl2str_12, magic, 0, Red);
             lots=lots + (incr*multiplier);
             if ( CountOrdersThisPairSELL() > 0    ){
       OrderSend(Symbol(),OP_BUYSTOP, lots ,Ask+hedge*Point,3,0,0,l_dbl2str_12,magic,0,RoyalBlue);
       pending="BUYSTOP";
     }
  }
  if ((CountOrdersThisPairBUYSTOP() == CountOrdersThisPairSELLSTOP()) && pending=="SELLSTOP"  && AccountFreeMargin() > 0
 && (CountOrdersThisPairBUY() > 0 || CountOrdersThisPairSELL() > 0    ) ) {
    lots=lots * multiplier;
            OrderSend(Symbol(),OP_BUYSTOP, lots ,Ask+hedge*Point,3,0,0,l_dbl2str_12,magic,0,RoyalBlue);
    pending="BUYSTOP";
   }
   if ((CountOrdersThisPairBUYSTOP() == CountOrdersThisPairSELLSTOP()) && pending=="BUYSTOP"  && AccountFreeMargin() > 0 
&& (CountOrdersThisPairBUY() > 0 || CountOrdersThisPairSELL() > 0    ) ) 
{
        lots=lots * multiplier;
     OrderSend(Symbol(),OP_SELLSTOP, lots ,Bid-hedge*Point,3,0,0,l_dbl2str_12,magic,0,Red);
     pending="SELLSTOP" ;
   }
   return (0);
}
int CountOrdersThisPairBUY() 
{
  int l_count_0;
  for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) 
  {
     OrderSelect(l_pos_4, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == magic) 
     l_count_0++;
  }
  return (l_count_0);
}
int CountOrdersThisPairSELL() 
{
  int l_count_0 = 0;
  for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) 
  {
     OrderSelect(l_pos_4, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() && OrderType() == OP_SELL  && OrderMagicNumber() == magic) 
     l_count_0++;
  }
  return (l_count_0);
}
int CountOrdersThisPairBUYSTOP() {
  int l_count_0;
  for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) {
     OrderSelect(l_pos_4, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP && OrderMagicNumber() == magic) l_count_0++;
  }
  return (l_count_0);
}
int CountOrdersThisPairSELLSTOP() {
  int l_count_0 = 0;
  for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) {
     OrderSelect(l_pos_4, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP  && OrderMagicNumber() == magic) l_count_0++;
  }
  return (l_count_0);
}
// Close all open trades when in profit
void CloseAllTrades(){
  for (i=OrdersTotal()-1;i>=0;i--){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
            if (OrderType()==OP_SELL && OrderMagicNumber() == magic)result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,CLR_NONE);
            if(result!=TRUE) Print("LastError = ", GetLastError());
            if (OrderType()==OP_BUY && OrderMagicNumber() == magic)result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,CLR_NONE);
            if(result!=TRUE) Print("LastError = ", GetLastError());
            if (OrderType()==OP_BUYSTOP && OrderMagicNumber() == magic)result=OrderDelete(OrderTicket());
            if(result!=TRUE) Print("LastError = ", GetLastError());
            if (OrderType()==OP_SELLSTOP && OrderMagicNumber() == magic)result=OrderDelete(OrderTicket());
            if(result!=TRUE) Print("LastError = ", GetLastError());
        }
     else Print( "Error when order select ", GetLastError());
     }
  }
本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

网友评论(0)