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



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

СообщениеДобавлено: Сб Окт 03, 2015 10:51 pm Ответить с цитатой Вернуться к началу

Есть такой код. Вручную ставишь точки можно нарисовать паттерн бабочки или краба. Не пойму как убирать точки. Т.е. я например поставил точку, если хочу убрать приходится удалять весь график. Должны ведь как-то удаляться проще. Еще возможно ли сделать из этого кода автоматическое рисование, потому как вручную искать пропорции утомительно Very Happy Хотя с таким кодом значительно проще, потому как хоть сразу пропорции видно.
Я так понимаю нужно заложить в код все возможные варианты соотношений (как на рисунке), но как заложить в код поиск начальной точки?

Код:
_SECTION_BEGIN("Gartley Tool");
Gartley=ParamToggle("Gartley","OFF|ON",1);
Trg=ParamToggle("Show Targets","Yes|No",1);

Type=ParamToggle("Label","ABCD|PRICE",1);
Snap=ParamToggle("Snap","Yes|No",1);

if(Gartley==1)
{
SetBarsRequired( -2, -2 );
bi = BarIndex();
bis = SelectedValue( bi );

symbol = Name();
tframe = Interval();
chartID = GetChartID();
Xname = "X" + chartID + symbol + tframe;
Yname = "Y" + chartID + symbol + tframe;

LeftButton = GetCursorMouseButtons() & 1;
a = Nz(StaticVarGet("counter"));
if ( leftButton )
{
   StaticVarSet("counter", a+1);
   
    x = GetCursorXPosition(  );
   y = GetCursorYPosition(  );
   StaticVarSet( Xname + bis, x );
   StaticVarSet( Yname + bis, y );
   
}


j = 0;
dt = DateTime();
shapePlot = 0;
shapePos = Null;
xx = yy = Null;
FirstVisibleBar = Status( "FirstVisibleBar" );
Lastvisiblebar = Status( "LastVisibleBar" );
for ( i = FirstVisibleBar; i <Lastvisiblebar AND i<BarCount; i++ )
{
   x = StaticVarGet( Xname + i );
   y = StaticVarGet( Yname + i );

   if ( x == dt[i] AND snap==0)
   {
       shapePlot[i] = 1;
       shapePos[i] = IIf(abs(H[i]-y) < abs(L[i]-y), H[i], L[i]);
       xx[j] = i;
       yy[j] = IIf(abs(H[i]-y) < abs(L[i]-y), H[i], L[i]);
       j++;
   }
   else if ( x == dt[i] AND snap==1)
   {
       shapePlot[i] = 1;
       shapePos[i] = y;
       xx[j] = i;
       yy[j] = y;
       j++;
   }

}



shape = shapeSmallCircle;
PlotShapes( shapePlot*shape, colorRed, 0, shapePos, 0 );
Values=ParamToggle("Segment Values","No|Yes",1);
vr=ParamToggle("R1","No|Yes",1);
vr2=ParamToggle("R2","No|Yes",0);
vr3=ParamToggle("R3","No|Yes",1);

for ( i = 1; i <= j ; i++ )

{
if(i==1 AND Type==0)
{
PlotText("X ",xx[i-1]-2,yy[i-1],colorWhite);
}
if(i==2 AND Type==0)
{
PlotText("A ",xx[i-1]-2,yy[i-1],colorWhite);
}
if(i==3 AND Type==0)
{
PlotText("B ",xx[i-1]-2,yy[i-1],colorWhite);
}
if(i==4 AND Type==0)
{
PlotText("C ",xx[i-1]+2,yy[i-1],colorWhite);
}
if(i==5 AND Type==0)
{
PlotText("D ",xx[i-1]+2,yy[i-1],colorWhite);
}
if(i==6 AND Type==0)
{
PlotText("E ",xx[i-1]+2,yy[i-1],colorWhite);
}
if(i==7 AND Type==0)
{
PlotText("F ",xx[i-1]+2,yy[i-1],colorWhite);
}
if(i==8 AND Type==0)
{
PlotText("G ",xx[i-1]+2,yy[i-1],colorWhite);
}
if(Type==1)
{
PlotText(""+yy[i-1],xx[i-1]+2,yy[i-1],colorWhite);
}



Plot( LineArray( xx[i-1], yy[i-1], xx[i], yy[i] ), "", colorBlue, styleThick );
XA=yy[i]-yy[i-1];
AB=yy[i]-yy[i+1];
AD=yy[i]-yy[i+3];
BC=yy[i+1]-yy[i+2];
CD=yy[i+2]-yy[i+3];
r=CD/XA;
r2=AB/XA;
r3=XA/BC;

if(Trg==0)
{
target1=yy[i+3]+AD*0.618;
Line1=LineArray(xx[i+2],target1,BarCount-1,target1);
Plot(Line1,"",colorYellow,styleDashed|styleNoRescale);

target2=yy[i+3]+AD*1.272;
Line2=LineArray(xx[i+2],target2,BarCount-1,target2);
Plot(Line2,"",colorYellow,styleDashed|styleNoRescale);

target3=yy[i+3]+AD*2.618;
Line3=LineArray(xx[i+2],target3,BarCount-1,target3);
Plot(Line3,"",colorYellow,styleDashed|styleNoRescale);
}



if(vr==1)
{
PlotText(""+Prec(abs(r2), 2 )+" ("+(abs(xx[i-1]-XX[i+1]))+")",XX[i-1]+int((xx[i+1]-XX[i-1])/2),yy[i-1]+((yy[i+1]-yy[i-1])/2),colorBlack,colorYellow);
Plot( LineArray( xx[i-1], yy[i-1], xx[i+1], yy[i+1] ), "", colorBlue, styleDashed );
}
if(vr2==1)
{
PlotText(""+Prec(abs(r3), 2 )+" ("+(abs(xx[i-1]-XX[i+2]))+")",XX[i-1]+int((xx[i+2]-XX[i-1])/2),yy[i-1]+((yy[i+2]-yy[i-1])/2),colorBlack,colorYellow);
Plot( LineArray( xx[i-1], yy[i-1], xx[i+2], yy[i+2] ), "", colorBlue, styleDashed );
}
if(vr3==1)
{
PlotText(""+Prec(abs(r), 2 )+" ("+(abs(xx[i-1]-XX[i+3]))+")",XX[i-1]+int((xx[i+3]-XX[i-1])/2),yy[i-1]+((yy[i+3]-yy[i-1])/2),colorBlack,colorYellow);
Plot( LineArray( xx[i-1], yy[i-1], xx[i+3], yy[i+3] ), "", colorBlue, styleDashed );
}
if(Values==1)
{
PlotText(""+Prec(abs(XA), 2 ),XX[i-1]+int((xx[i]-xx[i-1])/2),yy[i-1]+XA/2,colorBlack,colorWhite);
}

}

if ( GetCursorMouseButtons() == 12 )
{

for ( i = 0; i < BarCount; i++ )

   {
       StaticVarRemove("counter");
       StaticVarRemove( Xname + i );
       StaticVarRemove( Yname + i );
    RequestTimedRefresh(1,True );

   }
}

}
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Окт 04, 2015 12:55 am Ответить с цитатой Вернуться к началу

Вот немного измененный код. Средняя кнопка мыши удаляет точку выделенную вертикальной линией. Кнопка "Delete" удаляет все.
Код:

_SECTION_BEGIN("Gartley Tool");
RequestTimedRefresh(1);
Gartley=ParamToggle("Gartley","OFF|ON",1);
Trg=ParamToggle("Show Targets","Yes|No",1);

Type=ParamToggle("Label","ABCD|PRICE",1);
Snap=ParamToggle("Snap","Yes|No",1);

if(Gartley==1)
{
   SetBarsRequired( -2, -2 );
   bi = BarIndex();
   bis = SelectedValue( bi );

   symbol = Name();
   tframe = Interval();
   chartID = GetChartID();
   Xname = "X" + chartID + symbol + tframe;
   Yname = "Y" + chartID + symbol + tframe;

   a = Nz(StaticVarGet("counter"));
   if ( GetCursorMouseButtons() & 1 )
   {
      StaticVarSet("counter", a+1);
      x = GetCursorXPosition(  );
      y = GetCursorYPosition(  );
      StaticVarSet( Xname + bis, x );
      StaticVarSet( Yname + bis, y );
   }

   if ( GetCursorMouseButtons() & 4 )
   {
      StaticVarSet("counter", a-1);   
      StaticVarRemove( Xname + bis );
      StaticVarRemove( Yname + bis );
   }

   j = 0;
   dt = DateTime();
   shapePlot = 0;
   shapePos = Null;
   xx = yy = Null;
   FirstVisibleBar = Status( "FirstVisibleBar" );
   Lastvisiblebar = Status( "LastVisibleBar" );
   for ( i = FirstVisibleBar; i <Lastvisiblebar AND i<BarCount; i++ )
   {
      x = StaticVarGet( Xname + i );
      y = StaticVarGet( Yname + i );

      if ( x == dt[i] AND snap==0)
      {
         shapePlot[i] = 1;
         shapePos[i] = IIf(abs(H[i]-y) < abs(L[i]-y), H[i], L[i]);
         xx[j] = i;
         yy[j] = IIf(abs(H[i]-y) < abs(L[i]-y), H[i], L[i]);
         j++;
      }
      else if ( x == dt[i] AND snap==1)
      {
         shapePlot[i] = 1;
         shapePos[i] = y;
         xx[j] = i;
         yy[j] = y;
         j++;
      }
   }



   shape = shapeSmallCircle;
   PlotShapes( shapePlot*shape, colorRed, 0, shapePos, 0 );
   Values=ParamToggle("Segment Values","No|Yes",1);
   vr=ParamToggle("R1","No|Yes",1);
   vr2=ParamToggle("R2","No|Yes",0);
   vr3=ParamToggle("R3","No|Yes",1);

   for ( i = 1; i <= j ; i++ )
   {
      if(i==1 AND Type==0)
         PlotText("X ",xx[i-1]-2,yy[i-1],colorWhite);
      if(i==2 AND Type==0)
         PlotText("A ",xx[i-1]-2,yy[i-1],colorWhite);
      if(i==3 AND Type==0)
         PlotText("B ",xx[i-1]-2,yy[i-1],colorWhite);
      if(i==4 AND Type==0)
         PlotText("C ",xx[i-1]+2,yy[i-1],colorWhite);
      if(i==5 AND Type==0)
         PlotText("D ",xx[i-1]+2,yy[i-1],colorWhite);
      if(i==6 AND Type==0)
         PlotText("E ",xx[i-1]+2,yy[i-1],colorWhite);
      if(i==7 AND Type==0)
         PlotText("F ",xx[i-1]+2,yy[i-1],colorWhite);
      if(i==8 AND Type==0)
         PlotText("G ",xx[i-1]+2,yy[i-1],colorWhite);
      if(Type==1)
         PlotText(""+yy[i-1],xx[i-1]+2,yy[i-1],colorWhite);

      Plot( LineArray( xx[i-1], yy[i-1], xx[i], yy[i] ), "", colorBlue, styleThick );
      XA=yy[i]-yy[i-1];
      AB=yy[i]-yy[i+1];
      AD=yy[i]-yy[i+3];
      BC=yy[i+1]-yy[i+2];
      CD=yy[i+2]-yy[i+3];
      r=CD/XA;
      r2=AB/XA;
      r3=XA/BC;

      if(Trg==0)
      {
         target1=yy[i+3]+AD*0.618;
         Line1=LineArray(xx[i+2],target1,BarCount-1,target1);
         Plot(Line1,"",colorYellow,styleDashed|styleNoRescale);

         target2=yy[i+3]+AD*1.272;
         Line2=LineArray(xx[i+2],target2,BarCount-1,target2);
         Plot(Line2,"",colorYellow,styleDashed|styleNoRescale);

         target3=yy[i+3]+AD*2.618;
         Line3=LineArray(xx[i+2],target3,BarCount-1,target3);
         Plot(Line3,"",colorYellow,styleDashed|styleNoRescale);
      }



      if(vr==1)
      {
         PlotText(""+Prec(abs(r2), 2 )+" ("+(abs(xx[i-1]-XX[i+1]))+")",XX[i-1]+int((xx[i+1]-XX[i-1])/2),yy[i-1]+((yy[i+1]-yy[i-1])/2),colorBlack,colorYellow);
         Plot( LineArray( xx[i-1], yy[i-1], xx[i+1], yy[i+1] ), "", colorBlue, styleDashed );
      }
      if(vr2==1)
      {
         PlotText(""+Prec(abs(r3), 2 )+" ("+(abs(xx[i-1]-XX[i+2]))+")",XX[i-1]+int((xx[i+2]-XX[i-1])/2),yy[i-1]+((yy[i+2]-yy[i-1])/2),colorBlack,colorYellow);
         Plot( LineArray( xx[i-1], yy[i-1], xx[i+2], yy[i+2] ), "", colorBlue, styleDashed );
      }
      if(vr3==1)
      {
         PlotText(""+Prec(abs(r), 2 )+" ("+(abs(xx[i-1]-XX[i+3]))+")",XX[i-1]+int((xx[i+3]-XX[i-1])/2),yy[i-1]+((yy[i+3]-yy[i-1])/2),colorBlack,colorYellow);
         Plot( LineArray( xx[i-1], yy[i-1], xx[i+3], yy[i+3] ), "", colorBlue, styleDashed );
      }
      if(Values==1)
      {
         PlotText(""+Prec(abs(XA), 2 ),XX[i-1]+int((xx[i]-xx[i-1])/2),yy[i-1]+XA/2,colorBlack,colorWhite);
      }

   }

   if ( GetAsyncKeyState(46) )
   {
      for ( i = 0; i < BarCount; i++ )
      {
         StaticVarRemove("counter");
         StaticVarRemove( Xname + i );
         StaticVarRemove( Yname + i );
      }
   }
}
Plot(C, "", colorBlack, styleCandle);
_SECTION_END();

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



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

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

000 писал(а):
Вот немного измененный код. Средняя кнопка мыши удаляет точку выделенную вертикальной линией. Кнопка "Delete" удаляет все.
[code]



Здорово! Спасибо! Smile
Так значительно удобнее)
Посмотреть профиль Отправить личное сообщение
Atlasraketa



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

СообщениеДобавлено: Вс Окт 04, 2015 7:20 pm Ответить с цитатой Вернуться к началу

нашел я код который автоматически паттерны ищет, впечатляет, интересно.
Только реально толку от этого мало Laughing
Посмотреть профиль Отправить личное сообщение
Astrobiolog



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

СообщениеДобавлено: Вс Окт 04, 2015 10:33 pm Ответить с цитатой Вернуться к началу

Atlasraketa писал(а):
нашел я код ..., впечатляет, интересно.
Только реально толку от этого мало Laughing

Красота кода обратно пропорциональна толку от него Laughing Laughing Laughing
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Окт 05, 2015 12:51 am Ответить с цитатой Вернуться к началу

Цитата:
Красота кода обратно пропорциональна толку от него Laughing Laughing Laughing

Exclamation Exclamation Exclamation

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen