Forex mt4 mt5 trading free รับสอนเขียนเขียน EA จนกว่าจะเขียนเป็น สอนเขียนเป็นราย ชม. ทั้ง on line และ นอกสถานที่ ติดต่อได้ที่ www.appsgoods.com
Amps
Tuesday, February 23, 2016
Moving Average Activate Open and Close order Function MQL4
Moving Average Activate Open and Close order Function MQL4
Basic Function Moving Average Multi order EA Example MQL4
bool IsTradeAllowed | |
string symbol | |
datetime | Time to check status |
Full code on this part OnTick
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- check for history and trading
if(Bars<100 || IsTradeAllowed()==false)
return;
//--- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//---
}
//+------------------------------------------------------------------+
Finish Moving Average EA coding MQL4
Auto Close Order Moving Average EA MQL4
Auto Close Order Moving Average EA MQL4
This part very useful because this part we able to use protect the Take profit and Stop Loss, which would make us live in Forex Trading and got best profit and minimum loss.
MQL4 Basic function used Close Order Moving Average EA MQL4
Table Function OrderSelect MQL4
bool OrderSelect | It returns true if the function succeeds The order must be previously selected by the OrderSelect() function |
Int index | Order index or order ticket depending on the second parameter |
Int select | |
SELECT_BY_POS | index in the order pool |
SELECT_BY_TICKET | index is order ticket |
int pool=MODE_TRADES | |
MODE_TRADES (default) | order selected from trading pool(opened and pending orders) |
MODE_HISTORY | order selected from history pool (closed and canceled order) |
int OrderMagicNumber(); Returns an identifying (magic) number of the currently selected order
string OrderSymbol() Returns symbol name of the currently selected order.
Table Function Order Type MQL4
int OrderType(); | |
Returned value | Should specific when we using |
OP_BUY | |
OP_SELL | |
OP_BUYLIMIT | |
OP_BUYSTOP | |
OP_SELLLIMIT | |
OP_SELLSTOP |
double Open[] contains open prices of each bar of the current chart
double Close[] contains close prices for each bar of the current chart
Table Function Order Close MQL4
bool OrderClose | Closes opened order |
Int ticket | Unique number of the order ticket |
Double lots | Number of lots |
Double price | Closing price |
Int slippage | Value of the maximum price slippage in points |
color arrow_color | Color of the closing arrow |
long Volume[] contains tick volumes of each bar of the current chart
moving average EA close order conditions:
Close Buy when Candle open price over MA reference and close candle price under ma
Open[1]>ma && Close[1]<ma
Close Sell when Candle open price under MA reference and close candle price over ma
Open[1]<ma && Close[1]>ma
Full code moving average close order
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double ma;
//--- 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);
//---
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type
if(OrderType()==OP_BUY)
{
if(Open[1]>ma && Close[1]<ma)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<ma && Close[1]>ma)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
//---
}
This EA prepare example for activate open and close order, next chapster we would find out how to.
Moving Average EA Open Order with Modify Take profit and Stop Loss
Moving Average EA Open Order with Modify Take profit and Stop Loss
In previous chapter we guide moving average properties. In this chapster we would coding Moving Average EA MQL4 for modify take profit and Stop Loss.
Mention to Forex Broker have the exchange digits show 3,5 and 4 digits, which modify Take profit and Stop Loss that depend on broker we trading.
extern string TP_SL = " --- TP and Stop Loss ---";
extern bool Broke3_5Digits = True;
extern double My_TP = 10;
extern double My_SL = 10;
And Moving Average Properties part we would always change as below
//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;
In checking the open order we would add the condition to design broker digits using as follow
void CheckForOpen()
{
double ma;
int res;
// calculate TP and Stop Loss
double BrokerTPSell,BrokerTPBuy;
double BrokerSLSell,BrokerSLBuy;
if(Broke3_5Digits=True)
{
if (My_TP!=0)
{
BrokerTPSell = Bid-((My_TP*Point)*10);
BrokerTPBuy = Ask+((My_TP*Point)*10);
}
if (My_TP==0)
{
BrokerTPSell = 0;
BrokerTPBuy = 0;
}
if (My_SL!=0)
{
BrokerSLSell = Bid+((My_SL*Point)*10);
BrokerSLBuy = Ask-((My_SL*Point)*10);
}
if (My_SL==0)
{
BrokerSLSell = 0;
BrokerSLBuy = 0;
}
}
if(Broke3_5Digits=False)
{
if (My_TP!=0)
{
BrokerTPSell = Bid-(My_TP*Point);
BrokerTPBuy = Ask+(My_TP*Point);
}
if (My_TP==0)
{
BrokerTPSell = 0;
BrokerTPBuy = 0;
}
if (My_SL!=0)
{
BrokerSLSell = Bid+(My_SL*Point);
BrokerSLBuy = Ask-(My_SL*Point);
}
if (My_SL==0)
{
BrokerSLSell = 0;
BrokerSLBuy = 0;
}
}
So the open order we would put the value from Moving Average EA as below
//--- 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)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,BrokerSLSell,BrokerTPSell,"",MAGICMA,0,Red);
return;
}
//--- buy conditions
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,BrokerSLBuy,BrokerTPBuy,"",MAGICMA,0,Blue);
return;
}
//---
}
In next chapster we would detail for auto close order
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;
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
Monday, December 21, 2015
Visual Back Test EA and Indicator MT4
Visual Back Test EA and Indicator MT4
2 step Fastest Test Expert Adviser and Forex Indicator MT4
1. Select MT4 Expert Adviser Tester set properties and parameter TF for back testing click at Visual
Click the Start testing slide bar at visual mode to slowest position and then go to step 2
2. Drag the indicator want to check to the visual chart
Subscribe to:
Posts (Atom)