molanis.com/forum - Tools for MetaTrader : The place to ask about the best expert advisor builder, expert advisor downloads, and expert advisor programming
http://www.molanis.com/forum/

EA trade problem
http://www.molanis.com/forum/viewtopic.php?f=3&t=70
Page 1 of 1

Author:  Tom [ Wed Feb 24, 2010 11:28 pm ]
Post subject:  EA trade problem

For the life of me I can't figure out why this EA won't take Long trades? Anyone???

Attachments:
AscTrend2.mol [8.78 KiB]
Downloaded 823 times

Author:  molanisfx [ Thu Feb 25, 2010 10:35 am ]
Post subject:  Re: EA trade problem

It looks good to me. But we need the "AscTrend2" indicator to test it. Can you upload it please? (.mql or .ex4)

Author:  Tom [ Thu Feb 25, 2010 6:46 pm ]
Post subject:  Re: EA trade problem

//+------------------------------------------------------------------+
//| AscTrend2.mq4 |
//| Copyright © 2006, Nick Bilak |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Nick Bilak"

//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Magenta
//---- indicator parameters
extern int Risk=5;
extern double MONYRISK=2.0;
//---- indicator buffers
double e1[];
double e2[];

int i,value2=1,Counter,DCounter,TrueCount=0,MRO1=0,MRO2=0,MRO3=0,MRO4=0;
double value3=18,value4=0,value5=0,value6=0,value7=0,value8=0,value9=0,
value10=10,value11=10000,value12=0,value13=0,value14=0,value19=0,
value4_1=0,value4_2=0,value9_1=0,value10_1=0,value11_1=0,value12_1=0,
Range=0,AvgRange=0,AvgRange_1=0,AvgRange_2=0,
val1=0,val2=0,NumBars=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexEmptyValue(0,0);
SetIndexEmptyValue(1,0);
if(
!SetIndexBuffer(0,e1) ||
!SetIndexBuffer(1,e2)
)
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("AscT2("+Risk+")");
//---- initialization done
return(0);

}

int start() {

int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-20-counted_bars;
double spread=Ask-Bid;
for(i=limit; i>=0; i--) {
Range=0;
AvgRange=0;
for (Counter=i; Counter<=i+9; Counter++) {
AvgRange=AvgRange+MathAbs(spread+High[Counter]-Low[Counter]);
}
Range=AvgRange/10.0;
if (i==Bars-20) {
value2=1; value3=18; value10=10000; value10_1=0;
value19=MONYRISK*Range*Point;
value2=Risk;
value3=18+3*value2;
value9=0;
}
Counter=i;
AvgRange=0;
for (Counter=i; Counter<=i+9-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value11=AvgRange/9.0;
// -----
//value12=UserFunction("AverageClose",value3,i);
Counter=i;
AvgRange=0;
for (Counter=i; Counter<=i+value3-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value12=AvgRange/value3;
// -----
value13=Range;
// -----
//value4=UserFunction("JESSD",High[i],Low[i],High[i+value2],Low[i+value2],Close[i+value2]);
AvgRange=(spread+High[i]+Low[i])/2.0;
if (Close[i+value2]<AvgRange) {
value4=2*AvgRange-Low[i+value2];
} else {
value4=2*AvgRange-spread+High[i+value2];
}
// -----
Counter=i;
TrueCount=0;
while (Counter<i+2 && TrueCount<1) {
//value4=UserFunction("JESSD",High[Counter],Low[Counter],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange=(spread+High[Counter]+Low[Counter])/2.0;
if (Close[Counter+value2]<AvgRange) {
value4=2*AvgRange-Low[Counter+value2];
} else {
value4=2*AvgRange-spread+High[Counter+value2];
}
value4=NormalizeDouble(value4,2);
//value4_1=UserFunction("JESSD",High[Counter+1],Low[Counter+1],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange_1=(spread+High[Counter+1]+Low[Counter+1])/2.0;
if (Close[Counter+1+value2]<AvgRange_1) {
value4_1=2*AvgRange_1-Low[Counter+1+value2];
} else {
value4_1=2*AvgRange_1-spread+High[Counter+1+value2];
}
value4_1=NormalizeDouble(value4_1,2);
//value4_2=UserFunction("JESSD",High[Counter+2],Low[Counter+2],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange_2=(spread+High[Counter+2]+Low[Counter+2])/2.0;
if (Close[Counter+2+value2]<AvgRange_2) {
value4_2=2*AvgRange_2-Low[Counter+2+value2];
} else {
value4_2=2*AvgRange_2-spread+High[Counter+2+value2];
}
value4_2=NormalizeDouble(value4_2,2);
if (value4>value4_1 && value4_1<value4_2) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) MRO1=Counter-i-1; else MRO1=-1;
// -----
Counter=i;
TrueCount=0;
while (Counter<i+2 && TrueCount<1) {
//value4=UserFunction("JESSD",High[Counter],Low[Counter],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange=(spread+High[Counter]+Low[Counter])/2.0;
if (Close[Counter+value2]<AvgRange) {
value4=2*AvgRange-Low[Counter+value2];
} else {
value4=2*AvgRange-spread+High[Counter+value2];
}
value4=NormalizeDouble(value4,2);
//value4_1=UserFunction("JESSD",High[Counter+1],Low[Counter+1],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange_1=(spread+High[Counter+1]+Low[Counter+1])/2.0;
if (Close[Counter+1+value2]<AvgRange_1) {
value4_1=2*AvgRange_1-Low[Counter+1+value2];
} else {
value4_1=2*AvgRange_1-spread+High[Counter+1+value2];
}
value4_1=NormalizeDouble(value4_1,2);
//value4_2=UserFunction("JESSD",High[Counter+2],Low[Counter+2],High[Counter+value2],Low[Counter+value2],Close[Counter+value2]);
AvgRange_2=(spread+High[Counter+2]+Low[Counter+2])/2.0;
if (Close[Counter+2+value2]<AvgRange_2) {
value4_2=2*AvgRange_2-Low[Counter+2+value2];
} else {
value4_2=2*AvgRange_2-spread+High[Counter+2+value2];
}
value4_2=NormalizeDouble(value4_2,2);
if (value4<value4_1 && value4_1>value4_2) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) MRO2=Counter-i-1; else MRO2=-1;
// -----
//value4_1=UserFunction("JESSD",High[i+1],Low[i+1],High[i+1+value2],Low[i+1+value2],Close[i+1+value2]);
AvgRange_1=(spread+High[i+1]+Low[i+1])/2.0;
if (Close[i+1+value2]<AvgRange_1) {
value4_1=2*AvgRange_1-Low[i+1+value2];
} else {
value4_1=2*AvgRange_1-spread+High[i+1+value2];
}
// -----
if (MRO1>-1 && Low[i+1]>value4_1) value5=value4_1-value13;
if (MRO2>-1 && spread+High[i+1]<value4_1) value6=value4_1+value13;
// -----
//value11_1=UserFunction("AverageClose",9,i+1);
Counter=i;
AvgRange=0;
for (Counter=i+1; Counter<=i+1+9-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value11_1=AvgRange/9.0;
// -----
//value12_1=UserFunction("AverageClose",value3,i+1);
Counter=i;
AvgRange=0;
for (Counter=i+1; Counter<=i+1+value3-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value12_1=AvgRange/value3;
// -----
if (value11_1<value12_1 && value11>value12) {
//value5=UserFunction("TrueLow",i)-value13;
if (Close[i+1]<Low[i]) {
value5=Close[i+1]-value13;
} else {
value5=Low[i]-value13;
}
}
if (value11_1>value12_1 && value11<value12) {
//value5=UserFunction("TrueHigh",i)+value13;
if (Close[i+1]>spread+High[i]) {
value5=Close[i+1]+value13;
} else {
value5=spread+High[i]+value13;
}
}
// -----
if (MathAbs(Open[i]-Close[i+1])>=1.618*value13) {
if (value11>value12) value5=Low[i]-value13;
if (value11<value12) value14=spread+High[i]+value13;
}
// -----
//value7=UserFunction("BS105",Low[i],2.40,value13,value9);
if (Low[i]-2.40*value13<value9) {
value7=value9;
} else {
value7=Low[i]-2.40*value13;
}
// -----
//value8=UserFunction("SS105",High[i],2.40,value13,value10);
if (spread+High[i]+2.40*value13>value10) {
value8=value10;
} else {
value8=spread+High[i]+2.40*value13;
}
// -----
//value9=UserFunction("BS0",Low[i],60,value7,RISK,value19);
value9=value7;
// -----
//value10=UserFunction("SS0",High[i],60,value8,RISK,value19);
value10=value8;
// -----
if (Low[i]-value9>value19/Point) value9=Low[i]-(1.50+0.1*Risk)*value13;
if (value10-spread+High[i]>value19/Point) value10=spread+High[i]+(1.50+0.1*Risk)*value13;
if (value11>=value12 && value5>=value9) value9=value5;
if (value11<=value12 && value6<=value10) value10=value6;
if (value11<=value12 && value5<=value9) value9=value5;
if (value11>=value12 && value6>=value10) value10=value6;
// -----
Counter=i;
TrueCount=0;
while (Counter<i+2 && TrueCount<2) {
//value11=UserFunction("AverageClose",9,Counter);
DCounter=Counter;
AvgRange=0;
for (DCounter=Counter; DCounter<=Counter+9-1; DCounter++) {
AvgRange=AvgRange+Close[DCounter];
}
value11=AvgRange/9.0;
//value12=UserFunction("AverageClose",value3,Counter);
DCounter=Counter;
AvgRange=0;
for (DCounter=Counter; DCounter<=Counter+value3-1; DCounter++) {
AvgRange=AvgRange+Close[DCounter];
}
value12=AvgRange/value3;
if (value11>=value12) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=2) MRO3=Counter-i-1; else MRO3=-1;
// -----
Counter=i;
TrueCount=0;
while (Counter<i+2 && TrueCount<2) {
//value11=UserFunction("AverageClose",9,Counter);
DCounter=Counter;
AvgRange=0;
for (DCounter=Counter; DCounter<=Counter+9-1; DCounter++) {
AvgRange=AvgRange+Close[DCounter];
}
value11=AvgRange/9.0;
//value12=UserFunction("AverageClose",value3,Counter);
DCounter=Counter;
AvgRange=0;
for (DCounter=Counter; DCounter<=Counter+value3-1; DCounter++) {
AvgRange=AvgRange+Close[DCounter];
}
value12=AvgRange/value3;
if (value11<=value12) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=2) MRO4=Counter-i-1; else MRO4=-1;
// -----
if (MRO3>-1 && value9<=value9_1) value9=value9_1;
if (MRO4>-1 && value10>=value10_1) value10=value10_1;
// -----
//value11=UserFunction("AverageClose",9,i);
Counter=i;
AvgRange=0;
for (Counter=i; Counter<=i+9-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value11=AvgRange/9.0;
// -----
//value12=UserFunction("AverageClose",value3,i);
Counter=i;
AvgRange=0;
for (Counter=i; Counter<=i+value3-1; Counter++) {
AvgRange=AvgRange+Close[Counter];
}
value12=AvgRange/value3;
// -----
val1=0;
val2=0;
if (value9>0 && value11>=value12 && value9<=spread+High[i]) {
val1=value9;
}
if (value10>0 && value10<1000000000 && value11<=value12 && value10>=Low[i]) {
val2=value10;
}
// -----
value9_1=value9;
value10_1=value10;
e1[i]=val1; //SetIndexValue(i,val1);
e2[i]=val2; //SetIndexValue2(i,val2);
// -----
}
}

Author:  molanisfx [ Thu Feb 25, 2010 9:00 pm ]
Post subject:  Re: EA trade problem

On thing to change is the custom fields : "AscTrend2",5,2 is the right one - When you add the custom indicator to a graph, go to the input tab and there you will find the indicator parameters (5 and 2 in this case). We'll try to make this discovery easier in the next version.

This indicator is a bit complex. You see two colors in the screen which means you have two indicator signals (Aqua and Magenta). When adding the indicator to a graph (or editing its properties) go to colors - there you will see the two color and a column number #.
0 Aqua
1 Magenta
This means that to get the Aqua signal you need to select Mode 0 and to get the Magenta signal you need to select mode 1

On the parameters of the custom indicators (right below "AscTrend2",5,2) change the mode to 1 and 0.
Looking at the graph it seems that If you are above Aqua (Mode 0) you should buy

Nice indicator BTW

Page 1 of 1 All times are UTC - 5 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/