Tính toán nhanh mẫu hình VCP với công cụ vẽ - Code Amibroker

 

    Mọi người nhìn hình trên cũng đã hiểu rồi. Anh chị copy đoạn code mình để phía dưới và dán vào chart mà anh chị đang sử dụng là xong.

Cách sử dụng:
  •  Anh chị muốn vẽ T1 thì nhấn phím số 1 sau đó vẽ, 
  • Muốn vẽ T2 thì nhấn phím số 2 rồi vẽ.
  • ...
  • Sau khi vẽ xong anh chị muốn xoá thì nhấn phím số 0 rồi click vào màn hình là xong
Chúc anh chị nhà đầu tư thành công !

_SECTION_BEGIN( "Measure volatility contractions" ); // Using GetAsyncKeyState()
nMM = 6; //Max no. of MM lines

bi = BarIndex();
dt = DateTime();
t=0;
pct="";
duration = "";
titel_new = "";
MouseBtn = GetCursorMouseButtons();
LeftJustClkd = MouseBtn & 8;
LeftClkDownRlsd = MouseBtn & 9;
MiddleClkd = MouseBtn & 4;
chartId = Name() + Interval();

x = GetCursorXPosition( 0 );
y = GetCursorYPosition( 0 );

if( GetAsyncKeyState( 48 ) < 0 OR GetAsyncKeyState( 96 ) < 0 AND MiddleClkd )
{
	StaticVarRemove( "x1*" );
	StaticVarRemove( "y1*" );
	StaticVarRemove( "x2*" );
	StaticVarRemove( "y2*" );
	StaticVarRemove( "pct_t*" );
}

for( i = 49; i <= 48 + nMM; i++ )
{
	riMM = i - 48;	
	DigitPressed = GetAsyncKeyState( i ) < 0 || GetAsyncKeyState( i + 48 ) < 0;
	if( DigitPressed )
	{
		// This elegant technique shared by @Milosz
		if( LeftJustClkd )
		{
			StaticVarSet( "x1" + chartId + riMM, x, 0 );
			StaticVarSet( "y1" + chartId + riMM, y, 0 );
			//StaticVarSet( "y1_start" + chartId + riMM, bi, 0 );
			
		}	
		if( LeftClkDownRlsd )
		{
			StaticVarSet( "x2" + chartId + riMM, x, 0 );
			StaticVarSet( "y2" + chartId + riMM, y, 0 );		
		}
		if( MiddleClkd )
		{
			StaticVarRemove( "x1" + chartId + riMM );
			StaticVarRemove( "y1" + chartId + riMM );
			StaticVarRemove( "x2" + chartId + riMM );
			StaticVarRemove( "y2" + chartId + riMM );
			StaticVarRemove( "pct_t" + chartId + riMM );
		}
		RequestMouseMoveRefresh();
	}
}

GfxSetBkMode( 1);
GfxSetCoordsMode( 1 ); // mode = 1 - bar / price mode where X is expressed in bar index and Y is expressed in price.

for( i = 1; i <= nMM; i++ )
{
	x1 = Lookup( bi, StaticVarGet( "x1" + chartId + i ) );
	y1 = StaticVarGet( "y1" + chartId + i );
	x2 = Lookup( bi, StaticVarGet( "x2" + chartId + i ) );
	y2 = StaticVarGet( "y2" + chartId + i );
	if( x1 != 0 AND x2 != 0 )
	{
		t++;
		GfxSelectPen( colorGrey50, 2, 1 );
		GfxMoveTo( x1, y1 );		GfxLineTo( x2, y2 ); 	// Diagonal line
		
		GfxSelectFont( "Courier New", 9.5, 700 );
		pct0 = NumToStr( abs(y2/y1-1)*100, 1.0, False );
		pct1 = NumToStr( abs(y2/y1-1)*100, 1.1, False );
		GfxTextOut( "   T"+NumToStr( i, 1.0 )+": " +pct1 +"%", x1 , y1 );
		StaticVarSetText("pct_t" + chartId + i, pct0, false);
	}
}


//lasttrendline = Lookup( dt, StaticVarGet( "x2" + chartId + t ) );

//iterate through total number of contractions (t)
for( i = 1; i <= t; i++ )
{
	//append the latest contraction % into a string
	pct += StaticVarGetText("pct_t" + chartId + i) + "/";
}

//set date
startT1 = Lookup( dt, StaticVarGet( "x1" + chartId + 1 ) );

if ( t != 0 )
{
	//calculate from start to most recent date. result is rounded in weeks
	duration = Round(DateTimeDiff(LastValue(dt), startT1)/3600/24/7);
	titel_new = "                                           MO HINH VCP = " + duration  + "W  " + StrTrim(pct, "/") + "  "+  t + "T";

}
Title = Title+ titel_new;

_SECTION_END();

Post a Comment

Previous Post Next Post