Анализ японских свечей - страница 4

 
Спасибо
 
Понятная идея. Только малопригодна для автотрейдинга. Вернее, такой подход можно использовать в программе в качестве одного из алгоритмов.

Вообще, у меня за 3 месяца исследований сформировались определенные представления о том, что и как должен делать советник:
1. совершать не менее 1-5 полных операций в сутки (имеется в виду только покупка-продажа) - меньше не имеет смысла из-за больших накладных расходов и повышения риска из-за технических сбоев (для случая управления закрытием позиции из программы);
2. программа должна содержать несколько алгоритмов для разных видов ситуации на рынке (устойчивый быстрый тренд, медленный тренд, боковой канал, высокая волатильность и пр.);
3. программа и правила должны быть максимально простыми;
4. и самое главное - не нужно пытаться слепо иммитировать ручную работу; нужно пытаться максимально использовать возможности компьютера, например, по активности работы (количеству проводимых операций).

Естественно, это только мое мнение. А я не такой уж спец в этой области. Могу и ошибаться.

Однако, посмотрите один из моих рабочих вариантов в качестве иллюстрации. В программе есть существенные недостатки. Первый - нарушение принципов соотношения размеров S/L и T/P. Но эту проблему я уже научился решать. Вернее, притуплять. Пока. Но уже придумал, как ее решить полностью. Второй - программа не дает расти прибыли, т.е. снимает часто, но понемногу. Этот принцип, однако, вполне пригоден для автотрейдинга. Его я подсмотрел в кодах Gordago. И, наконец, третий: пока программа берет не более и 10% возможной прибыли. Но это тоже решаемо. По моим прикидкам, потенциал рынка более 1000% в месяц. Нужно только брать все. Но для этого нужно много поработать. Да, еще просьба не очень критиковать за корявый текст. В тексте не все прочищено (я быстро собирал код для примера, могут иметь место неиспользуемые переменные). Если у кого будут идеи по улучшению работы этого советника, буду признателен. Также готов сотрудничать со всеми, кто гребет в этом направлении (ценовые каналы). В конце-концов, цель у нас одна :) Если кто увидит принципиальные недостатки, тоже буду признателен. Лучше сразу исправить, чем потратить кучу времени и средств при тестировании на демо-счете.

И последнее. В программе используется индикатор, текст которого я недавно здесь выставил. Для удобства просмотра графика нужно в индикаторах увеличить параметр max_bars до 10-70 тысяч. И лучше их разными цветами расцветить, чтобы было нагляднее. Но это нужно только для просмотра графика.

Кстати, есть вопрос к разработчикам. В мобильной версии терминала (для наладонников) советники работают? Я что-то явно нигде не нашел ответа. А то я планирую через месячишко начать круглосуточное тестирование на демо-счете, а для этого не хочется гонять DeskTop.

//+------------------------------------------------------------------+
//|                                                     MyFriend.mq4 |
//|                                           Donchian Channel Trade |
//|                                                       2006.07.04 |
//|                                 Copyright © 2006, Nick A. Zhilin |
//|                                              rebus@dialup.etr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Nick A. Zhilin"
#property link      "rebus@dialup.etr.ru"
 
// начальные параметры запуска
extern double Risk=0.20;
extern int SL=150;
extern double I1Period=10;
extern double I2Period=364;
extern int MAPeriod=10;
 
int start()
  {
//----
   double TakeProfit, Lots, StopLoss, NewSL;
   double MACurrent, MAPrevious, MASCurrent, MASPrevious;
   double I1Current, I1Previous, I2Current, I2Previous;
   double I3Current, I3Previous, I4Current, I4Previous;
   int cnt, ticket, total, Ftrend;
   static double PL, AbsSL;
 
   int trend;
 
//-------------------------------------------
// проверка на достаточное количество баров
//-------------------------------------------
   if(Bars < 100)
     {
      Print("Баров должно быть не менее 100");
      return(0);  
     }
 
//-------------------------------------------
// расчет локальных переменных
//-------------------------------------------
// размер открываемой позиции
   Lots=0.1;
   Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1);
// приводим размер позиции к приличному виду
   if(Lots>100) Lots=100;
   if(Lots<0.1) Lots=0.1;
 
//------------------------------------------
// поехали
//------------------------------------------
// значения индикаторов
   MACurrent=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_MEDIAN,0);
   MAPrevious=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_MEDIAN,1);
   MASCurrent=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0);
   MASPrevious=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,1);
   I1Current=iCustom(NULL,0,"DC",I1Period,2,0,0,I1Period,0,0);
   I1Previous=iCustom(NULL,0,"DC",I1Period,2,0,0,I1Period,0,1);
   I2Current=iCustom(NULL,0,"DC",I1Period,2,0,0,I1Period,1,0);
   I2Previous=iCustom(NULL,0,"DC",I1Period,2,0,0,I1Period,1,1);
   I3Current=iCustom(NULL,0,"DC",I2Period,2,0,0,I2Period,0,0);
   I3Previous=iCustom(NULL,0,"DC",I2Period,2,0,0,I2Period,0,1);
   I4Current=iCustom(NULL,0,"DC",I2Period,2,0,0,I2Period,1,0);
   I4Previous=iCustom(NULL,0,"DC",I2Period,2,0,0,I2Period,1,1);
 
// определение основного тренда
   if(Low[3]<=I1Previous
      && Open[2]>=I1Previous
      && Ask>I1Current
      && MACurrent<(MAPrevious-Point)
      && Ask>Open[0])
     // тренд -
     trend=-1;
   if(High[3]>=I2Previous
      && Open[2]<=I2Previous
      && Bid<I2Current
      && MACurrent>(MAPrevious+Point)
      && Bid<Open[0]) 
     // тренд +
     trend=1;
   if((I2Previous==I4Previous && I2Current!=I4Current)
      || (I1Previous==I3Previous && I1Current!=I3Current))
     // конец подтвержденного тренда
     trend=0;
 
//------------------------------------------ 
// открытых ордеров всего
//------------------------------------------ 
   total=OrdersTotal();
   if(total<1) 
     {
      // нет открытых ордеров
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("Недостаточно денег на счету. Free Margin = ", AccountFreeMargin());
         return(0);  
        }  
 
         bool BUYStart=false;
         bool SELLStart=false;
 
         if(!BUYStart && !SELLStart)
            {
             if(
                 (Close[1]<=I1Previous              
                && Open[0]>I1Previous
                && Ask>I1Current)    
                || trend==1
                )               
               {
                BUYStart=true;
                SELLStart=false;
               }
 
             if(
                (Close[1]>=I2Previous     
                && Open[0]<I2Previous
                && Bid<I2Current)   
                || trend==-1
                )
               { 
                SELLStart=true;
                BUYStart=false;
               }
            }
         
         if(BUYStart)
           // открываем длинную позицию (BUY)
           {
            StopLoss=I1Current-SL*Point;
            TakeProfit=Bid+10*Point;
 
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,"MyFriend",9552,0,Yellow);
            if(ticket>0)
              {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                 { 
                  AbsSL=(OrderOpenPrice()-OrderStopLoss())/Point;
                  Print("BUY order opened : ",OrderOpenPrice()," trend=",trend);
                 }
              }
            else Print("Ошибка открытия ордера BUY : ",GetLastError()); 
            return(0); 
           }
           
         if(SELLStart)
           // открываем короткую позицию (SELL)
           { 
            StopLoss=I2Current+SL*Point;
            TakeProfit=Ask-10*Point;
 
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,TakeProfit,"MyFriend",9552,0,Red);
            if(ticket>0)
              {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                 { 
                  AbsSL=(OrderStopLoss()-OrderOpenPrice())/Point;
                  Print("SELL order opened : ",OrderOpenPrice()," trend=",trend);
                 }
              }
            else Print("Ошибка открытия ордера SELL : ",GetLastError()); 
            return(0); 
           } 
      return(0); 
     }
   return(0);
  }
 
//+------------------------------------------------------------------+
 
Вопрос не в тему - только по одному оператору:
Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1);
намедни столкнулся: определял максимально возможный размер (на все депо) позы и ввел в этот оператор Ask
NormalizeDouble(AccountFreeMargin()*Share / 1000 / Ask, StepDgts)
Share - выделяемая доля депо (=0,01...1,00)
только тогда заработало правильно. Оно надо? или это я чего-то как всегда? всюду вижу без этого "/ Ask". Скрипты в КодеБазе.
 
При чем тут Ask?
 
Bookkeeper писал (а):
Вопрос не в тему - только по одному оператору:
Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1);
намедни столкнулся: определял максимально возможный размер (на все депо) позы и ввел в этот оператор Ask
NormalizeDouble(AccountFreeMargin()*Share / 1000 / Ask, StepDgts)
Share - выделяемая доля депо (=0,01...1,00)
только тогда заработало правильно. Оно надо? или это я чего-то как всегда? всюду вижу без этого "/ Ask". Скрипты в КодеБазе.

Как-то не задумывался о физическом смысле этой формулы. Просто вслепую взял из чужих кодов. Вроде работает. Однако, похоже, что нужно делить на цену, конечно же, для определения размера позиции. Просто в основной массе случаев результат будет почти одинаков из-за того, что Ask недалеко от единицы.
На самом деле, меня больше увлекает возможность максимального снижения риска. Все же это лежит в основе работы. У меня есть примеры корректно работающих кодов по 30-50 и более выигрышных позиций подряд. Естественно, с существенной разницей в плюс между непрерывным выигрышем и проигрышем. Пытаюсь грести в двух направлениях: уменьшать количество проигрышных позиций и уменьшать проигрыши по ним. Кстати, даже такой корявый советник в случае, если удастся свести к минимуму проигрыш, делает 33% прибыли при риске 5% и более 900% при риске 40% в месяц (замерял на EUR/USD M15, но работает достаточно похоже на всех ТФ). Т.е. не могу не согласиться с классиками рынка. Нужно снижать убытки, а прибыль сама вырастет :)
 
Уважаемый Rosh, скажите свое веское слово по тому, что делается в приведенном примере. Плиззз :) Чрезвычайно ценю Ваше мнение. А то дальше скоро продолжу работу. Не хотелось бы много и принципиально переделывать. Основные направления работы на ближайшее будущее изложил. Если успею, обязательно приму участие в конкурсе. По крайне мере, хочется потусоваться :) Кстати, задумка с конкурсом очень хорошая. Так и до организации чемпионата мира недалеко :)

Вообще-то, как-то очень тихо здесь после того, как я кусочек своего кода привел. Или выходные или одно из двух... Хоть бы поругал кто. Изнервничался весь :) Садисты, блин!
 
Еврик и Британ хорошо ходют, так что по-позже. Другие пары просто не слежу. Остальные игроки тоже наверное в деле.
 
Bookkeeper писал (а):
Еврик и Британ хорошо ходют, так что по-позже. Другие пары просто не слежу. Остальные игроки тоже наверное в деле.
Понятно. А ты в реале?
 
rebus писал (а):
Bookkeeper писал (а):
Еврик и Британ хорошо ходют, так что по-позже. Другие пары просто не слежу. Остальные игроки тоже наверное в деле.
Понятно. А ты в реале?

Сейчас нет и буду тянуть до 1 сентября. Полно работы (а инета дома нет), терминал могу включать только время от времени, хорошо, если потестировать чего удается, чаще приходится бросать открытые позы на авось, какой реал? только ради слива :).
Август, надеюсь, будет посвободней, отсортирую все, что наделал в торопях, нормально оттестирую и опробую с сентября по-маленькой. У меня все всегда очччччень медлено. Такой вот ближайший план. ..
А сейчас пошел домой, рабдень закончился. Уф.
До встречи.

И всем реалистам - удачных профитов.
Причина обращения: