-
-
Save tg12/4dc0107b5b45fd91dd15fbd5b16f593c to your computer and use it in GitHub Desktop.
IG Index Fully Automated Trading for Small Cap and FTSE250 Stocks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy | |
import pandas | |
import matplotlib.pyplot as plt | |
import matplotlib.dates as mdates | |
from scipy import stats | |
import math | |
import requests | |
import json | |
import time | |
import random | |
from time import localtime, strftime | |
import datetime | |
import calendar | |
from random import shuffle | |
import pytz | |
##################################### | |
# Error Handling | |
import traceback | |
import sys | |
set(pytz.all_timezones_set) | |
YEAR_var = 2018 | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND | |
# NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE | |
# DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, | |
# WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
# SOFTWARE. | |
# ALL EPICS | |
main_epic_ids = [ | |
'KA.D.GPE.DAILY.IP', | |
'KA.D.GYMLN.DAILY.IP', | |
'KA.D.GMSLN.DAILY.IP', | |
'KA.D.GKP.DAILY.IP', | |
'KA.D.GELLN.DAILY.IP', | |
'KA.D.GDLLN.DAILY.IP', | |
'KA.D.GRG.DAILY.IP', | |
'KA.D.GKO.DAILY.IP', | |
'KA.D.GNK.DAILY.IP', | |
'KA.D.GNC.DAILY.IP', | |
'KA.D.UKWLN.DAILY.IP', | |
'KA.D.GRPLN.DAILY.IP', | |
'KA.D.GPOR.DAILY.IP', | |
'KA.D.GRPHLN.DAILY.IP', | |
'KA.D.GRI.DAILY.IP', | |
'KA.D.GFTU.DAILY.IP', | |
'KA.D.GDWN.DAILY.IP', | |
'KA.D.GHH.DAILY.IP', | |
'KA.D.GPRT.DAILY.IP', | |
'KA.D.GOCOLN.DAILY.IP', | |
'KA.D.GOG.DAILY.IP', | |
'KA.D.GBOLN.DAILY.IP', | |
'KA.D.GPHLN.DAILY.IP', | |
'KA.D.GLVLN.DAILY.IP', | |
'KA.D.GLEN.DAILY.IP', | |
'KA.D.GSK.DAILY.IP', | |
'KA.D.GVC.DAILY.IP', | |
'KA.D.GDG.DAILY.IP', | |
'KA.D.HMBLN.DAILY.IP', | |
'KA.D.IOM.DAILY.IP', | |
'KA.D.IAE.DAILY.IP', | |
'KA.D.IOFI.DAILY.IP', | |
'KA.D.IWGLN.DAILY.IP', | |
'KA.D.ITV.DAILY.IP', | |
'KA.D.ITM.DAILY.IP', | |
'KA.D.ITE.DAILY.IP', | |
'KA.D.IQE.DAILY.IP', | |
'KA.D.IPO.DAILY.IP', | |
'KA.D.MTEC.DAILY.IP', | |
'KA.D.GVM.DAILY.IP', | |
'KA.D.EMG.DAILY.IP', | |
'KA.D.MMCLN.DAILY.IP', | |
'KA.D.MPO.DAILY.IP', | |
'KA.D.MAJE.DAILY.IP', | |
'KA.D.MJW.DAILY.IP', | |
'KA.D.MNL.DAILY.IP', | |
'KA.D.MNP.DAILY.IP', | |
'KA.D.MKTLN.DAILY.IP', | |
'KA.D.MKS.DAILY.IP', | |
'KA.D.MSLH.DAILY.IP', | |
'KA.D.MARS.DAILY.IP', | |
'KA.D.MCP.DAILY.IP', | |
'KA.D.MXP.DAILY.IP', | |
'KA.D.MCB.DAILY.IP', | |
'KA.D.MCKS.DAILY.IP', | |
'KA.D.MCLSLN.DAILY.IP', | |
'KA.D.MCSLN.DAILY.IP', | |
'KA.D.MXCTLN.DAILY.IP', | |
'KA.D.QLTLN.DAILY.IP', | |
'KA.D.QPLN.DAILY.IP', | |
'KA.D.QUIZLN.DAILY.IP', | |
'KA.D.QIFLN.DAILY.IP', | |
'KA.D.QFILN.DAILY.IP', | |
'KA.D.QQ.DAILY.IP', | |
'KA.D.YNGA.DAILY.IP', | |
'KA.D.ZTF.DAILY.IP', | |
'KA.D.ZIOC.DAILY.IP', | |
'KA.D.ZPLALN.DAILY.IP', | |
'KA.D.ACL.DAILY.IP', | |
'KA.D.AMI.DAILY.IP', | |
'KA.D.AFRLN.DAILY.IP', | |
'KA.D.AMSLN.DAILY.IP', | |
'KA.D.ADMLN.DAILY.IP', | |
'KA.D.ACD.DAILY.IP', | |
'KA.D.AXSLN.DAILY.IP', | |
'KA.D.ABGLN.DAILY.IP', | |
'KA.D.ASITLN.DAILY.IP', | |
'KA.D.ASL.DAILY.IP', | |
'KA.D.EUK.DAILY.IP', | |
'KA.D.ASLILN.DAILY.IP', | |
'KA.D.BRAL.DAILY.IP', | |
'KA.D.ANW.DAILY.IP', | |
'KA.D.ABD.DAILY.IP', | |
'KA.D.ADMF.DAILY.IP', | |
'KA.D.AAS.DAILY.IP', | |
'KA.D.AAIF.DAILY.IP', | |
'KA.D.ABCLN.DAILY.IP', | |
'KA.D.AGIZLN.DAILY.IP', | |
'KA.D.AGITLN.DAILY.IP', | |
'KA.D.AFRB.DAILY.IP', | |
'KA.D.AFCLN.DAILY.IP', | |
'KA.D.ADESLN.DAILY.IP', | |
'KA.D.AALN.DAILY.IP', | |
'KA.D.ALBKLN.DAILY.IP', | |
'KA.D.AGK.DAILY.IP', | |
'KA.D.AIP.DAILY.IP', | |
'KA.D.WNL.DAILY.IP', | |
'KA.D.ANHLN.DAILY.IP', | |
'KA.D.AEFSLN.DAILY.IP', | |
'KA.D.ALDM.DAILY.IP', | |
'KA.D.AMGOLN.DAILY.IP', | |
'KA.D.ANLN.DAILY.IP', | |
'KA.D.APHLN.DAILY.IP', | |
'KA.D.RTT.DAILY.IP', | |
'KA.D.ALMLN.DAILY.IP', | |
'KA.D.ALFLN.DAILY.IP', | |
'KA.D.ATST.DAILY.IP', | |
'KA.D.ALFALN.DAILY.IP', | |
'KA.D.AMERLN.DAILY.IP', | |
'KA.D.AMC.DAILY.IP', | |
'KA.D.MDCLN.DAILY.IP', | |
'KA.D.AOLN.DAILY.IP', | |
'KA.D.ARWLN.DAILY.IP', | |
'KA.D.AEN.DAILY.IP', | |
'KA.D.APAXLN.DAILY.IP', | |
'KA.D.ANTO.DAILY.IP', | |
'KA.D.AEPLN.DAILY.IP', | |
'KA.D.APF.DAILY.IP', | |
'KA.D.AAL.DAILY.IP', | |
'KA.D.AAOGLN.DAILY.IP', | |
'KA.D.ARM.DAILY.IP', | |
'KA.D.ARBBLN.DAILY.IP', | |
'KA.D.NLGLN.DAILY.IP', | |
'KA.D.ARIXLN.DAILY.IP', | |
'KA.D.AQP.DAILY.IP', | |
'KA.D.ATS.DAILY.IP', | |
'KA.D.AGOLLN.DAILY.IP', | |
'KA.D.AGOULN.DAILY.IP', | |
'KA.D.ASC.DAILY.IP', | |
'KA.D.APTLN.DAILY.IP', | |
'KA.D.AV.DAILY.IP', | |
'KA.D.AVON.DAILY.IP', | |
'KA.D.ASHM.DAILY.IP', | |
'KA.D.AHT.DAILY.IP', | |
'KA.D.HPI.DAILY.IP', | |
'KA.D.ABF.DAILY.IP', | |
'KA.D.AGRLN.DAILY.IP', | |
'KA.D.AZN.DAILY.IP', | |
'KA.D.ATK.DAILY.IP', | |
'KA.D.ATMALN.DAILY.IP', | |
'KA.D.AUTOLN.DAILY.IP', | |
'KA.D.AVN.DAILY.IP', | |
'KA.D.AVV.DAILY.IP', | |
'KA.D.ASCLLN.DAILY.IP', | |
'KA.D.AVSTLN.DAILY.IP', | |
'KA.D.AVM.DAILY.IP', | |
'KA.D.BA.DAILY.IP', | |
'KA.D.BAG.DAILY.IP', | |
'KA.D.BHMULN.DAILY.IP', | |
'KA.D.BKMALN.DAILY.IP', | |
'KA.D.BACLN.DAILY.IP', | |
'KA.D.BOCHLN.DAILY.IP', | |
'KA.D.BWOLN.DAILY.IP', | |
'KA.D.BWY.DAILY.IP', | |
'KA.D.BZM.DAILY.IP', | |
'KA.D.BIFFLN.DAILY.IP', | |
'KA.D.BPCRLN.DAILY.IP', | |
'KA.D.BRCI.DAILY.IP', | |
'KA.D.BRGSLN.DAILY.IP', | |
'KA.D.BRNALN.DAILY.IP', | |
'KA.D.BSIFLN.DAILY.IP', | |
'KA.D.BABS.DAILY.IP', | |
'KA.D.BACTLN.DAILY.IP', | |
'KA.D.BGEO.DAILY.IP', | |
'KA.D.BRGE.DAILY.IP', | |
'KA.D.BVC.DAILY.IP', | |
'KA.D.BBA.DAILY.IP', | |
'KA.D.BBGILN.DAILY.IP', | |
'KA.D.BCALN.DAILY.IP', | |
'KA.D.BHGG.DAILY.IP', | |
'KA.D.BHGU.DAILY.IP', | |
'KA.D.BHME.DAILY.IP', | |
'KA.D.BHMG.DAILY.IP', | |
'KA.D.BLT.DAILY.IP', | |
'KA.D.BAB.DAILY.IP', | |
'KA.D.BPC.DAILY.IP', | |
'KA.D.BGFD.DAILY.IP', | |
'KA.D.BGS.DAILY.IP', | |
'KA.D.USALN.DAILY.IP', | |
'KA.D.BAKKLN.DAILY.IP', | |
'KA.D.BBY.DAILY.IP', | |
'KA.D.BNCLN.DAILY.IP', | |
'KA.D.BNKR.DAILY.IP', | |
'KA.D.BARC.DAILY.IP', | |
'KA.D.BDEV.DAILY.IP', | |
'KA.D.BHR.DAILY.IP', | |
'KA.D.BEZ.DAILY.IP', | |
'KA.D.BEG.DAILY.IP', | |
'KA.D.DVSG.DAILY.IP', | |
'KA.D.BKGLN.DAILY.IP', | |
'KA.D.BYG.DAILY.IP', | |
'KA.D.BIOG.DAILY.IP', | |
'KA.D.BRFILN.DAILY.IP', | |
'KA.D.BRSC.DAILY.IP', | |
'KA.D.BRWM.DAILY.IP', | |
'KA.D.BMY.DAILY.IP', | |
'KA.D.BOOLN.DAILY.IP', | |
'KA.D.INXLN.DAILY.IP', | |
'KA.D.BRBY.DAILY.IP', | |
'KA.D.BNZL.DAILY.IP', | |
'KA.D.BUT.DAILY.IP', | |
'KA.D.BRKLN.DAILY.IP', | |
'KA.D.BVIC.DAILY.IP', | |
'KA.D.BPI.DAILY.IP', | |
'KA.D.BLND.DAILY.IP', | |
'KA.D.BTEM.DAILY.IP', | |
'KA.D.BATS.DAILY.IP', | |
'KA.D.BRW.DAILY.IP', | |
'KA.D.BRAM.DAILY.IP', | |
'KA.D.BMSLN.DAILY.IP', | |
'KA.D.BLVN.DAILY.IP', | |
'KA.D.BVS.DAILY.IP', | |
'KA.D.BORLN.DAILY.IP', | |
'KA.D.BHY.DAILY.IP', | |
'KA.D.BOKLN.DAILY.IP', | |
'KA.D.BOY.DAILY.IP', | |
'KA.D.BGC.DAILY.IP', | |
'KA.D.BT.DAILY.IP', | |
'KA.D.BLZ.DAILY.IP', | |
'KA.D.XX300021E.DAILY.IP', | |
'KA.D.BP.DAILY.IP', | |
'KA.D.BMELN.DAILY.IP', | |
'KA.D.BSET.DAILY.IP', | |
'KA.D.CRM.DAILY.IP', | |
'KA.D.CWR.DAILY.IP', | |
'KA.D.NOP.DAILY.IP', | |
'KA.D.CRNLN.DAILY.IP', | |
'KA.D.CAPC.DAILY.IP', | |
'KA.D.CGS.DAILY.IP', | |
'KA.D.CAMLLN.DAILY.IP', | |
'KA.D.CNE.DAILY.IP', | |
'KA.D.CLDN.DAILY.IP', | |
'KA.D.CMBNLN.DAILY.IP', | |
'KA.D.CAMLN.DAILY.IP', | |
'KA.D.CDI.DAILY.IP', | |
'KA.D.CIU.DAILY.IP', | |
'KA.D.CPI.DAILY.IP', | |
'KA.D.CAL.DAILY.IP', | |
'KA.D.CGT.DAILY.IP', | |
'KA.D.CAR.DAILY.IP', | |
'KA.D.CARDLN.DAILY.IP', | |
'KA.D.CLLN.DAILY.IP', | |
'KA.D.CCLLN.DAILY.IP', | |
'KA.D.CPR.DAILY.IP', | |
'KA.D.CEY.DAILY.IP', | |
'KA.D.CAU.DAILY.IP', | |
'KA.D.CNA.DAILY.IP', | |
'KA.D.CBG.DAILY.IP', | |
'KA.D.CLGLN.DAILY.IP', | |
'KA.D.CLIN.DAILY.IP', | |
'KA.D.CKN.DAILY.IP', | |
'KA.D.CSHL.DAILY.IP', | |
'KA.D.CTY.DAILY.IP', | |
'KA.D.CLIG.DAILY.IP', | |
'KA.D.CYN.DAILY.IP', | |
'KA.D.CHY.DAILY.IP', | |
'KA.D.CIRCLN.DAILY.IP', | |
'KA.D.CIRLN.DAILY.IP', | |
'KA.D.CSN.DAILY.IP', | |
'KA.D.CHG.DAILY.IP', | |
'KA.D.CCFSLN.DAILY.IP', | |
'KA.D.CTR.DAILY.IP', | |
'KA.D.CAY.DAILY.IP', | |
'KA.D.CHARLN.DAILY.IP', | |
'KA.D.CGH.DAILY.IP', | |
'KA.D.CLI.DAILY.IP', | |
'KA.D.CINE.DAILY.IP', | |
'KA.D.CMCXLN.DAILY.IP', | |
'KA.D.KYS.DAILY.IP', | |
'KA.D.CCPELN.DAILY.IP', | |
'KA.D.CPPLN.DAILY.IP', | |
'KA.D.CVSG.DAILY.IP', | |
'KA.D.COB.DAILY.IP', | |
'KA.D.CRHLN.DAILY.IP', | |
'KA.D.CYBGLN.DAILY.IP', | |
'KA.D.COCHLN.DAILY.IP', | |
'KA.D.CMS.DAILY.IP', | |
'KA.D.CPG.DAILY.IP', | |
'KA.D.NWS.DAILY.IP', | |
'KA.D.CSRT.DAILY.IP', | |
'KA.D.GLOLN.DAILY.IP', | |
'KA.D.COSTLN.DAILY.IP', | |
'KA.D.CWDLN.DAILY.IP', | |
'KA.D.CWK.DAILY.IP', | |
'KA.D.CCPGLN.DAILY.IP', | |
'KA.D.CCC.DAILY.IP', | |
'KA.D.CSPLN.DAILY.IP', | |
'KA.D.CRSTLN.DAILY.IP', | |
'KA.D.CRDA.DAILY.IP', | |
'KA.D.CREILN.DAILY.IP', | |
'KA.D.CTECLN.DAILY.IP', | |
'KA.D.CVRLN.DAILY.IP', | |
'KA.D.CBPLN.DAILY.IP', | |
'KA.D.KESA.DAILY.IP', | |
'KA.D.DIL2LN.DAILY.IP', | |
'KA.D.DALLN.DAILY.IP', | |
'KA.D.DMTRLN.DAILY.IP', | |
'KA.D.DPH.DAILY.IP', | |
'KA.D.DVO.DAILY.IP', | |
'KA.D.DLNLN.DAILY.IP', | |
'KA.D.DMGT.DAILY.IP', | |
'KA.D.DEB.DAILY.IP', | |
'KA.D.DCCLN.DAILY.IP', | |
'KA.D.DLAR.DAILY.IP', | |
'KA.D.DTG.DAILY.IP', | |
'KA.D.DALRLN.DAILY.IP', | |
'KA.D.DJAN.DAILY.IP', | |
'KA.D.DAB.DAILY.IP', | |
'KA.D.DDDDLN.DAILY.IP', | |
'KA.D.DCG.DAILY.IP', | |
'KA.D.DFSLN.DAILY.IP', | |
'KA.D.DPEULN.DAILY.IP', | |
'KA.D.SMDS.DAILY.IP', | |
'KA.D.DWCGLN.DAILY.IP', | |
'KA.D.DXLN.DAILY.IP', | |
'KA.D.DGE.DAILY.IP', | |
'KA.D.DIA.DAILY.IP', | |
'KA.D.DTY.DAILY.IP', | |
'KA.D.DPLM.DAILY.IP', | |
'KA.D.DLGLN.DAILY.IP', | |
'KA.D.DIVILN.DAILY.IP', | |
'KA.D.CPW.DAILY.IP', | |
'KA.D.DNO.DAILY.IP', | |
'KA.D.DOM.DAILY.IP', | |
'KA.D.DUPD.DAILY.IP', | |
'KA.D.DRX.DAILY.IP', | |
'KA.D.DREFLN.DAILY.IP', | |
'KA.D.DNELN.DAILY.IP', | |
'KA.D.DIG.DAILY.IP', | |
'KA.D.DNDL.DAILY.IP', | |
'KA.D.DNLM.DAILY.IP', | |
'KA.D.EZJ.DAILY.IP', | |
'KA.D.ESPLN.DAILY.IP', | |
'KA.D.ECM.DAILY.IP', | |
'KA.D.ELALN.DAILY.IP', | |
'KA.D.ETI.DAILY.IP', | |
'KA.D.EPICEL.DAILY.IP', | |
'KA.D.EWI.DAILY.IP', | |
'KA.D.EGLLN.DAILY.IP', | |
'KA.D.EPO.DAILY.IP', | |
'KA.D.EMISLN.DAILY.IP', | |
'KA.D.888.DAILY.IP', | |
'KA.D.ELM.DAILY.IP', | |
'KA.D.ELTA.DAILY.IP', | |
'KA.D.EDIN.DAILY.IP', | |
'KA.D.EFM.DAILY.IP', | |
'KA.D.EKFLN.DAILY.IP', | |
'KA.D.E2V.DAILY.IP', | |
'KA.D.ESURLN.DAILY.IP', | |
'KA.D.EXPN.DAILY.IP', | |
'KA.D.EXOLN.DAILY.IP', | |
'KA.D.EXILN.DAILY.IP', | |
'KA.D.EVRLN.DAILY.IP', | |
'KA.D.FCU.DAILY.IP', | |
'KA.D.ERM.DAILY.IP', | |
'KA.D.FLTR.DAILY.IP', | |
'KA.D.EQNLN.DAILY.IP', | |
'KA.D.EPWNLN.DAILY.IP', | |
'KA.D.ETO.DAILY.IP', | |
'KA.D.EASLN.DAILY.IP', | |
'KA.D.ENOGLN.DAILY.IP', | |
'KA.D.ENQ.DAILY.IP', | |
'KA.D.EPGLN.DAILY.IP', | |
'KA.D.FEVRLN.DAILY.IP', | |
'KA.D.FXPO.DAILY.IP', | |
'KA.D.FENR.DAILY.IP', | |
'KA.D.FPM.DAILY.IP', | |
'KA.D.FCI.DAILY.IP', | |
'KA.D.FCPT.DAILY.IP', | |
'KA.D.FDMLN.DAILY.IP', | |
'KA.D.IRP.DAILY.IP', | |
'KA.D.FPEB.DAILY.IP', | |
'KA.D.FCSLN.DAILY.IP', | |
'KA.D.FOUR.DAILY.IP', | |
'KA.D.FJVSLN.DAILY.IP', | |
'KA.D.FAS.DAILY.IP', | |
'KA.D.FCSS.DAILY.IP', | |
'KA.D.FSV.DAILY.IP', | |
'KA.D.FDSALN.DAILY.IP', | |
'KA.D.FDL.DAILY.IP', | |
'KA.D.FGT.DAILY.IP', | |
'KA.D.FDPLN.DAILY.IP', | |
'KA.D.FLOL.DAILY.IP', | |
'KA.D.FRCL.DAILY.IP', | |
'KA.D.FSFLLN.DAILY.IP', | |
'KA.D.FOXTLN.DAILY.IP', | |
'KA.D.FCCN.DAILY.IP', | |
'KA.D.FRES.DAILY.IP', | |
'KA.D.FSTA.DAILY.IP', | |
'KA.D.FCIFLN.DAILY.IP', | |
'KA.D.FUTR.DAILY.IP', | |
'KA.D.FJV.DAILY.IP', | |
'KA.D.FEV.DAILY.IP', | |
'KA.D.FGP.DAILY.IP', | |
'KA.D.FLYB.DAILY.IP', | |
'KA.D.FORTLN.DAILY.IP', | |
'KA.D.GHGLN.DAILY.IP', | |
'KA.D.GECLN.DAILY.IP', | |
'KA.D.GEMLN.DAILY.IP', | |
'KA.D.GEMD.DAILY.IP', | |
'KA.D.GAMALN.DAILY.IP', | |
'KA.D.GAW.DAILY.IP', | |
'KA.D.VLRS.DAILY.IP', | |
'KA.D.PDXLN.DAILY.IP', | |
'KA.D.GFRD.DAILY.IP', | |
'KA.D.CGEOLN.DAILY.IP', | |
'KA.D.GNS.DAILY.IP', | |
'KA.D.GCPLN.DAILY.IP', | |
'KA.D.GKN.DAILY.IP', | |
'KA.D.GFS.DAILY.IP', | |
'KA.D.GBG.DAILY.IP', | |
'KA.D.GABCLN.DAILY.IP', | |
'KA.D.GABILN.DAILY.IP', | |
'KA.D.GMDLN.DAILY.IP', | |
'KA.D.HRI.DAILY.IP', | |
'KA.D.HSL.DAILY.IP', | |
'KA.D.HHI.DAILY.IP', | |
'KA.D.HFELLN.DAILY.IP', | |
'KA.D.HNE.DAILY.IP', | |
'KA.D.SVG.DAILY.IP', | |
'KA.D.HINTLN.DAILY.IP', | |
'KA.D.HLCL.DAILY.IP', | |
'KA.D.HVN.DAILY.IP', | |
'KA.D.HSD.DAILY.IP', | |
'KA.D.HDIVLN.DAILY.IP', | |
'KA.D.HSTGLN.DAILY.IP', | |
'KA.D.HVPELN.DAILY.IP', | |
'KA.D.HWSLLN.DAILY.IP', | |
'KA.D.HOTLN.DAILY.IP', | |
'KA.D.HGI.DAILY.IP', | |
'KA.D.GGL.DAILY.IP', | |
'KA.D.GEO.DAILY.IP', | |
'KA.D.HEAD.DAILY.IP', | |
'KA.D.HAS.DAILY.IP', | |
'KA.D.HSP.DAILY.IP', | |
'KA.D.HSTN.DAILY.IP', | |
'KA.D.HL.DAILY.IP', | |
'KA.D.HAN.DAILY.IP', | |
'KA.D.HMSO.DAILY.IP', | |
'KA.D.HLMA.DAILY.IP', | |
'KA.D.HFD.DAILY.IP', | |
'KA.D.HDY.DAILY.IP', | |
'KA.D.HAT.DAILY.IP', | |
'KA.D.HURLN.DAILY.IP', | |
'KA.D.HNT.DAILY.IP', | |
'KA.D.GFRM.DAILY.IP', | |
'KA.D.HOME.DAILY.IP', | |
'KA.D.HFG.DAILY.IP', | |
'KA.D.HTG.DAILY.IP', | |
'KA.D.HSV.DAILY.IP', | |
'KA.D.BOWLLN.DAILY.IP', | |
'KA.D.HRG.DAILY.IP', | |
'KA.D.HOC.DAILY.IP', | |
'KA.D.HSX.DAILY.IP', | |
'KA.D.HILS.DAILY.IP', | |
'KA.D.HGT.DAILY.IP', | |
'KA.D.HSSLN.DAILY.IP', | |
'KA.D.HICL.DAILY.IP', | |
'KA.D.HYC.DAILY.IP', | |
'KA.D.HUNTLN.DAILY.IP', | |
'KA.D.HSWLN.DAILY.IP', | |
'KA.D.HRN.DAILY.IP', | |
'KA.D.HIK.DAILY.IP', | |
'KA.D.HGM.DAILY.IP', | |
'KA.D.HBRNLN.DAILY.IP', | |
'KA.D.HSBA.DAILY.IP', | |
'KA.D.IVO.DAILY.IP', | |
'KA.D.IMT.DAILY.IP', | |
'KA.D.IEM.DAILY.IP', | |
'KC.D.IKALN.DAILY.IP', | |
'KA.D.IBSTLN.DAILY.IP', | |
'KA.D.IMI.DAILY.IP', | |
'KA.D.IGAS.DAILY.IP', | |
'KA.D.IFPLN.DAILY.IP', | |
'KA.D.IDOX.DAILY.IP', | |
'KA.D.LBOWLN.DAILY.IP', | |
'KA.D.IAP.DAILY.IP', | |
'KA.D.3IN.DAILY.IP', | |
'KA.D.III.DAILY.IP', | |
'KA.D.IEHLN.DAILY.IP', | |
'KA.D.IPU.DAILY.IP', | |
'KA.D.IVI.DAILY.IP', | |
'KA.D.LII.DAILY.IP', | |
'KA.D.ITRK.DAILY.IP', | |
'KA.D.BBPP.DAILY.IP', | |
'KA.D.IFLLN.DAILY.IP', | |
'KA.D.BAY.DAILY.IP', | |
'KA.D.IBT.DAILY.IP', | |
'KA.D.IHG.DAILY.IP', | |
'KA.D.SKINLN.DAILY.IP', | |
'KA.D.IDHCLN.DAILY.IP', | |
'KA.D.IHPLN.DAILY.IP', | |
'KA.D.INDVLN.DAILY.IP', | |
'KA.D.IAT.DAILY.IP', | |
'KA.D.INVP.DAILY.IP', | |
'KA.D.IRV.DAILY.IP', | |
'KA.D.INTQ.DAILY.IP', | |
'KA.D.IPF.DAILY.IP', | |
'KA.D.ICP.DAILY.IP', | |
'KA.D.ISAT.DAILY.IP', | |
'KA.D.TFILN.DAILY.IP', | |
'KA.D.INDI.DAILY.IP', | |
'KA.D.INCH.DAILY.IP', | |
'KA.D.JRGLN.DAILY.IP', | |
'KA.D.JELN.DAILY.IP', | |
'KA.D.FSC.DAILY.IP', | |
'KA.D.JPGLN.DAILY.IP', | |
'KA.D.JUP.DAILY.IP', | |
'KA.D.JEO.DAILY.IP', | |
'KA.D.MATELN.DAILY.IP', | |
'KA.D.JPR.DAILY.IP', | |
'KA.D.JSG.DAILY.IP', | |
'KA.D.JMAT.DAILY.IP', | |
'KA.D.WG.DAILY.IP', | |
'KA.D.MNZS.DAILY.IP', | |
'KA.D.JLIFLN.DAILY.IP', | |
'KA.D.JLGLN.DAILY.IP', | |
'KA.D.JLENLN.DAILY.IP', | |
'KA.D.CHOOLN.DAILY.IP', | |
'KA.D.JARLN.DAILY.IP', | |
'KA.D.JLT.DAILY.IP', | |
'KA.D.JHD.DAILY.IP', | |
'KA.D.FSJ.DAILY.IP', | |
'KA.D.JPJLN.DAILY.IP', | |
'KA.D.TBCGLN.DAILY.IP', | |
'KA.D.JPSSLN.DAILY.IP', | |
'KA.D.JPS.DAILY.IP', | |
'KA.D.JPU.DAILY.IP', | |
'KA.D.JMI.DAILY.IP', | |
'KA.D.JPSLLN.DAILY.IP', | |
'KA.D.JRSLN.DAILY.IP', | |
'KA.D.JMF.DAILY.IP', | |
'KA.D.JFJ.DAILY.IP', | |
'KA.D.JMO.DAILY.IP', | |
'KA.D.JGCILN.DAILY.IP', | |
'KA.D.JETI.DAILY.IP', | |
'KA.D.JETG.DAILY.IP', | |
'KA.D.JFF.DAILY.IP', | |
'KA.D.JCH.DAILY.IP', | |
'KA.D.JMC.DAILY.IP', | |
'KA.D.JAILN.DAILY.IP', | |
'KA.D.JAM.DAILY.IP', | |
'KA.D.JII.DAILY.IP', | |
'KA.D.JDW.DAILY.IP', | |
'KA.D.JD.DAILY.IP', | |
'KA.D.KGHLN.DAILY.IP', | |
'KA.D.KSK.DAILY.IP', | |
'KA.D.KCOM.DAILY.IP', | |
'KA.D.KAZ.DAILY.IP', | |
'KC.D.KAKULN.DAILY.IP', | |
'KA.D.KLR.DAILY.IP', | |
'KA.D.KMRLN.DAILY.IP', | |
'KA.D.KWELN.DAILY.IP', | |
'KA.D.KIT.DAILY.IP', | |
'KA.D.KIE.DAILY.IP', | |
'KA.D.KGF.DAILY.IP', | |
'KC.D.KAYLN.DAILY.IP', | |
'KA.D.KNOSLN.DAILY.IP', | |
'KC.D.KATLN.DAILY.IP', | |
'KA.D.KOSLN.DAILY.IP', | |
'KA.D.LXBLN.DAILY.IP', | |
'KA.D.LMSLN.DAILY.IP', | |
'KA.D.LSL.DAILY.IP', | |
'KA.D.LRD.DAILY.IP', | |
'KA.D.LAM.DAILY.IP', | |
'KA.D.LRE.DAILY.IP', | |
'KA.D.LAND.DAILY.IP', | |
'KA.D.LWDB.DAILY.IP', | |
'KA.D.LDP.DAILY.IP', | |
'KA.D.LLOY.DAILY.IP', | |
'KA.D.LSE.DAILY.IP', | |
'KA.D.LVD.DAILY.IP', | |
'KA.D.LGEN.DAILY.IP', | |
'KA.D.LMI.DAILY.IP', | |
'KA.D.LEKLN.DAILY.IP', | |
'KA.D.LIO.DAILY.IP', | |
'KA.D.LIVNLN.DAILY.IP', | |
'KA.D.LIV.DAILY.IP', | |
'KA.D.LSPLN.DAILY.IP', | |
'KA.D.LOOK.DAILY.IP', | |
'KA.D.LWB.DAILY.IP', | |
'KA.D.LWI.DAILY.IP', | |
'KA.D.LXILN.DAILY.IP', | |
'KA.D.LADLN.DAILY.IP', | |
'KA.D.LAKELN.DAILY.IP', | |
'KA.D.ALY.DAILY.IP', | |
'KA.D.LSLILN.DAILY.IP', | |
'KA.D.LUCELN.DAILY.IP', | |
'KA.D.LSRLN.DAILY.IP', | |
'KA.D.MAB.DAILY.IP', | |
'KA.D.MIDWLN.DAILY.IP', | |
'KA.D.MCRO.DAILY.IP', | |
'KA.D.MTROLN.DAILY.IP', | |
'KA.D.MPI.DAILY.IP', | |
'KA.D.MTO.DAILY.IP', | |
'KA.D.MLDLN.DAILY.IP', | |
'KA.D.MLC.DAILY.IP', | |
'KA.D.MCTLN.DAILY.IP', | |
'KA.D.MERLLN.DAILY.IP', | |
'KA.D.JFM.DAILY.IP', | |
'KA.D.MROLN.DAILY.IP', | |
'KA.D.MGPLN.DAILY.IP', | |
'KA.D.MXFLN.DAILY.IP', | |
'KA.D.MERLN.DAILY.IP', | |
'KA.D.MGGT.DAILY.IP', | |
'KA.D.MRCH.DAILY.IP', | |
'KA.D.MUT.DAILY.IP', | |
'KA.D.MYTLN.DAILY.IP', | |
'KA.D.MYSLLN.DAILY.IP', | |
'KA.D.MUL.DAILY.IP', | |
'KA.D.MTFBLN.DAILY.IP', | |
'KA.D.MTC.DAILY.IP', | |
'KA.D.MTELN.DAILY.IP', | |
'KA.D.MGCR.DAILY.IP', | |
'KA.D.MOTRLN.DAILY.IP', | |
'KA.D.MAB1LN.DAILY.IP', | |
'KA.D.MGNS.DAILY.IP', | |
'KA.D.MCLLN.DAILY.IP', | |
'KA.D.MONILN.DAILY.IP', | |
'KA.D.MONY.DAILY.IP', | |
'KA.D.MOSB.DAILY.IP', | |
'KA.D.MPE.DAILY.IP', | |
'KA.D.MKLW.DAILY.IP', | |
'KA.D.MTVWLN.DAILY.IP', | |
'KA.D.MRW.DAILY.IP', | |
'KA.D.MNKS.DAILY.IP', | |
'KA.D.MNDI.DAILY.IP', | |
'KA.D.GLE.DAILY.IP', | |
'KA.D.MTU.DAILY.IP', | |
'KC.D.MKALN.DAILY.IP', | |
'KA.D.MYI.DAILY.IP', | |
'KA.D.NUM.DAILY.IP', | |
'KA.D.NVA.DAILY.IP', | |
'KA.D.NOGLN.DAILY.IP', | |
'KA.D.NTG.DAILY.IP', | |
'KA.D.NAS.DAILY.IP', | |
'KA.D.EUS.DAILY.IP', | |
'KA.D.NXR.DAILY.IP', | |
'KA.D.HAWKLN.DAILY.IP', | |
'KA.D.NICL.DAILY.IP', | |
'KA.D.NESFLN.DAILY.IP', | |
'KA.D.NXT.DAILY.IP', | |
'KA.D.NWR.DAILY.IP', | |
'KA.D.NGT.DAILY.IP', | |
'KA.D.NEX.DAILY.IP', | |
'KA.D.NMC.DAILY.IP', | |
'KA.D.NXGLN.DAILY.IP', | |
'KA.D.NCCLN.DAILY.IP', | |
'KA.D.NBLSLN.DAILY.IP', | |
'KA.D.NAHLN.DAILY.IP', | |
'KA.D.BWNG.DAILY.IP', | |
'KA.D.NII.DAILY.IP', | |
'KA.D.NCYF.DAILY.IP', | |
'KA.D.NBLULN.DAILY.IP', | |
'KA.D.EVCLN.DAILY.IP', | |
'KA.D.NBPELN.DAILY.IP', | |
'KA.D.OMULN.DAILY.IP', | |
'KA.D.OXS.DAILY.IP', | |
'KA.D.OXB.DAILY.IP', | |
'KA.D.OSBLN.DAILY.IP', | |
'KA.D.OML.DAILY.IP', | |
'KA.D.OPHR.DAILY.IP', | |
'KA.D.OXIG.DAILY.IP', | |
'KA.D.OCDO.DAILY.IP', | |
'KA.D.OBDLN.DAILY.IP', | |
'KA.D.OXASLN.DAILY.IP', | |
'KA.D.OTBLN.DAILY.IP', | |
'KA.D.OLOTLN.DAILY.IP', | |
'KA.D.IRET.DAILY.IP', | |
'KA.D.PLUSLN.DAILY.IP', | |
'KA.D.POS.DAILY.IP', | |
'KA.D.PTEC.DAILY.IP', | |
'KA.D.PHTM.DAILY.IP', | |
'KA.D.PHNXLN.DAILY.IP', | |
'KA.D.PHC.DAILY.IP', | |
'KA.D.PETSLN.DAILY.IP', | |
'KA.D.POG.DAILY.IP', | |
'KA.D.PMGLN.DAILY.IP', | |
'KA.D.PCI.DAILY.IP', | |
'KA.D.PAY.DAILY.IP', | |
'KA.D.PNLLN.DAILY.IP', | |
'KA.D.PSN.DAILY.IP', | |
'KA.D.PLI.DAILY.IP', | |
'KA.D.PKGLN.DAILY.IP', | |
'KA.D.PNN.DAILY.IP', | |
'KA.D.PDL.DAILY.IP', | |
'KA.D.PDG.DAILY.IP', | |
'KA.D.PSON.DAILY.IP', | |
'KA.D.PAG.DAILY.IP', | |
'KA.D.PRGLN.DAILY.IP', | |
'KA.D.PANR.DAILY.IP', | |
'KA.D.PFC.DAILY.IP', | |
'KA.D.PHI.DAILY.IP', | |
'KA.D.PAC.DAILY.IP', | |
'KA.D.PAF.DAILY.IP', | |
'KA.D.IL0ALN.DAILY.IP', | |
'KA.D.PSHLN.DAILY.IP', | |
'KA.D.CAKELN.DAILY.IP', | |
'KA.D.PWS.DAILY.IP', | |
'KA.D.NLR.DAILY.IP', | |
'KA.D.PPBLN.DAILY.IP', | |
'KA.D.PIN.DAILY.IP', | |
'KA.D.PFG.DAILY.IP', | |
'KA.D.PEYLN.DAILY.IP', | |
'KA.D.AKT.DAILY.IP', | |
'KA.D.PURE.DAILY.IP', | |
'KA.D.PRTCLN.DAILY.IP', | |
'KA.D.PRU.DAILY.IP', | |
'KA.D.PRV.DAILY.IP', | |
'KA.D.PRM.DAILY.IP', | |
'KA.D.PXOGLN.DAILY.IP', | |
'KA.D.PRW.DAILY.IP', | |
'KA.D.PHP.DAILY.IP', | |
'KA.D.PPCLN.DAILY.IP', | |
'KA.D.PFD.DAILY.IP', | |
'KA.D.PFL.DAILY.IP', | |
'KA.D.POWR.DAILY.IP', | |
'KA.D.PLNDLN.DAILY.IP', | |
'KA.D.PCGHLN.DAILY.IP', | |
'KA.D.PMO.DAILY.IP', | |
'KA.D.PLPLN.DAILY.IP', | |
'KA.D.POLY.DAILY.IP', | |
'KA.D.PRL.DAILY.IP', | |
'KA.D.PCT.DAILY.IP', | |
'KA.D.POLR.DAILY.IP', | |
'KA.D.PXS.DAILY.IP', | |
'KA.D.PZC.DAILY.IP', | |
'KA.D.PUBLN.DAILY.IP', | |
'KA.D.PVCS.DAILY.IP', | |
'KA.D.PURPLN.DAILY.IP', | |
'KA.D.PCFTLN.DAILY.IP', | |
'KA.D.RELNPF.DAILY.IP', | |
'KA.D.RGU.DAILY.IP', | |
'KA.D.RELN.DAILY.IP', | |
'KA.D.RRLLN.DAILY.IP', | |
'KA.D.RNK.DAILY.IP', | |
'KA.D.RAT.DAILY.IP', | |
'KA.D.RBGLN.DAILY.IP', | |
'KA.D.RECILN.DAILY.IP', | |
'KA.D.REC.DAILY.IP', | |
'KA.D.RB.DAILY.IP', | |
'KA.D.RMP.DAILY.IP', | |
'KA.D.RPT.DAILY.IP', | |
'KA.D.RCNLN.DAILY.IP', | |
'KA.D.RDW.DAILY.IP', | |
'KA.D.REL.DAILY.IP', | |
'KA.D.RRS.DAILY.IP', | |
'KA.D.RGLLN.DAILY.IP', | |
'KA.D.TRIGLN.DAILY.IP', | |
'KA.D.RSW.DAILY.IP', | |
'KA.D.RTO.DAILY.IP', | |
'KA.D.RNOLN.DAILY.IP', | |
'KA.D.RTNLN.DAILY.IP', | |
'KA.D.REX.DAILY.IP', | |
'KA.D.WICH.DAILY.IP', | |
'KA.D.RDLLN.DAILY.IP', | |
'KA.D.RHMLNN.DAILY.IP', | |
'KA.D.RCILN.DAILY.IP', | |
'KA.D.RUSLN.DAILY.IP', | |
'KA.D.HHR.DAILY.IP', | |
'KA.D.RESILN.DAILY.IP', | |
'KA.D.RVGLN.DAILY.IP', | |
'KA.D.RNWH.DAILY.IP', | |
'KA.D.RRELN.DAILY.IP', | |
'KA.D.RHIMLN.DAILY.IP', | |
'KA.D.RICA.DAILY.IP', | |
'KA.D.RMGLN.DAILY.IP', | |
'KA.D.RDSA.DAILY.IP', | |
'KA.D.RCDO.DAILY.IP', | |
'KA.D.RDSB.DAILY.IP', | |
'KA.D.RBS.DAILY.IP', | |
'KA.D.RKHLN.DAILY.IP', | |
'KA.D.RWA.DAILY.IP', | |
'KA.D.RIVLN.DAILY.IP', | |
'KA.D.RIO.DAILY.IP', | |
'KA.D.ROR.DAILY.IP', | |
'KA.D.RSA.DAILY.IP', | |
'KA.D.RR.DAILY.IP', | |
'KA.D.RMV.DAILY.IP', | |
'KA.D.RWS.DAILY.IP', | |
'KA.D.RPOLN.DAILY.IP', | |
'KA.D.RPS.DAILY.IP', | |
'KA.D.RPC.DAILY.IP', | |
'KA.D.RM.DAILY.IP', | |
'KA.D.RCP.DAILY.IP', | |
'KA.D.RSELN.DAILY.IP', | |
'KA.D.BLNX.DAILY.IP', | |
'KA.D.SHRS.DAILY.IP', | |
'KA.D.SHP.DAILY.IP', | |
'KA.D.SDRC.DAILY.IP', | |
'KA.D.SHB.DAILY.IP', | |
'KA.D.SDU.DAILY.IP', | |
'KA.D.SVT.DAILY.IP', | |
'KA.D.SOILN.DAILY.IP', | |
'KA.D.SERVLN.DAILY.IP', | |
'KA.D.SRP.DAILY.IP', | |
'KA.D.SEQILN.DAILY.IP', | |
'KA.D.SNR.DAILY.IP', | |
'KA.D.STS.DAILY.IP', | |
'KA.D.SITLN.DAILY.IP', | |
'KA.D.SST.DAILY.IP', | |
'KA.D.SMT.DAILY.IP', | |
'KA.D.SCAM.DAILY.IP', | |
'KA.D.SCF.DAILY.IP', | |
'KA.D.STBLN.DAILY.IP', | |
'KA.D.SEPU.DAILY.IP', | |
'KA.D.SGROLN.DAILY.IP', | |
'KA.D.SDR.DAILY.IP', | |
'KA.D.SJG.DAILY.IP', | |
'KA.D.SCIN.DAILY.IP', | |
'KA.D.SCP.DAILY.IP', | |
'KA.D.IFD.DAILY.IP', | |
'KA.D.SQZ.DAILY.IP', | |
'KA.D.IGRE.DAILY.IP', | |
'KA.D.SERELN.DAILY.IP', | |
'KA.D.SDP.DAILY.IP', | |
'KA.D.SCSLN.DAILY.IP', | |
'KA.D.SDL.DAILY.IP', | |
'KA.D.SCPA.DAILY.IP', | |
'KA.D.SEPLLN.DAILY.IP', | |
'KA.D.SVS.DAILY.IP', | |
'KA.D.0VGMLN.DAILY.IP', | |
'KA.D.SLELN.DAILY.IP', | |
'KA.D.SBRY.DAILY.IP', | |
'KA.D.SGE.DAILY.IP', | |
'KA.D.SAGALN.DAILY.IP', | |
'KA.D.SAFE.DAILY.IP', | |
'KA.D.SAB.DAILY.IP', | |
'KA.D.SFELN.DAILY.IP', | |
'KA.D.SBRELN.DAILY.IP', | |
'KA.D.SAA.DAILY.IP', | |
'KA.D.SKS.DAILY.IP', | |
'KA.D.SNNLN.DAILY.IP', | |
'KA.D.SFR.DAILY.IP', | |
'KA.D.ASM.DAILY.IP', | |
'KA.D.SHI.DAILY.IP', | |
'KA.D.SLNLN.DAILY.IP', | |
'KA.D.SKP.DAILY.IP', | |
'KA.D.SIA.DAILY.IP', | |
'KA.D.SIG.DAILY.IP', | |
'KA.D.SPH.DAILY.IP', | |
'KA.D.SXXLN.DAILY.IP', | |
'KA.D.SMSLN.DAILY.IP', | |
'KA.D.SN.DAILY.IP', | |
'KA.D.SPX.DAILY.IP', | |
'KA.D.SMIN.DAILY.IP', | |
'KA.D.SXS.DAILY.IP', | |
'KA.D.SDY.DAILY.IP', | |
'KA.D.SPIR.DAILY.IP', | |
'KA.D.SPT.DAILY.IP', | |
'KA.D.SPO.DAILY.IP', | |
'KA.D.SPD.DAILY.IP', | |
'KA.D.S32LN.DAILY.IP', | |
'KA.D.BSY.DAILY.IP', | |
'KA.D.SKGPLN.DAILY.IP', | |
'KA.D.SCTLN.DAILY.IP', | |
'KA.D.SOPHLN.DAILY.IP', | |
'KA.D.STPLN.DAILY.IP', | |
'KA.D.STELN.DAILY.IP', | |
'KA.D.SUMOLN.DAILY.IP', | |
'KA.D.SLLN.DAILY.IP', | |
'KA.D.SVI.DAILY.IP', | |
'KA.D.KETLLN.DAILY.IP', | |
'KA.D.YULC.DAILY.IP', | |
'KA.D.SIHL.DAILY.IP', | |
'KA.D.SECLN.DAILY.IP', | |
'KA.D.STCKLN.DAILY.IP', | |
'KA.D.STOB.DAILY.IP', | |
'KA.D.SWEFLN.DAILY.IP', | |
'KA.D.STHR.DAILY.IP', | |
'KA.D.SEY.DAILY.IP', | |
'KA.D.SLS.DAILY.IP', | |
'KA.D.SLI.DAILY.IP', | |
'KA.D.SEPLN.DAILY.IP', | |
'KA.D.STAN.DAILY.IP', | |
'KA.D.SGC.DAILY.IP', | |
'KA.D.STAF.DAILY.IP', | |
'KA.D.SMP.DAILY.IP', | |
'KA.D.STJ.DAILY.IP', | |
'KA.D.SIV.DAILY.IP', | |
'KA.D.SMG.DAILY.IP', | |
'KA.D.SSPGLN.DAILY.IP', | |
'KA.D.SSE.DAILY.IP', | |
'KA.D.SUSLN.DAILY.IP', | |
'KA.D.SGPLN.DAILY.IP', | |
'KA.D.SQNXLN.DAILY.IP', | |
'KA.D.SQNLN.DAILY.IP', | |
'KA.D.SLET.DAILY.IP', | |
'KA.D.THRLN.DAILY.IP', | |
'KA.D.TCGLN.DAILY.IP', | |
'KA.D.TPOULN.DAILY.IP', | |
'KA.D.SBIZLN.DAILY.IP', | |
'KA.D.TSCO.DAILY.IP', | |
'KA.D.3LEG.DAILY.IP', | |
'KA.D.WTRLN.DAILY.IP', | |
'KA.D.TENGLN.DAILY.IP', | |
'KA.D.TEGLN.DAILY.IP', | |
'KA.D.TMPL.DAILY.IP', | |
'KA.D.TEFLN.DAILY.IP', | |
'KA.D.TCMLN.DAILY.IP', | |
'KA.D.TATE.DAILY.IP', | |
'KA.D.TEP.DAILY.IP', | |
'KA.D.TBK.DAILY.IP', | |
'KA.D.TWLN.DAILY.IP', | |
'KA.D.TAMLN.DAILY.IP', | |
'KA.D.TRS.DAILY.IP', | |
'KA.D.THRG.DAILY.IP', | |
'KA.D.TANLN.DAILY.IP', | |
'KA.D.TALK.DAILY.IP', | |
'KA.D.TFW.DAILY.IP', | |
'KA.D.CTO.DAILY.IP', | |
'KA.D.TTR.DAILY.IP', | |
'KA.D.TNI.DAILY.IP', | |
'KA.D.TUILN.DAILY.IP', | |
'KA.D.TIFSLN.DAILY.IP', | |
'KA.D.TRG.DAILY.IP', | |
'KA.D.TLW.DAILY.IP', | |
'KA.D.TRY.DAILY.IP', | |
'KA.D.TTG.DAILY.IP', | |
'KA.D.TRE.DAILY.IP', | |
'KA.D.TILSLN.DAILY.IP', | |
'KA.D.TOMLN.DAILY.IP', | |
'KA.D.TPT.DAILY.IP', | |
'KA.D.TRK.DAILY.IP', | |
'KA.D.TPK.DAILY.IP', | |
'KA.D.TCSC.DAILY.IP', | |
'KA.D.TRBLN.DAILY.IP', | |
'KA.D.TRI.DAILY.IP', | |
'KA.D.TFIFLN.DAILY.IP', | |
'KA.D.TPV1LN.DAILY.IP', | |
'KA.D.TMTLN.DAILY.IP', | |
'KA.D.TLPR.DAILY.IP', | |
'KA.D.BEHLN.DAILY.IP', | |
'KA.D.SMIFLN.DAILY.IP', | |
'KA.D.TUNGLN.DAILY.IP', | |
'KA.D.LUP.DAILY.IP', | |
'KA.D.SOHOLN.DAILY.IP', | |
'KA.D.BBOXLN.DAILY.IP', | |
'KA.D.GLS.DAILY.IP', | |
'KA.D.UTV.DAILY.IP', | |
'KA.D.UPGSLN.DAILY.IP', | |
'KA.D.UCP.DAILY.IP', | |
'KA.D.UU.DAILY.IP', | |
'KA.D.UTWLN.DAILY.IP', | |
'KA.D.ULVR.DAILY.IP', | |
'KA.D.ULE.DAILY.IP', | |
'KA.D.UKRLN.DAILY.IP', | |
'KA.D.ULSLN.DAILY.IP', | |
'KA.D.UKMLLN.DAILY.IP', | |
'KA.D.BPG.DAILY.IP', | |
'KA.D.UKCM.DAILY.IP', | |
'KA.D.THG.DAILY.IP', | |
'KA.D.UTG.DAILY.IP', | |
'KA.D.UBM.DAILY.IP', | |
'KA.D.DSCLN.DAILY.IP', | |
'KA.D.UDG.DAILY.IP', | |
'KA.D.VVOLN.DAILY.IP', | |
'KA.D.VCT.DAILY.IP', | |
'KA.D.VTC.DAILY.IP', | |
'KA.D.FANLN.DAILY.IP', | |
'KA.D.VP.DAILY.IP', | |
'KA.D.VEILLN.DAILY.IP', | |
'KA.D.VLX.DAILY.IP', | |
'KA.D.VTU.DAILY.IP', | |
'KA.D.VED.DAILY.IP', | |
'KA.D.VER.DAILY.IP', | |
'KA.D.OCG.DAILY.IP', | |
'KA.D.VOG.DAILY.IP', | |
'KA.D.VEC.DAILY.IP', | |
'KA.D.VIN.DAILY.IP', | |
'KA.D.VOD.DAILY.IP', | |
'KA.D.VMLN.DAILY.IP', | |
'KA.D.VSLLN.DAILY.IP', | |
'KA.D.CKSN.DAILY.IP', | |
'KA.D.VZCLN.DAILY.IP', | |
'KA.D.FWP.DAILY.IP', | |
'KA.D.WPYLN.DAILY.IP', | |
'KA.D.WAN2LN.DAILY.IP', | |
'KA.D.WOS.DAILY.IP', | |
'KA.D.WPGLN.DAILY.IP', | |
'KA.D.WKP.DAILY.IP', | |
'KA.D.WPCTLN.DAILY.IP', | |
'KA.D.WIZZLN.DAILY.IP', | |
'KA.D.WTB.DAILY.IP', | |
'KA.D.WPC.DAILY.IP', | |
'KA.D.WTAN.DAILY.IP', | |
'KA.D.WPP.DAILY.IP', | |
'KA.D.WIN.DAILY.IP', | |
'KA.D.WIL.DAILY.IP', | |
'KA.D.WMH.DAILY.IP', | |
'KA.D.WEIR.DAILY.IP', | |
'KA.D.QPP.DAILY.IP', | |
'KA.D.SMWH.DAILY.IP', | |
'KA.D.XSGLN.DAILY.IP', | |
'KA.D.XAFLN.DAILY.IP', | |
'KA.D.XAR.DAILY.IP', | |
'KA.D.XELLN.DAILY.IP', | |
'KA.D.XCH.DAILY.IP', | |
'KA.D.XPP.DAILY.IP'] | |
# ALL EPICS | |
# TESTING | |
# main_epic_ids = [ | |
# 'KA.D.CAMLN.DAILY.IP', | |
# 'KA.D.EVRLN.DAILY.IP', | |
# 'KA.D.SCSLN.DAILY.IP', | |
# 'KA.D.RIO.DAILY.IP', | |
# 'KA.D.PSN.DAILY.IP', | |
# 'KA.D.BMY.DAILY.IP', | |
# 'KA.D.KLR.DAILY.IP', | |
# 'KA.D.BKGLN.DAILY.IP', | |
# 'KA.D.HSTN.DAILY.IP', | |
# 'KA.D.RMGLN.DAILY.IP', | |
# 'KA.D.AAL.DAILY.IP', | |
# 'KA.D.PLUSLN.DAILY.IP', | |
# 'KA.D.INCH.DAILY.IP', | |
# 'KA.D.ETI.DAILY.IP', | |
# 'KA.D.EZJ.DAILY.IP', | |
# 'KA.D.CMCXLN.DAILY.IP', | |
# 'KA.D.IGAS.DAILY.IP', | |
# 'KA.D.IGLNLN.DAILY.IP', | |
# 'KA.D.IGLOLN.DAILY.IP', | |
# 'KA.D.IGCCLN.DAILY.IP', | |
# 'KA.D.IGSDLN.DAILY.IP', | |
# 'KA.D.IGSGLN.DAILY.IP', | |
# 'KA.D.IGSULN.DAILY.IP', | |
# 'KA.D.IGEALN.DAILY.IP', | |
# 'KA.D.IGHYLN.DAILY.IP', | |
# 'KA.D.BP.DAILY.IP', | |
# 'KA.D.XX300021E.DAILY.IP', | |
# 'KA.D.CMS.DAILY.IP', | |
# 'KA.D.RM.DAILY.IP', | |
# 'KA.D.RMGLN.DAILY.IP', | |
# 'KA.D.BLT.DAILY.IP', | |
# 'KA.D.TWLN.DAILY.IP', | |
# 'KA.D.NUM.DAILY.IP', | |
# 'KA.D.CLIG.DAILY.IP', | |
# 'KA.D.CTY.DAILY.IP', | |
# 'KA.D.ANTO.DAILY.IP', | |
# 'KA.D.CKSN.DAILY.IP', | |
# 'KA.D.GOG.DAILY.IP', | |
# 'KA.D.BA.DAILY.IP', | |
# 'KA.D.RWA.DAILY.IP', | |
# 'KA.D.MGNS.DAILY.IP', | |
# 'KA.D.BVS.DAILY.IP', | |
# 'KA.D.BAY.DAILY.IP', | |
# 'KA.D.TATE.DAILY.IP', | |
# 'KA.D.GSK.DAILY.IP', | |
# 'KA.D.DLNLN.DAILY.IP', | |
# 'KA.D.CLIG.DAILY.IP', | |
# 'KA.D.CTY.DAILY.IP', | |
# 'KA.D.LSE.DAILY.IP', | |
# 'KA.D.LSPLN.DAILY.IP', | |
# 'KA.D.LSLILN.DAILY.IP', | |
# 'KA.D.CCC.DAILY.IP', | |
# 'KA.D.CAMLN.DAILY.IP', | |
# 'KA.D.HVPELN.DAILY.IP', | |
# 'KA.D.HPRDLN.DAILY.IP', | |
# 'KA.D.HPROLN.DAILY.IP', | |
# 'KA.D.IPF.DAILY.IP', | |
# 'KA.D.COSTLN.DAILY.IP', | |
# 'KA.D.NXT.DAILY.IP', | |
# 'KA.D.NESFLN.DAILY.IP', | |
# 'KA.D.NJXELN.DAILY.IP', | |
# 'KA.D.NXKULN.DAILY.IP', | |
# 'KA.D.SPT.DAILY.IP', | |
# 'KA.D.POLR.DAILY.IP', | |
# 'KA.D.GAW.DAILY.IP', | |
# 'KA.D.WMH.DAILY.IP', | |
# 'KA.D.WIZZLN.DAILY.IP', | |
# 'KA.D.QQ.DAILY.IP', | |
# 'KA.D.HVN.DAILY.IP', | |
# 'KA.D.MNDI.DAILY.IP', | |
# 'KA.D.FXPO.DAILY.IP', | |
# 'KA.D.FORTLN.DAILY.IP', | |
# 'KA.D.FLOL.DAILY.IP', | |
# 'KA.D.STHR.DAILY.IP', | |
# 'KA.D.FDL.DAILY.IP', | |
# 'KA.D.SBRY.DAILY.IP', | |
# 'KA.D.POG.DAILY.IP'] | |
b_REAL = True | |
if b_REAL: | |
REAL_OR_NO_REAL = 'https://api.ig.com/gateway/deal' | |
API_ENDPOINT = "https://api.ig.com/gateway/deal/session" | |
API_KEY = 'Your API Key Here' | |
data = {"identifier": "Your Username Here", "password": "Your Password Here"} | |
else: | |
REAL_OR_NO_REAL = 'https://demo-api.ig.com/gateway/deal' | |
API_ENDPOINT = "https://demo-api.ig.com/gateway/deal/session" | |
API_KEY = 'Your API Key Here' | |
data = {"identifier": "Your Username Here", "password": "Your Password Here"} | |
headers = {'Content-Type': 'application/json; charset=utf-8', | |
'Accept': 'application/json; charset=utf-8', | |
'X-IG-API-KEY': API_KEY, | |
'Version': '2' | |
} | |
r = requests.post(API_ENDPOINT, data=json.dumps(data), headers=headers) | |
headers_json = dict(r.headers) | |
CST_token = headers_json["CST"] | |
print(R"CST : " + CST_token) | |
x_sec_token = headers_json["X-SECURITY-TOKEN"] | |
print(R"X-SECURITY-TOKEN : " + x_sec_token) | |
# GET ACCOUNTS | |
base_url = REAL_OR_NO_REAL + '/accounts' | |
authenticated_headers = {'Content-Type': 'application/json; charset=utf-8', | |
'Accept': 'application/json; charset=utf-8', | |
'X-IG-API-KEY': API_KEY, | |
'CST': CST_token, | |
'X-SECURITY-TOKEN': x_sec_token} | |
auth_r = requests.get(base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
base_url = REAL_OR_NO_REAL + '/session' | |
data = {"accountId": "Your Account ID Here", "defaultAccount": "True"} # Main Demo acc | |
# data = {"accountId": "Your Account ID Here", "defaultAccount": "True"} # Main Live acc | |
auth_r = requests.put( | |
base_url, | |
data=json.dumps(data), | |
headers=authenticated_headers) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
# print(auth_r.status_code) | |
# print(auth_r.reason) | |
# print(auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
########################################################################## | |
##########################END OF LOGIN CODE############################### | |
##########################END OF LOGIN CODE############################### | |
##########################END OF LOGIN CODE############################### | |
##########################END OF LOGIN CODE############################### | |
########################################################################## | |
# PROGRAMMABLE VALUES | |
# SET INITIAL VARIABLES, Hacky for now! | |
orderType_value = "MARKET" | |
size_value = "1" | |
expiry_value = "DFB" | |
guaranteedStop_value = True | |
currencyCode_value = "GBP" | |
forceOpen_value = True | |
stop_loss_multiplier = 3 | |
ESMA_new_margin = 20 # (20% for stocks) | |
too_high_margin = 100 | |
def is_between(time, time_range): | |
if time_range[1] < time_range[0]: | |
return time >= time_range[0] or time <= time_range[1] | |
return time_range[0] <= time <= time_range[1] | |
def midpoint(p1, p2): | |
return (p1 + p2) / 2 | |
def percentage(part, whole): | |
return 100 * float(part) / float(whole) | |
def percentage_of(percent, whole): | |
# percent should always be 20 for stocks | |
# ESMA regulations calculating min stop loss (20% for stocks) | |
return (percent * whole) / 100.0 | |
def humanize_time(secs): | |
mins, secs = divmod(secs, 60) | |
hours, mins = divmod(mins, 60) | |
return '%02d:%02d:%02d' % (hours, mins, secs) | |
def idTooMuchPositions(key, positionMap): | |
if((key in positionMap) and (int(positionMap[key]) >= 2)): | |
return True | |
else: | |
return False | |
def find_good_epics(): | |
spreads_and_epics = [] | |
pick_from_epics = [] | |
i_count = 0 | |
b_TRADE_OK = True | |
for epic_id in main_epic_ids: | |
tmp_lst = [] | |
base_url = REAL_OR_NO_REAL + '/markets/' + epic_id | |
auth_r = requests.get(base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
time.sleep(1) | |
i_count += 1 | |
try: | |
if b_TRADE_OK: | |
current_bid = d['snapshot']['bid'] | |
ask_price = d['snapshot']['offer'] | |
spread = float(current_bid) - float(ask_price) | |
if float(spread) >= -1: | |
print("!!DEBUG!!...FOUND GOOD EPIC..." + | |
str(i_count) + "/" + str(len(main_epic_ids))) | |
time.sleep(1) | |
esma_new_margin_req = int( | |
percentage_of( | |
ESMA_new_margin, | |
current_bid)) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print( | |
"!!DEBUG!!...New ESMA Margin Requirements in Pips is ...:" + | |
str(esma_new_margin_req)) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
###################LONDON############################ | |
###################LONDON############################ | |
###################LONDON############################ | |
tz = pytz.timezone('Europe/London') | |
now_time = datetime.datetime.now(tz=tz).strftime('%H:%M') | |
if is_between(str(now_time), ("17:30", "06:59")): | |
print( | |
"!!DEBUG!!....!!!!MARKET CLOSED!!!!:" + | |
str(now_time)) | |
else: | |
# break | |
pick_from_epics.append(epic_id) | |
else: | |
print( | |
"!!DEBUG!!...skipping, NO GOOD EPIC....Checking next epic spreads..." + | |
str(i_count) + | |
"/" + | |
str( | |
len(main_epic_ids))) | |
time.sleep(1) | |
continue | |
except Exception as e: | |
# print(e) | |
print("!!!DEBUG!!!...No Data returned...Moving on!!") | |
pass | |
# sorted_list = sorted(spreads_and_epics, key=operator.itemgetter(1)) | |
# for i in range(len(sorted_list)): | |
# print(sorted_list[i]) | |
# print (max(sorted_list, key=lambda x: x[1])) | |
# lowest_epic = max(sorted_list, key=lambda x: x[1]) | |
# return (str(lowest_epic[0])) | |
return (pick_from_epics) | |
def are_we_going_to_trade(epic_id, trade_direction, limit, stop_pips): | |
if trade_direction == "NONE": | |
return None | |
key = epic_id + '-' + trade_direction | |
# print(str(key) + " has position of " + str(positionMap[key])) | |
if idTooMuchPositions(key, positionMap): | |
print(str(key) + | |
" has position of " + | |
str(positionMap[key]) + | |
", hence should not trade") | |
return None | |
limitDistance_value = str(limit) # Limit | |
stopDistance_value = str(stop_pips) # Stop | |
########################################################################## | |
print( | |
"Order will be a " + | |
str(trade_direction) + | |
" Order, With a limit of: " + | |
str(limitDistance_value)) | |
print( | |
"stopDistance_value for " + | |
str(epic_id) + | |
" will bet set at " + | |
str(stopDistance_value)) | |
########################################################################## | |
# MAKE AN ORDER | |
base_url = REAL_OR_NO_REAL + '/positions/otc' | |
data = { | |
"direction": trade_direction, | |
"epic": epic_id, | |
"limitDistance": limitDistance_value, | |
"orderType": orderType_value, | |
"size": size_value, | |
"expiry": expiry_value, | |
"guaranteedStop": guaranteedStop_value, | |
"currencyCode": currencyCode_value, | |
"forceOpen": forceOpen_value, | |
"stopDistance": stopDistance_value} | |
r = requests.post( | |
base_url, | |
data=json.dumps(data), | |
headers=authenticated_headers) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print(r.status_code) | |
print(r.reason) | |
print(r.text) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
d = json.loads(r.text) | |
deal_ref = d['dealReference'] | |
time.sleep(1) | |
# CONFIRM MARKET ORDER | |
base_url = REAL_OR_NO_REAL + '/confirms/' + deal_ref | |
auth_r = requests.get(base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
DEAL_ID = d['dealId'] | |
print("DEAL ID : " + str(d['dealId'])) | |
print(d['dealStatus']) | |
print(d['reason']) | |
if str(d['reason']) != "SUCCESS": | |
print("!!DEBUG!!...!!some thing occurred ERROR!!") | |
time.sleep(10) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!!DEBUG!!!...Resuming...") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
else: | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Yay, ORDER OPEN") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
time.sleep(3) | |
def Chandelier_Exit_formula(TRADE_DIR, ATR, Price): | |
# Chandelier Exit (long) = 22-day High - ATR(22) x 3 | |
# Chandelier Exit (short) = 22-day Low + ATR(22) x 3 | |
if TRADE_DIR == "BUY": | |
return float(Price) - float(ATR) * 3 | |
elif TRADE_DIR == "SELL": | |
return float(Price) + float(ATR) * 3 | |
def calculate_stop_loss(d): | |
price_ranges = [] | |
closing_prices = [] | |
first_time_round_loop = True | |
TR_prices = [] | |
price_compare = "bid" | |
for i in d['prices']: | |
if first_time_round_loop: | |
########################################### | |
# First time round loop cannot get previous | |
########################################### | |
closePrice = i['closePrice'][price_compare] | |
closing_prices.append(closePrice) | |
high_price = i['highPrice'][price_compare] | |
low_price = i['lowPrice'][price_compare] | |
price_range = float(high_price - closePrice) | |
price_ranges.append(price_range) | |
first_time_round_loop = False | |
else: | |
prev_close = closing_prices[-1] | |
########################################### | |
closePrice = i['closePrice'][price_compare] | |
closing_prices.append(closePrice) | |
high_price = i['highPrice'][price_compare] | |
low_price = i['lowPrice'][price_compare] | |
price_range = float(high_price - closePrice) | |
price_ranges.append(price_range) | |
TR = max(high_price - low_price, | |
abs(high_price - prev_close), | |
abs(low_price - prev_close)) | |
TR_prices.append(TR) | |
return str(int(float(max(TR_prices)))) | |
if __name__ == '__main__': | |
while True: | |
try: | |
base_url = REAL_OR_NO_REAL + "/accounts" | |
auth_r = requests.get(base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
print("--------------Account Info-------------") | |
print("#################DEBUG#################") | |
print(auth_r.status_code) | |
print(auth_r.reason) | |
print(auth_r.text) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
for i in d['accounts']: | |
if str(i['accountType']) == "SPREADBET": | |
balance = i['balance']['balance'] | |
deposit = i['balance']['deposit'] | |
percent_used = percentage(deposit, balance) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print( | |
"!!DEBUG!!...Percent of account used ..." + | |
str(percent_used)) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
if float(percent_used) > 70: | |
print("!!DEBUG!!...Don't trade, Too much margin used up already") | |
time.sleep(60) | |
continue | |
else: | |
print("!!DEBUG!!...OK to trade, Account balance OK!!") | |
positionMap = {} | |
position_base_url = REAL_OR_NO_REAL + "/positions" | |
position_auth_r = requests.get( | |
position_base_url, headers=authenticated_headers) | |
position_json = json.loads(position_auth_r.text) | |
# print("-------------Position Info-------------") | |
# print("#################DEBUG#################") | |
# print(position_auth_r.status_code) | |
# print(position_auth_r.reason) | |
# print(position_auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
for item in position_json['positions']: | |
direction = item['position']['direction'] | |
dealSize = item['position']['dealSize'] | |
ccypair = item['market']['epic'] | |
key = ccypair + '-' + direction | |
if(key in positionMap): | |
positionMap[key] = dealSize + positionMap[key] | |
else: | |
positionMap[key] = dealSize | |
print('current position summary:') | |
print(positionMap) | |
tradeable_epic_ids = find_good_epics() | |
shuffle(tradeable_epic_ids) | |
except Exception as e: | |
print(e) | |
print("!!DEBUG!!...No Suitable Epics...Yet!!, Try again!!") | |
continue | |
for epic_id in tradeable_epic_ids: | |
try: | |
base_url = REAL_OR_NO_REAL + "/prices/" + epic_id + "/DAY/5" | |
# Price resolution (MINUTE, MINUTE_2, MINUTE_3, MINUTE_5, | |
# MINUTE_10, MINUTE_15, MINUTE_30, HOUR, HOUR_2, HOUR_3, | |
# HOUR_4, DAY, WEEK, MONTH) | |
auth_r = requests.get(base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
# print(auth_r.status_code) | |
# print(auth_r.reason) | |
# print(auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
high_prices = [] | |
low_prices = [] | |
mid_prices = [] | |
close_prices = [] | |
ATR = calculate_stop_loss(d) | |
remaining_allowance = d['allowance']['remainingAllowance'] | |
reset_time = humanize_time( | |
int(d['allowance']['allowanceExpiry'])) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("Remaining API Calls left: " + str(remaining_allowance)) | |
print("Time to API Key reset: " + str(reset_time)) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
for i in d['prices']: | |
if i['highPrice']['bid'] is not None: | |
highPrice = i['highPrice']['bid'] | |
high_prices.append(highPrice) | |
######################################## | |
if i['lowPrice']['bid'] is not None: | |
lowPrice = i['lowPrice']['bid'] | |
low_prices.append(lowPrice) | |
######################################## | |
if i['closePrice']['bid'] is not None: | |
closePrice = i['lowPrice']['bid'] | |
close_prices.append(closePrice) | |
######################################## | |
mid_prices.append(float(midpoint(highPrice, lowPrice))) | |
close_prices = numpy.asarray(close_prices) | |
low_prices = numpy.asarray(low_prices) | |
high_prices = numpy.asarray(high_prices) | |
mid_prices = numpy.asarray(mid_prices) | |
xi = numpy.arange(0, len(low_prices)) | |
# close_prices_slope, close_prices_intercept, close_prices_r_value, close_prices_p_value, close_prices_std_err = stats.linregress( | |
# xi, close_prices) | |
# low_prices_slope, low_prices_intercept, low_prices_r_value, low_prices_p_value, low_prices_std_err = stats.linregress( | |
# xi, low_prices) | |
# high_prices_slope, high_prices_intercept, high_prices_r_value, high_prices_p_value, high_prices_std_err = stats.linregress( | |
# xi, high_prices) | |
# mid_prices_slope, mid_prices_intercept, mid_prices_r_value, mid_prices_p_value, mid_prices_std_err = stats.linregress( | |
# xi, mid_prices) | |
close_prices_slope, close_prices_intercept, close_prices_lo_slope, close_prices_hi_slope = stats.theilslopes( | |
close_prices, xi, 0.99) | |
low_prices_slope, low_prices_intercept, low_prices_lo_slope, low_prices_hi_slope = stats.theilslopes( | |
low_prices, xi, 0.99) | |
high_prices_slope, high_prices_intercept, high_prices_lo_slope, high_prices_hi_slope = stats.theilslopes( | |
high_prices, xi, 0.99) | |
mid_prices_slope, mid_prices_intercept, mid_prices_lo_slope, mid_prices_hi_slope = stats.theilslopes( | |
mid_prices, xi, 0.99) | |
# print ("#####################################################") | |
# print ("#####################################################") | |
# ("#####################################################") | |
# print ("Please uncomment this to enable graphs for debugging") | |
# print ("#####################################################") | |
# print ("#####################################################") | |
# ("#####################################################") | |
# close_prices_line = close_prices_slope * xi + close_prices_intercept | |
# low_prices_line = low_prices_slope * xi + low_prices_intercept | |
# high_prices_line = high_prices_slope * xi + high_prices_intercept | |
# mid_prices_line = mid_prices_slope * xi + mid_prices_intercept | |
# plt.plot( | |
# xi, | |
# low_prices_line, | |
# xi, | |
# high_prices_line, | |
# xi, | |
# close_prices, | |
# 'g--', | |
# xi, | |
# mid_prices_line) | |
# plt.fill_between( | |
# xi, | |
# low_prices_line, | |
# high_prices_line, | |
# facecolor='green', | |
# alpha=0.5) | |
# plt.xlabel('X Axis') | |
# plt.ylabel('Y Axis') | |
# plt.show() | |
# plt.clf() | |
# print ("#####################################################") | |
# print ("#####################################################") | |
# ("#####################################################") | |
# print ("Please uncomment this to enable graphs for debugging") | |
# print ("#####################################################") | |
# print ("#####################################################") | |
# ("#####################################################") | |
base_url = REAL_OR_NO_REAL + '/markets/' + epic_id | |
auth_r = requests.get( | |
base_url, headers=authenticated_headers) | |
d = json.loads(auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
# print(auth_r.status_code) | |
# print(auth_r.reason) | |
# print(auth_r.text) | |
# print("-----------------DEBUG-----------------") | |
# print("#################DEBUG#################") | |
current_bid = d['snapshot']['bid'] | |
# 1 Standard Deviation | |
std_dev_1_MID_HIGH = float(mid_prices_intercept + | |
(abs(numpy.std(mid_prices) * 1))) | |
# 1 Standard Deviation | |
std_dev_1_MID_LOW = float(mid_prices_intercept - | |
(abs(numpy.std(mid_prices) * 1))) | |
# 2 Standard Deviation | |
std_dev_2_MID_HIGH = float(mid_prices_intercept + | |
(abs(numpy.std(mid_prices) * 2))) | |
# 2 Standard Deviation | |
std_dev_2_MID_LOW = float(mid_prices_intercept - | |
(abs(numpy.std(mid_prices) * 2))) | |
# 4 Standard Deviation, Most trades exist within 2/3 Standard Deviations | |
# This is a check for this, Potential trade reversal (Need to | |
# check) | |
OutOfBounds_LOW = float(mid_prices_intercept - | |
(abs(numpy.std(mid_prices) * 3))) | |
# 4 Standard Deviation | |
OutOfBounds_HIGH = float(mid_prices_intercept + | |
(abs(numpy.std(mid_prices) * 3))) | |
if float(current_bid) > float(std_dev_2_MID_HIGH): | |
trade_direction = "SELL" | |
elif float(current_bid) < float(std_dev_2_MID_LOW): | |
trade_direction = "BUY" | |
elif float(current_bid) > float(std_dev_1_MID_HIGH): | |
trade_direction = "SELL" | |
elif float(current_bid) < float(std_dev_1_MID_LOW): | |
trade_direction = "BUY" | |
elif float(current_bid) < float(OutOfBounds_LOW): | |
pip_limit = 9999999 # Junk Data | |
stop_pips = "999999" # Junk Data | |
trade_direction = "NONE" | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Potential Trend Reversal....!!!!DOWN!!!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
elif float(current_bid) > float(OutOfBounds_HIGH): | |
pip_limit = 9999999 # Junk Data | |
stop_pips = "999999" # Junk Data | |
trade_direction = "NONE" | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Potential Trend Reversal....!!!UP!!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
else: | |
pip_limit = 9999999 # Junk Data | |
stop_pips = "999999" # Junk Data | |
trade_direction = "NONE" | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Within trading range...Leave!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
if trade_direction == "BUY": | |
pip_limit = int(abs(float(max(mid_prices)) - | |
float(current_bid)) / stop_loss_multiplier) | |
ce_stop = Chandelier_Exit_formula( | |
trade_direction, ATR, min(low_prices)) | |
stop_pips = str(int(abs(float(current_bid) - (ce_stop)))) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...BUY!!") | |
print(str(epic_id)) | |
print( | |
"!!DEBUG!!...Take Profit@...." + | |
str(pip_limit) + | |
" pips") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
elif trade_direction == "SELL": | |
pip_limit = int(abs(float(min(mid_prices)) - | |
float(current_bid)) / stop_loss_multiplier) | |
ce_stop = Chandelier_Exit_formula( | |
trade_direction, ATR, max(high_prices)) | |
stop_pips = str(int(abs(float(current_bid) - (ce_stop)))) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...SELL!!") | |
print(str(epic_id)) | |
print( | |
"!!DEBUG!!...Take Profit@...." + | |
str(pip_limit) + | |
" pips") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
elif trade_direction == "NONE": | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Trade direction is NONE") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
# Sanity Checks | |
esma_new_margin_req = int( | |
percentage_of( | |
ESMA_new_margin, | |
current_bid)) | |
if int(esma_new_margin_req) > int(stop_pips): | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!! :- ESMA Readjustment....") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
stop_pips = int(esma_new_margin_req) | |
if int(pip_limit) == 0: | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Pip limit 0!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
trade_direction = "NONE" | |
if int(pip_limit) == 1: | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Pip limit 1!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
trade_direction = "NONE" | |
if int(stop_pips) > int(too_high_margin): | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("!!DEBUG!!...Stop over high margin limit, No trade!!") | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
trade_direction = "NONE" | |
except Exception as e: | |
#print(e) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print( | |
"!!!DEBUG!!!...Something fucked up with the Pricing or whatever!!, IGNORE THIS!!") | |
#print(traceback.format_exc()) | |
#print(sys.exc_info()[0]) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
time.sleep(10) | |
continue | |
try: | |
are_we_going_to_trade( | |
epic_id, trade_direction, pip_limit, stop_pips) | |
except Exception as e: | |
print(e) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
print("Something fucked up with the Order!!, IGNORE THIS!!") | |
#print(traceback.format_exc()) | |
#print(sys.exc_info()[0]) | |
print("-----------------DEBUG-----------------") | |
print("#################DEBUG#################") | |
time.sleep(10) | |
continue |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment