Gogetter EA - page 15

 

the include file...

//+------------------------------------------------------------------+

//| GoGetterfunctions.mqh |

//| In no event will author be liable for any damages whatsoever. |

//| Use at your own risk. |

//| |

//| Please do not remove this header. |

//+------------------------------------------------------------------+

#property copyright "Aaragorn and Eaglehawk & Maji & Robert C."

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

#property link "http://forex.factoid.ca/forums/showthread.php?t=104"

#property link "https://www.forex-tsd.com/expert-advisors-metatrader-4/2840-gogetter-ea.html"

// many thanks goes to all those on the tsdforex forum and factoid forum who have encouraged us this far

//+------------------------------------------------------------------+

//| defines |

//+------------------------------------------------------------------+

//+-----------Store HIGH, LOW matching data------+

#define SLSIZE 15

static int SLIndex = 0;

static double sLocatorLows[ SLSIZE ] = { 0 };

static double sLocatorHighs[ SLSIZE ] = { 0 };

//+-----------Stored equity data-----------------+

#define StoredEquitySIZE 5

static int EquityIndex = 0;

static double EQUITY[ StoredEquitySIZE ] = { 0 };

static int EquityValuesStored = 0;

//+-----------close based on time----------------+

extern string Time_Settings="Time In Trade Settings";

extern int MonitorInMinutes = 60; // minutes after open to check state of trade

extern int ThresholdMove = 1; // if after that time we don't have +'x' pips we will exit

extern int MinsMultiplier = 75; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours

//+----------------increase lots variables-----+

double equity=0, ILots=0, LotIncreaseFactor=0.11;

//+------------------------------------------------------------------+

//| Commonly used GoGetter Functions | |

//+------------------------------------------------------------------+

//+-------------StoreHighsAndLows Function----support and resistance arrays------thanks to Robert C for assistance on this-------+

//+-------creates array of each trade series support and resistance for signal profile matching-------------------+

void StoreHighsAndLows(double HIGH, double LOW)

{

if ( SLIndex >= SLSIZE )

{

SLIndex = 0;

}

sLocatorLows[ SLIndex ] = LOW;

sLocatorHighs[ SLIndex ] = HIGH;

SLIndex++;

}

//+-----------------------end of StoreHighsAndLows------------------------------------+

//+--------------- Get past equity function---------Thanks Robert C.-----------+

// This returns past equity from the global equity array. The howFarBack parameter is a positive integer that indicates how far back into the array to go

// 1 would be the previous equity, 2 would be the equity before that, etc.

// the HowFarBack should not be greater than the arraysize

double GetPastEquity(int HowFarBack)

{

if ( HowFarBack > EquityValuesStored )

{

Print("Error getting past equity, Looking back farther than what we have stored");

return (-1);

}

else

{

int PastIndex = EquityIndex - HowFarBack;

if ( PastIndex < 0 )

{

PastIndex += StoredEquitySIZE;

}

return (EQUITY[PastIndex]);

}

}

//+--end of get past equity function-----------+

//+---Stores account Equity value in an array for future comparisions up to as many previous trades as the declared size of the array----thanks Robert C.----+

void StoreAccountEquity(double equity)

{

if ( EquityIndex >= StoredEquitySIZE )

{

EquityIndex = 0;

}

EQUITY[EquityIndex] = equity;

EquityIndex++;

if ( EquityValuesStored < StoredEquitySIZE )

{

EquityValuesStored++;

}

}

//+-------end of Store Equity function-------------------+

//+---------count open trades function-------ty Maji--------------------------+

int CountTrades()

{

int count=0;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))

count++;

}//for

return(count);

}

//+-----------end of count trades-------------------------------------+

//+---------------------Close Based on Time function------------Thanks to 'Maji' for this-------------------+

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = CountTrades();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

LowTrailingStopTrigger = False;

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+---------------------------end of close on time code---------------+

//+------------------------increase lots function-------------------------+

//+----------------increases lots based on account equity-----------------+

//+----TradeWave code-----lot sizing calculated from previous trade---------------+

//+----adjusts lot size for current position based on the previous trade being a winner or loser

double IncreaseLots(double Lots)

{

equity = AccountEquity();

double PreviousEquity = GetPastEquity(1);

if( PreviousEquity != -1 && equity > PreviousEquity )//Manipulates lot size to maximize equity growth from multiple consecutive winning positions

{

// Print("first...ILots: ",ILots," Lots: ",Lots," AccountFreeMargin: ",AccountFreeMargin());

ILots = Lots;

Lots = NormalizeDouble(AccountFreeMargin()/(LotIncreaseFactor*1000/0.1),1);

if(Lots < 0.01) Lots = 0.01;

if(Lots > 99) Lots = 99;

// Print("second...ILots: ",ILots," Lots: ",Lots," AccountFreeMargin: ",AccountFreeMargin());

}

else

{

ILots = Lots;

}

//+--------lot adjustments if the last trade lost-------+

if( PreviousEquity != -1 && equity <= PreviousEquity )//Manipulates lot size to reduce equity drawdown from multiple consecutive losing positions

{

// // Print("Previous Loser TradeWave Equity=",equity," <= PreviousEquity=",PreviousEquity," Lots = ",Lots);

Lots = 0.01; //very effective at reducing drawdown but impacts gains negatively as well

// // Print("XXXXXXXXXXXx Equity=",equity," <= PreviousEquity=",PreviousEquity," Lots = ",Lots);

}

else

{

Lots = Lots;

}

return(Lots);

}

//+----end of TradeWave code-----lot sizing calculated from previous trade---------------+
 
Mistigri:
> MetaQuotes HelpDesk (Tatyana) wrote:

> Hello Aaragorn,

>

> Sorry for delay.

>

> 1. Please try to ucheck the Recalculate field.

> The matter is that every time you launch the expert testing with enabled "Recalculate" option, the data will be modeled afresh.

> Since the new quotes have already come by this moment, the data modeled based on these new quotes will be different.

Isn't that a good answer enough? I mean if the missing data is made up or modeled differently each time new data is available, running a test over the same time period would obviously give you different results ...

Why do you believe this is not the reason for the problem?

Patrick

what new quotes will come in to the history? new quotes will only be updating the most recent days. How will new quotes have any effect on old data?

If this is the answer then the question again is, "why doesn't it model the old data which isn't changing, why does it model that differently?"

 
portlandPipper:
Aragorn, I just read through this entire thread. First, gotta give you props for sticking with this. About a year ago, I spent every waking moment trying to come up with the holy grail of advisors. Fib levels, pivot points, stochastics, MA's, etc... Two lessons learned - a) the strategy tester is a complete waste of time. b) the demo account functions differently than a live account. I was able to come up with some code that traded with about 90% accuracy --- in the backtesting. On the demo account that dropped to 75% or so, and when I tried it live I was under 50% (which, with proper money management should still be usable). My point is, don't beat yourself up trying to optomize to the strategy tester, or demo account. It looks like you've got a good thing going. I'm going to take your advisor home, read through the code this weekend - and set it up on my live account trading .01 lots. That's the only way you will know if it works or not. Thanks for sharing your code!

what have you found?

 
 

How do you delete an account in Metatrader?

[Edit]

Found it.

Navigator - Accounts - mouseover the account - right click - delete.

Reason: