对比螺纹钢和热卷 两个品种,谁强做谁!
问题是:data0.数据 显示:1;
data1.数据是0
dChange[i] = dj_Change_i(i, Length); // 将每一个品种涨跌幅,存入一个数组当中。 是个函数
//---------冒泡排序----------
sortedCount = dj_Bubble_Sort_AT(dChange, dataIndex, rankArray, -1, False); //是冒泡函数
代码:
Params
Numeric Length(60); // 通道周期
Vars
Numeric signalBufferCount(1); // 减小信号缓冲次数
Numeric dataSourceCount(10); // 手动指定数据源数量
// 预先声明固定大小的数组
Array<Numeric> dChange(100); // 用于排序的涨跌幅数组
Array<Numeric> dataIndex(100); // 数值中每个数据源的序号
Numeric sortedCount; // 排序后的元素数量
Numeric i; // 循环变量
Array<Numeric> rankArray(100); // 排序后的排名数组
Numeric selectedIndex; // 排序后选中的数据源序号
Numeric roundedChange; // 排序后数据四舍五入保留2位小数
Numeric totalPosition; // 叠加品种的所有持仓数量
//----------
Numeric tradeId; // 真实交易的id,用于保存id_变量,保证开平仓动作统一在一个品种上
Series<Numeric> selectedId; // 记录排序后所要开仓的品种id_
Series<Numeric> candidateId; // 排序后,筛选出的待触发的品种
Array<Numeric> upperChannel(100); // 计算唐奇安通道上轨
Array<Numeric> lowerChannel(100); // 计算唐奇安通道下轨
Series<Numeric> openSignalCount; // 开仓信号连续满足的次数
Series<Numeric> closeSignalCount; // 平仓信号连续满足的次数
Series<Numeric> lower1;
Series<Numeric> Upper1;
Events
onBar(ArrayRef<Integer> indexs)
{
// 初始化持仓数量
totalPosition = 0;
//---------计算涨跌幅----------
For i = 0 To DataSourceSize-1
{
dChange[i] = dj_Change_i(i, Length); // 将每一个品种涨跌幅,存入一个数组当中。
dataIndex[i] = i; // 将品种数据源号,存入数组。这两个数组,用于冒泡排序。
Commentary("dChange[" + Text(i) + "] = " + Text(dChange[i]));
}
//---------冒泡排序----------
sortedCount = dj_Bubble_Sort_AT(dChange, dataIndex, rankArray, -1, False);
Commentary("Sorted count: " + Text(sortedCount));
Range[0:DataSourceSize-1]
{
upper1 = Highest(High[1], Length);
lower1= Lowest(Low[1], Length);
PlotNumeric("upper1 ",upper1);
PlotNumeric("lower1 ",lower1);
}
For i = 0 To sortedCount - 1
{
totalPosition = totalPosition + Data[i].MarketPosition;
selectedIndex = dataIndex[i];
roundedChange = Round(dChange[i] * 100, 2);
//------------计算通道----
upperChannel[i] = Highest(Data[i].High[1], Length);
lowerChannel[i] = Lowest(Data[i].Low[1], Length);
If(i == 0)
{
candidateId = selectedIndex;
}
Commentary("Rank " + Text(rankArray[i]) + ": Data" + Text(selectedIndex) + " - " + Data[selectedIndex].SymbolName + "," + Text(Length) + "根K线涨跌幅之和为" + Text(roundedChange) + "%");
}
if(totalPosition == 0)
{
selectedId = candidateId;
}
else
{
selectedId = selectedId[1];
}
tradeId = selectedId;
// 开仓信号判断
If(Data[tradeId].High > upperChannel[tradeId] AND totalPosition == 0)
{
openSignalCount = openSignalCount + 1;
Data[tradeId].Buy(0, Max(Data[tradeId].O, upperChannel[tradeId]));
data1.Commentary("获取价格:" + Text(upperChannel[tradeId]));
data1.Commentary("open价格:" + Text(Data[tradeId].O));
}
Else
{
openSignalCount = 0;
}
data1.Commentary("tradeId="+Text(tradeId));
data0.Commentary("tradeId="+Text(tradeId));
// 开仓条件
if(openSignalCount >= signalBufferCount)
{
//Data[tradeId].Buy(0, Max(Data[tradeId].O, upperChannel[tradeId]));
openSignalCount = 0;
Commentary("Buy signal triggered");
}
// 平仓信号判断
If(totalPosition == 1 And Data[tradeId].Low < lowerChannel[tradeId])
{
closeSignalCount = closeSignalCount + 1;
Commentary("Close signal count: " + Text(closeSignalCount));
}
Else
{
closeSignalCount = 0;
Commentary("Close signal count reset to 0");
}
// 平仓条件
if(closeSignalCount >= signalBufferCount)
{
Data[tradeId].Sell(0, Min(Data[tradeId].O, lowerChannel[tradeId]));
closeSignalCount = 0;
Commentary("Sell signal triggered");
}
Commentary("id:" + Text(tradeId));
Commentary("持仓状态:" + Text(totalPosition));
}
有点没头没尾的,不知道你要干什么,不知道代码想表达什么,不知道问题在哪里
建议要么找收费代编,要么投稿等直播分析。
无论哪种,还是要描述详细一点