Orders Execution
0
Views
0
Downloads
0
Favorites
EA_Fibo_Avg_001a
/*------------------------------------------------------------------+
| EA_Fibo_Avg_001a.mq4 |
| Copyright © 2010 |
| basisforex@gmail.com |
+------------------------------------------------------------------*/
#property copyright "Copyright © 2010, basisforex@gmail.com"
#property link "basisforex@gmail.com"
//-----
#define MagicNum 10001
//-----
extern int FiboNumPeriod = 11;// Numbers in the following integer sequence;
extern int nAppliedPrice = 0;// PRICE_CLOSE=0; PRICE_OPEN=1; PRICE_HIGH=2; PRICE_LOW=3; PRICE_MEDIAN=4; PRICE_TYPICAL=5; PRICE_WEIGHTED=6;
extern int maPeriod = 21;// Averaging period for calculation;
extern int maMethod = 2;// MODE_SMA=0; MODE_EMA=1; MODE_SMMA=2; MODE_LWMA=3;
//-----
extern int TrailingStop = 140;
extern int TP = 999;
extern int SL = 399;
//-----
extern bool UseMM = false;
extern int PercentMM = 10;
extern double Lots = 0.1;
//+------------------------------------------------------------------+
double GetLots()
{
if (UseMM)
{
double a, maxLot, minLot;
a = (PercentMM * AccountFreeMargin() / 100000);
double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
maxLot = MarketInfo(Symbol(), MODE_MAXLOT );
minLot = MarketInfo(Symbol(), MODE_MINLOT );
a = MathFloor(a / LotStep) * LotStep;
if (a > maxLot) return(maxLot);
else if (a < minLot) return(minLot);
else return(a);
}
else return(Lots);
}
//+------------------------------------------------------------------+
int CalculateCurrentOrders()
{
int orderT = OrdersTotal(), buys = 0, sells = 0;
//----
for(int i = 0; i < orderT; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
if(OrderType() == OP_BUY) buys++;
if(OrderType() == OP_SELL) sells++;
}
}
if(buys > 0) return(buys);
else if(sells > 0) return(-sells);
else return(0);
}
//+------------------------------------------------------------------+
int Get_Broker_Digit()
{
if(Digits == 5 || Digits == 3)
{
return(10);
}
else
{
return(1);
}
}
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;
int digitKoeff = Get_Broker_Digit();
//-----
if(CalculateCurrentOrders() == 0)
{
double rm00 = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 0, 0);
double rm01 = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 0, 1);
double rm10 = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 1, 0);
double rm11 = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 1, 1);
//-------------------------------------------------------
if(rm01 < rm11 && rm00 > rm10)
{
ticket = OrderSend(Symbol(), OP_BUY, GetLots(), Ask, 3 * digitKoeff, Ask - SL * Point * digitKoeff, Ask + TP * Point * digitKoeff, "rsi-ma", MagicNum, 0, Green);
if(ticket > 0)
{
return(0);
}
}
if(rm01 > rm11 && rm00 < rm10)
{
ticket = OrderSend(Symbol(), OP_SELL, GetLots(), Bid, 3 * digitKoeff, Bid + SL * Point * digitKoeff, Bid - TP * Point * digitKoeff, "rsi-ma", MagicNum, 0, Red);
if(ticket > 0)
{
return(0);
}
}
}
//==============================
total = OrdersTotal();
for(cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
double rm00c = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 0, 0);
double rm01c = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 0, 1);
double rm10c = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 1, 0);
double rm11c = iCustom(NULL, 0, "Fibo-Average-2B", FiboNumPeriod, nAppliedPrice, maPeriod, maMethod, 1, 1);
//-----------------------
if(OrderType() == OP_BUY)
{
if(rm01c > rm11c && rm00c < rm10c)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3 * digitKoeff, Violet);
return(0);
}
if(Bid - OrderOpenPrice() > Point * TrailingStop * digitKoeff)
{
if(OrderStopLoss() < Bid - Point * TrailingStop * digitKoeff)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop * digitKoeff, OrderTakeProfit(), 0, Green);
return(0);
}
}
}
else if(OrderType() == OP_SELL)
{
if(rm01c < rm11c && rm00c > rm10c)
{
OrderClose(OrderTicket(), OrderLots(), Ask, 3 * digitKoeff, Violet);
return(0);
}
if((OrderOpenPrice() - Ask) > (Point * TrailingStop * digitKoeff))
{
if(OrderStopLoss() > (Ask + Point * TrailingStop * digitKoeff))
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop * digitKoeff, OrderTakeProfit(), 0, Red);
return(0);
}
}
}
}
}
return(0);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---