![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дэйв,
Попробуйте изменить ваш код на следующий фрагмент и сообщите мне, помогло ли это.
Яннис
int i=0;
for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && ( OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && ( OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
return(0);
}
}У меня проблема с тем, что он постоянно модифицирует сделки в бэктестере снова и снова. Как мне заставить его модифицировать сделки один раз. Поскольку программа переходит в спящий режим, единственными сделками, которые должны быть изменены, являются все еще открытые сделки.
Пожалуйста, посмотрите приложенный .Gif результатов бэктеста. Я так близок к тому, чтобы сделать это правильно - пожалуйста, посоветуйте!!! Я использую эту модификацию тейк-профита и стоп-лосса в сочетании со спящим режимом. Пожалуйста, смотрите код ниже
int start()
{
if (UseHourTrade)
{
int a=0;
int b=0;
int c=0;
if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;
if(!(Hour()>=FromHourTrade2 && Hour()<=ToHourTrade2)) b=1;
if(!(Hour()>=FromHourTrade3 && Hour()<=ToHourTrade3)) c=1;
if(a==1 && b==1 && c==1)
{
Comment(
"\n"," * АДВИЗОР ЭКСПЕРТА СОЛНЕЧНОГО ВЕТРА *",
"\n",
"\n", " - ПРОГРАММА В СОННОМ ЦИКЛЕ - ",
"\n",
"\n", "> НЕ ТРАДИЦИОННЫЕ ЧАСЫ! <");
/////////////////// МОДИФИЦИРУЙТЕ СТОП-ЛОСС И ТЕЙК-ПРОФИТ В НАЧАЛЕ ЦИКЛА СНА /////////////////
int h=0;
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
OrderSelect(h, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
return(0);
}
}
ПОЖАЛУЙСТА, ПОСМОТРИТЕ НА ПРИКРЕПЛЕННУЮ МИНИАТЮРУ!
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
сделать подсчет одинаковым числом
Не понимаю. Как мне исправить эту ошибку??? Возможно, я действительно вижу - Позвольте мне изменить cnt1 на h. Я прав?
Дэйв
<<
Ваш OrderSelect() не подсчитывает базу на основе запущенного цикла
int start()
{
if (UseHourTrade)
{
int a=0;
int b=0;
int c=0;
if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;
if(!(Hour()>=FromHourTrade2 && Hour()<=ToHourTrade2)) b=1;
if(!(Hour()>=FromHourTrade3 && Hour()<=ToHourTrade3)) c=1;
if(a==1 && b==1 && c==1)
{
Comment(
"\n"," * АДВИЗОР ЭКСПЕРТА СОЛНЕЧНОГО ВЕТРА *",
"\n",
"\n", " - ПРОГРАММА В СОННОМ ЦИКЛЕ - ",
"\n",
"\n", "> НЕ ТРАДИЦИОННЫЕ ЧАСЫ! <");
/////////////////// МОДИФИЦИРУЙТЕ СТОП-ЛОСС И ТЕЙК-ПРОФИТ В НАЧАЛЕ ЦИКЛА СНА /////////////////
//int h=0;
for (int h=OrdersTotal()-1;h>=0;h--)
OrderSelect(h, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
return(0);
}
}
///////////////////////////////////////////////////////////////////////////////////////
Сделал изменения, но все равно получаю постоянный цикл модификаций против однократного изменения.
Пожалуйста, посоветуйте еще раз, пожалуйста!
Дэйв
<<<
Пожалуйста, публикуйте свой код в кодах [PHP][/PHP]. Гораздо легче читать и отлаживать отформатированный код.
Вкладка ввода индикатора
Как и где закодировать индикатор так, чтобы вкладка ввода больше не отображалась, когда он прикреплен к графику?
Спасибо,
solaris
int start()
{
if (UseHourTrade)
{
int a=0;
int b=0;
int c=0;
if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;
if(!(Hour()>=FromHourTrade2 && Hour()<=ToHourTrade2)) b=1;
if(!(Hour()>=FromHourTrade3 && Hour()<=ToHourTrade3)) c=1;
if(a==1 && b==1 && c==1)
{
Comment(
"\n"," * ЭКСПЕРТНЫЙ АДВИЗОР ПО СОЛНЕЧНОМУ ВЕТРУ *",
"\n",
"\n", " - ПРОГРАММА В СОННОМ ЦИКЛЕ - ",
"\n",
"\n", "> НЕ ТРАДИЦИОННЫЕ ЧАСЫ! <");
/////////////////// МОДИФИЦИРУЙТЕ СТОП-ЛОСС И ТЕЙК-ПРОФИТ В НАЧАЛЕ ЦИКЛА СНА /////////////////
//int h=0;
for (int h=OrdersTotal()-1;h>=0;h--)
OrderSelect(h, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{if( OrderStopLoss() > Ask + Point * 15 || OrderStopLoss() == 0 )
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
if( OrderStopLoss() < Bid - Point * 15 )
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Модифицируем стоп-лосс и тейк-профит
return(0);
}
return(0);
}
}
///////////////////////////////////////////////////////////////////////////////////////
Сделал изменения, но все равно получаю постоянный цикл модификаций по сравнению с однократным изменением.
Пожалуйста, посоветуйте еще раз, пожалуйста!
Дэйв
<<<попробуйте добавить фиолетовую строку ... может помочь
Как и где закодировать индикатор, чтобы при его подключении к графику больше не отображалась вкладка Input?
Спасибо,
solarisпочему бы не попробовать сохранить его как шаблон... тогда не нужно будет снова настраивать параметры, когда вы будете вызывать все свои индикаторы на новом графике.
Я сделал так, как вы посоветовали! (Я ценю ваше терпение)
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
** Но я все еще получаю массивные модификации цикла на одной сделке, как и раньше!
Дэйв
<<Пожалуйста, посмотрите последние результаты бэктестов. Извините за логотип.htm - не могу от него избавиться.
Я сделал так, как вы посоветовали! (Я ценю ваше терпение)
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
** Но я все еще получаю массивные модификации цикла на одной сделке, как и раньше!
Дэйв
<<Вы уже пробовали добавить фиолетовый выше?
theif( OrderStopLoss() > Ask + Point * 15 || OrderStopLoss() == 0 )
и if( OrderStopLoss() < Bid - Point * 15 )