You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
...
tkuan77
You are assuming that the 2 crosses (the 10,20 SMA cross and 20,50 SMA cross) will happen on exactly the same bar (and not just the same bar, since the way you have the crosses function check written, they must happen on exactly the same tick), which is a very, very rare occasion (you can check that on the chart too, and you will see that it almost never happens even for bars let alone ticks). You have to change the condition testing and condition combination (try it out with just one condition and you will see what do I mean)
Hi I did some editing and decided to focus on short trade first just to make things simpler. However, the situation still remains the same. After executing 1 trade, it stop opening new trades. my criteria are there should only be 1 trade open at any point of time and trade will only open when LWMA fast crossed over LWMA slow and SMA fast crossed over SMA slow, both crossed downwards.
My TP is 100pips and SL is 150pips
Please help.
//+------------------------------------------------------------------+
#property copyright "zzz"
//--- input parameters
extern double TakeProfit=1000.0;
extern double Lots=0.01;
extern double StopLoss=1500.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0;
static int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //main up
if(mainline1<mainline2)maincurrent_dirction = 2; //main down
if(maincurrent_dirction != mainlast_direction) //main changed
{
mainlast_direction = maincurrent_dirction;
return (mainlast_direction);
}
else
{
return (0);
}
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_dirction = 0;
if(line1>line2)current_dirction = 1; //up
if(line1<line2)current_dirction = 2; //down
if(current_dirction != last_direction) //changed
{
last_direction = current_dirction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
mainshortEma = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(mainisCrossed == 2 && isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
Thanks and regards
Terrancetkuan77 You are assuming that the 2 crosses (the 10,20 SMA cross and 20,50 SMA cross) will happen on exactly the same bar (and not just the same bar, since the way you have the crosses function check written, they must happen on exactly the same tick), which is a very, very rare occasion (you can check that on the chart too, and you will see that it almost never happens even for bars let alone ticks). You have to change the condition testing and condition combination (try it out with just one condition and you will see what do I mean)
Hi Mladen, I get what you mean. I have tried it out with only one condition and it works, however how do i merge the 2 conditions together? Do i have to group them together or something? Thanks.
...
tkuan77
You already did that (this part : if(mainisCrossed == 2 && isCrossed == 2)) and you ran into a problem that the two condition do not happen at the same time. In that condition either mainisCrossed or isCrossed will receive a value of 2, but they will almost never have the value of 2 at the same time, and that is preventing orders opening
You have to "rethink" the entry rules (conditions) and find a combination that is probable (since this condition you are trying to work with is almost not probable)
Hi Mladen, I get what you mean. I have tried it out with only one condition and it works, however how do i merge the 2 conditions together? Do i have to group them together or something? Thanks.
tkuan77
You already did that (this part : if(mainisCrossed == 2 && isCrossed == 2)) and you ran into a problem that the two condition do not happen at the same time. In that condition either mainisCrossed or isCrossed will receive a value of 2, but they will almost never have the value of 2 at the same time, and that is preventing orders opening
You have to "rethink" the entry rules (conditions) and find a combination that is probable (since this condition you are trying to work with is almost not probable)Hi Mladen,
I notice that earlier today and redo this portion. I have created a counter for both the up and down trend portion. E.g. when SMA20 crosses SMA50 upwards the upcounter will increase in value ie ++ and the isCrossed buy condition will only occur when upcounter is higher then 1 and isCrossed = 2. However I am still getting the same error here. Am I still doing the same wrong thing is another manner or is this another new error? Thanks.
//--- input parameters
extern double TakeProfit=1000.0;
extern double Lots=0.01;
extern double StopLoss=1500.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0;
static int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //main up
if(mainline1<mainline2)maincurrent_dirction = 2; //main down
if(maincurrent_dirction != mainlast_direction) //main changed
{
mainlast_direction = maincurrent_dirction;
return (mainlast_direction);
}
else
{
return (0);
}
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_dirction = 0;
if(line1>line2)current_dirction = 1; //up
if(line1<line2)current_dirction = 2; //down
if(current_dirction != last_direction) //changed
{
last_direction = current_dirction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total, downcounter, upcounter;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
mainshortEma = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
downcounter = 1;
upcounter = 1;
if(mainisCrossed == 2)
{
downcounter++;
if(total 1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
}
return(0);
}
return(0);
if(mainisCrossed == 1)
{
upcounter++;
if(total 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,
Ask+TakeProfit*Point,"My EA",12345,0,Green);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
Please help me with alert
Hi Everyone
Can someone please assist me in creating an alert (popup with sound as well as email alert) for the indicator below.
I would really appreciate your assistance.
Happy trading
pdt330
"/*------------------------------------------------------------------------------------
Name: xSuperTrend MTF.mq4
Copyright ©2011, Xaphod, http://wwww.xaphod.com
Supertrend formula Copyright © Unknown. Someone on the Internets:
UpperLevel=(High+Low)/2+Multiplier*Atr(Period);
LowerLevel=(High+Low)/2-Multiplier*Atr(Period);
Description: MTF SuperTrend Indicator.
Change log:
2011-12-18. Xaphod, v1.01
- Removed dependancy on external indicator for iCustom calls
2011-12-04. Xaphod, v1.00
- First Release
-------------------------------------------------------------------------------------*/
// Indicator properties
#property copyright "Copyright © 2011, Xaphod"
#property link "http://wwww.xaphod.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 DimGray
#property indicator_color2 OrangeRed
#property indicator_color3 MediumSeaGreen
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
#property indicator_maximum 1
#property indicator_minimum 0
// Constant definitions
#define INDICATOR_NAME "xSuperTrend MTF"
#define INDICATOR_VERSION "v1.01, www.xaphod.com"
// Indicator parameters
extern string Version.Info=INDICATOR_VERSION;
extern string SuperTrend.Settings="——————————————————————————————";
extern int SuperTrend.Period=10; // SuperTrend ATR Period
extern double SuperTrend.Multiplier=1.7; // SuperTrend Multiplier
extern int SuperTrend.TimeFrame=0; // SuperTrend Timeframe
extern bool SuperTrend.AutoTF=True; // Select next higher TF. If TF=M15 then H1 is selected
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
int giTimeFrame;
int giRepaintBars;
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
// Set buffers
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, gadSuperTrend);
SetIndexLabel(0, "SuperTrend");
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadDnBuf);
SetIndexLabel(1, "SuperTrend Down");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadUpBuf);
SetIndexLabel(2, "SuperTrend Up");
// Set Timeframe
if (SuperTrend.TimeFrame==0)
SuperTrend.TimeFrame=Period();
if (SuperTrend.AutoTF==True)
SuperTrend.TimeFrame=NextHigherTF(Period());
// Calculation call via iCustom
if (SuperTrend.AutoTF==False && SuperTrend.Settings=="") {
giRepaintBars=0;
}
// Higher Time-frame
else if (SuperTrend.TimeFrame!=Period()) {
IndicatorShortName(INDICATOR_NAME+" "+TF2Str(SuperTrend.TimeFrame) +"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
giRepaintBars=SuperTrend.TimeFrame/Period()*2+1;
}
// Current Time-frame
else {
IndicatorShortName(INDICATOR_NAME+" "+TF2Str(SuperTrend.TimeFrame) +"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
giRepaintBars=0;
}
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=MathMax(giRepaintBars,Bars-iCountedBars);
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend Locally
if (SuperTrend.TimeFrame==Period()) {
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=(High+Low)/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=(High+Low)/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw Histo
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
// Calc higher TF SuperTrend via iCustom
else {
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
gadSuperTrend=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,0,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
gadDnBuf=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,1,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
gadUpBuf=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,2,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
//gadSuperTrend=iCustom(NULL,SuperTrend.TimeFrame,"xSuperTrend","","",SuperTrend.Period,SuperTrend.Multiplier,0,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
}
}
return(0);
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------------------
// function: TF2Str()
// Description: Convert time-frame to a string
//-----------------------------------------------------------------------------
string TF2Str(int iPeriod) {
switch(iPeriod) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN1");
default: return("M"+iPeriod);
}
}
//-----------------------------------------------------------------------------
// function: NextHigherTF()
// Description: Select the next higher time-frame.
// Note: M15 and M30 both select H1 as next higher TF.
//-----------------------------------------------------------------------------
int NextHigherTF(int iPeriod) {
if (iPeriod==0) iPeriod=Period();
switch(iPeriod) {
case PERIOD_M1: return(PERIOD_M5);
case PERIOD_M5: return(PERIOD_M15);
case PERIOD_M15: return(PERIOD_H1);
case PERIOD_M30: return(PERIOD_H1);
case PERIOD_H1: return(PERIOD_H4);
case PERIOD_H4: return(PERIOD_D1);
case PERIOD_D1: return(PERIOD_W1);
case PERIOD_W1: return(PERIOD_MN1);
case PERIOD_MN1: return(PERIOD_MN1);
default: return(Period());
}
}"
...
tkuan77
As I already explained : your function that checks the crosses is checking it for every tick. It does not matter how you place the 2 conditions (you just wrote the same conditions in a bit different way, does not matter the counter addition) those 2 conditions (cross of LWMA 10,20 and cross of SMA 20,50) will not happen at the same time so you can not test if both conditions are fulfilled since they are never going to happen at the same tick. You can not try to combine signals that will happen only now and then and expect that they will happen at the same time, since they are not going to.
Change the logic.
For example, try something like :But then it is a completely different logic and I can not evaluate it any more since it deviates from your idea. Bit, I will repeat, that your idea to enter when both crosses happen at the same time will not work since they will not happen at the same time
Hi Mladen,
I notice that earlier today and redo this portion. I have created a counter for both the up and down trend portion. E.g. when SMA20 crosses SMA50 upwards the upcounter will increase in value ie ++ and the isCrossed buy condition will only occur when upcounter is higher then 1 and isCrossed = 2. However I am still getting the same error here. Am I still doing the same wrong thing is another manner or is this another new error? Thanks.
//--- input parameters
extern double TakeProfit=1000.0;
extern double Lots=0.01;
extern double StopLoss=1500.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0;
static int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //main up
if(mainline1<mainline2)maincurrent_dirction = 2; //main down
if(maincurrent_dirction != mainlast_direction) //main changed
{
mainlast_direction = maincurrent_dirction;
return (mainlast_direction);
}
else
{
return (0);
}
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_dirction = 0;
if(line1>line2)current_dirction = 1; //up
if(line1<line2)current_dirction = 2; //down
if(current_dirction != last_direction) //changed
{
last_direction = current_dirction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total, downcounter, upcounter;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
mainshortEma = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
downcounter = 1;
upcounter = 1;
if(mainisCrossed == 2)
{
downcounter++;
if(total 1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
}
return(0);
}
return(0);
if(mainisCrossed == 1)
{
upcounter++;
if(total 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,
Ask+TakeProfit*Point,"My EA",12345,0,Green);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+...
Posted it here : https://www.mql5.com/en/forum/180648/page255
Hi Everyone
Can someone please assist me in creating an alert (popup with sound as well as email alert) for the indicator below.
I would really appreciate your assistance.
Happy trading
pdt330
"/*------------------------------------------------------------------------------------
Name: xSuperTrend MTF.mq4
Copyright ©2011, Xaphod, http://wwww.xaphod.com
Supertrend formula Copyright © Unknown. Someone on the Internets:
UpperLevel=(High+Low)/2+Multiplier*Atr(Period);
LowerLevel=(High+Low)/2-Multiplier*Atr(Period);
Description: MTF SuperTrend Indicator.
Change log:
2011-12-18. Xaphod, v1.01
- Removed dependancy on external indicator for iCustom calls
2011-12-04. Xaphod, v1.00
- First Release
-------------------------------------------------------------------------------------*/
// Indicator properties
#property copyright "Copyright © 2011, Xaphod"
#property link "http://wwww.xaphod.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 DimGray
#property indicator_color2 OrangeRed
#property indicator_color3 MediumSeaGreen
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
#property indicator_maximum 1
#property indicator_minimum 0
// Constant definitions
#define INDICATOR_NAME "xSuperTrend MTF"
#define INDICATOR_VERSION "v1.01, www.xaphod.com"
// Indicator parameters
extern string Version.Info=INDICATOR_VERSION;
extern string SuperTrend.Settings="——————————————————————————————";
extern int SuperTrend.Period=10; // SuperTrend ATR Period
extern double SuperTrend.Multiplier=1.7; // SuperTrend Multiplier
extern int SuperTrend.TimeFrame=0; // SuperTrend Timeframe
extern bool SuperTrend.AutoTF=True; // Select next higher TF. If TF=M15 then H1 is selected
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
int giTimeFrame;
int giRepaintBars;
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
// Set buffers
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, gadSuperTrend);
SetIndexLabel(0, "SuperTrend");
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadDnBuf);
SetIndexLabel(1, "SuperTrend Down");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadUpBuf);
SetIndexLabel(2, "SuperTrend Up");
// Set Timeframe
if (SuperTrend.TimeFrame==0)
SuperTrend.TimeFrame=Period();
if (SuperTrend.AutoTF==True)
SuperTrend.TimeFrame=NextHigherTF(Period());
// Calculation call via iCustom
if (SuperTrend.AutoTF==False && SuperTrend.Settings=="") {
giRepaintBars=0;
}
// Higher Time-frame
else if (SuperTrend.TimeFrame!=Period()) {
IndicatorShortName(INDICATOR_NAME+" "+TF2Str(SuperTrend.TimeFrame) +"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
giRepaintBars=SuperTrend.TimeFrame/Period()*2+1;
}
// Current Time-frame
else {
IndicatorShortName(INDICATOR_NAME+" "+TF2Str(SuperTrend.TimeFrame) +"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
giRepaintBars=0;
}
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=MathMax(giRepaintBars,Bars-iCountedBars);
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend Locally
if (SuperTrend.TimeFrame==Period()) {
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=(High+Low)/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=(High+Low)/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw Histo
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
// Calc higher TF SuperTrend via iCustom
else {
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
gadSuperTrend=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,0,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
gadDnBuf=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,1,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
gadUpBuf=iCustom(Symbol(),SuperTrend.TimeFrame,WindowExpertName(),"","",SuperTrend.Period,
SuperTrend.Multiplier,SuperTrend.TimeFrame,False,2,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
//gadSuperTrend=iCustom(NULL,SuperTrend.TimeFrame,"xSuperTrend","","",SuperTrend.Period,SuperTrend.Multiplier,0,iBarShift(Symbol(), SuperTrend.TimeFrame, Time));
}
}
return(0);
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------------------
// function: TF2Str()
// Description: Convert time-frame to a string
//-----------------------------------------------------------------------------
string TF2Str(int iPeriod) {
switch(iPeriod) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN1");
default: return("M"+iPeriod);
}
}
//-----------------------------------------------------------------------------
// function: NextHigherTF()
// Description: Select the next higher time-frame.
// Note: M15 and M30 both select H1 as next higher TF.
//-----------------------------------------------------------------------------
int NextHigherTF(int iPeriod) {
if (iPeriod==0) iPeriod=Period();
switch(iPeriod) {
case PERIOD_M1: return(PERIOD_M5);
case PERIOD_M5: return(PERIOD_M15);
case PERIOD_M15: return(PERIOD_H1);
case PERIOD_M30: return(PERIOD_H1);
case PERIOD_H1: return(PERIOD_H4);
case PERIOD_H4: return(PERIOD_D1);
case PERIOD_D1: return(PERIOD_W1);
case PERIOD_W1: return(PERIOD_MN1);
case PERIOD_MN1: return(PERIOD_MN1);
default: return(Period());
}
}"tkuan77
As I already explained : your function that checks the crosses is checking it for every tick. It does not matter how you place the 2 conditions (you just wrote the same conditions in a bit different way, does not matter the counter addition) those 2 conditions (cross of LWMA 10,20 and cross of SMA 20,50) will not happen at the same time so you can not test if both conditions are fulfilled since they are never going to happen at the same tick. You can not try to combine signals that will happen only now and then and expect that they will happen at the same time, since they are not going to.
Change the logic.
For example, try something like : But then it is a completely different logic and I can not evaluate it any more since it deviates from your idea. Bit, I will repeat, that your idea to enter when both crosses happen at the same time will not work since they will not happen at the same timeHi Mladen, I changed my logic like you said and it works~! Thanks for the guidance!
Hi, Can someone please enter the arrow when the lines are crossing
Thank you and Best regards !
ICostum JRSX
EA Problem
Hi everyone, I recently downloaded rangeLagma_V2 EA which I found in the thread "Money Making Manual Trading System" - by Darkonix. I'm getting an invalid stoploss error ticket=-1 in my journal and the EA is not opening any orders what so ever. I am using Oanda Broker (ECN, 5 Digit), so maybe it is not sending orders properly because it is not coded for ECN? I'm not sure, hopefully one of you smart gentlemen can help me out, I don't know anything much about coding .
Here is the file: rangelagma_v2.mq4
Thanks in advance!