公布阻力位核心源码(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
用法不赘述.
推荐书籍:
下面公布阻力位核心源码, 在此感谢江老师的教导!
因使用本算法导致投资失败, 本人概不付任何责任(包括法律责任)! 切记!!
# -*- 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
用法不赘述.
推荐书籍:
相关文章推荐
- python logging 模块,logger.debug(),logger.info()等写入文件时的核心源码
- 【Python笔记】python第三方库lxml源码安装&&使用笔记
- 教你用Python动刷新抢12306火车票,附源码!
- python源码学习(九)——String的字符缓冲池和String的效率问题
- SPServer源码分析(四): 核心服务器类SP_Server分析
- 《Python核心编程》第二版第405页第十三章练习 续一 -Python核心编程答案-自己做的-
- (转) 熊猫烧香 - 核心源码 (僅供研究使用!後果自行負責 )
- 熊猫烧香核心源码
- 留言板源码公布
- CI框架源码完全分析之核心文件URI.php
- Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python
- Python核心概念之数据模型和执行模型
- Python核心编程--学习笔记--6--序列(上)字符串
- python 核心编程摘要
- Python开发爬虫爬取百度百科词条信息(源码下载)
- 深入学习Django源码基础1 - 深刻理解Python中的元类(metaclass)
- CentOS7.2 源码包编译安装Python3.6交互界面按Backspace键和方向键出现乱码
- Python核心编程 练习 第四章
- Python核心编程v2.0 第13章习题(下)
- [Python源码学习]之Py_InitializeEx