Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Рискну предложить свой вариант изменения лотов после убыточной сделки :
в переменных добавляем
//===================================
extern double K_0 = 2;//множетель первого лота
extern double K = 2;//множетель последующих лотов
extern double MaxLot = 100000;
extern bool LotsSize = false;//включает динамический лот т.е лот изменяется в процентах от депозита 0.02=2%
extern double MaximumRisk = 0.02;// % депозита выделяемого на лот
extern int Losse = 1;// после скольки минусовых сделок мы включаем функцию увеличения лота
затем по коду
ticket=OrderSend(Symbol(),OP_BUYLIMIT,/*lotMM*/ LotsOptimized(),myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);
и
ticket=OrderSend(Symbol(),OP_SELLLIMIT,/*lotMM*/ LotsOptimized(),myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);
и в концк кода
//+------------------------------------------------------------------+
//| Get number of lots for this trade |
//+------------------------------------------------------------------+
double GetLots()
{/*
double lot;
if(MoneyManagement)
{
lot=LotsOptimized();
}
else
{
lot=Lots;
if(AccountIsMini)
{
if (lot > 1.0) lot=lot/10;
if (lot < 0.1) lot=0.1;
}
}
//----
return(lot);*/
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
/*
double LotsOptimized()
{
double lot=Lots;
//---- select lot size
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/1000)/100,2);
// Check if mini or standard Account
if(AccountIsMini)
{
lot=MathFloor(lot*100)/100;
// Use at least 1 mini lot
if(lot<0.1) lot=0.1;
if (lot > MaxLots) lot=MaxLots;
}
else
{
if (lot < 1.0) lot=1.0;
if (lot > MaxLots) lot=MaxLots;
}
//----
return(lot);
}
*/
//начинаем вычислять размер лота который надо поставить
double LotsOptimized()
{
double x=Losse;
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
{
if(LotsSize)
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2);//если extern bool LotsSize=true тогда лот меняется от депозита в %
//если extern bool LotsSize=false тогда работаем по мартингейлу
}
//---- calcuulate number of losses orders without a break
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>((x)-1)) lot=NormalizeDouble(lot*K_0,2);//здесь учитываем какой размер лота был и какой должен стать после проигрыша
if(losses>((x*2)-1)) lot=NormalizeDouble(lot*K,2);//сейчас каждый последующий лот равен предыдущему умноженному на К
if(losses>((x*3)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*4)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*5)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*6)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*7)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*8)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*9)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*10)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*11)-1)) lot=NormalizeDouble(lot*K,2);
}
//---- return lot size
if(lot<0.1) lot=0.1;//если по каким то расчетам у нас последующий лот посчитается меньше чем 0.1 тогда все равно
//минимальный лот не может быть меньше чем 0.1 это условие ДЦ на альпари классик
if(lot>MaxLot) lot=MaxLot;// при увеличении лота макс.лот не может быть более заданного пользователем в настройках
return(lot);
}
Меняя в настройках значения К_0 и К можно по желанию регулировать размеры последующих, после убыточных сделок, лотов.Хоть уменьшать хоть увеличивать. А если вместо К ставить К_1 .......К_10 то можно вводить множитель каждого последующего лота. Например К_0 = 10, К_1 =2, К_2= 0.5 и т.д.Единственное это нужно будеть вынести наверх в настройки.
extern double K_0 = 2;//множетель первого лота
.
.
extern double K_10 = 2;//множетель последующих лотов
А учитывая, что длительность серии отрицательных сделок невелика, то по желанию К_0 и т.д можно назначить = 10. Тогда при лосе = 210, следующий лот будет = 1 и профит будет = 180.(настройки по умолчанию).
Осваиваю MT4 c этой системой. Не удается прогнать тест. А именно, хотя дата указана с начала 2009 года, тестирует только последнюю неделю. Видимо история не загрузилась. А в инструкции написано типа "при текстировании загрузится автоматически". Что делать?
Грузите вручную Сервис -> Архив котировок -> выбираете символ и период жмете Загрузить.
Сделал примерно так. А точнее, как сказано в 2. Загрузка полной истории котировок на http://usd.ucoz.ru/publ/1-1-0-43
Работало несколько часов, но результат - не такой, как здесь. Хотелось бы разобраться. Вопросы 1) Где взять результаты в той форме, как у вас вверху страницы 2) Как сохранить все результаты этого многочасового прогона на будущее 3) Можно привести резудьтаты здесь, если не смогу разобраться?
Осваиваю MT4 c этой системой. Не удается прогнать тест. А именно, хотя дата указана с начала 2009 года, тестирует только последнюю неделю. Видимо история не загрузилась. А в инструкции написано типа "при текстировании загрузится автоматически". Что делать?
Грузите вручную Сервис -> Архив котировок -> выбираете символ и период жмете Загрузить.
Сделал примерно так. А точнее, как сказано в 2. Загрузка полной истории котировок на http://usd.ucoz.ru/publ/1-1-0-43
Работало несколько часов, но результат - не такой, как здесь. Хотелось бы разобраться. Вопросы 1) Где взять результаты в той форме, как у вас вверху страницы 2) Как сохранить все результаты этого многочасового прогона на будущее 3) Можно привести резудьтаты здесь, если не смогу разобраться?
Отвечаю пока самому себе. Отчет сохраняется по правой кнопке. А всю остальную инфо можно сохранить для этого эксперимента отдельно?
Различие такие, что в моем эксперименте оказалось Lots=0.01; MaxLots=4; А почему сейчас так в программе ? Это что-то улучшает по сравнению с Lots=0.1; MaxLots=100; ?
Еще неясно следующее. Я поставил дату по 2010.10.22, однако же получилось так 2009.01.02 10:00 - 2010.10.15 22:59 (2009.01.02 - 2010.10.22). Как побороть - реально продлить с 10.15 по до 10.22 ?
mql4dar:
Различие такие, что в моем эксперименте оказалось Lots=0.01; MaxLots=4; А почему сейчас так в программе ? Это что-то улучшает по сравнению с Lots=0.1; MaxLots=100; ?
Еще неясно следующее. Я поставил дату по 2010.10.22, однако же получилось так 2009.01.02 10:00 - 2010.10.15 22:59 (2009.01.02 - 2010.10.22). Как побороть - реально продлить с 10.15 по до 10.22 ?
Еще вопросик. Насколько я вижу комментарии по MT4, в ней нет пошаговой отладки, а в MT5 есть.
Можно ли этот кода запустить в MT5 для пошаговой отладки ? Можно ли одновременно установить на компе MT4 (уже стоит) и MT5 ?
Спасибо.
mql4dar:
Различие такие, что в моем эксперименте оказалось Lots=0.01; MaxLots=4; А почему сейчас так в программе ? Это что-то улучшает по сравнению с Lots=0.1; MaxLots=100; ?
Еще неясно следующее. Я поставил дату по 2010.10.22, однако же получилось так 2009.01.02 10:00 - 2010.10.15 22:59 (2009.01.02 - 2010.10.22). Как побороть - реально продлить с 10.15 по до 10.22 ?
Еще вопросик. Насколько я вижу комментарии по MT4, в ней нет пошаговой отладки, а в MT5 есть.
Можно ли этот кода запустить в MT5 для пошаговой отладки ? Можно ли одновременно установить на компе MT4 (уже стоит) и MT5 ?
Спасибо.
В МТ5 не тестировал, поставить на тотже комп можно, можно даже ставить несколько МТ4 на один комп (надо ставить в разные папки). Основная проблема с МТ5 идеологическая в нем невозможно открыть одновременно сделки SELL и BUY - противоположная сделка с тем же лотом просто закрывает предыдущую. По поводу периодов, я знаю 2 варианта, либо не хватает истории тиков, либо ошиблись при выставлении периода.
Рискну предложить свой вариант изменения лотов после убыточной сделки :
в переменных добавляем
//===================================
extern double K_0 = 2;//множетель первого лота
extern double K = 2;//множетель последующих лотов
extern double MaxLot = 100000;
extern bool LotsSize = false;//включает динамический лот т.е лот изменяется в процентах от депозита 0.02=2%
extern double MaximumRisk = 0.02;// % депозита выделяемого на лот
extern int Losse = 1;// после скольки минусовых сделок мы включаем функцию увеличения лота
затем по коду
ticket=OrderSend(Symbol(),OP_BUYLIMIT,/*lotMM*/ LotsOptimized(),myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);
и
ticket=OrderSend(Symbol(),OP_SELLLIMIT,/*lotMM*/ LotsOptimized(),myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);
и в концк кода
//+------------------------------------------------------------------+
//| Get number of lots for this trade |
//+------------------------------------------------------------------+
double GetLots()
{/*
double lot;
if(MoneyManagement)
{
lot=LotsOptimized();
}
else
{
lot=Lots;
if(AccountIsMini)
{
if (lot > 1.0) lot=lot/10;
if (lot < 0.1) lot=0.1;
}
}
//----
return(lot);*/
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
/*
double LotsOptimized()
{
double lot=Lots;
//---- select lot size
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/1000)/100,2);
// Check if mini or standard Account
if(AccountIsMini)
{
lot=MathFloor(lot*100)/100;
// Use at least 1 mini lot
if(lot<0.1) lot=0.1;
if (lot > MaxLots) lot=MaxLots;
}
else
{
if (lot < 1.0) lot=1.0;
if (lot > MaxLots) lot=MaxLots;
}
//----
return(lot);
}
*/
//начинаем вычислять размер лота который надо поставить
double LotsOptimized()
{
double x=Losse;
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
{
if(LotsSize)
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2);//если extern bool LotsSize=true тогда лот меняется от депозита в %
//если extern bool LotsSize=false тогда работаем по мартингейлу
}
//---- calcuulate number of losses orders without a break
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>((x)-1)) lot=NormalizeDouble(lot*K_0,2);//здесь учитываем какой размер лота был и какой должен стать после проигрыша
if(losses>((x*2)-1)) lot=NormalizeDouble(lot*K,2);//сейчас каждый последующий лот равен предыдущему умноженному на К
if(losses>((x*3)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*4)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*5)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*6)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*7)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*8)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*9)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*10)-1)) lot=NormalizeDouble(lot*K,2);
if(losses>((x*11)-1)) lot=NormalizeDouble(lot*K,2);
}
//---- return lot size
if(lot<0.1) lot=0.1;//если по каким то расчетам у нас последующий лот посчитается меньше чем 0.1 тогда все равно
//минимальный лот не может быть меньше чем 0.1 это условие ДЦ на альпари классик
if(lot>MaxLot) lot=MaxLot;// при увеличении лота макс.лот не может быть более заданного пользователем в настройках
return(lot);
}
Меняя в настройках значения К_0 и К можно по желанию регулировать размеры последующих, после убыточных сделок, лотов.Хоть уменьшать хоть увеличивать. А если вместо К ставить К_1 .......К_10 то можно вводить множитель каждого последующего лота. Например К_0 = 10, К_1 =2, К_2= 0.5 и т.д.Единственное это нужно будеть вынести наверх в настройки.
extern double K_0 = 2;//множетель первого лота
.
.
extern double K_10 = 2;//множетель последующих лотов
А учитывая, что длительность серии отрицательных сделок невелика, то по желанию К_0 и т.д можно назначить = 10. Тогда при лосе = 210, следующий лот будет = 1 и профит будет = 180.(настройки по умолчанию).
Уже есть переменная MaxLots, зачем нужна еще одна MaxLot?
Текущие сделки в реале