Trading algorithms | //+----------------------------------------------+ #include <TradeAlgorithms.mqh> //+----------------------------------------------+ //| Enumeration for lot calculation options | //+----------------------------------------------+ /*enum MarginMode - the enumeration is declared in the TradeAlgorithms.mqh file { FREEMARGIN=0, //MM from free funds on the account BALANCE, //MM from the balance of funds on the account LOSSFREEMARGIN, //MM for losses from free funds on the account LOSSBALANCE, //MM for losses from the balance of funds on the account LOT //Lot unchanged }; */ //+----------------------------------------------+ //| Enumeration for defining a trend | //+----------------------------------------------+ enum TrendMode { DIRECT=0, //by signals AGAINST //against signals }; //+----------------------------------------------+ //| Expert indicator input parameters | //+----------------------------------------------+ input double MM=0.1; //Money Managemnt input MarginMode MMMode=LOT; //Money Managent Mode input int StopLoss_=1000; //stop loss in points input int TakeProfit_=2000; //take profit in points input int Deviation_=10; //Max. price deviation in points input bool BuyPosOpen=true; //Permission to enter long input bool SellPosOpen=true; //Permission to enter short input bool BuyPosClose=true; //Permission to exit longs input bool SellPosClose=true; //Permission to get out of shorts //+----------------------------------------------+ //| Input parameters of the RSI indicator | //+----------------------------------------------+ input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_M1; //indicator timeframe input TrendMode Trend=DIRECT; //trade //---- input uint RSIPeriod=10; // indicator period input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; // price input uint HighLevel=88; // overbought level input uint LowLevel=12; // oversold level //---- input uint SignalBar=1; // bar number to receive the entry signal //+----------------------------------------------+ //| Input parameters of the MA indicator | //+----------------------------------------------+ input int Inp_MA_ma_period = 5; // MA: averaging period input int Inp_MA_ma_shift = 0; // MA: horizontal shift input ENUM_MA_METHOD Inp_MA_ma_method = MODE_SMA; // MA: smoothing type input ENUM_APPLIED_PRICE Inp_MA_applied_price = PRICE_CLOSE; // MA: type of price //+----------------------------------------------+ //---- Declaring integer variables to store the chart period in seconds int TimeShiftSec; //---- Declaring integer variables for indicator handles //int InpInd_Handle; int handle_iRSI; // variable for storing the handle of the iRVI indicator int handle_iMA; // variable for storing the handle of the iMA indicator //---- declaring integer data origin variables int min_rates_total; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- create handle of the indicator RSI handle_iRSI=iRSI(Symbol(),InpInd_Timeframe,RSIPeriod,RSIPrice); if(handle_iRSI==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //--- create handle of the indicator iMA handle_iMA=iMA(Symbol(),InpInd_Timeframe,Inp_MA_ma_period,Inp_MA_ma_shift,Inp_MA_ma_method,handle_iRSI); if(handle_iMA==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //---- initialization of a variable to store the chart period in seconds TimeShiftSec=PeriodSeconds(InpInd_Timeframe); //---- Initializing data origin variables min_rates_total=int(Inp_MA_ma_period); min_rates_total+=int(3+SignalBar); //--- completion of initialization return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- GlobalVariableDel_(Symbol()); //---- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---- checking the number of bars for sufficiency for calculation if(BarsCalculated(handle_iRSI)<min_rates_total) return; //---- loading history for normal operation of functions IsNewBar() и SeriesInfoInteger() LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe); //---- Declaring static variables static bool Recount=true; static bool BUY_Open=false,BUY_Close=false; static bool SELL_Open=false,SELL_Close=false; static datetime UpSignalTime,DnSignalTime; static CIsNewBar NB; //+----------------------------------------------+ //| Definition of signals for deals | //+----------------------------------------------+ if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // checking for a new bar { //---- reset trading signals BUY_Open=false; SELL_Open=false; BUY_Close=false; SELL_Close=false; Recount=false; //---- Declaring local variables double MA[2]; //---- copying the newly appeared data into arrays if(CopyBuffer(handle_iMA,0,SignalBar,2,MA)<=0) {Recount=true; return;} if(Trend==DIRECT) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; } UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } if(Trend==AGAINST) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } } Print(BUY_Open,BUY_Close); } //+----------------------------------------------+ //| Making deals | //+----------------------------------------------+ //---- Close the long BuyPositionClose(BUY_Close,Symbol(),Deviation_); //---- Close the short SellPositionClose(SELL_Close,Symbol(),Deviation_); //---- Opening long BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- Opening the short SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- } //+------------------------------------------------------------------+
Unable to compile - huge bunch of bugs.
Correct the mistakes.
Unable to compile - huge bunch of bugs.
Correct the mistakes.The platform features trading robots, copy trading and VPS Download
ok try this code below
//+----------------------------------------------+
// Trading algorithms | //+----------------------------------------------+ #include <TradeAlgorithms.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\DealInfo.mqh> #include <Trade\OrderInfo.mqh> //#include <SmoothAlgorithms.mgh> //+----------------------------------------------+ //| Enumeration for lot calculation options | //+----------------------------------------------+ /*enum MarginMode - the enumeration is declared in the TradeAlgorithms.mqh file { FREEMARGIN=0, //MM from free funds on the account BALANCE, //MM from the balance of funds on the account LOSSFREEMARGIN, //MM for losses from free funds on the account LOSSBALANCE, //MM for losses from the balance of funds on the account LOT //Lot unchanged }; */ //+----------------------------------------------+ //| Enumeration for defining a trend | //+----------------------------------------------+ enum TrendMode { DIRECT=0, //by signals AGAINST //against signals }; //+----------------------------------------------+ //| Expert indicator input parameters | //+----------------------------------------------+ input double MM=0.1; //Money Managemnt input MarginMode MMMode=LOT; //Money Managent Mode input int StopLoss_=1000; //stop loss in points input int TakeProfit_=2000; //take profit in points input int Deviation_=10; //Max. price deviation in points input bool BuyPosOpen=true; //Permission to enter long input bool SellPosOpen=true; //Permission to enter short input bool BuyPosClose=true; //Permission to exit longs input bool SellPosClose=true; //Permission to get out of shorts //+----------------------------------------------+ //| Input parameters of the RSI indicator | //+----------------------------------------------+ input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_M1; //indicator timeframe input TrendMode Trend=DIRECT; //trade //---- input uint RSIPeriod=10; // RSI period input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; // price input uint HighLevel=88; // overbought level input uint LowLevel=12; // oversold level //---- input uint SignalBar=1; // bar number to receive the entry signal //+----------------------------------------------+ //| Input parameters of the MA indicator | //+----------------------------------------------+ input int Inp_MA_ma_period = 5; // MA: averaging period input int Inp_MA_ma_shift = 0; // MA: horizontal shift input ENUM_MA_METHOD Inp_MA_ma_method = MODE_SMA; // MA: smoothing type input ENUM_APPLIED_PRICE Inp_MA_applied_price = PRICE_CLOSE; // MA: type of price //+----------------------------------------------+ //---- Declaring integer variables to store the chart period in seconds int TimeShiftSec; //---- Declaring integer variables for indicator handles //int InpInd_Handle; int handle_iRSI; // variable for storing the handle of the iRVI indicator int handle_iMA; // variable for storing the handle of the iMA indicator //---- declaring integer data origin variables int min_rates_total; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- create handle of the indicator RSI handle_iRSI=iRSI(Symbol(),InpInd_Timeframe,RSIPeriod,RSIPrice); if(handle_iRSI==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //--- create handle of the indicator iMA handle_iMA=iMA(Symbol(),InpInd_Timeframe,Inp_MA_ma_period,Inp_MA_ma_shift,Inp_MA_ma_method,handle_iRSI); if(handle_iMA==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //---- initialization of a variable to store the chart period in seconds TimeShiftSec=PeriodSeconds(InpInd_Timeframe); //---- Initializing data origin variables min_rates_total=int(Inp_MA_ma_period); min_rates_total+=int(3+SignalBar); //--- completion of initialization return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- GlobalVariableDel_(Symbol()); //---- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---- checking the number of bars for sufficiency for calculation if(BarsCalculated(handle_iMA)<min_rates_total) return; //---- loading history for normal operation of functions IsNewBar() и SeriesInfoInteger() LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe); //---- Declaring static variables static bool Recount=true; static bool BUY_Open=false,BUY_Close=false; static bool SELL_Open=false,SELL_Close=false; static datetime UpSignalTime,DnSignalTime; static CIsNewBar NB; //+----------------------------------------------+ //| Definition of signals for deals | //+----------------------------------------------+ if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // checking for a new bar { //---- reset trading signals BUY_Open=false; SELL_Open=false; BUY_Close=false; SELL_Close=false; Recount=false; //---- Declaring local variables double RSI[2]; double MA[2]; //---- copying the newly appeared data into arrays if(CopyBuffer(handle_iRSI,0,SignalBar,2,RSI)<=0) {Recount=true; return;} if(CopyBuffer(handle_iMA,0,SignalBar,2,MA)<=0) {Recount=true; return;} if(Trend==DIRECT) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; } UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } if(Trend==AGAINST) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } } Print(BUY_Open,BUY_Close); } //+----------------------------------------------+ //| Making deals | //+----------------------------------------------+ //---- Close the long BuyPositionClose(BUY_Close,Symbol(),Deviation_); //---- Close the short SellPositionClose(SELL_Close,Symbol(),Deviation_); //---- Opening long BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- Opening the short SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- } //+------------------------------------------------------------------+
ok how to retrieve data of SMA using the SMA on RSI handle hanndle
ok try this code below
The code won't compile. The code contains a huge bunch of errors.
Help me to correct it because i have compile with no error check the attached file below
You have posted NOT ALL the code. Therefore, when trying to compile, a HUGE LOT of ERRORS occurs. Specifically: 48 errors and three warnings.
You have posted NOT ALL the code. Therefore, when trying to compile, a HUGE LOT of ERRORS occurs. Specifically: 48 errors and three warnings.
Try this below but i there is logical not compiling error
//+------------------------------------------------------------------+ //| mimi.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+----------------------------------------------+ // Trading algorithms | //+----------------------------------------------+ #include <TradeAlgorithms.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\DealInfo.mqh> #include <Trade\OrderInfo.mqh> //#include <SmoothAlgorithms.mgh> //+----------------------------------------------+ //| Enumeration for lot calculation options | //+----------------------------------------------+ /*enum MarginMode - the enumeration is declared in the TradeAlgorithms.mqh file { FREEMARGIN=0, //MM from free funds on the account BALANCE, //MM from the balance of funds on the account LOSSFREEMARGIN, //MM for losses from free funds on the account LOSSBALANCE, //MM for losses from the balance of funds on the account LOT //Lot unchanged }; */ //+----------------------------------------------+ //| Enumeration for defining a trend | //+----------------------------------------------+ enum TrendMode { DIRECT=0, //by signals AGAINST //against signals }; //+----------------------------------------------+ //| Expert indicator input parameters | //+----------------------------------------------+ input double MM=0.1; //Money Managemnt input MarginMode MMMode=LOT; //Money Managent Mode input int StopLoss_=1000; //stop loss in points input int TakeProfit_=2000; //take profit in points input int Deviation_=10; //Max. price deviation in points input bool BuyPosOpen=true; //Permission to enter long input bool SellPosOpen=true; //Permission to enter short input bool BuyPosClose=true; //Permission to exit longs input bool SellPosClose=true; //Permission to get out of shorts //+----------------------------------------------+ //| Input parameters of the RSI indicator | //+----------------------------------------------+ input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_M1; //indicator timeframe input TrendMode Trend=DIRECT; //trade //---- input uint RSIPeriod=10; // RSI period input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; // price input uint HighLevel=88; // overbought level input uint LowLevel=12; // oversold level //---- input uint SignalBar=1; // bar number to receive the entry signal //+----------------------------------------------+ //| Input parameters of the MA indicator | //+----------------------------------------------+ input int Inp_MA_ma_period = 5; // MA: averaging period input int Inp_MA_ma_shift = 0; // MA: horizontal shift input ENUM_MA_METHOD Inp_MA_ma_method = MODE_SMA; // MA: smoothing type input ENUM_APPLIED_PRICE Inp_MA_applied_price = PRICE_CLOSE; // MA: type of price //+----------------------------------------------+ //---- Declaring integer variables to store the chart period in seconds int TimeShiftSec; //---- Declaring integer variables for indicator handles //int InpInd_Handle; int handle_iRSI; // variable for storing the handle of the iRVI indicator int handle_iMA; // variable for storing the handle of the iMA indicator //---- declaring integer data origin variables int min_rates_total; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- create handle of the indicator RSI handle_iRSI=iRSI(Symbol(),InpInd_Timeframe,RSIPeriod,RSIPrice); if(handle_iRSI==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //--- create handle of the indicator iMA handle_iMA=iMA(Symbol(),InpInd_Timeframe,Inp_MA_ma_period,Inp_MA_ma_shift,Inp_MA_ma_method,handle_iRSI); if(handle_iMA==INVALID_HANDLE) { Print(" Failed to get the indicator handle RSI"); return(INIT_FAILED); } //---- initialization of a variable to store the chart period in seconds TimeShiftSec=PeriodSeconds(InpInd_Timeframe); //---- Initializing data origin variables min_rates_total=int(Inp_MA_ma_period); min_rates_total+=int(3+SignalBar); //--- completion of initialization return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- GlobalVariableDel_(Symbol()); //---- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---- checking the number of bars for sufficiency for calculation if(BarsCalculated(handle_iMA)<min_rates_total) return; //---- loading history for normal operation of functions IsNewBar() и SeriesInfoInteger() LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe); //---- Declaring static variables static bool Recount=true; static bool BUY_Open=false,BUY_Close=false; static bool SELL_Open=false,SELL_Close=false; static datetime UpSignalTime,DnSignalTime; static CIsNewBar NB; //+----------------------------------------------+ //| Definition of signals for deals | //+----------------------------------------------+ if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // checking for a new bar { //---- reset trading signals BUY_Open=false; SELL_Open=false; BUY_Close=false; SELL_Close=false; Recount=false; //---- Declaring local variables double RSI[2]; double MA[2]; //---- copying the newly appeared data into arrays if(CopyBuffer(handle_iRSI,0,SignalBar,2,RSI)<=0) {Recount=true; return;} if(CopyBuffer(handle_iMA,0,SignalBar,2,MA)<=0) {Recount=true; return;} if(Trend==DIRECT) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; } UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } if(Trend==AGAINST) { //---- Get signals to buy if(MA[1]>LowLevel) { if(MA[0]<=LowLevel) { if(SellPosOpen) SELL_Open=true; if(BuyPosClose) BUY_Close=true; } DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } //---- Get signals for selling if(MA[1]<HighLevel) { if(MA[0]>=HighLevel) { if(BuyPosOpen) BUY_Open=true; if(SellPosClose) SELL_Close=true; UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } } Print(BUY_Open,BUY_Close); } //+----------------------------------------------+ //| Making deals | //+----------------------------------------------+ //---- Close the long BuyPositionClose(BUY_Close,Symbol(),Deviation_); //---- Close the short SellPositionClose(SELL_Close,Symbol(),Deviation_); //---- Opening long BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- Opening the short SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_); //---- } //+------------------------------------------------------------------+
Try this below but i there is logical not compiling error
I'll just say - a huge bunch of mistakes. Correct your mistakes:
You have posted NOT ALL the code. Therefore, when trying to compile, a HUGE LOT of ERRORS occurs. Specifically: 48 errors and three warnings.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi
I have tried to create need RSI EA with an moving average applied to an RSI, (using simple moving average instead of rsi line)
Sells at a (MA)downward crossing of an oscillator overbought level, buys at an (MA)upward crossing of an oscillator oversold level
but the EA IS NOT WORKING