迪内什·塔特(Dinesh Tarte) Dinesh是专业软件工程师,也是股票和商品市场的交易员。他从事各种技术分析方面的研究,并且喜欢制定经纪人策略。值得注意的是,他是Marketcalls的学生,并且在Amibroker中为创建自定义指标进行自由职业

Backtestable 打开 Range Breakout ( ORB ) Study for 阿米经纪人

5分钟阅读

经典的Amibroker ORB研究的主要挑战在于,它在日内图表上生成了太多信号,因此此类研究无法进行回测。 迪内什·塔特(Dinesh Tarte)先生通过微调ORB研究克服了这个问题,使代码可回测

Dinesh是专业软件工程师,也是股票和商品市场的交易员。他从事各种技术分析方面的研究,并且喜欢制定策略 经纪人。值得注意的是,他是Marketcalls的学生。

ORB交易规则
1)如果市场价格超过ORBH(ORB-高点),则在11.15am之后买入;如果出现资金短缺,则以150pts的收益退出日志;如果下午3.30左右退出,或者如果止损ORBL(ORB-Low)达到,则买入。

2)Short after 11:15a.m if the market crosses below ORBL ( ORB-Low) and exit shorts at 150pts profit in case of banknifty or exit around 3.30p.m or if the stoploss ORBH ( ORB- 高) hits

可回测的ORB

 
该代码的作用是什么?
示例ORB策略显示在上方的Bank Nifty April期货图表上方。绿色和红色箭头分别表示买入和卖出信号。绿色和红色星号分别表示买入和卖出。

ORB研究计算前两个小时(即从9.15a.m到11.15a.m)之间的高点(ORBH)和低点(ORBL)。当市场在上午11:15之后越过该范围或任一侧时,需要进行信号决策。代码中的以下参数提到了市场开盘,收盘时间和信号突破时间。仅当ORBH和ORBL在上午11:15之后爆发时,才会发生信号爆发。

Market_Start_Time = 091500;
Market_Open_Brakeout = 111500;
Market_end_time = 151500;

该代码已针对Bank Nifty进行了优化,并且还以获利退出(例如,对于Bank Nifty为150点)。但是,您可以根据自己喜欢的股票/指数更改值。以下代码确定目标点

target_point =优化(“target_point”,150,20,200,1);

在两种情况下的止损命中率

1)如果第一个信号有效并且市场违反了止损价,即ORBL是有效买入信号的止损
在活跃的卖出信号下,ORBH是止损

2)该职位将在一天结束时关闭。

该系统完全针对Bank nifty进行了优化,考虑到Bank Nifty的手数为50(2手)。此代码可用于SBI等高贝塔股票,并根据爆发时间(如前1小时或½小时)进行微调,具体取决于您的分析和ORB研究的经验。

阿米经纪人设定

为了使此代码正常工作,必须进行以下设置。

Goto->Tools->首选项->Intraday 和设置时间 第一个内部刻度栏 如下所示

首选项

下载Amibroker的可回测ORB代码可回测ORB

经纪人代码

// Developed by Dinesh R Tarte
_SECTION_BEGIN("可回测的ORB");
SetBarsRequired(100000,0);
GraphXSpace = 15;
SetChartOptions(0,chartShowArrows|chartShowDates);
SetChartBkColor(ParamColor("bkcolor",ColorRGB(0,0, 0)));
GfxSetBkMode(0); 
GfxSetOverlayMode(1);
SetBarFillColor(IIf(C>O,ParamColor("Candle UP Color", colorGreen),IIf(C<=O,ParamColor("Candle Down Color", colorRed),colorLightGrey)));
Plot(C,"nPrice",IIf(C>O,ParamColor("Wick UP Color", colorDarkGreen),IIf(C<=O,ParamColor("Wick Down Color", colorDarkRed),colorLightGrey)),64,0,0,0,0);

_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} 打开 %g,  你好  %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

Market_Start_Time = 091500;
Market_Open_Brakeout = 111500;
Market_end_time = 151500;
 
//需要考虑60分钟(例如100分钟)// Market_Signal_time = Market_end_time-Market_Open_Brakeout;
Market_Signal_time=033000;
Min_in_signal_time = 2190;               

Bars_in_Signal = 210/5;
Total_No_Of_Every_Day_Bar = 72;


target_point =优化("target_point",150,20,200,1);
SetPositionSize(1,spsShares);

//Total_No_Of_Every_Day_Bar=(Market_end_time-Market_Start_Time)/5(Time in Min)
printf("n Bars in the signal is =>" + Bars_in_Signal);
//(for 5 Min Chart divide by 5 AND for 15 Min Charts divide by 15 (Min))
printf("n market singal Time=>"+Market_Signal_time);
SetTradeDelays(1,1,1,1);
ST=MArket_start_time=091500;
BT=brake_out_time=111500; 
Currtime =TimeNum(); 
Currentdate=DateNum(); 
afterbreakout0 = Cross(TimeNum(),BT); 
printf("n Todays date is +" +NumToStr((Currentdate),formatDateTime )); 
Curren_Dae=Day(); 
SetPositionSize(1,spsShares);   
 
//--New Day & Time. End Day & Time . End Day & Time is null till end of day 1 
  //IT will check the condition of the each bar .
NewDay = Day()!= Ref(Day(), -1); 
printf("n Day+starttime  : " + Day() ); 
EndDay =(Day()!= Ref(Day(),1)); 

printf("n newday Value is=>"+NewDay);
printf("n End day value is =>"+EndDay); 




printf("n EndDay  : " + EndDay ); 
starttime = Cross(TimeNum(),ST);
TimeNum()>ST; 
//it will caluclate the highest and lowest array from the start time 
//.its go on calculating entire array till next Day 
 Exit_Time = TimeNum() > Market_end_time; 

Highest_science = 高estSince(starttime,H,1); 
Lowest_science =LowestSince(starttime,L,1); 
 
WriteIf (IsNan(Highest_science) , "higest_scinece value is = 
"+Highest_science+"  ","")+"n"+ 
 
 
//it will calculate the high and low value of the BT time 
 
ORBH = ValueWhen(afterbreakout0,Highest_science,1); 
ORBL = ValueWhen(afterbreakout0,Lowest_science,1); 
 
 
//Plots ORB 高 and Low Line 
Plot(ORBH,"",colorGreen,styleDots); 
Plot(ORBL,"",colorBlue,styleDots); 
Buy=IIf(Cross(C,ORBH) AND (Currtime>BT) ,True,Null); 
Short =IIf((Cross(ORBL,C) AND (Currtime>BT)) ,True,Null); 
Shortflag=-99;
BarsToday = 1 + BarsSince( Day() != Ref(Day(), -1));
Buy_Bar_count=ValueWhen(Buy,BarsToday,1);
Short_bar_Count=ValueWhen(Short,BarsToday,1);

printf("n Buy signal coming at the bar => "+Buy_Bar_count);

printf ("n Today's date is =>"+ Date()); 
printf ("Bar is =>"+BarsToday); 


ReminingBarinDay=ReminingBarinDay_short=60;

Buy=ExRemSpan(Buy,ReminingBarinDay);
Short=ExRemSpan(Short,ReminingBarinDay_short) ;

//this is for when buy is active and short signal is coming
sellflag_short=IIf(Short==1,   True,0);
//Shortflag=Buyflag=IIf(NewDay == 1 ,2,Null);

//this is for when short is active and Buy signal is coming

Coverflag_buy=IIf(Buy==1,True,0);

// to set the flag when buy condition is true

 IIf(Buy==1,Buyflag=1,0);

BuyPrice1=ValueWhen(Buy,C,1);
SellPrice1=BuyPrice1+target_point; 

printf("n before sell signal coming SellPrice:-" +SellPrice1);
Sell_Cond=Cross(H,SellPrice1);
//Sell_Cond=IIf(H >=SellPrice1,True,False);
printf("n DD->Sell  Cond Value is =>"+Sell_Cond);

//short flag is used to close the condition when buy condition is active at the same time short is also active (in short when the buy signal is active short signal is coming so closing the position of buy @short price);

printf("n Buy flag value is =>"+BuyFlag);
printf("n Sell_flag_short value is =>"+Sellflag_short);


//Shortflag=Close the existing position when Short Signal arrived
//End Day:-close the open position at the end of the day 
    Sell=IIf(((BuyFlag==1) AND  ((Sell_Cond==1) OR (EndDay==1))),True ,Null);

//this is for when buy is active and short signal is coming
       Sell=IIf(((BuyFlag==1) AND (Sellflag_short==1 ) ),True ,Sell);






Shortflag=Buyflag=IIf(NewDay == 1  ,2,Null);

Sell=ExRem(Sell,Buy);



printf("n Buy Verible value is =>"+Buy);
printf("n Sell Verible value is =>"+Sell);

SellPrice=ValueWhen(Sell,H,1);
printf("n  sellsell price is :-" +SellPrice); 

ShortPrice=ValueWhen(Short,C,1); 

//Setting the flag when short condition is active

 IIf(Short==1,Shortflag=1,0);
 
printf("Short flag value is =>"+Shortflag);

printf("n short sell flag value is =>" +Sellflag_short);

ShortPrice1=ValueWhen(Short,C,1);

//Cover the Condition Of the Lower point

CoverPrice1=ShortPrice1-target_point;

printf ("Short price is for price1 is =>"+ ShortPrice1);
printf ("CoverPrice is for price1 is =>"+ CoverPrice1);
 
Cover_cond= IIf(L<=CoverPrice1,True,False); 
printf("n Cover Cond Value is =>"+Cover_Cond);

//Cover the position when Short is active AND Current price(L) is Less then Condition price OR Close the position end Of the Day  

Cover=IIf((ShortFlag==1) AND (Cover_Cond==1 OR EndDay==1),True,Null) ;

//this is for covering the position when buy signal is appering when short signal is active .clsoing the existing short position

Cover=IIf((ShortFlag==1) AND (Coverflag_buy==1),True,Cover);

printf("n Cover value is =>"+Cover);

CoverPrice=ValueWhen(Cover,C,1);

printf("n Cover price is ->"+CoverPrice);

Cover=ExRem(Cover,Short);

PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40); 
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-50); 
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45); 
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorRed, 0, H, Offset=40); 
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50); 
PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45); 
PlotShapes(IIf(Sell, shapeStar, shapeNone),colorGreen, 0, H, Offset=-70); 
PlotShapes(IIf(Cover, shapeStar, shapeNone),colorBlue , 0, L, Offset=-70);

注意:已使用Amibroker 5.60版本测试过的代码
Bank_nifty_ORB–回测报告_四月(1)

迪内什·塔特(Dinesh Tarte) Dinesh是专业软件工程师,也是股票和商品市场的交易员。他从事各种技术分析方面的研究,并且喜欢制定经纪人策略。值得注意的是,他是Marketcalls的学生,并且在Amibroker中为创建自定义指标进行自由职业

什么是QuantZilla?

Quantzilla是75个小时以上的代码指导程序,专为希望从设计指标,扫描仪,交易...
拉贾德兰R
读取58秒

建立括号订单执行时要考虑的事项…

我们从大多数algomojo交易员那里得到了最迫切的需求,即制定框架定单策略。本文介绍了...的列表
拉贾德兰R
12分钟阅读

下订单–Amibroker的多经纪人Exectuion代码段

本教程说明了如何从头开始构建按钮交易,以及单击按钮如何发送订单...
拉贾德兰R
7分钟阅读

29 Replies to “Backtestable 打开 Range Breakout ( ORB ) Study for…”

  1. 我正在使用Amibroker 5.30。此代码对我不起作用。您能否提及代码中的任何更改以使其正常工作。
    提前致谢。

  2. 尊敬的先生,
    LeMan系统指示器,是MT4 CODE,使用欧元/美元
    像ORB一样的代码吗
    (ostryforex)

    温馨的问候
    钦美

  3. 亲爱的拉詹,
    我正在使用amibroker 5.5,可以加载该文件,但它是没有任何买卖的普通价格图表&退出箭头,请帮助

  4. 您好先生,这不起作用,我也更改了amibroker设置,但计划价格图表仅显示plz帮助我

  5. 我刚刚在AFL上方上传到我的经纪人网站,并且效果也不错。只有一个问题,即使更改了首选项,我也看不到如图所示的买卖箭头。有什么具体原因吗?请指导。

  6. 你好朋友,
    想知道,为使此代码正常工作需要设置蜡烛时间。
    我仅在Nifty银行进行交易,不胜感激。
    问候,
    阿比纳夫

      1. 亲爱的先生
        使用5分钟的candel我们如何交易策略?

  7. 亲爱的先生
    1.回测报告是多少天?
    2.根据随附的回测报告,风险回报率为70.30。这是否意味着风险为70%&奖励只有30%还是相反?
    Pl。回复
    问候

  8. 你好

    我非常感谢这段代码..先生,请帮助我..每件事都是完美的,我正在为将来使用它。所以请告诉我,与其仅按百分比设置点差利润,不如说是百分比。均值1%,2 %,以便当信号发出买入或卖出信号时,它会按任何用户设置的百分比显示获利目标…

    1. 亲爱的先生
      当您预定第二批产品时,您会在漂亮的将来以50点的价格预定第一批产品吗?

  9. 你好先生,
    我想在NSE进行自动交易。我需要与RKSV证券进行手动交易。{折扣经纪人}。可以为我提供自动交易软件以及其他策略。我可以给你费用。回复我。谢谢。

  10. 你好,先生,
    我正在尝试将此导入到amibroker中,但显示出一些错误是:

    错误32。
    语法错误,意外的IDENTIFIER。前一行的末尾是否缺少分号?

    采用‘Edit Formula’ to correct error”

    你能帮忙吗
    谢谢你

  11. 你好
    只显示烛台,但买/卖信号以及ORBL和ORBH线未显示解决方案,我按u更改了设置,但仍未显示。
    感谢你

  12. 我知道我在研究这个策略时有点晚了,所以如果有人仍在研究这个线程,那就加入吧。
    我想将此与自己的自定义策略集成在一起,因此想了解以下指出的参数:

    Market_Start_Time = 091500;<<< ———————- 打开ing of the Market.
    Market_Open_Brakeout = 111500;<<< ———————-您要确定突破范围的持续时间。
    Market_end_time = 151500;<<< ———————-我认为当日交易的市场即将结束。

    //需要考虑60分钟(例如100分钟)// Market_Signal_time = Market_end_time–Market_Open_Brakeout;
    Market_Signal_time = 033000;<<< ———————- 这个是来做什么的 ?是否需要更改。为什么在这里引用100?我不明白您是如何得出值033000的以及它的含义。
    Min_in_signal_time = 2190;<<< ———————-对此也不知道。

    Bars_in_Signal = 210/5;
    Total_No_Of_Every_Day_Bar = 72;

    我问以上问题,因为如果我更改突围时间,即时通讯无法解释需要更改的内容。而且回测不会产生任何结果,我使用AB 5.6。

  13. 一天结束时要根据下一个酒吧日期进行查找。所以下一个酒吧只会在第二天到来。因此,将发生的情况是,只有在第二天开始时,退出信号才会显示在天数结束栏中。


    EndDay =(Day()!= Ref(Day(),1));

    相反,我们可以基于时间退出。我希望那可以正常工作。

    将上面的代码替换为

    EndDay =(TimeNum()>= ParamTime(“Exit Time”, “11:15:00 PM”));

    这将在晚上11:15退出。

    1. 我为Mcx优化了其巨大的变化市场开盘价10:15突破目标10点锌50派萨Ng 80派萨铜2 rs领先50铝40派萨黄金28点白银100所有交易结束时12时钟太棒了

      编辑谢谢

      1. 阿普,请说明您如何更改时间,买入订单/卖出订单并修复目标..pl说明

  14. 你好
    我正在使用Amibroker 6.00.2。
    我已经按照上述代码中的说明应用了所需的设置。
    我可以很好地看到图形,但是在Backtest报告中交易没有被获取。
    请你能帮忙吗?
    谢谢!

  15. 注意:已使用Amibroker 5.60版本测试过的代码
    Bank_nifty_ORB–回测报告_四月(1)

    请注意:Dinesh Tarte先生/ 拉詹 daran,

    参照以上内容,先生想指出您的买入蜡烛信号正在“High”参数代替“Open”下一支蜡烛。反之亦然。

    您能否更正此代码并上传更正的版本。

    谢谢

发表评论

获取通知,市场更新警报,交易工具,自动化等