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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 请教:下面代码意图与结果严重不符,请老师指点

   

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


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

主题:请教:下面代码意图与结果严重不符,请老师指点

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


加好友 发短信
等级:新手上路 帖子:23 积分:60 威望:0 精华:0 注册:2010/3/29 12:49:42
请教:下面代码意图与结果严重不符,请老师指点  发帖心情 Post By:2016/3/15 12:36:20 [只看该作者]


请教:下面代码意图与结果严重不符,请老师指点:
一、建立一个框架“myFrame”,有主K线图“KMain”
在“myFrame”的“myFrame_Paint()”事件中加载下面的“mainfunc1()”方法
二、代码如下:
'变量定义
public myGrid, myHistoryData
Set myGrid = myFrame.GetGridByName("KMain")
Set myHistoryData = myGrid.GetHistoryData()

dim intCount,intPos
public arrayLHigh(), arrayPels()'arrayLHigh是向上突破极限,arrayPels取K线在屏幕上位置

intCount=myGrid.DataCount
redim arrayLHigh(intCount), arrayPels(intCount)

'函数设计意图:根据价格变化,画出相应的向上突破极限,便于看图时作出判断
Function  MoveLimit2()
    MoveLimit2=0
    for intPos=1 to intCount
     If intPos=1 Then
  arrayLHigh(intPos)=myHistoryData.High(intPos)*1.1    '如果是第一根K线,突破极限设为此K线最高价1.1倍
 ElseIf myHistoryData.high(intPos)<arrayLHigh(intPos-1) and myHistoryData.high(intPos)>myHistoryData.high(intPos-1) Then
  arrayLHigh(intPos)=arrayLHigh(intPos-1)    '如果当前最高价小于上一周期突破极限,且大于上一周期最高价,则此周期突破极限等于上一周期
 Else
  arrayLHigh(intPos)=myHistoryData.High(intPos)*1.1   '否则,突破极限设为此K线最高价1.1倍
 End If

 arrayPels(intPos)=myGrid.PelsByPos(intPos) '取X坐标

 if(myGrid.PtInGrid( arrayPels(intPos), myHistoryData.High(intPos))) then
  myGrid.DrawLine arrayPels(intPos-1), arrayLHigh(intPos-1), arrayPels(intPos), arrayLHigh(intPos), vbRed, 2, 0
 end if
    Next
End Function

Function mainfunc1()
 if myGrid.DataType<>1 then
  msgbox "当前窗口不是K线窗口,不宜进行分析,此功能退出!", "重要提示!"
  exit Function
 end if
 if myGrid.Type<>0 then
  msgbox "当前窗口不是主图窗口,不宜进行分析,此功能退出!", "重要提示!"
  exit Function
 end if
 msgbox "当前限高为:"& arrayLHigh(intCount) &vbNewLine _
 &"当前X坐标为:"&  arrayPels(intCount) &vbNewLine _
 &"当前Y坐标为:"& myHistorydata.high(intPos)

 MoveLimit2
End Function
三、希望得到的结果是:向上突破极限随价格变动不断变化。

图片点击可在新窗口打开查看此主题相关图片如下:02.png
图片点击可在新窗口打开查看
实际结果是:在图的最上面有一条线,与实际价格严重脱离。

图片点击可在新窗口打开查看此主题相关图片如下:01.png
图片点击可在新窗口打开查看
谢谢。



图片点击可在新窗口打开查看此主题相关图片如下:01.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2016/3/15 18:38:13 [只看该作者]

myGrid.DrawLine arrayPels(intPos-1), arrayLHigh(intPos-1), arrayPels(intPos), arrayLHigh(intPos), vbRed, 2, 0

arrayLHigh(intPos-1)这个数组你保存是所记录的极限的数值,而drawline这个函数里是用坐标位置来表示的。用pricetopels去取下对应的坐标值,另外数组下标是从0开始的我这边改了下,绘图的话从第一根开始

 

 

 for intPos=0 to intCount

 

 if(myGrid.PtInGrid( arrayPels(intPos), myHistoryData.High(intPos))) and intPos>0 then
  myGrid.DrawLine arrayPels(intPos-1), myGrid.PriceToPels(arrayLHigh(intPos-1)), arrayPels(intPos), myGrid.PriceToPels(arrayLHigh(intPos)), vbRed, 2, 0
 end if
    Next


 回到顶部