150 lines
2.6 KiB
Markdown
150 lines
2.6 KiB
Markdown
# RSI MA Cross Strategy
|
|
|
|
EURUSD M15 Chart is Open
|
|
|
|
## Strategy Used
|
|
|
|
- 10 Period RSI:
|
|
- ;
|
|
- ;
|
|
- 5 Period EMA;
|
|
- 10 Period MA;
|
|
|
|
works by over solde and over baughts on rsi and then check mas;
|
|
|
|
## Implementation
|
|
|
|
```mq4
|
|
//
|
|
// Fast MA ...
|
|
input int fastMaPeriod = 20; // Fast MA Bars
|
|
input ENUM_MA_METHOD fastMaMethod = MODE_EMA; // Fast MA Method
|
|
input ENUM_APPLIED_PRICE fastMaAppliedPrice = PRICE_CLOSE; // Fast MA Applied Price
|
|
|
|
//
|
|
// Slow MA ...
|
|
input int slowMaPeriod = 50; // Slow MA Bars
|
|
input ENUM_MA_METHOD slowMaMethod = MODE_EMA; // Slow MA Method
|
|
input ENUM_APPLIED_PRICE slowMaAppliedPrice = PRICE_CLOSE; // Slow MA Applied Price
|
|
|
|
//
|
|
// SL / TP ...
|
|
input int stopLossPips = 50; // SL Pips
|
|
input int takeProfitPips = 50; // TP Pips
|
|
|
|
//
|
|
// Trade ...
|
|
intput double orderSize = 0.01; // Order size in Lots
|
|
|
|
//
|
|
// Buffers ...
|
|
double fastMaBuffer[];
|
|
double slowMaBuffer[];
|
|
|
|
const int buffersValuesRequired = 3;
|
|
|
|
//
|
|
// Global Variables ...
|
|
double stopLoss;
|
|
double takeProfit;
|
|
|
|
//
|
|
int OnInit() {
|
|
//
|
|
stopLoss = PipsToDouble(stopLossPips);
|
|
takeProfit = PipsToDouble(takeProfitPips);
|
|
|
|
//
|
|
IsNewBar();
|
|
}
|
|
```
|
|
|
|
## Calculating SL and TP Gaps on Trading Open
|
|
|
|
```mq4
|
|
//
|
|
// Define Some Variables ...
|
|
double price;
|
|
double closePrice;
|
|
double tp = 0;
|
|
double sl = 0;
|
|
double slGap = PointsToDouble((int) SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL));
|
|
|
|
//
|
|
if (stopLoss > 0 && stopLoss < slGap) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (takeProfit > 0 && takeProfit < slGap) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
RefreshRates();
|
|
|
|
//
|
|
if (type == ORDER_TYPE_BUY) {
|
|
//
|
|
price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
|
|
closePrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
|
|
|
|
//
|
|
if (stopLoss > 0) {
|
|
sl = closePrice - stopLoss;
|
|
}
|
|
|
|
//
|
|
if (takeProfit > 0) {
|
|
tp = price + takeProfit;
|
|
}
|
|
} else {
|
|
//
|
|
price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
|
|
closePrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
|
|
|
|
//
|
|
if (stopLoss > 0) {
|
|
sl = closePrice + stopLoss;
|
|
}
|
|
|
|
//
|
|
if (takeProfit > 0) {
|
|
tp = price - takeProfit;
|
|
}
|
|
}
|
|
|
|
//
|
|
price = NormalizeDouble(price, _Digits);
|
|
sl = NormalizeDouble(sl, _Digits);
|
|
tp = NormalizeDouble(tp, _Digits);
|
|
```
|
|
|
|
## Usefull Library Methods
|
|
|
|
```mq4
|
|
//
|
|
// Convert points to Actual Point ...
|
|
double PointsToDouble(int points) {
|
|
//
|
|
double result = points * _Point;
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Converts Pips to Points ...
|
|
int PipsToPoints(int pips) {
|
|
//
|
|
int result = pips * ((_Digits == 3 || _Digits == 5) ? 10 : 1);
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Converts Pips to Double ...
|
|
double PipsToDouble(int pips) {
|
|
//
|
|
double result = PointsToDouble(PipsToPoints(pips));
|
|
return result;
|
|
}
|
|
```
|