Скачать MetaTrader 5

Советники: 20PRExp-3

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
192474
MetaQuotes Software Corp.  

20PRExp-3:

Советник 20PRExp-3 основан на системе прорыва волантильности внутри дня. Добавлены фильтры обьёма и Stochastik. Стратегия выхода:трейлинг-стоп, скользящие стопы.

Author: Сергей

Сергей
311
Сергей  
Тестировал встроенным тестером. Кто может протестируйте по серьёзнее или подскажите как.Пока сам не знаю.
Иван
1137
Иван  

Рекомендация может быть простейшая - потестировать на котировках из History Center.
Результат работы советника на истории в 1 месяц - это очень часто может оказаться просто удачным сочетанием параметров и котировок.
Попробуйте просто другие котировки (котировки другого брокера) за тот же период времени. У меня за тот же самый период времени баланс крутится около начального значения.

MQL4 Comments
16316
MQL4 Comments  
Вроде нормально.Поставь на демо счет.И сам все увидешь.
MQL4 Comments
16316
MQL4 Comments  
7753191:
Вроде нормально.Поставь на демо счет.И сам все увидешь.

Он идёт в вверх только на период 5 Минут (М5) 2007.01.02 00:00 - 2007.01.25 00:00 (2007.01.01 - 2007.01.25).
Во всех остальных временных рамках и таймфреймах он идёт вниз как сбитый самолёт.
Если знаете как настроить его правильно прошу подскажите.
MQL4 Comments
16316
MQL4 Comments  
asoulman:
7753191:
Вроде нормально.Поставь на демо счет.И сам все увидешь.

Он идёт в вверх только на период 5 Минут (М5) 2007.01.02 00:00 - 2007.01.25 00:00 (2007.01.01 - 2007.01.25).
Во всех остальных временных рамках и таймфреймах он идёт вниз как сбитый самолёт.
Если знаете как настроить его правильно прошу подскажите.
Как сбитый самолёт, эт наверное потому, что делает по нескольку сотен сделок подряд - на одной свече. Куча спрэдов вылетает в трубу. У меня и на вышем периоде такая трабла. Нужно логику подрихтовать. Посмотрите, может та же ситуация
Сергей
311
Сергей  
Выложил новую версию.Немного подчистил.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Vladimir
6264
Vladimir  
Sergey2005TR:
Выложил новую версию.Немного подчистил.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Прогнал советник за 2006 гот на GBPUSD M5. Все тики (на основе всех наименьших доступных периодов с фрактальной интерполяцией каждого тика). Слил 30%.
Владимир Тезис
4266
Владимир Тезис  
Sergey2005TR!
У тебя в коде написано следующее:
Старт со�етника
...
код, код код
потом
OpenPosition();
прочи�
код...
стоп работы со�
етника
Понимаешь что происходит при такой организации кода?
старт советника запускается каждый тик. На каждом тике советник у тебя сначала выполняет какие-то действия, потом открывает сделку (функция OpenPosition(); )
потом доходит до конца кода, потом ждёт следующего тика, отпять старт, опять действия, снова открытие сделки, действия и ожидание нового тика. И так цикл.
Тебе в советника надо вставить условие проверки количества сделок открытых на текущей свече.

Могу подсказать решение этого вопроса.
//==== Контроль времени последнего открытого ордера ============
total = OrdersTotal();
for ( i = 0; i<total; i++ )//Цикл. Проходим по всем ордерам от 0 до total
{//Начало цикла
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
Print("Ошибка ", GetLastError(), " при выборе ордера номер ",i);
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)// выбрали очередной ордер
{//начало работы с выбранным ордером
if(OrderSymbol()!=SMB) continue; // Если не наш - смотрим следующий
if(OrderOpenTime()>=OldTime)//если время открытия у этого ордера больше чем у последнего открытого, то...
{
OldTime=OrderOpenTime();//запоминаем время последнего открытого ордера
}
}//Конец работы с выбранным ордером
}//Конец цикла

if(OldTime>=Time[0]) NewOrder=false;
if(OldTime<Time[0]) NewOrder=true;
//==== Конец "Контроль времени последнего открытого ордера" ====

// Если данное условие (NewOrder==false) сработает,
if(NewOrder==false) {Comment("На этой свече уже открылась сделка. Ждём следующую свечу.");return(0);}
// то весь дальнейший код выполняться не будет, так как return(0) прерывает работу советника

if ((NewOrder==true) OpenPosition();
При такой постановке вопроса у тебя на одной свече будет открываться одна сделка. Что следует сделать далее?
Надо организовать код примерно так:

должна быть переменная, которая следит за количеством рыночных ордеров например:
//           В данный блок встроен счётчик количества рыночных ордеров
// sss - счётчик рыночных ордеров

sss=0;// сначала обнуляем его
total = OrdersTotal();
for ( i = 0; i<total; i++ )//Цикл. Проходим по всем ордерам от 0 до total
{//Начало цикла -------------------------------
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
Print("Ошибка ", GetLastError(), " при выборе ордера номер ",i);
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)// выбрали очередной ордер
{//начало работы с выбранным ордером
if(OrderSymbol()!=SMB) continue; // Если не наш - смотрим следующий
if(OrderType()==OP_BUY) // если он открытый в покупку, то...
{
sss++;
//----------------- закрываем ордер
if(CloseBuy==true)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Black);
CloseBuy=false;
}
}
if(OrderType()==OP_SELL)// если он открытый в продажу, то...
{
sss++;
//----------------- закрываем ордер
if(CloseSell==true)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Black);
CloseSell=false;
}
}

} // конец работы с выбранным ордером


}// Конец цикла, мы просмотрели все ордера. -----------


В самом начале кода советника можно сделать следующее
extern int MaxOrderov = 3;//сколько можно открыть ордеров максимум

тогда после этих циклов команда открытия позы будет выглядеть так:

if ((NewOrder==true)&&(sss<MaxOrderov))//Если можно открыть ещё ордер

OpenPosition();

.........

Словом, думаю идею ты понял

Там в коде что я привёл, стоят приказы на принудительное закрытие ордеров. Не обращай на это внимание - я лишь хотел проиллюстрировать сказанное а куски кода взял из одного из своих советников
MQL4 Comments
16316
MQL4 Comments  
Tebe nuzhno zakochat' istoriyu kotirovok, zatem ispol'zuya skrip - period_converter - konvertnut' minutki v 5-ti, 15-ti, 30-ti minutinie grafiki

Sergey2005TR :Тестировал встроенным тестером. Кто может протестируйте по серьёзнее или подскажите как.Пока сам не знаю.
costy_
2456
costy_  

Решил потестить а он открывает при условии закрытия позиции, но в обратную т.е. в шорт не идет =))


OrderSend не связан. (GetTradeSignal)


//+------------------------------------------------------------------+
//| Открытие позиции                                                 |
//+------------------------------------------------------------------+
void OpenPosition() 
  {
   double ldStop = 0, ldTake = 0;
   int    bs = GetTradeSignal();
   for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
     {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderSymbol() != Symbol())
           continue;
       if(OrderType() == OP_BUY )  
           total++;
       if(OrderType() == OP_SELL ) 
           total++;
     }
   if(total < 1 &&Hour() > 6) 
     {
       if(bs > 0)
         {
           if(TakeProfit != 0) 
               ldTake = Ask + TakeProfit*Point;
           OrderSend(Symbol(), OP_BUY, Lots() ,Ask, 3, MLM, ldTake, 
                     "Pipsover", 888, 0, Blue);
         }
       if(bs < 0)
         {
           if(TakeProfit != 0) 
               ldTake = Bid - TakeProfit*Point;
           OrderSend(Symbol(), OP_SELL, Lots() ,Bid, 3, MLP,ldTake, 
                     "Pipsover", 888, 0, Red);
         }
     }
   total = 0;  
  }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий