请教:下面代码意图与结果严重不符,请老师指点:
一、建立一个框架“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 三、希望得到的结果是:向上突破极限随价格变动不断变化。
实际结果是:在图的最上面有一条线,与实际价格严重脱离。
谢谢。 |
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