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


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

   

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


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

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

帅哥哟,离线,有人找我吗?
manbutianya
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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


 回到顶部
帅哥哟,离线,有人找我吗?
manbutianya
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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个金币奖励
(理由:好文章)
 回到顶部
帅哥哟,离线,有人找我吗?
zenyu_you
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:34 积分:86 威望:0 精华:0 注册:2011/8/18 8:22:00
  发帖心情 Post By:2012/12/5 23:28:45 [只看该作者]

学习了


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


加好友 发短信
等级:小飞侠 帖子:1882 积分:3310 威望:0 精华:15 注册:2010/3/15 13:11:56
  发帖心情 Post By:2014/9/28 19:42:47 [只看该作者]

以下内容为程序代码:

1 runmode:0;
2
3 filepath:='d:\\changes.txt';
4
5 bkname:='日盘连续';
6 stks:=stkcount(bkname);
7
8 variable:labels[stks]=0;
9 variable:changes[stks]=0;
10
11 for i=1 to stks do begin
12     code:=stkfromblk(bkname,i);
13     labels[i]:=strremove(code,0,2);
14     
15     if valid(callstock(labels[i],vtopen,6,-20))=1 then begin
16         changes[i]:=(callstock(labels[i],vtopen,6,0)-callstock(labels[i],vtopen,6,-20))/callstock(labels[i],vtopen,6,-20)*100;
17     end else begin
18         changes[i]:=0;
19     end
20 end
21
22 for i=1 to stks do begin
23     for j=1 to stks-i do begin
24         if changes[j]<changes[j+1] then begin
25             t1:=changes[j];
26             changes[j]:=changes[j+1];
27             changes[j+1]:=t1;
28             
29             t2:=labels[j];
30             labels[j]:=labels[j+1];
31             labels[j+1]:=t2;
32         end
33     end
34 end
35
36 debugfile2(filepath,'----------'+numtostr(date,0)+'----------','',0);
37
38 for i=1 to stks do begin
39     debugfile2(filepath,labels[i]+' : '+numtostr(changes[i],2),'',0);
40 end

[此贴子已经被作者于2014/9/28 19:43:32编辑过]

 回到顶部
总数 16 上一页 1 2