Автор |
Сообщение |
Graf345
Зарегистрирован: 13.12.2008
Сообщения: 20
|
есть код расчета уровней мюррея:
Код: |
/*
// $Archive: /AFL.root/AFL/YofaTrader/Custom/Murrey Math Price
Lines.afl.cs $
// $Date: 08.03.29 22:57 $
// $Modtime: 08.03.29 22:52 $
// $Revision: 15 $
// $Workfile: Murrey Math Price Lines.afl.cs $
*/
ParamShowLevel=ParamList("Show harmonic levels", "1/8|1/4|1/2", 1 );
ParamShowLabel=ParamStyle("Show harmonic labels", styleNoLabel, styleNoLabel);
if(Status("action") ==1) //indicator
{
LastVisibleIndex = LastValue(Status("lastvisiblebarindex"));
if (LastVisibleIndex > BarCount -1) //to avoid errors is case of cursor isbehind the last bar
LastVisibleIndex = BarCount-1;
TotalVisibleBars = LastVisibleIndex -
LastValue(Status("firstvisiblebarindex")) + 1;
}
else
{
LastVisibleIndex = BarCount -1;
TotalVisibleBars = BarCount;
}
HHScreen = HHV(High, TotalVisibleBars);
LLScreen = LLV(Low, TotalVisibleBars);
PRScreen = HHScreen[LastVisibleIndex] - LLScreen[LastVisibleIndex]; //Pricerange
PriceRangeVisible = PRScreen * 1.1;
MiddleVisible = (HHScreen[LastVisibleIndex] + LLScreen[LastVisibleIndex]) /2;
HighestVisible= MiddleVisible + PriceRangeVisible / 2;
LowestVisible = MiddleVisible - PriceRangeVisible / 2;
SquareBase = 0.1953125;
if (HighestVisible > 0.390625)
{ SquareBase = 1.5625; }
if (HighestVisible > 1.5625)
{ SquareBase = 3.125; }
if (HighestVisible > 3.125)
{ SquareBase = 6.25; }
if (HighestVisible > 6.25)
{ SquareBase = 12.5; }
if (HighestVisible > 25)
{ SquareBase = 100; }
if (HighestVisible > 250)
{ SquareBase = 1000; }
if (HighestVisible > 2500)
{ SquareBase = 10000; }
if (HighestVisible > 25000)
{ SquareBase = 100000; }
ShowLevel = 1;
PriceStep = SquareBase / 8;
while ( PriceRangeVisible / 4 <= PriceStep AND ShowLevel < 4)
{
PriceStep = PriceStep / 8;
ShowLevel++;
}
//Lowest,highest harmonic value to show on the panel
LowerValue = floor(LowestVisible / PriceStep) * PriceStep;
HigherValue = ceil(HighestVisible / PriceStep) * PriceStep;
Octave1PriceStep = SquareBase / 8;
Octave2PriceStep = SquareBase / 64 ;
Octave3PriceStep = SquareBase / 512;
Harmonic = LowerValue;
//iterate from low to high values
while( Harmonic <= HigherValue )
{
style = styleDashed; // 1/8, 3/8, 5/8, 7/8 lines of any level
color = colorGreen; //1/8, 7/8
if ((Harmonic / PriceStep) % 8 == 1 OR (Harmonic / PriceStep) % 8 == 7)
color = colorBlack; // 3/8, 5/8
if (ParamShowLevel != "1/8")
style = styleNoLine;
if ((Harmonic / PriceStep) % 2 == 0) // 1/4, 3/4 lines of any level
{
style = styleDashed;
color = colorRed;
if (ParamShowLevel == "1/2")
style = styleNoLine;
}
if ((Harmonic / PriceStep) % 4 == 0) // 1/2 line of any level
{
style = styleThick;
color = colorRed;
}
if ((Harmonic / PriceStep) % 8 == 0) // 1/1 line of Baby level
{
color = colorBlue;
style = styleLine;
if ((Harmonic / Octave3PriceStep) % 64 == 0) // 1/1 line of Minor level
{
style = styleThick; // 1/1 /Level Minor
/*****************************************************/
/****************************************************/
}
}
if (style != styleNoLine) //if there is a line to plot... (avoid printingunused labels)
{
style = style + ParamShowLabel;
Plot( Harmonic, "", color, style);
PlotText(""+Harmonic, BarCount - 10, Harmonic + 20, color);
}
Harmonic = Harmonic + PriceStep;
}
|
он их только рисует
вот как прикрутить к этой теме например вход в покупку при пробитии уровня 1/1 снизу вверх (место где даются параметры отрсовки этого уровня выделил двумя строками с звездочками
помогите пожалуйста |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем? Это все равно протестировать автоматически нельзя. Потому, что расположение этих линий и даже их число зависит от того, сколько баров видно на экране в данный момент. Посмотри эти линии, измени масштаб и увидишь, что их расположение изменилось.
В том виде, как ты дал этот индикатор пригоден только для ручного тестирования. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Graf345
Зарегистрирован: 13.12.2008
Сообщения: 20
|
на РТС фуче не меняется годами... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Только что посмотрел на 15 мин. Меняется очень сильно. от 3 до 13 линий. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
Только что посмотрел на 15 мин. Меняется очень сильно. от 3 до 13 линий. |
А если такой код, не помню откуда взял, но, кажется, не перерисовывается. Может человек на правильном пути?
Код: |
//http://www.tradewithme.me/uploads/7/9/9/5/7995199/murray_maths_with_patterns_modified_intraday.afl
//Credit for the Octave logic goes to Jacek below
//All other features developed by Abnash Singh 6-11-2011
// abnash1978@yahoo.co.uk
// 13/11/2011 Added S/R levels in the title line along with High and low
//------------------------------------------------------------------------------
//
// Formula Name: MURREY MATH LINES Formula
// Author/Uploader: Jacek
// E-mail:
// Date/Time Added: 2006-02-18 14:21:45
// Origin:
// Keywords: MURREY MATH
// Level: medium
// Flags: indicator
// Formula URL: http://www.amibroker.com/library/formula.php?id=588
// Details URL: http://www.amibroker.com/library/detail.php?id=588
//
//------------------------------------------------------------------------------
//
// Murrey Math Horizontal Lines.
//
// Use Parameter function to adjust Time Frame.
//
// Enjoy !
//
//------------------------------------------------------------------------------
/* MURREY MATH HORIZONTAL LINES Formula for Amibroker
based on Excel spreadsheet by Jacek */
//Plot(C,"CLose",colorWhite,styleCandle);
//GraphXSpace=1; MaxGraph=12;
function splround(x)
{
y=int(x)+round(x%int(x)*100)/100;
return y;
}
up=Study("UP",GetChartID());
dm=Study("DN",GetChartID());
Color=IIf(C>O,colorGreen,colorRed);
//Graph0=Close; Graph0Color=1; Graph0Style=64;
//Plot(C,"close",color,styleBar);
// Colored bars starts
_SECTION_BEGIN("Carl_ASC");
function PercentR( periods )
{
return -100 * ( HHV( H, periods ) - C )/( HHV( H, periods ) - LLV( L, periods ) );
}
periods= Param("periodes",14,1,100,1);
PR=PercentR( periods );
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", IIf(pr>-50,colorBlue,colorRed), styleBar| styleThick|styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
//if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
//{
//ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
//}
_SECTION_END();
// Colored bars ends
Period=Param("MM_Period", 32, 4, 256, 1) ;
TYpe=ParamList("Rolling/Intraday","Rolling|Intraday") ;
PER = Period;
dn=DateNum();
tn=TimeNum();
Lox=Hix=0;
Lox = LLV(Min(H,L),PER ) ;
Hix = HHV(Max(H,L),PER ) ;
avp=(O+C)/2;
Line0=Line1=Line2=Line3=Line4=Line5=Line6=Line7=Line8=Lineplus2=Lineminus2=0;
Lo=L[0];Hi=H[0];
for (i=0;i<BarCount;i++)
{
//if (i>0 AND i<BarCount)PlotText(WriteVal(dm[i],1.0),i,L[i]-15,colorWhite);
if (Type=="Intraday")
{
if(I>1)
{
if(dn[i]!=dn[i-1])
{
Lo=L[i];
Hi=H[i];
}
}
if (L[i]<Lo)Lo=L[i];
if (H[i]>Hi)Hi=H[i];
}
else if (type=="Rolling")
{
Hi=Hix[i];
Lo=Lox[i];
}
if (up[i]>hi)Hi=up[i];
if (dm[i]<lo)Lo=dm[i];
//PlotText(WriteVal(Lo,1.0),colorWhite,i,H[i]+15);
Fractal = IIf(Hi<=250,100, IIf(Hi<=2500,1000, IIf(Hi<=25000,10000, IIf(Hi<=250000,100000, 0 )))) ;
int_Log = int( log(Fractal/(Hi-Lo))/log(2) ) ;
Oct = Fractal * ( exp(ln(1/2)* int_Log ) ) ;
Min_1 = int( Lo / Oct ) * Oct ;
Max_1 = IIf( (Min_1 + Oct) > Hi, Min_1 + Oct, Min_1 + 2*Oct ) ;
Min_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) ,
(Min_1 + 1/4*(Max_1-Min_1)) , Min_1 ) ;
Max_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) ,
(Max_1 - 1/4*(Max_1-Min_1)) , Max_1 ) ;
/******************************/
Diff = Max_2 - Min_2 ;
H1 = IIf( (Min_2 + 3/16*Diff) <= Lo AND Hi <= (9/16*Diff + Min_2) ,
Min_2 + 1/2*Diff, 0) ;
H2 = IIf( (Min_2 - 1/8*Diff) <= Lo AND Hi <= (5/8*Diff + Min_2) AND H1==0,
Min_2 + 1/2*Diff, 0) ;
H3 = IIf( (Min_2 + 7/16*Diff) <= Lo AND Hi <= (Min_2 + 13/16*Diff), Min_2 + 3/4*Diff, 0 ) ;
H4 = IIf( (Min_2 + 3/8*Diff) <= Lo AND Hi <= (Min_2 + 9/8*Diff) AND H3==0,
Max_2, 0 ) ;
H5 = IIf( (Min_2 + 1/8*Diff)<=Lo AND Hi <= (Min_2 + 7/8*Diff) AND H1==0 AND H2==0 AND H3==0 AND H4==0,
Min_2 + 3/4*Diff , 0 ) ;
H6 = IIf( ( H1 + H2 + H3 + H4 + H5 ) == 0, Max_2, 0 ) ;
/**************************/
L1 = IIf(H1>0, Min_2 + 1/4*Diff, 0) ;
L2 = IIf(H2>0, Min_2, 0) ;
L3 = IIf(H3>0, Min_2 + 1/2*Diff, 0) ;
L4 = IIf(H4>0, Min_2 + 1/2*Diff, 0) ;
L5 = IIf(H5>0, Min_2 + 1/4*Diff, 0) ;
L6 = IIf(H6>0, Min_2, 0 ) ;
M_8 = ( H1 + H2 + H3 + H4 + H5 + H6 ) ;
M_0 = ( L1 + L2 + L3 + L4 + L5 + L6 ) ;
/**************************************/
Line0[i] = M_0 ;
Line1[i] = M_0 + (1*(0.125*(M_8-M_0)));
Line2[i] = M_0 + (2*(0.125*(M_8-M_0)));
Line3[i] = M_0 + (3*(0.125*(M_8-M_0)));
Line4[i] = M_0 + (4*(0.125*(M_8-M_0)));
Line5[i] = M_0 + (5*(0.125*(M_8-M_0)));
Line6[i] = M_0 + (6*(0.125*(M_8-M_0)));
Line7[i] = M_0 + (7*(0.125*(M_8-M_0)));
Line8[i] = M_8 ;
Lineplus2[i] = M_8 + (2*(0.125*(M_8-M_0)));
Lineminus2[i] = M_0 - (2*(0.125*(M_8-M_0)));
}
Plot(Line0,"Line0",6,styleLine);//0/8
Plot(Line1,"Line1",7,styleLine);//1/8
Plot(Line2,"Line2",4,styleLine);//2/8
Plot(Line3,"Line3",5,styleLine|styleDashed);//3/8
Plot(Line4,"Line4",6,styleLine);//4/8
Plot(Line5,"Line5",5,styleLine|styleDashed);//5/8
Plot(Line6,"Line6",4,styleLine);//6/8
Plot(Line7,"Line7",7,styleLine);//7/8
Plot(Line8,"Line8",6,styleLine);//8/8
Plot(Lineplus2,"Lineplus2",4,styleLine);//+2/8
Plot(Lineminus2,"Lineminus2",4,styleLine);//-2/8
/**************************************************************/
Title = Date()+" Murray Maths "+ Interval(format=2)+" "+Name()+" O "+WriteVal(O,1.2)+" H "+WriteVal(H,1.2)+" L "+WriteVal(L,1.2)+" C "+
WriteVal(C,1.2)+" "+EncodeColor(colorYellow)+" Dayhigh " +WriteVal(Hi,1.2)+" Daylow "+WriteVal(Lo,1.2)
+"\n"+EncodeColor(colorGreen)+"Upper Breakout "+EncodeColor(colorRed)+WriteVal(Lineplus2,1.2)+EncodeColor(colorGreen)
+" Resistance 8/8 "+EncodeColor(colorBlue)+WriteVal(Line8,1.2)+EncodeColor(colorGreen)+" Reversal 7/8 "+EncodeColor(colorYellow)
+WriteVal(Line7,1.2)
+"\n"+EncodeColor(colorYellow)+"Middle S/R 4/8 "+EncodeColor(colorBlue)+WriteVal(Line4,1.2)
+"\n"+EncodeColor(colorRed)+"Lower Breakout "+EncodeColor(colorRed)+WriteVal(Lineminus2,1.2)+EncodeColor(colorRed)+" Support 0/8 "
+EncodeColor(colorBlue)+WriteVal(Line0,1.2)+EncodeColor(colorRed)+" Reversal 1/8 "+EncodeColor(colorYellow)+WriteVal(Line1,1.2);
/*
Title = Name()
+ "=" + WriteIf( round(C)== C, NumToStr(C,1) , WriteVal(C) ) + " " + "\\c17"
+ WriteIf( Interval()==86400, "Daily ", WriteIf(Interval()==3600,"Hourly ",
WriteIf(Interval()==900,"15 Min ", WriteIf(Interval()==300,"5 Min ",
WriteIf(Interval()==60,"1 Min ", "" ) ) ) ) )
+ Date() + "\\c12" + WriteIf(Volume>0," Turnover=","")
+ WriteIf(Volume>0, WriteVal(Volume*Close/1000), "" ) ;
*/
Filter = 1 ;
AddColumn(Lineminus2,"Limit1",1.2);
AddColumn(IIf(C>Lineminus2 AND C<Line0,C,Null),"Close",1.2, Null);
AddColumn(Line0,"Supp1",1.2);
AddColumn(IIf(C>Line0 AND C<Line1,C,Null),"Close",1.2, Null);
AddColumn(Line1,"Reversal1",1.2);
AddColumn(IIf(C>Line1 AND C<Line2,C,Null),"Close",1.2, Null);
AddColumn(Line2,"Trend",1.2);
AddColumn(IIf(C>Line2 AND C<Line3,C,Null),"Close",1.2, Null);
AddColumn(Line3,"Short",1.2);
AddColumn(IIf(C>Line3 AND C<Line4,C,Null),"Close",1.2, Null);
AddColumn(Line4,"Supp/Res",1.2);
AddColumn(IIf(C>Line4 AND C<Line5,C,Null),"Close",1.2, Null);
AddColumn(Line5,"Long",1.2);
AddColumn(IIf(C>Line5 AND C<Line6,C,Null),"Close",1.2, Null);
AddColumn(Line6,"Trend",1.2);
AddColumn(IIf(C>Line6 AND C<Line7,C,Null),"Close",1.2, Null);
AddColumn(Line7,"Reversal2",1.2);
AddColumn(IIf(C>Line7 AND C<Line8,C,Null),"Close",1.2, Null);
AddColumn(Line8,"Res2",1.2);
AddColumn(IIf(C>Line8 AND C<Lineplus2,C,Null),"Close",1.2, Null);
AddColumn(Lineplus2,"Limit2",1.2);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А в чем проблема? Даны конкретные линии
Line0, Line1, Line2...
ну и пиши
Buy = Cross(C, Line0) OR Cross(C, Line1) OR ...; |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|