Гогеттер Е.А. - страница 9

 

Надеюсь, кто-то сможет найти здесь ответ на загадку...

В этом посте есть все необходимое для запуска GGL3, если вы поместите этот код в включаемый файл .mqh. Я запечатал отчеты в формате .htm, потому что они оба занимают более 4 мб из-за всех модифицированных ордеров...

Похоже, что моя переделка функции трейлинг-стопа улучшила производительность с 1,2 млн. до 1,3 млн... ИЛИ это результат того, что я начал с начального депозита в 1000 вместо 500. Я не знаю, что именно, потому что GGL3 не будет начинать с начальным депозитом в 500 и открывать какие-либо сделки.

Печально говорить о том, что, несмотря на кажущийся прогресс в этом деле, остается что-то пока нераскрытое, что мешает ему стабильно делать большие деньги. Чаще всего он терпит неудачу и разоряется. Если это не трейлинг-стоп, тогда это должно быть что-то другое... Я не знаю что...

Похоже, что есть большое вознаграждение и большие деньги для того, кто сможет понять, что вызывает такой большой разброс в результатах при одних и тех же настройках одного и того же ea в одном и том же временном диапазоне и исправить это. В настоящее время я в тупике.

Я уезжаю в отпуск на неделю... Надеюсь, что кто-нибудь уже выложит решение, когда я вернусь. Я не понимаю, как я могу перейти к дальнейшему развитию этого проекта, пока тайна не будет раскрыта.

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

//| GGLrewrite.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

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

//| 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-----------------+

//double IncreaseLots()

//{

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

// if(Lots > 99) Lots = 99;

// Print("account free margin = ",AccountFreeMargin()," Lots = ",Lots);

// return(Lots)

//}
Файлы:
ggl3.zip  353 kb
ggl3fail.zip  335 kb
ggl3.gif  6 kb
ggl3fail.gif  8 kb
ggl3.mq4  21 kb
 

здесь находится файл include в заархивированном виде, если так проще управлять.

Файлы:
 

вопросы, которые я задаю сейчас:....

стабилен ли поток данных? Я предполагаю, что да, потому что он использует файлы центра истории.... возможно, это предположение следует оспорить?

стабилен ли способ, которым платформа обрабатывает поток данных, и можно ли положиться на то, что она будет обрабатывать одни и те же данные точно таким же образом каждый раз? Если нет, то кто создал эту платформу? Как с ними связаться? Что нужно исправить, чтобы сделать ее надежной?

кажется маловероятным, что я когда-либо стабилизирую код советника, если любой из этих двух неизвестных параметров все еще потенциально изменчив и фактически ненадежен. Как можно проверить их надежность?

Я разместил просьбу о внимании к этому вопросу на этой странице...

http://www.metaquotes.net/index.php?bugtrack/

Будем надеяться, что у кого-то появится понимание и он скоро ответит.

 
Aaragorn:
Вопросы, которые я задаю сейчас:....

стабилен ли поток данных? Я предполагаю, что да, поскольку он использует файлы центра истории...., возможно, это предположение следует оспорить?

стабилен ли способ, которым платформа обрабатывает поток данных, и можно ли положиться на то, что она будет обрабатывать одни и те же данные точно таким же образом каждый раз? Если нет, то кто создал эту платформу? Как с ними связаться? Что нужно исправить, чтобы сделать ее надежной?

кажется маловероятным, что я когда-либо стабилизирую код советника, если любой из этих двух неизвестных параметров все еще потенциально изменчив и фактически ненадежен. Как можно проверить их надежность?

Я разместил просьбу о внимании к этому вопросу на этой странице...

http://www.metaquotes.net/index.php?bugtrack/

будем надеяться, что у кого-то есть понимание и он скоро ответит.

.... вы пробовали тестировать его на нескольких платформах? я сейчас тестирую один и тот же советник на двух разных платформах BD, чтобы посмотреть, какие результаты я получу. я хотел убедиться, что результаты будут иметь достаточное количество фиксированных данных, прежде чем я возьму один в реальном времени. возможно, это глупая идея, но я не хочу рисковать реальным капиталом, пока у меня не будет достаточно уверенности в том, что советник будет иметь стабильную производительность.

 

Я тестировал его только на metatrader 4, используя 30tf для GPBUSD. Не потому, что это плохая идея, а потому, что я всего лишь человек, а так как я не женщина, то и многозадачность у меня не очень. Так что я просто еще не успел это сделать. Я еще не проводил никакого другого тестирования. Я по-прежнему сосредоточен на вопросах разработки. Моей целью было добиться стабильности в этом единственном случае, прежде чем пытаться распространить его на другие пары, другие платформы или что-то еще.

Во всех случаях используйте свой здравый смысл. Я позволю этому работать на моем демо-счете, пока я буду отсутствовать на следующей неделе. Поскольку мы уезжаем завтра и будем отсутствовать в течение недели, я не вернусь к теме, скорее всего, до следующего вторника.

Я не считаю, что пока можно рисковать реальными деньгами, я просто хочу увидеть, как устраняются нестабильности, а затем провести тест на демо. Затем я посмотрю, что данные подскажут мне, куда двигаться дальше. Я действительно хотел бы пригласить разработчиков внимательно изучить его, пока меня нет, и посмотреть, можно ли проверить нарушения в обработке данных или файлов данных.

Я не вижу ничего явно неправильного в коде, что могло бы объяснить такое расхождение. Я ошибался раньше, могу ошибиться и в этом. Я не против ошибаться, если кто-то может показать мне, как или где это исправить.

Я не буду вам врать, я буду рад отвлечься от этого на некоторое время. Это поглощает слишком много моего внимания, и я заслуживаю того, чтобы найти некоторый баланс в жизни, пока я работаю над этим.

Я оставлю это в ваших руках на некоторое время и посмотрю, что вы сможете с этим сделать. Я просто прошу вас, если вы проведете какие-либо исследования по этому вопросу, сообщить в этой теме о своих результатах, чтобы все могли извлечь из этого пользу.

 

...........

не могли бы вы поместить короткие и длинные позы в один mp4 файл?

 

Почему такие разные отчеты при одинаковых настройках?

Использую прилагаемый советник с прилагаемым файлом include.mqh. Я запускаю тест стратегии, используя эти настройки....

Кнопка Свойства эксперта....

Вкладка "Тестирование"...

1000 USD начальный депозит...

Позиции: длинная и короткая

Оптимизированный параметр: Баланс

Флажок генетического алгоритма не отмечен

Вкладка "Вводы...

Все вводимые пользователем параметры используются точно в том виде, в котором они сохранены в советнике, без каких-либо ручных изменений на этой вкладке.

Вкладка Оптимизация...

На этой вкладке ничего не отмечено

Настройки.....

Советник: GGL3, Aaragorn и Eaglehawk & Maji & Robert C.

Символ: GBPUSD, британский фунт против доллара США

Период: M30

Модель: Каждый тик (на основе всех доступных наименьших таймфреймов с фрактальной интерполяцией каждого тика).

Я использую 1-минутный файл данных, который также прилагается.

Флажок "Использовать дату" установлен; From: 2005.09.09 To: Сегодня (2006.08.22)

Я установил флажок Пересчитать

Я не устанавливаю флажок для Оптимизации

Я получаю этот отчет, когда тест завершен...

**************************************************

Бары в тесте 17735

Смоделировано 702859 тиков

Качество моделирования 89.82%

Начальный депозит 1000.00

Общая чистая прибыль 1375788.66

Валовая прибыль 3678568.71

Валовый убыток -2302780.05

Коэффициент прибыли 1,60

Ожидаемая выплата 472.62

Абсолютная просадка 240,00

Максимальная просадка 231662,10 (15,07%)

Относительная просадка 55,32% (18074,74)

Всего сделок 2911

Короткие позиции (выигранные %) 0 (0.00%)

Длинные позиции (выигранные %) 2911 (42.05%)

Прибыльные сделки (% от общего количества) 1224 (42,05%)

Убыточные сделки (% от общего количества) 1687 (57,95%)

Крупнейший

прибыльная сделка 89100.00

убыточная сделка -15840.00

Средний

прибыльная сделка 3005.37

убыточная сделка -1365.01

Максимум

выигрыши подряд (прибыль в деньгах) 9 (106921.10)

последовательные проигрыши (убытки в деньгах) 18 (-163.10)

Максимальный

последовательная прибыль (количество выигрышей) 225720.50 (7)

последовательный убыток (количество убытков) -15845.70 (5)

Среднее

последовательные выигрыши 2

последовательные проигрыши 2

****************************************************

Теперь я думаю, что это очень хороший советник, поэтому я хочу протестировать его снова, чтобы убедиться, что он делает то же самое.....

Я не делаю никаких изменений в настройках....

Я выбираю флажок Recalculate на вкладке настроек и нажимаю start.... И получаю вот такой отчет...

******************************************************

Бары в тесте 18015

Смоделировано 739231 тиков

Качество моделирования 89.83%

Начальный депозит 1000.00

Общая чистая прибыль -731.75

Валовая прибыль 31897.83

Валовый убыток -32629.58

Фактор прибыли 0,98

Ожидаемая прибыль -0.24

Абсолютная просадка 780,40

Максимальная просадка 4912,15 (94,91%)

Относительная просадка 94,91% (4912,15)

Всего сделок 2990

Короткие позиции (выигранные %) 0 (0.00%)

Длинные позиции (выигранные %) 2990 (34,88%)

Прибыльные сделки (% от общего количества) 1043 (34,88%)

Убыточные сделки (% от общего количества) 1947 (65,12%)

Крупнейший

прибыльная сделка 1170.00

убыточная сделка -360.00

Средний

прибыльная сделка 30,58

убыточная сделка -16.76

Максимум

выигрыши подряд (прибыль в деньгах) 8 (124,50)

последовательные проигрыши (убытки в деньгах) 20 (-45.50)

Максимальный

последовательная прибыль (количество выигрышей) 2606.30 (7)

последовательный проигрыш (количество проигрышей) -360.00 (1)

Среднее

последовательные выигрыши 2

последовательные проигрыши 3

******************************************************

почему два теста настолько разные?

что делает тестер по-другому, когда тестирует советника во второй раз?

как сделать так, чтобы при каждом пересчете тестер тестировал одно и то же?

Спасибо за советы, чтобы получить один и тот же отчет каждый раз, когда я тестирую советника.

Aaragorn

***********************include .mqh file below *******************************

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

//| 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

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

//| 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-----------------+

//double IncreaseLots()

//{

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

// if(Lots > 99) Lots = 99;

// Print("account free margin = ",AccountFreeMargin()," Lots = ",Lots);

// return(Lots)

//}

***************************end of include .mqh file******************************
Файлы:
ggl3.mq4  21 kb
 

Я хотел бы помочь вам в тестировании, но по какой-то причине я не могу прикрепить это к графику... не могу понять, почему...

 
furious_angel:
Я бы хотел помочь вам протестировать это, но по какой-то причине я не могу прикрепить его к графику... не могу понять, почему. .

Попробуйте скомпилировать его. Вам также необходимо иметь файл mqh в папке experts, чтобы он работал.

 
forextrades:
Попробуйте скомпилировать его. Вам также необходимо иметь файл mqh в папке experts, чтобы он работал.

на самом деле файл mqh должен находиться в папке "include", которая является подпапкой папки "experts". По крайней мере, так это работает у меня.

У меня нет проблем с его прикреплением> У меня просто проблемы с тем, чтобы тестер стратегий был с ним согласен.