Chinese





//+----------------------------------------------------------------------------+
//|                                                        China.mq4           |
//|                                          Copyright ?2008, ÀîÌï¾ü           |
//|  WEB:http://www.fx568.cn Call:13853162281 QQ:43372674 MAIL: infome@163.com |
//+----------------------------------------------------------------------------+
#property copyright "Copyright ?2008, ÀîÌï¾ü"
#property link      "http://www.fx568.cn"

extern double     MaximumRisk     =0.5;
extern double     DecreaseFactor  =2;
extern int        TrendSMA        =21;
extern bool       AddStopLoss     =false;
string            comment; 
static double     FPSMMA, myLips, myTheeth, myJaw,Lots;
int               mytext=0;
int init()    {   return(0);  }
int deinit()  {   return(0);  }
int start()
  {  int    ticket,AlSignal,TrSignal,FrSignal,AcSignal,AoSignal,ClSignal;
     comment ="ÀîÌï¾ü13853162281";
     Lots    =LotsOptimized();
     AlSignal=FUNAlSignal();
     TrSignal=FUNTrSignal();
     FrSignal=FUNFrSignal();
     AcSignal=FUNAcSignal();
     AoSignal=FUNAoSignal();
     ClSignal=FUNClSignal();
     FPSMMA  =iMA(Symbol(),0,5,1,MODE_SMMA,PRICE_WEIGHTED,0);
     if(AlSignal==1 && FrSignal==1 && TrSignal==1 && AcSignal==1 && AoSignal==1 && OrdersTotal()<1)
       { ticket=OrderSend(Symbol(), OP_BUY,Lots,Ask,0,0,0,"¸ù¾Ý"+Period()+"·ÖÖÓ×ö¶à"+comment,0,0,Green); return(0);  }
     if(AlSignal==2 && FrSignal==2 && TrSignal==2 && AcSignal==2 && AoSignal==2 && OrdersTotal()<1)
       { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"¸ù¾Ý"+Period()+"·ÖÖÓ×ö¿Õ"+comment,0,0,Red  ); return(0);  }
     if(OrdersTotal()>0 && AddStopLoss==true)  ModifyStopLoss();
     for(int num=0;num<OrdersTotal();num++)
       { OrderSelect(num, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) 
          { if(OrderType()==OP_BUY)
              { if(ClSignal==1) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } }
            else 
              { if(ClSignal==2) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } }
          }
       }
     return(0);
  }
void ModifyStopLoss()
  {  for(int c=0;c<OrdersTotal();c++)
        {  OrderSelect(c,SELECT_BY_POS,MODE_TRADES);
           if(OrderSymbol()==Symbol())
             {  if( OrderType()==OP_BUY  && (OrderStopLoss()<myJaw || OrderStopLoss()==0))
                  { OrderModify(OrderTicket(),OrderOpenPrice(),myJaw,0,0,Green); }
                if( OrderType()==OP_SELL && (OrderStopLoss()>myJaw || OrderStopLoss()==0))
                  { OrderModify(OrderTicket(),OrderOpenPrice(),myJaw,0,0,Red);   }
             }
        }
  }
double LotsOptimized()  
  { double lot;
    int    orders=HistoryTotal();
    int    losses=0;
    lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
    if(DecreaseFactor>0) 
     {  for(int i=orders-1;i>=0;i--)  
           {  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
              if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
              if(OrderProfit()>0) break;
              if(OrderProfit()<0) losses++; 
           }
    if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);   
     }
    if(lot<0.1) lot=0.1;
    return(lot);   
  }
int FUNClSignal()
   {  int myClSignal=0;
      if(FPSMMA<myLips-3*Point)        myClSignal=1;
      if(FPSMMA>myLips+3*Point)        myClSignal=2;
      return(myClSignal);
   }
int FUNAlSignal()
   {  int myAlSignal=0;
      FPSMMA=  iMA(Symbol(),0,5,1,MODE_SMMA,PRICE_WEIGHTED,0);
      myLips=  iAlligator(Symbol(),0,13,8,8,5,5,4,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
      myTheeth=iAlligator(Symbol(),0,13,8,8,5,5,4,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
      myJaw=   iAlligator(Symbol(),0,13,8,8,5,5,4,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
      if( FPSMMA>myLips && myLips>myTheeth && myTheeth>myJaw && iClose(0,0,1)>myTheeth )    
        { myAlSignal=1;         }
      if( FPSMMA<myLips && myLips<myTheeth && myTheeth<myJaw && iClose(0,0,1)<myTheeth )    
        { myAlSignal=2;         }
      return(myAlSignal);
   }
int FUNTrSignal()
   {  int    myTrSignal=0;
      double TPSMMA=TrendSMA;
      double TrendSignal=iMA(Symbol(),0,TPSMMA,1,MODE_SMMA,PRICE_WEIGHTED,0);
      if ( iClose(Symbol(),0,1)>iOpen(Symbol(),0,1) &&  iLow(Symbol(),0,1)>TrendSignal ) 
         { myTrSignal=1;          }
      if ( iClose(Symbol(),0,1)<iOpen(Symbol(),0,1) && iHigh(Symbol(),0,1)<TrendSignal ) 
         { myTrSignal=2;          }
      return(myTrSignal);
   }
int FUNFrSignal()
   { double PreFrac_up,HLowest,HLower,                   PreFrac_down,LHighest,LHigher;
     int    i=0,PreFrac_upIndex,HLowestIndex,HLowerIndex,m=0,PreFrac_downIndex,LHighestIndex,LHigherIndex,myFrSignal;
     double FrSMMA=  iMA(Symbol(),0,5,1,MODE_SMMA,PRICE_WEIGHTED,0);
     while(PreFrac_up==0)                               
       {   PreFrac_up=iFractals(Symbol(),0,MODE_UPPER,i);
           PreFrac_upIndex=i;
           i++;
       }
     HLowestIndex=ArrayMinimum(High,PreFrac_upIndex,0);
     HLowest     =High[HLowestIndex]; 
     HLower      =High[HLowestIndex+1];
     HLowerIndex =HLowestIndex+1; 
     while(PreFrac_down==0) 
       {   PreFrac_down=iFractals(Symbol(),0,MODE_LOWER,m);
           PreFrac_downIndex=m;
           m++;
       }
     LHighestIndex=ArrayMaximum(Low,PreFrac_downIndex,0);
     LHighest     =Low[LHighestIndex];
     LHigher      =Low[LHighestIndex+1];
     LHigherIndex =LHighestIndex+1;
     if(PreFrac_up>myTheeth   && iClose(Symbol(),0,m-1)>myJaw && (iHigh(Symbol(),0,1)>HLower || iHigh(Symbol(),0,1)>PreFrac_up)  ) 
       { myFrSignal=1;        }
     if(PreFrac_down<myTheeth && iClose(Symbol(),0,i-1)<myJaw && (iLow(Symbol(),0,1)<LHigher || iLow(Symbol(),0,1)<PreFrac_down) ) 
       { myFrSignal=2;        }
     return(myFrSignal);
   }
int FUNAcSignal()
   { double AC1;
     int    myAcSignal;
     AC1=iAC(Symbol(),0,1);
     if(AC1>0)       {  myAcSignal=1;       }         
     if(AC1<0)       {  myAcSignal=2;       }
     return(myAcSignal);
   }
int FUNAoSignal()
   {  double AO1;
      int    myAoSignal;
      AO1=iAO(Symbol(),0,1);
      if(AO1>0)      {  myAoSignal=1;        }
      if(AO1<0)      {  myAoSignal=2;        }
      return(myAoSignal);
   }



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains the lowest prices of each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar


Indicator Curves created:


Indicators Used:

Moving average indicator
Bill Williams Alligator
Fractals
Bill Williams Accelerator/Decelerator oscillator
Bill Williams Awesome oscillator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached

It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.71 Total Net Profit:-5642.60

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.17 Total Net Profit:-5287.34

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.37 Total Net Profit:-7101.04

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.31 Total Net Profit:-4827.66

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.65 Total Net Profit:-2555.88

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.08 Total Net Profit:-3195.50

Request Backtest for Chinese


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: