Amps

Thursday, January 28, 2016

Moving Average EA Open Order Function

Moving Average EA Open Order Function

Check open order EA MQL4 moving average have new function use as below

Function used for open order MQL4 moving average EA

long Volume[] Series array that contains tick volumes of each bar of the current chart
double Open[] Series array that contains open prices of each bar of the current chart.
double Close[] Series array that contains close prices for each bar of the current chart.
string  Symbol() Returns a text string with the name of the currency pair

int OrderSend
string NULL
Int cmd
0 OP_BUY
1 OP_SELL
2 OP_BUYLIMIT
3 OP_SELLLIMIT
4 OP_BUYSTOP
5 OP_SELLSTOP
double volume Number of lots
Double price Order price (double Bid price for Sell, double Ask price for buy)
Int slippage Maximum price slippage for buy or sell orders
double stoploss
double takeprofit
string comment=NULL Order comment text. Last part of the comment may be changed by server
Int magic=0 Order magic number. May be used as user defined identifier
Datetime expiration=0 Order expiration time (for pending orders only)
color arrow_color=clrNONE Color of open order
Mention to this EA example not have EA Setting properties for Take Profit and Stop Loss, so at first we would add this parameter in to EA properties as below, which TP and Stop Loss that for broker 5 digits that need specify Point*10 and broker 4 digits would specify Point.
Incase no TP and SL that we would specify 0 in to these part.

Properties for Moving Average Parameter as below

extern string TP_SL = " --- TP and Stop Loss ---";
extern bool Broke3_5Digits = True;
extern double My_TP = 10;
extern double My_SL = 10;

//Add extern parameter as Label
extern string MovingAvr = " --- Moving Average parameter ---";
//Change from original
extern int    MovingPeriod  =12;
extern int    MovingShift   =6;
//Add properties
extern ENUM_TIMEFRAMES TimeFrameUsed = PERIOD_CURRENT;
extern ENUM_MA_METHOD   EMA_method1 = MODE_SMA;
extern ENUM_APPLIED_PRICE Applied_Price1 = PRICE_CLOSE;


//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;

//--- get Moving Average 
  // original ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
  //new
  ma=iMA(NULL,TimeFrameUsed,MovingPeriod,MovingShift,EMA_method1,Applied_Price1,0);

//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      // old send sell order: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//---
  }

This Moving Average function that sell condition is Open[1]>ma && Close[1]<ma
Buy condition is Open[1]<ma && Close[1]>ma

in the next chapster would explain about auto close order part in case open order is not the right way.

Wednesday, January 13, 2016

EA MA Optimal Lot or Trading Money Management

Optimal Lot or Trading Money Management

Money Management that nessary for our trading because this would protect our loss could be happen all the time, so this part should have in our Expert Advisor.

The MQL4 function used for this module detail as below.

Function Feature
double NormalizeDouble Return Value of double type with preset accuracy
double value Value with a floating point
int digits Accuracy format, number of digits after point (0-8)
double AccountFreeMargin(); Free margin value of the current account.
double OrderProfit() Returns profit of the currently selected order The net profit value (without swaps or commissions)
int OrdersHistoryTotal(); The number of closed orders in the account history loaded into the terminal. The history list size depends on the current settings of the "Account history" tab of the terminal

Meaning of Moving Average Money Management MQL4 code

double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//Calculate account free margin from Maximum risk, which specified in EA properties

//--- calcuulate number of losses orders without a break
   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);
     }


//This function decrease lot size depend on order pending got loss
//DecreaseFactor would got specified on EA properties

//if(DecreaseFactor>0) would do the lot optimization if specified number greater than 0 
//in EA properties
//----- in DecreaseFactor Function----
//if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
//Check order false status and report

//if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
//            continue;
//order success check
//if(OrderProfit()>0) break;
//if order got profit not do the lot optimization
// if(OrderProfit()<0) losses++;
//     }
//      if(losses>1)
//        lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
//     }

// if order have loss do the lot optimization or decrease lot to next order
//----- end of DecreaseFactor check condition

//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

//---- end of  

Test Run Moving Average EA on youtube
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//Calculate account free margin from Maximum risk, which specified in EA properties

//--- calcuulate number of losses orders without a break
   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);
     }


//This function decrease lot size depend on order pending got loss
//DecreaseFactor would got specified on EA properties

//if(DecreaseFactor>0) would do the lot optimization if specified number greater than 0 
//in EA properties
//----- in DecreaseFactor Function----
//if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
//Check order false status and report

//if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
//            continue;
//order success check
//if(OrderProfit()>0) break;
//if order got profit not do the lot optimization
// if(OrderProfit()<0) losses++;
//     }
//      if(losses>1)
//        lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
//     }

// if order have loss do the lot optimization or decrease lot to next order
//----- end of DecreaseFactor check condition

//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

//---- end of  

Test Run Moving Average EA on youtube