Skip to content

Instantly share code, notes, and snippets.

@Pompeu
Created April 1, 2020 01:39
Show Gist options
  • Save Pompeu/bfe46854152a4b86b3526e54a73fc5c1 to your computer and use it in GitHub Desktop.
Save Pompeu/bfe46854152a4b86b3526e54a73fc5c1 to your computer and use it in GitHub Desktop.
#property copyright "Itacir Ferreira Pompeu"
#property version "0.01"
//fix extencioa
#include <Trade/Trade.mqh>
input double lote = 1.0;
input int ema_lower = 5;
double ema_lower_buffer[];
double ifr_buffer[];
int ema_lower_handle;
int ifr_handle;
CTrade trade;
MqlRates rates[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ArraySetAsSeries(ema_lower_buffer, true);
ArraySetAsSeries(ifr_buffer, true);
ema_lower_handle = iMA(_Symbol,_Period, ema_lower,0, MODE_SMA, PRICE_CLOSE);
ifr_handle = iRSI(_Symbol,_Period, 2, PRICE_CLOSE);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
bool comprado = false;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
//---
CopyBuffer(ema_lower_handle, 0, 0, 3, ema_lower_buffer);
CopyBuffer(ifr_handle, 0, 0, 3, ifr_buffer);
CopyRates(Symbol(), Period(), 0, 3, rates);
if(ifr_buffer[0] < 5 && !comprado)
{
comprado = true;
trade.Buy(lote, Symbol(), 0, 0, 0);
}
bool rates_close_up_ema = rates[1].close > ema_lower_buffer[1];
if(comprado && rates_close_up_ema)
{
trade.Sell(lote, Symbol(), normalize_to_indice(rates[1].close), 0, 0);
comprado = false;
}
}
//+------------------------------------------------------------------+
void close_all()
{
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY || PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
{
trade.PositionClose(PositionGetInteger(POSITION_TICKET));
trade.OrderDelete(OrderGetTicket((int)PositionGetInteger(POSITION_TICKET)));
}
}
//+------------------------------------------------------------------+
bool is_new_bar()
{
static datetime last_time = 0;
datetime lastbar_time = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE);
if(last_time == 0)
{
last_time = lastbar_time;
return (false);
}
if(last_time != lastbar_time)
{
last_time = lastbar_time;
return (true);
}
return (false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double normalize_to_indice(double prince)
{
return NormalizeDouble(prince - MathMod(prince, 5), _Digits) * _Point;
}
//+------------------------------------------------------------------+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment