有现成的编程,请修改一个bug,或重新编写
私密文章仅本人及管理员可以查看
找个懂编程的修改修改
有现成的网格交易TB代码么
TBQ有个bug,FileDelete 这个函数不起作用,请改正
有偿编写 现有文华代码 想用开拓者平台编写 有兴趣请联系我
哪里有编程手册?
请帮我编写一个策略
SetGlobalVar 有bug
请帮忙编写
请tblaocai老师帮修改用户函数
《TB语言编程-TQ》哪里有购买?


//---------------------------------------------
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指标为主的

也是可以,新内容可以新发一个帖子



//---------------------------------------------
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

拍下截图即可

已拍下。

另外,我发现还有个问题:比如持有多头,本来该平仓的,却不平仓,而是开了空头锁仓,我希望是直接平掉。这是个问题,希望能改正。谢谢。

这个具体截图说明一下

这是我的一个模拟账户今天的成交,本该平仓,但它是锁仓。

策略需求文档 20250307

1 策略运行环境

1.1 平台

1.1.1 TBQuant

1.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 TBQ

1.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.1

1.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分钟/日

此策略主要是做股指期货

周期不作为参数了,直接图表设置