Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Надеюсь, кто-то сможет найти здесь ответ на загадку...
В этом посте есть все необходимое для запуска 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)
//}здесь находится файл include в заархивированном виде, если так проще управлять.
вопросы, которые я задаю сейчас:....
стабилен ли поток данных? Я предполагаю, что да, потому что он использует файлы центра истории.... возможно, это предположение следует оспорить?
стабилен ли способ, которым платформа обрабатывает поток данных, и можно ли положиться на то, что она будет обрабатывать одни и те же данные точно таким же образом каждый раз? Если нет, то кто создал эту платформу? Как с ними связаться? Что нужно исправить, чтобы сделать ее надежной?
кажется маловероятным, что я когда-либо стабилизирую код советника, если любой из этих двух неизвестных параметров все еще потенциально изменчив и фактически ненадежен. Как можно проверить их надежность?
Я разместил просьбу о внимании к этому вопросу на этой странице...
http://www.metaquotes.net/index.php?bugtrack/
Будем надеяться, что у кого-то появится понимание и он скоро ответит.
Вопросы, которые я задаю сейчас:....
стабилен ли поток данных? Я предполагаю, что да, поскольку он использует файлы центра истории...., возможно, это предположение следует оспорить?
стабилен ли способ, которым платформа обрабатывает поток данных, и можно ли положиться на то, что она будет обрабатывать одни и те же данные точно таким же образом каждый раз? Если нет, то кто создал эту платформу? Как с ними связаться? Что нужно исправить, чтобы сделать ее надежной?
кажется маловероятным, что я когда-либо стабилизирую код советника, если любой из этих двух неизвестных параметров все еще потенциально изменчив и фактически ненадежен. Как можно проверить их надежность?
Я разместил просьбу о внимании к этому вопросу на этой странице...
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
//+------------------------------------------------------------------+
//| 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******************************Я хотел бы помочь вам в тестировании, но по какой-то причине я не могу прикрепить это к графику... не могу понять, почему...
Я бы хотел помочь вам протестировать это, но по какой-то причине я не могу прикрепить его к графику... не могу понять, почему. .
Попробуйте скомпилировать его. Вам также необходимо иметь файл mqh в папке experts, чтобы он работал.
Попробуйте скомпилировать его. Вам также необходимо иметь файл mqh в папке experts, чтобы он работал.
на самом деле файл mqh должен находиться в папке "include", которая является подпапкой папки "experts". По крайней мере, так это работает у меня.
У меня нет проблем с его прикреплением> У меня просто проблемы с тем, чтобы тестер стратегий был с ним согласен.