Page 14 of 180

Re: Coding Help

Posted: Fri Mar 24, 2017 11:38 pm
by mladen
wojtek wrote:I have two minor coding questions: How can I do a line break in the iCustom function
in the following code?:

Code: Select all

 #define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,... 
The function iCustom can be very long there.

And the next question: can I declare variables before the init() and start() sections
(where buffers are usually declared)? I mean variables from inside the code,
e.g., from the main loop for.
No line break in that way - use line brakes while creating the mtf call (so you can control the parameters) and once when you are finished, put all in one single line again

You can declare variable there, but then they would become global scope variable - not a good idea since you would be in danger to mix up something from various peaces of code

Re: Coding Help

Posted: Sat Mar 25, 2017 1:48 am
by wojtek
OK, thanks a lot! 

Re: Coding Help

Posted: Sat Mar 25, 2017 5:36 am
by Sasha Plutov
Hello mladen,Here is EA based on indi you made but it's very slow and optimization is almost impossible.
Could you do something to make EA much faster?
Or point out my mistakes please.

Re: Coding Help

Posted: Sat Mar 25, 2017 7:49 am
by mladen
Sasha Plutov wrote:Hello mladen,Here is EA based on indi you made but it's very slow and optimization is almost impossible.
Could you do something to make EA much faster?
Or point out my mistakes please.
The EA is not made by me

Re: Coding Help

Posted: Wed Mar 29, 2017 1:48 am
by ionic

Code: Select all

//+------------------------------------------------------------------+
//| Exp_MACDCandle.mq5 |
//| Copyright © 2015, Nikolay Kositsin | 
//| Khabarovsk, farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
#property version "1.00"
//+---------------------------------------------------+
//| Îáúÿâëåíèå ïå?å÷èñëåíèé |
//+---------------------------------------------------+
enum MODE
 {
 MODE_HISTOGRAM=0, // Ãèñòîã?àììà
 MODE_SIGNAL_LINE=1 // Ñèãíàëüíàÿ ëèíèÿ
 };
//+---------------------------------------------------+
//| Òî?ãîâûå àëãî?èòìû |
//+---------------------------------------------------+
#include <TradeAlgorithms.mqh>
//+---------------------------------------------------+
//| Âõîäíûå ïà?àìåò?û ?êñïå?òà |
//+---------------------------------------------------+
input double MM=0.1; // Äîëÿ ôèíàíñîâûõ ?åñó?ñîâ îò äåïîçèòà â ñäåëêå
input MarginMode MMMode=LOT; // Ñïîñîá îï?åäåëåíèÿ ?àçìå?à ëîòà
input int StopLoss_=1000; // Ñòîïëîññ â ïóíêòàõ
input int TakeProfit_=2000; // Òåéêï?îôèò â ïóíêòàõ
input int Deviation_=10; // Ìàêñ. îòêëîíåíèå öåíû â ïóíêòàõ
input bool BuyPosOpen=true; // ?àç?åøåíèå äëÿ âõîäà â äëèííûå ïîçèöèè
input bool SellPosOpen=true; // ?àç?åøåíèå äëÿ âõîäà â êî?îòêèå ïîçèöèè
input bool BuyPosClose=true; // ?àç?åøåíèå äëÿ âûõîäà èç äëèííûõ ïîçèöèé
input bool SellPosClose=true; // ?àç?åøåíèå äëÿ âûõîäà èç êî?îòêèõ ïîçèöèé
//+--------------------------------------------------+
//| Âõîäíûå ïà?àìåò?û äëÿ èíäèêàòî?à MACDCandle |
//+--------------------------------------------------+
input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_H4; // ????????? ??????????
input uint SignalBar=1; // Íîìå? áà?à äëÿ ïîëó÷åíèÿ ñèãíàëà âõîäà
input uint fast_ema_period=12; // Ïå?èîä áûñò?îé ñ?åäíåé
input uint slow_ema_period=26; // Ïå?èîä ìåäëåííîé ñ?åäíåé
input uint signal_period=9; // Ïå?èîä óñ?åäíåíèÿ ?àçíîñòè
input MODE mode=MODE_SIGNAL_LINE; // Èñòî÷íèê äàííûõ äëÿ ?àñ÷åòà
//+--------------------------------------------------+
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ äëÿ õ?àíåíèÿ ïå?èîäà ã?àôèêà â ñåêóíäàõ 
int TimeShiftSec;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ äëÿ õåíäëîâ èíäèêàòî?îâ
int InpInd_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
 {
//---- ïîëó÷åíèå õåíäëà èíäèêàòî?à MACDCandle
 InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"MACDCandle",fast_ema_period,slow_ema_period,signal_period,mode);
 if(InpInd_Handle==INVALID_HANDLE)
 {
 Print("Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòî?à MACDCandle");
 return(INIT_FAILED);
 }
//---- èíèöèàëèçàöèÿ ïå?åìåííîé äëÿ õ?àíåíèÿ ïå?èîäà ã?àôèêà â ñåêóíäàõ 
 TimeShiftSec=PeriodSeconds(InpInd_Timeframe);
//---- èíèöèàëèçàöèÿ ïå?åìåííûõ íà÷àëà îòñ÷åòà äàííûõ
 min_rates_total=int(MathMax(fast_ema_period,slow_ema_period));
 if(mode==MODE_SIGNAL_LINE) min_rates_total+=int(signal_period);
 min_rates_total+=int(1+2+SignalBar);
//--- çàâå?øåíèå èíèöèàëèçàöèè
 return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
//----
 GlobalVariableDel_(Symbol());
 }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
 {
//---- ï?îâå?êà êîëè÷åñòâà áà?îâ íà äîñòàòî÷íîñòü äëÿ ?àñ÷åòà
 if(BarsCalculated(InpInd_Handle)<min_rates_total) return;
//---- ïîäã?óçêà èñòî?èè äëÿ íî?ìàëüíîé ?àáîòû ôóíêöèé IsNewBar() è SeriesInfoInteger() 
 LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe);
//---- îáúÿâëåíèå ñòàòè÷åñêèõ ïå?åìåííûõ
 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;
//+----------------------------------------------+
//| Îï?åäåëåíèå ñèãíàëîâ äëÿ ñäåëîê |
//+----------------------------------------------+
 if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // ï?îâå?êà íà ïîÿâëåíèå íîâîãî áà?à
 {
 //---- îáíóëèì òî?ãîâûå ñèãíàëû
 BUY_Open=false;
 SELL_Open=false;
 BUY_Close=false;
 SELL_Close=false;
 Recount=false;
 //---- îáúÿâëåíèå ëîêàëüíûõ ïå?åìåííûõ
 double Col[2];
 //---- êîïè?óåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû
 if(CopyBuffer(InpInd_Handle,4,SignalBar,2,Col)<=0) {Recount=true; return;}
 //---- ïîëó÷èì ñèãíàëû äëÿ ïîêóïêè
 if(Col[1]==2)
 {
 if(BuyPosOpen && Col[0]<2) BUY_Open=true; 
 if(SellPosClose) SELL_Close=true; 
 UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
 }
 //---- ïîëó÷èì ñèãíàëû äëÿ ï?îäàæè
 if(Col[1]==0)
 {
 if(SellPosOpen && Col[0]>0) SELL_Open=true;
 if(BuyPosClose) BUY_Close=true; 
 DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
 }
 }
//+----------------------------------------------+
//| Ñîâå?øåíèå ñäåëîê |
//+----------------------------------------------+
//---- çàê?ûâàåì äëèííó? ïîçèöè?
 BuyPositionClose(BUY_Close,Symbol(),Deviation_);
//---- çàê?ûâàåì êî?îòêó? ïîçèöè?
 SellPositionClose(SELL_Close,Symbol(),Deviation_);
//---- îòê?ûâàåì äëèííó? ïîçèöè?
 BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);
//---- îòê?ûâàåì êî?îòêó? ïîçèöè?
 SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);
 }
//+------------------------------------------------------------------+
Mr. tools hii
Sir this EA opens a position, but opens a new position when covering the old lot. Or there is a signal, but doing a trade 2 times. Find a time and I'll be incredibly happy if you could review. Thanks.

regards

Re: Coding Help

Posted: Wed Mar 29, 2017 8:36 am
by mladen
ionic wrote:

Code: Select all

//+------------------------------------------------------------------+
//| Exp_MACDCandle.mq5 |
//| Copyright © 2015, Nikolay Kositsin | 
//| Khabarovsk, farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
#property version "1.00"
//+---------------------------------------------------+
//| Îáúÿâëåíèå ïå?å÷èñëåíèé |
//+---------------------------------------------------+
enum MODE
 {
 MODE_HISTOGRAM=0, // Ãèñòîã?àììà
 MODE_SIGNAL_LINE=1 // Ñèãíàëüíàÿ ëèíèÿ
 };
//+---------------------------------------------------+
//| Òî?ãîâûå àëãî?èòìû |
//+---------------------------------------------------+
#include <TradeAlgorithms.mqh>
//+---------------------------------------------------+
//| Âõîäíûå ïà?àìåò?û ?êñïå?òà |
//+---------------------------------------------------+
input double MM=0.1; // Äîëÿ ôèíàíñîâûõ ?åñó?ñîâ îò äåïîçèòà â ñäåëêå
input MarginMode MMMode=LOT; // Ñïîñîá îï?åäåëåíèÿ ?àçìå?à ëîòà
input int StopLoss_=1000; // Ñòîïëîññ â ïóíêòàõ
input int TakeProfit_=2000; // Òåéêï?îôèò â ïóíêòàõ
input int Deviation_=10; // Ìàêñ. îòêëîíåíèå öåíû â ïóíêòàõ
input bool BuyPosOpen=true; // ?àç?åøåíèå äëÿ âõîäà â äëèííûå ïîçèöèè
input bool SellPosOpen=true; // ?àç?åøåíèå äëÿ âõîäà â êî?îòêèå ïîçèöèè
input bool BuyPosClose=true; // ?àç?åøåíèå äëÿ âûõîäà èç äëèííûõ ïîçèöèé
input bool SellPosClose=true; // ?àç?åøåíèå äëÿ âûõîäà èç êî?îòêèõ ïîçèöèé
//+--------------------------------------------------+
//| Âõîäíûå ïà?àìåò?û äëÿ èíäèêàòî?à MACDCandle |
//+--------------------------------------------------+
input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_H4; // ????????? ??????????
input uint SignalBar=1; // Íîìå? áà?à äëÿ ïîëó÷åíèÿ ñèãíàëà âõîäà
input uint fast_ema_period=12; // Ïå?èîä áûñò?îé ñ?åäíåé
input uint slow_ema_period=26; // Ïå?èîä ìåäëåííîé ñ?åäíåé
input uint signal_period=9; // Ïå?èîä óñ?åäíåíèÿ ?àçíîñòè
input MODE mode=MODE_SIGNAL_LINE; // Èñòî÷íèê äàííûõ äëÿ ?àñ÷åòà
//+--------------------------------------------------+
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ äëÿ õ?àíåíèÿ ïå?èîäà ã?àôèêà â ñåêóíäàõ 
int TimeShiftSec;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ äëÿ õåíäëîâ èíäèêàòî?îâ
int InpInd_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïå?åìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
 {
//---- ïîëó÷åíèå õåíäëà èíäèêàòî?à MACDCandle
 InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"MACDCandle",fast_ema_period,slow_ema_period,signal_period,mode);
 if(InpInd_Handle==INVALID_HANDLE)
 {
 Print("Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòî?à MACDCandle");
 return(INIT_FAILED);
 }
//---- èíèöèàëèçàöèÿ ïå?åìåííîé äëÿ õ?àíåíèÿ ïå?èîäà ã?àôèêà â ñåêóíäàõ 
 TimeShiftSec=PeriodSeconds(InpInd_Timeframe);
//---- èíèöèàëèçàöèÿ ïå?åìåííûõ íà÷àëà îòñ÷åòà äàííûõ
 min_rates_total=int(MathMax(fast_ema_period,slow_ema_period));
 if(mode==MODE_SIGNAL_LINE) min_rates_total+=int(signal_period);
 min_rates_total+=int(1+2+SignalBar);
//--- çàâå?øåíèå èíèöèàëèçàöèè
 return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
//----
 GlobalVariableDel_(Symbol());
 }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
 {
//---- ï?îâå?êà êîëè÷åñòâà áà?îâ íà äîñòàòî÷íîñòü äëÿ ?àñ÷åòà
 if(BarsCalculated(InpInd_Handle)<min_rates_total) return;
//---- ïîäã?óçêà èñòî?èè äëÿ íî?ìàëüíîé ?àáîòû ôóíêöèé IsNewBar() è SeriesInfoInteger() 
 LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe);
//---- îáúÿâëåíèå ñòàòè÷åñêèõ ïå?åìåííûõ
 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;
//+----------------------------------------------+
//| Îï?åäåëåíèå ñèãíàëîâ äëÿ ñäåëîê |
//+----------------------------------------------+
 if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // ï?îâå?êà íà ïîÿâëåíèå íîâîãî áà?à
 {
 //---- îáíóëèì òî?ãîâûå ñèãíàëû
 BUY_Open=false;
 SELL_Open=false;
 BUY_Close=false;
 SELL_Close=false;
 Recount=false;
 //---- îáúÿâëåíèå ëîêàëüíûõ ïå?åìåííûõ
 double Col[2];
 //---- êîïè?óåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû
 if(CopyBuffer(InpInd_Handle,4,SignalBar,2,Col)<=0) {Recount=true; return;}
 //---- ïîëó÷èì ñèãíàëû äëÿ ïîêóïêè
 if(Col[1]==2)
 {
 if(BuyPosOpen && Col[0]<2) BUY_Open=true; 
 if(SellPosClose) SELL_Close=true; 
 UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
 }
 //---- ïîëó÷èì ñèãíàëû äëÿ ï?îäàæè
 if(Col[1]==0)
 {
 if(SellPosOpen && Col[0]>0) SELL_Open=true;
 if(BuyPosClose) BUY_Close=true; 
 DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
 }
 }
//+----------------------------------------------+
//| Ñîâå?øåíèå ñäåëîê |
//+----------------------------------------------+
//---- çàê?ûâàåì äëèííó? ïîçèöè?
 BuyPositionClose(BUY_Close,Symbol(),Deviation_);
//---- çàê?ûâàåì êî?îòêó? ïîçèöè?
 SellPositionClose(SELL_Close,Symbol(),Deviation_);
//---- îòê?ûâàåì äëèííó? ïîçèöè?
 BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);
//---- îòê?ûâàåì êî?îòêó? ïîçèöè?
 SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);
 }
//+------------------------------------------------------------------+
Mr. tools hii
Sir this EA opens a position, but opens a new position when covering the old lot. Or there is a signal, but doing a trade 2 times. Find a time and I'll be incredibly happy if you could review. Thanks.

regards

Try changing code parts like this :

Col[0]<2

to this

Col[0]<1

Re: Coding Help

Posted: Wed Mar 29, 2017 7:26 pm
by ionic
mladen wrote:
Try changing code parts like this :

Col[0]<2

to this

Col[0]<1
Thank you very much for your help mr. mladen
its working very well now. I m very happy for result.
regards

Re: Coding Help

Posted: Fri Mar 31, 2017 11:41 am
by wojtek
Dear Mladen, is the alert code in the attached indicator good and effective
(not late, or so)?  I mean only alert, everything else in the code is not important.

Re: Coding Help

Posted: Fri Mar 31, 2017 7:44 pm
by mladen
wojtek wrote:Dear Mladen, is the alert code in the attached indicator good and effective
(not late, or so)?  I mean only alert, everything else in the code is not important.
wojtek

It had one issue that could cause it to repaint in some case. It is solved now

Re: Coding Help

Posted: Sat Apr 01, 2017 12:25 am
by wojtek
Thank you very much for you help, as usual!