您的位置:首页 > 编程语言 > Python开发

公布阻力位核心源码(Python版)

2007-07-26 09:52 459 查看
zmap_id=88800000091;eLong_Affiliate_MemberID=4053787;
下面公布阻力位核心源码, 在此感谢江老师的教导!

因使用本算法导致投资失败, 本人概不付任何责任(包括法律责任)! 切记!!


# -*- coding: gb2312 -*-


import logging




__version__ = "1.6"




def GetKeyPositions (AllEnabled = True):


Ret = []


n = 2


for ix in range (1, 9 * n):


if ix % 2 == 0:


#


# left-top corner line


#


val = ix**2 + 1


if AllEnabled: Ret.append (val - ix/2)


Ret.append (val)


#


# left-bottom corner line


#


val = (ix + 1)**2 - ix


if AllEnabled: Ret.append (val - ix/2)


Ret.append (val)


#end for






for ix in range (1, 10 * n):


if ix % 2 <> 0:


#


# rith-bottom corner line


#


val = ix**2


if AllEnabled and (val > 1): Ret.append (val - ix/2)


Ret.append (val)


#


# right-top corner line


#


val = (ix + 1)**2 - ix


if AllEnabled: Ret.append (val - (ix + 1)/2)


Ret.append (val)


#end for


Ret.sort ()


return Ret


#end def




def CompDiffPrice (ImpPrice, DiffRate, DynPrice):


if (ImpPrice * (1 - DiffRate) <= DynPrice) and


(ImpPrice * (1 + DiffRate) >= DynPrice):


return True


return False


#end def




def Succeeded (PointsFound):


Count = 0


for ix in range (len (PointsFound)):


if PointsFound[ix]:


Count += 1


#end for


if Count == len (PointsFound):


return True


return False


#end def




def PrintPrices (KeyPos, Prices):


PriceStr = ''


Mark = '#'


PrevDiff, CurrDiff = 0, 0


for ix in KeyPos:


if ix == KeyPos[len (KeyPos)-1]:


PriceStr = '%s %s%-8s' % (PriceStr, Mark, Prices[ix-1])


break




NextPricePos = KeyPos[KeyPos.index (ix)+1]


CurrDiff = int (1000 * round (Prices[NextPricePos] - Prices[ix-1], 2))


if PrevDiff == CurrDiff:


PriceStr = '%s%-8s' % (PriceStr, Prices[ix-1])


continue




PrevDiff = CurrDiff


PriceStr = '%s %s%-8s' % (PriceStr, Mark, Prices[ix-1])


#end for


print '[Prices(%d)] %s ' % (len (KeyPos), PriceStr)


#end def




def IsPosAtMiddlePrice (CurrentPrice, KeyPos, Prices):


Start = KeyPos[20]


End = KeyPos[23]


if (CurrentPrice >= Prices[Start]) and (CurrentPrice <= Prices[End]):


return True


return False


#end def




def ScanPrices (CurrPrice, InitVal, ImpPoints, StepBeginVal,


StepEndVal, StepSpinVal = 0.01, AllPos = True):




if (InitVal < 0) or (StepBeginVal < 0) or


(StepEndVal < 0) or (len (ImpPoints) == 0):


logging.warning ('Invalid parameters, pls try again!')


return




ValTimes = 1000


stepBegin = int (StepBeginVal * ValTimes)


stepEnd = int (StepEndVal * ValTimes)


stepSpin = int (StepSpinVal * ValTimes)


AllKeyPos = GetKeyPositions ()


ImptKeyPos = GetKeyPositions (False)


PointsCount = len (ImpPoints)


PointsFound = []


for ix in range (PointsCount): PointsFound.append (False)




for OffsetRate in range (1, 50, 1):


for Step in range (stepBegin, stepEnd, stepSpin):


Prices = []


PointsFound = []


for ix in range (PointsCount): PointsFound.append (False)




for ix in range (1, 9**2*5):


Prices.append (round (InitVal + (ix-1)*Step*1.0/ValTimes, 3))


#end for




for PntIx in range (PointsCount):


for iy in AllKeyPos:


if (not PointsFound[PntIx]) and


CompDiffPrice (ImpPoints[PntIx], OffsetRate/1000.0, Prices[iy - 1]):


PointsFound[PntIx] = True


break


#end for


#end for


if not Succeeded (PointsFound):


continue




if not IsPosAtMiddlePrice (CurrPrice, ImptKeyPos, Prices):


continue




print '[Params] InitPrice=%.3f, Step=%.3f, OffsetRatio=%.5f'


% (InitVal, Step*1.0/ValTimes, OffsetRate/1000.0)


print '[Points] ', ImpPoints


PrintPrices (ImptKeyPos, Prices)


return


#end for


#end for


#end def






if __name__ == "__main__":


"""


Step1. Input the lowest price in its hitory


Step2. In the light of historical prices,


input those trough prices you could see


Step3. Retrieves them


Step4. Copy all of those prices to UltraEdit


Step5. Find out the accurate date by these important key prices


Step6. Draw the horizen-line


"""




while raw_input ('Continue? (0: Quit; Enter: go ahead): ') <> '0':


try:


CurrPrice = input ('Current price: ')


except:


logging.warn ('Invalid current price!')


continue




try:


InitPrice = input ('Historical lowest price: ')


except:


InitPrice = 0.0


logging.warn ('Invalid initial price, default is %.2f', InitPrice)




"""


Computing dynamic step length according to the price level


"""


StepBegin = int(CurrPrice/10)


if StepBegin == 0:


StepBegin = 0.01


else:


StepBegin = StepBegin * 10 * 0.005


StepEnd = 5.0




try:


ImpPoints = input ('A set of important points: ')


except:


ImpPoints = []


logging.warn ('Invalid important points, default is none')




ScanPrices (CurrPrice, InitPrice, ImpPoints, StepBegin, StepEnd)






# enf of file



用法不赘述.


推荐书籍:









































内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: