Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Паттерн 123. Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Пн Июн 11, 2012 9:10 pm Ответить с цитатой Вернуться к началу

Вопрос-просьба всем разбирающимся в Ами.

Вроде как и не индюк, и не система, посему пишу в "Общее".

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

Теперь к конкретике. Речь идет о паттерне из серии Price Action под названием "123". Я думаю, многи в курсе о нем, но на всякий случай распишу суть.

Она такова:
Движение цены формирует лой (точка 1), после чего идет коррекция (движение в обратном направлении), в определенном моменте это движение разворачивается обратно (точка 2). Не доходя до уровня первоначального лоя, цена снова разворачивается (точка 3) и идет вверх, пробивает уровень точки второго разворота (точка 2) и уходит вверх. Для шорта соответственно все наоборот.

Более наглядно паттерн представлен на вложенной картинке.

Image

По классике вход осуществляется на пробое уровня точки 2. При этом высоту движения 1-2 мы берем за 100%. Растягиваем Фибу. На расширениях 161.8% и 261.8% получаем потенциальные цели выхода. Стоп за уровнем точки "3".

Что хотелось бы получить? Хотелось бы, что Ами рассчитывал и показывал сей паттерн. Но поскольку на пробое точки 2 сигнал будет уже поздноват, необходимо, чтобы система давала сигнал о возможном построении паттерна уже в районе точки 3. Сложность в том, что формализовать паттерн, несмотря на всю его простоту, довольно непростая задача.

Изначально нам необходимо определить наличие точек 1 и 2. Ну точка 1 будет ясна, поскольку от неё будет довольно серьезное движение в обратном направлении. А вот с точками 2 и 3 сложнее. Предлагаю сделать это на основе фибо-уровней. Т.е. получаем экстремум, от которого идет движение в обратном направлении. Таким образом, с каждой закрытой свечой можно считать 0-100% и запоминать его. При возврате цены к одному из уровней - 61.8%, 50%, 38.2% - считать фрактал в точке 2 завершенным и ловить точку 3. Точку 3 можно также обнаруживать по тесту одного из трех коррекционных фибо-уровней (61.8%, 50%, 38.2%). Тест может быть хвостом свечи или же телом, при условии обратного закрытия.

Идея в том, что индюк подавал визуальный или звуковой сигнал при обнаружении точки 3, а на график выводил расширения фибы, как у меня на картинке. Т.е. 0 - точка 1, 100% - точка 2, расширения 161.8% и 261.8% - цели.
При непробити ценой точки 2 и уходе цены далее вниз (верх) за уровень точки 1, отрисовка паттерна должна с графика исчезать.

Безусловно, для полноты ощущений, хотелось бы иметь возможность и тестануть сие на истории. Но, очевидно, это будет практически невозможно.

В дополнение, возможно это как-то поможет тем, кто знаком с языками, имеется код подобного поисковика паттерна 123 для МТ4. Выкладываю его сюда.

Заранее всех благодарю за помощь, ежели такая будет оказана в написании сего "индикатора".

Код:

//+------------------------------------------------------------------+
//|                                                    1-2-3 Pattern |
//|                         Copyright © 2008 Kirill, Barry_Stander_4 |
//|               StockProgrammer@mail.ru, Barry_Stander_4@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Kirill, Barry_Stander_4"
#property link      "StockProgrammer@mail.ru, Barry_Stander_4@yahoo.com"

#property  indicator_chart_window
#property  indicator_buffers 8
#property  indicator_color1  Black
#property  indicator_color2  Black
#property  indicator_color3  Black
#property  indicator_color4  Black
#property  indicator_color5  Black
#property  indicator_color6  Black
#property  indicator_color7  Black
#property  indicator_color8  Black


extern   int      period       =  0;       //период для расчёта. Не может быть меньше периода графика.
extern   int      LineWidth = 3;
extern   int      Hi_Low_Mode = 1;
extern   int      Fibo_Mode = 1;
extern   int      Enable_Target = 1;
extern   double   Fibo_Target = 1.618;
int      var_116 = 200;
double   var_120;
double   var_128;
double   arr_136[5];
double   arr_140[5];
double   arr_144[5];
double   arr_148[5];
string   var_152;
int      var_160;
int      var_164;
int      var_168;
int      var_172;
int      var_176;
int      var_180;
int      var_184;
int      var_188;
int      var_192;
int      var_196;
extern   color    Pattern_High = Blue;
extern   color    TradeLine_High = Red;
extern   color    Pattern_Low = Yellow;
extern   color    TradeLine_Low = Green;
extern   color    Fibo = Black;
double   var_220;
double   var_228;
double   var_236;
double   var_244;
int      var_252 = 5;
int      var_256 = 0;
double   arr_260[];
double   arr_264[];
double   arr_268[];
double   arr_272[];
double   arr_276[];
double   arr_280[];
double   arr_284[];
double   arr_288[];
double   var_292 = 0;
double   var_300 = 0;
double   var_308 = 0;
double   var_316 = 0;

string name;
//+------------------------------------------------------------------+

int init()
{
name = WindowExpertName();

var_152 = "1-2-3 Pattern";
IndicatorShortName(var_152);
SetIndexLabel(0,var_152);
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_NONE);
SetIndexStyle(1,DRAW_NONE);
SetIndexStyle(2,DRAW_NONE);
SetIndexStyle(3,DRAW_NONE);
SetIndexStyle(4,DRAW_NONE);
SetIndexStyle(5,DRAW_NONE);
SetIndexStyle(6,DRAW_NONE);
SetIndexStyle(7,DRAW_NONE);
SetIndexLabel(0,"Stop");
SetIndexLabel(1,"Enter");
SetIndexLabel(2,"Trade_Down");
SetIndexLabel(3,"Stop");
SetIndexLabel(4,"Enter");
SetIndexLabel(5,"Trade_UP");
SetIndexLabel(6,"D_Retrace");
SetIndexLabel(7,"U_Retrace");
SetIndexBuffer(0,arr_260);
SetIndexBuffer(1,arr_264);
SetIndexBuffer(2,arr_268);
SetIndexBuffer(3,arr_272);
SetIndexBuffer(4,arr_276);
SetIndexBuffer(5,arr_280);
SetIndexBuffer(6,arr_284);
SetIndexBuffer(7,arr_288);
SetIndexDrawBegin(0,0);
SetIndexDrawBegin(1,0);
SetIndexDrawBegin(2,0);
SetIndexDrawBegin(3,0);
SetIndexDrawBegin(4,0);
SetIndexDrawBegin(5,0);
SetIndexDrawBegin(6,0);
SetIndexDrawBegin(7,0);
DeleteObj();
}

//+------------------------------------------------------------------+

int deinit()
{
DeleteObj();
}

//+------------------------------------------------------------------+

int DeleteObj()
{
int var_DeleteObj_0;

ObjectDelete("HH0" + DoubleToStr(period, 0));
ObjectDelete("LL0" + DoubleToStr(period, 0));
ObjectDelete("HH1" + DoubleToStr(period, 0));
ObjectDelete("HH2" + DoubleToStr(period, 0));
ObjectDelete("HH3" + DoubleToStr(period, 0));
ObjectDelete("LL1" + DoubleToStr(period, 0));
ObjectDelete("LL2" + DoubleToStr(period, 0));
ObjectDelete("LL3" + DoubleToStr(period, 0));
ObjectDelete("EntryL" + DoubleToStr(period, 0));
ObjectDelete("TargetL" + DoubleToStr(period, 0));
ObjectDelete("TargetP" + DoubleToStr(period, 0));
ObjectDelete("EntryH" + DoubleToStr(period, 0));
ObjectDelete("TargetH" + DoubleToStr(period, 0));
return(0);
}

//+------------------------------------------------------------------+
bool alertflag = 0;
int start()
{

if(period == Period() || period == 0)
{
   alertflag = 0;

   double var_start_0;
   double var_start_8;
   int    i;
   int    var_start_20;
   int    counted_bars;
   double spread;
   double var_start_36;
   int    var_start_44;
   double var_start_48;
   int    var_start_56;
   double var_start_60;
   int    var_start_68;
   double var_start_72;
   int    var_start_80;
   double var_start_84;
   double var_start_92;
   double var_start_100;
   double var_start_108;
   double var_start_116;
   double var_start_124;


   counted_bars = IndicatorCounted();
   if (counted_bars < 0) return(-1);

   spread = MarketInfo(Symbol(),MODE_SPREAD);
   if (spread == 0.0) spread = (Ask - Bid) / Point;

   var_192 = 0;
   var_196 = 0;
   DeleteObj();

   for (i = var_116; i >= 0; i--)
      {
      if (Hi_Low_Mode == 1)
         {
         var_120 = iFractals(NULL,0,MODE_UPPER,i);
         if (var_120 > 0.0)
            {
            arr_136[1] = arr_136[3];
            arr_136[3] = var_120;
            arr_140[1] = arr_140[3];
            arr_140[3] = i;
            arr_140[2] = Lowest(NULL,0,MODE_LOW,arr_140[1] - arr_140[3] - 1.0,arr_140[3] + 1.0);
            arr_136[2] = Low[Lowest(NULL,0,MODE_LOW,arr_140[1] - arr_140[3] - 1.0,arr_140[3] + 1.0)];
            arr_140[4] = arr_140[3] - (arr_140[1] - arr_140[2]);
            if (arr_140[4] < 0.0) arr_140[4] = 0;
            arr_136[4] = arr_136[2];
            }
         var_128 = iFractals(NULL,0,MODE_LOWER,i);
         if (var_128 > 0.0)
            {
            arr_144[1] = arr_144[3];
            arr_144[3] = var_128;
            arr_148[1] = arr_148[3];
            arr_148[3] = i;
            arr_148[2] = Highest(NULL,0,MODE_HIGH,arr_148[1] - arr_148[3] - 1.0,arr_148[3] + 1.0);
            arr_144[2] = High[Highest(NULL,0,MODE_HIGH,arr_148[1] - arr_148[3] - 1.0,arr_148[3] + 1.0)];
            arr_148[4] = arr_148[3] - (arr_148[1] - arr_148[2]);
            if (arr_148[4] < 0.0) arr_148[4] = 0;
            arr_144[4] = arr_144[2];
            }
         }
      if (Hi_Low_Mode == 2)
         {
         if ((High[i - 1] < High[i]) && (High[i - 2] < High[i]) && (High[i - 2] < High[i - 1]) && (High[i + 1] < High[i]) && (High[i + 2] < High[i]) && (High[i + 2] < High[i + 1]))
            {
            arr_136[1] = arr_136[3];
            arr_136[3] = High[i];
            arr_140[1] = arr_140[3];
            arr_140[3] = i;
            arr_140[2] = Lowest(NULL,0,MODE_LOW,arr_140[1] - arr_140[3] - 1.0,arr_140[3] + 1.0);
            arr_136[2] = Low[Lowest(NULL,0,MODE_LOW,arr_140[1] - arr_140[3] - 1.0,arr_140[3] + 1.0)];
            arr_140[4] = arr_140[3] - (arr_140[1] - arr_140[2]);
            if (arr_140[4] < 0.0) arr_140[4] = 0;
            arr_136[4] = arr_136[2];
            }
         if ((Low[i - 1] > Low[i]) && (Low[i - 2] > Low[i]) && (Low[i - 2] > Low[i - 1]) && (Low[i + 1] > Low[i]) && (Low[i + 2] > Low[i]) && (Low[i + 2] > Low[i + 1]))
            {
            arr_144[1] = arr_144[3];
            arr_144[3] = Low[i];
            arr_148[1] = arr_148[3];
            arr_148[3] = i;
            arr_148[2] = Highest(NULL,0,MODE_HIGH,arr_148[1] - arr_148[3] - 1.0,arr_148[3] + 1.0);
            arr_144[2] = High[Highest(NULL,0,MODE_HIGH,arr_148[1] - arr_148[3] - 1.0,arr_148[3] + 1.0)];
            arr_148[4] = arr_148[3] - (arr_148[1] - arr_148[2]);
            if (arr_148[4] < 0.0) arr_148[4] = 0;
            arr_144[4] = arr_144[2];
            }
         }
      var_160 = arr_140[1];
      var_164 = arr_140[2];
      var_168 = arr_140[3];
      var_172 = arr_140[4];
      var_176 = arr_148[1];
      var_180 = arr_148[2];
      var_184 = arr_148[3];
      var_188 = arr_148[4];
      if ((arr_136[1] >= arr_136[3]) && (arr_136[1] > arr_136[2]))
         {
         ObjectDelete("HH0" + DoubleToStr(period, 0));
         ObjectDelete("LL0" + DoubleToStr(period, 0));
         ObjectDelete("HH1" + DoubleToStr(period, 0));
         ObjectDelete("HH2" + DoubleToStr(period, 0));
         ObjectDelete("HH3" + DoubleToStr(period, 0));
         ObjectDelete("LL1" + DoubleToStr(period, 0));
         ObjectDelete("LL2" + DoubleToStr(period, 0));
         ObjectDelete("LL3" + DoubleToStr(period, 0));
         ObjectDelete("EntryL" + DoubleToStr(period, 0));
         ObjectDelete("TargetL" + DoubleToStr(period, 0));
         ObjectDelete("EntryH" + DoubleToStr(period, 0));
         ObjectDelete("TargetH" + DoubleToStr(period, 0));
         ObjectDelete("TargetP" + DoubleToStr(period, 0));
         ObjectCreate("HH1" + DoubleToStr(period, 0) + var_start_20,OBJ_TREND,0,Time[var_160],arr_136[1],Time[var_164],arr_136[2]);
         ObjectCreate("HH2" + DoubleToStr(period, 0) + var_start_20,OBJ_TREND,0,Time[var_164],arr_136[2],Time[var_168],arr_136[3]);
         if ((High[Highest(NULL,0,MODE_HIGH,arr_140[1] - 1.0,1)] < arr_136[1]) && (arr_136[3] > Bid))
            {
            if (Fibo_Mode == 1) ObjectCreate("HH0" + DoubleToStr(period, 0),OBJ_FIBO,0,Time[var_164],arr_136[2],Time[var_160],arr_136[1]);
            if (Fibo_Mode == 2) ObjectCreate("HH0" + DoubleToStr(period, 0),OBJ_EXPANSION,0,Time[var_160],arr_136[1],Time[var_164],arr_136[2],Time[var_168],arr_136[3]);
            ObjectCreate("HH1" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_160],arr_136[1],Time[var_164],arr_136[2]);
            ObjectCreate("HH2" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_164],arr_136[2],Time[var_168],arr_136[3]);
            ObjectCreate("HH3" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_168],arr_136[3],Time[var_172],arr_136[4]);
            if (Fibo_Mode == 1)
               {
               var_start_8 = arr_136[1] - arr_136[2];
               if (arr_136[3] > NormalizeDouble(arr_136[2] + var_start_8 * 0.764,4))
                  {
                  var_228 = NormalizeDouble(arr_136[2] - var_start_8 * 0.0,4);
                  }
               if ((arr_136[3] <= NormalizeDouble(arr_136[2] + var_start_8 * 0.764,4)) && (arr_136[3] > NormalizeDouble(arr_136[2] + var_start_8 * 0.618,4)))
                  {
                  var_228 = NormalizeDouble(arr_136[2] - var_start_8 * 0.27,4);
                  }
               if (arr_136[3] <= NormalizeDouble(arr_136[2] + var_start_8 * 0.618,4))
                  {
                  var_228 = NormalizeDouble(arr_136[2] - var_start_8 * 0.618,4);
                  }
               }
            if (Fibo_Mode == 2) var_228 = MathAbs(Fibo_Target * (arr_136[1] - arr_136[2]) - arr_136[3]);
            var_236 = var_228 + (spread + 2.0) * Point;
            if ((var_228 < arr_136[2]) && (arr_136[2] - var_236 >= var_252 * Point) && (Enable_Target == 1))
               {
               ObjectCreate("EntryH" + DoubleToStr(period, 0),OBJ_HLINE,0,0,arr_136[2] - Point * 1.0);
               ObjectCreate("TargetH" + DoubleToStr(period, 0),OBJ_HLINE,0,0,var_236);
               ObjectCreate("TargetP" + DoubleToStr(period, 0),OBJ_TEXT,0,CurTime() + 100,0);
               ObjectSetText("TargetP" + DoubleToStr(period, 0),DoubleToStr((arr_136[2] - Point * 1.0 - var_236) / Point,0),10,"Arial",Blue);
               ObjectMove("TargetP" + DoubleToStr(period, 0),0,CurTime() + Period() * 100,var_236);
               }
            }
         }
      if ((arr_144[1] <= arr_144[3]) && (arr_144[1] < arr_144[2]))
         {
         ObjectDelete("HH0" + DoubleToStr(period, 0));
         ObjectDelete("LL0" + DoubleToStr(period, 0));
         ObjectDelete("HH1" + DoubleToStr(period, 0));
         ObjectDelete("HH2" + DoubleToStr(period, 0));
         ObjectDelete("HH3" + DoubleToStr(period, 0));
         ObjectDelete("LL1" + DoubleToStr(period, 0));
         ObjectDelete("LL2" + DoubleToStr(period, 0));
         ObjectDelete("LL3" + DoubleToStr(period, 0));
         ObjectDelete("EntryH" + DoubleToStr(period, 0));
         ObjectDelete("TargetH" + DoubleToStr(period, 0));
         ObjectDelete("EntryL" + DoubleToStr(period, 0));
         ObjectDelete("TargetL" + DoubleToStr(period, 0));
         ObjectDelete("TargetP" + DoubleToStr(period, 0));
         ObjectCreate("LL1" + DoubleToStr(period, 0) + var_start_20,OBJ_TREND,0,Time[var_176],arr_144[1],Time[var_180],arr_144[2]);
         ObjectCreate("LL2" + DoubleToStr(period, 0) + var_start_20,OBJ_TREND,0,Time[var_180],arr_144[2],Time[var_184],arr_144[3]);
         if ((Low[Lowest(NULL,0,MODE_LOW,arr_148[1] - 1.0,1)] > arr_144[1]) && (arr_144[3] < Bid))
            {
            if (Fibo_Mode == 1) ObjectCreate("LL0" + DoubleToStr(period, 0),OBJ_FIBO,0,Time[var_180],arr_144[2],Time[var_176],arr_144[1]);
            if (Fibo_Mode == 2) ObjectCreate("LL0" + DoubleToStr(period, 0),OBJ_EXPANSION,0,Time[var_176],arr_144[1],Time[var_180],arr_144[2]);
            ObjectCreate("LL1" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_176],arr_144[1],Time[var_180],arr_144[2]);
            ObjectCreate("LL2" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_180],arr_144[2],Time[var_184],arr_144[3]);
            ObjectCreate("LL3" + DoubleToStr(period, 0),OBJ_TREND,0,Time[var_184],arr_144[3],Time[var_188],arr_144[4]);
            if (Fibo_Mode == 1)
               {
               var_start_0 = (arr_144[2] - arr_144[1]) / 100.0;
               if (arr_144[3] < NormalizeDouble(arr_144[2] - var_start_0 * 76.4,4))
                  {
                  var_220 = NormalizeDouble(arr_144[2] + var_start_0 * 0.0,4);
                  }
               if ((arr_144[3] >= NormalizeDouble(arr_144[2] - var_start_0 * 76.4,4)) && (arr_144[3] < NormalizeDouble(arr_144[2] - var_start_0 * 61.8,4)))
                  {
                  var_220 = NormalizeDouble(arr_144[2] + var_start_0 * 27.0,4);
                  }
               if (arr_144[3] >= NormalizeDouble(arr_144[2] - var_start_0 * 61.8,4))
                  {
                  var_220 = NormalizeDouble(arr_144[2] + var_start_0 * 61.8,4);
                  }
               }
            if (Fibo_Mode == 2) var_220 = MathAbs(Fibo_Target * (arr_144[2] - arr_144[1]) + arr_144[3]);
            var_220 = var_220 - 2 * Point;
            var_244 = arr_144[2] + (spread + 1.0) * Point;
            if ((var_220 > var_244) && (var_220 - arr_144[2] >= var_252 * Point) && (Enable_Target == 1))
               {
               ObjectCreate("EntryL" + DoubleToStr(period, 0),OBJ_HLINE,0,0,var_244);
               ObjectCreate("TargetL" + DoubleToStr(period, 0),OBJ_HLINE,0,0,var_220);
               ObjectCreate("TargetP" + DoubleToStr(period, 0),OBJ_TEXT,0,CurTime() + 100,0);
               ObjectSetText("TargetP" + DoubleToStr(period, 0),DoubleToStr((var_220 - var_244) / Point,0),10,"Arial",Red);
               ObjectMove("TargetP" + DoubleToStr(period, 0),0,CurTime() + Period() * 200,var_220);
               }
            }
         }
      var_start_36 = ObjectGet("HH1" + DoubleToStr(period, 0),OBJPROP_PRICE1);
      var_start_44 = ObjectGet("HH1" + DoubleToStr(period, 0),OBJPROP_TIME1);
      var_start_48 = ObjectGet("HH1" + DoubleToStr(period, 0),OBJPROP_PRICE2);
      var_start_56 = ObjectGet("HH1" + DoubleToStr(period, 0),OBJPROP_TIME2);
      var_start_60 = ObjectGet("LL1" + DoubleToStr(period, 0),OBJPROP_PRICE1);
      var_start_68 = ObjectGet("LL1" + DoubleToStr(period, 0),OBJPROP_TIME1);
      var_start_72 = ObjectGet("LL1" + DoubleToStr(period, 0),OBJPROP_PRICE2);
      var_start_80 = ObjectGet("LL1" + DoubleToStr(period, 0),OBJPROP_TIME2);
      var_start_84 = ObjectGet("HH2" + DoubleToStr(period, 0),OBJPROP_PRICE2);
      var_start_92 = ObjectGet("LL2" + DoubleToStr(period, 0),OBJPROP_PRICE2);
      arr_260[i] = var_start_36;
      arr_264[i] = var_start_48;
      arr_272[i] = var_start_60;
      arr_276[i] = var_start_72;
      arr_284[i] = var_start_84;
      arr_288[i] = var_start_92;
      if ((var_start_44 > 0) && (var_start_56 > 0))
         {
         var_start_100 = (CurTime() - var_start_44) / 60 / Period();
         var_start_108 = arr_264[i] + (arr_264[i] - arr_260[i]) / 2;
         if (var_start_100 < 1.0) var_start_100 = 1;
         var_300 = High[Highest(NULL,0,MODE_HIGH,var_start_100,0)];
         var_292 = Low[Lowest(NULL,0,MODE_LOW,var_start_100,0)];
         }
            else
         {
         var_292 = 0;
         var_300 = 0;
         }
      if ((var_start_68 > 0) && (var_start_80 > 0))
         {
         var_start_116 = (CurTime() - var_start_68) / 60 / Period();
         var_start_124 = arr_276[i] + (arr_276[i] - arr_272[i]) / 2;
         if (var_start_116 < 1.0) var_start_116 = 1;
         var_316 = High[Highest(NULL,0,MODE_HIGH,var_start_116,0)];
         var_308 = Low[Lowest(NULL,0,MODE_LOW,var_start_116,0)];
         }
            else
         {
         var_308 = 0;
         var_316 = 0;
         }
      if ((var_292 <= arr_260[i]) && (var_300 >= arr_264[i]) && (arr_260[i] > 0) && (arr_264[i] > 0) && (var_292 > var_start_108))
         {
         arr_268[i] = 1;
         var_192 = 1;
         }
            else
         {
         arr_268[i] = 0;
         var_192 = 0;
         }
      if ((var_308 >= arr_272[i]) && (var_316 <= arr_276[i]) && (arr_272[i] > 0) && (arr_276[i] > 0) && (var_308 < var_start_124))
         {
         arr_280[i] = 1;
         var_196 = 1;
         }
            else
         {
         arr_280[i] = 0;
         var_196 = 0;
         }
      ObjectSet("HH0" + DoubleToStr(period, 0),OBJPROP_COLOR,Fibo);
      ObjectSet("LL0" + DoubleToStr(period, 0),OBJPROP_COLOR,Fibo);
      ObjectSet("HH0" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("LL0" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("HH0" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      ObjectSet("LL0" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      ObjectSet("HH1" + DoubleToStr(period, 0),OBJPROP_COLOR,Pattern_High);
      ObjectSet("HH2" + DoubleToStr(period, 0),OBJPROP_COLOR,Pattern_High);
      ObjectSet("HH3" + DoubleToStr(period, 0),OBJPROP_COLOR,TradeLine_High);
      ObjectSet("LL1" + DoubleToStr(period, 0),OBJPROP_COLOR,Pattern_Low);
      ObjectSet("LL2" + DoubleToStr(period, 0),OBJPROP_COLOR,Pattern_Low);
      ObjectSet("LL3" + DoubleToStr(period, 0),OBJPROP_COLOR,TradeLine_Low);
      ObjectSet("HH1" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("HH2" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("HH3" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("LL1" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("LL2" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("LL3" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet("HH0" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("HH1" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("HH2" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("HH3" + DoubleToStr(period, 0),OBJPROP_RAY,1);
      ObjectSet("LL0" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("LL1" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("LL2" + DoubleToStr(period, 0),OBJPROP_RAY,0);
      ObjectSet("LL3" + DoubleToStr(period, 0),OBJPROP_RAY,1);
      ObjectSet("HH1" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("HH2" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("HH3" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("LL1" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("LL2" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("LL3" + DoubleToStr(period, 0),OBJPROP_WIDTH,LineWidth);
      ObjectSet("EntryH" + DoubleToStr(period, 0),OBJPROP_COLOR,Blue);
      ObjectSet("EntryL" + DoubleToStr(period, 0),OBJPROP_COLOR,Blue);
      ObjectSet("EntryH" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet("EntryL" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet("EntryH" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      ObjectSet("EntryL" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      ObjectSet("TargetH" + DoubleToStr(period, 0),OBJPROP_COLOR,Blue);
      ObjectSet("TargetL" + DoubleToStr(period, 0),OBJPROP_COLOR,Blue);
      ObjectSet("TargetH" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet("TargetL" + DoubleToStr(period, 0),OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet("TargetH" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      ObjectSet("TargetL" + DoubleToStr(period, 0),OBJPROP_WIDTH,0);
      if (var_start_20 < 6)
         {
         ObjectDelete("HH1" + DoubleToStr(period, 0) + var_start_20);
         ObjectDelete("HH2" + DoubleToStr(period, 0) + var_start_20);
         ObjectDelete("HH3" + DoubleToStr(period, 0) + var_start_20);
         ObjectDelete("LL1" + DoubleToStr(period, 0) + var_start_20);
         ObjectDelete("LL2" + DoubleToStr(period, 0) + var_start_20);
         ObjectDelete("LL3" + DoubleToStr(period, 0) + var_start_20);
         }
      ObjectDelete("HH1" + DoubleToStr(period, 0) + var_start_20);
      ObjectDelete("HH2" + DoubleToStr(period, 0) + var_start_20);
      ObjectDelete("HH3" + DoubleToStr(period, 0) + var_start_20);
      ObjectDelete("LL1" + DoubleToStr(period, 0) + var_start_20);
      ObjectDelete("LL2" + DoubleToStr(period, 0) + var_start_20);
      ObjectDelete("LL3" + DoubleToStr(period, 0) + var_start_20);
      if ((var_120 > 0) || (var_128 > 0)) var_start_20++;
      }
   if (Seconds() < 10) var_256 = 0;
}

else if(period < Period() && period != 0)
{
   if(alertflag == 0) {Alert("Parameter \"period\" is less than period of current graph. Please enter different period"); alertflag = 1;}
   return(0);
}

else     //тут начинается МОЗГ !
{
   alertflag = 0;
   
   datetime period_time_0;   
   int error = 0;
   static bool alerted = 0;

   period_time_0 = iTime(NULL, period, 0);
   error=GetLastError();
   if(alerted==0 && error==4066)
   {
      Alert("Error 4066: Data for period = ", period, " not loaded. Loading data... Indicator will be redrawn as soon as data is loaded.");
      alerted = 1;
   }
     
   iCustom(NULL, period, name, period, LineWidth, Hi_Low_Mode, Fibo_Mode, Enable_Target, Fibo_Target, 0, 0); 

}

}
Посмотреть профиль Отправить личное сообщение
tlt-vlad



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

СообщениеДобавлено: Пн Июн 11, 2012 9:26 pm Ответить с цитатой Вернуться к началу

Не проще ли глазками, да и для опыта полезнее...
... или машину для бабления разрабатываешь ??? Laughing

_________________
Price Action Forever...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 11, 2012 9:26 pm Ответить с цитатой Вернуться к началу

Вот что подскажи.
А расстояние (и горизонтальное и вертикальное) между 1,2,3 имеет значение?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Пн Июн 11, 2012 11:28 pm Ответить с цитатой Вернуться к началу

Посмотри http://www.wisestocktrader.com/indicators/1368-intraday-fibonacii-trend-break-system, неявно паттерн 1-2-3-бибикает при пробое наклонной трендовой, готовишься, и при пробое и 0% и 100% Фибо снова сигнал, входишь, цели сам поставишь, бар реплеером прогоняешь и записываешь в файл вход и если до цели дойдёт, вот тебе и тестирование, я гонял, нужно подбирать параметры и таймфрейм, может что и выйдет.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 12, 2012 12:17 am Ответить с цитатой Вернуться к началу

Вообще то я задал конкретный вопрос. Не, конечно, если тебе не нужна распознавалка паттерна, то можешь не отвечать....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вт Июн 12, 2012 10:30 am Ответить с цитатой Вернуться к началу

000 писал(а):
Вообще то я задал конкретный вопрос. Не, конечно, если тебе не нужна распознавалка паттерна, то можешь не отвечать....


Извиняюсь, что затягиваю с ответом. Болею. К компу редко подхожу.

Про вертикальное и горизонтальное расстояние.
По теории есть один момент - точки 2 и 3 на одной свече быть не могут. Других ограничений нет.

По хорошему, точка 3 не должна слишком заходить вниз за 38% фибу, ибо соотношение профит/лосс очень сильно снижается. Но в целом непринципиально.
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вт Июн 12, 2012 10:32 am Ответить с цитатой Вернуться к началу

tlt-vlad писал(а):
Не проще ли глазками, да и для опыта полезнее...
... или машину для бабления разрабатываешь ??? Laughing


Глазками оно можно. Но постоянно следить за несколькими инструментами нет возможности. Было бы неплохо, что бы вылетали подсказки, дескать, уважаемый, вот тут вроде как формация формируется. Следи!
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вт Июн 12, 2012 10:35 am Ответить с цитатой Вернуться к началу

belin писал(а):
Посмотри http://www.wisestocktrader.com/indicators/1368-intraday-fibonacii-trend-break-system, неявно паттерн 1-2-3-бибикает при пробое наклонной трендовой, готовишься, и при пробое и 0% и 100% Фибо снова сигнал, входишь, цели сам поставишь, бар реплеером прогоняешь и записываешь в файл вход и если до цели дойдёт, вот тебе и тестирование, я гонял, нужно подбирать параметры и таймфрейм, может что и выйдет.


Спасибо за ссылку. Не то, конечно, но посмотреть есть смысл.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 12, 2012 11:19 pm Ответить с цитатой Вернуться к началу

AntColonel писал(а):
000 писал(а):
Вообще то я задал конкретный вопрос. Не, конечно, если тебе не нужна распознавалка паттерна, то можешь не отвечать....


Извиняюсь, что затягиваю с ответом. Болею. К компу редко подхожу.

Про вертикальное и горизонтальное расстояние.
По теории есть один момент - точки 2 и 3 на одной свече быть не могут. Других ограничений нет.

По хорошему, точка 3 не должна слишком заходить вниз за 38% фибу, ибо соотношение профит/лосс очень сильно снижается. Но в целом непринципиально.

Не. С такими маленькими ограничениями не получается. Допустим на 5 мин. точка 1 - 2001 год, точка 2 = 2008, а точка 3 - сейчас....

И такая же фигня 2 недели назад, неделю назад и сейчас. И то же с месяцами... Нужны ограничения....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Ср Июн 13, 2012 3:53 am Ответить с цитатой Вернуться к началу

[quote="000"]
AntColonel писал(а):

Не. С такими маленькими ограничениями не получается. Допустим на 5 мин. точка 1 - 2001 год, точка 2 = 2008, а точка 3 - сейчас....

И такая же фигня 2 недели назад, неделю назад и сейчас. И то же с месяцами... Нужны ограничения....


А если как-то в этом деле задействовать те же фракталы или зигзаг? Точка 1 понятна, точка 2 рисуется после коррекции на 61.8% (уже от самой точки 2). Как-то так... Дело в том, что на 5 минутках внутри дня подобные формации могут образоватьтся и за полчаса, и за 2-3 часа.

Паттерн нужен для внутридневной торговли, используемый ТФ - 5 мин. Т.е. с неделями, месяцами, годами тут перебор.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Июн 13, 2012 7:54 am Ответить с цитатой Вернуться к началу

Это понятно. Но вот я столкнулся. Берем точку 1, далее ищем кандидата на 2. Вопрос. Как далеко это делать? Может между ними лет 5.... И получается, что кандидатов на 2 каждый раз очень много....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Ср Июн 13, 2012 9:22 am Ответить с цитатой Вернуться к началу

000 писал(а):
Это понятно. Но вот я столкнулся. Берем точку 1, далее ищем кандидата на 2. Вопрос. Как далеко это делать? Может между ними лет 5.... И получается, что кандидатов на 2 каждый раз очень много....


Так я о том и пишу.

Точку один взяли. От неё пошло движение. Потом это движение останавливается и корректируется минимум на 61.8% - тут и получаем точку 2 в месте разворота и потенциальную точку 3 на тесте уровня 61.8 (50%, 38%)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Июн 13, 2012 11:07 pm Ответить с цитатой Вернуться к началу

А если так.
Взяли точку 1, от неё пошло движение, потом разворот немного и дальше опять движение, в месте этого зигзага имеем еще одну потенциальную точку 1. Т.е. получается, что внутри одного движения 1-2 может построиться целый паттерн 1-2-3.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Чт Июн 14, 2012 12:16 am Ответить с цитатой Вернуться к началу

Можно взять подтвержденный(неперерисовывающийся) Зиг-заг, дожидаемся подтверждения впадины, проверяем соотношение разницы (последний пик-предпоследняя впадина) берём за 100%, это точки 2 и 1(последний пик-последняя впадина) коррекция более 50%, но не доходит до 38%, тогда возможен 1-2-3 паттерн, в котором точка 3 -последняя впадина, при пробое вверх последнего пика паттерн подтверждается, словесное описание соответствует рисунку в первом посте ветки, для продажи наооборот.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июн 14, 2012 10:56 pm Ответить с цитатой Вернуться к началу

Тогда ограничиваем патерн параметром зигзага...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen