老师,请帮解答下
例如:两个数据源在不同的策略单元。
数据源 1 , RB2505 合约 加载双均线交易公式1。
数据源 2 , RB000 加载RSI公式2。
现在我想在数据源1的 双均线公式中可以获取到 RB000 也就是数据源2的 RSI的值用来过滤数据源1 RB2505 的交易信号。
例如 RSI <= 65;
问题1:能否帮助详细解答,我在数据源2 RB000 中应该用哪个 函数从数据源取值。
数据源1 中 应该用哪个函数可供数据源1调用。
问题2:如果两个合约放在同一个策略单元的话,是不是在公式1 用getplotnumeric 就可以直接调取。 RSI变量定义必须用Global 嘛?
非常感谢
老师,你说的data1的方式是在同一个策略里面订阅了不同数据源,我知道的。 我的主要问题是1,在两个不同策略单元之间的获取,应该要用SetGlobalVar 吧。
两个不同的单元,我觉得读写基础数据更好 setdic getdic
getplotnumeric 是获取图表上的plot输出内容,一般是2个公式之间操作
1.比如你调用,data1的ma1,就是data1.ma1 ,data1就是图层前缀 ,看好图层号去使用
2.要保证图层变量计算过了,参考系统的ma公式
//------------------------------------------------------------------------
// 简称: MA
// 名称: 移动平均线
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric Length1(5);
Numeric Length2(10);
Numeric Length3(20);
Numeric Length4(30);
Numeric Length5(60); //股票使用
Numeric Length6(120); //股票使用
Numeric Length7(240); //股票使用
Vars
Natural CodeProperty codePro;
Events
OnReady()
{
Range[0:DataSourceSize() - 1]
{
GetProperty(codePro);
if(codePro.bigCategory == Enum_CategoryStocks() || codePro.bigCategory == Enum_CategoryForeignStocks())
{
SetBackBarMaxCount(1+Max(Max(Max(Max(Max(Max(Length1,length2),Length3),Length4),Length5),Length6),Length7));
}
else
{
SetBackBarMaxCount(1+Max(Max(Max(Length1,length2),Length3),Length4));
}
setPlotOption("MA1", "begin-bar", Length1);
setPlotOption("MA2", "begin-bar", Length2);
setPlotOption("MA3", "begin-bar", Length3);
setPlotOption("MA4", "begin-bar", Length4);
setPlotOption("MA5", "begin-bar", Length5);
setPlotOption("MA6", "begin-bar", Length6);
setPlotOption("MA7", "begin-bar", Length7);
}
}
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
If(Length1 > 0)
{
PlotNumeric("MA1",AverageFC(Close,Length1));
}
If(Length2 > 0)
{
PlotNumeric("MA2",AverageFC(Close,Length2));
}
If(Length3 > 0)
{
PlotNumeric("MA3",AverageFC(Close,Length3));
}
If(Length4 > 0)
{
PlotNumeric("MA4",AverageFC(Close,Length4));
}
if(codePro.bigCategory == Enum_CategoryStocks() || codePro.bigCategory == Enum_CategoryForeignStocks())
{
If(Length5 > 0)
{
PlotNumeric("MA5",AverageFC(Close,Length5));
}
If(Length6 > 0)
{
PlotNumeric("MA6",AverageFC(Close,Length6));
}
If(Length7 > 0)
{
PlotNumeric("MA7",AverageFC(Close,Length7));
}
}
}
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
range范围内表示图层循环,则每个图层的ma1到ma7都得到了计算
那么后续你调用任意图层的data[n].ma1都是可以的