Gogetter EA - página 15

 

el archivo de inclusión...

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

//| 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) escribió:

> Hola Aaragorn,

>

> Siento el retraso.

>

> 1. Por favor, intente marcar el campo Recalcular.

> El asunto es que cada vez que inicie la prueba experta con la opción "Recalcular" activada, los datos se modelarán de nuevo.

> Como las nuevas cotizaciones ya han llegado en este momento, los datos modelados en base a estas nuevas cotizaciones serán diferentes.

¿No es una respuesta suficientemente buena? Quiero decir que si los datos que faltan se maquillan o se modelan de forma diferente cada vez que hay nuevos datos, la realización de una prueba en el mismo periodo de tiempo obviamente daría resultados diferentes...

¿Por qué cree que no es ésta la razón del problema?

Patrick

¿Qué nuevas cotizaciones entrarán en el historial? Las nuevas cotizaciones sólo actualizarán los días más recientes. ¿Cómo van a afectar las nuevas cotizaciones a los datos antiguos?

Si esta es la respuesta, la pregunta es de nuevo: "¿por qué no modela los datos antiguos que no cambian, por qué los modela de forma diferente?"

 
portlandPipper:
Aragorn, acabo de leer todo este hilo. En primer lugar, tengo que darte la enhorabuena por seguir con esto. Hace aproximadamente un año, pasé cada momento de vigilia tratando de llegar al santo grial de los asesores. Niveles de Fib, puntos de pivote, estocásticos, MA's, etc... Dos lecciones aprendidas - a) el probador de estrategias es una completa pérdida de tiempo. b) la cuenta demo funciona de manera diferente a una cuenta real. Fui capaz de llegar a un código que operaba con un 90% de precisión --- en el backtesting. En la cuenta de demostración que se redujo a 75% o así, y cuando lo probé en vivo que estaba por debajo del 50% (que, con la gestión del dinero adecuado todavía debe ser utilizable). Mi punto es, no te golpees tratando de optomizar al probador de la estrategia, o la cuenta demo. Parece que tienes algo bueno. Voy a tomar su asesor de casa, leer a través del código de este fin de semana - y configurarlo en mi cuenta real de comercio .01 lotes. Esa es la única manera de saber si funciona o no. ¡Gracias por compartir su código!

¿qué has encontrado?

 
 

¿Cómo se elimina una cuenta en Metatrader?

[Editar]

Lo encontré.

Navegador - Cuentas - pasar el ratón por encima de la cuenta - clic derecho - eliminar.