欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → [技术指标]排序模板

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有17794人关注过本帖树形打印复制链接

主题:[技术指标]排序模板

帅哥哟,离线,有人找我吗?
manbutianya
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 9:28:23 [显示全部帖子]

请版主或楼主尽快把逐kM模板错误修正下!

 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 10:38:18 [显示全部帖子]

还是错,没有按照大小排序啊


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 13:30:24 [显示全部帖子]

代码如下,怎么没按大小排序啊

RUNMODE:0;
bkname:='自动交易';
stks:=stkcount(bkname)+1;

variable:stklabels[stks]=0;
variable:stktrades[stks]=0;
variable:stkposes[stks]=0;

for i=1 to stks do begin
code:=stkfromblk(bkname,i);
stklabels[i]:=strremove(code,0,2);
stktrades[i]:=stkindi(stklabel,'maxlb.liangbi',2,1,0);

if stktrades[i]>0 then
stktrades[i]:=stktrades[i];
else
stktrades[i]:=0;
stkposes[i]:=i;
end

for i=1 to stks do begin
for j=1 to stks-i do begin
if stktrades[j]>stktrades[j+1] then begin

t1:=stktrades[j];
 t2:=stkposes[j];
stktrades[j]:=stktrades[j+1];
stkposes[j]:=stkposes[j+1];
stktrades[j+1]:=t1;
stkposes[j+1]:=t2;
end
 
end
end

for i=1 to stks do begin
if stricmp(stklabel,stklabels[stkposes[i]])=0 then
mypos:=i;
end
liangx:mypos;


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 21:37:46 [显示全部帖子]

以下是引用manbutianya在2012-11-19 13:30:24的发言:

代码如下,怎么没按大小排序啊

RUNMODE:0;
bkname:='自动交易';
stks:=stkcount(bkname)+1;

variable:stklabels[stks]=0;
variable:stktrades[stks]=0;
variable:stkposes[stks]=0;

for i=1 to stks do begin
code:=stkfromblk(bkname,i);
stklabels[i]:=strremove(code,0,2);
stktrades[i]:=stkindi(stklabel,'maxlb.liangbi',2,1,0);

if stktrades[i]>0 then
stktrades[i]:=stktrades[i];
else
stktrades[i]:=0;
stkposes[i]:=i;
end

for i=1 to stks do begin
for j=1 to stks-i do begin
if stktrades[j]>stktrades[j+1] then begin

t1:=stktrades[j];
 t2:=stkposes[j];
stktrades[j]:=stktrades[j+1];
stkposes[j]:=stkposes[j+1];
stktrades[j+1]:=t1;
stkposes[j+1]:=t2;
end
 
end
end

for i=1 to stks do begin
if stricmp(stklabel,stklabels[stkposes[i]])=0 then
mypos:=i;
end
liangx:mypos;

楼主的是冒泡排序,不但残缺,经修改了,但还缺一个排序标志位,不然就排序不完整。。。。。不懂怎么设,别的语言用return跳出,金字塔不知怎么用?


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 21:38:58 [显示全部帖子]

修改成如下,还是不行:

RUNMODE:0;
bkname:='自动交易';
stks:=stkcount(bkname);

variable:stklabels[stks]=0;
variable:stktrades[stks]=0;
variable:stkposes[stks]=0;

for i=1 to stks do begin
code:=stkfromblk(bkname,i);
stklabels[i]:=strremove(code,0,2);
stktrades[i]:=stkindi(stklabel,'maxlb.liangbi',2,1,0);

if stktrades[i]>0 then
stktrades[i]:=stktrades[i];
else
stktrades[i]:=0;

stkposes[i]:=i;
end

for i:=1 to stks-1 do begin//做stks-1趟排序
NoSwap:=1;//置未排序的标志
for j:=stks-1 downto 1 do begin//从底部往上扫描
if stktrades[j+1]<stktrades[j] then begin//交换元素
t1:=stktrades[j+1];
stktrades[j+1]:=stktrades[j];
stktrades[j]:=t1;
t2:=stkposes[j+1];
stkposes[j+1]:=stkposes[j];
stkposes[j]:=t2;
NoSwap:=0;
end
end
If NoSwap=1 Then BREAK;//本趟排序中未发生交换,则终止算法
end

 


for i=1 to stks do begin
if stricmp(stklabel,stklabels[stkposes[i]])=0 then
mypos:=i;
end
liangx:mypos;


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/19 21:54:57 [显示全部帖子]

排序法主要用冒泡和简单排序法,金字塔都没有搞个范例,苦了广大塔民了


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:182 积分:910 威望:0 精华:0 注册:2011/4/12 15:24:59
  发帖心情 Post By:2012/11/20 0:17:34 [显示全部帖子]

成功了,拿出来给大家分享,简单排序法:

RUNMODE:0;
bkname:='自动交易';
stks:=stkcount(bkname);

variable:stklabels[stks]=0;
variable:stktrades[stks]=0;
variable:stkposes[stks]=0;

for i=1 to stks do begin
code:=stkfromblk(bkname,i);
stklabels[i]:=strremove(code,0,2);
stktrades[i]:=stkindi(stklabels[i],'maxlb.liangbi',2,1,0);

if stktrades[i]>0 then
stktrades[i]:=stktrades[i];
else
stktrades[i]:=0;

stkposes[i]:=i;
end
EEE@;
for i:=1 to stks-1 do begin//做stks-1趟排序
NoSwap:=1;//置未排序的标志
for j:=i+1 to stks do begin
if stktrades[i]<stktrades[j] then begin//交换元素
t1:=stktrades[i];
stktrades[i]:=stktrades[j];
stktrades[j]:=t1;
t2:=stkposes[i];
stkposes[i]:=stkposes[j];
stkposes[j]:=t2;
NoSwap:=0;
end
If NoSwap=0 Then GOTO EEE;//本趟排序中未发生交换,则终止算法
end

end

 


for i=1 to stks do begin
if stricmp(stklabel,stklabels[stkposes[i]])=0 then
mypos:=i;
end
liangx:mypos;


版主评定:好评,获得2个金币奖励好评,获得2个金币奖励
(理由:好文章)
 回到顶部