Тестировал встроенным тестером. Кто может протестируйте по
серьёзнее или подскажите как.Пока сам не знаю.
Рекомендация может быть простейшая - потестировать на котировках
из History Center.
Результат работы советника на истории в 1 месяц - это очень часто
может оказаться просто удачным сочетанием параметров и котировок.
Попробуйте просто другие котировки (котировки другого брокера)
за тот же период времени. У меня за тот же самый период времени
баланс крутится около начального значения.
7753191:
Вроде нормально.Поставь на демо счет.И сам все увидешь.
Он идёт в вверх только на период 5 Минут (М5) 2007.01.02 00:00 - 2007.01.25 00:00
(2007.01.01 - 2007.01.25).Вроде нормально.Поставь на демо счет.И сам все увидешь.
Во всех остальных временных рамках и таймфреймах он идёт вниз как сбитый самолёт.
Если знаете как настроить его правильно прошу подскажите.
asoulman:
Во всех остальных временных рамках и таймфреймах он идёт вниз как сбитый самолёт.
Если знаете как настроить его правильно прошу подскажите.
Как сбитый самолёт, эт наверное потому, что делает по нескольку
сотен сделок подряд - на одной свече. Куча спрэдов вылетает в
трубу. У меня и на вышем периоде такая трабла. Нужно логику подрихтовать.
Посмотрите, может та же ситуация
7753191:
Вроде нормально.Поставь на демо счет.И сам все увидешь.
Он идёт в вверх только на период 5 Минут (М5) 2007.01.02 00:00 - 2007.01.25 00:00
(2007.01.01 - 2007.01.25).Вроде нормально.Поставь на демо счет.И сам все увидешь.
Во всех остальных временных рамках и таймфреймах он идёт вниз как сбитый самолёт.
Если знаете как настроить его правильно прошу подскажите.
Выложил новую версию.Немного подчистил.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Sergey2005TR:
Выложил новую версию.Немного подчистил.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Прогнал советник за 2006 гот на GBPUSD M5. Все тики (на основе всех наименьших
доступных периодов с фрактальной интерполяцией каждого тика).
Слил 30%.
Выложил новую версию.Немного подчистил.
Уберите в коде стохастик. И можно на любом таймфрейме тестить. Правда на евре что-то неважно.
Sergey2005TR!
У тебя в коде написано следующее:
старт советника запускается каждый тик. На каждом тике советник у тебя сначала выполняет какие-то действия, потом открывает сделку (функция OpenPosition(); )
потом доходит до конца кода, потом ждёт следующего тика, отпять старт, опять действия, снова открытие сделки, действия и ожидание нового тика. И так цикл.
Тебе в советника надо вставить условие проверки количества сделок открытых на текущей свече.
Могу подсказать решение этого вопроса.
Надо организовать код примерно так:
должна быть переменная, которая следит за количеством рыночных ордеров например:
extern int MaxOrderov = 3;//сколько можно открыть ордеров максимум
тогда после этих циклов команда открытия позы будет выглядеть так:
if ((NewOrder==true)&&(sss<MaxOrderov))//Если можно открыть ещё ордер
OpenPosition();
.........
Словом, думаю идею ты понял
Там в коде что я привёл, стоят приказы на принудительное закрытие ордеров. Не обращай на это внимание - я лишь хотел проиллюстрировать сказанное а куски кода взял из одного из своих советников
У тебя в коде написано следующее:
Старт со��етникаПонимаешь что происходит при такой организации кода?
...
код, код код
потом
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();
.........
Словом, думаю идею ты понял
Там в коде что я привёл, стоят приказы на принудительное закрытие ордеров. Не обращай на это внимание - я лишь хотел проиллюстрировать сказанное а куски кода взял из одного из своих советников
Tebe nuzhno zakochat' istoriyu kotirovok, zatem ispol'zuya skrip - period_converter
- konvertnut' minutki v 5-ti, 15-ti, 30-ti minutinie grafiki
Sergey2005TR :Тестировал встроенным тестером. Кто может протестируйте по серьёзнее или подскажите как.Пока сам не знаю.
Sergey2005TR :Тестировал встроенным тестером. Кто может протестируйте по серьёзнее или подскажите как.Пока сам не знаю.
Решил потестить а он открывает при условии закрытия позиции, но в обратную т.е. в шорт не идет =))
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; }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
20PRExp-3:
Author: Сергей