Germany | Finland | Saint Petersburg | Drive

График прибылей/убытков для фреймворка

Опубликовано в AmiBroker

В случае использования фреймворка для построения торговых роботов Amibroker-QUIK можно в реальном времени строить график прибылей/убытков по результатам реально совершенных сделок с учетом накладных расходов.

 

Вот примерный код такого эквити:


// Compiled by M4_AFL "06.10.2014 20:51 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. www.bot4sale.ru"


SetBarsRequired(sbrAll,sbrAll);
AmiSharp = CreateStaticObject("AmiSharp.Mutant");

procedure RegionalSettings() { Local WScript; 

if (StaticVarGetText("RegionalSettings~Locale") == "") { WScript = CreateObject("WScript.Shell"); StaticVarSetText("RegionalSettings~Locale",WScript.RegRead("HKEY_CURRENT_USER\\Control Panel\\International\\Locale")); StaticVarSetText("RegionalSettings~sList",WScript.RegRead("HKEY_CURRENT_USER\\Control Panel\\International\\sList")); StaticVarSetText("RegionalSettings~sDecimal",WScript.RegRead("HKEY_CURRENT_USER\\Control Panel\\International\\sDecimal")); StaticVarSetText("RegionalSettings~sThousand",WScript.RegRead("HKEY_CURRENT_USER\\Control Panel\\International\\sThousand")); } }


function NormalizeNumber(NumString) { RegionalSettings(); Return StrReplace(StrReplace(NumString,StaticVarGetText("RegionalSettings~sThousand"),""),StaticVarGetText("RegionalSettings~sDecimal"),"."); }


function Round_To_Step(p1,p2) { if (!Nz(p2)) p2 = 1; return round(p1 / p2) * p2; }

function Profit(TableName) { Local Indx,Result,Acc,Height;
Result = Null; Acc = 0; Height = StrToNum(AmiSharp.getheight(TableName)); for (i = 1 ; i <= Height ; i++) { Acc += StrToNum(NormalizeNumber(AmiSharp.getcellname(TableName,"Сумма",i))) - StrToNum(NormalizeNumber(AmiSharp.getcellname(TableName,"Комиссия ТС",i)));
if (AmiSharp.getcellname(TableName,"Статус",i) == "Завершена") if (!IsNull(Indx = Lookup(Barindex(),StrToDateTime(AmiSharp.getcellname(TableName,"Время",i)),-1))) Result[Indx] = Round_To_Step(Nz(Result[Indx]) + Acc,0.01); } Return ValueWhen(!IsNull(Result),Result); }


TableName = paramstr("Имя робота","");
ColorProfit = ParamColor("Цвет прибыли",colorPaleGreen);
ColorLoss = ParamColor("Цвет убытков",colorPink);
Style = ParamStyle("Стиль",styleArea | styleNoTitle,styleLine | styleNoLine | styleDots | styleDashed | styleSwingDots | styleStairCase | styleNoDraw | styleNoRescale | styleNoTitle | styleNoLabel | styleThick | styleArea | styleHistogram);
if (TableName == "")
Title = "Не выбрано имя робота";
else
if (AmiSharp.istableexists(TableName) == "0")
Title = "Робот " + TableName + " не запущен";
else
{ Result = Profit(TableName);
_N(Title = StrFormat("{{DATE}} {{VALUES}} %.2f", SelectedValue(Result)));
Plot(Result,"Прибыль",iif(Result > 0,ColorProfit,ColorLoss),Style);
}

_Section_Begin("Панель"); { Local BKSwitch,OUTcolor,INUPcolor,INDNcolor;
BKSwitch = ParamToggle("Цветной график","Нет|Да",0); OUTcolor = ParamColor("Цвет шкалы",colorLightOrange);

INUPcolor = ParamColor("Верхний градиент",colorSkyBlue);
INDNcolor = ParamColor("Нижний градиент",colorTurquoise);

if (BKSwitch) { SetChartBkColor(OUTcolor); SetChartBkGradientFill(INUPcolor,INDNcolor,INUPcolor); } } _Section_End();

 

Запускается в отдельной панели чарта с роботом. В параметрах указывается имя робота, результаты работы которого следует отображать на графике.

Добавить комментарий


Майнинг в браузере