Thư viện AFL
Thư viện AFL
Vẽ biểu đồ dây xích động trong ngày bằng Amibroker

Vẽ biểu đồ dây xích động trong ngày bằng Amibroker

Gần đây, số lượng người bán straddle trong ngày đang gia tăng và vì vậy các câu hỏi dành cho chúng tôi về cách lập biểu đồ straddle trong ngày lan truyền nhanh chóng trong ngày. Và Xây dựng biểu đồ Lịch sử để trực quan hóa các quyền chọn hàng tuần / chênh lệch quyền chọn hàng tháng. Trong blog này, bạn sẽ tìm hiểu cách tạo Biểu đồ dây kéo trong ngày động bằng Amibroker

Bán khống là một chiến lược giao dịch quyền chọn trong đó nhà đầu tư bán cả quyền chọn mua và quyền chọn bán với cùng giá thực hiện ATM và ngày hết hạn.

Biểu đồ chênh lệch giá treo trong ngày động

Yêu cầu

  1. Nguồn cấp dữ liệu thời gian thực với các Công cụ giao dịch quyền chọn được tải trong Danh sách theo dõi. Ngoài ra, hãy đảm bảo rằng các ký hiệu được tải vào trình quản lý dữ liệu

Trong trường hợp của tôi, tôi đã sử dụng Globaldatafeeds cho Biểu đồ tùy chọn thời gian thực để xây dựng các khung thời gian động trong ngày

Cài đặt tùy chọn

Goto Amibroker -> Công cụ -> Tùy chọn -> Trong ngày

và bỏ chọn

Căn chỉnh các thanh phút theo giờ thị trường thông thường

Mã AFL của Amibroker để vẽ sơ đồ cơ bản với các mức tấn công ATM động

Mã AFL của Amibroker để vẽ biểu đồ động trong ngày

Liên quan

Mã nguồn (.afl)
//Coded by Rajandran R - Author - Marketcalls / Creator - OpenAlgo
//website - www.marketcals.in / www.openalgo.in
//Version 1.0.0.0
//Coded Date : 07-Mar-2023

//Symbol Format - NIFTY29JUL2115700CE.NFO     Spot+Expiry+StrikePrice+OptionType(CE/PE).NFO

_SECTION_BEGIN("Dynamic Intraday Short Straddle Charts");

EnableTextOutput(False);

spot = Paramstr("Spot Symbol","NIFTY");
expiry = ParamStr("Expiry Date","16MAR23");
Symbol = Paramstr("Underlying Symbol","NIFTY-I.NFO");
dynamic = ParamList("Dynamic Straddle","EVERYDAY|EVERYHOUR",0);
levels = ParamList("Show Levels","SHOW|HIDE",0);
iInterval = Param("Strike Interval",50,1,10000,1);
offsetCE = Param("CE Offset",0,-40,40,1);
offsetPE = Param("PE Offset",0,-40,40,1);
fontsize = Param("Font Size",10,10,40,1);
newday = Day()!=Ref(Day(),-1);
newhour = Hour()!=Ref(Hour(),-1);


if(dynamic == "EVERYDAY")
{
Plot( newday, "", colorYellow, styleHistogram | styleOwnScale, 0, 1 );
}
if(dynamic == "EVERYHOUR")
{
Plot( newhour, "", colorYellow, styleHistogram | styleOwnScale, 0, 1 );
}

SetForeign(Symbol);
if(dynamic == "EVERYDAY")
{
Underlying = TimeFrameGetPrice("O",inDaily,0); //Fetch the Todays Open from the daily charts
}
if(dynamic == "EVERYHOUR")
{
Underlying = TimeFrameGetPrice("O",inHourly,0); //Fetch the Todays Open from the hourly charts
}
RestorePriceArrays();

//Maintain Array to Store ATM Strikes for each and every bar
strike = IIf(Underlying % iInterval > iInterval/2, Underlying - (Underlying%iInterval) + iInterval,
			Underlying - (Underlying%iInterval));
strikeCE = strike + (offsetCE * iInterval);
strikePE = strike - (offsetPE * iInterval);

//Plot(strike,"ATM Strike",colorYellow,styleThick);

//Derives the Symbol Format from the Strike Price
SymbolCE = spot+expiry+strikeCE+"CE.NFO";
SymbolPE = spot+expiry+strikePE+"PE.NFO";

printf("\nDatafeed CE Symbol :"+SymbolCE);
printf("\nDatafeed PE Symbol :"+SymbolPE);

bi = BarIndex();
fvb = FirstVisibleValue(bi);
lvb = LastVisibleValue(bi);

bars = lvb-fvb;
printf("\nBars :"+bars);

for(i=BarCount-bars;i<BarCount;i++)
{
VarSet(spot+expiry+strikeCE[i]+"CE",Foreign(spot+expiry+strikeCE[i]+"CE.NFO","C"));
VarSet(spot+expiry+strikePE[i]+"PE",Foreign(spot+expiry+strikePE[i]+"PE.NFO","C"));
}

leg1close = Null;
leg2close = Null;

for(i=0;i<BarCount;i++)
{
if(i<BarCount-bars)
{
leg1close[i] = Null;
leg2close[i] = Null;
}
else
{

CEClose = VarGet(spot+expiry+strikeCE[i]+"CE");
PEClose = VarGet(spot+expiry+strikePE[i]+"PE");

leg1close[i] = CEClose[i];
leg2close[i] = PEClose[i];
}

combinedpremium[i] = leg1close[i] + leg2close[i];

}


printf("\nCE Premium :"+leg1close);
printf("\nPE Premium :"+leg2close);

Plot(combinedpremium,"Combined Premium",colorred,styleThick);

SetForeign(Symbol);
Usymbol = Close;
RestorePriceArrays();

if(dynamic == "EVERYDAY" AND Levels =="SHOW")
{

for( i = 0; i < BarCount; i++ ) 
 {  
if( newday[i] ) PlotTextSetFont("Underlying : "+Usymbol[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-30);
if( newday[i] ) PlotTextSetFont("CE :"+strikeCE[i]+"\nPE :"+strikeCE[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-50);
if( newday[i] ) PlotTextSetFont("CE Prem :"+leg1close[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-90);
if( newday[i] ) PlotTextSetFont("PE Prem :"+leg2close[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-110);


}

}
if(dynamic == "EVERYHOUR" AND Levels =="SHOW")
{
for( i = 0; i < BarCount; i++ ) 
 {  
if( newhour[i] ) PlotTextSetFont("Underlying : "+Usymbol[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-30);
if( newhour[i] ) PlotTextSetFont("CE : "+strikeCE[i]+"\nPE : "+strikeCE[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-50);
if( newhour[i] ) PlotTextSetFont("CE Prem :"+leg1close[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-90);
if( newhour[i] ) PlotTextSetFont("PE Prem :"+leg2close[i],"Arial", fontsize,i,combinedpremium[i],colorWhite,colorGreen,-110);

}}


SetChartOptions(0, chartShowArrows | chartShowDates); //x-Axis will be plottted
//plot the candles
//Plot(Close,"Close",colorDefault,styleCandle | styleNoTitle);
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

Hướng dẫn: Copy đoạn mã trên, mở AmiBroker Formula Editor, dán vào và lưu lại với tên tương ứng.