Советники: ilan_reg_19 - страница 21

 
runik:
Lexaarni777:


extern double Regr.kstd1mall = 1.5; // ширина канала, если =0 то рисуется только средняя линия
int Regr.shift1mall = 0; // смещение относительно текущего бара
extern int SPermall = 50; // период баров

Вот выризал кусочек из кода..

Вопрос. А вторая сторочка правильно написана?

правильно, а в чем проблема ? этот параметр не надо настраивать


А ну тогда всё я думал его надо настраивать.Спасибо.
 

Хочу поблагодарить runika за отличный советник. И хотел написать о доработке, считаю, что часто возникает ситуация, когда открыто много колен и ТР находится на достаточно отдаленном расстоянии, цена разворачивается и ордера которые были в плюсе опять уходят в минус. Если я уверен, что так произойдет, закрываю плюсовые, а TP к оставшейся серии ордеров приходиться расчитывать и переставлять в ручную, или поменять ТР немного его передвинув в нужную сторону. Если бы сделать кнопку Refresh для автоматического пересчета ордеров и выставления ТР было бы замечательно!

Спасибо!

 

Усім привіт.

Тестую ілан 1.9.3 уже другий тиждень і виявив ряд пунктів які потрібно доопрацювати.

Стратегія ілана 1.9.3 розрахована на ДЦ у яких відсутні СВОП тому тести на ДЦ у якому я провожу торги не дали позитивних результатів. Із стандартними налаштуваннями сова зливає депо за 20 - 40 ставок. (пара EURUSD) Так було принято рішення провести переналаштування параметрів без зміни кода ілана.

Налаштування заточував під М1. Виходячи із цього " --- i-Regr --- с большим периодом опеределяем глобальный тренд" я перемістив на 2 таймфрейм

 extern int TFS=2; // таймфрейм на котором работает индикатор, 
і змінив extern int SPer = 400; // период баров до 400 це приблизно період 30 годин на 2 таймфреймі..

Графік  " --- i-Regr --- с малым периодом" перемістив на 1 таймфрейм і змінив період барів із 50 до 20 

extern extern int TFSmall=1; // таймфрейм на котором работает индикатор, та змінив 
int SPermall = 20 ; // период баров. 

Такі зміни різко покращили чутливість реакції ілана на зміну динаміки руху ціни. Лок почав виставлятися більш коректно, доречі його я теж підправив.

extern string c8= "Параметры лока";
extern double LockS=0,5; // пытаемся локировать часть позиций и получить дополнительную прибыль, если =0 то не работает, если =0.5, то локируем 50% позиций серии
extern int LMagN=689; // магический номер для локовой позы
extern int NumLockMin=1; // после какого по счету колена открывать локовый ордер если индикатор глобального тренда изменил направление
extern int NumLoc=10; // после какого по счету колена открывать локовый ордер если количество ордеров просто стало большим
extern int MaxDist=20; //dec максимальное расстояние от первой сделки после которого так же открываем лок
extern int LockProfitPerc=1; // суммарный заработок в % от депозита при закрытии всех локовых ордеров и серии
extern int koridor = 25; // dec расстояние в через который лок переворачивается в пунктах
extern double Lmul = 1; // множитель второго и последующих локовых ордеров
extern int MaxLockTrades = 50; // максиммальное количество локовых ордеров


extern int CCPeriod = 100; // параметр трендового индикатора для открытия лока TrendMagic
extern int ATRPeriod =100; // параметр трендового индикатора для открытия лока TrendMagic

Зміна верхніх двох параметрів вплинула на загрублення чутливості індекатора і фільтрації неправдивих спрацювань.

 
extern int TMTF = 1; // таймфрейм на котором работает трендовый индикатор
extern int TradeAfterLock = 1; // при =0 если у нас открылся лок, то мы перестаем торговать, = 1 продолжаем торговать

Останній параметер було вирішено змінити, оскількиалгоритм лок у деяких ситуаціях не міг вийти у прибуток. А  додаткова торгівля частково вирішувала цю проблему.


Трейлінг теж був змінений і виглядає так

extern string t2 = " параметры трейлинга";

// кто пользуется трейлингом, пожалста ...
extern int UseTrailingStop = 1; // 0-не используем трал, 1 - ступенчатый трал, 2 - трал типа есмарт
extern int ProfitTrailDist = 3; //dec расстояние от точки безубытка, после которой включаем трал //+------------------------------------------------------------------+
extern int TrailDist = 20; //dec расстояние на котором тянется стоплосс //| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ |
extern int TrailStep = 1; //dec модифицируем ордера каждые 5 пунктов //| Функции передаётся тикет позиции, расстояние от курса открытия, |
extern int NumIT = 1; // после какого количества сделок включается трал //| на котором трейлинг запускается (пунктов) и "шаг", с которым он переносится (пунктов) |
//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д. |
extern double xtral=1 // означает что, расстояние от точки безубытка до стоплосса в xtral раз меньше чем от точки бу до цены, например цена ушла на 90 п в +, значит стоп на уровне 30 п в плюс переносим  

 Після модифікації трейлінга ілан почав миттєво реагувати на зміну динаміки руху ціни і адекватніше виставляти необхідні параметри для стоплосів.

 Але не дивлячись на підгонку всіх параметрів дотягнути вдалося тільки до 480 - 560 ставок після яких депо всеодно зливався. Зокрема через СВОП.

Проаналізувавше все я дійшов висновку, що необхідно доопрацювати наступне.

1 Лок не взмозі адекватно закритися в прибуток. Необхідно ввести наступні алгоритми.

     а) Після виставлення лок пари коли ціна повертається у сторону глобального тренда необхідно закривати лок позиціх в плюс

2 Якщо настає момент коли ілан знаходиться на межі умови на продаж і на покупку то він відкриває і ті і ті ордера, цим самим створює просадку депо

 Які у кого будуть думки ? 



 

 

Вопрос по этим параметрам:

extern double PercDown=0; // т.е. если мы "зафиксировали" (т.е. цена уходила далеко не в нашем направлении) просадку на депозите по серии сделок больше 30 % от текущего баланса, то нам надо сматываться с рынка да побыстрее

extern double PercClose=0; // поэтому если мы дошли до 10 % просадки после 30 надо закрываться с таким минусом, дальше соотношение поддерживается, если на 60 % уходили в просадку, то закроемся при 20 %

Не совсем понятно как работает?

Как сделать так, чтобы при определенной просадке бот закрывал все сделки нафик!?

А так при любых значениях дает эксперту уйти в минус больше заданного уровня.

Странно, что серию лонгов стопит нормально, а сериям из лонгов и локов позволяет выбивать депо по маржину!?

 
Lexaarni777:

В начале идёт хорошо а потом, за две сделки всё сливает.

И так на всех тестах, что делать? Подскажите пожалуйста.


Мне кажется, слив из-за того что ты выбираешь определенный отрезок времени. Поясню: к примеру ты тестиш с 01,01,2011 по 01,03,2011, соответственно 01,03,2011 все сделки закрываются независимо от того в убытке они или нет. У меня Илан на тестах везде показывает слив после резкого взлета, хотя в реальном времени просто включаю его в определнное время и он зарабатывает.
 
polsvv:

Вопрос по этим параметрам:

extern double PercDown=0; // т.е. если мы "зафиксировали" (т.е. цена уходила далеко не в нашем направлении) просадку на депозите по серии сделок больше 30 % от текущего баланса, то нам надо сматываться с рынка да побыстрее

extern double PercClose=0; // поэтому если мы дошли до 10 % просадки после 30 надо закрываться с таким минусом, дальше соотношение поддерживается, если на 60 % уходили в просадку, то закроемся при 20 %

Не совсем понятно как работает?

Как сделать так, чтобы при определенной просадке бот закрывал все сделки нафик!?

А так при любых значениях дает эксперту уйти в минус больше заданного уровня.

Странно, что серию лонгов стопит нормально, а сериям из лонгов и локов позволяет выбивать депо по маржину!?


нет такой функции в данном моде можешь поставить percdown = percclose тогда должен сработать, как один умный товарищ сказал, стоп равен размеру депозита
 

Вот пара изменений и при заданной просадке эквити, катапультируется нафик вместе с локами :) ! Теперь каждый из этих блоков ведет расчет с учетом локов по их магик номерам:

if (UseEquityStop) {
if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll(MagicNumber);
CloseThisSymbolAll(LMagN);
PrintF("Closed All due to Stop Out");
NewOrdersPlaced = FALSE;

double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0; cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}

double AccountEquityHigh() {
if (CountTrades(MagicNumber) == 0 && CountTrades(LMagN) == 0) AccountEquityHighAmt = AccountEquity();
if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;
else AccountEquityHighAmt = AccountEquity();
PrevEquity = AccountEquity();
return (AccountEquityHighAmt);
 

Есть возможность сделать так, чтобы советник не модифицировал ордера вообще. Просто торговал!

extern double TakeProfit = 1000; //dec минимальный тейк профит, если = 0 то используем массив значений тейков при установке колен - приходится ставить так, чтобы цена не достала, так как этот тейк модифицирует ордера и ставит стоп на уровне, как этот тэйк!!! ---> MinProfitPips =15; //dec если у нас отрыта серия по тренду и цена пошла против нас, то закрываемся по стоплоссу, который расположен в + на уровне MinProfitPips от точки безубытка

Может я что-то не понял. Такое ощущение, что описания тейков местами перепутали...

Я не хочу чтобы ставился тэйк серии так как он сильно снижает прибыль при моих настройках!!!

С параметрами на нефти CLJ1:

extern double TakeProfit = 1000;

MinProfitPips =15

эксперт берет тэйк по каждой сделке около 15 пунктов или достигнув заданный процент от депо кроет всю серию или серия разруливается локами и кроется с заданным мин. процентом от депо в настройках. При этом торгует без стопов и тейков. Не модифицирует ордера кроме случаев, когда срабатывает extern double TakeProfit = 1000.

Как сделать так, чтобы ордера не модифицировались и этот тейк вообще отключить???

Просто на Броко в демо терминале стопы не ставятся и дает ошибки, только на реале робот стопы ставит. Поэтому при моих 1000 тейка эксперт засыпает ошибками...

 
polsvv:

Есть возможность сделать так, чтобы советник не модифицировал ордера вообще. Просто торговал!

extern double TakeProfit = 1000; //dec минимальный тейк профит, если = 0 то используем массив значений тейков при установке колен - приходится ставить так, чтобы цена не достала, так как этот тейк модифицирует ордера и ставит стоп на уровне, как этот тэйк!!! ---> MinProfitPips =15; //dec если у нас отрыта серия по тренду и цена пошла против нас, то закрываемся по стоплоссу, который расположен в + на уровне MinProfitPips от точки безубытка

Может я что-то не понял. Такое ощущение, что описания тейков местами перепутали...

Я не хочу чтобы ставился тэйк серии так как он сильно снижает прибыль при моих настройках!!!

С параметрами на нефти CLJ1:

extern double TakeProfit = 1000;

MinProfitPips =15

эксперт берет тэйк по каждой сделке около 15 пунктов или достигнув заданный процент от депо кроет всю серию или серия разруливается локами и кроется с заданным мин. процентом от депо в настройках. При этом торгует без стопов и тейков. Не модифицирует ордера кроме случаев, когда срабатывает extern double TakeProfit = 1000.

Как сделать так, чтобы ордера не модифицировались и этот тейк вообще отключить???

Просто на Броко в демо терминале стопы не ставятся и дает ошибки, только на реале робот стопы ставит. Поэтому при моих 1000 тейка эксперт засыпает ошибками...

чтобы не ставил тейк всей серии то можно закоментировать строку

if (OrderTakeProfit()!=PriceTarget) ModifyOrder(Symbol(),OrderOpenPrice(),OrderStopLoss(), PriceTarget, Yellow);

а вот что касается MinProfitPips здесь сложнее

это несколько меняет стратегию но думаю тоже можно закоментировать два куска

if ((opa[i]<=Bid-TrendPS*1.5*Point) && (sla[i]<Bid-TrendPS*Point) && opa[i]>0 && Bid-TrendPS*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point && a1>Bid-TrendPS*Point)
{
if (ticka[i]>0)
{

OrderSelect(ticka[i],SELECT_BY_TICKET);
if (OrderStopLoss()!=mpric-TrendPS*Point) {ModifyOrder(Symbol(),OrderOpenPrice(),mpric-TrendPS*Point,OrderTakeProfit(),Green); }

}

}


и


if ((opa[i]>=Ask+TrendPS*1.5*Point) && (sla[i]>Ask+TrendPS*Point || sla[i]==0) && opa[i]>0 && Ask+TrendPS*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point && a1<Ask+TrendPS*Point)
{
if (ticka[i]>0)
{

OrderSelect(ticka[i],SELECT_BY_TICKET);
if (OrderStopLoss()!=mpric+TrendPS*Point) {ModifyOrder(Symbol(),OrderOpenPrice(),mpric+TrendPS*Point,OrderTakeProfit(),Red); }
}
}


 
Хороший советник. На демо работает нормально. На реале кто-нибудь пробовал?
Причина обращения: