有现成的编程,请修改一个bug,或重新编写
私密文章仅本人及管理员可以查看
私密文章仅本人及管理员可以查看
//--------------------------------------------- Params Numeric lookBackDays(26); // 布林通道均线周期 Numeric bolBandTrig(1); // 布林通道参数,用于计算上下轨的倍数 Numeric Lots(0); // 交易手数 Numeric Longswitch(1); //多头开关 0关闭 1开启 Numeric Shortswitch(1); //空头开关 0关闭 1开启 Vars Series<Numeric> MidLine(0); // 布林通道中轨 Series<Numeric> upBand(0); // 布林通道上轨 Series<Numeric> dnBand(0); // 布林通道下轨 Events OnInit() { } OnBar(ArrayRef<Integer> indexs) { Range[0:DataCount-1] { // 计算布林通道指标 MidLine = Average(Close, lookBackDays); Numeric Band = StandardDev(Close, lookBackDays, 2); upBand = MidLine + bolBandTrig * Band; dnBand = MidLine - bolBandTrig * Band; // 绘制布林通道 PlotNumeric("upBand", upBand); PlotNumeric("dnBand", dnBand); PlotNumeric("MidLine", MidLine); // 多头开仓逻辑 If(MarketPosition == 0 And h >= upBand[1] and Longswitch ==1) Buy(Lots, max(open,upBand[1])); // 空头开仓逻辑 If(MarketPosition == 0 And l <= dnBand[1] and Shortswitch ==1) SellShort(Lots, min(open,upBand[1])); // 多头平仓逻辑 If(MarketPosition == 1 And low <= MidLine[1]) Sell(0, min(open,MidLine[1])); // 空头平仓逻辑 If(MarketPosition == -1 And high >= MidLine[1]) BuyToCover(0, max(open,MidLine[1])); } } //------------------------------------------------------------------------ // 编译版本 2025-03-13 09:54:41 Thursday // 版权所有 // 更改声明 TradeBlazer Software 保留对 TradeBlazer 平台 // 每一版本的 TradeBlazer 公式修改和重写的权利 //------------------------------------------------------------------------
回复:这是最新的最高最低价的止损然后你股指锁仓的问题,股指是默认开平互转的(不平今),他是自动锁仓在系统设置里可以取消
回复:你们做股票方面的编程吗?我想把这boll策略,也用到股票上。还有macd的一个策略,也用在股票上。另外,你们有现成的海龟交易法则的编程吗?我直接买一个
回复:股票门槛较高需要300W资金开户策略逻辑上股票和期货区别不大海龟策略软件内有内置
回复:是说必须有股票账户绑定了,才给编程吗?我先编程,回测/模拟,之后再绑定实盘账户。
回复:开户和代写是独立的,客户可以自选哪边先做鉴于股票户很难就是了(门槛较高)
回复:好,那我想编一个股票策略,也是与期货类似,也是BOLL指标为主的
回复:也是可以,新内容可以新发一个帖子
回复:您好!我发现这个代码是不是些问题?我回测了10只股票,组合的净值曲线如下,实在是太高了。不可能这么高。是不是将股票加了杠杆?比如新易盛,只交易一笔,共200%+的收益率,怎么可能是14倍呢?这有明显的错误啊。
//--------------------------------------------- Params Numeric lookBackDays(26); // 布林通道均线周期 Numeric bolBandTrig(1); // 布林通道参数,用于计算上下轨的倍数 Numeric Lots(0); // 交易手数 Numeric Longswitch(1); //多头开关 0关闭 1开启 Numeric Shortswitch(1); //空头开关 0关闭 1开启 Vars Series<Numeric> MidLine(0); // 布林通道中轨 Series<Numeric> upBand(0); // 布林通道上轨 Series<Numeric> dnBand(0); // 布林通道下轨 Events OnInit() { } OnBar(ArrayRef<Integer> indexs) { Range[0:DataCount-1] { // 计算布林通道指标 MidLine = Average(Close, lookBackDays); Numeric Band = StandardDev(Close, lookBackDays, 2); upBand = MidLine + bolBandTrig * Band; dnBand = MidLine - bolBandTrig * Band; // 绘制布林通道 PlotNumeric("upBand", upBand); PlotNumeric("dnBand", dnBand); PlotNumeric("MidLine", MidLine); // 多头开仓逻辑 If(MarketPosition == 0 And h >= upBand[1] and Longswitch ==1) Buy(Lots, max(open,upBand[1])); // 空头开仓逻辑 If(MarketPosition == 0 And l <= dnBand[1] and Shortswitch ==1) SellShort(Lots, min(open,upBand[1])); // 多头平仓逻辑 If(MarketPosition == 1 And Close[1] <= MidLine[1]) Sell(0, open); // 空头平仓逻辑 If(MarketPosition == -1 And Close[1] >= MidLine[1]) BuyToCover(0, open); } } //------------------------------------------------------------------------ // 编译版本 2025-03-13 09:54:41 Thursday // 版权所有 // 更改声明 TradeBlazer Software 保留对 TradeBlazer 平台 // 每一版本的 TradeBlazer 公式修改和重写的权利 //------------------------------------------------------------------------代码已交付请查收,有问题继续这里提出
回复:实盘/模拟盘中,没有按信号成交啊。价格低于中轨了,但是没有成交。导致多亏了好几千!
回复:平仓条件:做多:盘中价格低于等于上一个k线对应的中轨。做空:盘中价格高于等于上一个k线对应的中轨上次我写成收盘价了,抱歉。能帮我改一下吗?
回复:平仓条件修改为:做多平仓:盘中最低价低于等于上一个k线对应的中轨。做空平仓:盘中最高价高于等于上一个k线对应的中轨该项内容收费100 https://shop.tbquant.net/overviews?item_id=1000026 拍下截图即可
回复:
回复:已拍下。另外,我发现还有个问题:比如持有多头,本来该平仓的,却不平仓,而是开了空头锁仓,我希望是直接平掉。这是个问题,希望能改正。谢谢。
回复:这个具体截图说明一下
回复:这是我的一个模拟账户今天的成交,本该平仓,但它是锁仓。
策略需求文档 202503071 策略运行环境1.1 平台1.1.1 TBQuant1.2 公式实现:图表2 数据计算部分2.1 常规Boll 指标(26,1)的 上轨,下轨,中轨2.2 收盘价指每根K线的收盘价3 开仓部分3.1 多头开仓3.1.1 当前价格大于等于上一根k线对应的上轨3.2 空头开仓3.2.1 当前价格小于等于上一根k线对应的下轨4 平仓部分4.1 多头平仓4.1.1 收盘价低于等于上一根k线对应的中轨价格4.2 空头平仓4.2.1 收盘价低于等于上一根k线对应的中轨价格5 其他需要注意的部分变量:(以下为可以自己调整的参数)(1)BOLL指标的均线和标准差(2)手数(3)多方/空方/多空双方
回复:该策略报价500 https://shop.tbquant.net/overviews?item_id=1000026 拍下对应链接截图到这里即可
回复:
回复:已经缴费了。大概何写好?是直接发到我的邮箱里还是微信?
回复:收到,已安排策略会发在帖子内,注意查收
策略需求文档20250228我有现成的策略,请帮着修改一个bug:当前k线无法多次成交,比如买入成功后,当前k线触及平仓线时或者再次触及做空信号时,只能等到下一个k线才可以,耽误了时机 1 策略运行环境1.1 平台1.1.1 TBQ1.2 公式实现:图表2 数据计算部分2.1 常规Boll 指标(26,1)的 上轨,下轨,中轨2.2 收盘价指每根K线的收盘价 3 开仓部分3.1 多头开仓3.1.1 当前价格高于,并突破上一根k线对应的上轨, 3.2 空头开仓3.2.1 当前价格低于,并突破上一根k线对应的下轨 4 平仓部分4.1 多头平仓4.1.1 收盘价低于上一根k线对应的中轨价格,按收盘价确认 4.2 空头平仓4.2.1 收盘价低于上一根k线对应的中轨价格,按收盘价确认 5 其他需要注意的部分以损定量开仓
回复:以上是您发送的需求,有一些修改,若干的问题需要您回答1. 您说是修改策略,不过看您只贴了需求,那么按照需求编写2.以损定量需要更精确的内容
回复:我怎么将现成的策略发给你?刚才附件中不让上传.fbk 文件。有邮箱吗?
回复:代码复制在贴内即可
回复://------------------------------------------------------------------------ // 简称: Q01_V1_1124 // 名称: Q01更新日期20241124 // 类别: 公式应用 // 类型: 用户应用 // 输出: Void //------------------------------------------------------------------------ Params Numeric Length(20,20,26,1); //周期 Numeric Offset(2); //标准差倍数 Integer Fund(50000);//加仓最大额度; Numeric Frist_fund(3000,1000,6000,1000);//单笔亏损额 Numeric Enter_time(9,1,18,1);//加仓次数 至少加一手 Enum<String> Trend_options(["多空都做","只做多","只做空"]);//多空模式选择 Bool ISexit(True);//是否启动开仓第一根bar止损 Numeric MVP(50);//亏损跳数 Vars Numeric UpLine; //上轨 Numeric DownLine; //下轨 Series<Numeric> MidLine; //中间线 Numeric Band; Numeric StartVOL; Series<Numeric> Enter_price; //中间线 Series<Numeric> Close_Rollover; //中间线 Series<Numeric> Band_Rollover; //中间线 Series<Numeric> time_long; Series<Numeric> time_short; Series<Numeric> Lots; Series<Numeric> Lott; Series<Numeric> MP_D; Series<Numeric> MP_K; Global Numeric Sign0;//状态码 Global Numeric Sign1;//状态码 Global Numeric CurrentVolume1;//状态码 Global Numeric CurrentVolume2;//状态码 Global Numeric MinPoint;// Global Integer cancelId; Numeric intervalSecs(3); //监控间隔 Global Numeric long_sign; Global Numeric short_sign; Global array<Integer> my_id; Global Bool sign2; Defs //此处添加公式函数 Events OnReady() { //根据操作源订阅委托 Bool ret = A_SubscribeTradeByCreateSource(A_GetOrderCreateSource); Print("A_SubscribeTradeByCreateId:" + IIFString(ret, "True", "False")); //获取报单源名称 Print("A_GetOrderCreateSource:" + A_GetOrderCreateSource); Sign0=0; CurrentVolume1=0; CurrentVolume2=0; MinPoint = PriceScale * MinMove;//计算每跳价值 } //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { //=========除权换月相关设置============== AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 Bool ret = SetSwapPosVolType(2); //设置自动换仓量类型 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { MidLine = AverageFC(Close[1],Length); Band = StandardDev(Close[1],Length,2); UpLine = Round(MidLine + Offset * Band,0); DownLine = Round(MidLine - Offset * Band,0); Close_Rollover=Close[1]/Rollover; Band_Rollover=StandardDev(Close_Rollover,Length,2); PlotNumeric("UpLine", UpLine); PlotNumeric("DownLine", DownLine); PlotNumeric("MidLine", MidLine); Lots=IntPart(Fund/(O/rollover*ContractUnit*BigPointValue*0.1)); Lott=Max(1,Round(Frist_fund / ((Offset *Band_Rollover ) *BigPointValue*ContractUnit),0)); StartVOL=Min(Lots,Lott); //Commentary("band:"+Text(Band_Rollover)); If(MarketPosition==0 And High>=UpLine and Trend_options!="只做空") { Enter_price=Max(Open,UpLine); Buy(StartVOL,Enter_price); PlotString("A","首:"+text(EntryPrice/rollover),H*1.01,Red); time_long=1; } If(MarketPosition==0 And Low<=DownLine and Trend_options!="只做多") { Enter_price=Min(Open,DownLine); SellShort(StartVOL,Enter_price); PlotString("B","首:"+text(EntryPrice/rollover),L*0.99,Green); time_short=1; } //==================================中轨止损============================ If(MarketPosition==1 And Low<=MidLine and BarsSinceLastEntry>0 ) { Sell(0,Min(Open,MidLine)); } If(MarketPosition==-1 And High>=MidLine and BarsSinceLastEntry>0 ) { BuyToCover(0,Max(Open,MidLine)); } //=================================加仓================================== If(MarketPosition ==1 and time_long[1]<=Enter_time ) // 如果目前是多头持仓 { If(BarsSinceLastEntry>0 And MidLine>=Enter_price[1] and BarsSinceLastEntry>0 and Trend_options!="只做空") { Enter_price=Open; Buy(StartVOL,Enter_price); PlotString("d","加"+text(longLastEntryPrice/rollover),H*1.01,yellow); time_long=time_long[1]+1; } } If(MarketPosition ==-1 and time_short[1]<=Enter_time ) // 如果目前是空头持仓 { If(BarsSinceLastEntry>0 And MidLine<=Enter_price[1] and BarsSinceLastEntry>0 and Trend_options!="只做多") { Enter_price=Open; SellShort(StartVOL,Enter_price); PlotString("C","加"+text(shortLastEntryPrice/rollover),L*0.99,white); time_short=time_short[1]+1; } } //===================换月======= If(HasRollover and MarketPosition <>0) { PlotString("e","除权",H*1.01,white); } If(BarStatus == 2 and IsTradeEnabled and istradingtime(MainSymbol,systemdatetime) and ISexit) //在交易时间开启了bar内止损 { sign2=MarketPosition !=0 and BarsSinceEntry==0 ; If(sign2) { Sign0=1;//正常交易时间 } If(sign2==False) { Sign0=0; Bool ret = StopTimer(cancelId); Print("停止计时器" + IIFString(ret, "True", "False")); } } If(MarketPosition !=0 and BarsSinceEntry==0 and Sign0==1) { cancelId=CreateTimer(intervalSecs*1000);Print("---------启动定时器---------");//创建计时器 intervalSecs 秒执行一次 } If(BarStatus==2 ) { Position pos; //获取指定合约当前仓位 Bool ret = A_GetPosition(MainSymbol, pos,A_GetOrderCreateSource); long_sign=pos.longCanSellVolume; short_sign=pos.shortCanCoverVolume;//多头未成交 开仓单的数量 } } OnTimer(Integer id,Integer millsecs) //默认3秒执行一次 { If(Sign0==1) { Sign1=1; If(long_sign>0 and EntryPrice-Close>=MVP*MinPoint and Sign1==1) { A_SendOrderEx(Enum_Sell,Enum_Exit,long_sign,Close,my_id);Print("---------SP发出-平多---------"); Sign1=0; } If(abs(short_sign)>0 and Close-EntryPrice>=MVP*MinPoint and Sign1==1) { A_SendOrderEx(Enum_Buy,Enum_Exit,abs(short_sign),Close,my_id);Print("---------发出-平空---------"); Sign1=0; } } }
回复:那这个需求文档有需要参考的部分吗?
回复:不参考也可以,直接将现成的代码的bug给修正了就行。
回复:改写还是新写差距很大改写需要具体说明产生bug的语句代码,另外也要有完整的代码交易逻辑语句,这个需要你提供。不然无法确认哪个"BUG"是需要修改的你想要想清楚以上的问题。改写的话,原策略的交易逻辑请用文字说明。
回复:我再补充一下:改写的问题在于你要说明原代码的策略(中文表述),并说明哪里需要修改,当原代码存在问题时,这个改写的难度会加大。所以你能理清逻辑的情况下,建议新写
回复:好,那就新写一个吧。1 策略运行环境1.1 平台1.1.1 TBQ 1.4.2.11.2 公式实现:图表或其他(无所谓)2 数据计算部分2.1 常规Boll 指标(26,1)的 上轨,下轨,中轨2.2 收盘价指每根K线的收盘价3 开仓部分3.1 多头开仓3.1.1 当前价格大于等于上一根k线对应的上轨,3.2 空头开仓3.2.1 当前价格低于,并突破上一根k线对应的下轨4 平仓部分4.1 多头平仓4.1.1 收盘价低于等于上一根k线对应的中轨价格4.2 空头平仓4.2.1 收盘价低于等于上一根k线对应的中轨价格5 其他需要注意的部分变量:(以下为可以自己调整的参数)(1)BOLL指标的均线和标准差(2)手数(3)多方/空方/多空双方(4)操作周期,15分钟/30分钟/60分钟/日此策略主要是做股指期货
回复:周期不作为参数了,直接图表设置