trade.Sell(1.10,NULL,Bid,(Bid+100*_Point),(CCIValue>-120),NULL);
if(...)//close condition trade.PositionClose(...)
#include<Trade\Trade.mqh> CTrade trade; input string StartTradingTime="07:00"; input string StopTradingTime="20:00"; string CurrentTime; bool TradingIsAllowed=false; void OnTick() { double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); MqlRates PriceInfo[]; ArraySetAsSeries(PriceInfo,true); int PriceData =CopyRates(_Symbol,_Period,0,3,PriceInfo); string signal=""; double myPriceArray[]; int CCIDefinition =iCCI(_Symbol,_Period,14,PRICE_CLOSE); ArraySetAsSeries(myPriceArray,true); CopyBuffer(CCIDefinition,0,0,3,myPriceArray); float CCIValue=(myPriceArray[0]); datetime time=TimeLocal(); CurrentTime=TimeToString(time,TIME_MINUTES); if(CheckTradingTime()==true) { if(CCIValue> 120) signal="buy"; if(CCIValue< -120) signal="sell"; static datetime lastTrade=0; datetime now=TimeCurrent(); if(now - lastTrade >= 0) { lastTrade=now; if(signal=="sell" && PositionsTotal()<1) trade.Sell(1.10,NULL,Bid,(Bid+100*_Point),(Bid-100*_Point),NULL); if(signal=="buy" && PositionsTotal()<1) trade.Buy(1.10,NULL,Ask,(Ask-100*_Point),(Ask+100 * _Point),NULL); } } Comment("The current signal is: ",signal); } bool CheckTradingTime() { if(StringSubstr(CurrentTime,0,5)==StartTradingTime) TradingIsAllowed=true; if(StringSubstr(CurrentTime,0,5)==StopTradingTime) TradingIsAllowed=false; return TradingIsAllowed; }
Hi,
I did not get it to work. I dont know what i do wrong.
Here again is the code. I simply want to start a buy trade wenn the ccivalue is over 110 and a sell trade when the CCIValue is under -110 .
SL should be around 100 Points and TP for example of the BuyTrade when the CCIValue goes back under 120.
That was it.
PS: Another option was that when one trade is finished the EA should wait minimum 60 Minutes to start a new trade. But in my solution the EA only looks at every full hour if the conditions are fullfilled. What did i do wrong with the time? For example when a trade closes lets say 1510 . Then the EA should only start a new trade at 1610. But in my example the EA only looks at full hours.
for me it is taking trades in minutes also. Not full hours. Please check your simulation type choice:
#include<Trade\Trade.mqh> CTrade trade; input string StartTradingTime="07:00"; input string StopTradingTime="20:00"; string CurrentTime; bool TradingIsAllowed=false; void OnTick() { double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); MqlRates PriceInfo[]; ArraySetAsSeries(PriceInfo,true); int PriceData =CopyRates(_Symbol,_Period,0,3,PriceInfo); string signal=""; double myPriceArray[]; int CCIDefinition =iCCI(_Symbol,_Period,14,PRICE_CLOSE); ArraySetAsSeries(myPriceArray,true); CopyBuffer(CCIDefinition,0,0,3,myPriceArray); float CCIValue=(myPriceArray[0]); datetime time=TimeLocal(); CurrentTime=TimeToString(time,TIME_MINUTES); if(CheckTradingTime()==true) { if(CCIValue> 120) signal="buy"; if(CCIValue< -120) signal="sell"; static datetime lastTrade=0; datetime now=TimeCurrent(); if(now - lastTrade >= 3600 ) { lastTrade=now; if(signal=="sell" && PositionsTotal()<1) trade.Sell(1.10,NULL,Bid,(Bid+100*_Point),(Bid-100*_Point),NULL); if(signal=="buy" && PositionsTotal()<1) trade.Buy(1.10,NULL,Ask,(Ask-100*_Point),(Ask+100 * _Point),NULL); } } Comment("The current signal is: ",signal); } bool CheckTradingTime() { if(StringSubstr(CurrentTime,0,5)==StartTradingTime) TradingIsAllowed=true; if(StringSubstr(CurrentTime,0,5)==StopTradingTime) TradingIsAllowed=false; return TradingIsAllowed; }
HI ,
First of all thanks for your help. I forgot to change a variable to the standard for 1 hour before i copied the code. Please check with the code above again.
Following statement was wrong for 1h
if(now - lastTrade >= 3600 )
I had it on 0 .
When you test it, you can see the code only looks at full hours if the condition is met.
But my Goal is when a trade is closed, the EA should look after the conditions from the beginning and not for example on 2 o clock, 3 o clock and so.. For example when
the conditions are met at 0145 . he doesn't start the trade before 0200 .
I hope you understand what i mean.
Here for example. only on 1600, 1000 , 1400 ... but my goal is that he should start a trade when the conditions like ccivalue above xy is. This should be priority and not the full hour. Now he looks at every full hour, when the ccivalue is above my config he starts a trade. This is false because he should start the trade when it starts to go above the 120 and not only check it on the full hour. I think it is easy to solve but i am hanging there 1 week.
I just want that after every trade the EA should make a "break" befor enter a trade again. So the CCI had a chance to cool down.
int CCIDefinition =iCCI(_Symbol,_Period,14,PRICE_CLOSE); ArraySetAsSeries(myPriceArray,true); CopyBuffer(CCIDefinition,0,0,3,myPriceArray);
Perhaps you should read the manual, especially the examples.
How To Ask Questions The Smart Way. (2004)
How To Interpret Answers.
RTFM and STFW: How To Tell You've Seriously Screwed Up.
They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020)
How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020)
MQL5 for Newbies: Guide to Using Technical Indicators in Expert Advisors - MQL5 Articles (2010)
How to call indicators in MQL5 - MQL5 Articles (2010)
Perhaps you should read the manual, especially the examples.
How To Ask Questions The Smart Way. (2004)
How To Interpret Answers.
RTFM and STFW: How To Tell You've Seriously Screwed Up.
They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020)
How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020)
MQL5 for Newbies: Guide to Using Technical Indicators in Expert Advisors - MQL5 Articles (2010)
How to call indicators in MQL5 - MQL5 Articles (2010)
Hi,
Thank you very much i will read and try to do it better. But in my example what is the solution with the time problem?
I just want that after a trade is closed, the EA should wait 1hour. After that hour the EA should start from beginning to look after the criteria to start the next trade (cci value) . In my example when a trade is finished for example at 14.45h ,the indicator should start looking after the criterias at 1545 . So when the criteria is met at lets say 1610 then it should open the next position. but in my example it only looks after the criterias at 1600, 1700, 1800 ... and starts the trades only on full hours. So i got many losses.
I think it must be a small correction in the code or not?
Thank you
Creating an indicator per tick is a time problem. The fix is a small correction. Asked and answered.
Hi again,
So i tried different ways to solve it but i can't get it work.
Could you help me how i can code it that the EA simply waits after a trade?
For example when a trade is closed, the EA should wait a specific time before opening another trade?
norman Nething-wilhelm #: So i tried different ways to solve it but i can't get it work.
What is “it?” Your question was about using CCI.
“Doesn't work” is meaningless — just like saying the car doesn't work. Doesn't start, won't go in gear, no electrical, missing the key, flat tires — meaningless.
How To Ask Questions The Smart Way. (2004)
When asking about code
Be precise and informative about your problemDo you really expect an answer? There are no mind readers here and our crystal balls are cracked. Always post all relevant code (using Code button) or attach the source file.
We can't see your broken code.
- norman Nething-wilhelm #: For example when a trade is closed, the EA should wait a specific time before opening another trade?
void OnTick(){ static datetime sleepUntil=0; datetime now=TimeCurrent(); if( PositionsTotal() > 0) sleepUntil = now + nMinutes * 60; if( now < sleepUntil) return; ⋮
- 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 wrote an EA which uses the CCI Indicator.
When CCIValue > 120 then it opens a Buy Position and if it is <-120 it opens a sell Position
example code:
if(CCIValue> 120)
signal="buy";
if(CCIValue< -120)
signal="sell";
--------------------------------------------------
if(signal=="sell" && PositionsTotal()<1)
trade.Sell(1.10,NULL,Bid,(Bid+100*_Point),(Bid-100*_Point),NULL);
if(signal=="buy" && PositionsTotal()<1)
trade.Buy(1.10,NULL,Ask,(Ask-100*_Point),(Ask+100 * _Point),NULL);
------------------------------------------------
It is not the complete Code but i think you know what i mean. So now for example i would like to set the take profit point on the sell Position when CCIValue is >-120.
Is this possible?
I tried for example:
if(signal=="sell" && PositionsTotal()<1)
trade.Sell(1.10,NULL,Bid,(Bid+100*_Point),(CCIValue>-120),NULL);
My idea of the EA is that he starts a position when the CCIValue goes in the Oversold or Overbuy Area and closes the trade when it goes back under the 100 values.
Thank you very much for your help