金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2054|回复: 6

问下,这个TB的公式和我们金字塔的问题?

[复制链接]

77

主题

201

帖子

211

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
发表于 2022-6-24 06:50 | 显示全部楼层 |阅读模式
请问一下:我在训练把TB的公式全部能翻译成金字塔的能力,但是在翻译的时候不知道哪里出了问题(TB是RSI公式,我也知道金字塔系统里有公式,但是我就是想学一下):
我是这么写的,看一下:
VARIABLE:NetChgAvg:=0;
VARIABLE:TotChgAvg:=0;
SF:=0;
REFCLOSE:=REF(CLOSE,1);
IF BARPOS<14-1 THEN BEGIN
        NetChgAvg:=(CLOSE-REFCLOSE)/14;
        TotChgAvg:=MA(ABS(CLOSE-REFCLOSE),14);
///////这里就提醒IF 中不允许使用MA函数,这样我不知道怎么翻译了,帮我看看怎么解决,或者直接把下面的TB公式翻译出来也可以(备注:LC := REF(CLOSE,1);RSI1:SMA(MAX(CLOSE-LC,0),12,1)/SMA(ABS(CLOSE-LC),12,1)*100;,这个公式不要,我要的就是把TB翻译出来)





Params
        Numeric Length(14) ; //周期
        Numeric OverSold(30) ; //超卖
        Numeric OverBought(70) ; //超买
Vars
        Series<Numeric> NetChgAvg( 0 );
        Series<Numeric> TotChgAvg( 0 );
        Numeric SF( 0 );
        Numeric Change( 0 );       
        Numeric ChgRatio( 0 ) ;
        Numeric RSIValue;
Events
        OnBar(ArrayRef<Integer> indexs)
        {       
                Range[0:DataSourceSize() - 1]
                {
                        If(CurrentBar <= Length - 1)
                        {
                                NetChgAvg = ( Close - Close[Length] ) / Length ;
                                TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;
                        }Else
                        {
                                SF = 1/Length;
                                Change = Close - Close[1] ;
                                NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;
                                TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;       
                        }
                       
                        If( TotChgAvg <> 0 )
                        {
                                ChgRatio = NetChgAvg / TotChgAvg;
                        }else
                        {
                                ChgRatio = 0 ;
                        }       
                        RSIValue = 50 * ( ChgRatio + 1 );       
                        PlotNumeric("RSI",RSIValue);
                        PlotNumeric("超买",OverBought);
                        PlotNumeric("超卖",OverSold);
                }
        }

回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2022-6-24 09:03 | 显示全部楼层
VARIABLE:NetChgAvg:=0;
VARIABLE:TotChgAvg:=0;
SF:=0;
REFCLOSE:=REF(CLOSE,1);
t1:=(CLOSE-REFCLOSE)/14;
t2:=MA(ABS(CLOSE-REFCLOSE),14);
IF BARPOS<14-1 THEN BEGIN
        NetChgAvg:=t1;
        TotChgAvg:=t2;


在外面定义好就行了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

77

主题

201

帖子

211

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-6-25 10:53 | 显示全部楼层
资深技术02 发表于 2022-6-24 09:03
VARIABLE:NetChgAvg:=0;
VARIABLE:TotChgAvg:=0;
SF:=0;

好的,谢谢,另外帮我看看这段代码修改对不对:

VARIABLE:VAR7:=0,VAR8:=0,VAR9:=0,VAR10:=0;

IF DATE<>REF(DATE,1) THEN BEGIN
        VAR7:=1;
        VAR8:=HIGH;
        VAR9:=LOW;
        END
ELSE BEGIN
                VAR7:=VAR7+1;
                IF HIGH>VAR8 THEN VAR8:=HIGH;
                IF LOW<VAR9 THEN VAR9:=LOW;
                END
///////////////////////////////////////////源代码如下:


VARS
SERIES<Numeric> var7(0);
SERIES<Numeric>  var8(0);
SERIES<Numeric>  var9(0);
SERIES<Numeric>  var10(0);

Begin
    //此处添加代码正文
If(CurrentBar == 0 || Date != Date[1])//日内策略常用初始化方法,表示的是“在图表的第一根k线,或者是新的一天”。
        {
                var7 = 1;
                var8 = High;
                var9 = Low;
        }Else
        {
                var7 = var7 + 1;
                If(High > var8)
                        var8 = High;
                If(Low < var9)
                        var9 = Low;
        }
回复

使用道具 举报

77

主题

201

帖子

211

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-6-25 11:06 | 显示全部楼层
资深技术02 发表于 2022-6-24 09:03
VARIABLE:NetChgAvg:=0;
VARIABLE:TotChgAvg:=0;
SF:=0;

现在又有一个问题:
如果条件嵌套的函数好像就不能通过定义在外面的方式来解决了,问下这个有没有办法解决,代码如下:
        For i = 1 to 13
        {
                If(i == 1)
                {
                        n = var7;
                        var11 = var8[n];
                        var12 = var9[n];

备注:这里当i=1的时候才定义出来n等于var7,而下面定义var11=var8[n],我翻译成金字塔可以直接用VAR11:=VAR8[N]不?因为直接用VAR11:=REF(VAR8,N)在IF函数里面是实现不了的?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2022-6-25 19:00 | 显示全部楼层
3楼代码没问题
4楼这里VAR11:=VAR8[N]可以这么使用的
本身金字塔也是可以这么使用当成数组的比如
就像下面下法其实和ref一样
var11:close[barpos-2];
vv:ref(close,2)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

77

主题

201

帖子

211

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-6-25 22:05 | 显示全部楼层
资深技术02 发表于 2022-6-25 19:00
3楼代码没问题
4楼这里VAR11:=VAR8[N]可以这么使用的
本身金字塔也是可以这么使用当成数组的比如

谢谢,另外问下TB里面的RETURN和我们这边的EXIT是类似的吧?另外return 0这类后面带数值的我们金字塔可以翻译过来吗?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2022-6-27 09:13 | 显示全部楼层
不一样的,return 0 是c语言中的一种概念,他是定义函数返回值
他的语法是类C的所以具有这些个特征
而金字塔是类vb这样的语法本身他定位是简单易懂,所以没有这类用法
截图202206270909261796.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-23 04:29 , Processed in 0.252021 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表