{"version":3,"sources":["pages/help/components/search/search.less","locale/en.js","locale/en-US.js","rootReducer.js","pages/member/reducer.js","pages/concept/reducer.js","pages/vernacular/reducer.js","pages/customStock/reducer.js","pages/strategy/reducer.js","pages/option/reducer.js","pages/factor/reducer.js","pages/hawkeye/reducer.js","pages/download/reducer.js","pages/backtest/reducer.js","pages/trade/reducer.js","pages/test/reducer.js","pages/stripe/reducer.js","pages/correlation/reducer.js","pages/reducer.js","pages/filter/reducer.js","pages/portfolio/reducer.js","pages/demo/reducer.js","pages/tdAmeritrade/reducer.js","helpers/server.js","pages/member/effects.js","pages/concept/effects.js","pages/vernacular/effects.js","pages/customStock/effects.js","pages/strategy/effects.js","pages/option/effects.js","pages/hawkeye/effects.js","pages/factor/effects.js","pages/download/effects.js","pages/backtest/effects.js","pages/trade/effects.js","pages/test/effects.js","pages/stripe/effects.js","pages/correlation/effects.js","pages/effects.js","pages/filter/effects.js","pages/portfolio/effects.js","pages/demo/effects.js","pages/tdAmeritrade/effects.js","rootEffects.js","helpers/store.js","pages/RestrictedPage.jsx","components/userMenu/UserMenu.jsx","components/common/PageTitle.jsx","pages/Evt.js","pannels/form/LoginCountrys.js","pannels/form/LoginForm.jsx","pannels/form/RegisterForm.jsx","pages/layout/HeaderPage.jsx","pages/layout/FooterPage.jsx","pages/auth/Login.jsx","pannels/form/RegisterSuccess.jsx","pages/auth/Register.jsx","pannels/form/ForgetForm.jsx","pannels/form/ForgetSuccess.jsx","pages/auth/Forget.jsx","pages/help/components/search/search.js","pages/help/components/help_side_cn.js","pages/help/components/help_side_en.js","pages/help/components/sideMenu/sideMenu.js","pages/help/components/help_cn.js","pages/help/components/help_en.js","pages/help/HelpPage.jsx","pages/download/DownloadPage.jsx","pages/video/VideoPage.jsx","pages/about/AboutPage.jsx","pages/blank/BlankPage.jsx","pages/test/TestPage.jsx","pages/stripe/ServicePage.jsx","pages/stripe/charge/CardSection.js","pages/stripe/charge/CheckoutForm.js","pages/stripe/ChargePage.jsx","pages/stripe/SubscriptionPage.jsx","pages/stripe/subscription/EmailForm.jsx","pages/stripe/subscription/CardSection.js","pages/stripe/subscription/PaymentForm.js","pages/stripe/BillingPage.js","pages/stripe/UpdatePage.js","pages/hawkeye/components/BaseInfo.jsx","pages/hawkeye/components/RotationSentence.js","pages/hawkeye/components/VernacularHawkeye.jsx","pages/hawkeye/components/HawkeyeCondition.jsx","pages/hawkeye/components/HawkeyeKLine.jsx","pannels/account/TooltipPage.jsx","pages/hawkeye/HawkeyePage.jsx","pages/hawkeye/HawkeyeListPage.jsx","pannels/stock/StockFormulaPage.jsx","pannels/stock/SymbolGroupPage.jsx","pannels/stock/USSymbolGroupPage.jsx","pannels/stock/StockOrderPage.jsx","pannels/stock/StockResultPage.jsx","pages/concept/ConceptPage.jsx","pannels/stock/RotationSentence.js","pannels/stock/LuisPage.jsx","pages/concept/EditStrategyPage.jsx","pages/vernacular/VernacularPage.jsx","pages/vernacular/MyStrategyPage.jsx","pages/strategy/UpdateStrategyPage.jsx","pages/strategy/StrategyPage.jsx","pages/customStock/CustomStockPage.jsx","pannels/option/OptionParams.jsx","pannels/option/ChartsParams.jsx","pannels/option/OptionResultPage.jsx","pages/option/OptionPage.jsx","pages/factor/FactorGenerator.jsx","pages/factor/FactorPage.jsx","pages/factor/FactorIndex.jsx","pages/factor/chartOptions/factorReturn.jsx","pages/factor/chartOptions/factorIndicate.jsx","pages/factor/chartOptions/factorTurnover.jsx","pages/factor/chartOptions/index.jsx","pages/factor/FactorAnalyzer.jsx","pages/correlation/index.jsx","pages/backtest/chartOptions/statistics.jsx","pages/backtest/chartOptions/equity.jsx","pages/backtest/chartOptions/income.jsx","pages/backtest/chartOptions/funds.jsx","pages/backtest/chartOptions/index.jsx","pages/backtest/BacktestResult.jsx","pages/backtest/BacktestPage.jsx","pages/backtest/MyBacktestPage.jsx","pages/backtest/OptimalGridResult.jsx","pages/backtest/OptimalGridPage.jsx","pages/backtest/MyOptimalGridPage.jsx","pages/backtest/BatchResult.jsx","pages/backtest/OptimalBatchPage.jsx","pages/backtest/MyOptimalBatchPage.jsx","pages/backtest/OptResult.jsx","pages/backtest/OptimalOptPage.jsx","pages/backtest/MyOptimalOptPage.jsx","pages/backtest/BacktestGridResult.jsx","pages/backtest/BacktestGridPage.jsx","pages/backtest/MyBacktestGridPage.jsx","pages/backtest/AIGridResult.jsx","pages/backtest/AIGridPage.jsx","pages/backtest/MyAIGridPage.jsx","pages/backtest/AIBatchPage.jsx","pages/backtest/MyAIBatchPage.jsx","pages/backtest/AIOptPage.jsx","pages/backtest/MyAIOptPage.jsx","pages/trade/chartOptions/statistics.jsx","pages/trade/chartOptions/equity.jsx","pages/trade/chartOptions/income.jsx","pages/trade/chartOptions/index.jsx","pages/trade/TradeResult.jsx","pages/trade/RealTimePage.jsx","pages/trade/SimulationPage.jsx","pages/trade/GeneralStrategyPage.jsx","pages/trade/RealTimeGeneralStrategyPage.jsx","pages/backtest/RollingResult.jsx","pages/backtest/RollingPage.jsx","pages/backtest/MyRollingPage.jsx","pages/tdAmeritrade/TdAmeritradePage.jsx","pages/filter/components/SymbolGroupPage.jsx","pages/filter/components/USSymbolGroupPage.jsx","pages/filter/FilterPage.jsx","pages/filter/MyFilterPage.jsx","pages/filter/UpdateFilterPage.jsx","pages/portfolio/chartOptions/statistics.jsx","pages/portfolio/chartOptions/equity.jsx","pages/portfolio/chartOptions/income.jsx","pages/portfolio/chartOptions/funds.jsx","pages/portfolio/chartOptions/wt.jsx","pages/portfolio/chartOptions/index.jsx","pages/portfolio/PortfolioResult.jsx","pages/portfolio/PortfolioPage.jsx","pages/portfolio/MyPortfolioPage.jsx","pages/portfolio/PortfolioOptResult.jsx","pages/portfolio/PortfolioOptPage.jsx","pages/portfolio/MyPortfolioOptPage.jsx","pannels/stock/OpenAISymbolGroupPage.jsx","pannels/stock/OpenAIResultPage.jsx","pages/vernacular/ScanPage.jsx","pages/demo/DemoPage.jsx","pages/layout/CountdownTimer.jsx","pages/layout/PageNotFoundPage.jsx","index.js","pannels/form/Countrys.js","helpers/history.jsx"],"names":["module","exports","__webpack_require__","p","en_US","_en_US","title","keywords","description","vernacular title","vernacular keywords","vernacular description","intl.menu.home","intl.menu.usStocks","intl.menu.cnStocks","intl.menu.stockPicking","intl.menu.strategyStockPicking","intl.menu.formulaStockPicking","intl.menu.vernacularStockPicking","intl.menu.newScan","intl.menu.myStragegy","intl.menu.customStock","intl.menu.correlation","intl.menu.backtest","intl.menu.grid","intl.menu.option","intl.menu.factorService","intl.menu.hawkeye","intl.menu.download","intl.menu.help","intl.menu.filter","intl.menu.newFilter","intl.menu.myFilter","videoTutorial","pricing","title.newScan","title.newFilter","description.scan","description.filter","factorService","intl.login","intl.logining","intl.login.rememberMe","intl.login.forgotPassword","intl.login.verificationCodeLogin","intl.login.userNameLogin","email login","intl.register.phoneRegister","intl.register.emailRegister","intl.register.free","intl.login.immediately","Login to existing quancept account","intl.register","intl.registered","intl.register.phone","intl.register.captcha","intl.register.getCaptcha","intl.register.readAndAccept","intl.register.agreement","promo.code","promoCode.format","promoCode.required.format","promoCode.error","intl.resetPassword","intl.resetPasswording","intl.youHaveRegisterSuccess","intl.register.openQuantitativeInvestment","phone forget","email forget","phone number and email address","intl.forgetPasswordSuccess","intl.login.goToLogin","optional","intl.optionSymbol","intl.scanStartEndDate","intl.today","intl.to","intl.direction","intl.strategyScan","intl.strategyScanning","please.select.option.target","please.enter.scan.start.and.end.date","please.select.ups.and.downs.setting","rise","fall","riseTo","fallTo","please.select.ups.and.downs.setting.unit","price.difference","combination.name","combination.details","maxProfit","maxRisk","investment","yieldToMaturity","cost","income","option.scan.result","combined.profit.and.loss.curve","company","about","contact","WeChat.public.number","about.info.01","about.info.02","about.info.03","about.info.04","contact.info.01","contact.info.02","contact.info.03","contact.info.04","get.verification.code.failed","phone.not.register","format.failed","phone.format.failed","login.exception","account.not.register","account.exception","password.or.verification.code.match.error","email.registered","email.not.register","email.format.failed","Subscription.expired","user.account.has.expired","account.not.expired","account.about.to.expire","Service.not.operation","reset.password.success","reset.password.exception","verification.code.matching.error","reset.password.failed","phone.is.register","register.success","register.failed","register.exception","account.is.exist","phone","username/phone","account.password","Verification code","phone.china.only","phone.captcha","email.captcha","password.format","phone.use.register","password.new.format","password.old.format","please.input.phone","please.input.captcha","please.input.password","please.input.username/phone","password.min","password.max","password.required.format","email.min","email.max","get.data.failed","user.exception","function.not.open","sequence","please go","featured.strategy.directory","my.formula.stock.picking.strategy","strategy.items","no.strategy.library","no.stock.pool","no.strategy","scan.strategy.exception","no.scan.to.stock","request.scan.strategy.failed","scan.strategy.error","today.scan.strategy.end","scan.strategy.in.error","Object","defineProperty","window","appLocale","messages","objectSpread","enMessages","antd","antdEn","locale","data","appLocaleData","rootReducer","combineReducers","member","state","arguments","length","undefined","action","type","status","t","Date","now","user","token","permission","isVip","accounts","subscriptions","sc","subscriptionDetails","sd","id","i","coupon","concept","sectors","stockCount","concepts","conceptExplanations","luString","sentenceFormula","scanAlert","filters","filter","lastTimes","fail","error","editStrategy","formulaString","customGroup","symbolList","stockPoolKey","stockGroups","useFormulaData","vernacular","symbols","naturalLangFormulas","luisString","customStock","currGroupId","symbolItems","strategy","items","customStrategy","strategyId","option","underlyingList","scanResponse","factor","currDate","fLastTimes","taskName","factorFiles","factorFile","fileId","fileName","analyzeTaskId","taskId","analyzeState","analyzeStage","stage","factorNames","nextFactorData","factorData","chartName","factorName","hawkeye","ls","nextDate","nd","ss","hawkeyeId","isLuisAnalysis","formulaName","vernacularKey","download","backtest","backtestResult","strategyItems","batchInfo","optInfo","rollingResult","basePosition","bp","share","uri","trade","tradeResult","tradeDetails","test","charge","Vp","vServices","vas","insyncExpiration","ie","crystalTraderExpiration","ce","vService","customers","c","hisSubscription","scs","stepStatus","stepIndex","clientSecret","coupons","account","a","subscription","detailed","d","months","m","invoice","correlation","sectorItems","sourceFilter","filterGroup","portfolio","portfolioId","portfolioItems","demo","strategies","strategyTBloginMaps","tradeAccounts","statistics","tdAmeritradePage","host","requestHeader","header","store","getState","customHeader","Accept","Content-Type","Authorization","requestURL","link","get","url","indexOf","Math","random","encodeURI","substr","fetch","cache","then","handleResponse","catch","handleErrorResponse","requestOptions","method","headers","e","console","log","post","body","JSON","stringify","response","dispatch","history","replace","ok","Promise","resolve","statusText","json","reject","sendLoginCaptcha","sendEmailCaptcha","sendPhoneRegisterCaptcha","sendEmailRegisterCaptcha","sendForgetCaptcha","Login","Register","Forget","getPermission","payment","updateUser","getAccount","getSubscription","cancelSubscription","getMessage","sendMessage","updatePassword","phoneCaptcha","bindPhone","Logout","sendHubMessage","resp","regenerator_default","wrap","_context","prev","next","put","call","payload","sent","t0","stop","_marked","_context2","_marked2","_context3","_marked3","_context4","_marked4","_context5","_marked5","_context6","sessionStorage","setItem","vs","cs","sg","fs","ff","fas","fasc","tn","localStorage","username","removeItem","RememberMe","password","_marked6","_context7","_marked7","_context8","_marked8","_context9","UserId","_marked9","_context10","_marked10","_context11","_marked11","_context12","_marked12","_context13","_marked13","_context14","_marked14","_context15","_marked15","_context16","_marked16","_context17","_marked17","_context18","_marked18","_context19","_marked19","_context20","_marked20","_context21","clear","_marked21","_context22","_marked22","_context23","takeLatest","takeEvery","_marked23","getStockCount","getConceptSectors","scenStrategy","saveStrategy","addResultCustomStock","updateResultCustomStock","Effect","effects_marked","s","effects_marked2","effects_marked3","effects_marked4","effects_marked5","effects_marked6","effects_marked7","getFormulaSectors","scanStrategy","getLuisSectors","getScanSectors","setGPTsChatMessage","ChangeBatch","changeCondition","luisAnalysis","addFormulaCustomStock","updateFormulaCustomStock","sendEmail","clearFilterString","useFormula","vernacular_effects_marked","vernacular_effects_marked2","vernacular_effects_marked3","vernacular_effects_marked4","nlf","vernacular_effects_marked5","vernacular_effects_marked6","params","luisTabsKey","vernacular_effects_marked7","sf","effects_marked8","effects_marked9","effects_marked10","effects_marked11","effects_marked12","effects_marked13","effects_marked14","effects_marked15","getCustomStock","getSymbolItems","getCustomStockTick","addCustomStock","updateCustomStock","removeCustomStock","renameCustomStock","st","gi","customStock_effects_marked","customStock_effects_marked2","SymbolList","customStock_effects_marked3","customStock_effects_marked4","customStock_effects_marked5","customStock_effects_marked6","customStock_effects_marked7","customStock_effects_marked8","getStrategy","renameStrategy","copyStrategy","removeStrategy","auth","strategy_effects_marked","strategy_effects_marked2","strategy_effects_marked3","filterId","strategy_effects_marked4","strategy_effects_marked5","getoption","optionScan","ul","option_effects_marked","message","sr","lt","option_effects_marked2","option_effects_marked3","getStockTick","getHawkeyeInfo","getHawkeyeItems","closeHawkeye","removeHawkeye","getHawkeyeBase","hawkeyeChangeBatch","hawkeyeChangeCondition","useFormulaHawkeye","hawkeye_effects_marked","hawkeye_effects_marked2","hawkeye_effects_marked3","hs","hawkeye_effects_marked4","hawkeye_effects_marked5","hawkeye_effects_marked6","hawkeye_effects_marked7","hawkeye_effects_marked8","hawkeye_effects_marked9","hawkeye_effects_marked10","getFactorSectors","factorfilterScan","generateFactorFile","queryGenerateFactorFileStatus","getFactorFiles","uploadMigrate","removeFile","startAnalyze","analyzeQuery","getFactors","getFactorReturn","getFactorIndicate","getFactorTurnover","f","cd","factor_effects_marked","factor_effects_marked2","factor_effects_marked3","factor_effects_marked4","factor_effects_marked5","factor_effects_marked6","factor_effects_marked7","factor_effects_marked8","factor_effects_marked9","factor_effects_marked10","_action$payload","chartNames","factor_effects_marked11","factor_effects_marked12","factor_effects_marked13","factor_effects_marked14","files","download_effects_marked","download_effects_marked2","getBacktestStrategy","getSingleStockItems","getSingleSymbolItems","removeBacktest","getBacktestGrid","getAIGrid","getExploreBacktest","getBatchInfo","getOptInfo","getOptimizeItems","getOptimizeSymbol","removeOptimizeBacktest","getOptItems","getOptSymbol","removeOptBacktest","getRollingGrid","GetRollingItems","GetRollingSymbol","removeRollingBacktest","getRollingSymbols","u","si","backtest_effects_marked","bs","sl","backtest_effects_marked2","backtest_effects_marked3","backtest_effects_marked4","backtest_effects_marked5","backtest_effects_marked6","backtest_effects_marked7","b","bi","backtest_effects_marked8","backtest_effects_marked9","backtest_effects_marked10","backtest_effects_marked11","backtest_effects_marked12","backtest_effects_marked13","backtest_effects_marked14","backtest_effects_marked15","effects_marked16","rs","effects_marked17","effects_marked18","effects_marked19","effects_marked20","effects_marked21","getTradeResult","getTradeResultSearch","getGeneralStrategyResult","getGeneralStrategyResultSearch","removeDeployStrategy","getBasePosition","tr","trade_effects_marked","trade_effects_marked2","td","trade_effects_marked3","trade_effects_marked4","trade_effects_marked5","trade_effects_marked6","trade_effects_marked7","clearCache","test_effects_marked","test_effects_marked2","getPaymentService","getStripeKey","PayMethod","PayIntent","createSubscription","retryInvoice","cancelSubscriptions","updateSubscription","emailCaptcha","checkEmail","payProcessing","nextProcessing","alipay","stripe_effects_marked","stripe_effects_marked2","stripe_effects_marked3","stripe_effects_marked4","stripe_effects_marked5","stripe_effects_marked6","stripe_effects_marked7","stripe_effects_marked8","stripe_effects_marked9","stripe_effects_marked10","stripe_effects_marked11","stripe_effects_marked12","stripe_effects_marked13","stripe_effects_marked14","stripe_effects_marked15","stripe_effects_marked16","correlation_effects_marked","correlation_effects_marked2","nonUser","emptyStatus","pages_effects_marked","pages_effects_marked2","pages_effects_marked3","getFilterSectors","getFilterItems","fId","fg","filter_effects_marked","filter_effects_marked2","filter_effects_marked3","filter_effects_marked4","filter_effects_marked5","filter_effects_marked6","filter_effects_marked7","actionGetPortfolioInfo","actionStartPortfolio","actionGetPortfolioItems","actionPortfolioOptItems","actionGetPortfolioOptItems","actionRemovePortfolio","portfolio_effects_marked","portfolio_effects_marked2","portfolio_effects_marked3","portfolio_effects_marked4","pId","portfolio_effects_marked5","portfolio_effects_marked6","portfolio_effects_marked7","getStrategyItems","getStrategyBacktestResult","stm","ta","demo_effects_marked","demo_effects_marked2","demo_effects_marked3","getAuth","getCode","tdAmeritrade_effects_marked","tdAmeritrade_effects_marked2","tdAmeritrade_effects_marked3","rootSaga","all","rootEffects_marked","sagaMiddleware","createSagaMiddleware","createStore","composeWithDevTools","applyMiddleware","run","RestrictedPage","props","_this","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","loggedin","parse","getItem","location","pathname","children","react_default","createElement","Component","CRestrictedPage","connect","languageMessages","UserMenu","handleUserClick","userClick","users","split","className","onClick","avatar","size","src","photo","LoginRegisterButtons","es_button","onLoginAction","onRegisterAction","PageTitle","position","style","paddingLeft","borderLeft","marginTop","paddingRight","circle","tooltip","placement","icon","subTitle","fontSize","Evt","EventEmitter","CodeRegExp","pattern","code","text","des","TabPane","Tabs","Option","Select","USERNAME","hasErrors","fieldsError","keys","some","field","VerificationCodeLoginForm","Form","create","name","_React$Component","_temp","handlePhoneChange","setState","target","value","handleChange","handleCaptchaChange","captcha","inherits","createClass","key","_this$props","isChangePrefixForCaptcha","prefix","phoneRegExp","handlePrefixSelector","isGetCaptcha","captchaWaiting","getCaptcha","count","logining","handleSubmit","form","getFieldDecorator","getFieldsError","_this$state","tmpPhoneRegExp","tmpPrefix","options","ii","content","toLowerCase","push","label","prefixCode","isFlag","prefixSelector","initialValue","es_select","width","optionLabelProp","dropdownMatchSelectWidth","dropdownClassName","dropdownStyle","zIndex","minWidth","onChange","isDisabled","es_form","onSubmit","Item","rules","required","input","addonBefore","placeholder","autoComplete","es_row","gutter","col","span","loading","disabled","valuePropName","es_checkbox","htmlType","React","UserPasswordLoginForm","_React$Component2","_temp2","_this2","handlePasswordChange","loginPassword","_this$props2","isChangePrefixForPassword","_this$state2","Password","color","LoginForm","_this3","onSwitchLoginMode","loginMode","preventDefault","verificationCodeFormRef","validateFields","err","values","getFieldValue","Mode","Email","UserName","Prefix","handleVerificationCodeSubmit","mode","requestData","Captcha","remember","_hmt","handleUserPasswordSubmit","userPasswordFormRef","handleUserPasswordPrefixSelector","tmpCodeRegExp","handleVerificationCodePrefixSelector","SetUserPasswordFormRef","formRef","SetVerificationCodeFormRef","webType","_this4","_this$state3","tabs","defaultActiveKey","tab","wrappedComponentRef","EMAIL","EmailRegisterForm","handleEmailChange","email","emailDataSource","concat","handlePromoCodeChange","promoCode","showModal","visible","handleOk","handleCancel","es_modal","top","onOk","onCancel","footer","agreement","handleAgreementChange","registered","renderProtocol","min","max","auto_complete","dataSource","getPopupContainer","trigger","parentNode","href","PhoneRegisterForm","phonePlaceholder","agreeSMS","handleAgreeSMSChange","RegisterForm_Option","RegisterForm","getPhoneCaptcha","phoneFormRef","registerPhone","getEmailCaptcha","emailFormRef","registerEmail","handlePhoneSubmit","registerMode","PromoCode","Agreement","handleEmailSubmit","first","checked","SetPhoneFormRef","SetEmailFormRef","onSwitchRegisterMode","RegisterForm_TabPane","jQuery","$","require","Header","Layout","SubMenu","Menu","hubConnection","hubProxy","isHubConnection","strReplace","source","jsonObjcet","v","headerTimer","HeaderPage","openNotification","num","btn","notification","close","padding","handlePendingOrder","tmpTxts","{cont}","info","duration","onClose","jumpHawkeyeList","handleMyHawkeye","Modal","destroyAll","handleViewHawkeyeAlert","current","Id","alertVisible","tabActiveKey","ConfirmOrder","handleCloseHawkeyeAlert","handleViewHawkeyeOrder","order","orderVisible","handleCloseHawkeyeOrder","onLoginClick","onRegisterClick","modalVisible","handleClick","open","renderSubMenu","map","item","show","submenu","es_menu","onShowLogin","showLogin","showRegister","onShowRegister","toShowForgetPassword","userId","loggedIn","showClass","emitter","addListener","msg","symbol","period","SendIntradayDataToService","confirmResult","txt","SendHawkeyeConfirm","timestamp","getTime","setupConnect","_props$member","setInterval","clearInterval","emit","SendMessageToService","service","process","useDefaultPath","qs","connectionSlow","warn","stateChanged","newState","disconnected","setTimeout","start","done","success","createHubProxy","on","userName","loginStatus","desc","hawkeyeIds","backtestStatus","callback","Type","symbolGroup","filterResult","filterAlert","filterAlertsCache","hasOwnProperty","fi","unshift","filterAlertCountsCache","deployStrategy","strategyStatus","result","historicalDate","_this5","invoke","toString","timerModal","_this6","res","modal","destroy","secondsToGo","hawkeyeAlert","hawkeyeOrder","selectedKeys","menu","_this7","scrollTo","xs","sm","alt","renderMenu","UserMenu_UserMenu","bind","okText","cancelText","renderHawkeyeAlert","renderHawkeyeOrder","maskClosable","setModalVisible","display","LoginForm_LoginForm","assign","loginEvent","handleLoginEvent","RegisterForm_RegisterForm","es_alert","page","Footer","FooterPage","onAbout","onContact","onDownload","year","getFullYear","index_es","divider","textAlign","Content","defineMessages","login","defaultMessage","freeRegister","getVerificationCodeFailed","phoneNotRegister","phoneFormatFailed","loginException","accountNotRegister","accountException","passwordVerificationCodeFailed","timer","LoginPage","onRegister","toForgetPassword","n","search","errorMeg","Helmet","property","justifyContent","marginBottom","card","cover","theme","marginRight","youHaveRegisterSuccess","openQuantitativeInvestment","RegisterSuccess","handleJump","handleJumpHome","RegisterPage","onLogin","Register_Content","RegisterSuccess_page","PhoneForgetForm","isChangePrefix","resetPassword","ForgetForm_Option","ForgetForm","validateFieldsAndScroll","forgetPassword","ForgetForm_TabPane","forgetPasswordSuccess","goToLogin","ForgetSuccess","handleGoToLogin","resetPasswordSuccess","resetPasswordException","accountNotExist","verificationCodeMatchingError","resetPasswordFailed","ForgetPage","Forget_Content","ForgetSuccess_ForgetSuccess","ForgetForm_ForgetForm","ConnectedForgetPage","components_search_search","onKeyPress","func","event","keyCode","which","help_side_cn","0","1","tit","isHideTitle","2","img","3","4","help_side_en","TreeNode","Tree","SideMenu","searchData","index","searchResult","searchStatus","treeData","treeResult","list","that","Array","isArray","filterData","scrollContent","ele","document","getElementsByClassName","forEach","getElementById","offsetTop","scrollTop","setCurrentId","ele2","contentId","resEle","currentState","node","arr","dom","getElementsByTagName","getAttribute","toLocaleLowerCase","arrItem","outer","inner","handleClickScroll","descs","hide","resultItem","dataset","pos","data-pos","od","tree","onSelect","tp","di","fc","fIndex","sIndex","fri","frIndex","tItem","initData","initTree","searchPos","onFocus","onBlur","renderSearchResult","renderTreeContent","help_cn","point","help_en","HelpPage","currentId","data-cur-title","titIndex","visibility","renderChildNode","imgs","imgsIndex","cons","curId","sideMenu","contentScroll","renderContent","DownloadPage","handleDownloadInSync","handleDownloadCrystalTrade","handleDownloadAndroidApp","DownloadPage_Content","border","verticalAlign","margin","CheckableTag","Tag","VideoPage","onSelectInSyncProduct","onSelectCrystalTradeProduct","onChangeItems","activeKey","VideoPage_TabPane","justify","frameBorder","allowFullScreen","VideoPage_Content","page_header","tags","layout","renderInsync","renderCrystalTrade","AboutPage","AboutPage_Content","BlankPage","BlankPage_Content","TestPage","spinLoadding","TestPage_Content","spin","spinning","ServicePage","onBuyService","jumpCoupon","onMyBill","memberMenuSelectKey","initLoadding","currency","expiration","SetServiceInfo","kk","addOn","intro","date","isCoupon","discount","price","formatPrice","ins","ups","totalCount","usageCount","cont","uph","parseDiscount","specialPrice","button","expiredDate","upo","couponSource","universalCouponIndex","findIndex","amount","Intl","NumberFormat","currencyDisplay","format","strInfo","nv","nvs","pp1","columns","dataIndex","align","render","record","ServicePage_Content","extra","table","bordered","rowClassName","pagination","CARD_ELEMENT_OPTIONS","base","fontFamily","fontSmoothing","::placeholder","invalid","iconColor","CardSection","react_stripe_umd","backtestCredit","points","5","6","CheckoutForm","handlePaymentIntent","pii","paymentIntent","handlePaymentMethod","couponId","pmi","paymentMethod","multiply","_ref","asyncToGenerator","mark","_callee2","stripe","elements","abrupt","_callee","createPaymentMethod","getElement","CardElement","billing_details","_x","apply","Number","pow","onSelectMon","changeAmount","onSelectCoupon","handleCardAction","getOrderTotalPrice","total","CheckoutForm_Option","parseInt","renderSelItem","SetCoupon","CheckoutForm_Content","renderBillInfo","charge_CardSection","InjectedCheckoutForm","_ref3","CheckoutForm_CheckoutForm","Step","Steps","ChargePage","handleBackHome","handlePayAgain","init","handleSendEmail","stripePromise","loadStripe","orderNo","paymentStatus","paymentMethodDetails","subject","es_result","handleStepState","ChargePage_Content","steps","renderSuccess","renderForm","Confirm","confirm","SubscriptionPage","handleCancelSubscription","sId","initLoading","assertThisInitialized","okType","subscriptionId","onMySubscription","handleSubscription","removeListener","subState","SubscriptionPage_Content","EmailForm","sendCaptcha","_this$props$form","getFieldError","isFieldTouched","nameError","emailError","captchaError","validateStatus","help","WrappedEmailForm","maxWidth","PaymentForm","retryInvoiceWithNewPaymentMethod","paymentMethodId","invoiceId","product","add","r1","r2","onClickClose","currentTarget","subscribed","hisSubscriptions","j","_loop","Status","category","unitPrice","isSuccess","latest_invoice","payment_intent","confirmCardPayment","client_secret","payment_method","_loop2","getMonthsByAmount","parseFloat","PaymentForm_Option","readOnly","PaymentForm_Content","renderProduct","subscription_CardSection","_ref4","PaymentForm_PaymentForm","BillingPage","handleResubscribe","handleChangeAccount","addAccount","handleNext","accountOptions","BillingPage_Option","subsriptionNo","html","describe","defaultValue","dropdownRender","cursor","onMouseDown","height","PaymentForm_InjectedCheckoutForm","BillingPage_Content","BillingPage_Step","UpdatePage","appendSubscriptionService","specialOffer","handleUpdateSubscription","subscriptService","marginLeft","UpdatePage_Option","descriptions","subscriptionNo","created","shape","data-value","UpdatePage_Content","renderSubscription","float","dropdown","overlay","renderMonths","moment_timezone","range","end","closeShort","closeTime","CN","US","BaseInfo","submitHawkeye","endDate","moment","symbolCode","symbolName","direction","tradeQuantity","startDate","latestPrice","quoteChange","onChangeSymbol","onSelectSymbol","tmpDataCode","toFixed","chg","setBaseInfo","onFocusSymbol","onBlurSymbol","substring","handleSearch","onChangeDirection","onChangeTradeQuantity","tradeQuantityStatus","tradeQuantityMessage","onChangeStartDate","startDisabledDate","startOf","startDisabledTime","hours","minutes","endOf","mm","hour","startHour","minute","disabledHours","disabledMinutes","onChangeEndDate","endDisabledDate","endDisabledTime","endHour","handleStartOpenChange","endOpen","handleEndOpenChange","tradeDateStatus","tradeDateMessage","oDate1","oDate2","setHawkeyeDate","customEffectiveTime","onValueAddedServices","tz","setDefault","symbolStatus","symbolMessage","hawkeyeBaseInfo","labelAlign","colon","group","BaseInfo_Option","onSearch","suffix","lineHeight","es_radio","Group","date_picker","showTime","allowClear","onOpenChange","disabledDate","disabledTime","BaseInfoForm","RotationSentence","cn","en","Sider","TextArea","Input","regular","ParseString","strings","regs","len","condParams","numLen","sentenceTemplate","prevNum","VernacularHawkeye","iTimer","placeholderTimer","sentences","rotation","getSmileyDayString","tmpName1","checkMatchFormula","us","templatString","tus","tmpName2","isMacth","tmpRegular","RegExp","para1","toUpperCase","onChangeBatch","checkedKeys","onLuisSelect","luisTabsKeys","tmpluisString","replaceHtml","isPresetFormula","prevName","isSelectCondition","requestSentenceFormula","inputFormulaName","refs","focus","blur","onLuisCheck","_this$state4","dd","o","tmp","onFocusCondition","onChangeCondition","onIntelligentAnalysis","LuisAnalysis","RequestString","onUseFormula","warning","_this$state5","onChangeTabs","renderTreeNodes","VernacularHawkeye_TreeNode","dataRef","analysisFormula","strategyData1","strategyData3","strategyData0","isLoad","highlightWithinTextarea","highlight","data01","data02","isSplice","obj","newArr","reduce","pre","cur","tmpTis","splice","array","isRepeat","subItem","tmpCurrLuString","lustringTitle","sData","_this$state6","currLuString","unique","_this$state7","strategyData","_this$state8","isLoadLuItems","checkFormulaName","ids","resultFormula","setUseFormula","tmpIndex","tmpStrategyData1","tmpStrategyData3","tmpStrategyData0","aryConcat","formula","str","is_global","tmpName","interval","_this$state9","prevName1","formulaModel","prevName2","tmp1","tmp2","ftcn","isSymbol","para2","para3","para01","para02","para03","jj","tmpString","parseString","tcn","parseString2","matchString","_loop3","_this$state10","clearTimeout","floor","join","uuid","_this$state11","formulaTemplateString","ftus","_loop4","formulaResult","tmpCondParams","useFormulas","tmpStrings","isEmpty","isFilterScan","_this$state12","textareaPlaceholder","statement","aryStatement","tmpStatements","String","fromCharCode","animated","VernacularHawkeye_TabPane","checkable","onCheck","renderSearchState","ref","rows","renderIntelligentAnalysis","HawkeyeCondition","onChangeTargetDecimal","decimalLen","slice","tmpNumber","tmpNum00","tmpNum01","tmpPrice","setConditions","onBlurTargetDecimal","tmpValue","onChangeInt","amplitude","tmpAmplitude","handleChangePriceRise","PriceRise","handleChangePriceFalling","PriceFalling","handleChangeStockPriceWearOn01","StockPriceWearOn01","handleChangeStockPriceFellBelow01","StockPriceFellBelow01","handleChangeIncrease01","Increase01","handleChangeDecline01","Decline01","handleChangeKDJGoldFork","KDJGoldFork","handleChangeKDJDeadFork","KDJDeadFork","handleChangeMACDGoldFork","MACDGoldFork","handleChangeMACDDeadFork","MACDDeadFork","handleChangePriceWearBollinger01","PriceWearBollinger01","handleChangePriceWearBollinger02","PriceWearBollinger02","handleChangePriceDownBollinger01","PriceDownBollinger01","handleChangePriceDownBollinger02","PriceDownBollinger02","handleChangeAnyOnlineWear01","AnyOnlineWear01","handleChangeAnyOnlineWear03","AnyOnlineWear03","handleChangeAnyMovingAverage01","AnyMovingAverage01","handleChangeAnyMovingAverage03","AnyMovingAverage03","conditions","VernacularConditions","hawkeyeConditions","conditionContent","PriceRiseTo","PriceFellTo","ReboundRange01","ReboundRange02","Fallback01","Fallback02","DailyIncreaseReached","DailyDeclineReached","StockPriceWearOn02","StockPriceFellBelow02","Increase02","Decline02","DailyTurnoverRate","BuyOneHigherThan","SellPriceBelow","ReachHigh","GapReachHigh","Volume01","Volume02","VolumeRatio","DailyAmplitude","AnyOnlineWear02","AnyOnlineWear04","AnyMovingAverage02","AnyMovingAverage04","renderPriceRiseTo","renderPriceFellTo","renderReboundRange","renderFallback","renderDailyIncreaseReached","renderDailyDeclineReached","renderPriceRise","renderPriceFalling","renderStockPriceWearOn","renderStockPriceFellBelow","renderIncrease","renderDecline","renderDailyTurnoverRate","renderKDJGoldFork","renderKDJDeadFork","renderMACDGoldFork","renderMACDDeadFork","renderPriceWearBollinger","renderPriceDownBollinger","renderBuyOneHigherThan","renderSellPriceBelow","renderReachHigh","renderGapReachHigh","renderVolume","renderVolumeRatio","renderDailyAmplitude","renderAnyOnlineWear","renderAnyMovingAverage","k","renderVernacularCondition","sort","hawkeyeConditionParams","addonAfter","HawkeyeCondition_Option","VernacularCondition","hidden","prototype","fmt","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","S","getMilliseconds","$1","chart","dataTable","plot","mainMapping","rawData","streamPointsCount","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","timeSharing","chartInfo","sDate","eDate","w","h","nPos","timeZoneOffset","getTimezoneOffset","dateFormat","anychart","outputLocale","outputTimezone","outputDateTimeFormat","HawkeyeKLine","onTargetPriceLine","targetPriceDisplay","onEstimatedTargetPriceDays","estimatedDaysDisplay","onTimeSharing","nodes","querySelectorAll","classList","contains","remove","historyDataItems","profitRange","translateX","translateY","moving","lastX","lastY","onmouseup","onMouseUp","onmousemove","onMouseMove","hd","pr","renderChart","onMove","dx","clientX","dy","clientY","vy","hx","streamData","rowsCount","openValue","spread","opt_startVolume","rand","opt_spreadMult","opt_spreadAdd","spreadMult","isNaN","spreadAdd","round","randVolume","opt_prev","diff","abs","high","low","volume","setTime","getUTCHours","setUTCDate","getUTCDate","setUTCHours","getUTCDay","lastValue","lastDate","lastVolume","generate5MinsOHLCData","addData","getDateTime","dt","df","dateTime","mapAs","chartContainer","childs","childNodes","removeChild","stock","scroller","enabled","crosshair","displayMode","xLabel","tickValue","yLabel","titleFormat","x","credits","legend","series","candlestick","normal","fallingFill","fallingStroke","risingFill","risingStroke","indicator","priceIndicator","axis","yAxis","stroke","tmpLabel","fontColor","bg","background","fill","useHtml","yGrid","xGrid","dash","orientation","xAxis","labels","toLocaleDateString","month","listen","firstSelected","lastSelected","container","draw","getPixelBounds","firstDate","BarStart","StopLoss","TakeProfit","profitRangeTable","areas","rangeSplineArea","highStroke","lowStroke","tmpLastDate","rangeMarker","from","to","firstRange","selectRange","HawkeyeKLine_Content","left","TooltipPage","filterError","closeLong","placeOrderType","submitHawkeyeBtnTitle","HawkeyePage","hawkeyeType","confirmOrder","IsSmartHawkeye","smartHawkeye","checkIsSmartHawkeye","onChangeCondTabs","hawkeyeCondType","onSelectKLineCondition","onSelectCondition","tmpConditions","onSmartHawkeye","HawkeyeType","SymbolName","SymbolCode","Direction","TradeQuantity","StartDate","EndDate","selectCondition","{num}","{num1}","{num2}","{avg}","line","line01","line02","{avg1}","{avg2}","tmpVernacularConditions","onSubmitHawkeye","handleHawkeyeCancel","changeConfirmOrder","permissions","setUserPermission","renderVernacularHawkeye","IsBaseHawkeye","hawkeyeCondition","HawkeyePage_TabPane","HawkeyePage_Content","renderSelectCondition","handleBaseInfo","VernacularHawkeye_VernacularHawkeye","handleLuisAnalysis","HawkeyeCondition_HawkeyeCondition","HawkeyeKLine_HawkeyeKLine","TooltipPage_TooltipPage","HawkeyeListPage","ConfirmHawkeye","wDataSource","nDataSource","confirmHawkeye","updated","selectedRowKeys","triggerHawkeye","tmpHawkeyes","triggerCondition","TriggerCondition","triggerDate","TriggerDateTime","callHawkeye","onCreateHawkEye","onChangeHawkeyeItems","onHawkeyePlaceOrder","hawkeyePlaceOrder","onHawkeyeClose","hawkeyeClose","onHawkeyeCloses","onHawkeyeCancel","hawkeyeCancel","onHawkeyeCancels","onRemove","onRemoves","setRowClassName","rowId","onSelectChange","handleConfirmOrder","placeOrderVisible","handleCancelOrder","wColumns","sorter","sortDirections","row","rangePercent","cond","tradeDirection","expireDate","whiteSpace","nColumns","wIndex","nIndex","tmpHawkeyeOrder","hawkeyeName","tmpHawkeye","{name}","rowSelection","operations","HawkeyeListPage_Content","tabBarExtraContent","HawkeyeListPage_TabPane","StockFormulaPage","conceptId","conceptStrategy","comment","filterString","explanations","filterStringTitle","overlayClassName","RadioGroup","Radio","SymbolGroupPage","onSelectStockPool","setStockGroup","handleStockChange","handleConceptChange","setSelectStockGroup","handleSrcChange","handleIndexChange","handleStChange","handleFundChange","handleCustomGroupsChange","toggleLuisStockPicker","isSymbolGroup","stockData","conceptData","srcData","indexData","customGroupsData","isRefresh","generalIndex","fund","customGroups","maxTagPlaceholder","defaultSymbolGroups","SymbolGroupPage_Option","subGroupName","customGroupsItems","groupId","groupName","tmpSt","ks","tmpSymbol","stockGroup","labelInValue","maxTagCount","showArrow","maxTagTextLength","renderPoolCount","renderSymbolGroup","renderFundPanel","renderCustomGroupsPanel","USSymbolGroupPage","handleSectorMouseOver","sectorIndustryBtn","sectorIndustryIcon","sectorIndustryContent","handleSectorMouseOut","HandleMouseOver","industry","h1","offsetHeight","sectorClass","industryClass","HandleMouseOut","HandleIndustryMouseOver","industryId","industryItemClass","industrySelectClass","HandleIndustryMouseOut","HandleIndustryClick","sectorId","industryItems","industryTitle","industryData","selectSectorId","popsTop","popsLeft","USSymbolGroupPage_Option","sug","sh","isCheck","onMouseOver","onMouseOut","renderSectorIndustry","USSymbolGroupPage_RadioGroup","StockOrderPage","handleOrderTypeChange","orderDirection","orderType","isResetItem","stockOrder","handleOrderDirectionChange","defaultOrderType","orderTypeItem","customVariable","startPos","endPos","isPos","tmpPos","splitPos","StockOrderPage_Option","isUseOrder","StockResultPage","saveStock","onJoinCustomStock","tmpCustomGroups","stockItem","stockItems","customStockEvent","GroupId","GroupName","StockCount","stockName","validateMessage","handleSaveGroupName","handleCancelGroupName","onChangeGroupName","csvData","myDate","getYear","isStockGroupDone","$LATEST_PRICE","$RANGE_PERCENT","customStockGroups","customStockGroupData","fontWeight","react_csv","filename","confirmLoading","stockGroupLoadding","labelCol","wrapperCol","hasFeedback","pageSize","ConceptPage","jumpMyStrategy","jumpMyCustomStock","onMyStrategy","startStockPicker","isShowStockResultPage","checkOperatingStrategy","onSaveStrategy","filterName","saveVisible","strategyName","handleSaveStrategy","customId","handleCancelStrategy","onEditStrategy","selectKeys","charAt","conceptStrategyCache","onChangeStrategyName","onSelectConceptStrategy","isLeaf","tmpFilterString","topIndex","bottomIndex","expandedKeys","selected","onExpandConceptStrategy","expandedKey","expanded","ConceptPage_TreeNode","strageies","conceptStrategyData","siderClass","tmpSelectedRowKeys","tmpStrategy","sks","setTreeStrategy","setTreeStrategyData","tmpConcepts","tmpItem","cen","ccn","eer","FilterId","FilterName","GroupType","FilterString","SymbolGroupId","OrderType","OrderDirection","CustomId","ConceptId","onExpand","ConceptPage_Content","ConceptPage_Sider","renderConceptStrategy","SymbolGroupPage_SymbolGroupPage","handleStockGroup","USSymbolGroupPage_USSymbolGroupPage","StockFormulaPage_StockFormulaPage","StockOrderPage_StockOrderPage","handleStockOrder","StockResultPage_StockResultPage","handleCustomStock","userIdNum","LuisPage","isLuis","isIntraday","changeIsIntraday","LuisPage_TreeNode","tmpFormulaName","VernacularStrategy","strategyData2","strategyIntraday","tmpStrategyData2","tmpStrategyIntraday","_this$state13","buttonStyle","Button","LuisPage_Sider","LuisPage_TabPane","LuisPage_TextArea","_ref$entity","entity","char","EditStrategyPage","onCaretPositionChangeHandle","caretPosition","onChangeFilterString","textareaValue","startPosition","textareaClass","onChangeStrategy","onBack","goBack","ConceptStrategy","rta","setCaretPosition","_this7$state","autoMatchData","filterFunctionsCache","filterFunctions","m2","mouseDiscr","men","mcn","_this8","EditStrategyPage_Content","backIcon","LuisPage_LuisPage","react_textarea_autocomplete_es","loadingComponent","minChar","dataProvider","buildFilterString","component","output","onCaretPositionChange","VernacularPage","callSendError","scanRequestLoadding","callCustomSymbolGroups","customStockGroupsCache","gn","ui","Description","callSaveFilterRequestResult","saveFormulaLoadding","Category","customStrategyCache","VernacularStrategyCache","callFilterRequestResult","callScanAlertResult","modalTitle","tmpStockGroups","Action","OldGroupName","VernacularPage_Content","MyStrategyPage","stockPoolkKey","onNewStrategy","onCopyStrategy","currentSelectKey","cacheName","tmpCustomStrategy","StrategyCache","handleMenuClick","tmpSelectKey","tmpData","groupType","symbolGroupId","setStrategyShow","inlineIndent","defaultSelectedKeys","MyStrategyPage_Content","MyStrategyPage_Sider","renderStrategyItem","UpdateStrategyPage","tmpStockPoolKey","UpdateStrategyPage_Content","StrategyPage","callRemoveStrategyResult","_this2$state","tmpCustomStrategyCache","filtersCache","_this2$state2","CustomStrategy","onRename","_this2$state3","onCopy","_this2$state4","_this2$state5","handleUpdateStrategy","_this2$state6","newConceptStrategy","newCustomStrategy","onBacktestItems","selectRow","tmpItems","backtestCount","StrategyPage_Content","onRow","AutoComplete","CustomStockPage","saveSymbolGroupLoadding","setCustomGroup","sgs","customStockGroup","handlePopoverMenuClick","groupIds","gId","renameStockGroup","copyStockGroup","removeStockGroup","onCreateCustomStockGroup","tmpSelectRowKeys","tmpSymbolList","selectSymbol","toConsumableArray","stockCode","tmpCustomStockGroup","rename","copy","popover","backgroundColor","gIds","CustomStockPage_Content","CustomStockPage_Sider","renderCustomStockItem","CustomStockPage_Option","optionSymbol","scanStartEndDate","today","strategyScan","strategyScanning","PriceInput","handleNumberChange","number","triggerChange","onBlurNumberChange","changedValue","OptionParams","predictedValue","endDateStatus","predictedValueStatus","predictedValueUnit","scanRequest","Underlying","PredictedValue","PredictedValueUnit","handleUnderlyingChange","underlying","handleEndDate","dates","dateStrings","todayDisabledDate","handleDirectionChange","isShowPercent","handlePredictedValueChange","OptionParams_Option","OptionParams_PriceInput","optionError","OptionParamsForm","optionData","extraCssText","grid","right","bottom","containLabel","boundaryGap","showSymbol","smooth","itemStyle","lineStyle","markPoint","symbolSize","borderColor","getChartOption","y","xx","yy","tmpKey","formatter","yValue","seriesName","deepCopy","hit","original","optionsChart","OptionResultPage","OnSelectShowChart","chartHeight","echarts","setOption","pnlPoints","resize","onresize","recordName","breakEventPoints","breakEvenPoint","pnl","scroll","OptionPage","onPerpleScan","stockPrice","OptionPage_Content","OptionResultPage_OptionResultPage","RangePicker","DatePicker","FactorGeneratorPage","onDateChange","startdate","enddate","handlePeriodChange","handleGeneratorFactorFile","gLastTimes","scanFilterStatus","generatorStatus","factorGenerator","feature","Period","queryGenerateStatus","factorGeneratorTimer","generatorFactor","generatorWait","quarter","subtract","generatorButtonTxt","generatorError","Fragment","FactorGenerator_Option","FactorPage","myFactorFile","onRowChange","handleFactorScan","requestFilter","renderStockResult","fixed","csvDataTitle","csvDataItem","scrollParams","stockPickerModeKey","pastTime","_this4$state","handlePastTimeChange","FactorPage_Option","FactorPage_Content","paddingBottom","FactorGenerator_page","handlefactorGenerator","FactorStatus","FactorIndex","isAnalyzer","analyzeKey","onClickViewResult","StartAnalyzer","aLastTimes","okButtonProps","cancelButtonProps","FileId","queryAnalyzeStatus","queryAnalyzeTimer","factorAnalyze","TaskId","removeKey","FileName","beforeUpload","file","isCSV","match","isLt20M","handleUploadChange","fileList","analyzer","analyzeStatus","tmpFactorFile","percent","progress","update","FactorIndex_Content","upload","AverageRetByQuantileOption","pt","axisTick","AlphaStrengthOption","CumRetOption","CumRetByQuantileOption","relVal","AverageRetBySectorOption","barGap","ICValueByPeriodOption","ICMeanBySectorOption","axisLabel","TurnoverCurveOption","sector","seriesConfig","rowSpan","totalRet","monotonicColumns","MonotonicBySectorColumns","icColumns","turnoverColumns","FactorAnalyzer","renderTabContent","selectedKey","monotonicDataSource","MonotonicBySectorDataSource","t1","t2","t3","t4","t5","emptyText","flexWrap","icDataSource","turnoverDataSource","onSelectFactorCategory","resultTaskId","selectedFactorName","selectedFactorCategory","channels","chartNameList","charts","onSelectFactorName","factor-return","OverView","AverageRetByQuantile","MonotonicByPeriod","AlphaStrength","CumRet","CumRetByQuantile","MonotonicBySector","RetBySector","IcValueByPeriodChart","IcMeanBySectorChart","TurnoverCurveChart","defaultSelectedFactorName","overview","periodWise","sharpeRatio","annAlpha","beta","labelItem","nameList","pdiv","innerHTML","div","setAttribute","appendChild","MonotonicItem","monotonic","sk","MonotonicBySectorItem","sectorName","IcValueByPeriodItem","IcStatsItem","IcMeanBySectorItem","FactorMeanOutPctItem","quantileNum","FactorRankingCorrItem","FactorAnalyzer_Content","FactorAnalyzer_Sider","FactorAnalyzer_TabPane","defaultProps","Options","IndexPage","handleDayLineChange","dayline","daylineMode","handleMin60LineChange","min60line","min60lineMode","handleDayLineBack","handleMin60lineModeBack","less","tmpParams","sactorCategoryRowId","setSymbolRowClassName","sactorRowId","selectSactorCategoryRow","getDatabase","selectSactorRow","handleChangeSector","renderOption","correlation_Option","tDataSource","cDataSource","sDataSource","dayline01","dayline02","min60line01","min60line02","tmpSectorItems","sectorList","subIndex","tmpSymbols","volumeRatio","riseSpeed","riseNumber","fallNumber","tradeAmount","increase5day","increase10day","increase20day","tmpRecord","tColumns","cColumns","sColumns","stockcode","stockname","quotechange","latest","risefall","riseFall","volumeratio","risespeed","tradeamount","totalmarketvalue","totalMarketValue","circulationmarketvalue","circulationMarketValue","turnoverrate","turnoverRate","PERatio","tallest","lowest","tmpquotechange","tmplatest","correlation_Content","correlation_TabPane","defaultPageSize","statisticsOption","borderWidth","textStyle","rotate","minInterval","barWidth","equityOption","animation","dataZoom","realtime","itemGap","toolbox","dataView","magicType","restore","saveAsImage","calculable","nameTextStyle","axisLine","splitArea","markLine","silent","areaStyle","incomeOption","onZero","fundsOption","axisPointer","chartData","markArea","originFund","ceil","sName","xData","yName","incomes","xName","equitys","BacktestResult","onSelectConditionByIncome","tmpIncomes","statisticsResult","backtestId","rateOfReturn","equityCurve","bRateOfReturn","superimposedIncome","keepDecimals","setIncomeData","onSelectConditionByEquity","equity","tmpEquitys","bEquity","cash","setEquityData","onSelectConditionByTrades","tmpTrades","trades","pnlPercent","tradeTime","entryDatetime","strikePrice","quantity","turnover","entryPrice","pnlp","exitDatetime","exitPrice","setBacktestResult","incomeChart","equityChart","resizeChart","sign","maxProfitFactor","profitFactorItem","annualizedRateOfReturn","totalPnl","profitFactor","maxDrawdown","totalTrades","setStatisticsData","BacktestResult_Content","tag","PeriodTags","StrategyMode","BacktestPage","callSendBacktestError","callBacktestError","callBacktestLastTimes","callBacktestStatus","consuming","callBacktestResult","tmpNonStrategyList","strategyList","tmpStrategyName","sn","tt","dayTradeOnly","maxDrawdownPercent","nonStrategyList","handleMyBacktest","IsStartBacktest","checkIsStartBacktest","onSelectStrategy","tmpStrategyItems","onStartBacktest","selectedPeriod","strategyType","strategyLists","StrategyList","SelectedPeriod","reqId","r","importBacktestResult","changeStrategyType","classItems","setStrategyItems","re","intros","strategyMode","BacktestPage_Content","BacktestPage_Option","renderStrategyLib","BacktestPage_CheckableTag","strokeColor","0%","100%","BacktestResult_BacktestResult","selRateOfReturn","MyBacktestPage","backtestDate","maxRateOfReturn","disabledBacktestDate","onChangeBacktestDate","handleIncomesChange","handleSelStock","currSelStock","singleStockBacktestResult","clearFilter","handleSearchStockBacktest","stopPropagation","backtestIds","tmpDataSource","mr","maxdrawdown","md","strategyPeriod","sp","backtestInterval","strategyNumber","tmpBacktestResult","renderItem","Meta","MyBacktestPage_Content","MyBacktestPage_Option","MyBacktestPage_Sider","renderStockBacktest","OptimalGridResult","callSendTradeError","promptModalVisible","callDeployStrategy","TradeType","jumpRealtime","modalBacktestId","modalStrategyName","capital","gridCnt","initCapital","onSelAccountType","accountType","handleBrokerChange","broker","buildBindBroker","handleChangeCapital","cg","modalSymbolCode","g","handleBlurCapital","onRealTime","tradeType","onSimulation","onMultiOptimization","onScrollOptimization","modalStrategyType","BacktestId","StrategyId","Capital","DayTradeOnly","ReqId","handlePromptOk","handlePromptCancel","modalSymbolName","initialRateOfReturnOnCapital","chartCapital","renderModalRealTimeContent","renderModalSimulationContent","newDate","fromDate","renderModalRealTimeContentForUs","renderModalRealTimeContentForCn","brokerItems","OptimalGridResult_Option","OptimalGridResult_Content","renderModalContent","dangerouslySetInnerHTML","__html","OptimalGridPage","br","GridStrategys","StrategyName","priceRange","GridCnt","gridWidth","checkInputParamsStatus","handleChangeDayTradeOnly","lower","upper","Lower","Upper","Last","CommType","MinComm","PerShareCommission","priceRangeStatus","priceRangeMessage","tmpUpper","tmpLower","OptimalGridPage_Content","OptimalGridPage_Option","OptimalGridResult_OptimalGridResult","MyOptimalGridPage","_this2$setBacktestRes","_this$setBacktestResu","_this$setBacktestResu2","_this$setBacktestResu3","MyOptimalGridPage_Content","MyOptimalGridPage_Option","MyOptimalGridPage_Sider","BatchResult","modalBatchId","oRateOfReturn","oEquityCurve","oBRateOfReturn","oSuperimposedIncome","batchId","BatchId","ExecutionPlatform","tradeCondition","infoDataSource","statisticsItems","targetDistance","stopDistance","maxHoldingPeriod","oInitialRateOfReturnOnCapital","oAnnualizedRateOfReturn","oProfitFactor","BatchResult_Option","infoColumns","BatchResult_Content","OptimalBatchPage","callOptimalBatchError","callOptimalBatchLastTimes","callOptimalBatchStatus","callOptimalBatchResult","setProgress","onStartOptimized","BacktestType","backtestRange","isStartOptimized","step","stepKey","setepValue","tmpStepKey","tmpSetepValue","percentMap","stepKey1","setepValue1","setProgressStatus","tmpGridCnt","comm","OptimalBatchPage_Content","BatchResult_BatchResult","MyOptimalBatchPage","bbs","setStatisticsResult","oMaxRateOfReturn","omr","MyOptimalBatchPage_Content","MyOptimalBatchPage_Option","MyOptimalBatchPage_Sider","OptResult","OptResult_Option","OptResult_Content","OptimalOptPage","callOptimalOptError","callOptimalOptLastTimes","callOptimalOptStatus","callOptimalOptResult","OptimalOptPage_Content","OptResult_OptResult","MyOptimalOptPage","MyOptimalOptPage_Content","MyOptimalOptPage_Option","MyOptimalOptPage_Sider","BacktestGridResult","BacktestGridResult_Content","BacktestGridPage","backtestInfo","tmpCapital","gridCntStatus","gridCntMessage","capitals","getCapital","BacktestGridPage_Content","BacktestGridPage_Option","BacktestGridResult_BacktestGridResult","MyBacktestGridPage","MyBacktestGridPage_Content","MyBacktestGridPage_Option","MyBacktestGridPage_Sider","AIGridResult","AIGridResult_Option","AIGridResult_Content","AIGridPage","AIGridPage_Content","AIGridPage_Option","AIGridResult_AIGridResult","MyAIGridPage","MyAIGridPage_Content","MyAIGridPage_Option","MyAIGridPage_Sider","AIBatchPage","callBestFromBatchBacktestError","callBestFromBatchBacktestLastTimes","callBestFromBatchBacktestStatus","callBestFromBatchBacktestResult","AIBatchPage_Content","MyAIBatchPage","MyAIBatchPage_Content","MyAIBatchPage_Option","MyAIBatchPage_Sider","AIOptPage","callAIOptBacktestError","callAIOptBacktestLastTimes","callAIOptBacktestStatus","callAIOptBacktestResult","AIOptPage_Content","MyAIOptPage","MyAIOptPage_Content","MyAIOptPage_Option","MyAIOptPage_Sider","TradeResult","entryTime","entryQty","entryTurnover","unRelPnL","entryPnlp","entryDivide","dir","exitTime","exitQty","exitTurnover","exitPnlp","exitDivide","relPnL","TradeResult_Content","strCategory","RealTimePage","callSendStrategyStatusError","strategyKey","callSetStrategyStatus","handleSearchStockTrade","tradeIds","ts","strategyTradeResult","strategyIds","handleStrategy","spinModalLoadding","isSetStatus","tbLogin","tb","grandTotalRateOfReturn","ct","tradingStraregy","startTime","fd","endTime","ed","_this$setTradeResult","setTradeResult","tmpTradeResult","_this$setTradeResult2","_this$setTradeResult3","sequenceIds","RealTimePage_Content","RealTimePage_Option","RealTimePage_Sider","renderStockTrade","TradeResult_TradeResult","SimulationPage","modalStrategyId","renderModalContentForUs","renderModalContentForCn","SimulationPage_Option","SimulationPage_Content","SimulationPage_Sider","GeneralStrategyPage","GeneralStrategyPage_Content","RealTimeGeneralStrategyPage","RealTimeGeneralStrategyPage_Content","markAreaData","RollingResult","OnSelectCondition","conditionDataSource","funds","setRollingResult","setRowConditionClassName","spinViewLoadding","prd1OptParent","prd1OptChild","area1","prd1EcFromDate","prd2EcFromDate","area2","prd3EcFromDate","area3","prd3EcToDate","prd1Date","prd2Date","prd3Date","prd1Return","prd2Return","prd3Return","totalReturn","RollingResult_Option","conditionColumns","RollingResult_Content","RollingPage","callRollingError","callRollingLastTimes","callRollingStatus","callRollingResult","symbolsItems","back","rollingTimer","prd1EcToDate","prd2EcToDate","RollingPage_Content","{symbol}","RollingPage_Option","RollingResult_RollingResult","MyRollingPage","MyRollingPage_Content","MyRollingPage_Option","MyRollingPage_Sider","TdAmeritradePage","URLSearchParams","TdAmeritradePage_Content","components_SymbolGroupPage_Option","SymbolGroupPage_RadioGroup","handleFilterChange","sourceFilterId","handleIntervalChange","validPeriodBarInterval","handleBarCountChange","validPeriodBarCount","handleBarCountBlur","filtersData","customGroupsClass","upstreamFilterClass","validPeriodBarCountClass","components_USSymbolGroupPage_Option","sub","errors","tmpSourceFilterId","components_USSymbolGroupPage_RadioGroup","renderUpstreamFilterPanel","FilterPage","filterRequestLoadding","jumpMyFilter","toMyFilter","onChangeInterval","alertInterval","checkInterval","onBlurInterval","onSaveFilter","checkFilterParams","handleSaveFilter","AlertInterval","SourceFilterId","ValidPeriodBarCount","ValidPeriodBarInterval","State","handleCancelFilter","onChangeFilterName","alertIntervalClass","alertIntervalError","isSendFilter","_this6$state","FilterPage_Content","components_SymbolGroupPage_SymbolGroupPage","components_USSymbolGroupPage_USSymbolGroupPage","commonColumns","datetime","commonCompactColumns","MyFilterPage","filterItems","filterIds","callfilterAlertResult","filterAlerts","compactColumns","compactDataSource","compactSymbolCount","filterAlertCounts","row1","tmpColumns","v1","every","v2","shift","csvDataItems","alerts","localeCompare","onNewFilter","changeDisplayMode","updateFilter","removeFilter","setFilters","filterItemsData","tableScroll","MyFilterPage_Content","MyFilterPage_Sider","renderFilterItems","UpdateFilterPage","UpdateFilterPage_Content","wtOption","wts","PortfolioResult","wt","portfolioDataSource","portfolioOptResult","section","maximizing","R","minimize","V","benchmarking","B","wtData","wT","setPortfolioResult","setWtData","wtChart","portfolioColumns","PortfolioResult_Content","PortfolioPage","callPortfolioOptError","portfolioState","{errorCode}","callPortfolioOptStatus","callPortfolioOptLastTimes","callPortfolioOptResult","PortfolioPage_Option","isStartPortfolio","checkIsStartPortfolio","onMyPortfolio","onSelectBarInterval","barinterval","handleChangeTradePeriod","tradePeriod","tradePeriodValue","handleTradePeriodUnitChange","tradePeriodUnit","onStartPortfolio","tmpTradePeriod","sgt","csg","PortfolioPage_Content","PortfolioPage_RadioGroup","PortfolioResult_PortfolioResult","MyPortfolioPage","portfolioIds","ps","PortfolioId","Result","createDate","toDate","barInterval","tmpportfolioItems","MyPortfolioPage_Content","PortfolioOptResult","isStartBacktest","backtsetDataSource","isShowBacktestInfo","backtestDataSource","backtsetColumns","PortfolioOptResult_Content","PortfolioOptPage","PortfolioOptPage_Option","PortfolioOptPage_Content","PortfolioOptPage_RadioGroup","PortfolioOptResult_PortfolioOptResult","MyPortfolioOptPage","MyPortfolioOptPage_Content","OpenAISymbolGroupPage","customGroupName","industryItemName","industryName","isLogin","funName","OpenAISymbolGroupPage_Option","stockGroupName","OpenAISymbolGroupPage_RadioGroup","OpenAIResultPage","ScanEmailForm","_getPrototypeOf2","_len","args","_key","naturalLanguage","onCreate","isConfirmLoading","context","ScanPage_TextArea","SaveFilterForm","_class2","closable","ScanPage","alertMessage","showIcon","callScanIntervalResult","callScanResult","wow","webOpenWith","bfn","baseFormulaName","bfs","baseFormulaString","fn","startScanFilter","openFilter","nameVisible","saveRequestLoadding","handleNameCancel","saveFilter","l","messageVisible","handleModalCancel","saveFormRef","scanFormRef","scanform","emailBody","handleSelFiter","ideas","ideaItems","idea","currSelFilterId","formulas","formatHtml","tmpWebOpenWith","performance","navigation","tmpUseFormula","includes","searchParams","paramsFormulaName","tmpParamsFormulaName","atob","paramsFormulaString","decodeURIComponent","trim","formatString","formatStrings","trimmedLine","startsWith","resetFields","_this$props3","ScanPage_Content","OpenAISymbolGroupPage_OpenAISymbolGroupPage","ScanPage_Sider","OpenAIResultPage_OpenAIResultPage","DemoPage","scrollToBottom","messagesEndRef","scrollIntoView","behavior","buildType","requestLoadding","botMessage","txts","setBotMessage","loadMessage","initMessage","initMsg","selectChatMessage","newMessages","sender","newMessage","botResponse","currentText","prevState","charsToAdd","nextChunk","isValidElement","updatedMessages","SendScanFilter","handleMessageChange","handleSendMessage","txtMessage","tmpMessage","handleBotResponse","handleBuildFilter","isExist","handleBuildStrategy","buyingPower","stopAddingThreshold","liquidationThreshold","entryCondition","FilterType","Quantity","OrderLimit","TIFUnit","TIF","TargetDistance","StopDistance","TrailingStop","MaxHoldingPeriodUnit","MaxHoldingPeriod","ClosingOrderType","ClosingOrderLimit","ForceCloseEOD","ForceCloseTime","ScaleInSeq","ScaleInDistance","CancelOrder","timeoutCount","commissionType","commissionCost","noReEntry","openPositionLimit","executeStrategy","tBAccount","remark","exitCondition","strategyNames","BuyingPower","StopAddingThreshold","LiquidationThreshold","CommissionType","CommissionCost","NoReEntry","OpenPositionLimit","ExecuteStrategy","TBAccount","Remark","EntryCondition","ExitCondition","Strategies","createRef","containsValue","tbUser","tradeAccount","column","tmpStatistics","strToNumber","roundedNum","padEnd","DemoPage_Content","DemoPage_TextArea","autoSize","CountdownTimer","totalTimeLeft","onTimeUpdate","_useState","useState","_useState2","slicedToArray","setCount","useEffect","intervalId","PageNotFoundPage","GoHome","PageNotFoundPage_Content","layout_CountdownTimer","addLocaleData","MemberPage","lazy","CouponPage","Spin","setDefaultIndicator","Loading","rootElement","ReactDOM","config_provider","es","react_router","exact","path","react","fallback","src_Loading","ScanPage_page","DemoPage_page","Login_page","Register_page","HelpPage_HelpPage","DownloadPage_page","VideoPage_VideoPage","FilterPage_page","MyFilterPage_page","UpdateFilterPage_page","ConceptPage_page","EditStrategyPage_page","VernacularPage_page","MyStrategyPage_page","StrategyPage_page","CustomStockPage_page","UpdateStrategyPage_page","BacktestPage_page","MyBacktestPage_page","OptimalGridPage_page","MyOptimalGridPage_page","OptimalBatchPage_page","MyOptimalBatchPage_page","OptimalOptPage_page","MyOptimalOptPage_page","BacktestGridPage_page","MyBacktestGridPage_page","AIGridPage_page","MyAIGridPage_page","AIBatchPage_page","MyAIBatchPage_page","AIOptPage_page","MyAIOptPage_page","RealTimePage_page","SimulationPage_page","GeneralStrategyPage_page","RealTimeGeneralStrategyPage_page","RollingPage_page","MyRollingPage_page","OptionPage_page","FactorPage_page","factor_FactorIndex","FactorAnalyzer_page","HawkeyePage_page","HawkeyeListPage_page","AboutPage_AboutPage","BlankPage_BlankPage","TestPage_page","TdAmeritradePage_page","ServicePage_page","ChargePage_page","SubscriptionPage_page","BillingPage_page","UpdatePage_page","correlation_page","PortfolioPage_page","MyPortfolioPage_page","PortfolioOptPage_page","MyPortfolioOptPage_page","PageNotFound","FooterPage_FooterPage","history__WEBPACK_IMPORTED_MODULE_0__","createBrowserHistory"],"mappings":"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IC,iECkzBJC,GAnzBI,CACf,CACIC,QAAS,iDACTC,KAAM,QACNC,KAAM,QACNC,IAAK,SAET,CACIH,QAAS,kCACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,IACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,qDACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uDACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,sBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,4CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,0CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,oBACTC,KAAM,IACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,2BACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,6CACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,mCACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,IACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,+BACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uCACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,qBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,uCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,6CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,gCACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,mDACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,MACNC,KAAM,q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ACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,sBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,4CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,0CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,oBACTC,KAAM,IACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,2BACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,6CACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,mCACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,IACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,+BACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uCACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,qBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,uCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,6CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,gCACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,mDACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,2BACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,6BACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,uCACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,2BACTC,KAAM,KACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,4BACTC,KAAM,KACNC,KAAM,iCACNC,IAAK,MAET,CACIH,QAAS,0CACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,yBACTC,KAAM,OACNC,KAAM,6CACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,2BACTC,KAAM,KACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,qBACNC,IAAK,MAET,CACIH,QAAS,wBACTC,KAAM,MACNC,KAAM,eACNC,IAAK,MAET,CACIH,QAAS,uBACTC,KAAM,KACNC,KAAM,eACNC,IAAK,oKCx3Bb,IAAA8zF,EAAAjmH,EAAA,KAEekmH","file":"static/js/main.71770e95.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/search.c555972d.less\";","const en_US = {\r\n 'title': 'Quancept: automated trading platform for stock, options, futures, crypto. provide market scanner, filter, streaming alerts, strategy trading EMS, fully automated strategy trading, NLP scan, language understanding scan',\r\n 'keywords': 'stock, scanner, filter, automated trading, NLP, language driven, language understanding, AI strategy,AI model,verbal command,profit target, stop loss, time exit, personalized condition, custom logic, no-code, low-code, platform, portfolio backtest, fast backtest, algorithm backtesting, algorithmic trading, algo model, learn algo trading, quant, quant research, strategy design, trading strategy, algo platform',\r\n 'description': 'Quancept, powerful low-code/no-code tick-by-tick market filter,scanner, empower traders to discover, capture, monetize trading opportunities in real time across the entire market, define and execute trading strategy with ease of use and flexibility',\r\n\r\n 'vernacular title': 'Quancept: automated trading platform for stock, options, futures, crypto. provide market scanner, filter, streaming alerts, strategy trading EMS, fully automated strategy trading, NLP scan, language understanding scan',\r\n 'vernacular keywords': 'stock, scanner, filter, automated trading, NLP, language driven, language understanding, AI strategy,AI model,verbal command,profit target, stop loss, time exit, personalized condition, custom logic, no-code, low-code, platform, portfolio backtest, fast backtest, algorithm backtesting, algorithmic trading, algo model, learn algo trading, quant, quant research, strategy design, trading strategy, algo platform',\r\n 'vernacular description': 'Quancept, powerful low-code/no-code tick-by-tick market filter,scanner, empower traders to discover, capture, monetize trading opportunities in real time across the entire market, define and execute trading strategy with ease of use and flexibility',\r\n\r\n 'intl.menu.home': 'Home',\r\n 'intl.menu.usStocks': 'US STOCKS',\r\n 'intl.menu.cnStocks': 'A STOCKS',\r\n 'intl.menu.stockPicking': 'Scan',\r\n 'intl.menu.strategyStockPicking': 'ç–略库选股',\r\n 'intl.menu.formulaStockPicking': 'å…¬å¼é€‰è‚¡',\r\n 'intl.menu.vernacularStockPicking': 'Scan',\r\n 'intl.menu.newScan': 'New scan',\r\n 'intl.menu.myStragegy': 'My scans',\r\n 'intl.menu.customStock': 'My universe',\r\n 'intl.menu.correlation': '相关性',\r\n 'intl.menu.backtest': 'Backtest',\r\n 'intl.menu.grid': 'Grid',\r\n 'intl.menu.option': '期æƒ',\r\n 'intl.menu.factorService': 'é‡åŒ–å› åæœåŠ¡',\r\n 'intl.menu.hawkeye': 'Monitor',\r\n 'intl.menu.download': 'Download',\r\n 'intl.menu.help': 'Help',\r\n 'intl.menu.filter': 'Filter',\r\n 'intl.menu.newFilter': 'New filter',\r\n 'intl.menu.myFilter': 'My filter',\r\n 'videoTutorial': 'Video',\r\n 'pricing': 'Pricing',\r\n\r\n 'title.newScan': 'Create custom stock scan',\r\n 'title.newFilter': 'Streaming custom stock alerts',\r\n\r\n 'description.scan': 'Quancept streamlines stock market scans, converting user-input patterns into quantitative strategies. Ideal for traders seeking efficient analysis. Optimize your trading with our intuitive tool.',\r\n 'description.filter': \"Quancept's Filters deliver instant alerts for stock events, automating market tracking for traders.Stay ahead with seamless, real-time notifications.\",\r\n\r\n\r\n 'factorService': 'å› åæœåŠ¡',\r\n\r\n 'intl.login': 'Login',\r\n 'intl.logining': 'Logging in...',\r\n 'intl.login.rememberMe': 'Remember me',\r\n 'intl.login.forgotPassword': 'Forgot password?',\r\n 'intl.login.verificationCodeLogin': 'Verification code login',\r\n 'intl.login.userNameLogin': 'Password login',\r\n 'email login':'Email login',\r\n\r\n 'intl.register.phoneRegister': 'Mobile registration',\r\n 'intl.register.emailRegister': 'Email registration',\r\n\r\n 'intl.register.free': 'Register',\r\n 'intl.login.immediately': 'Login immediately',\r\n 'Login to existing quancept account': 'Login to existing quancept account',\r\n\r\n 'intl.register': 'Register',\r\n 'intl.registered': 'Registering',\r\n 'intl.register.phone': 'Phone number',\r\n 'intl.register.captcha': 'Verification code',\r\n 'intl.register.getCaptcha': 'Get verification code',\r\n 'intl.register.readAndAccept': 'I have read and hereby accept the',\r\n 'intl.register.agreement': 'Agreement',\r\n\r\n 'promo.code': 'Promo Code',\r\n 'promoCode.format': 'Promo Code (7 Letters and Numbers)',\r\n 'promoCode.required.format': 'Must contain one or more digit(s) and letter(s)',\r\n 'promoCode.error': 'Does not exist or has expired',\r\n\r\n 'intl.resetPassword': 'Reset Password',\r\n 'intl.resetPasswording': 'Password resetting',\r\n\r\n 'intl.youHaveRegisterSuccess': 'Congratulationsï¼',\r\n 'intl.register.openQuantitativeInvestment': 'A quantitative investment journey for you',\r\n\r\n 'phone forget': 'Password reset',\r\n 'email forget': 'Email password reset',\r\n 'phone number and email address': 'Phone number and email address',\r\n\r\n 'intl.forgetPasswordSuccess': 'Password has been reset',\r\n 'intl.login.goToLogin': 'Please login',\r\n\r\n 'optional': 'Optional',\r\n\r\n 'intl.optionSymbol': 'æœŸæƒæ ‡çš„',\r\n 'intl.scanStartEndDate': '扫æèµ·æ¢æ—¥',\r\n 'intl.today': '今天',\r\n 'intl.to': 'to',\r\n 'intl.direction': '涨跌设置',\r\n 'intl.strategyScan': 'ç–略扫æ',\r\n 'intl.strategyScanning': 'ç–略扫æä¸',\r\n\r\n 'please.select.option.target': 'è¯·é€‰æ‹©æœŸæƒæ ‡çš„',\r\n 'please.enter.scan.start.and.end.date': '请输入扫æèµ·æ¢æ—¥',\r\n 'please.select.ups.and.downs.setting': '请选择涨跌设置',\r\n 'rise': '上涨',\r\n 'fall': '下跌',\r\n 'riseTo': '上涨至',\r\n 'fallTo': '下跌至',\r\n 'please.select.ups.and.downs.setting.unit': '请选择涨跌设置å•ä½',\r\n 'price.difference': 'Price difference',\r\n\r\n 'combination.name': '组åˆåç§°',\r\n 'combination.details': '组åˆè¯¦æƒ…',\r\n 'maxProfit': '最大收益',\r\n 'maxRisk': '最大风险',\r\n 'investment': 'æƒåˆ©é‡‘支出/æ”¶å…¥',\r\n 'yieldToMaturity': '到期收益率(%)',\r\n 'cost': '支出',\r\n 'income': 'æ”¶å…¥',\r\n\r\n 'option.scan.result': 'æ ¹æ®å‚数设置,共扫æå‡º {num} ç§æœŸæƒç–略组åˆ',\r\n 'combined.profit.and.loss.curve': 'ç»„åˆæŸç›Šæ›²çº¿',\r\n\r\n 'company': '©Quancept {year} ',\r\n 'about': 'About us',\r\n 'contact': 'Contact us',\r\n 'WeChat.public.number': 'WeChat Account',\r\n\r\n 'about.info.01': 'The founding team of Quancept comes from JP Morgan Chase, Lehman Brothers, RBC Capital, Goldman Sachs and other well-known financial institutions on Wall Street, and has been strengthened by domestic stock market experts, data science artificial intelligence experts, and senior trading technology teams. Quancept focuses on securities technology and provides a quantitative investment research trading platform.The team is responsible for the design and development of various financial product transactions and risk control systems, to manage funds for quantitative transactions, and accumulate and create core products such as InSync and CrystalTrade.',\r\n 'about.info.02': 'Quancept has 100% self-innovated CEP technology, many years of Wall Street\\'s rich experience in trading and risk control system research and development and quantitative trading, the latest technology in artificial intelligence and machine learning, and market - wide Tick-level market data processing for securities firms, buyer institutions and individual investors Provide a one - stop complete solution.Investors can use natural language or Quancept\\'s unique wizard-style simple functions and formulas without programming to complete strategy customization, debugging, trading and risk control rule editing, backtest verification, intelligent optimization, real-time operation, etc., to help users convenience and speed 3. Efficiently complete investment ideas and put them on the market.',\r\n 'about.info.03': 'Quancept Stock Robot - Users can quickly complete the investment process such as stock selection, backtesting, optimization, and submitting orders via natural language on the app.',\r\n 'about.info.04': '宽投的智能é‡åŒ–å› å分æžç³»ç»Ÿï¼Œä½¿ä¸“ä¸šæŠ•èµ„è€…çš„é˜¿å°”æ³•å› åæŽ¢ç´¢ç®€å•化与系统化,çŸçŸå‡ ååˆ†é’Ÿï¼Œå°±èƒ½åœ¨å®žæ—¶å¸‚åœºå®žçŽ°å‡ åã€ä¸Šç™¾ä¸ªå› å的探索ã€åކå²å‘¨æœŸçš„å› åæ–‡ä»¶ç”Ÿæˆã€å› åçš„å•调性ã€è‡ªç›¸å…³æ€§ã€æ”¶ç›ŠçŽ‡ã€æ¢æ‰‹çއã€åœ¨å„行业的表现ç‰å¤šç»´åº¦çš„分æžã€‚',\r\n\r\n 'contact.info.01': '',\r\n 'contact.info.02': '',\r\n 'contact.info.03': 'Email:support@quancept.com',\r\n 'contact.info.04': '',\r\n\r\n 'get.verification.code.failed': 'Verification code failed',\r\n 'phone.not.register': 'Phone not registered',\r\n 'format.failed': 'Wrong format',\r\n 'phone.format.failed': 'Wrong format',\r\n 'login.exception': 'Login abnormal',\r\n 'account.not.register': 'Account not registered',\r\n 'account.exception': 'Account abnormal',\r\n 'password.or.verification.code.match.error': 'Password or verification code error',\r\n\r\n 'email.registered': 'Email registered',\r\n 'email.not.register': 'Email not registered',\r\n 'email.format.failed': 'Wrong format',\r\n\r\n 'Subscription.expired': 'Subscription expired',\r\n 'user.account.has.expired': 'Login has expired, please contact customer service.',\r\n 'account.not.expired': 'Account will expire in {num} days',\r\n 'account.about.to.expire': 'Account is about to expire',\r\n\r\n 'Service.not.operation': 'Service not in operation',\r\n\r\n 'reset.password.success': 'Password has been reset.',\r\n 'reset.password.exception': 'Password reset encountered error.',\r\n 'verification.code.matching.error': 'Verification code incorrect.',\r\n\r\n 'reset.password.failed': 'Password reset failed',\r\n\r\n 'phone.is.register': 'Phone is registered',\r\n 'register.success': 'Registration succeeded',\r\n 'register.failed': 'Registration failed',\r\n 'register.exception': 'Registration exception',\r\n 'account.is.exist': 'Account already exists',\r\n\r\n 'phone': 'Mobile number',\r\n 'username/phone': 'Username/Mobile number',\r\n 'account.password': 'Account password',\r\n\r\n 'Verification code': 'Verification code',\r\n 'phone.china.only': 'Mobile number',\r\n 'phone.captcha': 'Verification code',\r\n 'email.captcha': 'Verification code',\r\n 'password.format': 'Password (6-16 characters, must contain at least one letter and one digit, case sensitive)',\r\n\r\n 'phone.use.register': 'Phone number (the registration number)',\r\n 'password.new.format': 'New password (6-16 characters, must contain at least one letter and one digit, case sensitive)',\r\n 'password.old.format': 'Old password',\r\n\r\n\r\n 'please.input.phone': 'Phone number',\r\n 'please.input.captcha': 'Verification code',\r\n 'please.input.password': 'Password',\r\n\r\n 'please.input.username/phone': 'Username/mobile number',\r\n\r\n 'password.min': 'Not less than 6 characters',\r\n 'password.max': 'No more than 16 characters',\r\n 'password.required.format': 'Must be numeric letters [case sensitive]',\r\n\r\n 'email.min': 'Not less than 5 characters',\r\n 'email.max': 'No more than 20 characters',\r\n\r\n 'get.data.failed': 'Failed to retrieve data',\r\n 'user.exception': 'Login does not exist or has expired',\r\n\r\n 'function.not.open': 'Not yet open',\r\n\r\n 'sequence': '#',\r\n\r\n 'please go': 'Please go to',\r\n //Scan\r\n 'featured.strategy.directory': '精选ç–略目录',\r\n 'my.formula.stock.picking.strategy': '我的公å¼é€‰è‚¡ç–ç•¥',\r\n 'strategy.items': 'Strategy List',\r\n 'no.strategy.library': 'æš‚æ— ç–略库',\r\n 'no.stock.pool': 'No universe',\r\n 'no.strategy': 'No strategy',\r\n\r\n 'scan.strategy.exception': 'Abnormal scanning',\r\n 'no.scan.to.stock': 'Scan returned no result. Modify criteria and try again',\r\n 'request.scan.strategy.failed': 'Scan request failed',\r\n 'scan.strategy.error': 'Strategy has errors',\r\n 'today.scan.strategy.end': 'Scan quota is used up',\r\n\r\n 'scan.strategy.in.error': 'Please modify formula/universe before submitting scan',\r\n 'scan.strategy.exception': 'Abnormal strategy',\r\n\r\n\r\n 'stock.picker.exception': 'Abnormal scan',\r\n 'no.choice.to.stock': 'No stock found. Please modify your ideas and try again',\r\n 'connection.strategy.Service.failed': 'Connecting to service...',\r\n 'request.stock.picker.failed': 'Scan request failed',\r\n 'stock.picker.strategy.error': 'Strategy has errors',\r\n 'reaching.strategy.quota': 'No strategy quota',\r\n 'today.stock.picks.end': 'Daily scan quota is used up',\r\n\r\n 'remaining.times': 'Daily quota remaining',//'Today\\'s remaining quota',\r\n 'times': '',\r\n\r\n 'Intelligent.analysis.failed': 'Analysis failed',\r\n 'unable.get.intelligent.analysis.results': 'Got no analysis result',\r\n 'connection.analytics.service.failed': 'Failed to connect to the analysis service',\r\n 'request.analytics.failed': 'Request failed',\r\n 'request.analysis.timeout': 'Request timed out',\r\n\r\n 'save.strategy.success': 'Scan submitted',\r\n 'to view, please go': 'To view, please go to',\r\n 'my.strategy': 'My scans',\r\n 'save.strategy.exception': 'Abnormal saving strategy',\r\n 'save.strategy.failed': 'Failed to save strategy',\r\n 'save.strategy.account.not.exist': 'Account for saving strategy does not exist',\r\n 'request.save.strategy.failed': 'Failed to request saving strategy',\r\n 'save.strategy.timeout': 'Saving strategy timed out',\r\n 'save.strategy.error': 'Saving strategy encountered errors',\r\n\r\n 're-get.stock.condition.failed': 'Failed to retrieve scan conditions',\r\n\r\n 'already.add.success': '{num} stock(s) added successfully',\r\n 'stocks': 'stocks',\r\n\r\n 'view.my.self-selected.stock': 'View my stocks',\r\n 'self-selected.stock.added.success': 'Stock added successfully',\r\n 'joining.stock.pool.failed': 'Failed to add the universe',\r\n\r\n 'save.strategy': 'Save formula',\r\n 'edit.strategy': 'Edit scan',\r\n 'new.strategy': 'New scan',\r\n 'copy.strategy': 'Copy scan',\r\n '_copy': '_Copy',\r\n\r\n 'strategy.name.already.exists': 'Strategy name already exists. Try another name.',\r\n\r\n 'new.strategy.success': 'Strategy is now created',\r\n 'copy.strategy.success': 'Strategy is copied',\r\n\r\n 'saved.strategy.in.error': 'Please modify the formula or universe before saving',\r\n 'stock.picker.strategy.in.error': 'Please modify the formula or universe before scanning stocks',\r\n 'strategy.content.length.too.long': 'Content length cannot exceed 8000 bytes',\r\n\r\n 'example': ',Examples:',\r\n\r\n 'prompt': 'Prompt',\r\n 'are.you.leaving.this.page': 'Leave this page now? Your changes will not be saved',\r\n 'leave': 'Leave',\r\n 'stay': 'Stay',\r\n 'clear': 'Clear',\r\n\r\n 'use.formula.generated.or.vernacular.stock.selection': 'Use generated formula from above, or script your own recipe formula.',\r\n\r\n 'strategy.name.format': 'Chinese, letter case, numbers only',\r\n\r\n 'real-time.market.stock.picker': '',//According to the above stock scanning strategy, use real-time market data to pick stocks.\r\n\r\n 'saving': 'Saving...',\r\n\r\n 'strategy.name.form': 'Name:',\r\n 'strategy.name.placeholder': 'Give a good name (1-24 bytes)', //tod\r\n\r\n 'vernacular.stock.picking': 'Ideas',\r\n 'guess.you.want.input': 'Guess what you want',\r\n 'change.batch': 'More',\r\n 'input.stock.picking.statement': 'Describe stock pattern (Highlighted quantity in corresponding formula can be changed to your preferrance)',\r\n 'input.hawkeye.statement': 'Describe stock pattern (Highlighted quantity in corresponding formula can be changed to your preferrance)',\r\n 'parsing': 'Analyzing...',\r\n 'intelligent.analysis': 'Understand',\r\n\r\n 'correspond.formula': 'Generated quancept formula',\r\n 'using.formula': 'Add to scan',\r\n 'formula.editing': 'Edit formula',\r\n\r\n 'stock.picking': 'Scanning...',\r\n 'real.stock.picking': 'Go',\r\n\r\n 'press': 'By',\r\n 'sort.filter': 'Sort',\r\n 'sort,filter': ',show',\r\n 'before': 'Top',\r\n 'after': 'Bottom',\r\n 'ranking': '20',\r\n\r\n 'latest': 'Last',\r\n 'latest.price': 'Price',\r\n 'quote.change': 'Change',\r\n 'volume': 'Volume',\r\n 'turnover': 'Turnover',\r\n 'turnover.rate': 'Turnover Rate',\r\n 'volatility': 'Volatility',\r\n\r\n 'strategy.formula': 'Formula',\r\n 'comment': 'Note',\r\n\r\n 'stock.pool.name.already.exists': 'The universe name already exists',\r\n 'stock.pool.name.format': 'Letters and numbers only',\r\n 'please.select.or.new.stock.pool': 'Select or create a new universe ',\r\n\r\n 'select.all': 'All',\r\n\r\n 'symbol.code': 'Symbol',\r\n 'symbol.name': 'Name',\r\n 'symbol.type': 'Type',\r\n\r\n 'eligible.stocks': '{num} {name}(s) met your ideas',\r\n\r\n 'new.stock.pool': 'New universe',\r\n 'add.choice': 'Add to universe',\r\n 'save.stock': 'Save to local',\r\n 'stock.pool.name.form': 'Name:',\r\n 'stock.pool.name.placeholder': 'Universe name (1-20 bytes)',\r\n\r\n 'mete.price': 'Price/Volume',\r\n 'fundamental': 'Fundamental',\r\n 'technically': 'Technical',\r\n 'other': 'Others',\r\n\r\n 'vernacular.left.prompt': 'Select from ideas in left panel, or type key word, e.g. \"Bollinger band\", or type your complete idea, e.g. \"Price makes 50 day high\", and click \"Understand\"',\r\n 'not.match.mete.price.statements': 'No price and volume sentences matched',\r\n 'not.match.fundamental.statements': 'No fundamental sentences matched',\r\n 'not.match.technically.sentences': 'No technical sentences matched',\r\n 'not.match.other.statements': 'No other sentences matched',\r\n 'not.match.intraday.statements': 'No intraday sentences matched',\r\n\r\n 'index.component': 'Index components',\r\n 'all.stocks': 'All',\r\n\r\n 'ST.stock': 'ST stocks',\r\n 'contain': 'Include ST',\r\n 'excluded': 'No ST',\r\n\r\n 'optional.stock.pool': 'My universe',\r\n 'stock.pool': 'Universe',\r\n \r\n 'total.stock': 'Stocks',\r\n\r\n 'stock.pool.count': 'Total number of stocks: {num}',\r\n 'index.pool.count': 'Total number of indices: {num}',\r\n 'fund.pool.count': 'Total number of ETFs: {num}',\r\n\r\n 'stock': 'Stock',\r\n 'fund': 'ETF',\r\n 'index': 'Index',\r\n 'general.index': 'HS Index',\r\n\r\n 'please.select.stock.pool': 'Please select universe',\r\n\r\n 'sh.sz.motherboard': 'HS Motherboard',\r\n 'second.boardmarket': 'GEM',\r\n 'sme.board': 'SME',\r\n 'csi.300': 'HS300',\r\n 'csi.500': 'ZZ500',\r\n 'csi.800': 'ZZ800',\r\n\r\n 'area.plate': 'Area Plate',\r\n 'concept.plate': 'Concept Plate',\r\n 'industry.plate': 'Industry Plate',\r\n 'src.plate': 'SFC Industry',\r\n 'index.plate': 'Index Plate',\r\n 'other.plate': 'Other Plate',\r\n\r\n 'sys.fund.pool': 'ç³»ç»ŸåŸºé‡‘æ± ',\r\n 'sh.grading.mother': '沪分级æ¯',\r\n 'sh.grading.a': '沪分级A',\r\n 'sh.grading.b': '沪分级B',\r\n 'sz.grading.mother': '深分级æ¯',\r\n 'sz.grading.a': '深分级A',\r\n 'sz.grading.b': '深分级B',\r\n\r\n 'nyse': 'NYSE',\r\n 'nasdaq': 'Nasdaq',\r\n 'd-jones.index': 'DOW 30',\r\n 'nasdaq.100': 'NASDAQ 100',\r\n 'sp.500': 'S&P 500',\r\n 'russell.2000': 'Russell 2000',\r\n\r\n 'my.strategy.lib': 'My scans',\r\n 'new.strategy.lib.stock.picker': '新建ç–略库选股',\r\n 'new.vernacular.stock.picker': 'New scan',\r\n\r\n 'rename': 'Rename',\r\n 'copy': 'Copy',\r\n 'remove': 'Delete',\r\n\r\n 'update': 'Update',\r\n\r\n 'backtest.status': 'Backtest status',\r\n 'last.updated': 'Last updated',\r\n 'backtest.count': 'Backtest count',\r\n 'control': '',\r\n 'backtest.items': 'Backtest list',\r\n\r\n 'remove.this.strategy': 'Are you sure you want to delete this strategy?',\r\n 'yes': 'Yes',\r\n 'no': 'No',\r\n\r\n 'rename.strategy.failed': 'Rename failed',\r\n 'copy.strategy.failed': 'Copy failed',\r\n 'copy.strategy.account.not.exist': 'Account does not exist',\r\n 'request.copy.strategy.failed': 'Request failed',\r\n 'copy.strategy.timeout': 'Replication timeout',\r\n 'copy.strategy.error': 'The replication strategy has errors',\r\n 'connection.strategy.server.failed': 'Failed to connect to the strategy server',\r\n\r\n 'want.delete.stock': 'Are you sure you want to delete the stock?',\r\n 'remove.strategy.success': 'Deleted successfully',\r\n 'remove.strategy.failed': 'Delete failed',\r\n\r\n 'add.stock.option': 'Add stock',\r\n 'add.stock.option.failed': 'Add failed',\r\n 'reach.the.stock.quota': 'Reached stock quota',\r\n 'add.or.update.stock.option.failed': 'Failed to add or update stock',\r\n 'remove.stock.option.success': 'Deleted successfully',\r\n 'remove.stock.option.failed': 'Delete failed',\r\n\r\n 'copy.stock.pool': 'Copy universe',\r\n 'make.sure.delete.stock.pool': 'Are you sure you want to delete the universe?',\r\n\r\n 'no.matches.found': 'No matches found',\r\n 'No strategy available': 'No strategy available',\r\n\r\n 'update.failed': 'Update failed',\r\n 'update.success': 'Update successfully',\r\n 'logout.failed': 'Logout failed',\r\n\r\n 'edit.user.info': 'Edit user information',\r\n\r\n 'my.home': 'My home',\r\n 'value-added.services': 'Recharge',\r\n 'my.account': 'My bill',\r\n 'account.setting': 'Account setting',\r\n 'message': 'Message',\r\n 'exit': 'Exit',\r\n\r\n 'coupon': 'Coupon',\r\n 'be.usable': 'Be usable',\r\n 'no.coupon.available': 'You have no coupons available',\r\n 'valid.until': 'Valid until',\r\n 'invalid.coupon': 'Invalid coupon',\r\n 'no.invalid.coupon': 'You have no invalid coupons',\r\n 'to.use': 'Go to use',\r\n\r\n 'send': 'Send',\r\n 'get.message.failed': 'Failed to get message',\r\n 'send.message.success': 'Send message successfully',\r\n 'send.message.failed': 'Send message failed',\r\n 'private.letter.administrator': 'Send message to the administrator',\r\n 'personal message': 'Personal message',\r\n 'sys.message': 'System information',\r\n\r\n 'all': 'All',\r\n 'complete': 'Complete',\r\n 'processing': 'Processing',\r\n 'failure': 'Failed',\r\n\r\n '1month': '1 month',\r\n '6month': '6 months',\r\n '1year': '1 year',\r\n\r\n 'tradeTime': ' Trade time',\r\n 'tradeAmount': 'Trade amount',\r\n 'tradeIntro': 'Trade details',\r\n 'months': 'Months',\r\n 'expiredDate': 'Expired date',\r\n 'tradeStatus': 'Trade status',\r\n\r\n 'get.account.info.failed': 'Obtain account information failed',\r\n\r\n 'time': 'Time',\r\n 'recent': 'Recent',\r\n 'status': 'Status',\r\n 'tradeRecord': 'Trade record',\r\n\r\n 'real.stock.picker': 'Stock scanning',\r\n 'stock monitoringr': 'Stock monitoring',\r\n\r\n 'personal.position.scan': 'ä¸ªäººä»“ä½æ‰«æ',\r\n 'parameter.settings': '傿•°è®¾ç½®',\r\n 'option.scan.exception': 'æœŸæƒæ‰«æå‡ºçް异叏',\r\n 'option.scans.have.run.out': 'æœ¬æœˆæœŸæƒæ‰«ææ¬¡æ•°å·²ç”¨å®Œ',\r\n 'request.option.scan.failed': 'è¯·æ±‚æœŸæƒæ‰«æå¤±è´¥',\r\n 'no.option.data.scanned': '没有扫æåˆ°æœŸæƒæ•°æ®',\r\n\r\n 'profitloss': 'æŸç›Š',\r\n 'price': 'Price',\r\n 'profit.and.loss': '到期收益',\r\n\r\n 'optionStrategyScan': '期æƒç–略扫æ',\r\n 'factorScan': 'å› åæ‰«æ',\r\n 'factorGeneration': 'é‡åŒ–å› åæœåŠ¡å› å生æˆ',\r\n 'intelligentFactorAnalysis': 'æ™ºèƒ½å› å分æž',\r\n 'ordinary.member': 'General member',\r\n 'vip.member': 'VIP',\r\n 'intro': 'Introduction',\r\n 'intro.description': 'This guy is lazy and leaves nothing~',\r\n 'account': 'Account',\r\n 'value-added.service.usage.status': 'Value-added service usage status',\r\n 'coupons': 'coupons',\r\n\r\n 'used': 'Used',\r\n 'expired': 'Expired',\r\n\r\n 'can.only.upload.image.files': 'jpg. only',\r\n 'upload.avatar.size': 'Must be less than 2MB',\r\n\r\n 'account.name.already.exists': 'The account name already exists',\r\n 'update.password.success': 'Password has been updated',\r\n 'update.password.failed': 'Password change failed',\r\n 'old.password.input.error': 'The original password is incorrect',\r\n 'newPassword.and.oldPassword.not.same': 'The new password and the original cannot be the same',\r\n 'newPassword.and.confirmPassword.must.same': 'New password and the confirmation must match',\r\n\r\n 'phone.is.bound': 'Mobile number is bound',\r\n 'binding.success': 'Bind successfully',\r\n 'unbind.success': 'Unbind successfully',\r\n 'binding.failed': 'Binding failed',\r\n 'unbind.failed': 'Unbind failed',\r\n 'account.is.bound.phone': 'The mobile number is already registered',\r\n 'verification.code.error': 'Verification code error',\r\n 'nickname.format': 'Chinese, letter case, number only',\r\n 'upload.failed': 'Upload failed',\r\n\r\n 'ok.to.unbind': 'Are you sure you want to unbind the mobile number?',\r\n\r\n 'basic.info': 'Basic information ',\r\n 'nickname': 'User\\'s nickname',\r\n 'bind.phone': 'Bind mobile number ',\r\n\r\n 'unbind': 'Unbind',\r\n\r\n 'please.input.bind.phone': 'Mobile number to bind',\r\n\r\n 'login.password': 'Login password',\r\n 'update.password': 'Change password',\r\n 'old.password': 'Old password',\r\n 'new.password': 'New password',\r\n 'confirm.password': 'Confirm password',\r\n\r\n 'personal.profile': 'Introduction',\r\n 'modify.avatar': 'Change your picture',\r\n 'select.avatar': 'Select a picture',\r\n\r\n 'upload.image.format': 'JPG, JPEG, BMP or PNG format pictures are suitable, no more than 2MB. Drag or zoom the dotted squares in the picture to adjust the avatar.',\r\n\r\n 'payment.server.00.01': 'Upon registration, you have',\r\n 'payment.server.00.02': 'First 7 days:20 scans/day,3 monitors/day',\r\n 'payment.server.00.03': 'After 7 days:3 scans/day,3 monitors/day',\r\n\r\n 'payment.server.01.01': '10 scans/day,10 monitors/day',\r\n 'payment.server.01.02': '',\r\n\r\n 'payment.server.02.01': 'Add 30 scans/day',\r\n 'payment.server.03.01': 'Add 50 scans/day',\r\n\r\n 'payment.server.04.01': '1. 基于对市场未æ¥é¢„期,对ä¸åŒæ—¶é—´è·¨åº¦ã€æ¶¨è·Œå¹…的期待,进行期æƒç–略扫æï¼ŒèŽ·å–ä¸åŒæœŸæƒç–略组åˆçš„ç»“æž„ã€æ”¶ç›Šã€é£Žé™©åŠå›¾ç¤ºï¼›',\r\n 'payment.server.04.02': '2. å¯äº«å—总共30次/月期æƒç–ç•¥æ‰«ææœåŠ¡ï¼›',\r\n\r\n 'payment.server.05.01': '1. 金èžå¤§æ•°æ®ç»“åˆäººå·¥æ™ºèƒ½æŠ€æœ¯ï¼ŒæŠ€æœ¯æŒ‡æ ‡ã€è´¢åŠ¡æ•°æ®ã€å®žæ—¶é‡ä»·ç‰å› å库信æ¯å®žæ—¶ç”Ÿæˆå› åï¼›',\r\n 'payment.server.05.02': '2. å¯äº«å—30次/å¤©å› åæ‰«ææœåŠ¡ï¼›',\r\n 'payment.server.05.03': '3. å¯äº«å—5次/å¤©å› åç”ŸæˆæœåŠ¡ï¼›',\r\n 'payment.server.05.04': '4. å¯äº«å—5次/å¤©æ™ºèƒ½å› ååˆ†æžæœåŠ¡ï¼›',\r\n\r\n 'inSync.platform': 'InSync-Quancept Quantization Platform',\r\n 'payment.server.06.01': 'Scan, filter the market any way you like',\r\n 'payment.server.06.02': 'Build strategies with great detail, in English',\r\n 'payment.server.06.03': 'Backtest and optimize',\r\n 'payment.server.06.04': 'Trade and manage all your strategies and positions',\r\n 'payment.server.06.05': 'Profit target, stop loss and time - based exit',\r\n 'payment.server.06.06': 'Conditional orders triggered by your custom rules',\r\n\r\n 'hawkeye.server.07.01': 'Add 30 monitors/day',\r\n\r\n 'factor.scan': 'å› åæ‰«æ',\r\n 'factor.generation': 'å› å生æˆ',\r\n 'intelligent.factor.analysis': 'æ™ºèƒ½å› å分æž',\r\n\r\n 'option.strategy.scan': '期æƒç–略扫æ',\r\n\r\n 'payment.failed': 'Failed to pay',\r\n\r\n 'option.strategy.service': '期æƒç–ç•¥æœåŠ¡',\r\n 'Quantitative factor service': 'é‡åŒ–å› åæœåŠ¡',\r\n\r\n 'upgrade.vip.member': 'To be VIP',\r\n 'free': 'Free',\r\n 'buy': 'Buy',\r\n 'pay': 'Pay',\r\n 'yuan': '',\r\n 'usd': '$',\r\n 'wan': ' Ten thousand',\r\n 'yuan/month': '/month',\r\n\r\n 'yuan/year': '/year',\r\n 'yuan/2year': '/2 years',\r\n 'discount': 'Discount',\r\n\r\n 'remaining.validity.period': 'Time remaning',\r\n\r\n '1year.discount': '1 year (24% discount)',\r\n '2year.discount': '2 years (25% discount)',\r\n\r\n 'vip.special': 'VIP',\r\n\r\n 'service.name': 'WebTrader',\r\n 'unit.price': ' unit price ',\r\n 'vip.special.price': 'VIP special price',\r\n 'subtotal': ' Total ',\r\n 'do.not.use': 'Do not use',\r\n 'no.available': 'Not available',\r\n\r\n 'Scan': 'Scan',\r\n 'Monitor': 'Monitor',\r\n 'Explores': 'Explores',\r\n\r\n 'payment.prompt.01': 'Please pay as soon as possible, do not close this window before completing ',\r\n 'payment.prompt.02': ' Any payment problems, contact',\r\n\r\n 'service.intro': 'Description',\r\n 'Expiration': 'Expiration',\r\n 'RemainingCredit': 'Remaining Credit',\r\n 'please.select.service.type': 'Service functions',\r\n 'waiting.for.payment': 'Waiting for payment',\r\n 'confirm.payment': 'Confirm payment',\r\n 'description': 'Description',\r\n\r\n 'payment.info.03': 'Scan and monitor stock market, using natural language. Automate trading strategy, with no code.',\r\n 'payment.info.01': 'Purchase is not refundable',\r\n 'payment.info.02': 'Issues related to trade or account recharge should be reported to support@quancept.com',\r\n\r\n 'quancept.info.qq': 'QQ:487139452',\r\n 'quancept.info.phone': 'Phone:021-52685165',\r\n 'quancept.info.work': ' Monday to Friday 09:00—19:00',\r\n\r\n\r\n 'download.immediately': 'Download',\r\n 'download.info.001': 'Strategy platform',\r\n 'download.info.002': 'scan/filter the market',\r\n 'download.info.003': 'build strategies in plain english',\r\n 'download.info.004': 'portfolio - backtest and optimize',\r\n 'download.info.005': 'trade strategy live/simulation',\r\n\r\n 'download.info.006': 'Execution mamangment',\r\n 'download.info.007': 'complex-condition order',\r\n 'download.info.008': 'trading algos',\r\n 'download.info.009': 'full-lifecycle trading',\r\n 'download.info.010': 'multi-strategy trading',\r\n 'download.info.011': 'multi-account trading',\r\n 'download.info.012': 'fully-automated/manual confirm',\r\n\r\n 'android.version': 'Android version',\r\n 'ios.version': 'IOS version',\r\n\r\n 'stay.tuned': 'Stay tuned',\r\n 'download.info.08': 'Stock robot',\r\n 'download.info.09': ' Based on Quancept\\'s rich accumulation of quantitative systems and transactions for many years, combining AI and machine learning technology, through interaction, to achieve a series of intelligent quantitative investment services such as stock scan, backtesting, strategy optimization, and ordering',\r\n\r\n //å› åæ‰«æ\r\n 'factor.scan.result': 'æ ¹æ®æœ€æ–°è¡Œæƒ…æ•°æ®ï¼Œå…±æ‰«æå‡º {num} åª{name}',\r\n 'save.factor.local': '查看全部数æ®ï¼Œè¯·ä¿å˜è‡³æœ¬åœ°',\r\n 'my.factor.file': 'æˆ‘çš„å› åæ–‡ä»¶',\r\n 'factor.title.01': '1ã€å› 忉«æ',\r\n 'scanning': 'Scanning...',\r\n 'generating.factor.file.condition': 'æ ¹æ®ä»¥ä¸Šå…¬å¼æ¡ä»¶ï¼Œç”Ÿæˆå› åæ–‡ä»¶',\r\n 'factor.title.02': '2ã€ç”Ÿæˆå› åæ–‡ä»¶',\r\n\r\n 'generating.factor.file': '生æˆå› åæ–‡ä»¶',\r\n 'generating': 'æ£åœ¨ç”Ÿæˆ',\r\n 'submitting': 'Submitting...',\r\n 'ready.generate': '准备生æˆ',\r\n 'build.failed': '生æˆå¤±è´¥',\r\n 'factor.generation.has.run.out': 'ä»Šæ—¥å› åç”Ÿæˆæ¬¡æ•°å·²ç”¨å®Œ',\r\n 'data.frequency': 'æ•°æ®é¢‘率',\r\n '60minute.line': '60分钟线',\r\n 'generated.complete': '生æˆå®Œæˆ',\r\n 'please.complete.factor.scan': '请完æˆå› 忉«æ',\r\n\r\n 'start.generating': '开始生æˆ',\r\n 'generated.file.in': 'ç”Ÿæˆæ–‡ä»¶ä¸',\r\n 'not.analyzed': '未分æž',\r\n 'start.analysis': '开始分æž',\r\n 'analysis.failure': '分æžå¤±è´¥',\r\n 'analyzing': '分æžä¸',\r\n 'analysis.completed': '分æžå®Œæˆ',\r\n 'upload.factor.format': 'ä½ åªèƒ½ä¸Šä¼ csv文件',\r\n 'upload.factor.size': 'ä¸Šä¼ æ–‡ä»¶å¿…é¡»å°äºŽ20MB',\r\n 'factor.file.name': 'å› åæ–‡ä»¶å',\r\n 'last.update.date': 'æœ€åŽæ›´æ–°æ—¥æœŸ',\r\n 'type': 'Type',\r\n 'is.submitting': 'Submitting ',\r\n 'prepare.analysis': '准备分æž',\r\n 'view.analysis.results': '查看分æžç»“æžœ',\r\n 'build.please.wait': '生æˆä¸ï¼Œè¯·ç¨åŽ',\r\n\r\n 'upload': 'Upload',\r\n 'generate': 'Generate',\r\n\r\n 'analysis.of.anomalies': '分æžå‡ºçް异叏',\r\n 'error.analyzing.data': 'åˆ†æžæ•°æ®å‡ºé”™æˆ–ä¸å˜åœ¨',\r\n 'analysis.points.end': '今日分æžç‚¹æ•°å·²ç”¨å®Œ',\r\n 'analysis.server.not.responding': 'åˆ†æžæœåŠ¡å™¨æ— å“应',\r\n 'no.querying.analysis.tasks': '没有查询到分æžçš„任务',\r\n\r\n 'upload.failed': 'Upload failed',\r\n\r\n 'remove.factor.file.failed': 'åˆ é™¤å› åæ–‡ä»¶å¤±è´¥',\r\n\r\n 'analyze.this.factor.file': 'ä½ ç¡®å®šè¦åˆ†æžè¿™ä¸ªå› åæ–‡ä»¶å—?',\r\n 'analysis': '分æž',\r\n 'cancel': 'Cancel',\r\n\r\n 'delete.this.factor.file': 'ä½ ç¡®å®šè¦åˆ é™¤è¿™ä¸ªå› åæ–‡ä»¶å—?',\r\n\r\n 'upload.factor.file': 'ä¸Šä¼ å› åæ–‡ä»¶',\r\n\r\n 'factorName': 'å› ååç§°',\r\n 'periodWise': '周期',\r\n 'totalRet': 'Return',\r\n 'sharpeRatio': '夿™®-[Sharpe]',\r\n 'annAlpha': '阿尔法-[ALPHA]',\r\n 'beta': 'è´å¡”-[BETA]',\r\n\r\n 'have': 'Yes',\r\n 'not': 'No',\r\n\r\n 'industry.name': 'Industry',\r\n 'monotonic(period)': 'å•调性(周期)',\r\n 'monotonic': 'å•调性',\r\n\r\n 'factor.analysis': 'å› å分æž',\r\n\r\n 'rate.of.return.analysis': '收益率分æž',\r\n 'ic.analysis': 'IC分æž',\r\n 'turnover.analysis': 'æ¢æ‰‹çŽ‡åˆ†æž',\r\n\r\n //期æƒ\r\n 'breakEvenPoint': '盈äºå¹³è¡¡ç‚¹',\r\n 'Long Call': '买入看涨',\r\n 'Uncovered Put Write': 'æ— å¤‡å…‘çœ‹è·Œ',\r\n 'Bull Call Spread': '牛市看涨价差',\r\n 'Bull Put Spread': '牛市看跌价差',\r\n 'Bull Call': '牛市看涨',\r\n 'Bull Put': '牛市看跌',\r\n 'Synthetic Long Stock': 'åˆæˆè‚¡ç¥¨å¤šå¤´',\r\n 'Synthetic Long Stock 2': 'åˆæˆè‚¡ç¥¨å¤šå¤´2',\r\n 'Call Backspread': '看涨åå‘ä»·å·®',\r\n 'Covered Calls': '抛补看涨',\r\n 'Synthetic Long Call': 'åˆæˆä¹°å…¥çœ‹æ¶¨',\r\n 'Collar': '领å',\r\n 'Covered Combination': '备兑组åˆ',\r\n 'Covered Straddle': '备兑跨å¼',\r\n\r\n 'Long Put': '买入看跌',\r\n 'Naked Call': '裸å–空',\r\n 'Naked Call 2': '裸å–空2',\r\n 'Bear Call': '熊市看涨',\r\n 'Bear Put': '熊市看跌',\r\n 'Put Backspread': '看跌åå‘ä»·å·®',\r\n 'Synthetic Short Stock': 'åˆæˆè‚¡ç¥¨ç©ºå¤´',\r\n 'Synthetic Short Stock 2': 'åˆæˆè‚¡ç¥¨ç©ºå¤´2',\r\n 'Covered Put Write': '备兑看跌',\r\n 'Synthetic Long Put': 'åˆæˆä¹°å…¥çœ‹è·Œ',\r\n\r\n 'Call Ratio Spread': '看涨比率价差',\r\n 'Put Ratio Spread': '看跌比率价差',\r\n 'Long Straddle': '买入跨å¼',\r\n 'Short Straddle': 'å–出跨å¼',\r\n 'Long Strangle': '买入宽跨å¼',\r\n 'Short Strangle': 'å–出宽跨å¼',\r\n 'Long Guts': '买入飞碟å¼',\r\n 'Short Guts': 'å–出飞碟å¼',\r\n 'Strip': 'æ¡å¼',\r\n 'Strap': '带å¼',\r\n 'Ratio Call Write': '比率看涨',\r\n 'Ratio Put Write': '比率看跌',\r\n 'Long Put Synt Straddle': 'ä¹°å…¥çœ‹è·Œåˆæˆè·¨å¼',\r\n 'Long Call Synt Straddle': 'ä¹°å…¥çœ‹æ¶¨åˆæˆè·¨å¼',\r\n 'Long Put Butterfly': '买入看跌è¶å¼',\r\n 'Short Put Butterfly': 'å–出看跌è¶å¼',\r\n 'Long Butterfly': 'ä¹°å…¥è¶å¼',\r\n 'Short Butterfly': 'å–出è¶å¼',\r\n 'Long Call Ladder': '买入看涨梯形',\r\n 'Short Call Ladder': 'å–出看涨梯形',\r\n 'Long Put Ladder': '买入看跌梯形',\r\n 'Short Put Ladder': 'å–出看跌梯形',\r\n 'Variable Ratio Write': 'å¯å˜æ¯”率',\r\n 'Condor': '秃鹰',\r\n 'Short Condor': 'å–出秃鹰',\r\n 'Iron Condor': 'é“秃鹰',\r\n 'Reverse Iron Condor': 'åå‘é“秃鹰',\r\n 'Iron Butterfly': 'é“è¶å¼',\r\n 'Reverse Iron Butterfly': 'åå‘é“è¶å¼',\r\n\r\n 'Reversal': 'å转',\r\n 'Conversion': '转æ¢',\r\n 'Long Box': '买入箱体',\r\n 'Short Box': 'å–出箱体',\r\n\r\n 'Neutral Calendar': '䏿€§æ—¥åކ',\r\n\r\n 'Short Calendar Straddle': 'å–出日历宽跨å¼',\r\n\r\n 'Fake Neutral Calendar': 'ä¼ªè£…ä¸æ€§æ—¥åކ',\r\n\r\n 'PriceRiseTo': 'Price Rises To',\r\n 'PriceRiseToInfo': 'Price rises to ${num}',\r\n\r\n 'PriceFellTo': 'Price Drops To',\r\n 'PriceFellToInfo': 'Price drops to ${num} ',\r\n\r\n 'ReboundRange': 'Retrace',\r\n 'ReboundRangeInfo': 'Price rises to ${num1},then retrace ${num2}',\r\n\r\n 'Fallback': 'Rebound',\r\n 'FallbackInfo': 'Price drops to ${num1},then rebound ${num2}',\r\n\r\n 'priceDownTo': 'Price drops to',\r\n 'priceUpTo': 'Price rises to',\r\n 'Bounce': 'Rebound',\r\n 'huiLuo': 'Retrace',\r\n\r\n 'UpperOvergo': 'Cross above',\r\n 'UnderOvergo': 'Cross below',\r\n 'AvgLine': 'moving average',\r\n\r\n 'VolumeIsPast': 'Volumn is ',\r\n 'Average': 'Average',\r\n 'day': 'Day',\r\n 'multiple': 'Times',\r\n\r\n 'DailyIncreaseReached': 'Today price up to ',\r\n 'DailyIncreaseReachedInfo': 'Today price up {num}%',\r\n\r\n 'DailyDeclineReached': 'Today price down to ',\r\n 'DailyDeclineReachedInfo': 'Today price down {num}%',\r\n\r\n 'dayIncreaseReach': 'Today up',\r\n 'dayDeclineReach': 'Today down',\r\n\r\n 'PriceRise': 'New High',\r\n 'PriceFalling': 'New Low',\r\n 'priceUpWound': 'Price makes high of ',\r\n 'priceUpWoundHistoryHigh': 'Price makes historic high',\r\n 'priceUpWoundInfo': 'Price at {num} day high ',\r\n\r\n 'priceDownWound': 'Price makes low of ',\r\n 'priceDownWoundHistoryLow': 'Price makes historic low ',\r\n 'priceDownWoundInfo': 'Price at {num} day low',\r\n\r\n 'StockPriceWearOn': 'Price crosses above moving average',\r\n 'StockPriceWearOnInfo': ' Price crosses above {num} {avg} moving average',\r\n\r\n 'StockPriceFellBelow': ' Price crosses above moving average',\r\n 'StockPriceFellBelowInfo': 'Price crosses below {num} {avg} moving average',\r\n\r\n 'StockPriceUp': 'Cross Above',\r\n 'StockPriceDown': 'Cross Below',\r\n\r\n 'Increase': 'Increase',\r\n 'IncreaseInfo': 'within {num1} minute,the increase reaches {num2}%',\r\n\r\n 'Decline': 'Decline',\r\n 'DeclineInfo': 'within {num1} minute,the decline reaches {num2}%',\r\n\r\n 'increaseReach': 'The increase reaches',\r\n 'declineReach': 'The decline reaches',\r\n\r\n 'DailyTurnoverRate': 'Daily Turnover',\r\n\r\n 'KDJGoldFork': 'KDJ Gold Cross',\r\n 'KDJDeadFork': 'KDJ Death Cross',\r\n 'MACDGoldFork': 'MACD Gold Cross ',\r\n 'MACDDeadFork': 'MACD Death Cross',\r\n\r\n 'PricesGoThroughBollinger': 'Price Cross Above Bollinger Upper',\r\n 'PricesGoThroughBollingerInfo': '{num1} Price cross above{num2}',\r\n\r\n 'PriceDownBollinger': ' Price Cross Below Bollinger Lower',\r\n 'PriceDownBollingerInfo': '{num1} Price cross below {num2}',\r\n\r\n 'BuyOneHigherThan': 'Bid price above',\r\n 'SellPriceBelow': 'Ask price below',\r\n 'ReachHigh': 'Open high at',\r\n 'GapReachHigh': 'Gap high to',\r\n\r\n 'VolumeAveragePastDays': 'Volume is past {num1} day average’s {num2} times',\r\n 'VolumeRatio': 'Volume Ratio',\r\n 'VolumeRatioThan': 'Volume Ratio greater than',\r\n 'DailyAmplitude': 'Daily volatility',\r\n\r\n 'AnyOnlineWear': 'Any moving average up cross',\r\n 'AnyOnlineWearInfo': '{num1} {avg1} moving average up cross {num2} {avg2} moving average',\r\n 'AnyMovingAverage': 'Any moving average down cross',\r\n 'AnyMovingAverageInfo': '{num1} {avg1} moving average down cross {num2} {avg2} moving average',\r\n\r\n 'intelligentHawkeye': 'Alert only',\r\n 'newHawkeye': 'New monitor',\r\n 'myHawkeye': 'My monitors',\r\n 'Monitor symbol': 'Monitor symbol of choice for price/volume and technical events. Formulate ideas using AI-powered language assistant.',\r\n\r\n 'closeShort': 'Buy',\r\n 'closeLong': 'Sell',\r\n\r\n 'closeShortHawkeye': 'Buy Monitor',\r\n 'closeLongHawkeye': 'Sell Monitor',\r\n\r\n 'smartPay': 'Direct Order',\r\n 'goHawkeye': 'Go',\r\n 'PaySingle': 'Go',\r\n\r\n 'intelligentHawkeyeConfirm': 'Confirm monitor',\r\n 'today.hawkeye.end': 'Today’s quota is exhausted.',\r\n\r\n 'settingSuccess': 'Success',\r\n 'stopHawkeyeMsgSendSuccess': ' The message to stop the monitor was sent successfully ',\r\n\r\n 'isConfirmPlaceOrder': 'Confirm order?',\r\n\r\n 'confirm': 'confirm',\r\n 'submitPlaceOrder': 'Submit order',\r\n 'cancelPlaceOrder': 'Cancel order',\r\n 'sendSucc': '{cont} sent successfully',\r\n 'sendFail': '{cont} send failure',\r\n 'hawkeyeCondFail': 'Monitoring condition error(s):{cont}',\r\n\r\n 'intelligentHawkeyeAlert': 'IntelliMon alert',\r\n 'HawkeyeAlertRemind': ' {cont} monitoring conditions triggered. View detail?',\r\n\r\n 'close': 'Close',\r\n 'view': 'View',\r\n 'stop': 'Stop',\r\n 'placeOrder': 'Place order',\r\n\r\n 'pendingOrder': 'Order pending',\r\n 'monitoring': 'Monitoring',\r\n 'over': 'Completed',\r\n\r\n 'hawkeyeMode': 'Notification',\r\n\r\n 'ClosePendingOrder': 'Close pending order(s)',\r\n 'PendingOrderHawkeye': 'Orders to submit',\r\n\r\n 'symbolName': 'Name',\r\n 'symbolCode': 'Symbol',\r\n 'hawkeyeType': 'Monitoring type',\r\n 'hawkeyeCondition': 'Add condition',\r\n 'tradeDirection': 'Direction',\r\n 'tradeQuantity': 'Quantity',\r\n 'expireDate': 'Expire time', //??labeled as date but Chinese shows time???\r\n 'triggerDate' : 'Trigger time',\r\n 'triggerCondition': 'Trigger condition',\r\n\r\n 'hawkeyeStragegy': 'Ideas',\r\n\r\n 'vernacularHawkeye': 'Idea',\r\n 'priceHawkeye': 'Price',\r\n 'condHawkeye': 'Condition',\r\n 'kLineHawkeye': 'Chart',\r\n 'HybridHawkeye': 'Mixed',\r\n\r\n 'hawkeyeAction': 'Direction',\r\n 'effectTime': 'Effective from ',\r\n\r\n 'reach': 'To',\r\n 'norm': 'Indicator',\r\n 'value': 'Value',\r\n\r\n 'delete': 'Delete',\r\n 'Add to conditions': 'Add to conditions',\r\n 'hCondition': 'Condition',\r\n\r\n 'numMinLine': '{num} minute interval',\r\n '1MinLine': '1 minute interval',\r\n '2MinLine': '2 minute interval ',\r\n '3MinLine': '3 minute interval',\r\n '5MinLine': '5 minute interval',\r\n '10MinLine': '10 minute interval',\r\n '15MinLine': '15 minute interval',\r\n '20MinLine': '20 minute interval',\r\n '30MinLine': '30 minute interval',\r\n '60MinLine': '60 minute interval',\r\n 'dailyLine': 'Daily interval',\r\n\r\n '5DayHigh': '5-day high',\r\n '10DayHigh': '10-day high',\r\n '20DayHigh': '20-day high',\r\n '30DayHigh': '30-day high',\r\n '60DayHigh': '60-day high',\r\n '120DayHigh': '120-day high',\r\n '200DayHigh': '200-day high',\r\n 'historyHigh': 'Historic high',\r\n\r\n '5DayLow': '5-day low',\r\n '10DayLow': '10-day low',\r\n '20DayLow': '20-day low',\r\n '30DayLow': '30-day low',\r\n '60DayLow': '60-day low ',\r\n '120DayLow': '120-day low',\r\n '200DayLow': '200-day low ',\r\n 'historyLow': 'Historic low',\r\n\r\n '5DayAvgLine': '5-day moving average',\r\n '10DayAvgLine': '10-day moving average',\r\n '20DayAvgLine': '20-day moving average',\r\n '60DayAvgLine': '60-day moving average',\r\n '120DayAvgLine': '120-day moving average ',\r\n '200DayAvgLine': '200-day moving average ',\r\n\r\n '1MinInside': 'Within 1 minutes ',\r\n '2MinInside': 'Within 2 minutes ',\r\n '3MinInside': 'Within 3 minutes ',\r\n '5MinInside': 'Within 5 minutes ', \r\n '10MinInside': 'Within 10 minutes ',\r\n '15MinInside': 'Within 15 minutes ',\r\n '30MinInside': 'Within 30 minutes ',\r\n '60MinInside': ' Within 60 minutes ',\r\n\r\n 'bollingerOnRail': ' Bollinger Upper Band',\r\n 'bollingerLowRail': ' Bollinger Lower Band ',\r\n\r\n 'OnRail': 'Upper band',\r\n 'LowRail': 'Lower band',\r\n\r\n 'priceUp': 'Cross above',\r\n 'priceDown': 'Cross below',\r\n\r\n 'ordered': ' Order placed ',\r\n 'triggered': ' Triggered ',\r\n 'closed': 'Closed',\r\n 'activeTermination': 'Active Termination',\r\n 'hawkeyeError': 'Monitoring error',\r\n 'invalid': 'Expired',\r\n\r\n 'PleaseEnterQuoteChange': 'Please enter price up/down range',\r\n 'priceNotEmpty': 'Please enter Price',\r\n 'priceDiffNotEmpty': ' Please enter Price Difference',\r\n\r\n 'PleaseEnterTargetPrice': 'Please enter Target Price',\r\n 'PleaseEnterIncrease': 'Please enter Up Range',\r\n 'PleaseEnterDecline': ' Please enter Down Range ',\r\n 'PleaseEnterTargetExtent': 'Please enter Target Extend',\r\n 'PleaseEnterDays': 'Please enter number of days',\r\n 'PleaseEnterMultiple': 'Please enter Multiplier',\r\n 'PleaseEnterVolumeRatio': 'Please enter Volume Ratio',\r\n 'PleaseEnterTargetAmplitude': 'Please enter Target Amplitude',\r\n 'PleaseEnterInteger': ' Please enter a whole number',\r\n\r\n 'pleaseEnterRange0-100': 'Enter a number between 0 and 100',\r\n 'pleaseEnterTargetTurnoverRate': 'Enter your target turnover rate',\r\n\r\n 'selCondTrigger': 'Monitor Detail (Monitor completes upon triggering of any condition)',\r\n 'hawkeye.info': 'You have started {priceCount} price monitor(s),{condCount} 个condition monitor(s),{mixCount} mixed monitor(s)。',\r\n 'hawkeye.mode': '',//æ ¹æ®ä»¥ä¸Šç–ç•¥ï¼Œä½¿ç”¨å®žæ—¶è¡Œæƒ…æ™ºèƒ½ç›¯ç›˜ï¼Œè§¦å‘æ¡ä»¶åŽ\r\n //Based on the above strategy using real-time market date ?\r\n\r\n 'confirmOrderManually': ' Place order manually',\r\n 'systemAutoOrders': ' Place order automatically',\r\n\r\n 'startDateGreaterThanEndDate': 'Start date must be before End Date',\r\n 'tradeQuantityFormatFail': 'Trade Quanity format error',\r\n 'tradeQuantityLengthFail': 'Trade Quantity cannot be more than 12 digits long',\r\n 'tradeQuantityNotEmpty': 'Please enter Trade Quantity',\r\n 'pleaseEnterStockName-Symbol': 'Please enter stock name/ticker',\r\n 'pleaseEnterStartDate': 'Please enter Start Date',\r\n 'pleaseEnterEndDate': 'Please enter End Date',\r\n 'customExpirationTime': 'Custom Expiration', \r\n 'VIP.use-value.added.services': '(VIP only)',\r\n 'hawkeyeUpperLimit': 'You can choose at most 5 ideas', \r\n\r\n 'deleteHawkeyeFailed': 'Failed to delete monitor ',\r\n 'confirmPlaceOrder': 'Confirm order for “{name}â€ï¼Ÿ',\r\n 'confirmPlaceOrders': 'Confirm {num} orders for “{name}â€?',\r\n\r\n 'confirmCloseHawkeye': 'Close monitor “{name}†with pending order(s)?',\r\n 'confirmCloseHawkeyes': 'Close “{name}†{num} monitor(s) pending order?',\r\n\r\n 'confirmStopHawkeye': 'Terminate monitor “{name}â€ï¼Ÿ',\r\n 'confirmStopHawkeyes': 'Terminate “{name}†{num} running monitor(s)?',\r\n\r\n 'confirmRemoveHawkeye': 'Delete completed Monitor “{name}â€ï¼Ÿ',\r\n 'confirmRemoveHawkeyes': 'Delete “{name}†{num} completed monitor(s)?',\r\n\r\n 'selProduct': 'Please select a product',\r\n\r\n 'videoTitle01': ' Stock Selection Filter',\r\n 'videoCont0101': '1. Login and create a new stock filter-1',\r\n 'videoCont0102': '2. Login and create a new stock filter-2',\r\n 'videoCont0103': '3. Login and create a new stock filter-3',\r\n 'videoCont0104': '4. Add stock selection criteria',\r\n 'videoCont0105': '5. Use self-defined code for stock selection',\r\n\r\n 'videoTitle02': 'Create a complete strategy',\r\n 'videoCont0201': '1. How to create a complete strategy',\r\n 'videoCont0202': '2. How to use strategy editor',\r\n 'videoCont0203': '3. Create a strategy and back test',\r\n\r\n 'videoTitle03': 'DIY Strategy Zone',\r\n 'videoCont0301': '1.Fundamental',\r\n 'videoCont0302': '2. Bollinger Band',\r\n 'videoCont0303': '3. Use Phased High/Low Ticks', \r\n 'videoCont0304': '4. Implement Commodity Strategy ',\r\n 'videoCont0305': '5. Establish a buy/sell filter',\r\n 'videoCont0306': '6. How to preset variables in the formula filter',\r\n\r\n 'videoTitle04': 'Trading Functionalities',\r\n 'videoCont0401': '1. CrystalTrade Functionality Intro',\r\n 'videoCont0402': '2. Manual Trade',\r\n\r\n 'protocol': 'Membership Agreement',\r\n\r\n 'commissionInformation': 'Please confirm the following commission information:',\r\n 'orderConfirmation': 'Order Confirmation',\r\n 'commissionMode': 'Commission Mode',\r\n 'marketPrice': 'Market Price',\r\n\r\n 'applicationSubmitted': 'Your request has been submitted',\r\n\r\n 'orderInfo': 'Order Information',\r\n\r\n 'margin': 'Margin',\r\n\r\n 'hawkeyeConditionAlreadyExists': 'Criterion exists already',\r\n\r\n 'intraday': 'Intraday',\r\n 'Sector': 'Sector',\r\n\r\n /*回测*/\r\n 'stockBacktest': 'Backtest',\r\n 'myBacktest': 'My backtest',\r\n\r\n 'strategyExcavate': 'Explore',\r\n 'AIincrease': 'Incremental Return',\r\n 'combination-strategyExcavate': '组åˆç–略挖掘',\r\n 'rollingBacktest': '滚动回测',\r\n\r\n 'optimalGrid': 'æœ€ä½³ç½‘æ ¼æ•°',\r\n 'optimizationGrid': '4D optimization',\r\n 'myTrade': 'My trading',\r\n 'mySimulated': 'My trade simulate',\r\n 'myRealTime': 'My trade live',\r\n\r\n 'myExcavate': 'My exploration',\r\n\r\n 'strategyLib': 'Strategy library',\r\n 'backtestCondition': 'Backtest conditions',\r\n\r\n 'created': 'Submit time',\r\n 'maxRateOfReturn': 'Maximum annualized return',\r\n 'maxdrawdown': 'Max drawdown',\r\n 'strategyPeriod': 'Strategy period',\r\n 'backtestInterval': 'Period',\r\n 'strategyNumber': 'Strategy count',\r\n\r\n 'dayTradeOnly': 'Holding period',\r\n\r\n 'crossDay': 'Overnight',\r\n\r\n 'digging': 'Exploring...',\r\n 'backtesting': 'Backtesting',\r\n 'optimizing': 'Optimizing',\r\n\r\n 'importBacktestResult': 'Export backtest results',\r\n\r\n 'backtestFilter': 'Criteria',\r\n 'clearFilter': 'Clear',\r\n\r\n 'backtestTime': 'Backtest time',\r\n\r\n 'annualizedRateOfReturn': 'Annual return',\r\n\r\n 'search': 'Filter',\r\n 'symbolName&Code': 'Security name/symbol',\r\n\r\n 'theAbove': 'Above {num}',\r\n 'theFollowing': 'Below {num}',\r\n\r\n 'startBacktest': 'Start backtest',\r\n 'backtestStatus': 'Backtest status',\r\n\r\n 'backtestingConsuming': 'Backtesting,Time-consuming {num}s',\r\n 'backtestCompletedConsuming': 'Completed in {num} seconds',\r\n\r\n 'bullishStrategy': '看涨ç–ç•¥',\r\n 'bearishStrategy': '看跌ç–ç•¥',\r\n 'shockStrategy': '震è¡ç–ç•¥',\r\n\r\n 'todayBacktestNumberRunOut': 'The number of backtests today has been used up',\r\n 'todayBatchBacktestNumberRunOut': 'Today\\'s multi - dimensional optimization quota has been used up',\r\n\r\n 'newRealTimeTrade': 'Trade live',\r\n 'newSimulationTrade': 'Simulate trading in live market',\r\n\r\n 'goRealTime': 'Trade live',\r\n 'goSimulation': 'Simulate live',\r\n\r\n 'tradingStraregy': 'Trading strategy',\r\n 'strategyType': 'Strategy type',\r\n 'startTime': 'Start time',\r\n 'endTime': 'End time',\r\n\r\n 'minimumCapital': 'Buying power required',\r\n\r\n 'date': 'Date',\r\n\r\n 'L': 'Bought',\r\n 'S': 'Sold',\r\n\r\n 'entryDate': 'Entry time',\r\n 'entryPrice': 'Entry price',\r\n 'direction': 'Direction',\r\n 'quantity': 'Quantity',\r\n 'exitDate': 'Exit time',\r\n 'exitPrice': 'Exit price',\r\n 'pnl': 'pnl',\r\n 'initbp': 'Initial Capital',\r\n 'exitInfo': 'å¹³ä»“åŽŸå› ',\r\n 'remark': 'Remark',\r\n\r\n 'excavateDetails': 'Detail',\r\n 'backtestDetails': 'Detail',\r\n 'fundsCurve': 'Equity curve',\r\n 'tradeDetails': 'Trade detail',\r\n\r\n 'incomeCurve': 'Return',\r\n 'equityCurve': '净值曲线',\r\n\r\n 'equity': '净值',\r\n 'cash': '现金',\r\n\r\n 'thisStrategy': 'This strategy',\r\n\r\n 'totalPnl': 'Total P&L',\r\n 'profitFactor': 'Profit ratio',\r\n 'totalTrades': 'Total Trades',\r\n\r\n 'CSI300': 'CSI300',\r\n 'SP500': 'SP500',\r\n\r\n 'number': '(Count)',\r\n\r\n 'mostOptionalStrategies': 'æœ€å¤šåŒæ—¶å¯é€‰10个ç–ç•¥',\r\n\r\n 'backtestRequestSucc': 'Individual stock backtest request succeeded',\r\n\r\n 'pleaseEnterSymbolCode': 'Please enter stock name/ticker',\r\n\r\n 'closed_on_day_close_timeout': 'Closed on market close',\r\n 'closed_on_day_open_timeout': 'Closed on market open',\r\n 'closed_on_EOB_timeout': 'Closed on timeout',\r\n 'closed_on_EOD_timeout': 'Closed by end of day',\r\n 'closed_on_request': 'Closed on request',\r\n 'closed_on_stoploss': 'Stopped out',\r\n 'closed_on_takeprofit': 'Reached profit target',\r\n 'closed_on_timeout': 'Closed on timeout',\r\n 'closed_on_trailingstoploss': 'Stopped out on trailing stop',\r\n 'rebalance_close': 'Closed by rebalance',\r\n 'rebalance_increase': 'Increased by rebalance',\r\n 'rebalance_reduce': 'Reduced by rebalance',\r\n\r\n 'stock_split_and_or_dividend': 'Split/Dividend',\r\n\r\n 'error': 'Error',\r\n\r\n 'want.delete.backtest': 'Sure you want to delete the backtest?',\r\n 'want.delete.batchbacktest': 'Sure you want to delete the optimization?',\r\n 'remove.backtest.success': 'Deleted successfully',\r\n 'remove.batchbacktest.success': 'Deleted successfully',\r\n\r\n 'standardStrategy': 'Standard strategy',\r\n 'featuredStrategy': 'Featured strategy',\r\n\r\n 'strategyNoTrade': '{name},This strategy produced no trade.',\r\n\r\n 'backtestGrid': 'Grid backtest',\r\n 'backtestGrids': '智能回测',\r\n\r\n 'gridStrategy': 'Strategy#',\r\n\r\n\r\n 'gridSetting': 'Grid settings',\r\n 'priceRange': 'Price range',\r\n 'lowestPriceRange': '区间最低价',\r\n 'highestPriceRange': '区间最高价',\r\n\r\n 'gridCnt': 'Number of grids',\r\n 'pleaseEnterGrids': 'Please enter the number of grids',\r\n 'gridWidth': 'Grid width',\r\n 'gridWidthForNum': 'Grid width {num}',\r\n 'capital': 'Commission amount',\r\n 'pleaseEnterAmount': '请输入金é¢(å…ƒ)',\r\n 'accordingToSettingsAmountMustBeGreaterOrEqualTo': 'æ ¹æ®ä»¥ä¸Šè®¾ç½®ï¼Œé‡‘é¢éœ€å¤§äºŽç‰äºŽ{num}',\r\n 'gridCntSize': 'The number of grids must be greater than 4 and less than or equal to 20',\r\n\r\n 'lowestPriceCannotBeGreaterThanHighestPrice': 'The lowest price cannot be greater than the highest price',\r\n\r\n 'amountMustBeGreaterOrEqualTo': '金é¢éœ€å¤§äºŽç‰äºŽ{num}',\r\n\r\n 'priceRanges': 'ä»·æ ¼åŒºé—´ï¼ˆå…ƒï¼‰',\r\n 'gridWidths': 'ç½‘æ ¼å®½åº¦ï¼ˆå…ƒï¼‰',\r\n 'capitals': '委托金é¢ï¼ˆå…ƒï¼‰',\r\n 'initialRateOfReturnOnCapital': '累计收益率',\r\n\r\n\r\n 'backtestFail': 'Backtest failed',\r\n\r\n 'discoverBestStrategy': 'Explore strategies',\r\n\r\n 'noLoss': 'No loss',\r\n 'noProfit': 'No profit',\r\n\r\n 'tradeTimes': 'Trade time',\r\n 'strikePrice': 'Trade price',\r\n 'pnls': 'P&L',\r\n 'profit and loss': 'P&L',\r\n\r\n 'Size': 'Size',\r\n 'tradeSize': 'Trade size',\r\n 'dollars': 'Trade capital',\r\n 'gain': 'P&L',\r\n\r\n 'grandTotal/annualizedRateOfReturn': 'Total return/Annualized return',\r\n\r\n 'grandTotalRateOfReturn': 'Grand total return',\r\n 'strategyGains': 'Strategy',\r\n 'individualStockIncome': 'Symbol',\r\n\r\n 'individualStocks+strategyStackingIncome': 'Combined',\r\n\r\n 'Optimized': '(Optimized)',\r\n 'optimized details': '优化详情',\r\n\r\n 'Cross-day trading only': 'Cross-day trading only',\r\n 'Day trading only': 'Day trade only',\r\n\r\n 'startOptimized': 'Start optimizing',\r\n 'optimizing': 'Optimizing...',\r\n 'optimizingConsuming': 'Optimizing,Time-consuming{num}s',\r\n 'optimizedCompletedConsuming': 'Optimization is complete,Time-consuming{num}s',\r\n\r\n 'Original income/Profit after optimization': '原收益/ä¼˜åŒ–åŽæ”¶ç›Š',\r\n 'Original income': '原收益',\r\n 'Original annualized income': '原年化收益',\r\n 'Profit after optimization': 'ä¼˜åŒ–åŽæ”¶ç›Š',\r\n 'Annualized income after optimization': '优化åŽå¹´åŒ–收益',\r\n 'Original profit-loss ratio': 'åŽŸç›ˆäºæ¯”',\r\n 'Profit and loss ratio after optimization': '优化åŽç›ˆäºæ¯”',\r\n\r\n 'Original strategy income': '原ç–略收益',\r\n 'stocks + original strategy income': '个股+原ç–ç•¥å åŠ æ”¶ç›Š',\r\n 'stocks + income after optimization': '个股+优化åŽå åŠ æ”¶ç›Š',\r\n\r\n 'Original max annualized income': 'Original maximum annualized return',\r\n 'max Annualized income after optimization': 'Maximum annualized profit after optimization',\r\n\r\n 'queue': 'Waiting...',\r\n\r\n 'DayTradeOnly': 'Day trade only',\r\n\r\n 'startConnectSysEngine': 'Connecting to service...',\r\n\r\n 'connectToSysEngineSucc': 'Connected to service.',\r\n 'connectToSysEngineFail': 'Failed to connect to system engine',\r\n 'DisconnectToSysEngine': 'System engine disconnected',\r\n\r\n 'connectToSysEngineError': 'Connection system engine error',\r\n\r\n 'DisconnectSysEngineTryagain': 'Connecting to services...',\r\n\r\n 'loginRequestSucc': 'Logged in to service.',\r\n 'logintRequestFail': 'Failed to log in to the system service',\r\n\r\n 'deployStrategySubmitFail': 'Failed to submit deployment strategy',\r\n 'deployStrategyFail': 'Failed to deploy strategic trading',\r\n\r\n 'Multi-dimensionalOptimization': '4D optimization',\r\n 'ScrollOptimization': 'Scroll optimization',\r\n\r\n 'chooseBroker': 'Brokerage',\r\n 'accountType': 'Account type',\r\n 'requiredSteps': 'Steps',\r\n 'cashAccount': 'Cash',\r\n 'financingAccount': 'Margin',\r\n\r\n 'start': 'Start',\r\n 'stop': 'Stop',\r\n\r\n 'running': 'Running',\r\n 'waiting': 'Not started',\r\n 'stopping': 'stopping',\r\n\r\n 'want.delete.trade': 'Are you want to undeploy the strategy?',\r\n 'remove.trade.success': 'Undeployed [symbol] strategy {num}',\r\n\r\n 'simulated trading limit': 'Only up to <span class=\"common-loading-icon\">10</span> simulated trades can be run at the same time!',\r\n 'simulated trading limit prompt': 'To continue creating new paper trades, please go to \"My Simulation\" and delete a running paper trade.',\r\n\r\n 'buyingPowerRequried': 'Minimum buying power required',\r\n 'tradeLiveInfo01': '1. Run IB TWS,configure and allow socket connection.',\r\n 'tradeLiveInfo02': '2. Download Quancept IB order agent.',\r\n 'tradeLiveInfo03': '3. Run Quancept IB order agent,connect to IB TWS.',\r\n\r\n 'minimumPositionRequired': 'Minimum position required',\r\n 'downloadQuanceptAgent': 'Download \"Quancept IB order agent\"',\r\n\r\n 'share': '{num} share',\r\n\r\n 'newRealTradeSucc': 'Strategy is deployed for live trading.',\r\n 'checkLiveTradeStatus': 'Check status at ',\r\n 'checkLiveTradeStatusUrl': 'â€My trading -> My live trading“',\r\n\r\n 'targetDistance': 'Take profit',\r\n 'stopDistance': 'Stop loss',\r\n 'maxHoldingPeriod': 'Holding period',\r\n 'minute': 'Minutes',\r\n 'day': ' Days',\r\n\r\n 'original': 'Original',\r\n 'none': 'None',\r\n\r\n 'Original strategy': 'Original strategy',\r\n\r\n 'stockStrategy': 'Individual stocks strategy',\r\n 'generalStrategy': 'General strategy',\r\n\r\n 'unrealized': 'Unrealized',\r\n\r\n 'rollingStrategy': 'Consistent return',\r\n 'getRollingStrategy': 'Explore',\r\n\r\n 'queryRequestSucc': 'Request submitted',\r\n 'queryingConsuming': 'Query, time-consuming{num}s',\r\n 'queryingCompletedConsuming': 'Exploration completed',//,耗时{num}s',\r\n\r\n 'queryFail': 'Error in request query,Error: {num}',\r\n 'todayQueryNumberRunOut': 'Today\\'s stock query quota has been used up',\r\n 'Querying': 'Querying',\r\n 'Researching': 'Researching',\r\n 'query time': 'Query time',\r\n 'query interval': 'Test period',\r\n\r\n 'incomeList': 'Performance by strategy',\r\n 'In-sample': 'In-sample',\r\n 'Out-sample': 'Out-sample{num}',\r\n\r\n 'query prompt': 'Exploration has begun. Please check back in one hour.',\r\n 'No strategy found for this security': 'No strategy found for this security',\r\n\r\n 'strategy id': 'Strategy',\r\n 'category': 'Category',\r\n\r\n 'Basic Information': 'Explore strategies with consistent return',\r\n\r\n 'filter': 'Filter',\r\n 'check': 'Check',\r\n\r\n 'queryTime': 'Datetime',\r\n 'Overnight position': 'Overnight position',\r\n\r\n 'Cross Days': 'Yes',\r\n 'within days': 'No',\r\n\r\n 'Return': 'Return',\r\n 'operation': '',\r\n\r\n 'Buying power to allocate': 'Buying power to allocate',\r\n 'Buying power to allocate tips': 'The allocation of buying power cannot be less than the minimum buying power',\r\n\r\n 'stopped': 'Stopped',\r\n 'Undeploy': 'Undeploy',\r\n\r\n 'tbLogin': 'Trade account',\r\n 'Capital used': 'Capital used',\r\n\r\n 'No strategy available for aymbol': 'No strategy available for {symbol}',\r\n\r\n 'login td account': 'Login to your TD Ameritrade account',\r\n 'Failed to get auth url': 'Failed to get TD Ameritrade certified URL address',\r\n 'Authentication is normal': 'TD Ameritrade account verification is normal, no need to log in again',\r\n 'Authenticate tdameritrade account': 'Please log in to the TD Ameritrade account for verification',\r\n 'tdameritrade account authentication is about to expire': 'TD Ameritrade account verification is about to expire, please log in again for verification',\r\n \r\n 'new filter': 'New filter',\r\n 'my filter': 'My filter',\r\n\r\n 'edit filter': 'Update filter',\r\n 'remove filter': 'Remove filter',\r\n\r\n 'save filter': 'Save filter',\r\n 'upstream filter': 'Upstream filter',\r\n\r\n 'filter.name.placeholder': 'Give a good name (1-100 bytes)', //tod\r\n 'filter.name.format': 'letter case, numbers only',\r\n 'Filter name cannot be empty': 'Filter name cannot be empty',\r\n 'filter.name.already.exists': 'Filter name already exists. Try another name.',\r\n\r\n 'make.sure.delete.filter': 'Are you sure you want to delete the filter ',\r\n\r\n 'alertIntervalError': 'The alert interval must be great than 300 sec',\r\n\r\n 'new.filter.success': 'New filter succeeded',\r\n 'update.filter.success': 'Update filter succeeded',\r\n 'delete.filter.success': 'delete filter succeeded',\r\n\r\n 'datetime': 'Datetime',\r\n\r\n 'update scan': 'Update scan',\r\n\r\n 'compact': 'Compact',\r\n 'detailed': 'Detailed',\r\n 'count': 'Count',\r\n\r\n 'downloads.alerts': 'Downloads alerts',\r\n\r\n 'portfolioError': 'Portfolio opt , Error: {errorCode}',\r\n 'my.portfolio': 'My portfolio',\r\n\r\n 'Whether to adjust the warehouse': 'Whether to adjust the warehouse',\r\n\r\n 'Daily': 'Daily',\r\n '60Min': '60Min',\r\n 'Month': 'Month',\r\n 'Week': 'Week',\r\n 'Hour': 'Hour',\r\n\r\n 'startPortfolio': 'Start Portfolio',\r\n\r\n 'No Portfolio optimization results': 'No Portfolio optimization results',\r\n\r\n 'Maximizing returns': 'Maximizing returns',\r\n 'Minimize variance': 'Minimize variance',\r\n 'Benchmarking income': 'Benchmarking income',\r\n\r\n 'Portfolio opt info': 'Portfolio optimization information',\r\n\r\n 'want.delete.portfolio': 'Sure you want to delete the optimization?',\r\n\r\n 'fromDate': 'From date',\r\n 'toDate': 'To date',\r\n 'barInterval': 'Interval',\r\n 'tradePeriod': 'Trade period',\r\n\r\n 'backtestItems': '',\r\n\r\n\r\n}\r\nexport default en_US;","import antdEn from 'antd/lib/locale-provider/en_US';\r\nimport appLocaleData from 'react-intl/locale-data/en';\r\nimport enMessages from './en';\r\n\r\nwindow.appLocale = {\r\n messages: {\r\n ...enMessages,\r\n },\r\n antd: antdEn,\r\n locale: 'en-US',\r\n data: appLocaleData,\r\n};\r\n","import { combineReducers } from 'redux';\r\nimport member from './pages/member/reducer'\r\nimport concept from './pages/concept/reducer'\r\nimport vernacular from './pages/vernacular/reducer'\r\nimport customStock from './pages/customStock/reducer'\r\nimport strategy from './pages/strategy/reducer'\r\nimport option from './pages/option/reducer'\r\nimport factor from './pages/factor/reducer'\r\nimport hawkeye from './pages/hawkeye/reducer'\r\nimport download from './pages/download/reducer'\r\nimport backtest from './pages/backtest/reducer'\r\nimport trade from './pages/trade/reducer'\r\nimport test from './pages/test/reducer'\r\nimport charge from './pages/stripe/reducer'\r\nimport correlation from './pages/correlation/reducer'\r\nimport fail from './pages/reducer'\r\nimport filter from './pages/filter/reducer'\r\nimport portfolio from './pages/portfolio/reducer'\r\n\r\nimport demo from './pages/demo/reducer'\r\n\r\nimport tdAmeritradePage from './pages/tdAmeritrade/reducer'\r\n\r\nconst rootReducer = combineReducers({\r\n member,\r\n concept,\r\n vernacular,\r\n customStock,\r\n strategy,\r\n option,\r\n factor,\r\n hawkeye,\r\n download,\r\n backtest,\r\n trade,\r\n test,\r\n charge,\r\n correlation,\r\n fail,\r\n filter,\r\n portfolio,\r\n\r\n demo,\r\n\r\n tdAmeritradePage,\r\n})\r\n\r\nexport default rootReducer;","export default function member(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_captcha\":\r\n return { ...state, status: 'Get_Captcha', state: action.status, t: Date.now() };\r\n\r\n case \"get_email_captcha\":\r\n return { ...state, status: 'Get_Email_Captcha', state: action.status, t: Date.now() };\r\n\r\n case \"login_commit\":\r\n return { ...state, status: \"Logining\" };\r\n case \"login_success\":\r\n return { ...state, status: \"Login_Success\", user: action.user, token: action.token };\r\n case \"login_failed\":\r\n return { ...state, status: \"Login_Failed\", state: action.status };\r\n\r\n case \"register_commit\":\r\n return { ...state, status: \"Registered\" };\r\n case \"register_success\":\r\n return { ...state, status: \"Register_Success\", user: action.user, token: action.token };\r\n case \"register_failed\":\r\n return { ...state, status: \"Register_Failed\", state: action.status };\r\n\r\n case \"forget_commit\":\r\n return { ...state, status: \"ResetPassword\" };\r\n case \"forget_success\":\r\n return { ...state, status: \"Forget_Success\" };\r\n case \"forget_failed\":\r\n return { ...state, status: \"Forget_Failed\", state: action.status };\r\n\r\n case \"get_permission_success\":\r\n return { ...state, status: 'get_permission_success', permission: action.permission, isVip: action.isVip };\r\n case \"get_permission_failed\":\r\n return { ...state, status: 'get_permission_failed', state: action.status };\r\n\r\n case \"payment_commit\":\r\n return { ...state, status: 'payment_commit' };\r\n case \"payment_success\":\r\n return { ...state, status: 'payment_success', permission: action.permission };\r\n case \"payment_failed\":\r\n return { ...state, status: 'payment_failed', state: action.status, permission: action.permission };\r\n\r\n case \"update_user_success\":\r\n return { ...state, status: 'update_user_success', user: action.user };\r\n case \"update_user_failed\":\r\n return { ...state, status: 'update_user_failed', state: action.status };\r\n\r\n case \"get_account_success\":\r\n return { ...state, status: 'get_account_success', accounts: action.accounts };\r\n case \"get_account_failed\":\r\n return { ...state, status: 'get_account_failed', state: action.status };\r\n\r\n case \"get_subscription_success\":\r\n return { ...state, status: 'get_subscription_success', subscriptions: action.sc, subscriptionDetails: action.sd };\r\n case \"get_subscription_failed\":\r\n return { ...state, status: 'get_subscription_failed', state: action.status };\r\n\r\n case \"cancel_subscription_success\":\r\n return { ...state, status: 'cancel_subscription_success', id: action.i };\r\n case \"cancel_subscription_failed\":\r\n return { ...state, status: 'cancel_subscription_failed', state: action.status };\r\n\r\n case \"get_message_success\":\r\n return { ...state, status: 'get_message_success', messages: action.messages };\r\n case \"get_message_failed\":\r\n return { ...state, status: 'get_message_failed', state: action.status };\r\n\r\n case \"send_message_success\":\r\n return { ...state, status: 'send_message_success' };\r\n case \"send_message_failed\":\r\n return { ...state, status: 'send_message_failed', state: action.status };\r\n\r\n case \"updatePassword_commit\":\r\n return { ...state, status: 'updatePassword_commit' };\r\n case \"update_password_success\":\r\n return { ...state, status: 'update_password_success', user: action.user };\r\n case \"update_password_failed\":\r\n return { ...state, status: 'update_password_failed', state: action.status };\r\n \r\n case \"get_phone_captcha\":\r\n return { ...state, status: 'get_phone_captcha', state: action.status };\r\n\r\n case \"bindPhone_commit\":\r\n return { ...state, status: 'bindPhone_commit' };\r\n case \"bind_phone_success\":\r\n return { ...state, status: 'bind_phone_success', user: action.user };\r\n case \"bind_phone_failed\":\r\n return { ...state, status: 'bind_phone_failed', state: action.status };\r\n\r\n case \"get_coupon_success\":\r\n return { ...state, status: 'get_coupon_success', coupon: action.coupon };\r\n case \"get_coupon_failed\":\r\n return { ...state, status: 'get_coupon_failed', state: action.status };\r\n\r\n case \"logout_success\":\r\n return { ...state, status: \"Logout_Success\" };\r\n case \"logout_failed\":\r\n return { ...state, status: \"Logout_Failed\" };\r\n\r\n case \"sendHubMessage\":\r\n return { ...state, status: \"sendHubMessage\", data: action.data };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function concept(state = { }, action) {\r\n switch (action.type) {\r\n case \"get_concept_success\":\r\n return { ...state, status: \"concept_success\", sectors: action.sectors, stockCount: action.stockCount, concepts: action.concepts, conceptExplanations: action.conceptExplanations, permission: action.permission };\r\n case \"get_concept_fail\":\r\n return { ...state, status: \"concept_fail\", state: action.status };\r\n\r\n case \"get_luis_success\":\r\n return { ...state, status: \"luis_success\", sectors: action.sectors, luString: action.luString, stockCount: action.stockCount, permission: action.permission };\r\n case \"get_luis_fail\":\r\n return { ...state, status: \"luis_fail\", state: action.status };\r\n\r\n case \"get_change_batch_success\":\r\n return { ...state, status: \"get_change_batch_success\", luString: action.luString };\r\n case \"get_change_batch_fail\":\r\n return { ...state, status: \"get_change_batch_fail\", state: action.status }\r\n\r\n case \"get_change_condition_success\":\r\n return { ...state, status: \"get_change_condition_success\", luString: action.luString, sentenceFormula: action.sentenceFormula };\r\n case \"get_change_condition_fail\":\r\n return { ...state, status: \"get_change_condition_fail\", state: action.status }\r\n\r\n case \"scan_strategy_commit\":\r\n return { ...state, status: \"scan_commit\" };\r\n case \"get_scan_success\":\r\n return { ...state, status: \"scan_success\", scanAlert: action.scanAlert, filters: action.filter, permission: action.permission, lastTimes: action.lastTimes };\r\n case \"get_scan_fail\":\r\n return { ...state, status: \"scan_fail\", state: action.status, fail: action.error };\r\n\r\n case \"save_strategy_commit\":\r\n return { ...state, status: \"save_commit\" };\r\n case \"get_save_success\":\r\n return { ...state, status: \"save_success\", editStrategy: action.editStrategy };\r\n case \"get_save_fail\":\r\n return { ...state, status: \"save_fail\", state: action.status, fail: action.error };\r\n\r\n case \"luis_analysis_commit\":\r\n return { ...state, status: \"analysis_commit\" };\r\n case \"get_luis_analysis_success\":\r\n return { ...state, status: \"analysis_success\", formulaString: action.formulaString };\r\n case \"get_luis_analysis_fail\":\r\n return { ...state, status: \"analysis_fail\", state: action.status };\r\n\r\n case \"customStock_commit\":\r\n return { ...state, status: \"customStock_commit\" };\r\n case \"update_customStock_success\":\r\n return { ...state, status: \"update_customStock_success\", customGroup: action.customGroup, symbolList: action.symbolList };\r\n case \"update_customStock_fail\":\r\n return { ...state, status: \"update_customStock_fail\", state: action.status };\r\n\r\n case \"get_stock_count_success\":\r\n return { ...state, status: \"get_stock_count_success\", stockPoolKey: action.stockPoolKey, stockGroups: action.stockGroups, stockCount: action.stockCount };\r\n case \"get_stock_count_fail\":\r\n return { ...state, status: \"get_stock_count_fail\", state: action.status };\r\n\r\n case \"clear_filter_string\":\r\n return { ...state, status: \"clear_filter_string\" };\r\n \r\n case \"use_formula\":\r\n return { ...state, status: \"use_formula\", useFormulaData: action.useFormulaData };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function vernacular(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_formula_success\":\r\n return { ...state, status: \"formula_success\", sectors: action.sectors, stockCount: action.stockCount, permission: action.permission };\r\n case \"get_formula_fail\":\r\n return { ...state, status: \"formula_fail\", state: action.status };\r\n\r\n case \"save_formula_strategy_commit\":\r\n return { ...state, status: \"save_formula_commit\", t: Date.now() };\r\n case \"get_save_formula_success\":\r\n return { ...state, status: \"save_formula_success\", editStrategy: action.editStrategy };\r\n case \"get_save_formula_fail\":\r\n return { ...state, status: \"save_formula_fail\", state: action.status, fail: action.error };\r\n\r\n case \"scan_formula_strategy_commit\":\r\n return { ...state, status: \"scan_formula_commit\", t: Date.now() };\r\n case \"get_scan_formula_success\":\r\n return { ...state, status: \"scan_formula_success\", scanAlert: action.scanAlert, filters: action.filter, permission: action.permission, lastTimes: action.lastTimes };\r\n case \"get_scan_formula_fail\":\r\n return { ...state, status: \"scan_formula_fail\", state: action.status, fail: action.error };\r\n\r\n case \"get_luis_success\":\r\n return { ...state, status: \"luis_success\", sectors: action.sectors, luString: action.luString, stockCount: action.stockCount, permission: action.permission, symbols: action.symbols };\r\n case \"get_luis_fail\":\r\n return { ...state, status: \"luis_fail\", state: action.status };\r\n\r\n case \"get_scan_sectors_success\":\r\n return { ...state, status: \"scan_sectors_success\", sectors: action.sectors, stockCount: action.stockCount, naturalLangFormulas: action.naturalLangFormulas };\r\n case \"get_scan_sectors_fail\":\r\n return { ...state, status: \"scan_sectors_fail\", state: action.status };\r\n\r\n case \"set_gpts_message_success\":\r\n return { ...state, status: \"gpts_message_success\", id: action.id };\r\n case \"set_gpts_message_fail\":\r\n return { ...state, status: \"gpts_message_fail\", t: Date.now() };\r\n\r\n case \"get_change_batch_success\":\r\n return { ...state, status: \"get_change_batch_success\", luString: action.luString };\r\n case \"get_change_batch_fail\":\r\n return { ...state, status: \"get_change_batch_fail\", state: action.status };\r\n\r\n case \"get_change_condition_success\":\r\n return { ...state, status: \"get_change_condition_success\", luString: action.luString, sentenceFormula: action.sentenceFormula };\r\n case \"get_change_condition_fail\":\r\n return { ...state, status: \"get_change_condition_fail\", state: action.status };\r\n\r\n case \"luis_analysis_commit\":\r\n return { ...state, status: \"analysis_commit\", t: Date.now() };\r\n case \"get_luis_analysis_success\":\r\n return { ...state, status: \"analysis_success\", formulaString: action.formulaString };\r\n case \"get_luis_analysis_fail\":\r\n return { ...state, status: \"analysis_fail\", state: action.status };\r\n\r\n case \"change_luis_strategy_commit\":\r\n return { ...state, status: \"change_luis_strategy_commit\" };\r\n case \"change_luis_strategy_success\":\r\n return { ...state, status: \"change_luis_strategy_success\", luisString: action.luisString };\r\n case \"change_luis_strategy_fail\":\r\n return { ...state, status: \"change_luis_strategy_fail\", state: action.status };\r\n\r\n case \"customStock_commit\":\r\n return { ...state, status: \"customStock_commit\", t: Date.now() };\r\n case \"update_customStock_success\":\r\n return { ...state, status: \"update_customStock_success\", customGroup: action.customGroup, symbolList: action.symbolList };\r\n case \"update_customStock_fail\":\r\n return { ...state, status: \"update_customStock_fail\", state: action.status };\r\n\r\n case \"get_stock_count_success\":\r\n return { ...state, status: \"get_stock_count_success\", stockCount: action.stockCount };\r\n case \"get_stock_count_fail\":\r\n return { ...state, status: \"get_stock_count_fail\", state: action.status };\r\n\r\n case \"send_email_success\":\r\n return { ...state, status: \"send_email_success\", t: Date.now() };\r\n case \"send_email_fail\":\r\n return { ...state, status: \"send_email_fail\", t: Date.now() };\r\n\r\n case \"clear_filter_string\":\r\n return { ...state, status: \"clear_filter_string\", t: Date.now() };\r\n\r\n case \"use_formula\":\r\n return { ...state, status: \"use_formula\", useFormulaData: action.useFormulaData };\r\n case \"empty\":\r\n return { ...state, status: '', t: Date.now() };\r\n default:\r\n return state;\r\n }\r\n}","export default function customStock(state = {}, action) {\r\n switch (action.type) {\r\n case \"customStock_success\":\r\n return { ...state, status: 'customStock_success', symbolList: action.symbolList, currGroupId: action.currGroupId, t: Date.now() };\r\n case \"customStock_fail\":\r\n return { ...state, status: 'customStock_fail', state: action.status };\r\n\r\n case \"get_symbol_items_success\":\r\n return { ...state, status: 'get_symbol_items_success', symbolItems: action.symbolItems };\r\n case \"get_symbol_items_fail\":\r\n return { ...state, status: 'get_symbol_items_fail', state: action.status };\r\n case \"customStockTick_success\":\r\n return { ...state, status: 'customStockTick_success', symbolList: action.symbolList };\r\n case \"customStockTick_fail\":\r\n return { ...state, status: 'customStockTick_fail', state: action.status };\r\n\r\n case \"customStock_commit\":\r\n return { ...state, status: 'customStock_commit' };\r\n case \"add_customStock_success\":\r\n return { ...state, status: 'add_customStock_success', customGroup: action.customGroup, symbolList: action.symbolList };\r\n case \"add_customStock_fail\":\r\n return { ...state, status: 'add_customStock_fail', state: action.status, fail: action.fail };\r\n\r\n case \"update_customStock_success\":\r\n return { ...state, status: 'update_customStock_success', customGroup: action.customGroup, symbolList: action.symbolList };\r\n case \"update_customStock_fail\":\r\n return { ...state, status: 'update_customStock_fail', state: action.status };\r\n\r\n case \"remove_customStock_success\":\r\n return { ...state, status: 'remove_customStock_success', customStock: action.customStock, symbolList: action.symbolList };\r\n case \"remove_customStock_fail\":\r\n return { ...state, status: 'remove_customStock_fail', state: action.status };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function strategy(state = {}, action) {\r\n switch (action.type) {\r\n case \"strategy_success\":\r\n return { ...state, status: 'strategy_success', items: action.items };\r\n case \"strategy_fail\":\r\n return { ...state, status: 'strategy_fail', state: action.status };\r\n\r\n case \"strategy_commit\":\r\n return { ...state, status: 'strategy_commit' };\r\n case \"rename_strategy_success\":\r\n return { ...state, status: 'rename_strategy_success' };\r\n case \"rename_strategy_fail\":\r\n return { ...state, status: 'rename_strategy_fail', state: action.status };\r\n \r\n case \"copy_strategy_success\":\r\n return { ...state, status: 'copy_strategy_success', customStrategy: action.editStrategy };\r\n case \"copy_strategy_fail\":\r\n return { ...state, status: 'copy_strategy_fail', state: action.status };\r\n\r\n case \"remove_success\":\r\n return { ...state, status: 'remove_success', strategyId: action.strategyId };\r\n case \"remove_fail\":\r\n return { ...state, status: 'remove_fail', state: action.status };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function option(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_option_success\":\r\n return { ...state, status: \"get_option_success\", underlyingList: action.underlyingList, permission: action.permission }\r\n case \"get_option_fail\":\r\n return { ...state, status: \"get_option_fail\", state: action.status }\r\n\r\n case \"option_scan_commit\":\r\n return { ...state, status: \"option_scan_commit\" };\r\n case \"option_scan_success\":\r\n return { ...state, status: \"option_scan_success\", scanResponse: action.scanResponse, permission: action.permission, lastTimes: action.lastTimes }\r\n case \"option_scan_fail\":\r\n return { ...state, status: \"option_scan_fail\", state: action.status }\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function factor(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_factor_filters_success\":\r\n return { ...state, status: \"get_factor_filters_success\", filter: action.filter, currDate: action.currDate, sectors: action.sectors, stockCount: action.stockCount, permission: action.permission };\r\n case \"get_factor_filters_failed\":\r\n return { ...state, status: \"get_factor_filters_failed\", state: action.status };\r\n\r\n case \"scan_factorFilter_commit\":\r\n return { ...state, status: \"scan_factorFilter_commit\" };\r\n case \"scan_factorFilter_success\":\r\n return { ...state, status: \"scan_factorFilter_success\", scanAlert: action.scanAlert, filter: action.filter, permission: action.permission, fLastTimes: action.lastTimes };\r\n case \"scan_factorFilter_failed\":\r\n return { ...state, status: \"scan_factorFilter_failed\", state: action.status, fail: action.error };\r\n\r\n case \"factor_generate_commit\":\r\n return { ...state, status: \"commit\" }\r\n case \"factor_generate_ready\":\r\n return { ...state, status: \"ready\", taskName: action.taskName };\r\n case \"factor_generate_working\":\r\n return { ...state, status: \"working\" }\r\n case \"factor_generate_finished\":\r\n return { ...state, status: \"finished\", permission: action.permission, lastTimes: action.lastTimes };\r\n case \"factor_generate_error\":\r\n return { ...state, status: \"error\", state: action.status }\r\n\r\n case \"get_factor_files_success\":\r\n return { ...state, status: \"get_factor_files_success\", factorFiles: action.factorFiles }\r\n case \"get_factor_files_failed\":\r\n return { ...state, status: \"get_factor_files_failed\", state: action.status }\r\n\r\n case \"file_migrate_finished\":\r\n return { ...state, status: \"upload_file\", factorFile: action.factorFile }\r\n case \"file_migrate_error\":\r\n return { ...state, status: \"upload_file_error\", state: action.status }\r\n case \"file_remove_finished\":\r\n return { ...state, status: \"remove_file\", fileId: action.fileName }\r\n case \"file_remove_error\":\r\n return { ...state, status: \"remove_file_error\", state: action.status }\r\n \r\n //å› å分æž\r\n case \"factor_analyze_commit\":\r\n return { ...state, status: \"factor_analyze_commit\" }\r\n case \"factor_analyze_ready\":\r\n return { ...state, status: \"factor_analyze_ready\", analyzeTaskId: action.taskId, analyzeState: action.analyzeState, analyzeStage: action.stage }\r\n case \"factor_analyze_working\":\r\n return { ...state, status: \"factor_analyze_working\", analyzeState: action.analyzeState, analyzeStage: action.stage }\r\n case \"factor_analyze_finished\":\r\n return { ...state, status: \"factor_analyze_finished\", analyzeState: action.analyzeState }\r\n case \"factor_analyze_error\":\r\n return { ...state, status: \"factor_analyze_error\", state: action.status, analyzeState: action.analyzeState }\r\n\r\n case \"get_factor_list_success\"://å› å列表\r\n return { ...state, status: \"factor_list_loaded\", factorNames: action.factorNames }\r\n case \"get_factor_list_failed\":\r\n return { ...state, status: \"factor_list_failed\", state: action.status }\r\n\r\n case \"get_factor_data_success\"://收益\r\n const nextFactorData = { ...state.factorData, [action.chartName]: action.data }\r\n return { ...state, status: \"data_loaded\", factorData: nextFactorData, factorName: action.factorName, chartName: action.chartName }\r\n\r\n case \"get_factor_indicate_data_success\"://ic\r\n return { ...state, status: \"data_loaded\", factorData: action.data, factorName: action.factorName }\r\n\r\n case \"get_factor_turnover_data_success\"://æ¢æ‰‹çއ\r\n return { ...state, status: \"data_loaded\", factorData: action.data, factorName: action.factorName }\r\n\r\n case \"get_stock_count_success\":\r\n return { ...state, status: \"get_stock_count_success\", stockPoolKey: action.stockPoolKey, stockGroups: action.stockGroups, stockCount: action.stockCount };\r\n case \"get_stock_count_fail\":\r\n return { ...state, status: \"get_stock_count_fail\", state: action.status };\r\n\r\n case \"empty_status\":\r\n return { ...state, status: \"empty\" }\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function hawkeye(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_symbol_items_success\":\r\n return { ...state, status: 'get_symbol_items_success', symbolItems: action.symbolItems };\r\n case \"get_symbol_items_fail\":\r\n return { ...state, status: 'get_symbol_items_fail', state: action.status };\r\n\r\n case \"StockTick_success\":\r\n return { ...state, status: 'StockTick_success', symbolList: action.symbolList };\r\n case \"StockTick_fail\":\r\n return { ...state, status: 'StockTick_fail', state: action.status };\r\n \r\n case \"get_hawkeye_info_success\":\r\n return { ...state, status: 'get_hawkeye_info_success', luString: action.ls, nextDate: action.nd, permission: action.p, symbols: action.ss };\r\n case \"get_hawkeye_info_fail\":\r\n return { ...state, status: 'get_hawkeye_info_fail', state: action.status };\r\n\r\n case \"get_hawkeye_success\":\r\n return { ...state, status: 'get_hawkeye_success', items: action.items };\r\n case \"get_hawkeye_fail\":\r\n return { ...state, status: 'get_hawkeye_fail', state: action.status };\r\n\r\n case \"remove_hawkeye_success\":\r\n return { ...state, status: 'remove_hawkeye_success', hawkeyeId: action.hawkeyeId };\r\n case \"remove_hawkeye_fail\":\r\n return { ...state, status: 'remove_hawkeye_fail', state: action.status };\r\n\r\n case \"get_hawkeye_base\":\r\n return { ...state, status: 'get_hawkeye_base', data: action.data };\r\n\r\n case \"hawkeye_change_batch_success\":\r\n return { ...state, status: \"hawkeye_change_batch_success\", luString: action.luString };\r\n case \"hawkeye_change_batch_fail\":\r\n return { ...state, status: \"hawkeye_change_batch_fail\", state: action.status }\r\n\r\n case \"hawkeye_change_condition_success\":\r\n return { ...state, status: \"hawkeye_change_condition_success\", luString: action.luString, sentenceFormula: action.sentenceFormula };\r\n case \"hawkeye_change_condition_fail\":\r\n return { ...state, status: \"hawkeye_change_condition_fail\", state: action.status }\r\n\r\n case \"luis_analysis_commit\":\r\n return { ...state, status: \"analysis_commit\" };\r\n case \"get_luis_analysis_success\":\r\n return { ...state, status: \"analysis_success\", formulaString: action.formulaString };\r\n case \"get_luis_analysis_fail\":\r\n return { ...state, status: \"analysis_fail\", state: action.status };\r\n\r\n case \"Use_formula_hawkeye\":\r\n return { ...state, status: 'Use_formula_hawkeye', isLuisAnalysis: action.isLuisAnalysis, formulaName: action.formulaName, formulaString: action.formulaString, vernacularKey: action.vernacularKey };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function customStock(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_download\":\r\n return { ...state, status: 'get_download' };\r\n\r\n \r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function backtest(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_symbol_items_success\":\r\n return { ...state, status: 'get_symbol_items_success', symbolItems: action.symbolItems };\r\n case \"get_symbol_items_fail\":\r\n return { ...state, status: 'get_symbol_items_fail', state: action.status };\r\n\r\n case \"get_single_stock_success\":\r\n return { ...state, status: \"get_single_stock_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n\r\n case \"get_single_stock_fail\":\r\n return { ...state, status: \"get_single_stock_fail\", state: action.status };\r\n\r\n case \"get_single_symbol_success\":\r\n return { ...state, status: \"get_single_symbol_success\", backtestResult: action.backtestResult };\r\n\r\n case \"get_single_symbol_fail\":\r\n return { ...state, status: \"get_single_symbol_fail\", state: action.status };\r\n\r\n case \"get_backtest_strategy_success\":\r\n return { ...state, status: \"get_backtest_strategy_success\", strategyItems: action.strategyItems, permission: action.permission };\r\n\r\n case \"get_backtest_strategy_fail\":\r\n return { ...state, status: \"get_backtest_strategy_fail\", state: action.status };\r\n\r\n case \"get_remove_backtest_success\":\r\n return { ...state, status: \"get_remove_backtest_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n case \"get_remove_backtest_fail\":\r\n return { ...state, status: \"get_remove_backtest_fail\", state: action.status };\r\n\r\n case \"get_backtest_grid_success\":\r\n return { ...state, status: \"get_backtest_grid_success\", permission: action.permission, t: Date.now() };\r\n\r\n case \"get_backtest_grid_fail\":\r\n return { ...state, status: \"get_backtest_grid_fail\", state: action.status };\r\n\r\n case \"get_ai_grid_success\":\r\n return { ...state, status: \"get_ai_grid_success\", permission: action.permission, t: Date.now() };\r\n\r\n case \"get_ai_grid_fail\":\r\n return { ...state, status: \"get_ai_grid_fail\", state: action.status };\r\n\r\n case \"get_explore_grid_success\":\r\n return { ...state, status: \"get_explore_grid_success\", permission: action.permission, t: Date.now() };\r\n\r\n case \"get_explore_grid_fail\":\r\n return { ...state, status: \"get_explore_grid_fail\", state: action.status };\r\n\r\n case \"get_batch_info_success\":\r\n return { ...state, status: \"get_batch_info_success\", batchInfo: action.batchInfo, permission: action.permission, t: Date.now() };\r\n\r\n case \"get_batch_info_fail\":\r\n return { ...state, status: \"get_batch_info_fail\", state: action.status };\r\n\r\n case \"get_opt_info_success\":\r\n return { ...state, status: \"get_opt_info_success\", optInfo: action.optInfo, permission: action.permission, t: Date.now() };\r\n\r\n case \"get_opt_info_fail\":\r\n return { ...state, status: \"get_opt_info_fail\", state: action.status };\r\n\r\n case \"get_optimize_success\":\r\n return { ...state, status: \"get_optimize_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n\r\n case \"get_optimize_fail\":\r\n return { ...state, status: \"get_optimize_fail\", state: action.status };\r\n\r\n case \"get_optimize_symbol_success\":\r\n return { ...state, status: \"get_optimize_symbol_success\", backtestResult: action.backtestResult };\r\n\r\n case \"get_optimize_symbol_fail\":\r\n return { ...state, status: \"get_optimize_symbol_fail\", state: action.status };\r\n\r\n case \"get_remove_optimize_success\":\r\n return { ...state, status: \"get_remove_optimize_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n case \"get_remove_optimize_fail\":\r\n return { ...state, status: \"get_remove_optimize_fail\", state: action.status };\r\n\r\n case \"get_opt_success\":\r\n return { ...state, status: \"get_opt_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n\r\n case \"get_opt_fail\":\r\n return { ...state, status: \"get_opt_fail\", state: action.status };\r\n\r\n case \"get_opt_symbol_success\":\r\n return { ...state, status: \"get_opt_symbol_success\", backtestResult: action.backtestResult };\r\n\r\n case \"get_opt_symbol_fail\":\r\n return { ...state, status: \"get_opt_symbol_fail\", state: action.status };\r\n\r\n case \"get_remove_opt_success\":\r\n return { ...state, status: \"get_remove_opt_success\", backtestResult: action.backtestResult, symbols: action.symbols };\r\n case \"get_remove_opt_fail\":\r\n return { ...state, status: \"get_remove_opt_fail\", state: action.status };\r\n\r\n case \"get_rolling_grid_success\":\r\n return { ...state, status: \"get_rolling_grid_success\", permission: action.permission, symbolItems: action.symbolItems, t: Date.now() };\r\n\r\n case \"get_rolling_grid_fail\":\r\n return { ...state, status: \"get_rolling_grid_fail\", state: action.status };\r\n\r\n case \"get_rolling_items_success\":\r\n return { ...state, status: \"get_rolling_items_success\", rollingResult: action.rollingResult, symbols: action.symbols };\r\n case \"get_rolling_items_fail\":\r\n return { ...state, status: \"get_rolling_items_fail\", state: action.status };\r\n\r\n case \"get_remove_rolling_success\":\r\n return { ...state, status: \"get_remove_rolling_success\", rollingResult: action.rollingResult, symbols: action.symbols };\r\n case \"get_remove_rolling_fail\":\r\n return { ...state, status: \"get_remove_rolling_fail\", state: action.status };\r\n\r\n case \"get_rolling_symbol_success\":\r\n return { ...state, status: \"get_rolling_symbol_success\", rollingResult: action.rollingResult };\r\n case \"get_rolling_symbol_fail\":\r\n return { ...state, status: \"get_rolling_symbol_fail\", state: action.status };\r\n\r\n case \"get_base_position_success\":\r\n return { ...state, status: 'get_base_position_success', basePosition: action.bp, share: action.share, t: Date.now() };\r\n case \"get_base_position_fail\":\r\n return { ...state, status: 'get_base_position_fail', state: action.status };\r\n\r\n case \"get_rolling_symbols_success\":\r\n return { ...state, status: 'get_rolling_symbols_success', symbolItems: action.symbolItems, t: Date.now() };\r\n case \"get_rolling_symbols_fail\":\r\n return { ...state, status: 'get_rolling_symbols_fail', state: action.status };\r\n\r\n case \"get_auth_success\":\r\n return { ...state, status: 'get_auth_success', uri: action.uri, t: Date.now() };\r\n case \"get_auth_failed\":\r\n return { ...state, status: 'get_auth_failed', state: action.status, t: Date.now() };\r\n \r\n case \"empty\":\r\n return { ...state, status: '' };\r\n default:\r\n return state;\r\n }\r\n}","export default function trade(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_symbol_items_success\":\r\n return { ...state, status: 'get_symbol_items_success', symbolItems: action.symbolItems };\r\n case \"get_symbol_items_fail\":\r\n return { ...state, status: 'get_symbol_items_fail', state: action.status };\r\n\r\n case \"get_trade_result_success\":\r\n return { ...state, status: \"get_trade_result_success\", tradeResult: action.tradeResult, symbols: action.symbols };\r\n\r\n case \"get_trade_result_fail\":\r\n return { ...state, status: \"get_trade_result_fail\", state: action.status };\r\n\r\n case \"get_get_trade_result_search_success\":\r\n return { ...state, status: 'get_get_trade_result_search_success', tradeResult: action.tradeResult };\r\n case \"get_trade_result_search_fail\":\r\n return { ...state, status: 'get_trade_result_search_fail', state: action.status }\r\n\r\n case \"get_remove_trade_success\":\r\n return { ...state, status: \"get_remove_trade_success\", tradeResult: action.tradeResult, symbols: action.symbols };\r\n case \"get_remove_trade_fail\":\r\n return { ...state, status: \"get_remove_trade_fail\", state: action.status };\r\n\r\n case \"get_general_strategy_result_success\":\r\n return { ...state, status: \"get_general_strategy_result_success\", items: action.items, tradeDetails: action.tradeDetails };\r\n\r\n case \"get_general_strategy_result_fail\":\r\n return { ...state, status: \"get_general_strategy_result_fail\", state: action.status };\r\n\r\n case \"get_general_strategy_result_search_success\":\r\n return { ...state, status: \"get_general_strategy_result_search_success\", tradeDetails: action.tradeDetails };\r\n\r\n case \"get_general_strategy_result_search_fail\":\r\n return { ...state, status: \"get_general_strategy_result_search_fail\", state: action.status };\r\n\r\n case \"get_base_position_success\":\r\n return { ...state, status: 'get_base_position_success', basePosition: action.bp, share: action.share, t: Date.now() };\r\n case \"get_base_position_fail\":\r\n return { ...state, status: 'get_base_position_fail', state: action.status };\r\n\r\n case \"get_auth_success\":\r\n return { ...state, status: 'get_auth_success', uri: action.uri, t: Date.now() };\r\n case \"get_auth_failed\":\r\n return { ...state, status: 'get_auth_failed', state: action.status, t: Date.now() };\r\n\r\n case \"empty\":\r\n return { ...state, status: '' };\r\n default:\r\n return state;\r\n }\r\n}","export default function test(state = {}, action) {\r\n switch (action.type) {\r\n case \"clear_cache_success\":\r\n return { ...state, status: 'clear_cache_success' };\r\n case \"clear_cache_failed\":\r\n return { ...state, status: 'clear_cache_failed' };\r\n default:\r\n return state;\r\n }\r\n}","export default function charge(state = {}, action) {\r\n switch (action.type) {\r\n case \"service_success\":\r\n return { ...state, status: 'service_success', permission: action.p, isVip: action.Vp, vServices: action.vas, insyncExpiration: action.ie, crystalTraderExpiration: action.ce };\r\n break;\r\n case \"service_failed\":\r\n return { ...state, status: 'service_failed', t: Date.now() };\r\n break;\r\n\r\n case \"stripe_success\":\r\n return { ...state, status: 'stripe_success', isVip: action.Vp, vService: action.vas, customers: action.c, hisSubscription: action.scs };\r\n case \"stripe_failed\":\r\n return { ...state, status: 'stripe_failed', t: Date.now() };\r\n\r\n case \"pay_processing\":\r\n return { ...state, status: \"pay_processing\", stepStatus: action.stepStatus, stepIndex: action.stepIndex };\r\n\r\n case \"next_processing\":\r\n return { ...state, status: \"next_processing\", stepStatus: action.stepStatus, stepIndex: action.stepIndex };\r\n\r\n case \"payMethod_success\":\r\n return { ...state, status: 'payment_method_success', clientSecret: action.clientSecret, permission: action.p, coupons: action.c, account: action.a };\r\n case \"payMethod_failed\":\r\n return { ...state, status: 'payment_method_failed', permission: action.p, coupons: action.c, account: action.a };\r\n\r\n case \"payIntent_success\":\r\n return { ...state, status: 'payment_intent_success', permission: action.p, coupons: action.c, account: action.a };\r\n case \"payIntent_failed\":\r\n return { ...state, status: 'payment_intent_failed', account: action.a };\r\n\r\n case \"create_subscription_success\":\r\n return { ...state, status: 'create_subscription_success', subscription: action.sc, detailed: action.d, coupons: action.c, permission: action.p, months: action.m };\r\n case \"create_subscription_failed\":\r\n return { ...state, status: 'create_subscription_failed', coupons: action.c };\r\n\r\n case \"subscription_success\":\r\n return { ...state, status: 'subscription_success', subscription: action.sc, vService: action.vas, hisSubscription: action.scs };\r\n case \"subscription_failed\":\r\n return { ...state, status: 'subscription_failed', t: Date.now() };\r\n\r\n case \"cancel_subscription_success\":\r\n return { ...state, status: 'cancel_subscription_success', t: Date.now() };\r\n case \"cancel_subscription_failed\":\r\n return { ...state, status: 'cancel_subscription_failed', state: action.status };\r\n\r\n case \"subscription_processing_commit\":\r\n return { ...state, status: 'subscription_processing_commit', t: Date.now() };\r\n case \"update_subscription_success\":\r\n return { ...state, status: 'update_subscription_success', t: Date.now() };\r\n case \"update_subscription_failed\":\r\n return { ...state, status: 'update_subscription_failed', coupons: action.c };\r\n\r\n case \"retry_invoice_success\":\r\n return { ...state, status: 'retry_invoice_success', invoice: action.i };\r\n case \"retry_invoice_failed\":\r\n return { ...state, status: 'retry_invoice_failed', t: Date.now() };\r\n\r\n case \"email_captcha_commit\":\r\n return { ...state, status: 'email_captcha_commit', t: Date.now() };\r\n case \"email_captcha_success\":\r\n return { ...state, status: 'email_captcha_success', t: Date.now() };\r\n case \"email_captcha_failed\":\r\n return { ...state, status: 'email_captcha_failed', t: Date.now() };\r\n\r\n case \"check_email_commit\":\r\n return { ...state, status: 'check_email_commit', t: Date.now() };\r\n case \"check_email_success\":\r\n return { ...state, status: 'check_email_success', customers: action.c };\r\n case \"check_email_failed\":\r\n return { ...state, status: 'check_email_failed', t: Date.now() };\r\n\r\n case \"alipay_success\":\r\n return { ...state, status: 'alipay_success', clientSecret: action.clientSecret };\r\n case \"alipay_failed\":\r\n return { ...state, status: 'alipay_failed', t: Date.now() };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function customStock(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_symbol_items_success\":\r\n return { ...state, status: 'get_symbol_items_success', symbolItems: action.symbolItems };\r\n case \"get_symbol_items_fail\":\r\n return { ...state, status: 'get_symbol_items_fail', state: action.status };\r\n\r\n case \"get_region_sector_success\":\r\n return { ...state, status: 'get_region_sector_success', sectorItems: action.sectorItems };\r\n case \"get_region_sector_fail\":\r\n return { ...state, status: 'get_region_sector_fail', state: action.status };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function fail(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_captcha\":\r\n return { ...state, status: '' };\r\n\r\n case \"get_email_captcha\":\r\n return { ...state, status: '' };\r\n\r\n case \"login_commit\":\r\n return { ...state, status: '' };\r\n case \"login_success\":\r\n return { ...state, status: '' };\r\n case \"login_failed\":\r\n return { ...state, status: '' };\r\n\r\n case \"register_commit\":\r\n return { ...state, status: '' };\r\n case \"register_success\":\r\n return { ...state, status: '' };\r\n case \"register_failed\":\r\n return { ...state, status: '' };\r\n\r\n case \"forget_commit\":\r\n return { ...state, status: '' };\r\n case \"forget_success\":\r\n return { ...state, status: '' };\r\n case \"forget_failed\":\r\n return { ...state, status: '' };\r\n\r\n case \"jump\":\r\n return { ...state, status: '' };\r\n\r\n //å‘é€signal消æ¯\r\n case \"sendHubMessage\":\r\n return { ...state, status: '' };\r\n\r\n case \"non_user\":\r\n return { ...state, status: 'non_user' };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function filter(state = {}, action) {\r\n switch (action.type) {\r\n case \"luis_success\":\r\n return { ...state, status: \"luis_success\", sectors: action.sectors, stockCount: action.stockCount, luString: action.luString, symbols: action.symbols, filter: action.filter, sourceFilter: action.sourceFilter, filterGroup: action.filterGroup };\r\n case \"get_filter_sectors_fail\":\r\n return { ...state, status: \"get_filter_sectors_fail\", state: action.status }\r\n\r\n case \"save_formula_strategy_commit\":\r\n return { ...state, status: \"save_formula_commit\" };\r\n case \"get_save_formula_success\":\r\n return { ...state, status: \"save_formula_success\", editStrategy: action.editStrategy };\r\n case \"get_save_formula_fail\":\r\n return { ...state, status: \"save_formula_fail\", state: action.status, fail: action.error };\r\n\r\n case \"get_change_batch_success\":\r\n return { ...state, status: \"get_change_batch_success\", luString: action.luString };\r\n case \"get_change_batch_fail\":\r\n return { ...state, status: \"get_change_batch_fail\", state: action.status }\r\n\r\n case \"get_change_condition_success\":\r\n return { ...state, status: \"get_change_condition_success\", luString: action.luString, sentenceFormula: action.sentenceFormula };\r\n case \"get_change_condition_fail\":\r\n return { ...state, status: \"get_change_condition_fail\", state: action.status }\r\n\r\n case \"luis_analysis_commit\":\r\n return { ...state, status: \"analysis_commit\" };\r\n case \"get_luis_analysis_success\":\r\n return { ...state, status: \"analysis_success\", formulaString: action.formulaString };\r\n case \"get_luis_analysis_fail\":\r\n return { ...state, status: \"analysis_fail\", state: action.status };\r\n \r\n case \"customStock_commit\":\r\n return { ...state, status: \"customStock_commit\" };\r\n case \"update_customStock_success\":\r\n return { ...state, status: \"update_customStock_success\", customGroup: action.customGroup, symbolList: action.symbolList };\r\n case \"update_customStock_fail\":\r\n return { ...state, status: \"update_customStock_fail\", state: action.status };\r\n\r\n case \"get_stock_count_success\":\r\n return { ...state, status: \"get_stock_count_success\", stockCount: action.stockCount };\r\n case \"get_stock_count_fail\":\r\n return { ...state, status: \"get_stock_count_fail\", state: action.status };\r\n\r\n case \"clear_filter_string\":\r\n return { ...state, status: \"clear_filter_string\" };\r\n\r\n case \"use_formula\":\r\n return { ...state, status: \"use_formula\", useFormulaData: action.useFormulaData };\r\n\r\n case \"empty\":\r\n return { ...state, status: '' };\r\n\r\n case \"get_filter_items_success\":\r\n return { ...state, status: \"get_filter_items_success\", filters: action.filters };\r\n case \"get_filter_items_fail\":\r\n return { ...state, status: \"get_filter_items_fail\", state: action.status };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function portfolio(state = { }, action) {\r\n switch (action.type) {\r\n case \"info_success\":\r\n return { ...state, status: \"info_success\", permission: action.permission };\r\n case \"info_fail\":\r\n return { ...state, status: \"info_fail\", state: action.status };\r\n\r\n case \"start_portfolio_success\":\r\n return { ...state, status: \"start_portfolio_success\", portfolioId: action.portfolioId };\r\n case \"start_portfolio_fail\":\r\n return { ...state, status: \"start_portfolio_fail\", state: action.status };\r\n\r\n case \"get_portfolio_items_success\":\r\n return { ...state, status: \"get_portfolio_items_success\", portfolioItems: action.portfolioItems };\r\n case \"get_portfolio_items_fail\":\r\n return { ...state, status: \"get_portfolio_items_fail\", state: action.status };\r\n\r\n case \"remove_portfolio_success\":\r\n return { ...state, status: \"remove_portfolio_success\" };\r\n case \"remove_portfolio_fail\":\r\n return { ...state, status: \"remove_portfolio_fail\", state: action.status };\r\n\r\n case \"portfolio_opt_items_success\":\r\n return { ...state, status: \"portfolio_opt_items_success\", portfolioItems: action.portfolioItems };\r\n case \"portfolio_opt_items_fail\":\r\n return { ...state, status: \"portfolio_opt_items_fail\", state: action.status };\r\n\r\n case \"get_portfolio_opt_items_success\":\r\n return { ...state, status: \"get_portfolio_opt_items_success\", portfolioItems: action.portfolioItems };\r\n case \"get_portfolio_opt_items_fail\":\r\n return { ...state, status: \"get_portfolio_opt_items_fail\", state: action.status };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function demo(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_strategy_items_success\":\r\n return { ...state, status: 'get_strategy_items_success', strategies: action.strategies, strategyTBloginMaps: action.strategyTBloginMaps, tradeAccounts: action.tradeAccounts, t: Date.now() };\r\n\r\n case \"get_strategy_items_failed\":\r\n return { ...state, status: 'get_strategy_items_failed', state: action.status, t: Date.now() };\r\n\r\n case \"get_strategy_backtest_result_success\":\r\n return { ...state, status: 'get_strategy_backtest_result_success', statistics: action.statistics, t: Date.now() };\r\n\r\n case \"get_strategy_backtest_result_failed\":\r\n return { ...state, status: 'get_strategy_backtest_result_failed', state: action.status, t: Date.now() }; \r\n\r\n default:\r\n return state;\r\n }\r\n}","export default function tdAmeritradePage(state = {}, action) {\r\n switch (action.type) {\r\n case \"get_code_success\":\r\n return { ...state, status: 'get_code_success' };\r\n case \"get_code_failed\":\r\n return { ...state, status: 'get_code_failed' };\r\n default:\r\n return state;\r\n }\r\n}","//末尾ä¸è¦å¸¦â€˜/’\r\n\r\nimport store from './store'\r\nimport history from './history'\r\n\r\nimport 'whatwg-fetch'\r\n\r\nconst host='api'\r\n\r\n//在默认基础上,定制化生æˆheaderï¼Œä¸»è¦æ˜¯æå–客户端token\r\nfunction requestHeader(header = null) {\r\n // return authorization header with jwt token\r\n const token = store.getState().member.token;\r\n\r\n let customHeader = { 'Accept': '*/*', 'Content-Type': 'application/json;charset=utf-8' }\r\n if (header !== null)\r\n {\r\n\t\tcustomHeader = header\r\n\t}\r\n\t\r\n if (token) {\r\n return { ...customHeader, 'Authorization': 'Token ' + token };\r\n } else {\r\n return { ...customHeader, 'Authorization': 'Token ' + \"ForTest*\" };\r\n }\r\n}\r\n\r\n//使用type指定图片æœåŠ¡å™¨ã€æ–‡ä»¶æœåС噍ç‰ï¼Œç„¶åŽåЍæ€ç”Ÿæˆè¯·æ±‚路径\r\nfunction requestURL(link, type = null) {\r\n\treturn host + link\r\n}\r\n\r\nfunction getRows(url) {\r\n /*\r\n if(refresh==null){\r\n let data = JSON.parse(sessionStorage.getItem(url));\r\n if (data && data.length>0){return Promise.resolve(data);}\r\n }\r\n */\r\n const requestOptions = {\r\n method: 'GET',\r\n headers: requestHeader(),\r\n };\r\n \r\n return fetch(requestURL(url), requestOptions).then(handleResponse).catch(handleErrorResponse);\r\n}\r\n\r\nfunction get(url, header = null) {\r\n if(url.indexOf('?') > -1){\r\n url += '&t=' + Math.random();\r\n } else {\r\n url += '?t=' + Math.random();\r\n }\r\n\r\n url = encodeURI(url);\r\n if (url.substr(0, 4) === \"http\") {\r\n return fetch(url, { cache: 'no-cache' }).then(handleResponse).then(data => {\r\n return data\r\n }).catch(handleErrorResponse);\r\n }\r\n\tconst requestOptions = {\r\n\t\tmethod: 'GET',\r\n headers: requestHeader(header),\r\n cache: 'no-cache'\r\n };\r\n \r\n\treturn fetch(requestURL(url), requestOptions).then(handleResponse).catch(handleErrorResponse).then(data => {\r\n return data\r\n }, e => {\r\n console.log(e);\r\n });\r\n}\r\n\r\nfunction getRow(url) {\r\n \r\n/* if(!refresh){\r\n let data = JSON.parse(sessionStorage.getItem(url));\r\n if (data){return Promise.resolve(data);}\r\n } */\r\n const requestOptions = {\r\n method: 'GET',\r\n headers: requestHeader(),\r\n };\r\n\r\n return fetch(requestURL(), requestOptions)\r\n .then(handleResponse).then(\r\n data=>\r\n {\r\n // sessionStorage.setItem(url, JSON.stringify(data))\r\n return data}\r\n ).catch(handleErrorResponse);\r\n}\r\n\r\nfunction postFile(url, file, progressListenner = null, loadedListener = null) {\r\n let formData = new FormData();\r\n formData.append(\"file\", file);\r\n //formData.append('username', '111111');\r\n \r\n\tvar xhr = new XMLHttpRequest();\r\n\t//设置xhr请求的超时时间\r\n\t// xhr.timeout = 6000000000;\r\n\t//设置å“åº”è¿”å›žçš„æ•°æ®æ ¼å¼\r\n xhr.responseType = \"text\";\r\n\r\n\t//创建一个 post 请求,采用异æ¥\r\n xhr.open('POST', requestURL(url), true);\r\n\r\n\t//注册相关事件回调处ç†å‡½æ•°\r\n\txhr.onload = loadedListener;\r\n\txhr.ontimeout = function(e) { console.log(\"time out\") };\r\n\txhr.onerror = function(e) { console.log(\"error\") };\r\n\txhr.upload.onprogress = progressListenner\r\n\t\r\n\t//å‘逿•°æ®\r\n\txhr.send(formData);\r\n\treturn\r\n}\r\n\r\nfunction post(url, data, header = null) {\r\n let requestOptions = {\r\n method: 'POST',\r\n headers: requestHeader(header),\r\n body: JSON.stringify(data),\r\n cache: 'no-cache'\r\n };\r\n \r\n\treturn fetch(requestURL(url), requestOptions).then(handleResponse).catch(handleErrorResponse);\r\n}\r\n\r\nfunction put(url, data, header = null) {\r\n const requestOptions = {\r\n method: 'PUT',\r\n headers: requestHeader(header),\r\n body: JSON.stringify(data)\r\n };\r\n return fetch(requestURL(url), requestOptions).then(handleResponse).catch(handleErrorResponse);\r\n}\r\n\r\nfunction patch(url, data) {\r\n const requestOptions = {\r\n method: 'PATCH',\r\n headers: requestHeader(),\r\n body: JSON.stringify(data)\r\n };\r\n // if(url[url.length-1]!='/')url=url+'/';\r\n return fetch(requestURL(url), requestOptions)\r\n .then(handleResponse).catch(handleErrorResponse);\r\n}\r\n\r\nfunction _delete(url, data) {\r\n const requestOptions = {\r\n method: 'DELETE',\r\n headers: requestHeader(),\r\n body: JSON.stringify(data)\r\n };\r\n return fetch(requestURL(url), requestOptions)\r\n .then(handleResponse).catch(handleErrorResponse);\r\n}\r\n\r\nfunction handleResponse(response) {\r\n if (response.status === 401) {\r\n store.dispatch({ type: \"user_logout\" })\r\n history.replace('/users/login')\r\n return\r\n }\r\n if (!response.ok) {\r\n return Promise.reject(response.json());\r\n }\r\n if (response.status === 204) { return Promise.resolve(response.statusText); }\r\n\r\n return response.json();\r\n}\r\n\r\nfunction handleErrorResponse(response) {\r\n if (response.status === 401) {\r\n store.dispatch({ type: \"user_logout\" })\r\n history.replace('/users/login')\r\n return\r\n }\r\n return response.json();\r\n}\r\n\r\nexport { host, requestHeader, getRows, getRow, get, post, postFile, _delete as delete_, put, patch }","import { put, call, takeLatest, takeEvery } from 'redux-saga/effects'\r\nimport { post, get } from '../../helpers/server'\r\n\r\nfunction* sendLoginCaptcha(action) {\r\n try {\r\n yield put({ type: 'captcha_commit' });\r\n const resp = yield call(post, \"/captcha/login\", action.payload);\r\n yield put({ type: \"get_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendEmailCaptcha(action) {\r\n try {\r\n yield put({ type: 'email_captcha_commit' });\r\n const resp = yield call(post, \"/email/captcha\", action.payload);\r\n yield put({ type: \"get_email_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_email_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendPhoneRegisterCaptcha(action) {\r\n try {\r\n yield put({ type: 'captcha_commit' });\r\n const resp = yield call(post, \"/captcha/register\", action.payload);\r\n yield put({ type: \"get_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendEmailRegisterCaptcha(action) {\r\n try {\r\n yield put({ type: 'captcha_commit' });\r\n const resp = yield call(post, \"/captcha/register\", action.payload);\r\n yield put({ type: \"get_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendForgetCaptcha(action) {\r\n try {\r\n yield put({ type: 'captcha_commit' });\r\n const resp = yield call(post, \"/captcha/forget\", action.payload);\r\n yield put({ type: \"get_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Login(action) {\r\n try {\r\n yield put({ type: 'login_commit' });\r\n const resp = yield call(post, \"/users/login\", action.payload);\r\n if (resp && resp.status === 1) {\r\n sessionStorage.setItem(\"auth\", JSON.stringify(resp.user));\r\n sessionStorage.setItem(\"ValueAddedServiceCache\", JSON.stringify(resp.vs));\r\n if (resp.cs !== null) {\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(resp.cs));\r\n }\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n //sessionStorage.setItem(\"LuisStringCache\", JSON.stringify(resp.luisString));\r\n //sessionStorage.setItem(\"SymbolItemsCache\", JSON.stringify(resp.symbolItems));\r\n //sessionStorage.setItem(\"ConceptsCache\", JSON.stringify(resp.concepts));\r\n //sessionStorage.setItem(\"ConceptExplanationsCache\", JSON.stringify(resp.conceptExplanations));\r\n \r\n if (resp.fs !== null) {\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(resp.fs));\r\n }\r\n \r\n if (resp.ff !== null) {\r\n sessionStorage.setItem(\"FilterFunctionsCache\", JSON.stringify(resp.ff));\r\n }\r\n if (resp.coupon !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(resp.coupon));\r\n }\r\n\r\n if (resp.fas != null) {\r\n sessionStorage.setItem(\"FilterAlertsCache\", JSON.stringify(resp.fas));\r\n if (resp.fasc != null) {\r\n sessionStorage.setItem(\"FilterAlertCountsCache\", JSON.stringify(resp.fasc));\r\n }\r\n }\r\n \r\n if (resp.tn === null || resp.tn === undefined) {\r\n resp.tn = 0;\r\n }\r\n sessionStorage.setItem(\"TriggerNumberCache\", resp.tn);\r\n\r\n localStorage.setItem(\"local_user\", resp.user.username );\r\n localStorage.removeItem(\"auth\");\r\n if (action.payload.RememberMe) {\r\n localStorage.setItem(\"auth\", JSON.stringify({ username: resp.user.username, password: resp.user.password }));\r\n }\r\n\r\n yield put({ type: 'login_success', user: resp.user, token: resp.user.token });\r\n } else {\r\n yield put({ type: 'login_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"login_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Register(action) {\r\n try {\r\n yield put({ type: 'register_commit' });\r\n const resp = yield call(post, \"/users/register\", action.payload);\r\n if (resp && resp.status === 1) {\r\n sessionStorage.setItem(\"auth\", JSON.stringify(resp.user));\r\n sessionStorage.setItem(\"ValueAddedServiceCache\", JSON.stringify(resp.vs));\r\n if (resp.cs !== null) {\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(resp.cs));\r\n }\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n //sessionStorage.setItem(\"LuisStringCache\", JSON.stringify(resp.luisString));\r\n //sessionStorage.setItem(\"SymbolItemsCache\", JSON.stringify(resp.symbolItems));\r\n //sessionStorage.setItem(\"ConceptsCache\", JSON.stringify(resp.concepts));\r\n //sessionStorage.setItem(\"ConceptExplanationsCache\", JSON.stringify(resp.conceptExplanations));\r\n \r\n if (resp.fs !== null) {\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(resp.fs));\r\n }\r\n \r\n if (resp.ff !== null) {\r\n sessionStorage.setItem(\"FilterFunctionsCache\", JSON.stringify(resp.ff));\r\n }\r\n if (resp.coupon !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(resp.coupon));\r\n }\r\n\r\n if (resp.tn === null || resp.tn === undefined) {\r\n resp.tn = 0;\r\n }\r\n sessionStorage.setItem(\"TriggerNumberCache\", resp.tn);\r\n\r\n localStorage.setItem(\"local_user\", resp.user.username);\r\n localStorage.removeItem(\"auth\");\r\n\r\n yield put({ type: 'register_success', user: resp.user, token: resp.user.token });\r\n } else {\r\n yield put({ type: 'register_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"register_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Forget(action) {\r\n try {\r\n yield put({ type: 'forget_commit' });\r\n const resp = yield call(post, \"/users/forget\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'forget_success' });\r\n } else {\r\n yield put({ type: 'forget_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"forget_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getPermission(action) {\r\n try {\r\n const resp = yield call(get, \"/member/permission?u=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_permission_success', permission: resp.p, isVip: resp.Vp });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_permission_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_permission_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* payment(action) {\r\n try {\r\n yield put({ type: \"payment_commit\" });\r\n const resp = yield call(post, \"/member/payment\", action.payload);\r\n if (resp && resp.status === 1) {\r\n if (resp.coupon !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(resp.coupon));\r\n }\r\n yield put({ type: 'payment_success', permission: resp.permission });\r\n } else {\r\n if (resp.status === 3) {\r\n if (resp.coupon !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(resp.coupon));\r\n }\r\n }\r\n if (resp.status === 10) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'payment_failed', status: resp.status, permission: resp.permission });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"payment_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateUser(action) {\r\n try {\r\n const resp = yield call(post, \"/member/updateUser\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_user_success', user: resp.user });\r\n } else {\r\n if (resp.status === 3) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_user_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_user_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getAccount(action) {\r\n try {\r\n const resp = yield call(post, \"/member/account\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_account_success', accounts: resp.accounts });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_account_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_account_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getSubscription(action) {\r\n try {\r\n const resp = yield call(post, \"/member/subscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_subscription_success', sc: resp.sc, sd: resp.sd });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_subscription_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_subscription_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* cancelSubscription(action) {\r\n try {\r\n const resp = yield call(post, \"/billing/cancelSubscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'cancel_subscription_success', i: action.payload.i });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'cancel_subscription_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"cancel_subscription_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getMessage(action) {\r\n try {\r\n const resp = yield call(get, \"/member/message?userName=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_message_success', messages: resp.messages });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_message_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_message_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendMessage(action) {\r\n try {\r\n const resp = yield call(post, \"/member/sendMessage\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'send_message_success' });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'send_message_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"send_message_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updatePassword(action) {\r\n try {\r\n yield put({ type: \"updatePassword_commit\" });\r\n const resp = yield call(post, \"/member/updatePassword\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_password_success', user: resp.user });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_password_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_password_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* phoneCaptcha(action) {\r\n try {\r\n const resp = yield call(post, \"/captcha/bind\", action.payload);\r\n yield put({ type: \"get_phone_captcha\", status: resp.status });\r\n } catch (e) {\r\n yield put({ type: \"get_phone_captcha\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* bindPhone(action) {\r\n try {\r\n yield put({ type: \"bindPhone_commit\" });\r\n const resp = yield call(post, \"/member/bindPhone\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'bind_phone_success', user: resp.user });\r\n } else {\r\n if (resp.status === 3) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'bind_phone_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"bind_phone_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* coupon(action) {\r\n try {\r\n const resp = yield call(get, \"/member/coupon?userName=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_coupon_success', coupon: resp.coupon });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_coupon_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_coupon_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Logout(action) {\r\n try {\r\n const resp = yield call(post, \"/users/logout\", action.payload);\r\n if (resp && resp.status === 1) {\r\n sessionStorage.clear();\r\n \r\n localStorage.removeItem(\"local_user\");\r\n\r\n yield put({ type: 'logout_success' });\r\n } else {\r\n yield put({ type: 'logout_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"logout_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendHubMessage(action) {\r\n try {\r\n yield put({ type: 'sendHubMessage', data: action.payload });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction* member() {\r\n yield takeLatest('action_login_captcha', sendLoginCaptcha);\r\n yield takeLatest('action_phone_register_captcha', sendPhoneRegisterCaptcha);\r\n yield takeLatest('action_email_register_captcha', sendEmailRegisterCaptcha);\r\n yield takeLatest('action_forget_captcha', sendForgetCaptcha);\r\n\r\n yield takeEvery('action_login', Login);\r\n yield takeEvery('action_register', Register);\r\n yield takeEvery('action_forget', Forget);\r\n\r\n \r\n yield takeEvery('action_email_captcha', sendEmailCaptcha);\r\n\r\n yield takeLatest('action_get_permission', getPermission);\r\n\r\n yield takeLatest('action_payment', payment);\r\n \r\n yield takeLatest('action_update_user', updateUser);\r\n yield takeLatest('action_get_account', getAccount);\r\n yield takeLatest('action_get_message', getMessage);\r\n\r\n yield takeLatest('action_get_subscription', getSubscription);\r\n yield takeLatest('action_cancel_subscription', cancelSubscription);\r\n \r\n\r\n yield takeLatest('action_send_message', sendMessage);\r\n\r\n yield takeLatest('action_update_password', updatePassword);\r\n\r\n yield takeLatest('action_phone_captcha', phoneCaptcha);\r\n\r\n yield takeLatest('action_bind_phone', bindPhone);\r\n\r\n yield takeLatest('action_get_coupon', coupon);\r\n\r\n yield takeLatest('action_logout', Logout);\r\n\r\n yield takeLatest('action_send_hub_message', sendHubMessage);\r\n}\r\n\r\nexport default member;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getStockCount(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/getStockCount?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_stock_count_success\", stockCount: resp.sc });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_stock_count_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_stock_count_fail\", status: 0 });\r\n }\r\n}\r\nfunction* getConceptSectors(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/concept?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_concept_success\", sectors: resp.s, stockCount: resp.sc, concepts: resp.c, conceptExplanations: resp.ce, permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_concept_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_concept_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* scenStrategy(action) {\r\n try {\r\n yield put({ type: \"scan_strategy_commit\" });\r\n const resp = yield call(post, \"/filter/ScanFilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_scan_success\", scanAlert: resp.scanAlert, filter: resp.filter, permission: resp.permission, lastTimes: resp.lastTimes });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_scan_fail\", status: resp.status, error: resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_scan_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* saveStrategy(action) {\r\n try {\r\n yield put({ type: \"save_strategy_commit\" });\r\n const resp = yield call(post, \"/filter/SaveFilter\", action.payload);\r\n if (resp.status === 1) {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_save_success\", editStrategy: resp.editStrategy });\r\n } else {\r\n yield put({ type: \"get_save_fail\", status: resp.status, error: resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_save_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* addResultCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/Add\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateResultCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/update\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_stock_count', getStockCount);\r\n \r\n yield takeLatest('action_get_concept_sectors', getConceptSectors);\r\n\r\n yield takeLatest('action_scen_strategy', scenStrategy);\r\n yield takeLatest('action_save_strategy', saveStrategy);\r\n\r\n yield takeLatest('action_add_result_custom_stock', addResultCustomStock);\r\n yield takeLatest('action_update_result_custom_stock', updateResultCustomStock);\r\n}\r\n\r\nexport default Effect;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getFormulaSectors(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/formula?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_formula_success\", sectors: resp.s, stockCount: resp.sc, permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_formula_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_formula_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* scanStrategy(action) {\r\n try {\r\n yield put({ type: \"scan_formula_strategy_commit\" });\r\n const resp = yield call(post, \"/filter/ScanFilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_scan_formula_success\", scanAlert: resp.scanAlert, filter: resp.filter, permission: resp.permission, lastTimes: resp.lastTimes });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_scan_formula_fail\", status: resp.status, error: resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_scan_formula_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* saveStrategy(action) {\r\n try {\r\n yield put({ type: \"save_formula_strategy_commit\" });\r\n const resp = yield call(post, \"/filter/SaveFilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_save_formula_success\", editStrategy: resp.editStrategy });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_save_formula_fail\", status: resp.status, error: resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_save_formula_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getLuisSectors(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/luis?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n if (resp.status === 1) {\r\n if (resp.ff !== undefined && resp.ff !== null) {\r\n sessionStorage.setItem(\"FilterFunctionsCache\", JSON.stringify(resp.ff));\r\n }\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n yield put({ type: \"get_luis_success\", sectors: resp.s, luString: resp.ls, stockCount: resp.sc, permission: resp.p, symbols: resp.ss });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_luis_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_luis_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getScanSectors(action) {\r\n try {\r\n //const resp = yield call(get, \"/filter/scanSectors?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n const resp = yield call(post, \"/filter/scanSectors\", action.payload);\r\n if (resp.status === 1) {\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n yield put({ type: \"get_scan_sectors_success\", sectors: resp.s, stockCount: resp.sc, naturalLangFormulas: resp.nlf });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_scan_sectors_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_scan_sectors_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* setGPTsChatMessage(action) {\r\n try {\r\n const resp = yield call(post, \"/filter/setGPTsChatMessage\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"set_gpts_message_success\", status: resp.status, id: resp.id });\r\n } else {\r\n if (resp.status === 5) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"set_gpts_message_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"set_gpts_message_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* ChangeBatch(action) {\r\n try {\r\n var params = \"?u=\" + action.payload.UserId;\r\n params += \"&kw=\" + action.payload.keywords;\r\n params += \"<K=\" + action.payload.luisTabsKey;\r\n\r\n const resp = yield call(get, \"/formula/changeBatchLuString\" + params);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_change_batch_success\", luString: resp.ls });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_change_batch_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_change_batch_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* changeCondition(action) {\r\n try {\r\n var params = \"?u=\" + action.payload.UserId;\r\n params += \"&kw=\" + action.payload.keywords;\r\n params += \"<K=\" + action.payload.luisTabsKey;\r\n\r\n const resp = yield call(get, \"/formula/lustring\" + params);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_change_condition_success\", luString: resp.ls, sentenceFormula: resp.sf });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_change_condition_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_change_condition_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* luisAnalysis(action) {\r\n try {\r\n yield put({ type: \"luis_analysis_commit\" });\r\n const resp = yield call(post, \"/formula/lu\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_luis_analysis_success\", formulaString: resp.formulaString });\r\n } else {\r\n if (resp.status === 5) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_luis_analysis_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_luis_analysis_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* addFormulaCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/Add\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateFormulaCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/update\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* sendEmail(action) {\r\n try {\r\n const resp = yield call(post, \"/scan/sendEmail\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'send_email_success' });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'send_email_fail' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'send_email_fail' });\r\n }\r\n}\r\n\r\nfunction* clearFilterString() {\r\n yield put({ type: 'clear_filter_string' });\r\n}\r\n\r\nfunction* useFormula(action) {\r\n yield put({ type: 'use_formula', useFormulaData: action.payload });\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_formula_sectors', getFormulaSectors);\r\n\r\n yield takeLatest('action_scan_formula_strategy', scanStrategy);\r\n yield takeLatest('action_save_formula_strategy', saveStrategy);\r\n\r\n yield takeLatest('action_get_luis_sectors', getLuisSectors);\r\n yield takeLatest('action_change_batch', ChangeBatch);\r\n yield takeLatest('action_change_condition', changeCondition);\r\n\r\n yield takeLatest('action_luis_analysis', luisAnalysis);\r\n\r\n yield takeLatest('action_add_formula_custom_stock', addFormulaCustomStock);\r\n yield takeLatest('action_update_formula_custom_stock', updateFormulaCustomStock);\r\n\r\n yield takeLatest('action_clear_filterString', clearFilterString);\r\n yield takeLatest('action_Use_formula', useFormula);\r\n\r\n yield takeLatest('action_get_scan_sectors', getScanSectors);\r\n yield takeLatest('action_set_gpts_chat_message', setGPTsChatMessage);\r\n\r\n yield takeLatest('action_send_email', sendEmail);\r\n \r\n}\r\n\r\nexport default Effect;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { get, post } from '../../helpers/server'\r\n\r\nfunction* getCustomStock(action) {\r\n try {\r\n const resp = yield call(get, \"/customStock/info?u=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n yield put({ type: 'customStock_success', symbolList: resp.st, currGroupId: resp.gi });\r\n } else {\r\n yield put({ type: 'customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getSymbolItems(action) {\r\n try {\r\n const resp = yield call(get, \"/customStock/GetSymbolItems?u=\" + action.payload.UserId + \"&kw=\" + action.payload.keywords);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_symbol_items_success', symbolItems: resp.st });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_symbol_items_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_symbol_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getCustomStockTick(action) {\r\n try {\r\n const resp = yield call(get, \"/customStock/tick?u=\" + action.payload.UserId + \"&s=\" + action.payload.SymbolList);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'customStockTick_success', symbolList: resp.st });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'customStockTick_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"customStockTick_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* addCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/Add\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'add_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'add_customStock_fail', status: resp.status, fail: resp.fail });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'add_customStock_fail', status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/update\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeCustomStock(action) {\r\n try {\r\n const resp = yield call(post, \"/customStock/remove\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'remove_customStock_success', customStock: resp.items, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'remove_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"remove_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* renameCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/rename\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* customStock() {\r\n yield takeLatest('action_get_custom_stock', getCustomStock);\r\n\r\n yield takeLatest('action_get_symbol_items', getSymbolItems);\r\n yield takeLatest('action_get_custom_stock_tick', getCustomStockTick);\r\n\r\n yield takeLatest('action_add_custom_stock', addCustomStock);\r\n yield takeLatest('action_update_custom_stock', updateCustomStock);\r\n yield takeLatest('action_remove_custom_stock', removeCustomStock);\r\n\r\n yield takeLatest('action_rename_custom_stock', renameCustomStock);\r\n}\r\n\r\nexport default customStock;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { post, get } from '../../helpers/server'\r\n\r\nfunction* getStrategy(action) {\r\n try {\r\n const resp = yield call(get, \"/strategy/items?userName=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'strategy_success', items: resp.items });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'strategy_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'strategy_fail', status: 0 });\r\n }\r\n}\r\n\r\nfunction* renameStrategy(action) {\r\n try {\r\n yield put({ type: \"strategy_commit\" });\r\n const resp = yield call(post, \"/strategy/rename\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"rename_strategy_success\" });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"rename_strategy_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'rename_strategy_fail', status: 0 });\r\n }\r\n}\r\n\r\nfunction* copyStrategy(action) {\r\n try {\r\n yield put({ type: \"strategy_commit\" });\r\n const resp = yield call(post, \"/filter/saveFilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"copy_strategy_success\", editStrategy: resp.editStrategy });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"copy_strategy_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'copy_strategy_fail', status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeStrategy(action) {\r\n try {\r\n const resp = yield call(get, \"/strategy/remove?userName=\" + action.payload.UserId + \"&StrategyId=\" + action.payload.strategyId + \"&filterId=\" + action.payload.filterId);\r\n if (resp && resp.status >= 1) {\r\n yield put({ type: 'remove_success', strategyId: action.payload.strategyId });\r\n } else {\r\n if (resp.status === -1) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'remove_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'remove_fail', status: 0 });\r\n }\r\n}\r\n\r\nfunction* auth() {\r\n yield takeLatest('action_get_strategy', getStrategy);\r\n\r\n yield takeLatest('action_rename_strategy', renameStrategy);\r\n yield takeLatest('action_copy_strategy', copyStrategy);\r\n yield takeLatest('action_remove_strategy', removeStrategy);\r\n}\r\n\r\nexport default auth;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getoption(action) {\r\n try {\r\n const resp = yield call(get, \"/option/getOptions?u=\" + action.payload.UserId);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_option_success\", underlyingList: resp.ul, permission: resp.p })\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_option_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_option_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* optionScan(action) {\r\n try {\r\n yield put({ type: 'option_scan_commit', data: { message: \"ç–略扫æä¸...\" } });\r\n const resp = yield call(post, \"/option/scan\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"option_scan_success\", scanResponse: resp.sr, permission: resp.p, lastTimes: resp.lt });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"option_scan_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"option_scan_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_option', getoption);\r\n yield takeLatest('action_option_scan', optionScan);\r\n}\r\n\r\nexport default Effect;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { get, post } from '../../helpers/server'\r\n\r\nfunction* getStockTick(action) {\r\n try {\r\n const resp = yield call(get, \"/customStock/tick?u=\" + action.payload.UserId + \"&s=\" + action.payload.SymbolList);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'StockTick_success', symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'StockTick_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"StockTick_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getHawkeyeInfo(action) {\r\n try {\r\n const resp = yield call(get, \"/hawkeye/info?u=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_hawkeye_info_success', nd: resp.nd, p: resp.p, ls: resp.ls, ss: resp.ss });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_hawkeye_info_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_hawkeye_info_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getHawkeyeItems(action) {\r\n try {\r\n const resp = yield call(get, \"/hawkeye/items?u=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_hawkeye_success', items: resp.items });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_hawkeye_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_hawkeye_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* closeHawkeye(action) {\r\n try {\r\n const resp = yield call(get, \"/hawkeye/close?u=\" + action.payload.UserId + \"&hs=\" + action.payload.hawkeyeId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'close_hawkeye_success', hawkeyeId: resp.hs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'close_hawkeye_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"close_hawkeye_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeHawkeye(action) {\r\n try {\r\n const resp = yield call(get, \"/hawkeye/remove?u=\" + action.payload.UserId + \"&hs=\" + action.payload.hawkeyeId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'remove_hawkeye_success', hawkeyeId: resp.hs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'remove_hawkeye_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"remove_hawkeye_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getHawkeyeBase(action) {\r\n yield put({ type: \"get_hawkeye_base\", data: action.payload.data });\r\n}\r\n\r\nfunction* hawkeyeChangeBatch(action) {\r\n try {\r\n var params = \"?u=\" + action.payload.UserId;\r\n params += \"&kw=\" + action.payload.keywords;\r\n params += \"<K=\" + action.payload.luisTabsKey;\r\n\r\n const resp = yield call(get, \"/hawkeye/changeBatchLuString\" + params);\r\n if (resp.status === 1) {\r\n yield put({ type: \"hawkeye_change_batch_success\", luString: resp.ls });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"hawkeye_change_batch_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"hawkeye_change_batch_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* hawkeyeChangeCondition(action) {\r\n try {\r\n var params = \"?u=\" + action.payload.UserId;\r\n params += \"&kw=\" + action.payload.keywords;\r\n params += \"<K=\" + action.payload.luisTabsKey;\r\n\r\n const resp = yield call(get, \"/hawkeye/lustring\" + params);\r\n if (resp.status === 1) {\r\n yield put({ type: \"hawkeye_change_condition_success\", luString: resp.ls, sentenceFormula: resp.sf });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"hawkeye_change_condition_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"hawkeye_change_condition_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* useFormulaHawkeye(action) {\r\n yield put({ type: \"Use_formula_hawkeye\", isLuisAnalysis: action.payload.isLuisAnalysis, formulaName: action.payload.formulaName, formulaString: action.payload.formulaString, vernacularKey: action.payload.vernacularKey });\r\n}\r\n\r\nfunction* hawkeye() {\r\n yield takeLatest('action_get_stock_tick', getStockTick);\r\n\r\n yield takeLatest('action_get_hawkeye_info', getHawkeyeInfo);\r\n yield takeLatest('action_get_hawkeye_items', getHawkeyeItems);\r\n yield takeLatest('action_close_hawkeye', closeHawkeye);\r\n yield takeLatest('action_remove_hawkeye', removeHawkeye);\r\n\r\n yield takeLatest('action_get_hawkeye_base', getHawkeyeBase);\r\n\r\n yield takeLatest('action_hawkeye_change_batch', hawkeyeChangeBatch);\r\n yield takeLatest('action_hawkeye_change_condition', hawkeyeChangeCondition);\r\n\r\n yield takeLatest('action_Use_formula_hawkeye', useFormulaHawkeye);\r\n}\r\n\r\nexport default hawkeye;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getFactorSectors(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/factor?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_filters_success\", filter: resp.f, currDate: resp.cd, sectors: resp.s, stockCount: resp.sc, permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_factor_filters_failed\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_factor_filters_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* factorfilterScan(action) {\r\n try {\r\n yield put({ type: \"scan_factorFilter_commit\" });\r\n const resp = yield call(post, \"/factor/scanfilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"scan_factorFilter_success\", scanAlert: resp.scanAlert, filter: resp.filter, permission: resp.permission, lastTimes: resp.lastTimes });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"scan_factorFilter_failed\", status: resp.status, error: resp.error === undefined ? '' : resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"scan_factorFilter_failed\", status: 0 });\r\n }\r\n}\r\n\r\n// 生æˆå› åæ–‡ä»¶\r\nfunction* generateFactorFile(action) {\r\n try {\r\n yield put({ type: \"factor_generate_commit\" });\r\n const resp = yield call(post, \"/factor/generator\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"factor_generate_ready\", taskName: resp.taskName });\r\n } else {\r\n if (resp.status === 3) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"factor_generate_error\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"factor_generate_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* queryGenerateFactorFileStatus(action) {\r\n try {\r\n const resp = yield call(get, \"/factor/query?taskName=\" + action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"factor_generate_finished\", permission: resp.permission, lastTimes: resp.lastTimes });\r\n } else if (resp.status === 2) {\r\n yield put({ type: \"factor_generate_working\" });\r\n } else {\r\n if (resp.status === 3) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"factor_generate_error\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"factor_generate_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getFactorFiles(action) {\r\n try {\r\n const resp = yield call(get, \"/factor/files?u=\" + action.payload.UserId);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_files_success\", factorFiles: resp.ff });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_factor_files_failed\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_factor_files_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* uploadMigrate(action) {\r\n try {\r\n const resp = yield call(post, \"/factor/migrate\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"file_migrate_finished\", factorFile: resp.factorFile });\r\n } else {\r\n yield put({ type: \"file_migrate_error\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"file_migrate_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeFile(action) {\r\n try {\r\n const resp = yield call(post, \"/factor/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"file_remove_finished\", fileName: resp.fileName })\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"file_remove_error\", status: resp.status })\r\n }\r\n } catch (e) {\r\n yield put({ type: \"file_remove_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* startAnalyze(action) {\r\n try {\r\n yield put({ type: \"factor_analyze_commit\" })\r\n const resp = yield call(post, \"/factor/startAnalyze\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"factor_analyze_ready\", taskId: resp.taskId, stage: 0, analyzeState: resp.analyzeState })\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"factor_analyze_error\", status: resp.status, analyzeState: resp.analyzeState })\r\n }\r\n } catch (e) {\r\n yield put({ type: \"factor_analyze_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* analyzeQuery(action) {\r\n try {\r\n const resp = yield call(post, \"/factor/queryAnalyze\", action.payload);\r\n if (resp.status === 1) {\r\n if (resp.stage[0] === resp.stage[1]) {\r\n yield put({ type: \"factor_analyze_finished\", stage: resp.stage, analyzeState: resp.analyzeState })\r\n } else {\r\n yield put({ type: \"factor_analyze_working\", stage: resp.stage, analyzeState: resp.analyzeState })\r\n }\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"factor_analyze_error\", status: resp.status, analyzeState: resp.analyzeState })\r\n }\r\n } catch (e) {\r\n yield put({ type: \"factor_analyze_error\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getFactors(action) {\r\n try {\r\n const resp = yield call(post, \"/analyzerResult/Factors\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_list_success\", factorNames: resp.factorNames })\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_factor_list_failed\", status: resp.status })\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_factor_list_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getFactorReturn(action) {\r\n const { chartNames, factorName } = action.payload\r\n for (let i = 0; i < chartNames.length; i++) {\r\n const resp = yield call(post, \"/analyzerResult/factorReturn\", { taskId: action.payload.taskId, factorName: factorName, chartName: chartNames[i] });\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_data_success\", chartName: chartNames[i], data: resp.data, factorName: factorName })\r\n }\r\n }\r\n}\r\n\r\nfunction* getFactorIndicate(action) {\r\n const { factorName } = action.payload\r\n const resp = yield call(post, \"/analyzerResult/factorIndicate\", { taskId: action.payload.taskId, factorName: factorName });\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_indicate_data_success\", data: resp.data, factorName: factorName })\r\n }\r\n}\r\n\r\nfunction* getFactorTurnover(action) {\r\n const { factorName } = action.payload\r\n const resp = yield call(post, \"/analyzerResult/factorturnover\", { taskId: action.payload.taskId, factorName: factorName });\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_factor_turnover_data_success\", data: resp.data, factorName: factorName })\r\n }\r\n}\r\n\r\nfunction* factor() {\r\n yield takeLatest('action_get_factor_sectors', getFactorSectors);\r\n yield takeLatest('action_factorfilter_scan', factorfilterScan);\r\n yield takeLatest('action_factor_file_generate', generateFactorFile);\r\n yield takeLatest('action_factor_file_generate_query', queryGenerateFactorFileStatus);\r\n\r\n yield takeLatest('action_get_factor_files', getFactorFiles);\r\n\r\n yield takeLatest('action_start_analyze', startAnalyze);\r\n yield takeLatest('action_analyze_query', analyzeQuery);\r\n\r\n yield takeLatest('action_upload_migrate', uploadMigrate);\r\n yield takeLatest('action_remove_file', removeFile);\r\n\r\n yield takeLatest('action_get_factor_list', getFactors);\r\n \r\n yield takeLatest('action_get_factor_return', getFactorReturn);\r\n yield takeLatest('action_get_factor_indicate', getFactorIndicate);\r\n yield takeLatest('action_get_factor_turnover', getFactorTurnover);\r\n}\r\n\r\nexport default factor;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { get } from '../../helpers/server'\r\n\r\nfunction* download(action) {\r\n try {\r\n const resp = yield call(get, \"/download/files?files=\" + action.payload.files);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'download_success' });\r\n } else {\r\n yield put({ type: 'download_failed', data: { status: resp.status } });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'download_failed', status: 0 });\r\n }\r\n}\r\n\r\nfunction* auth() {\r\n yield takeLatest('action_download', download);\r\n \r\n}\r\n\r\nexport default auth;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getBacktestStrategy(action) {\r\n try {\r\n const resp = yield call(get, \"/backtest/strategy?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_backtest_strategy_success\", strategyItems: resp.si, permission: resp.p });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_backtest_strategy_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_backtest_strategy_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getSingleStockItems(action) {\r\n try {\r\n const resp = yield call(post, \"/backtest/items\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_single_stock_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_single_stock_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_single_stock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getSingleSymbolItems(action) {\r\n try {\r\n const resp = yield call(post, \"/backtest/symbolToBacktestResult\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_single_symbol_success\", backtestResult: resp.bs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_single_symbol_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_single_symbol_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeBacktest(action) {\r\n try {\r\n const resp = yield call(post, \"/backtest/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_remove_backtest_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_remove_backtest_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_remove_backtest_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getBacktestGrid(action) {\r\n try {\r\n const resp = yield call(get, \"/backtest/grid?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_backtest_grid_success\", permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_backtest_grid_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_backtest_grid_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getAIGrid(action) {\r\n try {\r\n const resp = yield call(get, \"/backtest/ai?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_ai_grid_success\", permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_ai_grid_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_ai_grid_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getExploreBacktest(action) {\r\n try {\r\n const resp = yield call(get, \"/backtest/explore?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_explore_grid_success\", permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_explore_grid_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_explore_grid_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getBatchInfo(action) {\r\n try {\r\n const resp = yield call(get, \"/batchBacktest/info?u=\" + action.payload.u + \"&b=\" + action.payload.b);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_batch_info_success\", batchInfo: resp.bi, permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_batch_info_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_batch_info_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getOptInfo(action) {\r\n try {\r\n const resp = yield call(get, \"/optBacktest/info?u=\" + action.payload.u + \"&b=\" + action.payload.b);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_opt_info_success\", optInfo: resp.bi, permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_opt_info_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_opt_info_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getOptimizeItems(action) {\r\n try {\r\n const resp = yield call(post, \"/batchBacktest/items\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_optimize_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_optimize_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_optimize_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getOptimizeSymbol(action) {\r\n try {\r\n const resp = yield call(post, \"/batchBacktest/optimizeSymbol\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_optimize_symbol_success\", backtestResult: resp.bs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_optimize_symbol_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_optimize_symbol_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeOptimizeBacktest(action) {\r\n try {\r\n const resp = yield call(post, \"/batchBacktest/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_remove_optimize_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_remove_optimize_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_remove_optimize_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getOptItems(action) {\r\n try {\r\n const resp = yield call(post, \"/optBacktest/items\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_opt_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_opt_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_opt_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getOptSymbol(action) {\r\n try {\r\n const resp = yield call(post, \"/optBacktest/optimizeSymbol\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_opt_symbol_success\", backtestResult: resp.bs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_opt_symbol_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_opt_symbol_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeOptBacktest(action) {\r\n try {\r\n const resp = yield call(post, \"/optBacktest/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_remove_opt_success\", backtestResult: resp.bs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_remove_opt_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_remove_opt_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getRollingGrid(action) {\r\n try {\r\n const resp = yield call(get, \"/rollingBacktest/getRollingSymbols?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_rolling_grid_success\", permission: resp.p, symbolItems: resp.st });\r\n } else {\r\n yield put({ type: \"get_rolling_grid_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_rolling_grid_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* GetRollingItems(action) {\r\n try {\r\n const resp = yield call(post, \"/rollingBacktest/items\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_rolling_items_success\", rollingResult: resp.rs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_rolling_items_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_rolling_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* GetRollingSymbol(action) {\r\n try {\r\n const resp = yield call(post, \"/rollingBacktest/rollingSymbol\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_rolling_symbol_success\", rollingResult: resp.rs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_rolling_symbol_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_rolling_symbol_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeRollingBacktest(action) {\r\n try {\r\n const resp = yield call(post, \"/rollingBacktest/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_remove_rolling_success\", rollingResult: resp.rs, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_remove_rolling_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_remove_rolling_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getRollingSymbols(action) {\r\n try {\r\n const resp = yield call(get, \"/rollingBacktest/getRollingSymbols?u=\" + action.payload.UserId + \"&kw=\" + action.payload.keywords);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_rolling_symbols_success', symbolItems: resp.st });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_rolling_symbols_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_rolling_symbols_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_backtest_strategy', getBacktestStrategy);\r\n\r\n yield takeLatest('action_get_single_stock_items', getSingleStockItems);\r\n yield takeLatest('action_get_single_symbol_items', getSingleSymbolItems);\r\n\r\n yield takeLatest('action_remove_backtest', removeBacktest);\r\n\r\n yield takeLatest('action_get_backtest_grid', getBacktestGrid);\r\n yield takeLatest('action_get_ai_grid', getAIGrid);\r\n\r\n yield takeLatest('action_get_explore_grid', getExploreBacktest);\r\n\r\n yield takeLatest('action_get_batch_info', getBatchInfo);\r\n\r\n yield takeLatest('action_get_opt_info', getOptInfo);\r\n\r\n yield takeLatest('action_get_optimize_items', getOptimizeItems);\r\n yield takeLatest('action_get_optimize_symbol', getOptimizeSymbol);\r\n\r\n yield takeLatest('action_remove_optimize', removeOptimizeBacktest);\r\n\r\n yield takeLatest('action_get_opt_items', getOptItems);\r\n yield takeLatest('action_get_opt_symbol', getOptSymbol);\r\n\r\n yield takeLatest('action_remove_opt', removeOptBacktest);\r\n\r\n yield takeLatest('action_get_rolling_grid', getRollingGrid);\r\n\r\n yield takeLatest('action_get_rolling_items', GetRollingItems);\r\n yield takeLatest('action_get_rolling_symbol', GetRollingSymbol);\r\n yield takeLatest('action_remove_rolling', removeRollingBacktest);\r\n\r\n yield takeLatest('action_get_rolling_symbols', getRollingSymbols);\r\n}\r\n\r\nexport default Effect;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getTradeResult(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/tradeResult\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_trade_result_success\", tradeResult: resp.tr, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_trade_result_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_trade_result_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getTradeResultSearch(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/tradeResultSearch\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_get_trade_result_search_success\", tradeResult: resp.tr });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_trade_result_search_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_trade_result_search_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getGeneralStrategyResult(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/generalStrategy\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_general_strategy_result_success\", items: resp.items, tradeDetails: resp.td });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_general_strategy_result_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_general_strategy_result_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getGeneralStrategyResultSearch(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/generalStrategy\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_general_strategy_result_search_success\", tradeDetails: resp.td });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_general_strategy_result_search_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_general_strategy_result_search_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* removeDeployStrategy(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_remove_trade_success\", tradeResult: resp.tr, symbols: resp.sl });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_remove_trade_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_remove_trade_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* getBasePosition(action) {\r\n try {\r\n const resp = yield call(post, \"/trade/getBasePosition\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_base_position_success\", bp: resp.bp, share: resp.share });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_base_position_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_base_position_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_trade_result', getTradeResult);\r\n\r\n yield takeLatest('action_get_general_strategy_result', getGeneralStrategyResult);\r\n yield takeLatest('action_get_general_strategy_result_search', getGeneralStrategyResultSearch);\r\n\r\n yield takeLatest('action_get_trade_result_search', getTradeResultSearch);\r\n\r\n yield takeLatest('action_remove_trade', removeDeployStrategy);\r\n\r\n yield takeLatest('action_get_base_position', getBasePosition);\r\n}\r\n\r\nexport default Effect;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { post } from '../../helpers/server'\r\n\r\nfunction* clearCache(action) {\r\n try {\r\n const resp = yield call(post, \"/test/clear\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'clear_cache_success' });\r\n } else {\r\n yield put({ type: 'clear_cache_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'clear_cache_failed' });\r\n }\r\n}\r\n\r\nfunction* auth() {\r\n yield takeLatest('action_clear_cache', clearCache);\r\n \r\n}\r\n\r\nexport default auth;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { post, get } from '../../helpers/server'\r\n\r\nfunction* getPaymentService(action) {\r\n try {\r\n const resp = yield call(post, \"/charge/service\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'service_success', p: resp.p, Vp: resp.Vp, vas: resp.vas, ie: resp.ie, ce: resp.ce });\r\n } else {\r\n yield put({ type: 'service_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'strioe_failed' });\r\n }\r\n}\r\n\r\nfunction* getStripeKey(action) {\r\n try {\r\n const resp = yield call(post, \"/charge/stripe\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'stripe_success', Vp: resp.Vp, vas: resp.vas, c: resp.c, scs: resp.scs });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'stripe_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'stripe_failed' });\r\n }\r\n}\r\n\r\nfunction* PayMethod(action) {\r\n try {\r\n yield put({ type: \"pay_processing\", stepStatus: 'finish', stepIndex: 1 });\r\n const resp = yield call(post, \"/charge/payMethod\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'payMethod_success', clientSecret: resp.clientSecret, p: resp.p, c: resp.c, a: resp.a });\r\n } else {\r\n yield put({ type: 'payMethod_failed', p: resp.p, c: resp.c, a: resp.a });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'payMethod_failed' });\r\n }\r\n}\r\n\r\nfunction* PayIntent(action) {\r\n try {\r\n const resp = yield call(post, \"/charge/payIntent\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'payIntent_success', p: resp.p, c: resp.c, a: resp.a });\r\n } else {\r\n yield put({ type: 'payIntent_failed', a: resp.a });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'payIntent_failed' });\r\n }\r\n}\r\n\r\nfunction* createSubscription(action) {\r\n try {\r\n yield put({ type: \"pay_processing\", stepStatus: 'finish', stepIndex: 2 });\r\n const resp = yield call(post, \"/billing/createSubscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'create_subscription_success', sc: resp.sc, d: resp.d, c: resp.c, p: resp.p, m: action.payload.m });\r\n } else {\r\n yield put({ type: 'create_subscription_failed', c: resp.c });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'create_subscription_failed' });\r\n }\r\n}\r\n\r\nfunction* retryInvoice(action) {\r\n try {\r\n yield put({ type: \"pay_processing\", stepStatus: 'finish', stepIndex: 2 });\r\n const resp = yield call(post, \"/billing/retryInvoice\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'retry_invoice_success', i: resp.i });\r\n } else {\r\n yield put({ type: 'retry_invoice_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'retry_invoice_failed' });\r\n }\r\n}\r\n\r\nfunction* getSubscription(action) {\r\n try {\r\n const resp = yield call(post, \"/billing/getSubscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'subscription_success', sc: resp.sc, vas: resp.vas, scs: resp.scs });\r\n } else {\r\n yield put({ type: 'subscription_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'subscription_failed' });\r\n }\r\n}\r\n\r\nfunction* cancelSubscriptions(action) {\r\n try {\r\n const resp = yield call(post, \"/billing/cancelSubscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'cancel_subscription_success' });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'cancel_subscription_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"cancel_subscription_failed\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateSubscription(action) {\r\n try {\r\n yield put({ type: \"subscription_processing_commit\" });\r\n const resp = yield call(post, \"/billing/updateSubscription\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_subscription_success' });\r\n } else {\r\n yield put({ type: 'update_subscription_failed', c: resp.c });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'update_subscription_failed' });\r\n }\r\n}\r\n\r\nfunction* emailCaptcha(action) {\r\n try {\r\n yield put({ type: \"email_captcha_commit\" });\r\n const resp = yield call(post, \"/billing/emailCaptcha\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'email_captcha_success' });\r\n } else {\r\n yield put({ type: 'email_captcha_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'email_captcha_failed' });\r\n }\r\n}\r\n\r\nfunction* checkEmail(action) {\r\n try {\r\n yield put({ type: \"check_email_commit\" });\r\n const resp = yield call(post, \"/billing/checkEmail\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'check_email_success', c: resp.c });\r\n } else {\r\n yield put({ type: 'check_email_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'check_email_failed' });\r\n }\r\n}\r\n\r\nfunction* payProcessing(action) {\r\n try {\r\n yield put({ type: \"pay_processing\", stepStatus: action.payload.stepStatus, stepIndex: action.payload.stepIndex });\r\n } catch (e) {\r\n }\r\n}\r\n\r\nfunction* nextProcessing(action) {\r\n try {\r\n yield put({ type: \"next_processing\", stepStatus: action.payload.stepStatus, stepIndex: action.payload.stepIndex });\r\n } catch (e) {\r\n }\r\n}\r\n\r\nfunction* alipay(action) {\r\n try {\r\n const resp = yield call(post, \"/charge/alipay\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'alipay_success', clientSecret: resp.clientSecret });\r\n } else {\r\n yield put({ type: 'alipay_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'alipay_failed' });\r\n }\r\n}\r\n\r\nfunction* sendEmail(action) {\r\n try {\r\n const resp = yield call(post, \"/billing/sendEmail\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'send_email_success', clientSecret: resp.clientSecret });\r\n } else {\r\n yield put({ type: 'send_email_failed' });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'send_email_failed' });\r\n }\r\n}\r\n\r\nfunction* charge() {\r\n yield takeLatest('action_get_payment_service', getPaymentService);\r\n \r\n yield takeLatest('action_get_stripe_key', getStripeKey);\r\n yield takeLatest('action_payment_method', PayMethod);\r\n yield takeLatest('action_payment_intent', PayIntent);\r\n\r\n yield takeLatest('action_create_subscription', createSubscription);\r\n yield takeLatest('action_retry_invoice', retryInvoice);\r\n\r\n yield takeLatest('action_subscription', getSubscription);\r\n yield takeLatest('action_update_subscription', updateSubscription);\r\n yield takeLatest('action_cancel_subscriptions', cancelSubscriptions);\r\n \r\n\r\n yield takeLatest('action_pay_processing', payProcessing);\r\n yield takeLatest('action_next_processing', nextProcessing);\r\n\r\n yield takeLatest('action_email_captcha', emailCaptcha);\r\n yield takeLatest('action_check_email', checkEmail);\r\n \r\n\r\n yield takeLatest('action_ali_payment', alipay);\r\n\r\n yield takeLatest('action_send_email', sendEmail);\r\n \r\n}\r\n\r\nexport default charge;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { get, post } from '../../helpers/server'\r\n\r\nfunction* getSymbolItems(action) {\r\n try {\r\n const resp = yield call(get, \"/correlation/items?u=\" + action.payload.UserId);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_region_sector_success', symbolItems: resp.ss, sectorItems: resp.i });\r\n } else {\r\n yield put({ type: 'get_region_sector_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_region_sector_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* customStock() {\r\n yield takeLatest('action_region_sector', getSymbolItems);\r\n\r\n}\r\n\r\nexport default customStock;","import { put, takeLatest } from 'redux-saga/effects'\r\n\r\nfunction* nonUser(action) {\r\n try {\r\n yield put({ type: 'non_user' });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction* emptyStatus() {\r\n try {\r\n yield put({ type: 'empty' });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction* fail() {\r\n yield takeLatest('action_non_user', nonUser);\r\n\r\n yield takeLatest('action_empty', emptyStatus);\r\n}\r\n\r\nexport default fail;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getFilterSectors(action) {\r\n try {\r\n let fId = action.payload.fId === undefined ? '' : action.payload.fId;\r\n const resp = yield call(get, \"/filter/Info?u=\" + action.payload.UserId + \"&spk=\" + action.payload.stockPoolKey + \"&sg=\" + action.payload.stockGroups + \"&fId=\" + fId);\r\n if (resp.status === 1) {\r\n if (resp.ff !== undefined && resp.ff !== null) {\r\n sessionStorage.setItem(\"FilterFunctionsCache\", JSON.stringify(resp.ff));\r\n }\r\n if (resp.fs !== null) {\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(resp.fs));\r\n }\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n yield put({ type: \"luis_success\", sectors: resp.s, stockCount: resp.sc, luString: resp.ls, symbols: resp.ss, filter: resp.f, sourceFilter: resp.sf, filterGroup: resp.fg });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_filter_sectors_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_filter_sectors_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* saveStrategy(action) {\r\n try {\r\n yield put({ type: \"save_formula_strategy_commit\" });\r\n const resp = yield call(post, \"/filter/SaveFilter\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_save_formula_success\", editStrategy: resp.editStrategy });\r\n } else {\r\n if (resp.status === 4) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_save_formula_fail\", status: resp.status, error: resp.error });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_save_formula_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* addFormulaCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/Add\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* updateFormulaCustomStock(action) {\r\n try {\r\n yield put({ type: \"customStock_commit\" });\r\n const resp = yield call(post, \"/customStock/update\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'update_customStock_success', customGroup: resp.customGroup, symbolList: resp.symbolList });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'update_customStock_fail', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"update_customStock_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* clearFilterString() {\r\n yield put({ type: 'clear_filter_string' });\r\n}\r\n\r\nfunction* getFilterItems(action) {\r\n try {\r\n const resp = yield call(get, \"/filter/filterItems?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n if (resp.fs !== null) {\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(resp.fs));\r\n }\r\n if (resp.sg !== null) {\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(resp.sg));\r\n }\r\n yield put({ type: \"get_filter_items_success\", filters: resp.fs });\r\n } else {\r\n yield put({ type: \"get_filter_items_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_filter_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_filter_sectors', getFilterSectors);\r\n \r\n yield takeLatest('action_save_formula_strategy', saveStrategy);\r\n\r\n yield takeLatest('action_add_formula_custom_stock', addFormulaCustomStock);\r\n yield takeLatest('action_update_formula_custom_stock', updateFormulaCustomStock);\r\n\r\n yield takeLatest('action_clear_filterString', clearFilterString);\r\n\r\n yield takeLatest('action_get_filter_items', getFilterItems);\r\n}\r\n\r\nexport default Effect;","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* actionGetPortfolioInfo(action) {\r\n try {\r\n const resp = yield call(get, \"/portfolio/info?u=\" + action.payload.UserId);\r\n if (resp.status === 1) {\r\n yield put({ type: \"info_success\", permission: resp.p });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"info_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"info_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* actionStartPortfolio(action) {\r\n try {\r\n const resp = yield call(post, \"/portfolio/startPortfolio\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"start_portfolio_success\", portfolioId: resp.portfolioId });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"start_portfolio_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"start_portfolio_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* actionGetPortfolioItems(action) {\r\n try {\r\n const resp = yield call(get, \"/portfolio/items?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_portfolio_items_success\", portfolioItems: resp.items });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_portfolio_items_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_portfolio_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* actionPortfolioOptItems(action) {\r\n try {\r\n const resp = yield call(get, \"/portfolio/portfolitOptitems?u=\" + action.payload.u);\r\n if (resp.status === 1) {\r\n yield put({ type: \"portfolio_opt_items_success\", portfolioItems: resp.items });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"portfolio_opt_items_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"portfolio_opt_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* actionGetPortfolioOptItems(action) {\r\n try {\r\n const resp = yield call(get, \"/portfolio/getPortfolitOptitems?u=\" + action.payload.u + \"&pId=\" + action.payload.pId);\r\n if (resp.status === 1) {\r\n yield put({ type: \"get_portfolio_opt_items_success\", portfolioItems: resp.items });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_portfolio_opt_items_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"get_portfolio_opt_items_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* actionRemovePortfolio(action) {\r\n try {\r\n const resp = yield call(post, \"/portfolio/remove\", action.payload);\r\n if (resp.status === 1) {\r\n yield put({ type: \"remove_portfolio_success\" });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"remove_portfolio_fail\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: \"remove_portfolio_fail\", status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_portfolio_info', actionGetPortfolioInfo);\r\n\r\n yield takeLatest('action_start_portfolio', actionStartPortfolio);\r\n\r\n yield takeLatest('action_get_portfolio_items', actionGetPortfolioItems);\r\n\r\n yield takeLatest('action_remove_portfolio', actionRemovePortfolio);\r\n\r\n yield takeLatest('action_portfolio_opt_items', actionPortfolioOptItems);\r\n yield takeLatest('action_get_portfolio_opt_items', actionGetPortfolioOptItems);\r\n \r\n \r\n}\r\n\r\nexport default Effect;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { get, post } from '../../helpers/server'\r\n\r\nfunction* getStrategyItems(action) {\r\n try {\r\n const resp = yield call(post, \"/demo/getStrategyItems\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_strategy_items_success', strategies: resp.s, strategyTBloginMaps: resp.stm, tradeAccounts: resp.ta });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_strategy_items_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'get_strategy_items_failed', status: 0 });\r\n }\r\n}\r\n\r\nfunction* getStrategyBacktestResult(action) {\r\n try {\r\n const resp = yield call(post, \"/demo/getStrategyBacktestResult\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_strategy_backtest_result_success', statistics: resp.statistics });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: 'get_strategy_backtest_result_failed', status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'get_strategy_backtest_result_failed', status: 0 });\r\n }\r\n}\r\n\r\nfunction* auth() {\r\n yield takeLatest('action_get_strategy_items', getStrategyItems);\r\n yield takeLatest('action_get_strategy_backtest_result', getStrategyBacktestResult);\r\n \r\n}\r\n\r\nexport default auth;","import { put, call, takeLatest } from 'redux-saga/effects'\r\nimport { post, get } from '../../helpers/server';\r\n\r\nfunction* getAuth(action) {\r\n try {\r\n const resp = yield call(get, \"/tdAmeritrade/getAuth?u=\"+action.payload.u);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_auth_success', uri: resp.uri });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_auth_failed\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'get_auth_failed', status: 0 });\r\n }\r\n}\r\n\r\nfunction* getCode(action) {\r\n try {\r\n const resp = yield call(post, \"/tdAmeritrade/getCode\", action.payload);\r\n if (resp && resp.status === 1) {\r\n yield put({ type: 'get_code_success' });\r\n } else {\r\n if (resp.status === 2) {\r\n yield put({ type: \"non_user\" });\r\n }\r\n yield put({ type: \"get_code_failed\", status: resp.status });\r\n }\r\n } catch (e) {\r\n yield put({ type: 'get_code_failed', status: 0 });\r\n }\r\n}\r\n\r\nfunction* Effect() {\r\n yield takeLatest('action_get_auth', getAuth);\r\n yield takeLatest('action_get_code', getCode);\r\n \r\n}\r\n\r\nexport default Effect;","import { all } from 'redux-saga/effects'\r\nimport member from './pages/member/effects'\r\nimport concept from './pages/concept/effects'\r\nimport vernacular from './pages/vernacular/effects'\r\nimport customStock from './pages/customStock/effects'\r\nimport strategy from './pages/strategy/effects'\r\nimport option from './pages/option/effects'\r\nimport hawkeye from './pages/hawkeye/effects'\r\nimport factor from './pages/factor/effects'\r\nimport download from './pages/download/effects'\r\nimport backtest from './pages/backtest/effects'\r\nimport trade from './pages/trade/effects'\r\nimport test from './pages/test/effects'\r\nimport charge from './pages/stripe/effects'\r\nimport correlation from './pages/correlation/effects'\r\nimport fail from './pages/effects'\r\nimport filter from './pages/filter/effects'\r\nimport portfolio from './pages/portfolio/effects'\r\n\r\nimport demo from './pages/demo/effects'\r\n\r\nimport tdAmeritradePage from './pages/tdAmeritrade/effects'\r\n\r\nexport default function* rootSaga() {\r\n yield all([\r\n member(),\r\n concept(),\r\n vernacular(),\r\n customStock(),\r\n strategy(),\r\n option(),\r\n hawkeye(),\r\n factor(),\r\n download(),\r\n backtest(),\r\n trade(),\r\n test(),\r\n charge(),\r\n correlation(),\r\n fail(),\r\n filter(),\r\n portfolio(),\r\n demo(),\r\n\r\n tdAmeritradePage(),\r\n ])\r\n}","import { createStore, applyMiddleware } from 'redux';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport createSagaMiddleware from 'redux-saga';\r\nimport rootReducer from '../rootReducer';\r\nimport rootSaga from '../rootEffects';\r\n\r\nconst sagaMiddleware = createSagaMiddleware()\r\n/** \r\nconst store2 = createStore(\r\n rootReducer,\r\n applyMiddleware(\r\n sagaMiddleware,//用于å¯ç”¨sagas功能,其æ•获组件dispatchçš„åŠ¨ä½œã€‚ä¼ é€’ç»™sagaå’Œreduxçš„actionæ•°æ®ç»“æž„ä¸€æ ·ã€‚\r\n // logger,\r\n )\r\n);\r\n*/\r\nconst store = createStore(\r\n rootReducer,\r\n composeWithDevTools(applyMiddleware(\r\n sagaMiddleware,//用于å¯ç”¨sagas功能,其æ•获组件dispatchçš„åŠ¨ä½œã€‚ä¼ é€’ç»™sagaå’Œreduxçš„actionæ•°æ®ç»“æž„ä¸€æ ·ã€‚\r\n // logger,\r\n ))\r\n);\r\n\r\nsagaMiddleware.run(rootSaga);\r\nexport default store;","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../helpers/history'\r\nimport store from '../helpers/store'\r\n\r\nclass RestrictedPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.loggedin = false;\r\n }\r\n\r\n componentWillMount() {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.token !== undefined) {\r\n this.loggedin = true;\r\n store.dispatch({ type: 'Normal_User', user: user, token: user.token });\r\n } else {\r\n this.loggedin = false;\r\n history.replace(\"/login?next=\" + window.location.pathname);\r\n }\r\n }\r\n\r\n render() {\r\n const { children } = this.props;\r\n\r\n return this.loggedin ? children : <div></div>;\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n token: state.member ? state.member.token : undefined\r\n});\r\n\r\nconst CRestrictedPage = connect(mapStateToProps)(RestrictedPage)\r\n\r\nexport { CRestrictedPage as RestrictedPage }","import React, { Component } from 'react';\r\nimport { Avatar, Button } from 'antd';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass UserMenu extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n handleUserClick = () => {\r\n this.props.userClick();\r\n };\r\n\r\n render() {\r\n let username = this.props.username;\r\n let users = username.split('-');\r\n if (users.length > 1) {\r\n username = users[1];\r\n }\r\n\r\n return (<div className='user-menu' onClick={this.props.userClick}>\r\n <Avatar className='photo' size=\"small\" src={this.props.photo} />\r\n {username.replace(/^(...).+(.)$/g,'$1***$2')}\r\n </div>)\r\n }\r\n}\r\n\r\nfunction LoginRegisterButtons(props) {\r\n return (\r\n <div className='user-menu'>\r\n <Button size='small' className='btn-dark' onClick={props.onLoginAction}>{languageMessages['intl.login']}</Button>\r\n <Button size='small' onClick={props.onRegisterAction}>{languageMessages['intl.register']}</Button>\r\n </div>\r\n )\r\n}\r\n\r\nexport { UserMenu, LoginRegisterButtons }","import React from 'react';\r\nimport { Tooltip, Icon } from 'antd';\r\n\r\nexport function PageTitle(props) {\r\n if (props.position === \"sub\") {\r\n return (<div style={{ paddingLeft: \"10px\", borderLeft: \"4px solid #1C9FCE\", marginTop: \"10px\", ...props.style }}>\r\n <span style={{ paddingLeft: \"2px\", paddingRight: \"8px\" }}> {props.title} </span>\r\n {props.circle === undefined ? '' : (<Tooltip placement=\"bottomLeft\" title={props.circle}>\r\n <Icon type=\"question-circle\" />\r\n </Tooltip>)}\r\n </div>)\r\n } else if (props.position === \"title\") {\r\n var subTitle = \"\"\r\n if (props.subTitle !== undefined) subTitle = props.subTitle\r\n return (<div className=\"title\">{props.title}<span style={{ fontSize: \"9px\" }}>{subTitle}</span></div>)\r\n } else {\r\n return (<div className=\"row-container\"><p className=\"page-title\">{props.title}</p></div>)\r\n } \r\n}","import { EventEmitter } from 'events';\r\nexport default new EventEmitter();","const CodeRegExp = [\r\n {\r\n pattern: '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$',\r\n code: 'Email',\r\n text: 'Email',\r\n des: 'Email'\r\n },\r\n {\r\n pattern: '^(86){0,1}1[3,4,5,7,8,9]\\\\d{9}$',\r\n code: '86',\r\n text: 'ä¸å›½å¤§é™†',\r\n des: 'CN'\r\n },\r\n {\r\n pattern: '^(1){0,1}\\\\d{10,12}$',\r\n code: '1',\r\n text: '美国',\r\n des: 'US'\r\n },\r\n {\r\n pattern: '^(886){0,1}0{0,1}[6,7,9](?:\\\\d{7}|\\\\d{8}|\\\\d{10})$',\r\n code: '886',\r\n text: 'ä¸å›½å°æ¹¾',\r\n des: 'TW'\r\n },\r\n {\r\n pattern: '^(852){0,1}0{0,1}[1,5,6,9](?:\\\\d{7}|\\\\d{8}|\\\\d{12})$',\r\n code: '852',\r\n text: 'ä¸å›½é¦™æ¸¯',\r\n des: 'HK'\r\n },\r\n {\r\n pattern: '^(853){0,1}6\\\\d{7}$',\r\n code: '853',\r\n text: 'ä¸å›½æ¾³é—¨',\r\n des: 'MO'\r\n },\r\n {\r\n pattern: '^(60){0,1}1\\\\d{8,9}$',\r\n code: '60',\r\n text: '马æ¥è¥¿äºš',\r\n des: 'MY'\r\n },\r\n {\r\n pattern: '^(65){0,1}[13689]\\\\d{6,7}$',\r\n code: '65',\r\n text: 'æ–°åŠ å¡',\r\n des: 'SG'\r\n },\r\n {\r\n pattern: '^(81){0,1}0{0,1}[7,8,9](?:\\\\d{8}|\\\\d{9})$',\r\n code: '81',\r\n text: '日本',\r\n des: 'JP'\r\n },\r\n {\r\n pattern: '^(82){0,1}0{0,1}[7,1](?:\\\\d{8}|\\\\d{9})$',\r\n code: '82',\r\n text: '韩国',\r\n des: 'KR'\r\n },\r\n {\r\n pattern: '^(1){0,1}\\\\d{10}$',\r\n code: '1',\r\n text: 'åŠ æ‹¿å¤§',\r\n des: 'CA'\r\n },\r\n {\r\n pattern: '^(61){0,1}4\\\\d{8,9}$',\r\n code: '61',\r\n text: '澳大利亚',\r\n des: 'AU'\r\n },\r\n {\r\n pattern: '^(64){0,1}[278]\\\\d{7,9}$',\r\n code: '64',\r\n text: '新西兰',\r\n des: 'NZ'\r\n },\r\n {\r\n pattern: '^(355){0,1}\\\\d{6,15}$',\r\n code: '355',\r\n text: '阿尔希尼亚',\r\n des: 'AL'\r\n },\r\n {\r\n pattern: '^(54){0,1}\\\\d{6,12}$',\r\n code: '54',\r\n text: 'é˜¿æ ¹å»·',\r\n des: 'AR'\r\n },\r\n {\r\n pattern: '^(971){0,1}\\\\d{6,12}$',\r\n code: '971',\r\n text: '阿è”é…‹',\r\n des: 'AE'\r\n },\r\n {\r\n pattern: '^(968){0,1}\\\\d{6,15}$',\r\n code: '968',\r\n text: '阿曼',\r\n des: 'OM'\r\n },\r\n {\r\n pattern: '^(994){0,1}\\\\d{6,15}$',\r\n code: '994',\r\n text: '阿塞拜疆',\r\n des: 'AZ'\r\n },\r\n {\r\n pattern: '^(353){0,1}\\\\d{6,12}$',\r\n code: '353',\r\n text: '爱尔兰',\r\n des: 'IE'\r\n },\r\n {\r\n pattern: '^(20){0,1}\\\\d{6,12}$',\r\n code: '20',\r\n text: '埃åŠ',\r\n des: 'EG'\r\n },\r\n {\r\n pattern: '^(372){0,1}\\\\d{6,12}$',\r\n code: '372',\r\n text: '爱沙尼亚',\r\n des: 'EE'\r\n },\r\n {\r\n pattern: '^(244){0,1}\\\\d{6,15}$',\r\n code: '244',\r\n text: '安哥拉',\r\n des: 'AO'\r\n },\r\n {\r\n pattern: '^(43){0,1}\\\\d{6,12}$',\r\n code: '43',\r\n text: '奥地利',\r\n des: 'AT'\r\n },\r\n {\r\n pattern: '^(675){0,1}\\\\d{6,15}$',\r\n code: '672',\r\n text: 'å·´å¸ƒäºšæ–°å‡ å†…äºš',\r\n des: 'PG'\r\n },\r\n {\r\n pattern: '^(1242){0,1}\\\\d{6,12}$',\r\n code: '1242',\r\n text: '巴哈马',\r\n des: 'BS'\r\n },\r\n {\r\n pattern: '^(970){0,1}\\\\d{6,15}$',\r\n code: '970',\r\n text: 'å·´å‹’æ–¯å¦',\r\n des: 'PS'\r\n },\r\n {\r\n pattern: '^(973){0,1}\\\\d{6,15}$',\r\n code: '973',\r\n text: 'å·´æž—',\r\n des: 'BH'\r\n },\r\n {\r\n pattern: '^(507){0,1}\\\\d{6,12}$',\r\n code: '507',\r\n text: '巴拿马',\r\n des: 'PA'\r\n },\r\n {\r\n pattern: '^(55){0,1}\\\\d{6,12}$',\r\n code: '55',\r\n text: '巴西',\r\n des: 'BR'\r\n },\r\n {\r\n pattern: '^(375){0,1}\\\\d{6,12}$',\r\n code: '375',\r\n text: '白俄罗斯',\r\n des: 'BY'\r\n },\r\n {\r\n pattern: '^(359){0,1}\\\\d{6,12}$',\r\n code: '359',\r\n text: 'ä¿åŠ åˆ©äºš',\r\n des: 'BG'\r\n },\r\n {\r\n pattern: '^(229){0,1}\\\\d{6,15}$',\r\n code: '229',\r\n text: 'è´å®',\r\n des: 'BJ'\r\n },\r\n {\r\n pattern: '^(32){0,1}\\\\d{6,12}$',\r\n code: '32',\r\n text: '比利时',\r\n des: 'BE'\r\n },\r\n {\r\n pattern: '^(51){0,1}\\\\d{6,12}$',\r\n code: '51',\r\n text: '秘é²',\r\n des: 'PE'\r\n },\r\n {\r\n pattern: '^(48){0,1}\\\\d{6,12}$',\r\n code: '48',\r\n text: '波兰',\r\n des: 'PL'\r\n },\r\n {\r\n pattern: '^(591){0,1}\\\\d{6,15}$',\r\n code: '591',\r\n text: '玻利维亚',\r\n des: 'BO'\r\n },\r\n {\r\n pattern: '^(501){0,1}\\\\d{6,12}$',\r\n code: '501',\r\n text: '伯利兹',\r\n des: 'BZ'\r\n },\r\n {\r\n pattern: '^(226){0,1}\\\\d{6,15}$',\r\n code: '226',\r\n text: '布基纳法索',\r\n des: 'BF'\r\n },\r\n {\r\n pattern: '^(240){0,1}\\\\d{6,15}$',\r\n code: '240',\r\n text: '赤é“å‡ å†…äºš',\r\n des: 'GQ'\r\n },\r\n {\r\n pattern: '^(45){0,1}\\\\d{6,12}$',\r\n code: '45',\r\n text: '丹麦',\r\n des: 'DK'\r\n },\r\n {\r\n pattern: '^(49){0,1}1(\\\\d{5,6}|\\\\d{9,12})$',\r\n code: '49',\r\n text: '德国',\r\n des: 'DE'\r\n },\r\n {\r\n pattern: '^(228){0,1}\\\\d{6,15}$',\r\n code: '228',\r\n text: '多哥',\r\n des: 'TG'\r\n },\r\n {\r\n pattern: '^(7){0,1}[13489]\\\\d{9,11}$',\r\n code: '7',\r\n text: 'ä¿„ç½—æ–¯',\r\n des: 'RU'\r\n },\r\n {\r\n pattern: '^(33){0,1}(\\\\d{6}|\\\\d{8,9})$',\r\n code: '33',\r\n text: '法国',\r\n des: 'FR'\r\n },\r\n {\r\n pattern: '^(63){0,1}[24579](\\\\d{7,9}|\\\\d{12})$',\r\n code: '63',\r\n text: 'è²å¾‹å®¾',\r\n des: 'PH'\r\n },\r\n {\r\n pattern: '^(358){0,1}\\\\d{6,12}$',\r\n code: '358',\r\n text: '芬兰',\r\n des: 'FI'\r\n },\r\n {\r\n pattern: '^(238){0,1}\\\\d{6,15}$',\r\n code: '238',\r\n text: '佛得角',\r\n des: 'CV'\r\n },\r\n {\r\n pattern: '^(220){0,1}\\\\d{6,15}$',\r\n code: '220',\r\n text: '冈比亚',\r\n des: 'GM'\r\n },\r\n {\r\n pattern: '^(1473){0,1}\\\\d{6,15}$',\r\n code: '1473',\r\n text: 'æ ¼å…°çº³è¾¾',\r\n des: 'GD'\r\n },\r\n {\r\n pattern: '^(995){0,1}\\\\d{6,15}$',\r\n code: '995',\r\n text: 'æ ¼é²å‰äºš',\r\n des: 'GE'\r\n },\r\n {\r\n pattern: '^(57){0,1}\\\\d{6,12}$',\r\n code: '57',\r\n text: '哥伦比亚',\r\n des: 'CO'\r\n },\r\n {\r\n pattern: '^(506){0,1}\\\\d{6,15}$',\r\n code: '506',\r\n text: 'å“¥æ–¯è¾¾é»ŽåŠ ',\r\n des: 'CR'\r\n },\r\n {\r\n pattern: '^(592){0,1}\\\\d{6,15}$',\r\n code: '592',\r\n text: 'åœäºšé‚£',\r\n des: 'GY'\r\n },\r\n {\r\n pattern: '^(31){0,1}6\\\\d{8}$',\r\n code: '31',\r\n text: 'è·å…°',\r\n des: 'NL'\r\n },\r\n {\r\n pattern: '^(504){0,1}\\\\d{6,15}$',\r\n code: '504',\r\n text: '洪都拉斯',\r\n des: 'HN'\r\n },\r\n {\r\n pattern: '^(253){0,1}\\\\d{6,15}$',\r\n code: '253',\r\n text: 'å‰å¸ƒæ',\r\n des: 'DJ'\r\n },\r\n {\r\n pattern: '^(996){0,1}\\\\d{6,12}$',\r\n code: '996',\r\n text: 'å‰å°”剿–¯æ–¯å¦',\r\n des: 'KG'\r\n },\r\n {\r\n pattern: '^(224){0,1}\\\\d{6,15}$',\r\n code: '224',\r\n text: 'å‡ å†…äºš',\r\n des: 'GN'\r\n },\r\n {\r\n pattern: '^(245){0,1}\\\\d{6,15}$',\r\n code: '245',\r\n text: 'å‡ å†…äºšæ¯”ç»',\r\n des: 'GW'\r\n },\r\n {\r\n pattern: '^(241){0,1}\\\\d{6,15}$',\r\n code: '241',\r\n text: 'åŠ è“¬',\r\n des: 'GA'\r\n },\r\n {\r\n pattern: '^(855){0,1}\\\\d{6,12}$',\r\n code: '855',\r\n text: '柬埔寨',\r\n des: 'KH'\r\n },\r\n {\r\n pattern: '^(263){0,1}\\\\d{6,15}$',\r\n code: '263',\r\n text: '津巴布韦',\r\n des: 'ZW'\r\n },\r\n {\r\n pattern: '^(237){0,1}\\\\d{6,15}$',\r\n code: '237',\r\n text: '喀麦隆',\r\n des: 'CM'\r\n },\r\n {\r\n pattern: '^(974){0,1}\\\\d{6,12}$',\r\n code: '974',\r\n text: 'å¡å¡”å°”',\r\n des: 'QA'\r\n },\r\n {\r\n pattern: '^(1345){0,1}\\\\d{6,15}$',\r\n code: '1345',\r\n text: '开曼群岛',\r\n des: 'KY'\r\n },\r\n {\r\n pattern: '^(385){0,1}\\\\d{6,15}$',\r\n code: '385',\r\n text: '克罗地亚',\r\n des: 'HR'\r\n },\r\n {\r\n pattern: '^(269){0,1}\\\\d{6,15}$',\r\n code: '269',\r\n text: 'ç§‘æ‘©ç½—',\r\n des: 'KM'\r\n },\r\n {\r\n pattern: '^(965){0,1}\\\\d{6,15}$',\r\n code: '965',\r\n text: 'ç§‘å¨ç‰¹',\r\n des: 'KW'\r\n },\r\n {\r\n pattern: '^(254){0,1}\\\\d{6,15}$',\r\n code: '254',\r\n text: '肯尼亚',\r\n des: 'KE'\r\n },\r\n {\r\n pattern: '^(371){0,1}\\\\d{6,15}$',\r\n code: '371',\r\n text: '拉脱维亚',\r\n des: 'LV'\r\n },\r\n {\r\n pattern: '^(266){0,1}\\\\d{6,15}$',\r\n code: '266',\r\n text: '莱索托',\r\n des: 'LS'\r\n },\r\n {\r\n pattern: '^(370){0,1}\\\\d{6,12}$',\r\n code: '370',\r\n text: 'ç«‹é™¶å®›',\r\n des: 'LT'\r\n },\r\n {\r\n pattern: '^(352){0,1}\\\\d{6,12}$',\r\n code: '352',\r\n text: '墿£®å ¡',\r\n des: 'LU'\r\n },\r\n {\r\n pattern: '^(250){0,1}\\\\d{6,15}$',\r\n code: '250',\r\n text: '墿—ºè¾¾',\r\n des: 'RW'\r\n },\r\n {\r\n pattern: '^(40){0,1}\\\\d{6,12}$',\r\n code: '40',\r\n text: '罗马尼亚',\r\n des: 'RO'\r\n },\r\n {\r\n pattern: '^(261){0,1}\\\\d{6,15}$',\r\n code: '261',\r\n text: 'é©¬è¾¾åŠ æ–¯åŠ ',\r\n des: 'MG'\r\n },\r\n {\r\n pattern: '^(960){0,1}\\\\d{6,12}$',\r\n code: '960',\r\n text: '马尔代夫',\r\n des: 'MV'\r\n },\r\n {\r\n pattern: '^(265){0,1}\\\\d{6,15}$',\r\n code: '265',\r\n text: '马拉维',\r\n des: 'MW'\r\n },\r\n {\r\n pattern: '^(223){0,1}\\\\d{6,15}$',\r\n code: '223',\r\n text: '马里',\r\n des: 'ML'\r\n },\r\n {\r\n pattern: '^(230){0,1}\\\\d{6,15}$',\r\n code: '230',\r\n text: '毛里求斯',\r\n des: 'MU'\r\n },\r\n {\r\n pattern: '^(222){0,1}\\\\d{6,15}$',\r\n code: '222',\r\n text: '毛里塔尼亚',\r\n des: 'MR'\r\n },\r\n {\r\n pattern: '^(976){0,1}\\\\d{6,12}$',\r\n code: '976',\r\n text: 'è’™å¤',\r\n des: 'MN'\r\n },\r\n {\r\n pattern: '^(373){0,1}\\\\d{6,15}$',\r\n code: '373',\r\n text: '摩尔多瓦',\r\n des: 'MD'\r\n },\r\n {\r\n pattern: '^(212){0,1}\\\\d{6,12}$',\r\n code: '212',\r\n text: '摩洛哥',\r\n des: 'MA'\r\n },\r\n {\r\n pattern: '^(258){0,1}\\\\d{6,15}$',\r\n code: '258',\r\n text: '莫桑比克',\r\n des: 'MZ'\r\n },\r\n {\r\n pattern: '^(52){0,1}\\\\d{6,12}$',\r\n code: '52',\r\n text: '墨西哥',\r\n des: 'MX'\r\n },\r\n {\r\n pattern: '^(264){0,1}\\\\d{6,15}$',\r\n code: '264',\r\n text: '纳米比亚',\r\n des: 'NA'\r\n },\r\n {\r\n pattern: '^(27){0,1}\\\\d{6,12}$',\r\n code: '27',\r\n text: 'å—éž',\r\n des: 'ZA'\r\n },\r\n {\r\n pattern: '^(505){0,1}\\\\d{6,15}$',\r\n code: '505',\r\n text: 'å°¼åŠ æ‹‰ç“œ',\r\n des: 'NI'\r\n },\r\n {\r\n pattern: '^(227){0,1}\\\\d{6,15}$',\r\n code: '227',\r\n text: '尼日尔',\r\n des: 'NE'\r\n },\r\n {\r\n pattern: '^(234){0,1}\\\\d{6,12}$',\r\n code: '234',\r\n text: '尼日利亚',\r\n des: 'NG'\r\n },\r\n {\r\n pattern: '^(47){0,1}\\\\d{6,12}$',\r\n code: '47',\r\n text: '挪å¨',\r\n des: 'NO'\r\n },\r\n {\r\n pattern: '^(351){0,1}\\\\d{6,12}$',\r\n code: '351',\r\n text: 'è‘¡è„牙',\r\n des: 'PT'\r\n },\r\n {\r\n pattern: '^(46){0,1}[124-7](\\\\d{8}|\\\\d{10}|\\\\d{12})$',\r\n code: '46',\r\n text: '瑞典',\r\n des: 'SE'\r\n },\r\n {\r\n pattern: '^(41){0,1}\\\\d{6,12}$',\r\n code: '41',\r\n text: '瑞士',\r\n des: 'CH'\r\n },\r\n {\r\n pattern: '^(503){0,1}\\\\d{6,15}$',\r\n code: '503',\r\n text: 'è¨å°”瓦多',\r\n des: 'SV'\r\n },\r\n {\r\n pattern: '^(381){0,1}\\\\d{6,12}$',\r\n code: '381',\r\n text: '塞尔维亚',\r\n des: 'RS'\r\n },\r\n {\r\n pattern: '^(232){0,1}\\\\d{6,15}$',\r\n code: '232',\r\n text: '塞拉利昂',\r\n des: 'SL'\r\n },\r\n {\r\n pattern: '^(221){0,1}\\\\d{6,15}$',\r\n code: '221',\r\n text: 'å¡žå†…åŠ å°”',\r\n des: 'SN'\r\n },\r\n {\r\n pattern: '^(357){0,1}\\\\d{6,15}$',\r\n code: '357',\r\n text: '塞浦路斯',\r\n des: 'CY'\r\n },\r\n {\r\n pattern: '^(248){0,1}\\\\d{6,15}$',\r\n code: '248',\r\n text: '塞舌尔',\r\n des: 'SC'\r\n },\r\n {\r\n pattern: '^(966){0,1}\\\\d{6,12}$',\r\n code: '996',\r\n text: '沙特阿拉伯',\r\n des: 'SA'\r\n },\r\n {\r\n pattern: '^(94){0,1}\\\\d{6,12}$',\r\n code: '94',\r\n text: '斯里兰å¡',\r\n des: 'LK'\r\n },\r\n {\r\n pattern: '^(421){0,1}\\\\d{6,15}$',\r\n code: '421',\r\n text: '斯洛ä¼å…‹',\r\n des: 'SK'\r\n },\r\n {\r\n pattern: '^(386){0,1}\\\\d{6,15}$',\r\n code: '386',\r\n text: '斯洛文尼亚',\r\n des: 'SI'\r\n },\r\n {\r\n pattern: '^(268){0,1}\\\\d{6,15}$',\r\n code: '268',\r\n text: 'æ–¯å¨å£«å…°',\r\n des: 'SZ'\r\n },\r\n {\r\n pattern: '^(992){0,1}\\\\d{6,15}$',\r\n code: '992',\r\n text: 'å¡”å‰å…‹æ–¯å¦',\r\n des: 'TJ'\r\n },\r\n {\r\n pattern: '^(66){0,1}[13456789]\\\\d{7,8}$',\r\n code: '66',\r\n text: '泰国',\r\n des: 'TH'\r\n },\r\n {\r\n pattern: '^(255){0,1}\\\\d{6,15}$',\r\n code: '255',\r\n text: '妿¡‘尼亚',\r\n des: 'TZ'\r\n },\r\n {\r\n pattern: '^(1868){0,1}\\\\d{6,15}$',\r\n code: '1868',\r\n text: '特立尼达和多巴哥',\r\n des: 'TT'\r\n },\r\n {\r\n pattern: '^(90){0,1}\\\\d{6,12}$',\r\n code: '90',\r\n text: '土耳其',\r\n des: 'TR'\r\n },\r\n {\r\n pattern: '^(993){0,1}\\\\d{6,15}$',\r\n code: '993',\r\n text: '土库曼斯å¦',\r\n des: 'TM'\r\n },\r\n {\r\n pattern: '^(216){0,1}\\\\d{6,12}$',\r\n code: '216',\r\n text: 'çªå°¼æ–¯',\r\n des: 'TN'\r\n },\r\n {\r\n pattern: '^(502){0,1}\\\\d{6,15}$',\r\n code: '502',\r\n text: 'å±åœ°é©¬æ‹‰',\r\n des: 'GT'\r\n },\r\n {\r\n pattern: '^(58){0,1}\\\\d{6,12}$',\r\n code: '58',\r\n text: '委内瑞拉',\r\n des: 'VE'\r\n },\r\n {\r\n pattern: '^(673){0,1}\\\\d{6,15}$',\r\n code: '673',\r\n text: '文莱',\r\n des: 'BN'\r\n },\r\n {\r\n pattern: '^(256){0,1}\\\\d{6,15}$',\r\n code: '256',\r\n text: '乌干达',\r\n des: 'UG'\r\n },\r\n {\r\n pattern: '^(380){0,1}[3-79]\\\\d{8,9}$',\r\n code: '380',\r\n text: '乌克兰',\r\n des: 'UA'\r\n },\r\n {\r\n pattern: '^(598){0,1}\\\\d{6,15}$',\r\n code: '598',\r\n text: '乌拉åœ',\r\n des: 'UY'\r\n },\r\n {\r\n pattern: '^(998){0,1}\\\\d{6,15}$',\r\n code: '998',\r\n text: '乌兹别克斯å¦',\r\n des: 'UZ'\r\n },\r\n {\r\n pattern: '^(34){0,1}\\\\d{6,12}$',\r\n code: '34',\r\n text: '西ç牙',\r\n des: 'ES'\r\n },\r\n {\r\n pattern: '^(30){0,1}\\\\d{6,12}$',\r\n code: '30',\r\n text: '希腊',\r\n des: 'GR'\r\n },\r\n {\r\n pattern: '^(36){0,1}\\\\d{6,12}$',\r\n code: '36',\r\n text: '匈牙利',\r\n des: 'HU'\r\n },\r\n {\r\n pattern: '^(1876){0,1}\\\\d{6,15}$',\r\n code: '1876',\r\n text: 'ç‰™ä¹°åŠ ',\r\n des: 'JM'\r\n },\r\n {\r\n pattern: '^(967){0,1}\\\\d{6,15}$',\r\n code: '967',\r\n text: '也门',\r\n des: 'YE'\r\n },\r\n {\r\n pattern: '^(39){0,1}[37]\\\\d{8,11}$',\r\n code: '39',\r\n text: 'æ„大利',\r\n des: 'IT'\r\n },\r\n {\r\n pattern: '^(972){0,1}\\\\d{6,12}$',\r\n code: '972',\r\n text: '以色列',\r\n des: 'IL'\r\n },\r\n {\r\n pattern: '^(91){0,1}\\\\d{6,12}$',\r\n code: '91',\r\n text: 'å°åº¦',\r\n des: 'IN'\r\n },\r\n {\r\n pattern: '^(62){0,1}[2-9]\\\\d{7,11}$',\r\n code: '62',\r\n text: 'å°åº¦å°¼è¥¿äºš',\r\n des: 'ID'\r\n },\r\n {\r\n pattern: '^(44){0,1}[347-9](\\\\d{8,9}|\\\\d{11,12})$',\r\n code: '44',\r\n text: '英国',\r\n des: 'GB'\r\n },\r\n {\r\n pattern: '^(1284){0,1}\\\\d{6,12}$',\r\n code: '1284',\r\n text: '英属维尔京群岛',\r\n des: 'VG'\r\n },\r\n {\r\n pattern: '^(962){0,1}\\\\d{6,12}$',\r\n code: '962',\r\n text: '约旦',\r\n des: 'JO'\r\n },\r\n {\r\n pattern: '^(84){0,1}[1-9]\\\\d{6,9}$',\r\n code: '84',\r\n text: 'è¶Šå—',\r\n des: 'VN'\r\n },\r\n {\r\n pattern: '^(260){0,1}\\\\d{6,15}$',\r\n code: '260',\r\n text: '赞比亚',\r\n des: 'ZM'\r\n },\r\n {\r\n pattern: '^(235){0,1}\\\\d{6,15}$',\r\n code: '235',\r\n text: 'ä¹å¾—',\r\n des: 'TD'\r\n },\r\n {\r\n pattern: '^(56){0,1}\\\\d{6,12}$',\r\n code: '56',\r\n text: '智利',\r\n des: 'CL'\r\n }\r\n];\r\n\r\nexport default CodeRegExp;","import React, { Component } from 'react';\r\nimport { Form, Icon, Input, Button, Checkbox, Row, Col, Select, Tabs } from 'antd';\r\nimport history from '../../helpers/history'\r\n\r\nimport CodeRegExp from './LoginCountrys';\r\n\r\nimport './flags.css';\r\n\r\nconst { TabPane } = Tabs;\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst USERNAME = 'USERNAME';\r\nconst CAPTCHA = 'CAPTCHA';\r\n\r\nfunction hasErrors(fieldsError) {\r\n return Object.keys(fieldsError).some(field => fieldsError[field]);\r\n}\r\n\r\nconst VerificationCodeLoginForm = Form.create({ name: 'verification_code_login_form' })(\r\n class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n phone: '',\r\n captcha: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.props.form.validateFields(['phone', 'captcha'], { first: true }, (err, values) => {\r\n //});\r\n }\r\n\r\n handlePhoneChange = e => {\r\n this.setState({ phone: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handleCaptchaChange = e => {\r\n this.setState({ captcha: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n render() {\r\n const { isChangePrefixForCaptcha, prefix, phoneRegExp, handlePrefixSelector, username, isGetCaptcha, captchaWaiting, getCaptcha, count, logining, handleSubmit, form } = this.props;\r\n const { getFieldDecorator, getFieldsError } = form;\r\n let { phone, captcha } = this.state;\r\n\r\n if (phone === '') phone = username;\r\n\r\n var tmpPhoneRegExp = phoneRegExp;\r\n var tmpPrefix = prefix;\r\n\r\n if (isChangePrefixForCaptcha) {\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (!regex.test(phone)) {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n \r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n } else {\r\n let prefixCode = '0';\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (regex.test(phone)) {\r\n prefixCode = 'Email';\r\n } else {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n prefixCode = users[0];\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n \r\n var isFlag = false;\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n if (prefixCode === CodeRegExp[ii].code) {\r\n if (!isFlag) {\r\n tmpPrefix = CodeRegExp[ii].des;\r\n tmpPhoneRegExp = CodeRegExp[ii].pattern;\r\n isFlag = true;\r\n }\r\n }\r\n\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n }\r\n\r\n const prefixSelector = getFieldDecorator('prefix', { initialValue: tmpPrefix })(\r\n <Select style={{ width: 120 }}\r\n optionLabelProp='label'\r\n dropdownMatchSelectWidth={false}\r\n dropdownClassName='common-login-prefix'\r\n dropdownStyle={{ zIndex: 1005, minWidth: 100 }}\r\n onChange={handlePrefixSelector}>\r\n {options}\r\n </Select>,\r\n );\r\n\r\n let isDisabled = phone === '' || captcha === '';\r\n if (!isDisabled) {\r\n isDisabled = logining ? logining : (hasErrors(getFieldsError()));\r\n }\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} className=\"login-form\">\r\n <Form.Item>\r\n {getFieldDecorator('phone', {\r\n initialValue: phone,\r\n rules: [\r\n { required: true, message: languageMessages['phone number and email address'] },\r\n { pattern: tmpPhoneRegExp, message: languageMessages['format.failed'] }\r\n ],\r\n })(<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder={languageMessages['phone number and email address']} onChange={this.handlePhoneChange} autoComplete={'new-phone'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={12}>\r\n {getFieldDecorator('captcha', {\r\n initialValue: captcha,\r\n rules: [{ required: true, message: languageMessages['please.input.captcha'] }],\r\n })(<Input placeholder={languageMessages['Verification code']} onChange={this.handleCaptchaChange} autoComplete={'new-captcha'} />)}\r\n </Col>\r\n <Col span={12}>\r\n {isGetCaptcha ? (<Button loading={captchaWaiting} onClick={getCaptcha}>{languageMessages['intl.register.getCaptcha']}</Button>) : (<Button disabled onClick={getCaptcha}>{count}s</Button>)}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('remember', { valuePropName: 'checked', initialValue: true, })(<Checkbox>{languageMessages['intl.login.rememberMe']}</Checkbox>)}\r\n <Button size='small' htmlType=\"submit\" className=\"login-form-button\" loading={logining} disabled={isDisabled}>\r\n {logining ? languageMessages['intl.logining'] : languageMessages['intl.login']}\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n },\r\n);\r\n\r\nconst UserPasswordLoginForm = Form.create({ name: 'user_password_login_form' })(\r\n class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n phone: '',\r\n loginPassword: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.props.form.validateFields(['phone', 'password'], { first: true }, (err, values) => {\r\n //});\r\n }\r\n\r\n handlePhoneChange = e => {\r\n this.setState({ phone: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePasswordChange = e => {\r\n this.setState({ loginPassword: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n render() {\r\n const { isChangePrefixForPassword, prefix, phoneRegExp, handlePrefixSelector, username, password, logining, handleSubmit, form } = this.props;\r\n const { getFieldDecorator, getFieldsError } = form;\r\n let { phone, loginPassword } = this.state;\r\n\r\n if (phone === '') phone = username;\r\n if (loginPassword === '') loginPassword = password;\r\n\r\n var tmpPhoneRegExp = phoneRegExp;\r\n var tmpPrefix = prefix;\r\n\r\n if (isChangePrefixForPassword) {\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (!regex.test(phone)) {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n } else {\r\n let prefixCode = '0';\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (regex.test(phone)) {\r\n prefixCode = 'Email';\r\n } else {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n prefixCode = users[0];\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n\r\n var isFlag = false;\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n if (prefixCode === CodeRegExp[ii].code) {\r\n if (!isFlag) {\r\n tmpPrefix = CodeRegExp[ii].des;\r\n tmpPhoneRegExp = CodeRegExp[ii].pattern;\r\n isFlag = true;\r\n }\r\n }\r\n\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n }\r\n\r\n const prefixSelector = getFieldDecorator('prefix', { initialValue: tmpPrefix })(\r\n <Select style={{ width: 120 }}\r\n optionLabelProp='label'\r\n dropdownMatchSelectWidth={false}\r\n dropdownClassName='common-login-prefix'\r\n dropdownStyle={{ zIndex: 1005, minWidth: 100 }}\r\n onChange={handlePrefixSelector}>\r\n {options}\r\n </Select>,\r\n );\r\n\r\n let isDisabled = phone === '' || loginPassword === '';\r\n if (!isDisabled) {\r\n isDisabled = logining ? logining : (hasErrors(getFieldsError()));\r\n }\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} className=\"login-form\">\r\n <Form.Item>\r\n {getFieldDecorator('phone', {\r\n initialValue: phone,\r\n rules: [\r\n { required: true, message: languageMessages['phone number and email address'] },\r\n { pattern: tmpPhoneRegExp, message: languageMessages['format.failed'] }\r\n ],\r\n })(<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder={languageMessages['phone number and email address']} onChange={this.handlePhoneChange} autoComplete={'new-phone'} />)}\r\n\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('password', {\r\n initialValue: loginPassword,\r\n rules: [\r\n { required: true, message: languageMessages['please.input.password'] }\r\n ],\r\n })(<Input.Password prefix={<Icon type=\"lock\" style={{ color: 'rgba(0,0,0,.25)' }} />} placeholder={languageMessages['account.password']} onChange={this.handlePasswordChange} autoComplete={'new-password'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('remember', { valuePropName: 'checked', initialValue: true, })(<Checkbox>{languageMessages['intl.login.rememberMe']}</Checkbox>)}\r\n <Button size='small' htmlType=\"submit\" className=\"login-form-button\" loading={logining} disabled={isDisabled}>\r\n {logining ? languageMessages['intl.logining'] : languageMessages['intl.login']}\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n },\r\n);\r\n\r\nclass LoginForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n loginMode: USERNAME,\r\n phoneRegExp: '',\r\n //phonePlaceholder: '',\r\n\r\n prefix: window.webType,//'CN',\r\n\r\n isChangePrefixForPassword: false,\r\n isChangePrefixForCaptcha: false,\r\n\r\n captchaWaiting: false,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n //this.userPasswordFormRef.props.form.resetFields();\r\n\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === this.state.prefix });\r\n if (tmpCodeRegExp.length > 0) {\r\n //var phonePlaceholder = languageMessages['phone.china.only'];\r\n //if (window.webType !== 'CN') {\r\n // phonePlaceholder = languageMessages['phone'];\r\n //}\r\n\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n //phonePlaceholder\r\n });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status } = props;\r\n\r\n switch (status) {\r\n case 'Get_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n case 'Get_Email_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onSwitchLoginMode = value => {\r\n this.setState({ loginMode: value }, () => {\r\n //switch (value) {\r\n // case 'USERNAME':\r\n // this.userPasswordFormRef.props.form.resetFields();\r\n // break;\r\n // case 'CAPTCHA':\r\n // this.verificationCodeFormRef.props.form.resetFields();\r\n // break;\r\n // default:\r\n // break;\r\n //}\r\n });\r\n }\r\n\r\n getCaptcha = e => {\r\n e.preventDefault();\r\n let { isGetCaptcha } = this.props;\r\n \r\n this.verificationCodeFormRef.props.form.validateFields(['phone'], (err, values) => {\r\n if (!err) {\r\n if (isGetCaptcha) {\r\n var prefix = this.verificationCodeFormRef.props.form.getFieldValue('prefix');\r\n this.setState({ captchaWaiting: true }, () => {\r\n if ('Email' == prefix) {\r\n this.props.dispatch({ type: \"action_email_captcha\", payload: { Mode: 'login', Email: values.phone } });\r\n } else {\r\n //å‘逿‰‹æœºéªŒè¯ç \r\n this.props.dispatch({ type: \"action_login_captcha\", payload: { UserName: values.phone, Prefix: prefix } });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n handleVerificationCodeSubmit = e => {\r\n e.preventDefault();\r\n this.verificationCodeFormRef.props.form.validateFields((err, values) => {\r\n if (!err) {\r\n var mode = 'phone';\r\n if ('Email' == values.prefix) {\r\n mode = 'email';\r\n }\r\n\r\n var requestData = {\r\n Mode: mode,\r\n Prefix: values.prefix,\r\n UserName: values.phone,\r\n Captcha: values.captcha,\r\n RememberMe: values.remember\r\n };\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Login', 'Login', requestData.UserName]);\r\n\r\n // login\r\n this.props.dispatch({ type: \"action_login\", payload: requestData });\r\n }\r\n });\r\n }\r\n\r\n handleUserPasswordSubmit = e => {\r\n e.preventDefault();\r\n this.userPasswordFormRef.props.form.validateFields((err, values) => {\r\n if (!err) {\r\n var mode = 'phone';\r\n if ('Email' == values.prefix) {\r\n mode = 'email';\r\n }\r\n\r\n var requestData = {\r\n Mode: mode,\r\n Prefix: values.prefix,\r\n UserName: values.phone,\r\n Password: values.password,\r\n RememberMe: values.remember\r\n };\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Login', 'Login', requestData.UserName]);\r\n\r\n // login\r\n this.props.dispatch({ type: \"action_login\", payload: requestData });\r\n }\r\n });\r\n };\r\n\r\n handleUserPasswordPrefixSelector = value => {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === value });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n prefix: value,\r\n isChangePrefixForPassword: true,\r\n }, () => {\r\n //this.userPasswordFormRef.props.form.validateFields();\r\n this.userPasswordFormRef.props.form.validateFields(['phone']);\r\n\r\n });\r\n }\r\n\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n handleVerificationCodePrefixSelector = value => {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === value });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n prefix: value,\r\n isChangePrefixForCaptcha: true,\r\n }, () => {\r\n //this.verificationCodeFormRef.props.form.validateFields();\r\n this.verificationCodeFormRef.props.form.validateFields(['phone']);\r\n });\r\n }\r\n\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n handleChange = () => {\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n SetUserPasswordFormRef = formRef => {\r\n this.userPasswordFormRef = formRef;\r\n }\r\n\r\n SetVerificationCodeFormRef = formRef => {\r\n this.verificationCodeFormRef = formRef;\r\n }\r\n\r\n render() {\r\n let { loginMode, prefix, phoneRegExp, isChangePrefixForPassword, isChangePrefixForCaptcha, captchaWaiting } = this.state;\r\n\r\n return (<div className='login-register-card-class'>\r\n <Tabs size=\"small\" defaultActiveKey={loginMode} onChange={this.onSwitchLoginMode}>\r\n <TabPane tab={languageMessages['intl.login.userNameLogin']} key={USERNAME}>\r\n <UserPasswordLoginForm\r\n wrappedComponentRef={this.SetUserPasswordFormRef}\r\n isChangePrefixForPassword={isChangePrefixForPassword}\r\n prefix={prefix}\r\n phoneRegExp={phoneRegExp}\r\n handlePrefixSelector={this.handleUserPasswordPrefixSelector}\r\n username={this.props.username}\r\n password={this.props.password}\r\n handleChange={this.handleChange}\r\n logining={this.props.logining}\r\n handleSubmit={this.handleUserPasswordSubmit}\r\n /> \r\n </TabPane>\r\n <TabPane tab={languageMessages['intl.login.verificationCodeLogin']} key={CAPTCHA}>\r\n <VerificationCodeLoginForm\r\n wrappedComponentRef={this.SetVerificationCodeFormRef}\r\n isChangePrefixForCaptcha={isChangePrefixForCaptcha}\r\n prefix={prefix}\r\n phoneRegExp={phoneRegExp}\r\n handlePrefixSelector={this.handleVerificationCodePrefixSelector}\r\n username={this.props.username}\r\n isGetCaptcha={this.props.isGetCaptcha}\r\n captchaWaiting={captchaWaiting}\r\n getCaptcha={this.getCaptcha}\r\n count={this.props.count}\r\n handleChange={this.handleChange}\r\n logining={this.props.logining}\r\n handleSubmit={this.handleVerificationCodeSubmit}\r\n />\r\n \r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport { LoginForm as default }","import React, { Component } from 'react';\r\nimport { Form, Input, Select, Row, Col, Checkbox, Button, Icon, Modal, Tabs, AutoComplete } from 'antd';\r\n\r\nimport CodeRegExp from './Countrys';\r\n\r\nimport './flags.css';\r\n\r\nconst { TabPane } = Tabs;\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst PHONE = 'phone';\r\nconst EMAIL = 'email';\r\n\r\nfunction hasErrors(fieldsError) {\r\n return Object.keys(fieldsError).some(field => fieldsError[field]);\r\n}\r\n\r\nconst EmailRegisterForm = Form.create({ name: 'email_register_form' })(\r\n class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n visible: false,\r\n emailDataSource: [],\r\n\r\n email: '',\r\n captcha: '',\r\n password: '',\r\n promoCode: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.props.form.validateFields(['registerEmail', 'captcha', 'password'], { first: true }, (err, values) => {\r\n //});\r\n }\r\n\r\n handleEmailChange = value => {\r\n this.setState({\r\n email: value,\r\n emailDataSource: !value || value.indexOf('@') >= 0 ? [] :\r\n [`${value}@gmail.com`,\r\n `${value}@outlook.com`,\r\n `${value}@@hotmail.com`,\r\n `${value}@yahoo.com`,\r\n `${value}@ymail.com`,\r\n `${value}@rocketmail.com`,\r\n `${value}@zoho.com`,\r\n `${value}@icloud.com`,\r\n `${value}@me.com`,\r\n `${value}@mac.com`,\r\n `${value}@fastmail.com`,\r\n `${value}@aol.com`,\r\n `${value}@love.com`,\r\n `${value}@ygm.com`,\r\n `${value}@games.com`,\r\n `${value}@wow.com`\r\n ],\r\n });\r\n };\r\n\r\n handleCaptchaChange = e => {\r\n this.setState({ captcha: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePasswordChange = e => {\r\n this.setState({ password: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePromoCodeChange = e => {\r\n this.setState({ promoCode: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n showModal = () => {\r\n this.setState({\r\n visible: true,\r\n });\r\n };\r\n\r\n handleOk = () => {\r\n this.setState({\r\n visible: false,\r\n });\r\n };\r\n\r\n handleCancel = () => {\r\n this.setState({\r\n visible: false,\r\n });\r\n };\r\n\r\n renderProtocol() {\r\n return <Modal title={languageMessages['protocol']}\r\n style={{ top: 20 }}\r\n className='common-protocol-modal'\r\n visible={this.state.visible}\r\n onOk={this.handleOk}\r\n onCancel={this.handleCancel}\r\n footer={[\r\n <Button key=\"ok\" type=\"primary\" onClick={this.handleOk}>{languageMessages['close']}</Button>]}\r\n >\r\n <div className='common-protocol-class'>\r\n <b>一ã€\tåè®®ç¡®è®¤åŠæŽ¥å—</b>\r\n <div>1.1\t本å议是深圳宽投信æ¯ç§‘技有é™å…¬å¸ï¼ˆä»¥ä¸‹ç®€ç§°â€œæˆ‘å…¬å¸â€ï¼‰ä¸Žç”¨æˆ·å°±ä¼šå‘˜æœåŠ¡æ‰€è®¢ç«‹çš„å议(以下简称“本åè®®â€ï¼‰ã€‚本åè®®æè¿°æˆ‘å…¬å¸ä¸Žç”¨æˆ·ä¹‹é—´å…³äºŽè½¯ä»¶è®¸å¯ã€æœåŠ¡ä½¿ç”¨åŠç›¸å…³æ–¹é¢çš„æƒåˆ©ä¹‰åŠ¡ã€‚â€œç”¨æˆ·â€æˆ–â€œæ‚¨â€æ˜¯æŒ‡äº«å—æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡çš„ä¸ªäººæˆ–å•一实体。本åè®®æž„æˆæ‚¨ï¼ˆæ— 论个人或者å•ä½ï¼‰ä½¿ç”¨æˆ‘公叿‰€æä¾›çš„会员æœåŠ¡ä¹‹å…ˆå†³æ¡ä»¶ï¼Œé™¤éžæ‚¨æŽ¥å—本å议的æœåŠ¡æ¡æ¬¾ï¼Œå¦åˆ™æ‚¨æ— æƒä½¿ç”¨æœ¬å议的相关æœåŠ¡ã€‚æ‚¨çš„ä½¿ç”¨è¡Œä¸ºå°†è§†ä¸ºåŒæ„æŽ¥å—æœ¬åè®®å„é¡¹æ¡æ¬¾çš„约æŸã€‚</div>\r\n <div>1.2\tæˆ‘å…¬å¸æœ‰æƒé𿗶坹æœåŠ¡æ¡æ¬¾è¿›è¡Œä¿®æ”¹ï¼Œä¸€æ—¦æœåŠ¡æ¡æ¬¾å‘ç”Ÿå˜æ›´å’Œä¿®æ”¹ï¼Œæˆ‘å…¬å¸å°†åœ¨ç›¸å…³é¡µé¢ä¸Šæç¤ºä¿®æ”¹çš„内容;如果您ä¸åŒæ„本å议的修改,å¯ä»¥å–消已ç»èŽ·å–的会员æœåŠ¡å¹¶åœæ¢ä½¿ç”¨ï¼›å¦‚果您继ç»ä½¿ç”¨æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡ï¼Œåˆ™è§†ä¸ºæ‚¨å·²æŽ¥å—æœ¬å议的全部修改。</div>\r\n <div>1.3\tè¯·æ‚¨å®¡é˜…å¹¶æŽ¥å—æˆ–䏿ޥ嗿œ¬å议,未æˆå¹´äººåº”在法定监护人陪åŒä¸‹å®¡é˜…和履行,未æˆå¹´äººè¡Œä½¿å’Œå±¥è¡Œæœ¬å议项下的æƒåˆ©å’Œä¹‰åŠ¡è§†ä¸ºå·²èŽ·å¾—äº†æ³•å®šç›‘æŠ¤äººçš„è®¤å¯ï¼Œæ‚¨åœ¨äº«å—æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡æ—¶å¿…é¡»å®Œå…¨ã€ä¸¥æ ¼éµå®ˆæœ¬å议的æœåŠ¡æ¡æ¬¾ã€‚</div>\r\n <b>二ã€\tæœåŠ¡è¯´æ˜Ž</b>\r\n <div>2.1\tæˆ‘å…¬å¸æœ‰å¯¹ç”¨æˆ·ç½‘上一切活动的监ç£ã€æç¤ºã€æ£€æŸ¥çš„æƒåˆ©ï¼Œå¦‚æžœç”¨æˆ·çš„è¡Œä¸ºè¿å有关法律法规或è¿å本å议的约定,我公å¸äº«æœ‰è¦æ±‚å…¶çº æ£å¹¶è¿½ç©¶å…¶è´£ä»»ç‰æƒåˆ©ã€‚</div>\r\n <div>2.2\t全部会员æœåŠ¡å‡ä»…é™äºŽç”¨æˆ·åœ¨å½“å‰å¹³å°ä½¿ç”¨ï¼Œä»»ä½•ä»¥æ¶æ„ç ´è§£ç‰éžæ³•手段将æœåŠ¡å†…å®¹ä¸Žå¹³å°åˆ†ç¦»çš„行为,å‡ä¸å±žäºŽæœ¬åè®®ä¸çº¦å®šçš„æœåŠ¡ã€‚ç”±æ¤å¼•èµ·çš„ä¸€åˆ‡æ³•å¾‹åŽæžœç”±è¡Œä¸ºäººè´Ÿè´£ï¼Œæˆ‘å…¬å¸ä¾æ³•追究行为人的法律责任。</div>\r\n <div>2.3\t当您使用å„å•项特选æœåŠ¡æ—¶ï¼Œæ‚¨çš„ä½¿ç”¨è¡Œä¸ºè§†ä¸ºå¯¹å…¶å„å•项会员æœåŠ¡çš„æœåŠ¡æ¡æ¬¾ä»¥åŠæˆ‘å…¬å¸åœ¨è¯¥å•项会员æœåŠ¡ä¸å‘出å„ç±»å…¬å‘Šçš„åŒæ„。</div>\r\n <div>2.4\tæ‚¨æ˜Žç¡®äº†è§£å¹¶åŒæ„,会员æœåŠ¡çš„ä»˜è´¹æ–¹å¼ä¸ºä»£æ”¶è´¹è¿è¥å•†æ‰˜æ”¶çš„付款方å¼ï¼Œæ‚¨é€šè¿‡æ¤ç§ä»˜è´¹æ–¹å¼ä»˜è´¹å¯èƒ½å˜åœ¨ä¸€å®šçš„商业风险,包括但ä¸é™äºŽä¸æ³•分å利用账户或银行å¡ç‰æœ‰ä»·å¡ç‰è¿›è¡Œè¿æ³•活动,该风险å‡ä¼šç»™æ‚¨é€ æˆç›¸åº”çš„ç»æµŽæŸå¤±ã€‚您应自行承担å‘ä¾µæƒæ–¹è¿½ç©¶ä¾µæƒè´£ä»»å’Œè¿½ç©¶è´£ä»»ä¸èƒ½çš„åŽæžœã€‚</div>\r\n <div>2.5\t您应自行负责妥善地ä¿ç®¡ã€ä½¿ç”¨ã€ç»´æŠ¤ç”³è¯·å–得的账户ã€è´¦æˆ·ä¿¡æ¯åŠå¯†ç 。您应对账户信æ¯åŠå¯†ç 采å–å¿…è¦ä¸”有效的ä¿å¯†æŽªæ–½ã€‚éžæˆ‘å…¬å¸åŽŸå› è‡´ä½¿æ‚¨çš„è´¦æˆ·å¯†ç æ³„露以åŠå› 您ä¿ç®¡ã€ä½¿ç”¨ã€ç»´æŠ¤ä¸å½“é€ æˆæŸå¤±çš„ï¼Œæˆ‘å…¬å¸æ— éœ€æ‰¿æ‹…ä¸Žæ¤æœ‰å…³çš„任何责任。</div>\r\n <div>2.6\t我公å¸ä¸å¯¹æ‚¨å› 第三方的行为或ä¸ä½œä¸ºé€ æˆçš„æŸå¤±æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽæ”¯ä»˜æœåŠ¡å’Œç½‘ç»œæŽ¥å…¥æœåŠ¡ã€ä»»æ„第三方的侵æƒè¡Œä¸ºã€‚</div>\r\n <b>三ã€\tæœåŠ¡å¼€é€šåŠæŸ¥è¯¢</b>\r\n <div>3.1\tæœªæ¥æ–°å¢žçš„æ¸ é“开通会员æœåŠ¡ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽï¼šç¬¬ä¸‰æ–¹æ”¯ä»˜ã€ç½‘é“¶æ”¯ä»˜ã€æ‰‹æœºæ”¯ä»˜ç‰æ–¹å¼ã€‚在您使用æŸç§å…·ä½“æ–¹å¼å¼€é€šä¼šå‘˜æœåŠ¡æ—¶ï¼Œé¡»é˜…è¯»å¹¶ç¡®è®¤æŽ¥å—相关的æœåŠ¡æ¡æ¬¾å’Œä½¿ç”¨æ–¹æ³•。</div>\r\n <div>3.2\t会员æœåŠ¡çš„èµ„è´¹æ ‡å‡†ä»¥æœ¬äº§å“䏿 ‡æ˜Žçš„è¯¦ç»†èµ„è´¹æ ‡å‡†ä¸ºå‡†ï¼Œæˆ‘å…¬å¸æœ‰æƒåŸºäºŽè‡ªèº«ä¸šåŠ¡å‘展需è¦å˜æ›´èµ„è´¹æ ‡å‡†ï¼Œä½†æˆ‘å…¬å¸ä¼šæ ¹æ®å®žé™…è¿è¥æƒ…况对ä¸åŒé˜¶æ®µå·²å¼€é€šä¼šå‘˜æœåС䏔æŒç»æœ‰æ•ˆçš„用户给予ç»è´¹ã€å‡çº§æ–¹é¢çš„ä¸åŒèµ„è´¹ä¼˜æƒ ï¼Œå…·ä½“ä¼˜æƒ æ”¿ç–以本产å“ä¸ç›¸å…³é¡µé¢çš„公告内容为准。</div>\r\n <div>3.3\t一旦您开通会员æœåŠ¡ï¼Œå³è§†ä¸ºå…¶è®¤å¯è¯¥é¡¹æœåŠ¡æ ‡æ˜Žçš„ä»·æ ¼ï¼›ä¼šå‘˜æœåŠ¡å¼€é€šæˆåŠŸåŽï¼Œè¯¥é¡¹æœåŠ¡å³ä½¿ç”Ÿæ•ˆã€‚</div>\r\n <div>3.4\t会员æœåŠ¡å¼€é€šåŽï¼Œæ‚¨æœ‰æƒåˆ©ä¸æŽ¥å—我公å¸çš„æœåŠ¡ï¼Œå¯ç”³è¯·å–消会员æœåŠ¡ï¼Œä½†ä¸èŽ·å¾—ä»»ä½•å·²ç¼´çº³çš„æœåŠ¡è´¹ç”¨çš„é€€è¿˜ã€‚</div>\r\n <b>å››ã€\tæœåŠ¡æœŸé™åŠæƒé™</b>\r\n <div>4.1\tæ¯é¡¹ä¼šå‘˜æœåС凿œ‰è‡ªå·±å•独的æœåŠ¡æœŸé™ï¼Œæ‚¨ä¸€æ—¦å¼€é€šä¼šå‘˜æœåŠ¡å³è§†ä¸ºè®¤å¯å…¶æœåŠ¡æœŸé™ã€‚</div>\r\n <div>4.2\tæ¯é¡¹ä¼šå‘˜æœåŠ¡çš„æœåŠ¡æœŸé™å‡ä»¥ç›¸åº”会员æœåС介ç»é¡µé¢ä¸æ ‡æ³¨çš„æœŸé™ä¸ºå‡†ã€‚如果您未在æœåŠ¡æœŸé™å†…使用会员æœåŠ¡ï¼Œäº¦å°†è§†ä¸ºå·²ä½¿ç”¨ï¼Œæˆ‘å…¬å¸æ¦‚ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚</div>\r\n <div>4.3\t您已开通的会员æœåŠ¡ä½¿ç”¨æœŸé™ä¸ä¼šå› å…¶åœ¨ä½¿ç”¨æœŸé—´çš„ä¸æ–ã€ç»ˆæ¢ç‰æƒ…况而延长。</div>\r\n <b>五ã€\t用户æƒåˆ©é™åˆ¶</b>\r\n <div>5.1\t会员æœåС仅é™äºŽå¼€é€šçš„è´¦å·è‡ªè¡Œä½¿ç”¨ï¼Œä¸”æœåŠ¡æœŸé™å†…ä¸èƒ½åœ¨ä¸åŒè´¦æˆ·ä¹‹é—´è½¬ç§»ï¼Œç¦æ¢å€Ÿç”¨ã€è½¬è®©æˆ–å”®å–,å¦åˆ™æˆ‘公叿œ‰æƒåœ¨æœªç»é€šçŸ¥çš„æƒ…况䏋喿¶ˆè½¬è®©è´¦æˆ·ã€å—让账户的会员æœåŠ¡èµ„æ ¼ï¼Œç”±æ¤å¸¦æ¥çš„æŸå¤±ç”±ç”¨æˆ·è‡ªè¡Œæ‰¿æ‹…ï¼Œæˆ‘å…¬å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <div>5.2\t用户ä¸å¾—以盗窃ã€åˆ©ç”¨ç³»ç»Ÿæ¼æ´žç‰éžæ³•途径,以åŠåœ¨æœªèŽ·æˆ‘å…¬å¸æŽˆæƒçš„éžæ³•å¹³å°ä¸ŠèŽ·å–æˆ–开通会员æœåŠ¡ï¼Œå¦åˆ™æˆ‘公叿œ‰æƒå–消其会员æœåŠ¡èµ„æ ¼ã€‚æœ‰æ¤å¼•å‘的问题由用户自行承担,我公å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <div>5.3\t用户ä¸å¾—ä½¿ç”¨å¸¦æœ‰éžæ³•ã€æ·«ç§½ã€æ±¡è¾±æˆ–人身攻击å«ä¹‰çš„头åƒã€æ˜µç§°æˆ–个人简介,一ç»å‘çŽ°ï¼Œæˆ‘å…¬å¸æœ‰æƒå–消其会员æœåŠ¡èµ„æ ¼è€Œæ— é¡»ç»™äºˆä»»ä½•è¡¥å¿ã€‚</div>\r\n <div>5.4\té™¤éžæˆ‘公叿å‰ä¹¦é¢è®¸å¯ï¼Œç¦æ¢å¤åˆ¶ã€ä¸‹è½½ã€ä¸Šä¼ ã€ä¿®æ”¹ã€å¼€å‘ã€è½¬è®©ã€é”€å”®ã€å±•示ã€ä¼ æ’æœåŠ¡å†…å®¹ï¼›ç¦æ¢åˆæˆã€åµŒå¥—ã€é“¾æŽ¥æœåŠ¡å†…å®¹ï¼›ç¦æ¢åˆ©ç”¨æœåŠ¡å†…å®¹è¿›è¡Œæ•™å¦æˆ–ç ”ç©¶ã€å•†ä¸šå¼€å‘æˆ–æŽ¨å¹¿ï¼›ç¦æ¢ä»¥å•†ä¸šç›®çš„使用æœåŠ¡å†…å®¹ï¼›åŒ…æ‹¬ä½†ä¸é™äºŽä¸‹åˆ—情况;</div>\r\n <div>5.4.1\tä¸å¾—é€šè¿‡éžæ³•手段对账户的æœåŠ¡æœŸé™ã€æ¶ˆè´¹é‡‘é¢ã€æŠµæ‰£ç§¯åˆ†ã€äº¤æ˜“状æ€è¿›è¡Œä¿®æ”¹ï¼Œæˆ–ç”¨éžæ³•çš„æ–¹å¼æˆ–ä¸ºäº†éžæ³•的目的使用已开通的æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.2\tä¸å¾—å°†è´¦æˆ·æœ‰å¿æˆ–æ— å¿æä¾›ç»™ä»»ä½•ç¬¬ä¸‰æ–¹ï¼Œå¹¶å…许其通过该账户使用éžå…¶å¼€é€šçš„æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.3\tä¸å¾—å°†æœåС内容å¤åˆ¶ã€é”€å”®ã€å‡ºç§Ÿæˆ–授æƒç»™ä»»ä½•第三方。</div>\r\n <div>5.4.4\tä¸å¾—主动对我公å¸ç”¨äºŽæœåŠ¡å†…å®¹çš„ä»»ä½•å®‰å…¨æŽªæ–½æŠ€æœ¯è¿›è¡Œç ´è§£ã€æ›´æ”¹ã€åæ“作ã€ç ´å或其他篡改,或å助他人进行上述行为。</div>\r\n <div>5.4.5\tä¸å¾—é€šè¿‡éžæˆ‘å…¬å¸è®¤å¯çš„æ–¹å¼èŽ·å¾—æœåŠ¡å†…å®¹ï¼Œæˆ–è€…ç§»é™¤ã€ä¿®æ”¹ä»»ä½•æ ‡æ³¨åœ¨æœåŠ¡å†…å®¹ä¸Šçš„å¹¿å‘Šã€å•†æ ‡ã€åªæ˜¯äº§æƒæˆ–其他专有æƒå£°æ˜Žã€‚</div>\r\n <div>5.4.6\tä¸å¾—采用收费或å…费的方å¼ï¼Œå…¨éƒ¨æˆ–部分在任何场åˆå±•示æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.7\tä¸å¾—æŸå®³ç¬¬ä¸‰æ–¹åˆ©ç›Šã€æˆ–通过当å‰å¹³å°æ”¶é›†ç¬¬ä¸‰æ–¹èµ„料信æ¯ã€ç ´å或盗å–第三方账户,å‘é€è¯ˆéª—邮件和垃圾邮件ç‰éžæ³•ä¿¡æ¯ï¼Œä¾µçŠ¯ç¬¬ä¸‰æ–¹åˆæ³•æƒç›Šï¼ŒåŒ…括但ä¸é™äºŽéšç§æƒã€çŸ¥è¯†äº§æƒã€è´¢äº§æƒç‰ã€‚</div>\r\n <div>5.5\t我公å¸å¯ä»¥å•æ–¹é¢åˆ¤æ–用户是å¦è¿å法律法规规定或è¿å本å议,并å¯ä»¥å•æ–¹é¢é€‰æ‹©ä¸€é¡¹æˆ–å¤šé¡¹å¤„ç†æ–¹å¼1)通知2ï¼‰ä¸æ–æˆ–ç»ˆæ¢æœåŠ¡3ï¼‰è¦æ±‚è¿çº¦æ–¹æˆ–ä¾µæƒæ–¹èµ”å¿æŸå¤±4ï¼‰å¤„ä»¥ç½šæ¬¾ã€‚ç”¨æˆ·åŒæ„一旦å‘生å‰è¿°æƒ…å†µï¼Œå°†æŽ¥å—æˆ‘们公å¸çš„å†³å®šï¼Œå¹¶åŒæ„èµ”å¿æˆ‘å…¬å¸åŠå…¶ä»–å—æŸå®³æ–¹çš„æŸå¤±ã€‚</div>\r\n <b>å…ã€\tå˜æ›´åŠå…è´£æ¡æ¬¾</b>\r\n <div>6.1\t我公å¸å¯¹ä¼šå‘˜æœåŠ¡çš„ä½¿ç”¨æœŸé™ã€è´ä¹°ä»·æ ¼ä¿ç•™éšæ—¶å˜æ›´çš„æƒåˆ©ï¼Œè€Œä¸éœ€é€šçŸ¥ç”¨æˆ·ã€‚对于所有会员æœåŠ¡çš„ä¸æ–或终æ¢è€Œé€ æˆçš„任何æŸå¤±ï¼Œæˆ‘公叿— 需对任何第三方承担任何责任。</div>\r\n <div>6.2\t鉴于网络æœåŠ¡çš„ç‰¹æ®Šæ€§ï¼Œç”¨æˆ·åŒæ„æˆ‘å…¬å¸æœ‰æƒéšæ—¶å˜æ›´ã€ä¸æ–或终æ¢éƒ¨åˆ†æˆ–全部的网络æœåŠ¡ã€‚æˆ‘å…¬å¸ä¿ç•™éšæ—¶ä¿®æ”¹æˆ–ä¸æ–会员æœåŠ¡è€Œä¸éœ€é€šçŸ¥ç”¨æˆ·çš„æƒåˆ©ï¼Œå¯¹äºŽæ‰€æœ‰ä¼šå‘˜æœåŠ¡çš„ä¸æ–或终æ¢è€Œé€ æˆçš„任何æŸå¤±ï¼Œæˆ‘公叿— 需对任何第三方承担任何责任。</div>\r\n <div>6.3\t用户开通的会员æœåŠ¡ä½¿ç”¨æœŸé™ä¸åŒ…å«è§£å†³æ•…éšœã€æœåŠ¡å™¨ç»´ä¿®ã€è°ƒæ•´ã€å‡çº§ç‰æ‰€éœ€ç”¨çš„åˆç†æ—¶é—´ï¼Œå¯¹ä¸Šè¿°æƒ…况所需用的时间我公å¸ä¸äºˆè¡¥å¿å¹¶ä¿ç•™è§£é‡Šæƒã€‚</div>\r\n <div>6.4\tç”¨æˆ·åœ¨ä½¿ç”¨æˆ‘å…¬å¸æ‰€æä¾›çš„会员æœåŠ¡æ—¶ï¼Œå¦‚æžœéå—任何人身或财务的æŸå¤±ã€æŸå®³æˆ–伤害,ä¸è®ºåŽŸå› å¦‚ä½•ï¼Œæˆ‘å…¬å¸å‡ä¸è´Ÿè´£ä»»ã€‚由于用户将个人密ç 告知他人或与他人共享注册账户,由æ¤å¯¼è‡´çš„任何个人资料泄露,我公å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <b>七ã€\t䏿–åŠç»ˆæ¢æœåŠ¡</b>\r\n <div>7.1\tå¯¹äºŽå› æœåŠ¡å™¨æ»æœºã€æœåŠ¡å™¨ç»´ä¿®ã€ç½‘ç»œæ•…éšœã€æ•°æ®åº“æ•…éšœã€äº§å“å‡çº§è°ƒæ•´ç‰é—®é¢˜ï¼Œæˆ–å…¶ä»–ä¸å¯æŠ—拒的事由,包括但ä¸é™äºŽæ”¿åºœè¡Œä¸ºã€è‡ªç„¶ç¾å®³ã€é»‘客攻击ç‰é€ æˆçš„æœåŠ¡ä¸æ–,和对用户个人数æ®åŠèµ„æ–™é€ æˆçš„æŸå¤±ï¼Œæˆ‘å…¬å¸ä¸æ‰¿æ‹…ç”±æ¤å¯¹ç”¨æˆ·é€ æˆçš„任何æŸå¤±ï¼Œå¹¶ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚ä½†æˆ‘å…¬å¸åº”å°½å¯èƒ½å®žçŽ°è¿›è¡Œé€šå‘Šã€‚</div>\r\n <div>7.2\t如果用户è¿å或被视为è¿å本åè®®ä¸çš„å†…å®¹ï¼Œæˆ‘å…¬å¸æœ‰æƒåœ¨ä¸é€šçŸ¥ç”¨æˆ·çš„æƒ…况下立å³ç»ˆæ¢ç”¨æˆ·å·²å¼€é€šçš„æ‰€æœ‰ä¼šå‘˜æœåŠ¡ï¼Œä»¥åŠå–消用户的账户和使用æƒé™ï¼Œä½†ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚</div>\r\n <div>7.3\tæˆ‘å…¬å¸æœªè¡Œä½¿æˆ–延迟行使其在本å议下的æƒåˆ©å¹¶ä¸æž„æˆå¯¹è¿™äº›æƒåˆ©çš„æ”¾å¼ƒï¼Œè€Œå•一或部分行使其在本å议下的任何æƒåˆ©å¹¶ä¸æŽ’斥其任何其他æƒåˆ©çš„行使。我公å¸éšæ—¶æœ‰æƒè¦æ±‚用户继ç»å±¥è¡Œä¹‰åŠ¡å¹¶æ‰¿æ‹…ç›¸åº”çš„è¿çº¦è´£ä»»ã€‚</div>\r\n <b>å…«ã€\t产å“风险æç¤º</b>\r\n <div>8.1\t用户应充分认识到è¯åˆ¸æŠ•èµ„çš„é£Žé™©ï¼Œæœ¬äº§å“æä¾›çš„æ‰€æœ‰æ•°æ®ä¸Žä¿¡æ¯ï¼Œä»…ä¾›å‚考使用,用户ä¸åº”该将其视作具体投资å“ç§é€‰æ‹©/ä¹°å–æ—¶æœºçš„建议,或其他任何形å¼çš„æŠ•资建议,用户应在投资决ç–å‰åšå‡ºç†æ€§åˆ¤æ–,并自行承担投资风险。</div>\r\n <div>8.2\tè¯åˆ¸å¸‚场具有较强的风险,本产å“ä½œä¸ºæŠ•èµ„è¾…åŠ©å·¥å…·ï¼Œæ— æ³•è§„é¿å¸‚场系统性或éžç³»ç»Ÿæ€§é£Žé™©ã€‚本产å“对用户进行相关投资原ç†ã€æ–¹æ³•å’Œç†å¿µåŸ¹è®ï¼Œè¾…åŠ©ç”¨æˆ·è¿›è¡Œè‡ªä½æŠ•èµ„å†³ç–,ä¸èƒ½ä¿è¯ç”¨æˆ·ç›ˆåˆ©ï¼Œä¹Ÿä¸æ‰¿æ‹…用户的投资ä¸éå—æŸå¤±ã€‚</div>\r\n <b>ä¹ã€\t知识产æƒå£°æ˜Ž</b>\r\n <div>9.1\t本产å“的一切著作æƒã€å•†æ ‡æƒã€ä¸“利æƒã€å•†ä¸šç§˜å¯†ç‰çŸ¥è¯†äº§æƒï¼Œä»¥åŠç›¸å…³çš„æ‰€æœ‰ä¿¡æ¯å†…容å‡å—ä¸åŽäººæ°‘共和国法律法规和相应国际æ¡çº¦çš„ä¿æŠ¤ã€‚</div>\r\n <div>9.2\t用户ä¸å¾—对本产å“设计的相关网页ã€åº”用ã€è½¯ä»¶ç‰äº§å“进行åå‘工程ã€å呿±‡ç¼–ã€åå‘编译ç‰ã€‚</div>\r\n <div>9.3\tæœªç»æˆ‘公叿ˆ–相关æƒåˆ©äººæŽˆæƒï¼Œç”¨æˆ·ä¸å¾—为任何商业或éžå•†ä¸šç›®çš„自行或许å¯ä»»ä½•第三方实施ã€åˆ©ç”¨ã€è½¬è®©ä¸Šè¿°çŸ¥è¯†äº§æƒã€‚</div>\r\n <b>åã€\tå…¶ä»–</b>\r\n <div>10.1\t在法律法规å…许的范围内,本å议最终解释æƒè´µæˆ‘公叿‰€æœ‰ã€‚</div>\r\n <div>10.2\t本åè®®çš„è®¢ç«‹ã€æ‰§è¡Œã€è§£é‡ŠåŠäº‰è®®çš„解决å‡åº”使用ä¸åŽäººæ°‘共和国法律并接å—ä¸åŽäººæ°‘å…±å’Œå›½æ³•é™¢ç®¡è¾–ã€‚å¦‚åŒæ–¹å°±æœ¬å议内容或其执行å‘ç”Ÿä»»ä½•äº‰è®®ï¼ŒåŒæ–¹åº”å°½é‡å‹å¥½å商解决;å商䏿ˆæ—¶ï¼Œä»»ä½•一方å‡å¯å‘æˆ‘å…¬å¸æ‰€åœ¨åœ°çš„人民法院æèµ·è¯‰è®¼ã€‚</div>\r\n <div>10.3\t如果本åè®®ä¸çš„ä»»ä½•æ¡æ¬¾æ— è®ºå› ä½•ç§åŽŸå› å®Œå…¨æˆ–éƒ¨åˆ†æ— æ•ˆæˆ–ä¸å…·æœ‰æ‰§è¡ŒåŠ›ï¼Œæœ¬åè®®çš„å…¶ä½™æ¡æ¬¾ä»åº”有效并且有约æŸåŠ›ã€‚</div>\r\n\r\n </div>\r\n </Modal>\r\n }\r\n\r\n render() {\r\n const { agreement, handleAgreementChange, isGetCaptcha, captchaWaiting, getCaptcha, count, registered, handleSubmit, form } = this.props;\r\n const { getFieldDecorator, getFieldsError } = form;\r\n let { emailDataSource, email, captcha, password, promoCode } = this.state;\r\n\r\n let isDisabled = email === '' || captcha === '' || password === '';\r\n if (!isDisabled) {\r\n isDisabled = agreement ? false : true;\r\n if (!isDisabled) {\r\n isDisabled = registered ? registered : (hasErrors(getFieldsError()))\r\n }\r\n }\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} className='register-form'>\r\n {this.renderProtocol()}\r\n <Form.Item>\r\n {getFieldDecorator('registerEmail', {\r\n initialValue: email,\r\n rules: [\r\n { type: 'email', message: 'The input is not valid Email.', },\r\n { required: true, message: 'Please input the email address.' },\r\n { min: 5, message: languageMessages['email.min'] },\r\n { max: 20, message: languageMessages['email.max'] }\r\n ],\r\n })(<AutoComplete\r\n dataSource={emailDataSource}\r\n onChange={this.handleEmailChange}\r\n getPopupContainer={trigger => trigger.parentNode}\r\n placeholder=\"Email address\"\r\n autoComplete={'new-email'}\r\n />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={13}>\r\n {getFieldDecorator('captcha', {\r\n initialValue: captcha,\r\n rules: [{ required: true, message: languageMessages['please.input.captcha'] }],\r\n })(<Input placeholder={languageMessages['email.captcha']} onChange={this.handleCaptchaChange} autoComplete={'new-captcha'} />)}\r\n </Col>\r\n <Col span={11}>\r\n {isGetCaptcha ? (<Button loading={captchaWaiting} onClick={getCaptcha}>{languageMessages['intl.register.getCaptcha']}</Button>) : (<Button disabled onClick={getCaptcha}>{count}s</Button>)}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('password', {\r\n initialValue: password,\r\n rules: [\r\n { required: true, message: languageMessages['please.input.password'] },\r\n { min: 6, message: languageMessages['password.min'] },\r\n { max: 16, message: languageMessages['password.max'] },\r\n { pattern: /^(?![^a-zA-Z]+$)(?!\\D+$)/, message: languageMessages['password.required.format'] }\r\n ],\r\n })(<Input.Password prefix={<Icon type=\"lock\" style={{ color: 'rgba(0,0,0,.25)' }} />} placeholder={languageMessages['password.format']} onChange={this.handlePasswordChange} autoComplete={'new-password'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={13}>\r\n {getFieldDecorator('promoCode', {\r\n initialValue: promoCode,\r\n rules: [\r\n { pattern: /^[a-zA-Z0-9]{7}$/, message: languageMessages['promoCode.required.format'] }\r\n ],\r\n })(<Input placeholder={languageMessages['promoCode.format']} onChange={this.handlePromoCodeChange} autoComplete={'new-promoCode'} />)}\r\n </Col>\r\n <Col span={11}>\r\n {languageMessages['optional']}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n <div>\r\n {getFieldDecorator('agreement', {\r\n valuePropName: 'checked', initialValue: agreement,\r\n })(\r\n <Checkbox onChange={handleAgreementChange}>\r\n {languageMessages['intl.register.readAndAccept']} <a href=\"javascript:;\" onClick={this.showModal}>{languageMessages['intl.register.agreement']}</a>\r\n </Checkbox>,\r\n )}\r\n </div>\r\n <Button size='small' htmlType=\"submit\" className='register-form-button' loading={registered} disabled={isDisabled}>\r\n {registered ? languageMessages['intl.registered'] : languageMessages['intl.register']}\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n },\r\n);\r\n\r\nconst PhoneRegisterForm = Form.create({ name: 'phone_register_form' })(\r\n class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n visible: false,\r\n\r\n phone: '',\r\n captcha: '',\r\n password: '',\r\n promoCode: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.props.form.validateFields(['registerPhone', 'captcha', 'password'], { first:true}, (err, values) => {\r\n //});\r\n }\r\n\r\n handlePhoneChange = e => {\r\n this.setState({ phone: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handleCaptchaChange = e => {\r\n this.setState({ captcha: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePasswordChange = e => {\r\n this.setState({ password: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePromoCodeChange = e => {\r\n this.setState({ promoCode: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n showModal = () => {\r\n this.setState({\r\n visible: true,\r\n });\r\n };\r\n\r\n handleOk = () => {\r\n this.setState({\r\n visible: false,\r\n });\r\n };\r\n\r\n handleCancel = () => {\r\n this.setState({\r\n visible: false,\r\n });\r\n };\r\n\r\n renderProtocol() {\r\n return <Modal title={languageMessages['protocol']}\r\n style={{ top: 20 }}\r\n className='common-protocol-modal'\r\n visible={this.state.visible}\r\n onOk={this.handleOk}\r\n onCancel={this.handleCancel}\r\n footer={[\r\n <Button key=\"ok\" type=\"primary\" onClick={this.handleOk}>{languageMessages['close']}</Button>]}\r\n >\r\n <div className='common-protocol-class'>\r\n <b>一ã€\tåè®®ç¡®è®¤åŠæŽ¥å—</b>\r\n <div>1.1\t本å议是深圳宽投信æ¯ç§‘技有é™å…¬å¸ï¼ˆä»¥ä¸‹ç®€ç§°â€œæˆ‘å…¬å¸â€ï¼‰ä¸Žç”¨æˆ·å°±ä¼šå‘˜æœåŠ¡æ‰€è®¢ç«‹çš„å议(以下简称“本åè®®â€ï¼‰ã€‚本åè®®æè¿°æˆ‘å…¬å¸ä¸Žç”¨æˆ·ä¹‹é—´å…³äºŽè½¯ä»¶è®¸å¯ã€æœåŠ¡ä½¿ç”¨åŠç›¸å…³æ–¹é¢çš„æƒåˆ©ä¹‰åŠ¡ã€‚â€œç”¨æˆ·â€æˆ–â€œæ‚¨â€æ˜¯æŒ‡äº«å—æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡çš„ä¸ªäººæˆ–å•一实体。本åè®®æž„æˆæ‚¨ï¼ˆæ— 论个人或者å•ä½ï¼‰ä½¿ç”¨æˆ‘公叿‰€æä¾›çš„会员æœåŠ¡ä¹‹å…ˆå†³æ¡ä»¶ï¼Œé™¤éžæ‚¨æŽ¥å—本å议的æœåŠ¡æ¡æ¬¾ï¼Œå¦åˆ™æ‚¨æ— æƒä½¿ç”¨æœ¬å议的相关æœåŠ¡ã€‚æ‚¨çš„ä½¿ç”¨è¡Œä¸ºå°†è§†ä¸ºåŒæ„æŽ¥å—æœ¬åè®®å„é¡¹æ¡æ¬¾çš„约æŸã€‚</div>\r\n <div>1.2\tæˆ‘å…¬å¸æœ‰æƒé𿗶坹æœåŠ¡æ¡æ¬¾è¿›è¡Œä¿®æ”¹ï¼Œä¸€æ—¦æœåŠ¡æ¡æ¬¾å‘ç”Ÿå˜æ›´å’Œä¿®æ”¹ï¼Œæˆ‘å…¬å¸å°†åœ¨ç›¸å…³é¡µé¢ä¸Šæç¤ºä¿®æ”¹çš„内容;如果您ä¸åŒæ„本å议的修改,å¯ä»¥å–消已ç»èŽ·å–的会员æœåŠ¡å¹¶åœæ¢ä½¿ç”¨ï¼›å¦‚果您继ç»ä½¿ç”¨æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡ï¼Œåˆ™è§†ä¸ºæ‚¨å·²æŽ¥å—æœ¬å议的全部修改。</div>\r\n <div>1.3\tè¯·æ‚¨å®¡é˜…å¹¶æŽ¥å—æˆ–䏿ޥ嗿œ¬å议,未æˆå¹´äººåº”在法定监护人陪åŒä¸‹å®¡é˜…和履行,未æˆå¹´äººè¡Œä½¿å’Œå±¥è¡Œæœ¬å议项下的æƒåˆ©å’Œä¹‰åŠ¡è§†ä¸ºå·²èŽ·å¾—äº†æ³•å®šç›‘æŠ¤äººçš„è®¤å¯ï¼Œæ‚¨åœ¨äº«å—æˆ‘å…¬å¸æä¾›çš„ä¼šå‘˜æœåŠ¡æ—¶å¿…é¡»å®Œå…¨ã€ä¸¥æ ¼éµå®ˆæœ¬å议的æœåŠ¡æ¡æ¬¾ã€‚</div>\r\n <b>二ã€\tæœåŠ¡è¯´æ˜Ž</b>\r\n <div>2.1\tæˆ‘å…¬å¸æœ‰å¯¹ç”¨æˆ·ç½‘上一切活动的监ç£ã€æç¤ºã€æ£€æŸ¥çš„æƒåˆ©ï¼Œå¦‚æžœç”¨æˆ·çš„è¡Œä¸ºè¿å有关法律法规或è¿å本å议的约定,我公å¸äº«æœ‰è¦æ±‚å…¶çº æ£å¹¶è¿½ç©¶å…¶è´£ä»»ç‰æƒåˆ©ã€‚</div>\r\n <div>2.2\t全部会员æœåŠ¡å‡ä»…é™äºŽç”¨æˆ·åœ¨å½“å‰å¹³å°ä½¿ç”¨ï¼Œä»»ä½•ä»¥æ¶æ„ç ´è§£ç‰éžæ³•手段将æœåŠ¡å†…å®¹ä¸Žå¹³å°åˆ†ç¦»çš„行为,å‡ä¸å±žäºŽæœ¬åè®®ä¸çº¦å®šçš„æœåŠ¡ã€‚ç”±æ¤å¼•èµ·çš„ä¸€åˆ‡æ³•å¾‹åŽæžœç”±è¡Œä¸ºäººè´Ÿè´£ï¼Œæˆ‘å…¬å¸ä¾æ³•追究行为人的法律责任。</div>\r\n <div>2.3\t当您使用å„å•项特选æœåŠ¡æ—¶ï¼Œæ‚¨çš„ä½¿ç”¨è¡Œä¸ºè§†ä¸ºå¯¹å…¶å„å•项会员æœåŠ¡çš„æœåŠ¡æ¡æ¬¾ä»¥åŠæˆ‘å…¬å¸åœ¨è¯¥å•项会员æœåŠ¡ä¸å‘出å„ç±»å…¬å‘Šçš„åŒæ„。</div>\r\n <div>2.4\tæ‚¨æ˜Žç¡®äº†è§£å¹¶åŒæ„,会员æœåŠ¡çš„ä»˜è´¹æ–¹å¼ä¸ºä»£æ”¶è´¹è¿è¥å•†æ‰˜æ”¶çš„付款方å¼ï¼Œæ‚¨é€šè¿‡æ¤ç§ä»˜è´¹æ–¹å¼ä»˜è´¹å¯èƒ½å˜åœ¨ä¸€å®šçš„商业风险,包括但ä¸é™äºŽä¸æ³•分å利用账户或银行å¡ç‰æœ‰ä»·å¡ç‰è¿›è¡Œè¿æ³•活动,该风险å‡ä¼šç»™æ‚¨é€ æˆç›¸åº”çš„ç»æµŽæŸå¤±ã€‚您应自行承担å‘ä¾µæƒæ–¹è¿½ç©¶ä¾µæƒè´£ä»»å’Œè¿½ç©¶è´£ä»»ä¸èƒ½çš„åŽæžœã€‚</div>\r\n <div>2.5\t您应自行负责妥善地ä¿ç®¡ã€ä½¿ç”¨ã€ç»´æŠ¤ç”³è¯·å–得的账户ã€è´¦æˆ·ä¿¡æ¯åŠå¯†ç 。您应对账户信æ¯åŠå¯†ç 采å–å¿…è¦ä¸”有效的ä¿å¯†æŽªæ–½ã€‚éžæˆ‘å…¬å¸åŽŸå› è‡´ä½¿æ‚¨çš„è´¦æˆ·å¯†ç æ³„露以åŠå› 您ä¿ç®¡ã€ä½¿ç”¨ã€ç»´æŠ¤ä¸å½“é€ æˆæŸå¤±çš„ï¼Œæˆ‘å…¬å¸æ— éœ€æ‰¿æ‹…ä¸Žæ¤æœ‰å…³çš„任何责任。</div>\r\n <div>2.6\t我公å¸ä¸å¯¹æ‚¨å› 第三方的行为或ä¸ä½œä¸ºé€ æˆçš„æŸå¤±æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽæ”¯ä»˜æœåŠ¡å’Œç½‘ç»œæŽ¥å…¥æœåŠ¡ã€ä»»æ„第三方的侵æƒè¡Œä¸ºã€‚</div>\r\n <b>三ã€\tæœåŠ¡å¼€é€šåŠæŸ¥è¯¢</b>\r\n <div>3.1\tæœªæ¥æ–°å¢žçš„æ¸ é“开通会员æœåŠ¡ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽï¼šç¬¬ä¸‰æ–¹æ”¯ä»˜ã€ç½‘é“¶æ”¯ä»˜ã€æ‰‹æœºæ”¯ä»˜ç‰æ–¹å¼ã€‚在您使用æŸç§å…·ä½“æ–¹å¼å¼€é€šä¼šå‘˜æœåŠ¡æ—¶ï¼Œé¡»é˜…è¯»å¹¶ç¡®è®¤æŽ¥å—相关的æœåŠ¡æ¡æ¬¾å’Œä½¿ç”¨æ–¹æ³•。</div>\r\n <div>3.2\t会员æœåŠ¡çš„èµ„è´¹æ ‡å‡†ä»¥æœ¬äº§å“䏿 ‡æ˜Žçš„è¯¦ç»†èµ„è´¹æ ‡å‡†ä¸ºå‡†ï¼Œæˆ‘å…¬å¸æœ‰æƒåŸºäºŽè‡ªèº«ä¸šåŠ¡å‘展需è¦å˜æ›´èµ„è´¹æ ‡å‡†ï¼Œä½†æˆ‘å…¬å¸ä¼šæ ¹æ®å®žé™…è¿è¥æƒ…况对ä¸åŒé˜¶æ®µå·²å¼€é€šä¼šå‘˜æœåС䏔æŒç»æœ‰æ•ˆçš„用户给予ç»è´¹ã€å‡çº§æ–¹é¢çš„ä¸åŒèµ„è´¹ä¼˜æƒ ï¼Œå…·ä½“ä¼˜æƒ æ”¿ç–以本产å“ä¸ç›¸å…³é¡µé¢çš„公告内容为准。</div>\r\n <div>3.3\t一旦您开通会员æœåŠ¡ï¼Œå³è§†ä¸ºå…¶è®¤å¯è¯¥é¡¹æœåŠ¡æ ‡æ˜Žçš„ä»·æ ¼ï¼›ä¼šå‘˜æœåŠ¡å¼€é€šæˆåŠŸåŽï¼Œè¯¥é¡¹æœåŠ¡å³ä½¿ç”Ÿæ•ˆã€‚</div>\r\n <div>3.4\t会员æœåŠ¡å¼€é€šåŽï¼Œæ‚¨æœ‰æƒåˆ©ä¸æŽ¥å—我公å¸çš„æœåŠ¡ï¼Œå¯ç”³è¯·å–消会员æœåŠ¡ï¼Œä½†ä¸èŽ·å¾—ä»»ä½•å·²ç¼´çº³çš„æœåŠ¡è´¹ç”¨çš„é€€è¿˜ã€‚</div>\r\n <b>å››ã€\tæœåŠ¡æœŸé™åŠæƒé™</b>\r\n <div>4.1\tæ¯é¡¹ä¼šå‘˜æœåС凿œ‰è‡ªå·±å•独的æœåŠ¡æœŸé™ï¼Œæ‚¨ä¸€æ—¦å¼€é€šä¼šå‘˜æœåŠ¡å³è§†ä¸ºè®¤å¯å…¶æœåŠ¡æœŸé™ã€‚</div>\r\n <div>4.2\tæ¯é¡¹ä¼šå‘˜æœåŠ¡çš„æœåŠ¡æœŸé™å‡ä»¥ç›¸åº”会员æœåС介ç»é¡µé¢ä¸æ ‡æ³¨çš„æœŸé™ä¸ºå‡†ã€‚如果您未在æœåŠ¡æœŸé™å†…使用会员æœåŠ¡ï¼Œäº¦å°†è§†ä¸ºå·²ä½¿ç”¨ï¼Œæˆ‘å…¬å¸æ¦‚ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚</div>\r\n <div>4.3\t您已开通的会员æœåŠ¡ä½¿ç”¨æœŸé™ä¸ä¼šå› å…¶åœ¨ä½¿ç”¨æœŸé—´çš„ä¸æ–ã€ç»ˆæ¢ç‰æƒ…况而延长。</div>\r\n <b>五ã€\t用户æƒåˆ©é™åˆ¶</b>\r\n <div>5.1\t会员æœåС仅é™äºŽå¼€é€šçš„è´¦å·è‡ªè¡Œä½¿ç”¨ï¼Œä¸”æœåŠ¡æœŸé™å†…ä¸èƒ½åœ¨ä¸åŒè´¦æˆ·ä¹‹é—´è½¬ç§»ï¼Œç¦æ¢å€Ÿç”¨ã€è½¬è®©æˆ–å”®å–,å¦åˆ™æˆ‘公叿œ‰æƒåœ¨æœªç»é€šçŸ¥çš„æƒ…况䏋喿¶ˆè½¬è®©è´¦æˆ·ã€å—让账户的会员æœåŠ¡èµ„æ ¼ï¼Œç”±æ¤å¸¦æ¥çš„æŸå¤±ç”±ç”¨æˆ·è‡ªè¡Œæ‰¿æ‹…ï¼Œæˆ‘å…¬å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <div>5.2\t用户ä¸å¾—以盗窃ã€åˆ©ç”¨ç³»ç»Ÿæ¼æ´žç‰éžæ³•途径,以åŠåœ¨æœªèŽ·æˆ‘å…¬å¸æŽˆæƒçš„éžæ³•å¹³å°ä¸ŠèŽ·å–æˆ–开通会员æœåŠ¡ï¼Œå¦åˆ™æˆ‘公叿œ‰æƒå–消其会员æœåŠ¡èµ„æ ¼ã€‚æœ‰æ¤å¼•å‘的问题由用户自行承担,我公å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <div>5.3\t用户ä¸å¾—ä½¿ç”¨å¸¦æœ‰éžæ³•ã€æ·«ç§½ã€æ±¡è¾±æˆ–人身攻击å«ä¹‰çš„头åƒã€æ˜µç§°æˆ–个人简介,一ç»å‘çŽ°ï¼Œæˆ‘å…¬å¸æœ‰æƒå–消其会员æœåŠ¡èµ„æ ¼è€Œæ— é¡»ç»™äºˆä»»ä½•è¡¥å¿ã€‚</div>\r\n <div>5.4\té™¤éžæˆ‘公叿å‰ä¹¦é¢è®¸å¯ï¼Œç¦æ¢å¤åˆ¶ã€ä¸‹è½½ã€ä¸Šä¼ ã€ä¿®æ”¹ã€å¼€å‘ã€è½¬è®©ã€é”€å”®ã€å±•示ã€ä¼ æ’æœåŠ¡å†…å®¹ï¼›ç¦æ¢åˆæˆã€åµŒå¥—ã€é“¾æŽ¥æœåŠ¡å†…å®¹ï¼›ç¦æ¢åˆ©ç”¨æœåŠ¡å†…å®¹è¿›è¡Œæ•™å¦æˆ–ç ”ç©¶ã€å•†ä¸šå¼€å‘æˆ–æŽ¨å¹¿ï¼›ç¦æ¢ä»¥å•†ä¸šç›®çš„使用æœåŠ¡å†…å®¹ï¼›åŒ…æ‹¬ä½†ä¸é™äºŽä¸‹åˆ—情况;</div>\r\n <div>5.4.1\tä¸å¾—é€šè¿‡éžæ³•手段对账户的æœåŠ¡æœŸé™ã€æ¶ˆè´¹é‡‘é¢ã€æŠµæ‰£ç§¯åˆ†ã€äº¤æ˜“状æ€è¿›è¡Œä¿®æ”¹ï¼Œæˆ–ç”¨éžæ³•çš„æ–¹å¼æˆ–ä¸ºäº†éžæ³•的目的使用已开通的æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.2\tä¸å¾—å°†è´¦æˆ·æœ‰å¿æˆ–æ— å¿æä¾›ç»™ä»»ä½•ç¬¬ä¸‰æ–¹ï¼Œå¹¶å…许其通过该账户使用éžå…¶å¼€é€šçš„æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.3\tä¸å¾—å°†æœåС内容å¤åˆ¶ã€é”€å”®ã€å‡ºç§Ÿæˆ–授æƒç»™ä»»ä½•第三方。</div>\r\n <div>5.4.4\tä¸å¾—主动对我公å¸ç”¨äºŽæœåŠ¡å†…å®¹çš„ä»»ä½•å®‰å…¨æŽªæ–½æŠ€æœ¯è¿›è¡Œç ´è§£ã€æ›´æ”¹ã€åæ“作ã€ç ´å或其他篡改,或å助他人进行上述行为。</div>\r\n <div>5.4.5\tä¸å¾—é€šè¿‡éžæˆ‘å…¬å¸è®¤å¯çš„æ–¹å¼èŽ·å¾—æœåŠ¡å†…å®¹ï¼Œæˆ–è€…ç§»é™¤ã€ä¿®æ”¹ä»»ä½•æ ‡æ³¨åœ¨æœåŠ¡å†…å®¹ä¸Šçš„å¹¿å‘Šã€å•†æ ‡ã€åªæ˜¯äº§æƒæˆ–其他专有æƒå£°æ˜Žã€‚</div>\r\n <div>5.4.6\tä¸å¾—采用收费或å…费的方å¼ï¼Œå…¨éƒ¨æˆ–部分在任何场åˆå±•示æœåŠ¡å†…å®¹ã€‚</div>\r\n <div>5.4.7\tä¸å¾—æŸå®³ç¬¬ä¸‰æ–¹åˆ©ç›Šã€æˆ–通过当å‰å¹³å°æ”¶é›†ç¬¬ä¸‰æ–¹èµ„料信æ¯ã€ç ´å或盗å–第三方账户,å‘é€è¯ˆéª—邮件和垃圾邮件ç‰éžæ³•ä¿¡æ¯ï¼Œä¾µçŠ¯ç¬¬ä¸‰æ–¹åˆæ³•æƒç›Šï¼ŒåŒ…括但ä¸é™äºŽéšç§æƒã€çŸ¥è¯†äº§æƒã€è´¢äº§æƒç‰ã€‚</div>\r\n <div>5.5\t我公å¸å¯ä»¥å•æ–¹é¢åˆ¤æ–用户是å¦è¿å法律法规规定或è¿å本å议,并å¯ä»¥å•æ–¹é¢é€‰æ‹©ä¸€é¡¹æˆ–å¤šé¡¹å¤„ç†æ–¹å¼1)通知2ï¼‰ä¸æ–æˆ–ç»ˆæ¢æœåŠ¡3ï¼‰è¦æ±‚è¿çº¦æ–¹æˆ–ä¾µæƒæ–¹èµ”å¿æŸå¤±4ï¼‰å¤„ä»¥ç½šæ¬¾ã€‚ç”¨æˆ·åŒæ„一旦å‘生å‰è¿°æƒ…å†µï¼Œå°†æŽ¥å—æˆ‘们公å¸çš„å†³å®šï¼Œå¹¶åŒæ„èµ”å¿æˆ‘å…¬å¸åŠå…¶ä»–å—æŸå®³æ–¹çš„æŸå¤±ã€‚</div>\r\n <b>å…ã€\tå˜æ›´åŠå…è´£æ¡æ¬¾</b>\r\n <div>6.1\t我公å¸å¯¹ä¼šå‘˜æœåŠ¡çš„ä½¿ç”¨æœŸé™ã€è´ä¹°ä»·æ ¼ä¿ç•™éšæ—¶å˜æ›´çš„æƒåˆ©ï¼Œè€Œä¸éœ€é€šçŸ¥ç”¨æˆ·ã€‚对于所有会员æœåŠ¡çš„ä¸æ–或终æ¢è€Œé€ æˆçš„任何æŸå¤±ï¼Œæˆ‘公叿— 需对任何第三方承担任何责任。</div>\r\n <div>6.2\t鉴于网络æœåŠ¡çš„ç‰¹æ®Šæ€§ï¼Œç”¨æˆ·åŒæ„æˆ‘å…¬å¸æœ‰æƒéšæ—¶å˜æ›´ã€ä¸æ–或终æ¢éƒ¨åˆ†æˆ–全部的网络æœåŠ¡ã€‚æˆ‘å…¬å¸ä¿ç•™éšæ—¶ä¿®æ”¹æˆ–ä¸æ–会员æœåŠ¡è€Œä¸éœ€é€šçŸ¥ç”¨æˆ·çš„æƒåˆ©ï¼Œå¯¹äºŽæ‰€æœ‰ä¼šå‘˜æœåŠ¡çš„ä¸æ–或终æ¢è€Œé€ æˆçš„任何æŸå¤±ï¼Œæˆ‘公叿— 需对任何第三方承担任何责任。</div>\r\n <div>6.3\t用户开通的会员æœåŠ¡ä½¿ç”¨æœŸé™ä¸åŒ…å«è§£å†³æ•…éšœã€æœåŠ¡å™¨ç»´ä¿®ã€è°ƒæ•´ã€å‡çº§ç‰æ‰€éœ€ç”¨çš„åˆç†æ—¶é—´ï¼Œå¯¹ä¸Šè¿°æƒ…况所需用的时间我公å¸ä¸äºˆè¡¥å¿å¹¶ä¿ç•™è§£é‡Šæƒã€‚</div>\r\n <div>6.4\tç”¨æˆ·åœ¨ä½¿ç”¨æˆ‘å…¬å¸æ‰€æä¾›çš„会员æœåŠ¡æ—¶ï¼Œå¦‚æžœéå—任何人身或财务的æŸå¤±ã€æŸå®³æˆ–伤害,ä¸è®ºåŽŸå› å¦‚ä½•ï¼Œæˆ‘å…¬å¸å‡ä¸è´Ÿè´£ä»»ã€‚由于用户将个人密ç 告知他人或与他人共享注册账户,由æ¤å¯¼è‡´çš„任何个人资料泄露,我公å¸ä¸è´Ÿä»»ä½•责任。</div>\r\n <b>七ã€\t䏿–åŠç»ˆæ¢æœåŠ¡</b>\r\n <div>7.1\tå¯¹äºŽå› æœåŠ¡å™¨æ»æœºã€æœåŠ¡å™¨ç»´ä¿®ã€ç½‘ç»œæ•…éšœã€æ•°æ®åº“æ•…éšœã€äº§å“å‡çº§è°ƒæ•´ç‰é—®é¢˜ï¼Œæˆ–å…¶ä»–ä¸å¯æŠ—拒的事由,包括但ä¸é™äºŽæ”¿åºœè¡Œä¸ºã€è‡ªç„¶ç¾å®³ã€é»‘客攻击ç‰é€ æˆçš„æœåŠ¡ä¸æ–,和对用户个人数æ®åŠèµ„æ–™é€ æˆçš„æŸå¤±ï¼Œæˆ‘å…¬å¸ä¸æ‰¿æ‹…ç”±æ¤å¯¹ç”¨æˆ·é€ æˆçš„任何æŸå¤±ï¼Œå¹¶ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚ä½†æˆ‘å…¬å¸åº”å°½å¯èƒ½å®žçŽ°è¿›è¡Œé€šå‘Šã€‚</div>\r\n <div>7.2\t如果用户è¿å或被视为è¿å本åè®®ä¸çš„å†…å®¹ï¼Œæˆ‘å…¬å¸æœ‰æƒåœ¨ä¸é€šçŸ¥ç”¨æˆ·çš„æƒ…况下立å³ç»ˆæ¢ç”¨æˆ·å·²å¼€é€šçš„æ‰€æœ‰ä¼šå‘˜æœåŠ¡ï¼Œä»¥åŠå–消用户的账户和使用æƒé™ï¼Œä½†ä¸é€€è¿˜ä»»ä½•已缴纳的æœåŠ¡è´¹ç”¨ã€‚</div>\r\n <div>7.3\tæˆ‘å…¬å¸æœªè¡Œä½¿æˆ–延迟行使其在本å议下的æƒåˆ©å¹¶ä¸æž„æˆå¯¹è¿™äº›æƒåˆ©çš„æ”¾å¼ƒï¼Œè€Œå•一或部分行使其在本å议下的任何æƒåˆ©å¹¶ä¸æŽ’斥其任何其他æƒåˆ©çš„行使。我公å¸éšæ—¶æœ‰æƒè¦æ±‚用户继ç»å±¥è¡Œä¹‰åŠ¡å¹¶æ‰¿æ‹…ç›¸åº”çš„è¿çº¦è´£ä»»ã€‚</div>\r\n <b>å…«ã€\t产å“风险æç¤º</b>\r\n <div>8.1\t用户应充分认识到è¯åˆ¸æŠ•èµ„çš„é£Žé™©ï¼Œæœ¬äº§å“æä¾›çš„æ‰€æœ‰æ•°æ®ä¸Žä¿¡æ¯ï¼Œä»…ä¾›å‚考使用,用户ä¸åº”该将其视作具体投资å“ç§é€‰æ‹©/ä¹°å–æ—¶æœºçš„建议,或其他任何形å¼çš„æŠ•资建议,用户应在投资决ç–å‰åšå‡ºç†æ€§åˆ¤æ–,并自行承担投资风险。</div>\r\n <div>8.2\tè¯åˆ¸å¸‚场具有较强的风险,本产å“ä½œä¸ºæŠ•èµ„è¾…åŠ©å·¥å…·ï¼Œæ— æ³•è§„é¿å¸‚场系统性或éžç³»ç»Ÿæ€§é£Žé™©ã€‚本产å“对用户进行相关投资原ç†ã€æ–¹æ³•å’Œç†å¿µåŸ¹è®ï¼Œè¾…åŠ©ç”¨æˆ·è¿›è¡Œè‡ªä½æŠ•èµ„å†³ç–,ä¸èƒ½ä¿è¯ç”¨æˆ·ç›ˆåˆ©ï¼Œä¹Ÿä¸æ‰¿æ‹…用户的投资ä¸éå—æŸå¤±ã€‚</div>\r\n <b>ä¹ã€\t知识产æƒå£°æ˜Ž</b>\r\n <div>9.1\t本产å“的一切著作æƒã€å•†æ ‡æƒã€ä¸“利æƒã€å•†ä¸šç§˜å¯†ç‰çŸ¥è¯†äº§æƒï¼Œä»¥åŠç›¸å…³çš„æ‰€æœ‰ä¿¡æ¯å†…容å‡å—ä¸åŽäººæ°‘共和国法律法规和相应国际æ¡çº¦çš„ä¿æŠ¤ã€‚</div>\r\n <div>9.2\t用户ä¸å¾—对本产å“设计的相关网页ã€åº”用ã€è½¯ä»¶ç‰äº§å“进行åå‘工程ã€å呿±‡ç¼–ã€åå‘编译ç‰ã€‚</div>\r\n <div>9.3\tæœªç»æˆ‘公叿ˆ–相关æƒåˆ©äººæŽˆæƒï¼Œç”¨æˆ·ä¸å¾—为任何商业或éžå•†ä¸šç›®çš„自行或许å¯ä»»ä½•第三方实施ã€åˆ©ç”¨ã€è½¬è®©ä¸Šè¿°çŸ¥è¯†äº§æƒã€‚</div>\r\n <b>åã€\tå…¶ä»–</b>\r\n <div>10.1\t在法律法规å…许的范围内,本å议最终解释æƒè´µæˆ‘公叿‰€æœ‰ã€‚</div>\r\n <div>10.2\t本åè®®çš„è®¢ç«‹ã€æ‰§è¡Œã€è§£é‡ŠåŠäº‰è®®çš„解决å‡åº”使用ä¸åŽäººæ°‘共和国法律并接å—ä¸åŽäººæ°‘å…±å’Œå›½æ³•é™¢ç®¡è¾–ã€‚å¦‚åŒæ–¹å°±æœ¬å议内容或其执行å‘ç”Ÿä»»ä½•äº‰è®®ï¼ŒåŒæ–¹åº”å°½é‡å‹å¥½å商解决;å商䏿ˆæ—¶ï¼Œä»»ä½•一方å‡å¯å‘æˆ‘å…¬å¸æ‰€åœ¨åœ°çš„人民法院æèµ·è¯‰è®¼ã€‚</div>\r\n <div>10.3\t如果本åè®®ä¸çš„ä»»ä½•æ¡æ¬¾æ— è®ºå› ä½•ç§åŽŸå› å®Œå…¨æˆ–éƒ¨åˆ†æ— æ•ˆæˆ–ä¸å…·æœ‰æ‰§è¡ŒåŠ›ï¼Œæœ¬åè®®çš„å…¶ä½™æ¡æ¬¾ä»åº”有效并且有约æŸåŠ›ã€‚</div>\r\n\r\n </div>\r\n </Modal>\r\n }\r\n\r\n render() {\r\n const { prefix, phoneRegExp, phonePlaceholder, handlePrefixSelector,\r\n agreeSMS, handleAgreeSMSChange, agreement, handleAgreementChange,\r\n isGetCaptcha, captchaWaiting, getCaptcha, count, registered, handleSubmit, form } = this.props;\r\n const { getFieldDecorator, getFieldsError } = form;\r\n let { phone, captcha, password, promoCode } = this.state;\r\n\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n var content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n\r\n const prefixSelector = getFieldDecorator('prefix', { initialValue: prefix })(\r\n <Select style={{ width: 120 }}\r\n optionLabelProp='label'\r\n dropdownMatchSelectWidth={false}\r\n dropdownClassName='common-login-prefix'\r\n dropdownStyle={{ zIndex: 1005, minWidth: 100 }}\r\n onChange={handlePrefixSelector}>\r\n {options}\r\n </Select>,\r\n );\r\n\r\n let isDisabled = phone === '' || captcha === '' || password === '';\r\n if (!isDisabled) {\r\n isDisabled = agreeSMS ? agreement ? false : true : true;\r\n if (!isDisabled) {\r\n isDisabled = registered ? registered : (hasErrors(getFieldsError()));\r\n }\r\n }\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} className='register-form'>\r\n {this.renderProtocol()}\r\n <Form.Item>\r\n {getFieldDecorator('registerPhone', {\r\n initialValue: phone,\r\n rules: [\r\n { required: true, message: languageMessages['please.input.phone'] },\r\n { pattern: phoneRegExp, message: languageMessages['phone.format.failed'] }\r\n ],\r\n })(<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder={phonePlaceholder} onChange={this.handlePhoneChange} autoComplete={'new-phone'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={13}>\r\n {getFieldDecorator('captcha', {\r\n initialValue: captcha,\r\n rules: [{ required: true, message: languageMessages['please.input.captcha'] }],\r\n })(<Input placeholder={languageMessages['phone.captcha']} onChange={this.handleCaptchaChange} autoComplete={'new-captcha'} />)}\r\n </Col>\r\n <Col span={11}>\r\n {isGetCaptcha ? (<Button loading={captchaWaiting} onClick={getCaptcha}>{languageMessages['intl.register.getCaptcha']}</Button>) : (<Button disabled onClick={getCaptcha}>{count}s</Button>)}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('password', {\r\n initialValue: password,\r\n rules: [\r\n { required: true, message: languageMessages['please.input.password'] },\r\n { min: 6, message: languageMessages['password.min'] },\r\n { max: 16, message: languageMessages['password.max'] },\r\n { pattern: /^(?![^a-zA-Z]+$)(?!\\D+$)/, message: languageMessages['password.required.format'] }\r\n ],\r\n })(<Input.Password prefix={<Icon type=\"lock\" style={{ color: 'rgba(0,0,0,.25)' }} />} placeholder={languageMessages['password.format']} onChange={this.handlePasswordChange} autoComplete={'new-password'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={13}>\r\n {getFieldDecorator('promoCode', {\r\n initialValue: promoCode,\r\n rules: [\r\n { pattern: /^[a-zA-Z0-9]{7}$/, message: languageMessages['promoCode.required.format'] }\r\n ],\r\n })(<Input placeholder={languageMessages['promoCode.format']} onChange={this.handlePromoCodeChange} autoComplete={'new-promoCode'} />)}\r\n </Col>\r\n <Col span={11}>\r\n {languageMessages['optional']}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <div className='register-form-item'>\r\n <Form.Item>\r\n <div>\r\n {getFieldDecorator('agreeSMS', {\r\n valuePropName: 'checked', initialValue: agreeSMS,\r\n })(\r\n <Checkbox onChange={handleAgreeSMSChange}>{'I agree to receive SMS for the provided mobile number.'}</Checkbox>,\r\n )}\r\n </div>\r\n </Form.Item>\r\n <Form.Item>\r\n <div>\r\n {getFieldDecorator('agreement', {\r\n valuePropName: 'checked', initialValue: agreement,\r\n })(\r\n <Checkbox onChange={handleAgreementChange}>\r\n {languageMessages['intl.register.readAndAccept']} <a href=\"javascript:;\" onClick={this.showModal}>{languageMessages['intl.register.agreement']}</a>\r\n </Checkbox>,\r\n )}\r\n </div>\r\n \r\n </Form.Item>\r\n </div>\r\n <Form.Item>\r\n <Button size='small' htmlType=\"submit\" className='register-form-button' loading={registered} disabled={isDisabled}>\r\n {registered ? languageMessages['intl.registered'] : languageMessages['intl.register']}\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n },\r\n);\r\n\r\nclass RegisterForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n registerMode: EMAIL,\r\n phoneRegExp: '',\r\n phonePlaceholder: '',\r\n\r\n prefix: window.webType,\r\n\r\n agreeSMS: true,\r\n agreement: true,\r\n\r\n captchaWaiting: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === this.state.prefix });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phonePlaceholder = languageMessages['phone.china.only'];\r\n if (window.webType !== 'CN') {\r\n phonePlaceholder = languageMessages['phone'];\r\n }\r\n\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n phonePlaceholder\r\n });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status } = props;\r\n\r\n switch (status) {\r\n case 'Get_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n case 'Get_Email_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getPhoneCaptcha = e => {\r\n e.preventDefault();\r\n let { isGetCaptcha } = this.props;\r\n this.phoneFormRef.props.form.validateFields(['registerPhone'], (err, values) => {\r\n if (!err) {\r\n if (isGetCaptcha) {\r\n var prefix = this.phoneFormRef.props.form.getFieldValue('prefix');\r\n this.setState({ captchaWaiting: true }, () => {\r\n //å‘逿‰‹æœºéªŒè¯ç \r\n this.props.dispatch({ type: \"action_phone_register_captcha\", payload: { UserName: values.registerPhone, Prefix: prefix } });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n getEmailCaptcha = e => {\r\n e.preventDefault();\r\n let { isGetCaptcha } = this.props;\r\n this.emailFormRef.props.form.validateFields(['registerEmail'], (err, values) => {\r\n if (!err) {\r\n if (isGetCaptcha) {\r\n this.setState({ captchaWaiting: true }, () => {\r\n //å‘é€é‚®ç®±éªŒè¯ç \r\n this.props.dispatch({ type: \"action_email_captcha\", payload: { Mode: 'register', Email: values.registerEmail } });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n handlePhoneSubmit = e => {\r\n e.preventDefault();\r\n this.phoneFormRef.props.form.validateFields((err, values) => {\r\n if (!err) {\r\n if (values.agreement && values.agreeSMS) {\r\n var requestData = {\r\n Mode: this.state.registerMode,\r\n UserName: values.registerPhone,\r\n Password: values.password,\r\n Captcha: values.captcha,\r\n Prefix: values.prefix,\r\n PromoCode: values.promoCode,\r\n Agreement: values.agreement,\r\n agreeSMS: values.agreeSMS,\r\n };\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Register', 'Register', values.phone]);\r\n\r\n this.props.dispatch({ type: \"action_register\", payload: requestData });\r\n }\r\n }\r\n });\r\n };\r\n\r\n handleEmailSubmit = e => {\r\n e.preventDefault();\r\n this.emailFormRef.props.form.validateFields((err, values) => {\r\n if (!err) {\r\n if (values.agreement) {\r\n var requestData = {\r\n Mode: this.state.registerMode,\r\n UserName: values.registerEmail,\r\n Password: values.password,\r\n Captcha: values.captcha,\r\n Prefix: values.prefix,\r\n PromoCode: values.promoCode,\r\n Agreement: values.agreement,\r\n };\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Register', 'Register', values.phone]);\r\n\r\n this.props.dispatch({ type: \"action_register\", payload: requestData });\r\n }\r\n }\r\n });\r\n };\r\n\r\n handlePrefixSelector = value => {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === value });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n }, () => {\r\n this.phoneFormRef.props.form.validateFields(['registerPhone', 'captcha', 'password'], { first: true }, (err, values) => {\r\n });\r\n });\r\n }\r\n\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n handleChange = () => {\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n handleAgreeSMSChange = (e) => {\r\n this.setState({\r\n agreeSMS: e.target.checked\r\n });\r\n }\r\n\r\n handleAgreementChange = (e) => {\r\n this.setState({\r\n agreement: e.target.checked\r\n });\r\n }\r\n\r\n SetPhoneFormRef = formRef => {\r\n this.phoneFormRef = formRef;\r\n }\r\n\r\n SetEmailFormRef = formRef => {\r\n this.emailFormRef = formRef;\r\n }\r\n\r\n onSwitchRegisterMode = value => {\r\n this.setState({ registerMode: value });\r\n }\r\n\r\n render() {\r\n let { registerMode, prefix, phoneRegExp, phonePlaceholder, agreeSMS, agreement, captchaWaiting } = this.state;\r\n\r\n return (\r\n <div className='login-register-card-class'>\r\n <Tabs size=\"small\" defaultActiveKey={registerMode} onChange={this.onSwitchRegisterMode}>\r\n <TabPane tab={languageMessages['intl.register.emailRegister']} key={EMAIL}>\r\n <EmailRegisterForm\r\n wrappedComponentRef={this.SetEmailFormRef}\r\n agreement={agreement}\r\n handleAgreementChange={this.handleAgreementChange}\r\n handleChange={this.handleChange}\r\n isGetCaptcha={this.props.isGetCaptcha}\r\n captchaWaiting={captchaWaiting}\r\n getCaptcha={this.getEmailCaptcha}\r\n count={this.props.count}\r\n registered={this.props.registered}\r\n handleSubmit={this.handleEmailSubmit}\r\n />\r\n </TabPane>\r\n <TabPane tab={languageMessages['intl.register.phoneRegister']} key={PHONE}>\r\n <PhoneRegisterForm\r\n wrappedComponentRef={this.SetPhoneFormRef}\r\n prefix={prefix}\r\n phoneRegExp={phoneRegExp}\r\n phonePlaceholder={phonePlaceholder}\r\n agreeSMS={agreeSMS}\r\n handleAgreeSMSChange={this.handleAgreeSMSChange}\r\n agreement={agreement}\r\n handleAgreementChange={this.handleAgreementChange}\r\n handleChange={this.handleChange}\r\n isGetCaptcha={this.props.isGetCaptcha}\r\n captchaWaiting={captchaWaiting}\r\n getCaptcha={this.getPhoneCaptcha}\r\n count={this.props.count}\r\n registered={this.props.registered}\r\n handleSubmit={this.handlePhoneSubmit}\r\n />\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport { RegisterForm as default };","import React, { Component } from 'react';\r\nimport { UserMenu, LoginRegisterButtons } from '../../components'\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, Menu, Row, Col, Modal, Alert, message, notification, Button } from 'antd';\r\nimport emitter from '../Evt.js';\r\n\r\nimport WrappedLoginForm from '../../pannels/form/LoginForm';\r\nimport WrappedRegisterForm from '../../pannels/form/RegisterForm';\r\n\r\nimport $ from 'jquery';\r\nwindow.jQuery = $;\r\nrequire('signalr');\r\n\r\nconst { Header } = Layout;\r\nconst SubMenu = Menu.SubMenu;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar hubConnection = null;\r\nvar hubProxy = null;\r\nvar isHubConnection = 0;\r\n\r\nvar testMode = false;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst loginSysMessageStatus = 'loginSysMessageStatus';\r\n\r\nlet headerTimer = null;\r\nclass HeaderPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n var auth = JSON.parse(localStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var current = sessionStorage.getItem(\"MainMenuSelectKey\") || 'chat';\r\n \r\n this.state = {\r\n current: current,\r\n userId: '',\r\n photo: '',\r\n\r\n loggedIn: false,\r\n\r\n modalVisible: false,\r\n isGetCaptcha: true,\r\n count: 60,\r\n code: '',\r\n message: '',\r\n logining: false,\r\n registered: false,\r\n\r\n alertVisible: false,\r\n hawkeye: {},\r\n\r\n orderVisible: false,\r\n order: {},\r\n\r\n showLogin: true,\r\n showRegister: false,\r\n showClass: 'login-register-btn-class',\r\n\r\n ...auth\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('callJump', (msg) => {\r\n this.setState({\r\n current: msg,\r\n });\r\n\r\n sessionStorage.setItem(\"MainMenuSelectKey\", msg);\r\n });\r\n\r\n emitter.addListener('callIntradayData', (symbol, period) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n // 没有登录\r\n } else {\r\n this.SendIntradayDataToService(user.username, symbol, period);\r\n }\r\n });\r\n\r\n emitter.addListener('HawkeyeConfirm', (hawkeyeId, confirmResult) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n // 没有登录\r\n } else {\r\n var txt = confirmResult === 0 ? languageMessages['ClosePendingOrder'] : languageMessages['PendingOrderHawkeye'];\r\n this.SendHawkeyeConfirm(user.username, hawkeyeId, confirmResult, txt);\r\n }\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n var userId = '';\r\n var photo = '';\r\n var loggedIn = false;\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username !== undefined) {\r\n userId = user.username;\r\n var timestamp = new Date().getTime();\r\n photo = user.photo ? user.photo + '?now=' + timestamp : '/static/photo/photo.png';\r\n loggedIn = true;\r\n\r\n if (isHubConnection !== 1) {\r\n if (!testMode) this.setupConnect();\r\n }\r\n }\r\n\r\n this.setState({\r\n userId: userId,\r\n photo: photo,\r\n loggedIn: loggedIn,\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.loggedIn) {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n if (hubConnection !== null) {\r\n hubConnection.stop();\r\n }\r\n\r\n this.setState({\r\n userId: '',\r\n photo: '',\r\n loggedIn: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (hubConnection !== null) {\r\n hubConnection.stop();\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, user, data } = props.member;\r\n var { count } = this.state;\r\n\r\n this.setState({\r\n code: '',\r\n message: '',\r\n logining: false,\r\n registered: false\r\n }, () => {\r\n var failStatus = props.fail.status !== undefined ? props.fail.status : '';\r\n if (failStatus === 'non_user') {\r\n sessionStorage.removeItem('auth');\r\n this.setState({\r\n modalVisible: true, loggedIn: false, userId: '', photo: '', showLogin: true,\r\n showRegister: false });\r\n } else {\r\n switch (status) {\r\n case 'Get_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n headerTimer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(headerTimer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://手机未注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['phone.not.register']\r\n });\r\n break;\r\n case 3://手机有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['phone.format.failed']\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'Get_Email_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n headerTimer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(headerTimer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://邮箱已注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.registered']\r\n });\r\n break;\r\n case 3://邮箱有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.format.failed']\r\n });\r\n break;\r\n }\r\n break;\r\n case 'Register_Success':\r\n if (headerTimer !== null) {\r\n clearInterval(headerTimer);\r\n }\r\n if (!testMode) {\r\n this.setupConnect();\r\n\r\n message.loading({ content: languageMessages['startConnectSysEngine'], key: loginSysMessageStatus, duration: 0 });\r\n\r\n var tn = sessionStorage.getItem(\"TriggerNumberCache\");\r\n if (tn > 0) this.openNotification(tn);\r\n }\r\n this.setState({ userId: user.username, photo: '/static/photo/photo.png', loggedIn: true, modalVisible: false }, () => {\r\n emitter.emit('initPage', isHubConnection);\r\n });\r\n break;\r\n case 'Login_Success':\r\n if (headerTimer !== null) {\r\n clearInterval(headerTimer);\r\n }\r\n if (!testMode) {\r\n this.setupConnect();\r\n\r\n message.loading({ content: languageMessages['startConnectSysEngine'], key: loginSysMessageStatus, duration: 0 });\r\n\r\n var tn = sessionStorage.getItem(\"TriggerNumberCache\");\r\n if (tn > 0) this.openNotification(tn);\r\n }\r\n var photo = user.photo ? user.photo + '?now=' + timestamp : '/static/photo/photo.png';\r\n this.setState({ userId: user.username, photo: photo, loggedIn: true, modalVisible: false }, () => {\r\n //var pathname = window.location.pathname;\r\n //sessionStorage.setItem('pathname', pathname);\r\n //history.replace(\"/blank\");\r\n emitter.emit('initPage', isHubConnection);\r\n });\r\n break;\r\n case 'update_user_success':\r\n if (user.photo !== undefined) {\r\n var photo = user.photo;\r\n var timestamp = new Date().getTime();\r\n photo = photo ? photo + '?now=' + timestamp : '/static/photo/photo.png';\r\n this.setState({ photo: photo });\r\n }\r\n break;\r\n case 'Logout_Success':\r\n this.setState({ userId: '', photo: '', loggedIn: false }, () => {\r\n // disconnection\r\n if (hubConnection !== null) {\r\n hubConnection.stop();\r\n }\r\n });\r\n break;\r\n case 'Logining':\r\n this.setState({\r\n logining: true,\r\n });\r\n break;\r\n case 'Registered':\r\n this.setState({\r\n registered: true,\r\n });\r\n break;\r\n case 'Login_Failed':\r\n if (headerTimer !== null) {\r\n clearInterval(headerTimer);\r\n }\r\n switch (state) {\r\n case 0:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['login.exception']\r\n });\r\n break;\r\n case 2:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['account.not.register']\r\n });\r\n break;\r\n case 3:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['account.exception']\r\n });\r\n break;\r\n case 4:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['password.or.verification.code.match.error']\r\n });\r\n break;\r\n case 5:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['user.account.has.expired']\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case \"Register_Failed\":\r\n if (headerTimer !== null) {\r\n clearInterval(headerTimer);\r\n }\r\n switch (state) {\r\n case 0:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['register.exception']\r\n });\r\n break;\r\n case 2:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['account.is.exist']\r\n });\r\n break;\r\n case 3:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['verification.code.matching.error']\r\n });\r\n break;\r\n case 4:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['register.failed']\r\n });\r\n break;\r\n case 5:\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['promoCode.error']\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'sendHubMessage':\r\n this.SendMessageToService(data.service, data.userId, data.msg);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n setupConnect() {\r\n var url = process.env.REACT_APP_HAWKEYE_BASE_URL + '/signalr';\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n hubConnection = $.hubConnection(url, { useDefaultPath: false, qs: { userId: user.username, password: user.password } });\r\n\r\n //hubConnection.logging = true;\r\n\r\n \r\n hubConnection.connectionSlow(function () {\r\n message.warn('We are currently experiencing difficulties with the connection.')\r\n });\r\n\r\n /**\r\n hubConnection.starting(function () {\r\n //console.log('starting');\r\n });\r\n\r\n hubConnection.received(function (message) {\r\n //console.log('received', message);\r\n });\r\n \r\n hubConnection.reconnecting(function () {\r\n //console.log('reconnecting');\r\n });\r\n\r\n hubConnection.reconnected(function () {\r\n //console.log('reconnected');\r\n });\r\n */\r\n\r\n hubConnection.stateChanged(function (data) {\r\n isHubConnection = data.newState;\r\n });\r\n\r\n hubConnection.disconnected(() => {\r\n if (this.state.loggedIn) {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username !== undefined) {\r\n setTimeout(function () {\r\n hubConnection.start()\r\n .done(function () {\r\n console.log('Connection started!');\r\n message.success({ content: languageMessages['connectToSysEngineSucc'], key: 'connectStatus' });\r\n })\r\n .fail(function (error) {\r\n message.error({ content: languageMessages['connectToSysEngineFail'], key: 'connectStatus', duration: 5});\r\n //console.log('Could not connect', error);\r\n });\r\n }, 5000);\r\n } else {\r\n this.setState({ userId: '', photo: '', loggedIn: false });\r\n }\r\n }\r\n });\r\n\r\n hubConnection.error(function (error) {\r\n //console.log('SignalR error', error);\r\n //message.error(languageMessages['connectToSysEngineError']);\r\n });\r\n\r\n hubProxy = hubConnection.createHubProxy('hubController');\r\n \r\n hubProxy.on('ReceiveLoginStatus', (userName, loginStatus) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n if (loginStatus == 1)\r\n message.success({ content: languageMessages['loginRequestSucc'], key: 'loginStatus', duration: 5 });\r\n else\r\n message.error({ content: languageMessages['logintRequestFail'], key: 'loginStatus', duration: 6 });\r\n }\r\n });\r\n hubProxy.on('ReceiveSmartHawkeyeMessage', (items, lastTimes) => {\r\n emitter.emit('submitHawkeye', lastTimes, items);\r\n });\r\n hubProxy.on('ReceiveFilterSuccMessage', (userName, status) => {\r\n //message.info('ReceiveFilterSuccMessage');\r\n //console.log('ReceiveFilterSuccMessage', status);\r\n });\r\n hubProxy.on('ReceiveFilterFailMessage', (userName, desc) => {\r\n message.error(strReplace(languageMessages['hawkeyeCondFail'], { '{cont}': desc }));\r\n //console.log('盯盘æ¡ä»¶æœ‰é”™è¯¯', desc);\r\n });\r\n hubProxy.on('ReceiveCancelHawkeyeMessage', (userName, hawkeyeId) => {\r\n //console.log('ReceiveCancelHawkeyeMessage', hawkeyeId);\r\n\r\n //è½¬å‘æ¶ˆæ¯\r\n //emitter.emit('callHawkeye', hawkeyeId,1);\r\n });\r\n hubProxy.on('ReceiveTriggerHawkeyeMessage', (hawkeye) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === hawkeye.UserName) {\r\n if (this.state.current === 'hawkeyeList') {\r\n emitter.emit('triggerHawkeye', hawkeye);\r\n }\r\n \r\n this.setState({ alertVisible: true, hawkeye });\r\n }\r\n });\r\n hubProxy.on('ReceiveOrderMessage', (userName, order) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n if (this.state.current === 'hawkeyeList' && order.Id !== undefined) {\r\n var hawkeyeIds = [order.Id || '0'];\r\n emitter.emit('callHawkeye', hawkeyeIds, 1);\r\n }\r\n\r\n this.setState({ orderVisible: true, order });\r\n }\r\n });\r\n\r\n hubProxy.on(\"ReceiveBacktestError\", (userName, backtestStatus, backtest) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n let callback = '';\r\n switch (backtest.Type) {\r\n case \"backtestStrategy\":\r\n callback = 'callBacktestError';\r\n break;\r\n case \"backtestGridStrategy\":\r\n callback = 'callBacktestGridError';\r\n break;\r\n case \"exploreQTGrid\":\r\n callback = 'callBacktestGridsError';\r\n break;\r\n case \"exploreGridStrategy\":\r\n callback = 'callOptimalGridError';\r\n break;\r\n case \"aiBatch\":\r\n callback = 'callBestFromBatchBacktestError';\r\n break;\r\n case \"optimalBatch\":\r\n callback = 'callOptimalBatchError';\r\n break;\r\n case \"aiOpt\":\r\n callback = 'callAIOptBacktestError';\r\n break;\r\n case \"optimalOpt\":\r\n callback = 'callOptimalOptError';\r\n break;\r\n case \"rollingBacktest\":\r\n callback = 'callRollingError';\r\n break;\r\n case \"porrtfolioBacktest\":\r\n callback = 'callPortfolioOptError';\r\n break;\r\n case \"porrtfolioOptBacktest\":\r\n callback = 'callPortfolioOptError';\r\n break;\r\n default:\r\n break;\r\n }\r\n if (callback !== '') {\r\n emitter.emit(callback, backtestStatus);\r\n }\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveBacktestLastTimes', (userName, items, lastTimes, backtest) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n let callback = '';\r\n switch (backtest.Type) {\r\n case \"backtestStrategy\":\r\n callback = 'callBacktestLastTimes';\r\n break;\r\n case \"backtestGridStrategy\":\r\n callback = 'callBacktestGridLastTimes';\r\n break;\r\n case \"exploreQTGrid\":\r\n callback = 'callBacktestGridsLastTimes';\r\n break;\r\n case \"exploreGridStrategy\":\r\n callback = 'callOptimalGridLastTimes';\r\n break;\r\n case \"aiBatch\":\r\n callback = 'callBestFromBatchBacktestLastTimes';\r\n break;\r\n case \"optimalBatch\":\r\n callback = 'callOptimalBatchLastTimes';\r\n break;\r\n case \"aiOpt\":\r\n callback = 'callAIOptBacktestLastTimes';\r\n break;\r\n case \"optimalOpt\":\r\n callback = 'callOptimalOptLastTimes';\r\n break;\r\n case \"rollingBacktest\":\r\n callback = 'callRollingLastTimes';\r\n break;\r\n case \"porrtfolioBacktest\":\r\n callback = 'callPortfolioOptLastTimes';\r\n break;\r\n case \"porrtfolioOptBacktest\":\r\n callback = 'callPortfolioOptLastTimes';\r\n break;\r\n default:\r\n break;\r\n }\r\n if (callback !== '') {\r\n emitter.emit(callback, lastTimes, items);\r\n\r\n if (callback == 'callRollingLastTimes') {\r\n message.success(languageMessages['queryRequestSucc']);\r\n } else {\r\n message.success(languageMessages['backtestRequestSucc']);\r\n }\r\n }\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveBacktestStatus', (userName, backtestStatus, backtest) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n let callback = '';\r\n switch (backtest.Type) {\r\n case \"backtestStrategy\":\r\n callback = 'callBacktestStatus';\r\n break;\r\n case \"backtestGridStrategy\":\r\n callback = 'callBacktestGridStatus';\r\n break;\r\n case \"exploreQTGrid\":\r\n callback = 'callBacktestGridsStatus';\r\n break;\r\n case \"exploreGridStrategy\":\r\n callback = 'callOptimalGridStatus';\r\n break;\r\n case \"aiBatch\":\r\n callback = 'callBestFromBatchBacktestStatus';\r\n break;\r\n case \"optimalBatch\":\r\n callback = 'callOptimalBatchStatus';\r\n break;\r\n case \"aiOpt\":\r\n callback = 'callAIOptBacktestStatus';\r\n break;\r\n case \"optimalOpt\":\r\n callback = 'callOptimalOptStatus';\r\n break;\r\n case \"rollingBacktest\":\r\n callback = 'callRollingStatus';\r\n break;\r\n default:\r\n break;\r\n }\r\n if (callback !== '') {\r\n emitter.emit(callback, backtestStatus);\r\n }\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveBacktestResult', (userName, backtestResult, backtest) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n let callback = '';\r\n switch (backtest.Type) {\r\n case \"backtestStrategy\":\r\n callback = 'callBacktestResult';\r\n break;\r\n case \"backtestGridStrategy\":\r\n callback = 'callBacktestGridResult';\r\n break;\r\n case \"exploreQTGrid\":\r\n callback = 'callBacktestGridsResult';\r\n break;\r\n case \"exploreGridStrategy\":\r\n callback = 'callOptimalGridResult';\r\n break;\r\n case \"aiBatch\":\r\n callback = 'callBestFromBatchBacktestResult';\r\n break;\r\n case \"optimalBatch\":\r\n callback = 'callOptimalBatchResult';\r\n break;\r\n case \"aiOpt\":\r\n callback = 'callAIOptBacktestResult';\r\n break;\r\n case \"optimalOpt\":\r\n callback = 'callOptimalOptResult';\r\n break;\r\n case \"rollingBacktest\":\r\n callback = 'callRollingResult';\r\n break;\r\n default:\r\n break;\r\n }\r\n if (callback !== '') {\r\n emitter.emit(callback, backtestResult, backtest);\r\n }\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveCustomSymbolGroups', (userName, symbolGroup) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callCustomSymbolGroups', symbolGroup);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveFilter', (userName, filterResult, filter) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callFilterRequestResult', filterResult, filter);\r\n }\r\n });\r\n \r\n hubProxy.on('ReceiveRemoveStrategy', (userName) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callRemoveStrategyResult');\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveSaveFilter', (userName, filterResult, filter, customStrategy) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callSaveFilterRequestResult', filterResult, filter, customStrategy);\r\n }\r\n });\r\n\r\n\r\n hubProxy.on('ReceiveFilterAlert', (userName, filterAlert) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n\r\n // ä¿å˜åˆ°sessioä¸\r\n let filterAlertsCache = JSON.parse(sessionStorage.getItem(\"FilterAlertsCache\") || '{}') || {};\r\n\r\n if (!filterAlertsCache.hasOwnProperty(filterAlert.fi)) {\r\n filterAlertsCache[filterAlert.fi] = [];\r\n }\r\n filterAlertsCache[filterAlert.fi].unshift(filterAlert);\r\n \r\n sessionStorage.setItem(\"FilterAlertsCache\", JSON.stringify(filterAlertsCache));\r\n\r\n let filterAlertCountsCache = JSON.parse(sessionStorage.getItem(\"FilterAlertCountsCache\") || '{}') || {};\r\n if (filterAlertCountsCache.hasOwnProperty(filterAlert.fi)) {\r\n filterAlertCountsCache[filterAlert.fi] += 1;\r\n } else {\r\n filterAlertCountsCache[filterAlert.fi] = 1;\r\n }\r\n sessionStorage.setItem(\"FilterAlertCountsCache\", JSON.stringify(filterAlertCountsCache));\r\n\r\n emitter.emit('callfilterAlertResult', filterAlert);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveScanAlert', (userName, scanAlert, permission, lastTimes) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callScanAlertResult', scanAlert, permission, lastTimes);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveScanResult', (userName, scanAlert) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callScanResult', scanAlert);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveDeployStrategy', (userName, status, deployStrategy) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callDeployStrategy', status, deployStrategy);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveSetStrategyStatus', (userName, status, strategyStatus) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callSetStrategyStatus', status, strategyStatus);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceivePortfolioOptStatus', (userName, status) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callPortfolioOptStatus', status);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceivePortfolioOptResult', (userName, result) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callPortfolioOptResult', result);\r\n }\r\n });\r\n\r\n hubProxy.on('ReceiveScanIntervalMessage', (userName, historicalDate) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === userName) {\r\n emitter.emit('callScanIntervalResult', historicalDate);\r\n }\r\n });\r\n\r\n hubConnection.start().done(function () {\r\n //console.log('Connection started!');\r\n message.success({ content: languageMessages['connectToSysEngineSucc'], key: loginSysMessageStatus });\r\n }).fail(function (error) {\r\n message.error({ content: languageMessages['connectToSysEngineFail'], key: loginSysMessageStatus, duration: 5 });\r\n //console.log('Could not connect', error);\r\n });\r\n }\r\n\r\n SendMessageToService(service, userId, msg) {\r\n var { current } = this.state;\r\n if (isHubConnection === 1) {\r\n hubProxy.invoke(service, userId, msg).done((status) => {\r\n switch (status) {\r\n case 1:\r\n if (service === 'SendHawkeyeCancel') {\r\n if (current === 'hawkeyeList') {\r\n var hawkeyeIds = msg.toString().split(',');\r\n emitter.emit('callHawkeye', hawkeyeIds, 2);\r\n }\r\n\r\n message.success(languageMessages['stopHawkeyeMsgSendSuccess']);\r\n } else if (service === 'SendHawkeye') {\r\n emitter.emit('submitHawkeye');\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.handleMyHawkeye}>{languageMessages['myHawkeye']}</a>\"</span>;\r\n this.timerModal(languageMessages['settingSuccess'], content);\r\n }\r\n break;\r\n case 2:\r\n if (service === 'SendHawkeyeCancel') {\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('callHawkeye', [], 0);\r\n }\r\n } else if (service === 'SendHawkeye') {\r\n emitter.emit('submitHawkeye');\r\n } else if (service === 'SendBacktest') {\r\n emitter.emit('callSendBacktestError');\r\n } else if (service === 'SendTrade') {\r\n emitter.emit('callSendTradeError', status);\r\n } else if (service === 'SendStrategyStatus') {\r\n emitter.emit('callSendStrategyStatusError', status);\r\n } else if (service === 'SendFilter' || service === 'SendScanFilter' || service === 'SendCustomSymbolGroups' || service === 'SendRemoveCustomStrategy') {\r\n emitter.emit('callSendError', status);\r\n } else if (service === 'startPortfolio' || service === 'startPortfolioOpt') {\r\n emitter.emit('callPortfolioOptError', status);\r\n }\r\n\r\n sessionStorage.removeItem('auth');\r\n this.setState({ modalVisible: true, loggedIn: false, userId: '', photo: '' });\r\n message.error(languageMessages['user.exception']);\r\n break;\r\n case 5:\r\n if (service === 'SendScanFilter') {\r\n \r\n }\r\n break;\r\n default:\r\n if (service === 'SendHawkeyeCancel') {\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('callHawkeye', [], 0);\r\n }\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': '' }));\r\n } else if (service === 'SendHawkeye') {\r\n emitter.emit('submitHawkeye');\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': '' }));\r\n } else if (service === 'SendBacktest') {\r\n emitter.emit('callSendBacktestError');\r\n //message.error(strReplace(languageMessages['sendFail'], { '{cont}': '' }));\r\n message.error(languageMessages['DisconnectSysEngineTryagain']);\r\n } else if (service === 'SendTrade') {\r\n emitter.emit('callSendTradeError', status);\r\n } else if (service === 'SendFilter' || service === 'SendScanFilter' || service === 'SendCustomSymbolGroups' || service === 'SendRemoveCustomStrategy') {\r\n emitter.emit('callSendError', status);\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': '' }));\r\n } else if (service === 'startPortfolio' || service === 'startPortfolioOpt') {\r\n emitter.emit('callPortfolioOptError', status);\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': '' }));\r\n }\r\n\r\n break;\r\n }\r\n }).fail((error) => {\r\n if (service === 'SendBacktest') {\r\n emitter.emit('callSendBacktestError');\r\n } else if (service === 'SendTrade') {\r\n emitter.emit('callSendTradeError', 0);\r\n } else if (service === 'SendStrategyStatus') {\r\n emitter.emit('callSendStrategyStatusError', 0);\r\n } else if (service === 'SendFilter' || service === 'SendScanFilter' || service === 'SendCustomSymbolGroups' || service === 'SendRemoveCustomStrategy') {\r\n emitter.emit('callSendError', 0);\r\n } else if (service === 'startPortfolio' || service === 'startPortfolioOpt') {\r\n emitter.emit('callPortfolioOptError', 0);\r\n }\r\n\r\n //console.log('Invocation of HubMessage failed. Error', error);\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': error }));\r\n });\r\n } else {\r\n if (service === 'SendHawkeyeCancel') {\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('callHawkeye', [], 0);\r\n }\r\n } else if (service === 'SendHawkeye') {\r\n emitter.emit('submitHawkeye');\r\n } else if (service === 'SendBacktest') {\r\n emitter.emit('callSendBacktestError');\r\n } else if (service === 'SendTrade') {\r\n emitter.emit('callSendTradeError', 0);\r\n } else if (service === 'SendStrategyStatus') {\r\n emitter.emit('callSendStrategyStatusError', 0);\r\n } else if (service === 'SendFilter' || service === 'SendScanFilter' || service === 'SendCustomSymbolGroups' || service === 'SendRemoveCustomStrategy') {\r\n emitter.emit('callSendError', 0);\r\n } else if (service === 'startPortfolio' || service === 'startPortfolioOpt') {\r\n emitter.emit('callPortfolioOptError', 0);\r\n }\r\n\r\n message.error(languageMessages['DisconnectSysEngineTryagain']);\r\n }\r\n }\r\n\r\n SendIntradayDataToService(userId, symbol, period) {\r\n if (isHubConnection === 1) {\r\n hubProxy.invoke('SendIntradayData', userId, symbol, period).done((res) => {\r\n if (res['status'] !== undefined) {\r\n var status = res['status'];\r\n switch (status) {\r\n case 0:\r\n break;\r\n case 1:\r\n if (res['hd'] !== undefined && res[\"pr\"] !== undefined) {\r\n emitter.emit('callTickData', res['hd'], res[\"pr\"]);\r\n }\r\n break;\r\n case 2:\r\n sessionStorage.removeItem('auth');\r\n this.setState({ modalVisible: true, loggedIn: false, userId: '', photo: '' });\r\n message.error(languageMessages['user.exception']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }).fail((error) => {\r\n //console.log('Invocation of HubMessage failed. Error', error);\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': error }));\r\n });\r\n } else {\r\n message.error(languageMessages['DisconnectSysEngineTryagain']);\r\n }\r\n }\r\n\r\n SendHawkeyeConfirm(userName, hawkeyeId, confirmResult, msg) {\r\n var { current } = this.state;\r\n if (isHubConnection === 1) {\r\n hubProxy.invoke('SendHawkeyeConfirm', userName, hawkeyeId, confirmResult).done(function (status) {\r\n var info = strReplace(languageMessages['sendFail'], { '{cont}': msg });\r\n switch (status) {\r\n case 1:\r\n info = languageMessages['applicationSubmitted'];\r\n if (current === 'hawkeyeList') {\r\n var hawkeyeIds = hawkeyeId.toString().split(',');\r\n emitter.emit('ConfirmHawkeye', hawkeyeIds, confirmResult);\r\n }\r\n message.success(info);\r\n break;\r\n case 2:\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('ConfirmHawkeye', [], 0);\r\n }\r\n sessionStorage.removeItem('auth');\r\n this.setState({ modalVisible: true, loggedIn: false, userId: '', photo: '' });\r\n info = languageMessages['user.exception'];\r\n message.error(info);\r\n break;\r\n default:\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('ConfirmHawkeye', [], 0);\r\n }\r\n message.error(info);\r\n break;\r\n }\r\n }).fail(function (error) {\r\n //console.log('Invocation of HubMessage failed. Error', error);\r\n message.error(strReplace(languageMessages['sendFail'], { '{cont}': error }));\r\n });\r\n } else {\r\n if (current === 'hawkeyeList') {\r\n emitter.emit('ConfirmHawkeye', [], 0);\r\n }\r\n\r\n message.error(languageMessages['DisconnectSysEngineTryagain']);\r\n }\r\n }\r\n\r\n openNotification = (num) => {\r\n const key = `open${Date.now()}`;\r\n const btn = <span>\r\n <Button size=\"small\" onClick={() => notification.close(key)}>{languageMessages['close']}</Button>\r\n <span style={{ padding: '0 5px' }}></span>\r\n <Button size=\"small\" onClick={() => { this.handlePendingOrder(); notification.close(key); }}>{languageMessages['view']}</Button>\r\n </span>;\r\n \r\n var tmpTxt = strReplace(languageMessages['HawkeyeAlertRemind'], { '{cont}': '#' });\r\n var tmpTxts = tmpTxt.split(\"#\");\r\n\r\n var description = [];\r\n description.push(tmpTxts[0]);\r\n description.push(<span key='1232' style={{ fontSize: '24px', color: 'red' }}>{num}</span>);\r\n description.push(tmpTxts[1]);\r\n notification.info({\r\n message: languageMessages['prompt'],\r\n description: description,//<FormattedMessage id=\"HawkeyeAlertRemind\" values={{ cont: <span style={{ fontSize: '24px', color: 'red' }}>{num}</span> }} />,\r\n btn,\r\n key,\r\n duration: 0,\r\n onClose: () => {\r\n //console.log('onClose');\r\n },\r\n });\r\n };\r\n\r\n timerModal(title, content) {\r\n var secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handlePendingOrder = () => {\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", '0');\r\n this.jumpHawkeyeList();\r\n }\r\n\r\n handleMyHawkeye = () => {\r\n Modal.destroyAll();\r\n\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", '1');\r\n this.jumpHawkeyeList();\r\n }\r\n\r\n handleViewHawkeyeAlert = () => {\r\n var { hawkeye, current } = this.state;\r\n if (current === 'hawkeyeList' && hawkeye.Id !== undefined) {\r\n this.setState({ alertVisible: false });\r\n } else {\r\n var tabActiveKey = hawkeye.ConfirmOrder === 1 ? '2' : '0';\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", tabActiveKey);\r\n this.jumpHawkeyeList();\r\n }\r\n }\r\n\r\n handleCloseHawkeyeAlert = () => {\r\n this.setState({ alertVisible: false });\r\n }\r\n\r\n handleViewHawkeyeOrder = () => {\r\n var { order, current } = this.state;\r\n if (current === 'hawkeyeList' && order.Id !== undefined) {\r\n this.setState({ orderVisible: false });\r\n } else {\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", '2');\r\n this.jumpHawkeyeList();\r\n }\r\n };\r\n\r\n handleCloseHawkeyeOrder = () => {\r\n this.setState({ orderVisible: false });\r\n };\r\n\r\n handleLoginEvent(data) {\r\n this.setState({ modalVisible: data.visible });\r\n }\r\n\r\n handleChange(data) {\r\n this.setState({ code: data.error });\r\n }\r\n\r\n jumpHawkeyeList() {\r\n sessionStorage.setItem(\"MainMenuSelectKey\", 'hawkeyeList');\r\n this.setState({\r\n current: 'hawkeyeList',\r\n alertVisible: false,\r\n orderVisible: false,\r\n }, () => {\r\n history.push(\"/hawkeyeList\");\r\n });\r\n }\r\n\r\n onLoginClick = () => {\r\n history.push(\"/login\");\r\n }\r\n\r\n onRegisterClick = () => {\r\n this.setState({ modalVisible: false }, () => {\r\n history.push(\"/register\");\r\n });\r\n }\r\n\r\n handleUserClick() {\r\n this.setState({ current: '' }, () => {\r\n sessionStorage.setItem(\"MainMenuSelectKey\", 'member');\r\n history.push(\"/member\");\r\n });\r\n }\r\n\r\n handleClick = e => {\r\n this.setState({\r\n current: e.key,\r\n });\r\n\r\n sessionStorage.setItem(\"MainMenuSelectKey\", e.key);\r\n\r\n switch (e.key) {\r\n case \"home\":\r\n history.push(\"/\");\r\n break;\r\n case \"usStocks\":\r\n window.open(\"http://us.quancept.com\");\r\n break;\r\n case \"cnStocks\":\r\n window.open(\"http://www.quancept.cn\");\r\n break;\r\n case \"concept\":\r\n history.push(\"/concept\");\r\n break;\r\n case \"newFilter\":\r\n history.push(\"/f\");\r\n break;\r\n case \"myFilter\":\r\n history.push(\"/mf\");\r\n break;\r\n case \"customSymbolGroups\":\r\n history.push(\"/customStock\");\r\n break;\r\n case \"vernacular\":\r\n sessionStorage.removeItem(\"VernacularStrategyCache\");\r\n history.push(\"/vernacular\");\r\n break;\r\n case \"strategy\":\r\n history.push(\"/strategy\");\r\n break;\r\n case \"customStock\":\r\n history.push(\"/customStock\");\r\n break;\r\n case \"correlation\":\r\n history.push(\"/co\");\r\n break;\r\n case \"backtestGrid\":\r\n history.push(\"/bg\");\r\n break;\r\n case \"optimalGrid\":\r\n history.push(\"/ogbt\");\r\n break;\r\n case \"mbacktestGrid\":\r\n history.push(\"/mbg\");\r\n break;\r\n case \"mOptimalGrid\":\r\n history.push(\"/mogbt\");\r\n break;\r\n case \"optimization\":\r\n history.push(\"/mob\");\r\n //history.push(\"/moo\");\r\n break;\r\n case \"scroll\":\r\n //history.push(\"/mob\");\r\n history.push(\"/moo\");\r\n break;\r\n case \"aiGrid\":\r\n history.push(\"/aig\");\r\n break;\r\n case \"backtest\":\r\n history.push(\"/bt\");\r\n break;\r\n case \"mAIGrid\":\r\n history.push(\"/maig\");\r\n break;\r\n case \"mAIOptimization\":\r\n history.push(\"/maib\");\r\n //history.push(\"/maio\");\r\n break;\r\n case \"rolling\":\r\n history.push(\"/rr\");\r\n break;\r\n case \"mRolling\":\r\n history.push(\"/mrr\");\r\n break;\r\n\r\n case \"portfolio\":\r\n history.push(\"/po\");\r\n break;\r\n case \"mpo\":\r\n history.push(\"/mpo\");\r\n break;\r\n\r\n case \"poo\":\r\n history.push(\"/poo\");\r\n break;\r\n case \"mpoo\":\r\n history.push(\"/mpoo\");\r\n break;\r\n\r\n case \"mbacktest\":\r\n history.push(\"/mbt\");\r\n break;\r\n case \"simulated-stockStrategy\":\r\n history.push(\"/si\");\r\n break;\r\n case \"realtime-stockStrategy\":\r\n history.push(\"/re\");\r\n break;\r\n\r\n case \"simulated-generalStrategy\":\r\n history.push(\"/gs\");\r\n break;\r\n case \"realtime-generalStrategy\":\r\n history.push(\"/rtgs\");\r\n break;\r\n\r\n case \"option\":\r\n history.push(\"/option\");\r\n break;\r\n case \"factor\":\r\n history.push(\"/factor\");\r\n break;\r\n case \"download\":\r\n history.push(\"/download\");\r\n break;\r\n case \"help\":\r\n history.push(\"/help\");\r\n break;\r\n case \"video\":\r\n history.push(\"/video\");\r\n break;\r\n case \"hawkeye\":\r\n history.push(\"/hawkeye\");\r\n break;\r\n case \"hawkeyeList\":\r\n history.push(\"/hawkeyeList\");\r\n break;\r\n case \"service\":\r\n history.push(\"/sc\");\r\n break;\r\n case \"about\":\r\n history.push(\"/about\");\r\n case \"contact\":\r\n history.push(\"/about#contact\");\r\n break;\r\n case \"chat\":\r\n history.push(\"/chat\");\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n setModalVisible() {\r\n this.setState({ modalVisible: false });\r\n }\r\n\r\n renderHawkeyeAlert(hawkeyeAlert) {\r\n var className = '';\r\n if (hawkeyeAlert['RangePercent'] !== undefined) {\r\n if (hawkeyeAlert['RangePercent'] >= 0) {\r\n className = window.webType === 'US' ? 'common-green' : 'common-red';\r\n } else {\r\n className = window.webType === 'US' ? 'common-red' : 'common-green';\r\n }\r\n }\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{hawkeyeAlert['SymbolCode'] + ' ' + hawkeyeAlert['SymbolName']}</div>\r\n <div className=\"common-gutter-row\">\r\n {languageMessages['latest.price']}:<span style={{ paddingRight: '20px' }}>{hawkeyeAlert['LatestPrice']}</span>\r\n {languageMessages['quote.change']}:<span className={className}>{hawkeyeAlert['RangePercent']}%</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['triggerCondition']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeAlert['TriggerCondition']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeDirection']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeAlert['TradeDirection'] === 'Close Short' ? languageMessages['closeShort'] : languageMessages['closeLong']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeQuantity']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeAlert['TradeQuantity']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['triggerDate']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeAlert['TriggerDateTime']}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n renderHawkeyeOrder(hawkeyeOrder) {\r\n var className = '';\r\n if (hawkeyeOrder['RangePercent'] !== undefined) {\r\n if (hawkeyeOrder['RangePercent'] >= 0) {\r\n className = window.webType === 'US' ? 'common-green' : 'common-red';\r\n } else {\r\n className = window.webType === 'US' ? 'common-red' : 'common-green';\r\n }\r\n }\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{hawkeyeOrder['SymbolCode'] + ' ' + hawkeyeOrder['SymbolName']}</div>\r\n <div className=\"common-gutter-row\">\r\n {languageMessages['latest.price']}:<span style={{ paddingRight: '20px' }}>{hawkeyeOrder['LatestPrice']}</span>\r\n {languageMessages['quote.change']}:<span className={className}>{hawkeyeOrder['RangePercent']}%</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['triggerCondition']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeOrder['TriggerCondition']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeDirection']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeOrder['Direction'] === 'Close Short' ? languageMessages['closeShort'] : languageMessages['closeLong']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeQuantity']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeOrder['Quantity']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['triggerDate']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{hawkeyeOrder['OrderDateTime']}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n menu() {\r\n return [\r\n {\r\n 'title': languageMessages['intl.menu.usStocks'],\r\n 'key': 'usStocks',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.vernacularStockPicking'],\r\n 'key': 'vernacularStockPicking',\r\n 'show': false,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['intl.menu.newScan'],\r\n 'key': 'vernacular',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.myStragegy'],\r\n 'key': 'strategy',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.customStock'],\r\n 'key': 'customStock',\r\n 'show': true,\r\n 'submenu': []\r\n }\r\n ]\r\n },\r\n {\r\n 'title': 'Chat',\r\n 'key': 'chat',\r\n 'show': window.webType === 'US' ? true : false,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.filter'],\r\n 'key': 'myFilter',\r\n 'show': true,\r\n 'submenu': []\r\n // {\r\n // 'title': languageMessages['intl.menu.newFilter'],\r\n // 'key': 'newFilter',\r\n // 'show': true,\r\n // 'submenu': []\r\n // },\r\n // {\r\n // 'title': languageMessages['intl.menu.myFilter'],\r\n // 'key': 'myFilter',\r\n // 'show': true,\r\n // 'submenu': []\r\n // },\r\n // {\r\n // 'title': languageMessages['intl.menu.customStock'],\r\n // 'key': 'customSymbolGroups',\r\n // 'show': true,\r\n // 'submenu': []\r\n // }\r\n //]\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.hawkeye'],\r\n 'key': 'hawkeyeList',\r\n 'show': true,\r\n 'submenu': []\r\n // {\r\n // 'title': languageMessages['newHawkeye'],\r\n // 'key': 'hawkeye',\r\n // 'show': true,\r\n // 'submenu': []\r\n // },\r\n // {\r\n // 'title': languageMessages['myHawkeye'],\r\n // 'key': 'hawkeyeList',\r\n // 'show': true,\r\n // 'submenu': []\r\n // }\r\n //]\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.grid'],\r\n 'key': 'grid',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['backtestGrid'],\r\n 'key': 'backtestGrid',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['optimalGrid'],\r\n 'key': 'optimalGrid',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['myBacktest'],\r\n 'key': 'myBacktest',\r\n 'show': true,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['backtestGrid'],\r\n 'key': 'mbacktestGrid',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['optimalGrid'],\r\n 'key': 'mOptimalGrid',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['optimizationGrid'],\r\n 'key': 'optimization',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n /**\r\n {\r\n 'title': languageMessages['ScrollOptimization'],\r\n 'key': 'scroll',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n }\r\n */\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'title': languageMessages['strategyExcavate'],\r\n 'key': 'strategyExcavate',\r\n 'show': false,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['rollingStrategy'],\r\n 'key': 'rolling',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['AIincrease'],\r\n 'key': 'aiGrid',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['combination-strategyExcavate'],\r\n 'key': 'backtest',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n /**\r\n {\r\n 'title': 'Portfolio',\r\n 'key': 'po',\r\n 'show': window.webType === 'US' ? true : false,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': 'Portfolio optimize',\r\n 'key': 'poo',\r\n 'show': window.webType === 'US' ? true : false,\r\n 'submenu': []\r\n },\r\n */\r\n {\r\n 'title': languageMessages['myExcavate'],\r\n 'key': 'myExcavate',\r\n 'show': true,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['rollingStrategy'],\r\n 'key': 'mRolling',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['AIincrease'],\r\n 'key': 'mAIGrid',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['optimizationGrid'],\r\n 'key': 'mAIOptimization',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['combination-strategyExcavate'],\r\n 'key': 'mbacktest',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n /**\r\n {\r\n 'title': languageMessages['my.portfolio'],\r\n 'key': 'mpo',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['my.portfolio'],\r\n 'key': 'mpoo',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n */\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'title': 'Strategy',\r\n 'key': 'myTrade',\r\n 'show': true,\r\n 'submenu': [\r\n {\r\n 'title': 'Simulation',\r\n 'key': 'simulated-generalStrategy', //'simulated',\r\n 'show': true,\r\n 'submenu': []\r\n /** [\r\n {\r\n 'title': languageMessages['stockStrategy'],\r\n 'key': 'simulated-stockStrategy',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['generalStrategy'],\r\n 'key': 'simulated-generalStrategy',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n ] */\r\n },\r\n {\r\n 'title': 'Live',\r\n 'key': 'realtime-generalStrategy', //'realtime',\r\n 'show': true,\r\n 'submenu': []\r\n /**\r\n [\r\n {\r\n 'title': languageMessages['stockStrategy'],\r\n 'key': 'realtime-stockStrategy',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['generalStrategy'],\r\n 'key': 'realtime-generalStrategy',\r\n 'show': true,\r\n 'submenu': []\r\n },\r\n ]\r\n */ \r\n }\r\n ]\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.option'],\r\n 'key': 'mainOption',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': [\r\n {\r\n 'title': languageMessages['optionStrategyScan'],\r\n 'key': 'option',\r\n 'show': true,\r\n 'submenu': []\r\n }\r\n ]\r\n },\r\n {\r\n 'title': languageMessages['factorService'],\r\n 'key': 'factor',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.download'],\r\n 'key': 'download',\r\n 'show': false,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['pricing'],\r\n 'key': 'service',\r\n 'show': window.webType === 'US' ? false : false,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['videoTutorial'],\r\n 'key': 'video',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n },\r\n {\r\n 'title': languageMessages['intl.menu.help'],\r\n 'key': 'help',\r\n 'show': window.webType === 'US' ? false : true,\r\n 'submenu': []\r\n }\r\n ];\r\n }\r\n\r\n renderSubMenu = data =>\r\n data.map(item => {\r\n if (item.show) {\r\n if (item.submenu.length > 0) {\r\n return <SubMenu key={item.key} title={item.title}>\r\n {\r\n this.renderSubMenu(item.submenu)\r\n }\r\n </SubMenu>\r\n } else {\r\n return <Menu.Item key={item.key}>{item.title}</Menu.Item>\r\n }\r\n }\r\n })\r\n\r\n renderMenu() {\r\n return <Menu onClick={this.handleClick} selectedKeys={[this.state.current]} mode=\"horizontal\">\r\n {\r\n this.renderSubMenu(this.menu())\r\n }\r\n </Menu>\r\n }\r\n\r\n onShowLogin = () => {\r\n this.setState({\r\n showLogin: true,\r\n showRegister: false\r\n });\r\n }\r\n\r\n onShowRegister = () => {\r\n this.setState({\r\n showLogin: false,\r\n showRegister: true,\r\n });\r\n }\r\n\r\n toShowForgetPassword = e => {\r\n e.preventDefault();\r\n this.setState({ modalVisible: false }, () => {\r\n history.push(\"/forget\");\r\n });\r\n }\r\n\r\n render() {\r\n if (this.state.current !== 'vernacular') {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n return (<Header className='common-header'>\r\n <Row>\r\n <Col xs={10} sm={5} style={{ zIndex: 1 }}>\r\n <div className=\"logo\"><a href=\"/\"><img src=\"/static/images/logo.png\" width=\"137\" alt={languageMessages['title']} title=\"Quancept\" /></a></div>\r\n {window.webType === 'US' ? '' : <span className=\"common-tip\">\r\n {languageMessages['intl.menu.cnStocks']}\r\n </span>\r\n }\r\n </Col>\r\n <Col xs={4} sm={14}>\r\n {this.renderMenu()}\r\n </Col>\r\n <Col xs={10} sm={5}>\r\n {this.state.loggedIn ? (<UserMenu username={this.state.userId} photo={this.state.photo} userClick={this.handleUserClick.bind(this)} />) : (<LoginRegisterButtons onLoginAction={this.onLoginClick} onRegisterAction={this.onRegisterClick} />)}\r\n </Col>\r\n </Row>\r\n <Modal title={languageMessages['intelligentHawkeyeAlert']}\r\n visible={this.state.alertVisible}\r\n okText={languageMessages['view']}\r\n onOk={this.handleViewHawkeyeAlert}\r\n cancelText={languageMessages['close']}\r\n onCancel={this.handleCloseHawkeyeAlert}>\r\n {this.renderHawkeyeAlert(this.state.hawkeye)}\r\n </Modal>\r\n\r\n <Modal title={languageMessages['orderInfo']}\r\n visible={this.state.orderVisible}\r\n okText={languageMessages['view']}\r\n onOk={this.handleViewHawkeyeOrder}\r\n cancelText={languageMessages['close']}\r\n onCancel={this.handleCloseHawkeyeOrder}>\r\n {this.renderHawkeyeOrder(this.state.order)}\r\n </Modal>\r\n \r\n <Modal\r\n title={<div className='form-logo'></div>}\r\n className='dialog-common-box'\r\n style={{ top: 64 }}\r\n width={480}\r\n zIndex={1005}\r\n footer={null}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onCancel={() => this.setModalVisible()}>\r\n \r\n <div style={{ display: this.state.showLogin ? '' : 'none' }}>\r\n <WrappedLoginForm {...this.state} status={this.props.member.status} dispatch={this.props.dispatch} loginEvent={this.handleLoginEvent.bind(this)} handleChange={this.handleChange.bind(this)} />\r\n </div>\r\n <div style={{ display: this.state.showRegister ? '' : 'none' }}>\r\n <WrappedRegisterForm {...this.state} status={this.props.member.status} dispatch={this.props.dispatch} handleChange={this.handleChange.bind(this)} />\r\n </div>\r\n {this.state.code === 'ERROR' ? (<Alert message={this.state.message} type=\"error\" />) : ''}\r\n\r\n {this.state.showLogin && (<div style={{ padding: '10px 0' }}>\r\n <a href=\"javascript:;\" onClick={this.onShowRegister}>{languageMessages['intl.register']}</a>\r\n <a className=\"login-form-forgot\" href=\"javascript:;\" onClick={this.toShowForgetPassword}>{languageMessages['intl.login.forgotPassword']}</a>\r\n </div>)}\r\n {this.state.showRegister && (<div>\r\n <a href=\"javascript:;\" onClick={this.onShowLogin}>{languageMessages['Login to existing quancept account']} ></a>\r\n </div>)}\r\n \r\n </Modal>\r\n </Header>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n member: state.member,\r\n fail: state.fail,\r\n };\r\n}\r\n\r\nconst page = connect(mapStateToProps)(HeaderPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Layout, Col, Row, Divider, Modal } from 'antd';\r\nimport history from '../../helpers/history'\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Footer } = Layout;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass FooterPage extends Component {\r\n\r\n onAbout = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', \"about\");\r\n\r\n history.push(\"/about\");\r\n }\r\n\r\n onContact = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', \"contact\");\r\n\r\n history.push(\"/about#contact\");\r\n }\r\n\r\n onDownload = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', \"download\");\r\n\r\n history.push(\"/download\");\r\n }\r\n\r\n render() {\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n return (\r\n <Footer>\r\n <Row style={{ padding:'0 50px' }}>\r\n <Col span={24}>\r\n <div style={{ padding: '16px 0', color: '#efefef' }}>\r\n <a onClick={this.onAbout}><FormattedMessage id='about' /></a>\r\n <Divider type=\"vertical\" />\r\n <a onClick={this.onContact}><FormattedMessage id='contact' /></a>\r\n {locale.toLowerCase() === 'en-us' ? '' : <span><Divider type=\"vertical\" />\r\n <a href=\"/help\"><FormattedMessage id='intl.menu.help' /></a></span>}\r\n \r\n <Divider type=\"vertical\" />\r\n <a onClick={this.onDownload}><FormattedMessage id='intl.menu.download' /></a>\r\n </div>\r\n <div style={{ padding: '16px 0', color: '#dedede' }}>\r\n <FormattedMessage id='company' values={{ year: year }} />\r\n <a href=\"https://www.beian.miit.gov.cn/\" target=\"_blank\">\r\n {locale.toLowerCase() === 'en-us' ? '' : 'é—½ICP备2021012051å·-1'}\r\n </a>\r\n </div>\r\n </Col>\r\n <Col span={2} style={{ textAlign: \"right\", display: 'none' }}>\r\n <div style={{ color: '#dedede', textAlign: 'center' }}>\r\n <p><img src=\"static/images/weixin001.jpg\" width=\"60\"></img></p>\r\n <FormattedMessage id='WeChat.public.number' />\r\n </div>\r\n </Col>\r\n </Row>\r\n </Footer>\r\n )\r\n }\r\n}\r\n\r\nexport { FooterPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Card, Alert, Row, Col, Icon } from 'antd';\r\nimport WrappedLoginForm from '../../pannels/form/LoginForm';\r\nimport history from '../../helpers/history';\r\nimport emitter from '../Evt.js';\r\n\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst messages = defineMessages({\r\n login: {\r\n id: 'intl.login',\r\n defaultMessage: '登录',\r\n },\r\n freeRegister: {\r\n id: 'intl.register.free',\r\n defaultMessage: '注册',\r\n },\r\n getVerificationCodeFailed: {\r\n id: 'get.verification.code.failed',\r\n defaultMessage: '获å–验è¯ç 失败',\r\n },\r\n phoneNotRegister: {\r\n id: 'phone.not.register',\r\n defaultMessage: '手机未注册',\r\n },\r\n phoneFormatFailed: {\r\n id: 'phone.format.failed',\r\n defaultMessage: 'æ‰‹æœºå·æ ¼å¼é”™è¯¯',\r\n },\r\n loginException: {\r\n id: 'login.exception',\r\n defaultMessage: '登录异常',\r\n },\r\n accountNotRegister: {\r\n id: 'account.not.register',\r\n defaultMessage: 'è´¦å·æœªæ³¨å†Œ',\r\n },\r\n accountException: {\r\n id: 'account.exception',\r\n defaultMessage: 'è´¦å·å¼‚常',\r\n },\r\n passwordVerificationCodeFailed: {\r\n id: 'password.or.verification.code.match.error',\r\n defaultMessage:'å¯†ç æˆ–验è¯ç 匹é…错误',\r\n }\r\n});\r\n\r\nlet timer = null;\r\nclass LoginPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n let auth = JSON.parse(localStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n sessionStorage.clear();\r\n\r\n this.state = {\r\n isGetCaptcha: true,\r\n count: 60,\r\n code: '',\r\n message: '',\r\n logining: false,\r\n ...auth\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, state } = props;\r\n let { count } = this.state;\r\n\r\n this.setState({\r\n code: '',\r\n message: '',\r\n logining: false\r\n });\r\n \r\n switch (status) {\r\n case 'Get_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://手机未注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['phone.not.register']\r\n });\r\n break;\r\n case 3://手机有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.phoneFormatFailed} />\r\n });\r\n break;\r\n }\r\n break;\r\n case 'Get_Email_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://邮箱未注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.not.register']\r\n });\r\n break;\r\n case 3://邮箱有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.format.failed']\r\n });\r\n break;\r\n }\r\n break;\r\n case 'Logining':\r\n this.setState({\r\n logining: true,\r\n });\r\n break;\r\n case 'Login_Success':\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n }, () => {\r\n const n = window.location.search.indexOf(\"next=\")\r\n if (n > 0) {\r\n history.replace(window.location.search.substr(n + 5))\r\n } else {\r\n emitter.emit('callJump', 'vernacular');\r\n history.replace('/vernacular');\r\n }\r\n });\r\n break;\r\n case 'Login_Failed':\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n let errorMeg = '';\r\n switch (state) {\r\n case 0:\r\n errorMeg = <FormattedMessage {...messages.loginException} />\r\n break;\r\n case 2:\r\n errorMeg = <FormattedMessage {...messages.accountNotRegister } />\r\n break;\r\n case 3:\r\n errorMeg = <FormattedMessage {...messages.accountException} />\r\n break;\r\n case 4:\r\n errorMeg = <FormattedMessage {...messages.passwordVerificationCodeFailed} />\r\n break;\r\n case 5:\r\n errorMeg = <FormattedMessage id='user.account.has.expired' />\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n code: 'ERROR',\r\n message: errorMeg,\r\n isGetCaptcha: true,\r\n count: 60\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleLoginEvent() {\r\n }\r\n\r\n onRegister = e => {\r\n e.preventDefault();\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n history.push(\"/register\");\r\n }\r\n\r\n toForgetPassword = e => {\r\n e.preventDefault();\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n history.push(\"/forget\");\r\n }\r\n\r\n handleChange(data) {\r\n this.setState({ code: data.error });\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className=\"row-container\" style={{ justifyContent: \"center\", padding: \"36px 0\", marginBottom: '30px' }}>\r\n <Card className='common-box'\r\n cover={<div className='form-logo'></div>}>\r\n \r\n <WrappedLoginForm {...this.state} status={this.props.status} dispatch={this.props.dispatch} loginEvent={this.handleLoginEvent.bind(this)} handleChange={this.handleChange.bind(this)} />\r\n {this.state.code === 'ERROR' ? (<Alert message={this.state.message} type=\"error\" />) : ''}\r\n\r\n <div style={{ padding: '10px 0' }}>\r\n <a href=\"javascript:;\" onClick={this.onRegister}>{languageMessages['intl.register']}</a>\r\n <a className=\"login-form-forgot\" href=\"javascript:;\" onClick={this.toForgetPassword}>{languageMessages['intl.login.forgotPassword']}</a>\r\n </div>\r\n\r\n {window.webType === 'test'?\r\n (<div style={{ fontSize: '24px', color: '#337ab7' }}>\r\n <Icon type=\"facebook\" theme=\"filled\" style={{ marginRight: '5px' }} />\r\n <Icon type=\"linkedin\" theme=\"filled\" style={{ marginRight: '5px' }} />\r\n </div>):''\r\n }\r\n </Card>\r\n </div>\r\n </Content>\r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.member ? state.member : {};\r\n}\r\n\r\nconst page = connect(mapStateToProps)(LoginPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Form, Card, Button } from 'antd';\r\n\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\n\r\nconst messages = defineMessages({\r\n youHaveRegisterSuccess: {\r\n id: 'intl.youHaveRegisterSuccess',\r\n defaultMessage: 'æå–œæ‚¨å·²æ³¨å†ŒæˆåŠŸï¼',\r\n },\r\n openQuantitativeInvestment: {\r\n id: 'intl.register.openQuantitativeInvestment',\r\n defaultMessage: 'å¼€å¯é‡åŒ–投资之旅',\r\n }\r\n});\r\n\r\nclass RegisterSuccess extends Component {\r\n constructor(props) {\r\n super(props)\r\n }\r\n\r\n handleJump = () => {\r\n this.props.handleJumpHome();\r\n }\r\n\r\n render() {\r\n return (<Card style={{ width: 380 }}>\r\n <p style={{ color: 'green', fontSize: '18px', textAlign: 'center' }}><FormattedMessage {...messages.youHaveRegisterSuccess} /></p>\r\n <Button type=\"primary\" onClick={this.handleJump} className='register-form-button'><FormattedMessage {...messages.openQuantitativeInvestment} /></Button>\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nconst page = Form.create({ name: 'register_success' })(RegisterSuccess);\r\nexport { page as default };","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Card, Alert, Row, Col } from 'antd';\r\nimport WrappedRegisterForm from '../../pannels/form/RegisterForm';\r\nimport RegisterSuccess from '../../pannels/form/RegisterSuccess';\r\nimport history from '../../helpers/history';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nlet timer = null;\r\nclass RegisterPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n var auth = JSON.parse(localStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.state = {\r\n isGetCaptcha: true,\r\n count: 60,\r\n code: '',\r\n message: '',\r\n registered: false,\r\n ...auth\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state } = props;\r\n var { count } = this.state;\r\n\r\n this.setState({\r\n code: '',\r\n message: '',\r\n registered: false\r\n });\r\n\r\n switch (status) {\r\n case 'Get_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://手机已注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['phone.is.register']\r\n });\r\n break;\r\n case 3://手机有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['phone.format.failed']\r\n });\r\n break;\r\n }\r\n break;\r\n case 'Get_Email_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://邮箱已注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.registered']\r\n });\r\n break;\r\n case 3://邮箱有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.format.failed']\r\n });\r\n break;\r\n }\r\n break;\r\n case \"Registered\":\r\n this.setState({\r\n registered: true,\r\n });\r\n break;\r\n case \"Register_Success\":\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n this.setState({\r\n code: 'SUCCRSS',\r\n message: languageMessages['register.success'],\r\n isGetCaptcha: true,\r\n count: 60\r\n });\r\n break;\r\n case \"Register_Failed\":\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n let errorMeg = '';\r\n switch (state) {\r\n case 0:\r\n errorMeg = languageMessages['register.exception'];\r\n break;\r\n case 2:\r\n errorMeg = languageMessages['account.is.exist'];\r\n break;\r\n case 3:\r\n errorMeg = languageMessages['verification.code.matching.error'];\r\n break;\r\n case 4:\r\n errorMeg = languageMessages['register.failed'];\r\n break;\r\n case 5:\r\n errorMeg = languageMessages['promoCode.error'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n code: 'ERROR',\r\n message: errorMeg,\r\n isGetCaptcha: true,\r\n count: 60\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleJumpHome() {\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n this.setState({ isGetCaptcha: true, count: 60 }, () => {\r\n const n = window.location.search.indexOf(\"next=\");\r\n if (n > 0) {\r\n history.replace(window.location.search.substr(n + 5));\r\n } else {\r\n emitter.emit('callJump', 'vernacular');\r\n history.replace('/vernacular');\r\n }\r\n });\r\n }\r\n\r\n onLogin = e => {\r\n e.preventDefault();\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n history.push(\"/login\");\r\n }\r\n\r\n handleChange(data) {\r\n this.setState({ code: data.error });\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className=\"row-container\" style={{ justifyContent: \"center\", padding: \"36px 0\", marginBottom: '30px' }}>\r\n {this.state.code === 'SUCCRSS' ? (<RegisterSuccess handleJumpHome={this.handleJumpHome.bind(this)} />) : (\r\n <Card className='common-box' cover={<div className='form-logo'></div>}>\r\n <WrappedRegisterForm {...this.state} status={this.props.status} dispatch={this.props.dispatch} handleChange={this.handleChange.bind(this)} />\r\n {this.state.code === 'ERROR' ? (<Alert message={this.state.message} type=\"error\" />) : ''}\r\n\r\n <div>\r\n <a href=\"javascript:;\" onClick={this.onLogin}>{languageMessages['Login to existing quancept account']} ></a>\r\n </div>\r\n </Card>\r\n )}\r\n </div>\r\n </Content>\r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.member ? state.member : {}\r\n}\r\n\r\nconst page = connect(mapStateToProps)(RegisterPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Form, Input, Select, Row, Col, Button, Icon, Tabs } from 'antd';\r\n\r\nimport CodeRegExp from './LoginCountrys';\r\n\r\nimport './flags.css';\r\n\r\nconst { TabPane } = Tabs;\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction hasErrors(fieldsError) {\r\n return Object.keys(fieldsError).some(field => fieldsError[field]);\r\n}\r\n\r\nconst PhoneForgetForm = Form.create({ name: 'phone_forget_form' })(\r\n class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n phone:'',\r\n captcha: '',\r\n password: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.props.form.validateFields(['phone', 'captcha', 'password'], { first: true }, (err, values) => {\r\n //});\r\n }\r\n\r\n handlePhoneChange = e => {\r\n this.setState({ phone: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handleCaptchaChange = e => {\r\n this.setState({ captcha: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n handlePasswordChange = e => {\r\n this.setState({ password: e.target.value }, () => {\r\n this.props.handleChange();\r\n });\r\n }\r\n\r\n render() {\r\n const { isChangePrefix, prefix, phoneRegExp, handlePrefixSelector, username, isGetCaptcha, captchaWaiting, getCaptcha, count, resetPassword, handleSubmit, form } = this.props;\r\n const { getFieldDecorator, getFieldsError } = form;\r\n let { phone, captcha, password } = this.state;\r\n\r\n if (phone === '') phone = username;\r\n\r\n var tmpPhoneRegExp = phoneRegExp;\r\n var tmpPrefix = prefix;\r\n\r\n if (isChangePrefix) {\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (!regex.test(phone)) {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n } else {\r\n let prefixCode = '0';\r\n var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$/;\r\n if (regex.test(phone)) {\r\n prefixCode = 'Email';\r\n } else {\r\n if (phone !== undefined && phone !== '') {\r\n let users = phone.split('-');\r\n if (users.length > 1) {\r\n prefixCode = users[0];\r\n phone = users[1];\r\n }\r\n }\r\n }\r\n \r\n var isFlag = false;\r\n var options = [];\r\n for (var ii in CodeRegExp) {\r\n if (prefixCode === CodeRegExp[ii].code) {\r\n if (!isFlag) {\r\n tmpPrefix = CodeRegExp[ii].des;\r\n tmpPhoneRegExp = CodeRegExp[ii].pattern;\r\n isFlag = true;\r\n }\r\n }\r\n\r\n var content = '';\r\n if (CodeRegExp[ii].code == 'Email') {\r\n var title = <Icon type=\"mail\" />;\r\n content = <span>{title} {CodeRegExp[ii].code}</span>\r\n } else {\r\n var className = 'flag flag-' + CodeRegExp[ii].des.toLowerCase();\r\n var title = <span className={className}></span>;\r\n content = <span>{title} {' +' + CodeRegExp[ii].code}</span>;\r\n }\r\n\r\n options.push(<Option key={ii} value={CodeRegExp[ii].des} label={content}>{content}</Option>);\r\n }\r\n }\r\n\r\n const prefixSelector = getFieldDecorator('prefix', { initialValue: tmpPrefix })(\r\n <Select style={{ width: 120 }}\r\n optionLabelProp='label'\r\n dropdownMatchSelectWidth={false}\r\n dropdownClassName='common-login-prefix'\r\n dropdownStyle={{ zIndex: 4, minWidth: 100 }}\r\n onChange={handlePrefixSelector}>\r\n {options}\r\n </Select>,\r\n );\r\n\r\n let isDisabled = phone === '' || captcha === '' || password === '';\r\n if (!isDisabled) {\r\n isDisabled = resetPassword ? resetPassword : (hasErrors(getFieldsError()));\r\n }\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} className='register-form'>\r\n <Form.Item>\r\n {getFieldDecorator('phone', {\r\n initialValue: phone,\r\n rules: [\r\n { required: true, message: languageMessages['phone number and email address'] },\r\n { pattern: tmpPhoneRegExp, message: languageMessages['format.failed'] }\r\n ],\r\n })(<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder={languageMessages['phone number and email address']} onChange={this.handlePhoneChange} autoComplete={'new-phone'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Row gutter={8}>\r\n <Col span={12}>\r\n {getFieldDecorator('captcha', {\r\n initialValue: captcha,\r\n rules: [{ required: true, message: languageMessages['please.input.captcha'] }],\r\n })(<Input placeholder={languageMessages['Verification code']} onChange={this.handleCaptchaChange} autoComplete={'new-captcha'} />)}\r\n </Col>\r\n <Col span={12}>\r\n {isGetCaptcha ? (<Button loading={captchaWaiting} onClick={getCaptcha}>{languageMessages['intl.register.getCaptcha']}</Button>) : (<Button disabled onClick={getCaptcha}>{count}s</Button>)}\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n {getFieldDecorator('forgetPassword', {\r\n initialValue: password,\r\n rules: [\r\n { required: true, message: languageMessages['please.input.password'] },\r\n { min: 6, message: languageMessages['password.min'] },\r\n { max: 16, message: languageMessages['password.max'] },\r\n { pattern: /^(?![^a-zA-Z]+$)(?!\\D+$)/, message: languageMessages['password.required.format'] }\r\n ],\r\n })(<Input.Password prefix={<Icon type=\"lock\" style={{ color: 'rgba(0,0,0,.25)' }} />} placeholder={languageMessages['password.new.format']} onChange={this.handlePasswordChange} autoComplete={'new-password'} />)}\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' htmlType=\"submit\" className='register-form-button' loading={resetPassword} disabled={isDisabled}>\r\n {resetPassword ? languageMessages['intl.resetPasswording'] : languageMessages['intl.resetPassword']}\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n },\r\n);\r\n\r\nclass ForgetForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n phoneRegExp: '',\r\n\r\n prefix: window.webType,\r\n\r\n isChangePrefix: false,\r\n\r\n captchaWaiting: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === this.state.prefix });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp\r\n });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status } = props;\r\n\r\n switch (status) {\r\n case 'Get_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n case 'Get_Email_Captcha':\r\n this.setState({ captchaWaiting: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getCaptcha = e => {\r\n e.preventDefault();\r\n let { isGetCaptcha } = this.props;\r\n this.phoneFormRef.props.form.validateFields(['phone'], (err, values) => {\r\n if (!err) {\r\n if (isGetCaptcha) {\r\n var prefix = this.phoneFormRef.props.form.getFieldValue('prefix');\r\n this.setState({ captchaWaiting: true }, () => {\r\n if ('Email' == prefix) {\r\n this.props.dispatch({ type: \"action_email_captcha\", payload: { Mode: 'forget', Email: values.phone } });\r\n } else {\r\n //å‘逿‰‹æœºéªŒè¯ç \r\n this.props.dispatch({ type: \"action_forget_captcha\", payload: { UserName: values.phone, Prefix: prefix } });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n this.phoneFormRef.props.form.validateFieldsAndScroll((err, values) => {\r\n if (!err) {\r\n var mode = 'phone';\r\n if ('Email' == values.prefix) {\r\n mode = 'email';\r\n }\r\n\r\n var requestData = {\r\n Mode: mode,\r\n UserName: values.phone,\r\n Password: values.forgetPassword,\r\n Captcha: values.captcha,\r\n Prefix: values.prefix\r\n };\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Forget', 'Forget', values.phone]);\r\n\r\n //找回密ç \r\n this.props.dispatch({ type: \"action_forget\", payload: requestData });\r\n }\r\n });\r\n };\r\n\r\n handlePrefixSelector = value => {\r\n var tmpCodeRegExp = CodeRegExp.filter((e) => { return e.des === value });\r\n if (tmpCodeRegExp.length > 0) {\r\n var phoneRegExp = tmpCodeRegExp[0].pattern;\r\n this.setState({\r\n phoneRegExp,\r\n prefix: value,\r\n isChangePrefix: true,\r\n }, () => {\r\n this.phoneFormRef.props.form.validateFields(['phone', 'captcha', 'password'], { first: true }, (err, values) => {\r\n });\r\n });\r\n }\r\n\r\n this.props.handleChange({ error: '' });\r\n }\r\n\r\n SetPhoneFormRef = formRef => {\r\n this.phoneFormRef = formRef;\r\n }\r\n\r\n handleChange = () => {\r\n this.props.handleChange({ error: '' });\r\n }\r\n \r\n render() {\r\n let { isChangePrefix, prefix, phoneRegExp, captchaWaiting } = this.state;\r\n\r\n return (<div className='login-register-card-class'>\r\n <Tabs size=\"small\">\r\n <TabPane tab={languageMessages['phone forget']} key={0}>\r\n <PhoneForgetForm\r\n wrappedComponentRef={this.SetPhoneFormRef}\r\n isChangePrefix={isChangePrefix}\r\n prefix={prefix}\r\n phoneRegExp={phoneRegExp}\r\n handlePrefixSelector={this.handlePrefixSelector}\r\n username={this.props.username}\r\n isGetCaptcha={this.props.isGetCaptcha}\r\n captchaWaiting={captchaWaiting}\r\n getCaptcha={this.getCaptcha}\r\n count={this.props.count}\r\n handleChange={this.handleChange}\r\n resetPassword={this.props.resetPassword}\r\n handleSubmit={this.handleSubmit}\r\n />\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport { ForgetForm as default }","import React, { Component } from 'react';\r\nimport { Card, Button } from 'antd';\r\nimport history from '../../helpers/history'\r\n\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\n\r\nconst messages = defineMessages({\r\n forgetPasswordSuccess: {\r\n id: 'intl.forgetPasswordSuccess',\r\n defaultMessage: 'é‡ç½®å¯†ç æˆåŠŸï¼',\r\n },\r\n goToLogin: {\r\n id: 'intl.login.goToLogin',\r\n defaultMessage: '请å‰å¾€ç™»å½•',\r\n }\r\n});\r\n\r\nclass ForgetSuccess extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n handleGoToLogin = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/login\");\r\n }\r\n\r\n render() {\r\n return (<Card style={{ width: 380 }}>\r\n <p style={{ color: 'green', fontSize: '18px', textAlign: 'center' }}><FormattedMessage {...messages.forgetPasswordSuccess} /></p>\r\n <Button type=\"primary\" onClick={this.handleGoToLogin} className='register-form-button'><FormattedMessage {...messages.goToLogin} /></Button>\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nexport { ForgetSuccess as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Card, Alert, Row, Col } from 'antd';\r\nimport WrappedForgetForm from '../../pannels/form/ForgetForm';\r\nimport ForgetSuccess from '../../pannels/form/ForgetSuccess';\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\nimport history from '../../helpers/history';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst messages = defineMessages({\r\n resetPassword: {\r\n id: 'intl.resetPassword',\r\n defaultMessage: 'é‡ç½®å¯†ç ',\r\n },\r\n freeRegister: {\r\n id: 'intl.register.free',\r\n defaultMessage: 'å…费注册',\r\n },\r\n getVerificationCodeFailed: {\r\n id: 'get.verification.code.failed',\r\n defaultMessage: '获å–验è¯ç 失败',\r\n },\r\n phoneNotRegister: {\r\n id: 'phone.not.register',\r\n defaultMessage: '手机未注册',\r\n },\r\n phoneFormatFailed: {\r\n id: 'phone.format.failed',\r\n defaultMessage: 'æ‰‹æœºå·æ ¼å¼é”™è¯¯',\r\n },\r\n resetPasswordSuccess: {\r\n id: 'reset.password.success',\r\n defaultMessage: 'é‡ç½®å¯†ç æˆåŠŸ',\r\n },\r\n resetPasswordException: {\r\n id: 'reset.password.exception',\r\n defaultMessage: 'é‡ç½®å¯†ç 异常',\r\n },\r\n accountNotExist: {\r\n id: 'account.not.exist',\r\n defaultMessage: 'è´¦å·ä¸å˜åœ¨',\r\n },\r\n accountException: {\r\n id: 'account.exception',\r\n defaultMessage: 'è´¦å·å¼‚常',\r\n },\r\n verificationCodeMatchingError: {\r\n id: 'verification.code.matching.error',\r\n defaultMessage: '验è¯ç 匹é…错误',\r\n },\r\n resetPasswordFailed: {\r\n id: 'reset.password.failed',\r\n defaultMessage: 'é‡ç½®å¯†ç 失败',\r\n }\r\n});\r\n\r\nlet timer = null;\r\nclass ForgetPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n let auth = JSON.parse(localStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.state = {\r\n isGetCaptcha: true,\r\n count: 60,\r\n code: '',\r\n message: '',\r\n resetPassword: false,\r\n ...auth\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, state } = props;\r\n let { count } = this.state;\r\n\r\n this.setState({\r\n code: '',\r\n message: '',\r\n resetPassword: false\r\n });\r\n \r\n switch (status) {\r\n case 'Get_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.getVerificationCodeFailed} />\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://手机未注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.phoneNotRegister} />\r\n });\r\n break;\r\n case 3://手机有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.phoneFormatFailed} />\r\n });\r\n break;\r\n }\r\n break;\r\n case 'Get_Email_Captcha':\r\n switch (state) {\r\n case 0://失败\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['get.verification.code.failed']\r\n });\r\n break;\r\n case 1://æˆåŠŸ\r\n timer = setInterval(() => {\r\n this.setState({\r\n isGetCaptcha: false,\r\n count: (count--)\r\n }, () => {\r\n if (count === 0) {\r\n clearInterval(timer);\r\n this.setState({\r\n isGetCaptcha: true,\r\n count: 60\r\n })\r\n }\r\n })\r\n }, 1000);\r\n break;\r\n case 2://邮箱未注册\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.not.register']\r\n });\r\n break;\r\n case 3://邮箱有误\r\n this.setState({\r\n code: 'ERROR',\r\n message: languageMessages['email.format.failed']\r\n });\r\n break;\r\n }\r\n break;\r\n case 'ResetPassword':\r\n this.setState({\r\n resetPassword: true,\r\n });\r\n break;\r\n case 'Forget_Success':\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n this.setState({\r\n code: 'SUCCESS',\r\n message: <FormattedMessage {...messages.resetPasswordSuccess} />\r\n });\r\n break;\r\n case 'Forget_Failed':\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n switch (state) {\r\n case 0:\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.resetPasswordException} />\r\n });\r\n break;\r\n case 2:\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.accountNotExist} />\r\n });\r\n break;\r\n case 3:\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.accountException} />\r\n });\r\n break;\r\n case 4:\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.verificationCodeMatchingError} />\r\n });\r\n break;\r\n case 5:\r\n this.setState({\r\n code: 'ERROR',\r\n message: <FormattedMessage {...messages.resetPasswordFailed} />\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onRegister = e => {\r\n e.preventDefault();\r\n if (timer !== null) {\r\n clearInterval(timer);\r\n }\r\n history.push(\"/register\");\r\n }\r\n\r\n handleChange(data) {\r\n this.setState({ code: data.error });\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className=\"row-container\" style={{ justifyContent: \"center\", padding: \"36px 0\", marginBottom: '30px' }}>\r\n {this.state.code === 'SUCCESS'?(<ForgetSuccess />) : (\r\n <Card className='common-box' cover={<div className='form-logo'></div>}>\r\n <WrappedForgetForm {...this.state} status={this.props.status} dispatch={this.props.dispatch} handleChange={this.handleChange.bind(this)} />\r\n {this.state.code === 'ERROR' ? (<Alert message={this.state.message} type=\"error\" />) : ''}\r\n\r\n <div>\r\n <a href=\"javascript:;\" onClick={this.onRegister}>{languageMessages['intl.register']}</a>\r\n </div>\r\n </Card>\r\n )}\r\n </div>\r\n </Content>\r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.member ? state.member : {}\r\n}\r\n\r\nconst ConnectedForgetPage = connect(mapStateToProps)(ForgetPage);\r\nexport { ConnectedForgetPage as default }","import React from \"react\";\r\nimport \"./search.less\";\r\n\r\nlet res = \"\";\r\n\r\nfunction onChange(e) {\r\n let {\r\n target: { value }\r\n } = e;\r\n\r\n res = value;\r\n}\r\n\r\nfunction handleEnter(event, func) {\r\n let keynum = event.keyCode ? event.keyCode : event.which;\r\n\r\n if (keynum == \"13\") {\r\n func && func(res);\r\n }\r\n}\r\n\r\nexport default props => {\r\n let { search } = props;\r\n\r\n return (\r\n <div className=\"search-wrapper\">\r\n <div className=\"search-title\">æœç´¢</div>\r\n <div className=\"search-inp\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"åœ¨å¸®åŠ©ä¸æœç´¢\"\r\n onChange={e => onChange(e)}\r\n onKeyPress={e => handleEnter(e, search)}\r\n />\r\n <img src=\"/static/images/search.png\" onClick={() => search(res)} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n","const help_side_cn = {\r\n 0: {\r\n id: '1',\r\n title: '快速入门',\r\n children: [\r\n {\r\n id: '1-1',\r\n num: '1',\r\n title: 'InSync 快速入门',\r\n children: [\r\n {\r\n id: '1-1-1',\r\n num: '1.1',\r\n title: 'InSync 使用手册',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n },\r\n {\r\n id: '1-1-2',\r\n num: '1.2',\r\n title: 'InSync 视频教程',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-2',\r\n num: '2',\r\n title: 'CrystalTrade 快速入门',\r\n children: [\r\n {\r\n id: '1-2-1',\r\n num: '2.1',\r\n title: ' CrystalTrade 使用手册',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n },\r\n {\r\n id: '1-2-2',\r\n num: '2.2',\r\n title: ' CrystalTrade 完整视频教程',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-3',\r\n num: '3',\r\n title: '全能股票机器人',\r\n children: [\r\n {\r\n id: '1-3-1',\r\n num: '3.1',\r\n title: '',\r\n children: '点击观看视频教程',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-4',\r\n num: '4.',\r\n title: 'Alpha é‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n {\r\n id: '1-4-1',\r\n num: '4.1',\r\n title: '',\r\n children: '下载使用手册',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 1: {\r\n id: '2',\r\n title: '精选ç–ç•¥',\r\n children: [\r\n {\r\n id: '2-1',\r\n num: '1',\r\n title: '入门级',\r\n children: '',\r\n children: [\r\n {\r\n id: '2-1-1',\r\n num: '1.1',\r\n title: '行情é¢',\r\n children: [\r\n {\r\n tit: 'è‚¡ä»·åˆ›åŽ†å²æ–°é«˜'\r\n },\r\n // 'BarHigh(\"D\",0)>=HistoryHigh(\"qianfuquan\",\"out_date\")',\r\n {\r\n tit: '股价大于100Last>100'\r\n },\r\n {\r\n tit: '振幅大于5%'\r\n },\r\n // 'BarRange(\"D\",0)/BarClose(\"D\",-1) > 0.05',\r\n { tit: '开盘价å‘上跳空' },\r\n // 'BarOpen(\"D\",0)>BarHigh(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-1-2',\r\n num: '1.2',\r\n title: '技术é¢',\r\n children: [\r\n { tit: 'è‚¡ä»·çªç ´å¸ƒæž—线上轨' },\r\n // 'BarClose(\"D\",-1) < BbUpper(\"D\",20,2,-1) & BarClose(\"D\",0) >BbUpper(\"D\",20,2,0)',\r\n { tit: '今天放é‡2å€' },\r\n // 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)*2',\r\n { tit: '釿¯”大于2å°äºŽ5' },\r\n // 'VolumeRatio(\"Now\") > 2 & VolumeRatio(\"Now\") < 5',\r\n { tit: 'æ¢æ‰‹çŽ‡å¤§äºŽ5%' },\r\n // 'TurnoverRate(\"D\",0) > 0.05'\r\n ]\r\n },\r\n {\r\n id: '2-1-3',\r\n num: '1.3',\r\n title: '财务é¢',\r\n children: [\r\n { tit: 'æ¯è‚¡æ”¶ç›ŠåŒæ¯”å¢žåŠ 1.5å…ƒ' },\r\n // 'JB_CW_ByIndex(4,-1)>JB_CW_ByIndex(4,-5)+1.5',\r\n { tit: 'æ¯è‚¡å‡€èµ„äº§çŽ¯æ¯”å¢žåŠ 5%' },\r\n // 'JB_CW_ByIndex(5,-1)>JB_CW_ByIndex(5,-2)*(1.05)',\r\n { tit: 'æ¯è‚¡æœªåˆ†é…利润大于2' },\r\n // 'JB_CW_ByIndex(9,-1) > 2',\r\n { tit: 'æµé€šè‚¡è‚¡æœ¬åŒæ¯”å¢žåŠ 10%' },\r\n // 'JB_CW_ByIndex(37,-1)*10000>JB_CW_ByIndex(37,-5)*10000*(1.1)',\r\n { tit: '总股本å‡å°‘一åƒä¸‡è‚¡' },\r\n // 'JB_CW_ByIndex(36,-1)*10000<JB_CW_ByIndex(36,-5)*10000-10000000'\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '2-2',\r\n num: '2',\r\n title: '进阶级',\r\n children: [\r\n {\r\n id: '2-2-1',\r\n title: '60分钟MACD金å‰',\r\n children: [\r\n // { tit: '60分钟MACD金å‰' },\r\n // 'Macd_DIF(\"CLOSE\",\"1\",12,26,-1)<Macd_DEA(\"CLOSE\",\"1\",12,26,9,-1)&Macd_DIF(\"CLOSE\",\"1\",12,26,0)>Macd_DEA(\"CLOSE\",\"1\",12,26,9,0)',\r\n // { tit: 'MACD空头排列' },\r\n // { tit: 'KDJæ»å‰' },\r\n // 'KDJ_K(\"D\",9,-1)>KDJ_D(\"D\",9,-1)&KDJ_K(\"D\",9,0)<KDJ_D(\"D\",9,0)',\r\n // { tit: '5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿' },\r\n // 'Sma(\"CLOSE\",\"D\",5,-1) < Sma(\"CLOSE\",\"D\",10,-1) & Sma(\"CLOSE\",\"D\",5,0) > Sma(\"CLOSE\",\"D\",10,0)',\r\n // { tit: 'å‘上跳空缺å£' },\r\n // 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)',\r\n // { tit: 'ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%' },\r\n // 'BarClose(\"D\",0) >= LoopAvg({BarClose(\"D\",#)},-5,-1,1) * (1+0.1)',\r\n // { tit: 'è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点' },\r\n // 'LASTTIME>Time(\"10:00\") & BarClose(\"1\",-1) < PeriodHighIntraday(\"09:30\",\"10:00\") & BarClose(\"1\",0) > PeriodHighIntraday(\"09:30\",\"10:00\")',\r\n // { tit: '从过去50日高点回è½ï¼Œå¹…度大于25%' },\r\n // '$High:PeriodHigh(\"D\",-50,-1);BarClose(\"D\",0)/$High-1<-0.25',\r\n // { tit: '过去3å¤©è¿žç»æ”¾é‡' },\r\n // 'LoopCount({BarVolume(\"D\",#)>Sma(\"VOLUME\",\"D\",5,#-1)},-3,-1,1) >= 3',\r\n // { tit: '60分钟线与SH600000é…对交易的股票' },\r\n // '@BenchMark:Sym_TSN_BarData(\"SH600000\",\"CLOSE\",\"60\")',\r\n // '@Pair:TSN_BarData(\"CLOSE\",\"60\")',\r\n // '@Spread:TS_Divide(@BenchMark,@Pair)',\r\n // '@Mean_Spread:TS_Sma(@Spread,20)',\r\n // '@Std_Spread:TS_Stddev(@Spread,20)',\r\n // 'TS_Get(@Spread,-1)>TS_Get(@Mean_Spread,-1)+TS_Get(@Std_Spread,-1)&TS_Get(@Spread,-2)<TS_Get(@Mean_Spread,-2)+TS_Get(@Std_Spread,-2)'\r\n ]\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'MACD空头排列'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'KDJæ»å‰'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'å‘上跳空缺å£'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '从过去50日高点回è½ï¼Œå¹…度大于25%'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '过去3å¤©è¿žç»æ”¾é‡'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '60分钟线与SH600000é…对交易的股票'\r\n }\r\n\r\n ]\r\n },\r\n {\r\n id: '2-3',\r\n title: '精通级',\r\n children: [\r\n {\r\n id: '2-3-1',\r\n title: '弃婴状æ€',\r\n isHideTitle: 1,\r\n children: [\r\n // 'Abs(BarOpen(\"D\",-2)-BarClose(\"D\",-2))<1/50*BarRange(\"D\",-2) & BarClose(\"D\",-3) < BarOpen(\"D\",-3) & BarClose(\"D\",-1) > BarOpen(\"D\",-1) & BarHigh(\"D\",-2) < BarLow(\"D\",-3) & BarHigh(\"D\",-2) < BarLow(\"D\",-1)',\r\n ]\r\n },\r\n {\r\n id: '2-3-2',\r\n title: 'ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarClose(\"D\",-2)>BarOpen(\"D\",-2) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1) & BarLow(\"D\",-1)<BarLow(\"D\",-2) & BarHigh(\"D\",-1)>=BarHigh(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-3',\r\n title: '熊势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarOpen(\"D\",-2)<BarClose(\"D\",-2) & BarOpen(\"D\",-1)>BarClose(\"D\",-1) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-4',\r\n title: 'ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarClose(\"D\",-2)<BarOpen(\"D\",-2) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1) & BarHigh(\"D\",-1)>BarHigh(\"D\",-2) & BarLow(\"D\",-1)<=BarLow(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-5',\r\n title: '牛势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarOpen(\"D\",-2)>BarClose(\"D\",-2) & BarOpen(\"D\",-1)<BarClose(\"D\",-1) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-6',\r\n title: '60åˆ†é’Ÿçº¿ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)>BarOpen(\"60\",-2) & BarOpen(\"60\",-2)>BarClose(\"60\",-1) & BarClose(\"60\",-2)<BarOpen(\"60\",-1) & BarLow(\"60\",-1)<BarLow(\"60\",-2) & BarHigh(\"60\",-1)>=BarHigh(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-7',\r\n title: '60åˆ†é’Ÿçº¿ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)<BarOpen(\"60\",-2) & BarOpen(\"60\",-2)<BarClose(\"60\",-1) & BarClose(\"60\",-2)>BarOpen(\"60\",-1) & BarHigh(\"60\",-1)>BarHigh(\"60\",-2) & BarLow(\"60\",-1)<=BarLow(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-8',\r\n title: '看涨三明治线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1) <BarOpen('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-9',\r\n title: '乌云盖顶',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-2)>BarOpen('D',-2) & BarRange('D',-2)>SmaBarRange('D',-21, -2)+0.5*StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>2/3*BarRange('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & BarClose('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-10',\r\n title: '下é™ä¸‰æ³•',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)<BarOpen('D',-5) & BarClose('D',-1)<BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarLow('D',-1)<BarLow('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-11',\r\n title: '锤头',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)<PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-12',\r\n title: 'åŠé¢ˆçº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-13',\r\n title: '上å‡ä¸‰æ³•å½¢æ€',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)>BarOpen('D',-5) & BarClose('D',-1)>BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarHigh('D',-1)>BarHigh('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-14',\r\n title: '20æ—¥å‡çº¿ä¸Šç©¿60æ—¥å‡çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Sma20DAY_VOLUME>1000000 & Sma('CLOSE','D',20,-1)>=SMA('CLOSE','D',60,-1) & LoopAnd({SMA('CLOSE','D',20,$)<SMA('CLOSE','D',60,$)},-5,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-15',\r\n title: '䏋陿’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST<PeriodLow('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)<BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-16',\r\n title: '䏋陿’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST<PeriodLow('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)<BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-17',\r\n title: 'ç›˜æ•´ä¸‹ç ´æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST<PeriodLow('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-18',\r\n title: 'ä¸Šå‡æ’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST>PeriodHigh('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-19',\r\n title: 'ä¸Šå‡æ’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST>PeriodHigh('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)>BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-20',\r\n title: '盘整上穿日线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST>PeriodHigh('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-21',\r\n title: 'åå—æ˜Ÿ15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/20*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-22',\r\n title: 'åå—æ˜Ÿæ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & Abs(BarOpen('D',-1)-BarClose('D',-1))<1/20*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-23',\r\n title: 'å‘下冲击30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)<SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)<SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-24',\r\n title: 'å‘下冲击60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '60', 20, $)<SMA('CLOSE', '60', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '60', 8, $)<SMA('CLOSE', '60', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-25',\r\n title: '蜻蜓åå—15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/30*BarRange('15',-1) & Abs(BarOpen('15',-1)-BarHigh('15',-1))<1/30*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-26',\r\n title: '蜻蜓åå—æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarOpen('D',-1)-BarHigh('D',-1))<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-27',\r\n title: '墓碑åå—æ˜Ÿ',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & BarClose('D',-1)-BarLow('D',-1)<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-28',\r\n title: '身怀å…甲',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)>BarClose('D',-2) & BarOpen('D',-1)<BarClose('D',-1) & BarOpen('D',-2)>BarClose('D',-1) & BarClose('D',-2)<BarOpen('D',-1) | LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)<BarClose('D',-2) & BarOpen('D',-1)>BarClose('D',-1) & BarOpen('D',-2)<BarClose('D',-1) & BarClose('D',-2)>BarOpen('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-29',\r\n title: '长光头',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))>5/6*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-30',\r\n title: '长实体线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarHigh('D',-1)-BarOpen('D',-1)-BarClose('D',-1)+BarLow('D',-1))<1/20*BarRange('D',-1) & BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-31',\r\n title: 'Marubozu_5',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('5',-1)-BarClose('5',-1))=BarRange('5',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-32',\r\n title: 'Marubozu_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))=BarHigh('D',-1)-BarLow('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-33',\r\n title: 'NarrowRangeBuySignal_15min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg5:AVG(BarRange('15',-1), BarRange('15',-2), BarRange('15',-3), BarRange('15',-4), BarRange('15',-5)); SMA20DAY_VOLUME>1000000 & BarClose('15',-3)>BarOpen('15',-3) & BarClose('15',-2)>BarOpen('15',-2) & BarClose('15',-1)>BarOpen('15',-1) & BarClose('15',0)>BarOpen('15',0) & BarRange('15',0)<1/4*AVG5\"\r\n ]\r\n },\r\n {\r\n id: '2-3-34',\r\n title: 'NR7_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg6:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6), BarRange('30',-7)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)<AVG6/2 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n },\r\n {\r\n id: '2-3-35',\r\n title: 'OpeningRangeBreakdown_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LASTTime>TIME('10:00') & LAST<PeriodLowIntraday('9:30','10:00') & HIGH<=PeriodHighIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-36',\r\n title: 'OpeningRangeBreakup_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & AVGRANGE_20DAY >0.5 & LASTTime>TIME('10:00')& LAST>PeriodHighIntraday('9:30','10:00') & LOW>=PeriodLowIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-37',\r\n title: 'ShootingStar_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-2)>SmaBarRange('D',-21, -2)+StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>5/6*BarRange('D',-2) & BarClose('D',-2)>BarOpen('D',-2) & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarLow('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>BarClose('D',-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-38',\r\n title: 'ShortDay_30',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & BarRange('30',-1)<SmaBarRange('30',-20, -1)*0.7 & Abs(BarClose('30',-1)-BarOpen('30',-1))<1/3*BarRange('30',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-39',\r\n title: 'ShortDay_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)<SmaBarRange('D',-20, -1)-StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<2/3*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-40',\r\n title: 'SpinningTop_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<1/6*BarRange('D',-1) & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))<1.2 & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))>0.8\"\r\n ]\r\n },\r\n {\r\n id: '2-3-41',\r\n title: 'Stars_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarLow('D',-1)>BarHigh('D',-2) | BarHigh('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-42',\r\n title: 'StickSandwich_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1)<BarOpen('D',-1) & BarClose('D',-3)=BarClose('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-12,-3,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-43',\r\n title: 'Uptrend_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-3)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-44',\r\n title: 'UpwardThrust_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)>SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)>SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-45',\r\n title: 'WideRangeBar_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg5:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)>2.2*AVG5 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 2: {\r\n id: '3',\r\n title: '常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '3-1',\r\n title: '关于宽投产å“',\r\n children: [\r\n {\r\n id: '3-1-1',\r\n title: '宽投æä¾›ä»€ä¹ˆæœåŠ¡',\r\n children: [\r\n // '智能é‡åŒ–å¹³å°ï¼šå®½æŠ•拥有100%自主创新的CEPï¼ˆå¤æ‚事件处ç†å¼•擎)技术,全市场Tick级行情数æ®å¤„ç†ï¼Œé¢å‘券商ã€ä¹°æ–¹æœºæž„与个人投资者æä¾›ä¸€ç«™å¼å®Œæ•´é‡åŒ–解决方案。投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€æˆ–宽投独有的å‘导å¼ç®€æ˜“函数与公å¼ï¼Œæ— 需编程,完æˆç–略构建ã€ç–ç•¥é£ŽæŽ§ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ¨¡æ‹Ÿæˆ–实盘è¿è¡Œç‰ï¼Œå¸®åŠ©ç”¨æˆ·ä¾¿åˆ©ã€å¿«é€Ÿã€é«˜æ•ˆå®ŒæˆæŠ•èµ„æ€æƒ³å¹¶æŠ•放市场。',\r\n // '宽投智能é‡åŒ–å¹³å°çš„主è¦åŠŸèƒ½æœ‰ï¼š',\r\n // 'æ€è·¯æŒ–掘 :输入æ€è·¯ï¼Œå³å¾—结果。简易Quancept+å…¬å¼ï¼Œæ— 编程ã€éžå›ºåŒ–ã€‚æ— ç¼–ç¨‹å¤šç§å®žçŽ°æ–¹å¼ï¼šè‡ªç„¶è¯è¨€ã€ç®€æ˜“å…¬å¼ã€å‘导å¼ï¼›æ”¯æŒ15ç§æ—¶é—´å‘¨æœŸ – 日线ã€1,2,3,5,7,10,13,15,30,60分钟线;支æŒä»»æ„跨周期ã€è·¨å“ç§ï¼›æ”¯æŒAè‚¡ã€ç¾Žè‚¡ã€æœŸè´§ã€æœŸæƒ',\r\n // '构建ç–ç•¥ï¼šæ— éœ€ç¼–ç¨‹ï¼Œç®€æ˜“å…¬å¼ç¼–辑器结åˆè‡ªç„¶è¯è¨€ç†è§£ï¼Œ5分钟å³å¯æž„建完整ç–ç•¥ï¼ŒåŒæ—¶æ”¯æŒPythonã€R;选股择时:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è¿›ä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶ï¼›ç»„åˆç–略:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è°ƒä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶',\r\n // '回测验è¯ï¼šç²¾å‡†ä¸¥è°¨å›žæµ‹ï¼Œåˆ†é’Ÿçº§å›žæµ‹æ•ˆçŽ‡æ¯”çº¯Pythonå¹³å°é«˜50å€ä»¥ä¸Šï¼Œæœºå™¨å¦ä¹ 增强ç–略收益,é™ä½Žé£Žé™©å’Œæœ€å¤§å›žæ’¤æ—¥å†…ã€éš”夜ç–略回测低频ã€é«˜é¢‘ç–略回测跨市场ã€è·¨å“ç§ã€è·¨å‘¨æœŸå›žæµ‹;智能ç–略优化- AI驱动ç–略收益增强;å½’å› åˆ†æž-å¤šç»´åº¦æŒ‡æ ‡ç›é€‰ã€é»‘白åå•丰富的图形展示,详细回测报告',\r\n // '智能交易管ç†: 自主创新的集ä¸äº¤æ˜“管ç†ç³»ç»Ÿ CrystalTrade,实现严密ç–略风控与稳å¥ç–略交易;支æŒç®—法下å•ã€å¸‚ä»·ã€é™ä»·ç‰å¤šç§ä¸‹å•类型;æ”¯æŒæ¨¡æ‹Ÿã€å®žç›˜äº¤æ˜“;支æŒå…¨è‡ªåŠ¨äº¤æ˜“å’Œè‡ªåŠ¨è§¦å‘ä¿¡å·æ‰‹å·¥ç¡®è®¤äº¤æ˜“ä¸¤ç§æ¨¡å¼',\r\n // '全能股票机器人',\r\n // '宽投全能股票机器人基于宽投团队多年é‡åŒ–äº¤æ˜“å’Œç³»ç»Ÿç ”å‘ç»éªŒï¼Œåº”用最新人工智能和机器å¦ä¹ 技术,通过è¯éŸ³æˆ–æ–‡å—é—®ç”的交互方å¼ï¼Œå¿«é€ŸåŒ¹é…问题,并æä¾›å¤šç§åœºæ™¯åº”用的智能问ç”ï¼Œæ ¹æ® tick 级实时市场数æ®ï¼Œå°†å…³é”®ä¿¡æ¯æç‚¼å‘ˆçŽ°ã€‚',\r\n // 'é¢å‘普通è¯åˆ¸æŠ•资者,彻底消除é‡åŒ–门槛,帮助用户从海é‡ä¿¡æ¯ä¸æ‰¾åˆ°æœ€é€‚åˆè‡ªå·±çš„ï¼Œä»Žè€Œå¿«é€ŸèŽ·å–æ‹©æ—¶é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹ã€æ™ºèƒ½ç–略优化ã€ç™½è¯äº¤æ˜“ã€ç™½è¯ç›¯ç›˜ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ã€‚',\r\n // '全能股票机器人具有以下三大亮点:',\r\n ]\r\n },\r\n {\r\n id: '3-1-2',\r\n title: '全能股票机器人具有以下三大亮点',\r\n children: [\r\n // '自然è¯è¨€è¯ä¹‰è¯†åˆ«ï¼šå®½æŠ•应用最新人工智能技术,通过è¯éŸ³æˆ–æ–‡å—与å°å®½æœºå™¨äººäº¤äº’,快速智能解æžï¼Œæç‚¼ä¸Žå¼•导用户设置择时选股æ€è·¯ã€‚',\r\n // '识别上下文,对多æ¡é€»è¾‘智能识别',\r\n // 'ä¸åŒåœºæ™¯ä¸‹ï¼Œæ™ºèƒ½é—®ç”和智能æé†’',\r\n // '快速识别,闪电匹é…',\r\n // 'éšé—®éšç”ï¼Œéšæ—¶å¾…命',\r\n // '自定义多æ¡ä»¶ç»„åˆï¼š',\r\n // '多个选股æ¡ä»¶å¯ä»¥è‡ªå®šä¹‰å åŠ ï¼Œä»¥ä¾¿ç¼©å°ç›é€‰èŒƒå›´ï¼Œæ”¯æŒä½¿ç”¨è‡ªå®šä¹‰åŸºæœ¬é¢æŒ‡æ ‡å’ŒæŠ€æœ¯é¢æŒ‡æ ‡è¿›è¡Œå åŠ ç›é€‰ï¼ŒåŒæ—¶å¯¹é€‰å‡ºçš„è‚¡ç¥¨è¿›è¡Œæ¶¨è·Œå¹…æŽ’åºæˆ–ä»·æ ¼æŽ’åºï¼Œç»™ç”¨æˆ·å‘ˆçŽ°å‡ºæœ€æœ‰ä»·å€¼çš„é€‰è‚¡ç»“æžœï¼ˆä¾‹ï¼šæ¶¨å¹…å‰å,从å°åˆ°å¤§æŽ’åºï¼‰ã€‚',\r\n // '用户还å¯é€šè¿‡è‡ªç„¶è¯è¨€ä¸Žæœºå™¨äººå¯¹è¯çš„æ–¹å¼æ¥å®šä¹‰å›žæµ‹æ¡ä»¶ï¼Œæ¯”如æ¢ç›ˆæ¢æŸï¼Œæœ€å¤§æŒä»“æœŸå¼ºå¤§å¹¶ç®€å•æ–¹ä¾¿ã€‚',\r\n // '完整é‡åŒ–æµç¨‹',\r\n // '投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€ï¼Œæ— éœ€ç¼–ç¨‹ï¼Œå®Œæˆæ™ºèƒ½ç™½è¯é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ™ºèƒ½ç™½è¯ä¸‹å•ã€æ™ºèƒ½ç™½è¯ç›¯ç›˜ã€æ¨¡æ‹Ÿæˆ–实盘ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ï¼Œå®žçŽ°å…¨æµç¨‹çš„é‡åŒ–æŠ•èµ„ç ”ç©¶æˆ–äº¤æ˜“ã€‚',\r\n // 'Alphaé‡åŒ–å› åæœåŠ¡å¹³å°',\r\n // '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°ï¼Œæ˜¯å®½æŠ•å›¢é˜Ÿä¾æ‰˜é‡‘èžå¤§æ•°æ®å¼€å‘çš„é‡åŒ–æœåС平å°ï¼Œå…‹æœäº†ä¼ 统é‡åŒ–å› åå¼€å‘过程ä¸çš„ç§ç§é—®é¢˜ï¼Œä»¥é‡‘èžå¤§æ•°æ®ç»“åˆäººå·¥æ™ºèƒ½æŠ€æœ¯ï¼Œè‡ªåŠ¨åŒ–å› å生æˆã€æ™ºèƒ½å› å分æžã€æŠ•资组åˆä¼˜åŒ–,历å²å›žæµ‹ï¼Œæ¨¡æ‹Ÿæˆ–实盘交易。',\r\n ]\r\n },\r\n {\r\n id: '3-1-3',\r\n title: '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°èƒ½åšåˆ°çš„',\r\n children: [\r\n // 'è‡ªåŠ¨åŒ–å› å生æˆï¼šæ— 需编程,采用宽投特有的简易公å¼ç»“åˆè´¢åŠ¡æ•°æ®ã€æŠ€æœ¯æŒ‡æ ‡ã€èˆ†æƒ…情感ã€å®žæ—¶é‡ä»·ç‰æ•°æ®ï¼Œæ›´çµæ´»ä¸°å¯Œçš„å®žçŽ°è‡ªå®šä¹‰å› å生æˆ',\r\n // '支æŒå¤šæ™ºèƒ½å› å分æžï¼šå¯åŒæ—¶å¯¹å¤šä¸ªå› å进行智能分æžï¼Œæ‰¹é‡è¿ç®—ï¼Œæ›´é«˜æ•ˆã€æ›´å…¨é¢çš„å®žçŽ°å› åè¯„ä»·æŒ‡æ ‡',\r\n // '智能投资组åˆä¼˜åŒ–——把信æ¯ã€é£Žé™©ä»¥åŠçº¦æŸç³»ç»Ÿæ€§åœ°ç»“åˆåœ¨ä¸€èµ·è¿›è¡ŒæŠ•资组åˆä¼˜åŒ–'\r\n ]\r\n },\r\n {\r\n id: '3-1-4',\r\n title: '智能é‡åŒ–å¹³å°å®¢æˆ·ç«¯ç”¨æˆ·å¦‚何下载使用',\r\n children: [\r\n // '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入InSync 客户端和CrystalTrade 客户端下载页é¢',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-5',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒInSync 客户端和 CrystalTrade 客户端账å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-6',\r\n title: '全能股票机器人如何下载使用',\r\n children: [\r\n // '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入Andriod手机APP下载页é¢ï¼›',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ³¨å†Œæ‰‹æœºå·ç åŠå¯†ç ç›´æŽ¥ç™»å½•ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ‰‹æœºå·æ³¨å†ŒåŽï¼Œä»¥æ‰‹æœºå·ç™»å½•ï¼›'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-7',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼Œæ‰‹æœºAPPè´¦å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-8',\r\n title: 'Alphaé‡åŒ–å› åæœåŠ¡å¦‚ä½•è¯•ç”¨',\r\n children: [\r\n // '打开宽投Alphaé‡åŒ–å› åæœåŠ¡ç½‘å€http://www.alpha4me.comï¼›',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥ï¼›'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-9',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒAlphaé‡åŒ–å› åæœåŠ¡å¹³å°è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-10',\r\n title: '如何与宽投å–å¾—è”ç³»',\r\n children: [\r\n // '您å¯ä»¥é€šè¿‡ä»¥ä¸‹é€”径咨询å„类使用宽投产å“过程ä¸é‡åˆ°çš„问题:',\r\n // '客æœç”µè¯ï¼š021-',\r\n // '客æœQQ群:',\r\n // '客æœé‚®ç®±ï¼šinfo@quancept.cn',\r\n ]\r\n },\r\n {\r\n id: '3-1-11',\r\n title: '宽投是å¦å…è´¹',\r\n children: [\r\n // '试用版用户æä¾›çš„æœåŠ¡å’Œæ•°æ®éƒ½æ˜¯å…è´¹çš„ï¼Œè¯•ç”¨è´¦å·æœ‰æ•ˆæœŸä¸ºä¸¤å‘¨',\r\n // 'è´ä¹°æ ‡å‡†ç‰ˆå¯ä»¥ä½¿ç”¨æ›´å¤šçš„功能和专业æœåŠ¡',\r\n // '若您有æ„å‘,å¯è‡´ç”µå’¨è¯¢'\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 3: {\r\n id: '4',\r\n title: 'InSync 相关',\r\n children: [\r\n {\r\n id: '4-1',\r\n title: 'ç–略常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-1-1',\r\n title: '如何构建一个最简å•çš„ç–ç•¥',\r\n children: [\r\n // 'å‚ç…§ 精选ç–ç•¥ï¼Œä¿®æ”¹å…¬å¼æˆ–傿•°åŽï¼Œå¤åˆ¶ç²˜è´´åˆ°æ–°å»ºè¿‡æ»¤å™¨çª—å£ï¼›',\r\n // '从精选ç–略克隆一个您感兴趣的ç–略;',\r\n // '新建一个ç–略,从头开始实现自己的交易æ€è·¯ï¼›',\r\n // 'å¦‚æžœæ‚¨æƒ³è¦æ›´è¯¦ç»†çš„了解如何写ç–略,点击这里。'\r\n ]\r\n },\r\n {\r\n id: '4-1-2',\r\n title: '如何快速检验投资æ€è·¯',\r\n children: [\r\n // '用户通过自然è¯è¨€æˆ–便æ·å…¬å¼æž„建好ç–ç•¥åŽï¼Œå¼€å§‹ç´§ç›¯å¸‚场,快速检验自己的投资æ€è·¯ã€‚',\r\n // 'æ¤æ—¶ï¼Œæœ‰ä¸¤ç§å¼•擎模å¼ä¾›ç”¨æˆ·é€‰æ‹©ï¼š',\r\n // 'ç¬¬ä¸€ç§æ˜¯å…¨å¸‚场触å‘过滤',\r\n // 'Tick by tick驱动过滤引擎,在ç–ç•¥è¿è¡Œæ—¶ï¼Œä¸€æ—¦æœ‰ç›®æ ‡è‚¡ç¥¨æ»¡è¶³æ¡ä»¶ï¼Œå°±ä¼šç«‹å³å‡ºçŽ°åˆ°é¢„è¦çª—å£ã€‚还å¯ä»¥è®¾ç½®å®šæ—¶å™¨ï¼ŒæŒ‡å®šæ—¶é—´æ¥æ‰«æã€‚',\r\n // 'ç¬¬äºŒç§æ˜¯æ¨ªå‘市场扫æ',\r\n // '用户å¯ä¸€æ¬¡æ€§æ‰«æå…¨å¸‚场,当å‰ç¬¦åˆæ¡ä»¶çš„股票就会全部过滤出æ¥ï¼Œä»¥æ¤æ¥æ£€éªŒè‡ªå·±çš„æŠ•资æ€è·¯ã€‚',\r\n // '如下图:'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '4-1-3',\r\n title: '我的ç–ç•¥å½’è°æ‰€æœ‰',\r\n children: [\r\n // '您对自己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n },\r\n {\r\n id: '4-1-4',\r\n title: '我的ç–略是å¦å®‰å…¨',\r\n children: [\r\n // '您对自宽投éžå¸¸ä¸¥è‚ƒå¯¹å¾…用户的ç–略安全问题。我们æä¾›ä¸šç•Œæœ€é«˜çš„å®‰å…¨ä¿æŠ¤ï¼Œé™¤äº†æ‚¨æœ¬äººï¼Œä»»ä½•äººæ— æ³•èŽ·å–æ‚¨çš„ç–略。己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '4-2',\r\n title: '回测常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-2-1',\r\n title: '回测的作用',\r\n children: [\r\n // { tit: '回测的作用' },\r\n // { tit: 'ç–ç•¥æœ‰æ•ˆä½“çŽ°äº†æ‚¨çš„äº¤æ˜“æ€æƒ³ï¼Œå®½æŠ•æä¾›ç®€å•易用ã€ä¸“业高效的ç–略回测平å°ï¼Œé€šè¿‡åކ岿•°æ®å›žæµ‹ï¼Œå¯ä»¥æ£€éªŒç–略的有效性。您å¯ä»¥ä¸“æ³¨äºŽç ”ç©¶ç–略逻辑,而ä¸å¿…被数æ®èŽ·å–ã€äº¤æ˜“æ’®åˆã€å›žæµ‹æŠ¥å‘Šç‰ç¹ç细节所困扰,除æ¤ä¹‹å¤–,宽投还æä¾›äº†å„ç§ä¸“业的ç–ç•¥å›žæµ‹å›¾è¡¨æŠ¥å‘Šï¼Œä¸ºæ‚¨èƒ½ç ”ç©¶æ›´å¤šæ›´æœ‰æ•ˆçš„ç–略而æœåŠ¡ã€‚', hide: 1 },\r\n // { tit: '按日回测和分钟回测的区别', hide: 1 },\r\n // { tit: '按日回测: æ¯å¤©è°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一个交易日的数æ®', hide: 1 },\r\n // { tit: '分钟回测: æ¯åˆ†é’Ÿè°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一分钟的数æ®', hide: 1 },\r\n // { tit: '频率:日', hide: 1 },\r\n // { tit: 'å½“é€‰æ‹©æ—¥é¢‘çŽ‡æ—¶ï¼Œç®—æ³•åœ¨æ¯æ ¹æ—¥çº¿ Bar 都会è¿è¡Œä¸€æ¬¡ï¼Œå³æ¯å¤©è¿è¡Œä¸€æ¬¡', hide: 1 },\r\n // { tit: '在算法ä¸ï¼Œå¯ä»¥èŽ·å–任何粒度的数æ®', hide: 1 },\r\n // { tit: 'æ—¥K线(Baråºåˆ—)', hide: 1 }\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '4-2-2',\r\n title: '按日回测和分钟回测的区别',\r\n children: [\r\n // { tit: '频率:Tick' },\r\n // { tit: '当选择 Tick 频率时,æ¯å½“有一个新 Tick,算法都会被执行一次', hide: 1 },\r\n // { tit: '回测å¯ä»¥ä½¿ç”¨å“ªäº›æ•°æ®', hide: 1 },\r\n // { tit: '回测å¯ä»¥å…费使用宽投æä¾›çš„æ‰€æœ‰æ•°æ®ã€‚å›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®æœ‰ä¸€å¤©çš„延时,å³å½“天的交易数æ®åœ¨ç¬¬äºŒå¤©æ›´æ–°åŽå¯ä½¿ç”¨', hide: 1 },\r\n // { tit: 'å»¶æ—¶åŽŸå› ï¼šå›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®åŸºäºŽLevel-1行情数æ®ï¼ŒLevel-1的完整交易数æ®éœ€è¦æ”¶ç›˜åŽæ‰èƒ½èŽ·å¾—', hide: 1 }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 4: {\r\n id: '5',\r\n title: 'CrystalTrade 相关',\r\n children: [\r\n {\r\n id: '5-1',\r\n title: '模拟交易的作用',\r\n children: [\r\n // {\r\n // id: '5-1-1',\r\n // title: '模拟交易的作用',\r\n // isHideTitle: 1,\r\n // children: [\r\n // { tit: '' }\r\n // ]\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-2',\r\n title: 'æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n children: [\r\n // {\r\n // id: '5-2-1',\r\n // title: 'æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ]\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-3',\r\n title: '如何进行模拟交易',\r\n children: [\r\n // {\r\n // id: '5-3-1',\r\n // title: '如何进行模拟交易',\r\n // isHideTitle: 1,\r\n // children: [\r\n\r\n // ],\r\n // img: [src6, src7]\r\n // },\r\n // {\r\n // id: '5-3-2',\r\n // title: '',\r\n // isHideTitle: 1,\r\n // children: [\r\n\r\n // ],\r\n // img: src8\r\n // },\r\n // {\r\n // id: '5-3-3',\r\n // title: '',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ],\r\n // img: src9\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-4',\r\n title: '我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n children: [\r\n // {\r\n // id: '5-4-1',\r\n // title: '我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ]\r\n // }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n\r\nexport default help_side_cn;","const help_side_en = {\r\n 0: {\r\n id: '1',\r\n title: '快速入门',\r\n children: [\r\n {\r\n id: '1-1',\r\n num: '1',\r\n title: 'InSync 快速入门',\r\n children: [\r\n {\r\n id: '1-1-1',\r\n num: '1.1',\r\n title: 'InSync 使用手册',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n },\r\n {\r\n id: '1-1-2',\r\n num: '1.2',\r\n title: 'InSync 视频教程',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-2',\r\n num: '2',\r\n title: 'CrystalTrade 快速入门',\r\n children: [\r\n {\r\n id: '1-2-1',\r\n num: '2.1',\r\n title: ' CrystalTrade 使用手册',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n },\r\n {\r\n id: '1-2-2',\r\n num: '2.2',\r\n title: ' CrystalTrade 完整视频教程',\r\n children: '',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-3',\r\n num: '3',\r\n title: '全能股票机器人',\r\n children: [\r\n {\r\n id: '1-3-1',\r\n num: '3.1',\r\n title: '',\r\n children: '点击观看视频教程',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-4',\r\n num: '4.',\r\n title: 'Alpha é‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n {\r\n id: '1-4-1',\r\n num: '4.1',\r\n title: '',\r\n children: '下载使用手册',\r\n url: 'http://www.baidu.com',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 1: {\r\n id: '2',\r\n title: '精选ç–ç•¥',\r\n children: [\r\n {\r\n id: '2-1',\r\n num: '1',\r\n title: '入门级',\r\n children: '',\r\n children: [\r\n {\r\n id: '2-1-1',\r\n num: '1.1',\r\n title: '行情é¢',\r\n children: [\r\n {\r\n tit: 'è‚¡ä»·åˆ›åŽ†å²æ–°é«˜'\r\n },\r\n // 'BarHigh(\"D\",0)>=HistoryHigh(\"qianfuquan\",\"out_date\")',\r\n {\r\n tit: '股价大于100Last>100'\r\n },\r\n {\r\n tit: '振幅大于5%'\r\n },\r\n // 'BarRange(\"D\",0)/BarClose(\"D\",-1) > 0.05',\r\n { tit: '开盘价å‘上跳空' },\r\n // 'BarOpen(\"D\",0)>BarHigh(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-1-2',\r\n num: '1.2',\r\n title: '技术é¢',\r\n children: [\r\n { tit: 'è‚¡ä»·çªç ´å¸ƒæž—线上轨' },\r\n // 'BarClose(\"D\",-1) < BbUpper(\"D\",20,2,-1) & BarClose(\"D\",0) >BbUpper(\"D\",20,2,0)',\r\n { tit: '今天放é‡2å€' },\r\n // 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)*2',\r\n { tit: '釿¯”大于2å°äºŽ5' },\r\n // 'VolumeRatio(\"Now\") > 2 & VolumeRatio(\"Now\") < 5',\r\n { tit: 'æ¢æ‰‹çŽ‡å¤§äºŽ5%' },\r\n // 'TurnoverRate(\"D\",0) > 0.05'\r\n ]\r\n },\r\n {\r\n id: '2-1-3',\r\n num: '1.3',\r\n title: '财务é¢',\r\n children: [\r\n { tit: 'æ¯è‚¡æ”¶ç›ŠåŒæ¯”å¢žåŠ 1.5å…ƒ' },\r\n // 'JB_CW_ByIndex(4,-1)>JB_CW_ByIndex(4,-5)+1.5',\r\n { tit: 'æ¯è‚¡å‡€èµ„äº§çŽ¯æ¯”å¢žåŠ 5%' },\r\n // 'JB_CW_ByIndex(5,-1)>JB_CW_ByIndex(5,-2)*(1.05)',\r\n { tit: 'æ¯è‚¡æœªåˆ†é…利润大于2' },\r\n // 'JB_CW_ByIndex(9,-1) > 2',\r\n { tit: 'æµé€šè‚¡è‚¡æœ¬åŒæ¯”å¢žåŠ 10%' },\r\n // 'JB_CW_ByIndex(37,-1)*10000>JB_CW_ByIndex(37,-5)*10000*(1.1)',\r\n { tit: '总股本å‡å°‘一åƒä¸‡è‚¡' },\r\n // 'JB_CW_ByIndex(36,-1)*10000<JB_CW_ByIndex(36,-5)*10000-10000000'\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '2-2',\r\n num: '2',\r\n title: '进阶级',\r\n children: [\r\n {\r\n id: '2-2-1',\r\n title: '60分钟MACD金å‰',\r\n children: [\r\n // { tit: '60分钟MACD金å‰' },\r\n // 'Macd_DIF(\"CLOSE\",\"1\",12,26,-1)<Macd_DEA(\"CLOSE\",\"1\",12,26,9,-1)&Macd_DIF(\"CLOSE\",\"1\",12,26,0)>Macd_DEA(\"CLOSE\",\"1\",12,26,9,0)',\r\n // { tit: 'MACD空头排列' },\r\n // { tit: 'KDJæ»å‰' },\r\n // 'KDJ_K(\"D\",9,-1)>KDJ_D(\"D\",9,-1)&KDJ_K(\"D\",9,0)<KDJ_D(\"D\",9,0)',\r\n // { tit: '5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿' },\r\n // 'Sma(\"CLOSE\",\"D\",5,-1) < Sma(\"CLOSE\",\"D\",10,-1) & Sma(\"CLOSE\",\"D\",5,0) > Sma(\"CLOSE\",\"D\",10,0)',\r\n // { tit: 'å‘上跳空缺å£' },\r\n // 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)',\r\n // { tit: 'ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%' },\r\n // 'BarClose(\"D\",0) >= LoopAvg({BarClose(\"D\",#)},-5,-1,1) * (1+0.1)',\r\n // { tit: 'è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点' },\r\n // 'LASTTIME>Time(\"10:00\") & BarClose(\"1\",-1) < PeriodHighIntraday(\"09:30\",\"10:00\") & BarClose(\"1\",0) > PeriodHighIntraday(\"09:30\",\"10:00\")',\r\n // { tit: '从过去50日高点回è½ï¼Œå¹…度大于25%' },\r\n // '$High:PeriodHigh(\"D\",-50,-1);BarClose(\"D\",0)/$High-1<-0.25',\r\n // { tit: '过去3å¤©è¿žç»æ”¾é‡' },\r\n // 'LoopCount({BarVolume(\"D\",#)>Sma(\"VOLUME\",\"D\",5,#-1)},-3,-1,1) >= 3',\r\n // { tit: '60分钟线与SH600000é…对交易的股票' },\r\n // '@BenchMark:Sym_TSN_BarData(\"SH600000\",\"CLOSE\",\"60\")',\r\n // '@Pair:TSN_BarData(\"CLOSE\",\"60\")',\r\n // '@Spread:TS_Divide(@BenchMark,@Pair)',\r\n // '@Mean_Spread:TS_Sma(@Spread,20)',\r\n // '@Std_Spread:TS_Stddev(@Spread,20)',\r\n // 'TS_Get(@Spread,-1)>TS_Get(@Mean_Spread,-1)+TS_Get(@Std_Spread,-1)&TS_Get(@Spread,-2)<TS_Get(@Mean_Spread,-2)+TS_Get(@Std_Spread,-2)'\r\n ]\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'MACD空头排列'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'KDJæ»å‰'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'å‘上跳空缺å£'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: 'è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '从过去50日高点回è½ï¼Œå¹…度大于25%'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '过去3å¤©è¿žç»æ”¾é‡'\r\n },\r\n {\r\n id: '2-2-2',\r\n title: '60分钟线与SH600000é…对交易的股票'\r\n }\r\n\r\n ]\r\n },\r\n {\r\n id: '2-3',\r\n title: '精通级',\r\n children: [\r\n {\r\n id: '2-3-1',\r\n title: '弃婴状æ€',\r\n isHideTitle: 1,\r\n children: [\r\n // 'Abs(BarOpen(\"D\",-2)-BarClose(\"D\",-2))<1/50*BarRange(\"D\",-2) & BarClose(\"D\",-3) < BarOpen(\"D\",-3) & BarClose(\"D\",-1) > BarOpen(\"D\",-1) & BarHigh(\"D\",-2) < BarLow(\"D\",-3) & BarHigh(\"D\",-2) < BarLow(\"D\",-1)',\r\n ]\r\n },\r\n {\r\n id: '2-3-2',\r\n title: 'ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarClose(\"D\",-2)>BarOpen(\"D\",-2) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1) & BarLow(\"D\",-1)<BarLow(\"D\",-2) & BarHigh(\"D\",-1)>=BarHigh(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-3',\r\n title: '熊势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarOpen(\"D\",-2)<BarClose(\"D\",-2) & BarOpen(\"D\",-1)>BarClose(\"D\",-1) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-4',\r\n title: 'ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarClose(\"D\",-2)<BarOpen(\"D\",-2) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1) & BarHigh(\"D\",-1)>BarHigh(\"D\",-2) & BarLow(\"D\",-1)<=BarLow(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-5',\r\n title: '牛势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n // 'BarOpen(\"D\",-2)>BarClose(\"D\",-2) & BarOpen(\"D\",-1)<BarClose(\"D\",-1) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-6',\r\n title: '60åˆ†é’Ÿçº¿ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)>BarOpen(\"60\",-2) & BarOpen(\"60\",-2)>BarClose(\"60\",-1) & BarClose(\"60\",-2)<BarOpen(\"60\",-1) & BarLow(\"60\",-1)<BarLow(\"60\",-2) & BarHigh(\"60\",-1)>=BarHigh(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-7',\r\n title: '60åˆ†é’Ÿçº¿ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n // 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)<BarOpen(\"60\",-2) & BarOpen(\"60\",-2)<BarClose(\"60\",-1) & BarClose(\"60\",-2)>BarOpen(\"60\",-1) & BarHigh(\"60\",-1)>BarHigh(\"60\",-2) & BarLow(\"60\",-1)<=BarLow(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-8',\r\n title: '看涨三明治线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1) <BarOpen('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-9',\r\n title: '乌云盖顶',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-2)>BarOpen('D',-2) & BarRange('D',-2)>SmaBarRange('D',-21, -2)+0.5*StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>2/3*BarRange('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & BarClose('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-10',\r\n title: '下é™ä¸‰æ³•',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)<BarOpen('D',-5) & BarClose('D',-1)<BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarLow('D',-1)<BarLow('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-11',\r\n title: '锤头',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)<PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-12',\r\n title: 'åŠé¢ˆçº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-13',\r\n title: '上å‡ä¸‰æ³•å½¢æ€',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)>BarOpen('D',-5) & BarClose('D',-1)>BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarHigh('D',-1)>BarHigh('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-14',\r\n title: '20æ—¥å‡çº¿ä¸Šç©¿60æ—¥å‡çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Sma20DAY_VOLUME>1000000 & Sma('CLOSE','D',20,-1)>=SMA('CLOSE','D',60,-1) & LoopAnd({SMA('CLOSE','D',20,$)<SMA('CLOSE','D',60,$)},-5,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-15',\r\n title: '䏋陿’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST<PeriodLow('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)<BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-16',\r\n title: '䏋陿’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST<PeriodLow('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)<BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-17',\r\n title: 'ç›˜æ•´ä¸‹ç ´æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST<PeriodLow('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-18',\r\n title: 'ä¸Šå‡æ’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST>PeriodHigh('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-19',\r\n title: 'ä¸Šå‡æ’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST>PeriodHigh('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)>BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-20',\r\n title: '盘整上穿日线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST>PeriodHigh('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-21',\r\n title: 'åå—æ˜Ÿ15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/20*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-22',\r\n title: 'åå—æ˜Ÿæ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & Abs(BarOpen('D',-1)-BarClose('D',-1))<1/20*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-23',\r\n title: 'å‘下冲击30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)<SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)<SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-24',\r\n title: 'å‘下冲击60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '60', 20, $)<SMA('CLOSE', '60', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '60', 8, $)<SMA('CLOSE', '60', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-25',\r\n title: '蜻蜓åå—15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/30*BarRange('15',-1) & Abs(BarOpen('15',-1)-BarHigh('15',-1))<1/30*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-26',\r\n title: '蜻蜓åå—æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarOpen('D',-1)-BarHigh('D',-1))<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-27',\r\n title: '墓碑åå—æ˜Ÿ',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & BarClose('D',-1)-BarLow('D',-1)<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-28',\r\n title: '身怀å…甲',\r\n isHideTitle: 1,\r\n children: [\r\n // \"LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)>BarClose('D',-2) & BarOpen('D',-1)<BarClose('D',-1) & BarOpen('D',-2)>BarClose('D',-1) & BarClose('D',-2)<BarOpen('D',-1) | LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)<BarClose('D',-2) & BarOpen('D',-1)>BarClose('D',-1) & BarOpen('D',-2)<BarClose('D',-1) & BarClose('D',-2)>BarOpen('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-29',\r\n title: '长光头',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))>5/6*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-30',\r\n title: '长实体线',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarHigh('D',-1)-BarOpen('D',-1)-BarClose('D',-1)+BarLow('D',-1))<1/20*BarRange('D',-1) & BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-31',\r\n title: 'Marubozu_5',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('5',-1)-BarClose('5',-1))=BarRange('5',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-32',\r\n title: 'Marubozu_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Abs(BarOpen('D',-1)-BarClose('D',-1))=BarHigh('D',-1)-BarLow('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-33',\r\n title: 'NarrowRangeBuySignal_15min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg5:AVG(BarRange('15',-1), BarRange('15',-2), BarRange('15',-3), BarRange('15',-4), BarRange('15',-5)); SMA20DAY_VOLUME>1000000 & BarClose('15',-3)>BarOpen('15',-3) & BarClose('15',-2)>BarOpen('15',-2) & BarClose('15',-1)>BarOpen('15',-1) & BarClose('15',0)>BarOpen('15',0) & BarRange('15',0)<1/4*AVG5\"\r\n ]\r\n },\r\n {\r\n id: '2-3-34',\r\n title: 'NR7_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg6:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6), BarRange('30',-7)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)<AVG6/2 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n },\r\n {\r\n id: '2-3-35',\r\n title: 'OpeningRangeBreakdown_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LASTTime>TIME('10:00') & LAST<PeriodLowIntraday('9:30','10:00') & HIGH<=PeriodHighIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-36',\r\n title: 'OpeningRangeBreakup_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & AVGRANGE_20DAY >0.5 & LASTTime>TIME('10:00')& LAST>PeriodHighIntraday('9:30','10:00') & LOW>=PeriodLowIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-37',\r\n title: 'ShootingStar_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-2)>SmaBarRange('D',-21, -2)+StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>5/6*BarRange('D',-2) & BarClose('D',-2)>BarOpen('D',-2) & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarLow('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>BarClose('D',-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-38',\r\n title: 'ShortDay_30',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>500000 & BarRange('30',-1)<SmaBarRange('30',-20, -1)*0.7 & Abs(BarClose('30',-1)-BarOpen('30',-1))<1/3*BarRange('30',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-39',\r\n title: 'ShortDay_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)<SmaBarRange('D',-20, -1)-StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<2/3*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-40',\r\n title: 'SpinningTop_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<1/6*BarRange('D',-1) & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))<1.2 & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))>0.8\"\r\n ]\r\n },\r\n {\r\n id: '2-3-41',\r\n title: 'Stars_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarLow('D',-1)>BarHigh('D',-2) | BarHigh('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-42',\r\n title: 'StickSandwich_D',\r\n isHideTitle: 1,\r\n children: [\r\n // \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1)<BarOpen('D',-1) & BarClose('D',-3)=BarClose('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-12,-3,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-43',\r\n title: 'Uptrend_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-3)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-44',\r\n title: 'UpwardThrust_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)>SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)>SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-45',\r\n title: 'WideRangeBar_30min',\r\n isHideTitle: 1,\r\n children: [\r\n // \"Avg5:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)>2.2*AVG5 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 2: {\r\n id: '3',\r\n title: '常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '3-1',\r\n title: '关于宽投产å“',\r\n children: [\r\n {\r\n id: '3-1-1',\r\n title: '宽投æä¾›ä»€ä¹ˆæœåŠ¡',\r\n children: [\r\n // '智能é‡åŒ–å¹³å°ï¼šå®½æŠ•拥有100%自主创新的CEPï¼ˆå¤æ‚事件处ç†å¼•擎)技术,全市场Tick级行情数æ®å¤„ç†ï¼Œé¢å‘券商ã€ä¹°æ–¹æœºæž„与个人投资者æä¾›ä¸€ç«™å¼å®Œæ•´é‡åŒ–解决方案。投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€æˆ–宽投独有的å‘导å¼ç®€æ˜“函数与公å¼ï¼Œæ— 需编程,完æˆç–略构建ã€ç–ç•¥é£ŽæŽ§ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ¨¡æ‹Ÿæˆ–实盘è¿è¡Œç‰ï¼Œå¸®åŠ©ç”¨æˆ·ä¾¿åˆ©ã€å¿«é€Ÿã€é«˜æ•ˆå®ŒæˆæŠ•èµ„æ€æƒ³å¹¶æŠ•放市场。',\r\n // '宽投智能é‡åŒ–å¹³å°çš„主è¦åŠŸèƒ½æœ‰ï¼š',\r\n // 'æ€è·¯æŒ–掘 :输入æ€è·¯ï¼Œå³å¾—结果。简易Quancept+å…¬å¼ï¼Œæ— 编程ã€éžå›ºåŒ–ã€‚æ— ç¼–ç¨‹å¤šç§å®žçŽ°æ–¹å¼ï¼šè‡ªç„¶è¯è¨€ã€ç®€æ˜“å…¬å¼ã€å‘导å¼ï¼›æ”¯æŒ15ç§æ—¶é—´å‘¨æœŸ – 日线ã€1,2,3,5,7,10,13,15,30,60分钟线;支æŒä»»æ„跨周期ã€è·¨å“ç§ï¼›æ”¯æŒAè‚¡ã€ç¾Žè‚¡ã€æœŸè´§ã€æœŸæƒ',\r\n // '构建ç–ç•¥ï¼šæ— éœ€ç¼–ç¨‹ï¼Œç®€æ˜“å…¬å¼ç¼–辑器结åˆè‡ªç„¶è¯è¨€ç†è§£ï¼Œ5分钟å³å¯æž„建完整ç–ç•¥ï¼ŒåŒæ—¶æ”¯æŒPythonã€R;选股择时:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è¿›ä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶ï¼›ç»„åˆç–略:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è°ƒä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶',\r\n // '回测验è¯ï¼šç²¾å‡†ä¸¥è°¨å›žæµ‹ï¼Œåˆ†é’Ÿçº§å›žæµ‹æ•ˆçŽ‡æ¯”çº¯Pythonå¹³å°é«˜50å€ä»¥ä¸Šï¼Œæœºå™¨å¦ä¹ 增强ç–略收益,é™ä½Žé£Žé™©å’Œæœ€å¤§å›žæ’¤æ—¥å†…ã€éš”夜ç–略回测低频ã€é«˜é¢‘ç–略回测跨市场ã€è·¨å“ç§ã€è·¨å‘¨æœŸå›žæµ‹;智能ç–略优化- AI驱动ç–略收益增强;å½’å› åˆ†æž-å¤šç»´åº¦æŒ‡æ ‡ç›é€‰ã€é»‘白åå•丰富的图形展示,详细回测报告',\r\n // '智能交易管ç†: 自主创新的集ä¸äº¤æ˜“管ç†ç³»ç»Ÿ CrystalTrade,实现严密ç–略风控与稳å¥ç–略交易;支æŒç®—法下å•ã€å¸‚ä»·ã€é™ä»·ç‰å¤šç§ä¸‹å•类型;æ”¯æŒæ¨¡æ‹Ÿã€å®žç›˜äº¤æ˜“;支æŒå…¨è‡ªåŠ¨äº¤æ˜“å’Œè‡ªåŠ¨è§¦å‘ä¿¡å·æ‰‹å·¥ç¡®è®¤äº¤æ˜“ä¸¤ç§æ¨¡å¼',\r\n // '全能股票机器人',\r\n // '宽投全能股票机器人基于宽投团队多年é‡åŒ–äº¤æ˜“å’Œç³»ç»Ÿç ”å‘ç»éªŒï¼Œåº”用最新人工智能和机器å¦ä¹ 技术,通过è¯éŸ³æˆ–æ–‡å—é—®ç”的交互方å¼ï¼Œå¿«é€ŸåŒ¹é…问题,并æä¾›å¤šç§åœºæ™¯åº”用的智能问ç”ï¼Œæ ¹æ® tick 级实时市场数æ®ï¼Œå°†å…³é”®ä¿¡æ¯æç‚¼å‘ˆçŽ°ã€‚',\r\n // 'é¢å‘普通è¯åˆ¸æŠ•资者,彻底消除é‡åŒ–门槛,帮助用户从海é‡ä¿¡æ¯ä¸æ‰¾åˆ°æœ€é€‚åˆè‡ªå·±çš„ï¼Œä»Žè€Œå¿«é€ŸèŽ·å–æ‹©æ—¶é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹ã€æ™ºèƒ½ç–略优化ã€ç™½è¯äº¤æ˜“ã€ç™½è¯ç›¯ç›˜ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ã€‚',\r\n // '全能股票机器人具有以下三大亮点:',\r\n ]\r\n },\r\n {\r\n id: '3-1-2',\r\n title: '全能股票机器人具有以下三大亮点',\r\n children: [\r\n // '自然è¯è¨€è¯ä¹‰è¯†åˆ«ï¼šå®½æŠ•应用最新人工智能技术,通过è¯éŸ³æˆ–æ–‡å—与å°å®½æœºå™¨äººäº¤äº’,快速智能解æžï¼Œæç‚¼ä¸Žå¼•导用户设置择时选股æ€è·¯ã€‚',\r\n // '识别上下文,对多æ¡é€»è¾‘智能识别',\r\n // 'ä¸åŒåœºæ™¯ä¸‹ï¼Œæ™ºèƒ½é—®ç”和智能æé†’',\r\n // '快速识别,闪电匹é…',\r\n // 'éšé—®éšç”ï¼Œéšæ—¶å¾…命',\r\n // '自定义多æ¡ä»¶ç»„åˆï¼š',\r\n // '多个选股æ¡ä»¶å¯ä»¥è‡ªå®šä¹‰å åŠ ï¼Œä»¥ä¾¿ç¼©å°ç›é€‰èŒƒå›´ï¼Œæ”¯æŒä½¿ç”¨è‡ªå®šä¹‰åŸºæœ¬é¢æŒ‡æ ‡å’ŒæŠ€æœ¯é¢æŒ‡æ ‡è¿›è¡Œå åŠ ç›é€‰ï¼ŒåŒæ—¶å¯¹é€‰å‡ºçš„è‚¡ç¥¨è¿›è¡Œæ¶¨è·Œå¹…æŽ’åºæˆ–ä»·æ ¼æŽ’åºï¼Œç»™ç”¨æˆ·å‘ˆçŽ°å‡ºæœ€æœ‰ä»·å€¼çš„é€‰è‚¡ç»“æžœï¼ˆä¾‹ï¼šæ¶¨å¹…å‰å,从å°åˆ°å¤§æŽ’åºï¼‰ã€‚',\r\n // '用户还å¯é€šè¿‡è‡ªç„¶è¯è¨€ä¸Žæœºå™¨äººå¯¹è¯çš„æ–¹å¼æ¥å®šä¹‰å›žæµ‹æ¡ä»¶ï¼Œæ¯”如æ¢ç›ˆæ¢æŸï¼Œæœ€å¤§æŒä»“æœŸå¼ºå¤§å¹¶ç®€å•æ–¹ä¾¿ã€‚',\r\n // '完整é‡åŒ–æµç¨‹',\r\n // '投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€ï¼Œæ— éœ€ç¼–ç¨‹ï¼Œå®Œæˆæ™ºèƒ½ç™½è¯é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ™ºèƒ½ç™½è¯ä¸‹å•ã€æ™ºèƒ½ç™½è¯ç›¯ç›˜ã€æ¨¡æ‹Ÿæˆ–实盘ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ï¼Œå®žçŽ°å…¨æµç¨‹çš„é‡åŒ–æŠ•èµ„ç ”ç©¶æˆ–äº¤æ˜“ã€‚',\r\n // 'Alphaé‡åŒ–å› åæœåŠ¡å¹³å°',\r\n // '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°ï¼Œæ˜¯å®½æŠ•å›¢é˜Ÿä¾æ‰˜é‡‘èžå¤§æ•°æ®å¼€å‘çš„é‡åŒ–æœåС平å°ï¼Œå…‹æœäº†ä¼ 统é‡åŒ–å› åå¼€å‘过程ä¸çš„ç§ç§é—®é¢˜ï¼Œä»¥é‡‘èžå¤§æ•°æ®ç»“åˆäººå·¥æ™ºèƒ½æŠ€æœ¯ï¼Œè‡ªåŠ¨åŒ–å› å生æˆã€æ™ºèƒ½å› å分æžã€æŠ•资组åˆä¼˜åŒ–,历å²å›žæµ‹ï¼Œæ¨¡æ‹Ÿæˆ–实盘交易。',\r\n ]\r\n },\r\n {\r\n id: '3-1-3',\r\n title: '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°èƒ½åšåˆ°çš„',\r\n children: [\r\n // 'è‡ªåŠ¨åŒ–å› å生æˆï¼šæ— 需编程,采用宽投特有的简易公å¼ç»“åˆè´¢åŠ¡æ•°æ®ã€æŠ€æœ¯æŒ‡æ ‡ã€èˆ†æƒ…情感ã€å®žæ—¶é‡ä»·ç‰æ•°æ®ï¼Œæ›´çµæ´»ä¸°å¯Œçš„å®žçŽ°è‡ªå®šä¹‰å› å生æˆ',\r\n // '支æŒå¤šæ™ºèƒ½å› å分æžï¼šå¯åŒæ—¶å¯¹å¤šä¸ªå› å进行智能分æžï¼Œæ‰¹é‡è¿ç®—ï¼Œæ›´é«˜æ•ˆã€æ›´å…¨é¢çš„å®žçŽ°å› åè¯„ä»·æŒ‡æ ‡',\r\n // '智能投资组åˆä¼˜åŒ–——把信æ¯ã€é£Žé™©ä»¥åŠçº¦æŸç³»ç»Ÿæ€§åœ°ç»“åˆåœ¨ä¸€èµ·è¿›è¡ŒæŠ•资组åˆä¼˜åŒ–'\r\n ]\r\n },\r\n {\r\n id: '3-1-4',\r\n title: '智能é‡åŒ–å¹³å°å®¢æˆ·ç«¯ç”¨æˆ·å¦‚何下载使用',\r\n children: [\r\n // '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入InSync 客户端和CrystalTrade 客户端下载页é¢',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-5',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒInSync 客户端和 CrystalTrade 客户端账å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-6',\r\n title: '全能股票机器人如何下载使用',\r\n children: [\r\n // '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入Andriod手机APP下载页é¢ï¼›',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ³¨å†Œæ‰‹æœºå·ç åŠå¯†ç ç›´æŽ¥ç™»å½•ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ‰‹æœºå·æ³¨å†ŒåŽï¼Œä»¥æ‰‹æœºå·ç™»å½•ï¼›'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-7',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼Œæ‰‹æœºAPPè´¦å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-8',\r\n title: 'Alphaé‡åŒ–å› åæœåŠ¡å¦‚ä½•è¯•ç”¨',\r\n children: [\r\n // '打开宽投Alphaé‡åŒ–å› åæœåŠ¡ç½‘å€http://www.alpha4me.comï¼›',\r\n // 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥ï¼›'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '3-1-9',\r\n title: '',\r\n children: [\r\n // '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒAlphaé‡åŒ–å› åæœåŠ¡å¹³å°è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ]\r\n },\r\n {\r\n id: '3-1-10',\r\n title: '如何与宽投å–å¾—è”ç³»',\r\n children: [\r\n // '您å¯ä»¥é€šè¿‡ä»¥ä¸‹é€”径咨询å„类使用宽投产å“过程ä¸é‡åˆ°çš„问题:',\r\n // '客æœç”µè¯ï¼š021-',\r\n // '客æœQQ群:',\r\n // '客æœé‚®ç®±ï¼šinfo@quancept.cn',\r\n ]\r\n },\r\n {\r\n id: '3-1-11',\r\n title: '宽投是å¦å…è´¹',\r\n children: [\r\n // '试用版用户æä¾›çš„æœåŠ¡å’Œæ•°æ®éƒ½æ˜¯å…è´¹çš„ï¼Œè¯•ç”¨è´¦å·æœ‰æ•ˆæœŸä¸ºä¸¤å‘¨',\r\n // 'è´ä¹°æ ‡å‡†ç‰ˆå¯ä»¥ä½¿ç”¨æ›´å¤šçš„功能和专业æœåŠ¡',\r\n // '若您有æ„å‘,å¯è‡´ç”µå’¨è¯¢'\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 3: {\r\n id: '4',\r\n title: 'InSync 相关',\r\n children: [\r\n {\r\n id: '4-1',\r\n title: 'ç–略常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-1-1',\r\n title: '如何构建一个最简å•çš„ç–ç•¥',\r\n children: [\r\n // 'å‚ç…§ 精选ç–ç•¥ï¼Œä¿®æ”¹å…¬å¼æˆ–傿•°åŽï¼Œå¤åˆ¶ç²˜è´´åˆ°æ–°å»ºè¿‡æ»¤å™¨çª—å£ï¼›',\r\n // '从精选ç–略克隆一个您感兴趣的ç–略;',\r\n // '新建一个ç–略,从头开始实现自己的交易æ€è·¯ï¼›',\r\n // 'å¦‚æžœæ‚¨æƒ³è¦æ›´è¯¦ç»†çš„了解如何写ç–略,点击这里。'\r\n ]\r\n },\r\n {\r\n id: '4-1-2',\r\n title: '如何快速检验投资æ€è·¯',\r\n children: [\r\n // '用户通过自然è¯è¨€æˆ–便æ·å…¬å¼æž„建好ç–ç•¥åŽï¼Œå¼€å§‹ç´§ç›¯å¸‚场,快速检验自己的投资æ€è·¯ã€‚',\r\n // 'æ¤æ—¶ï¼Œæœ‰ä¸¤ç§å¼•擎模å¼ä¾›ç”¨æˆ·é€‰æ‹©ï¼š',\r\n // 'ç¬¬ä¸€ç§æ˜¯å…¨å¸‚场触å‘过滤',\r\n // 'Tick by tick驱动过滤引擎,在ç–ç•¥è¿è¡Œæ—¶ï¼Œä¸€æ—¦æœ‰ç›®æ ‡è‚¡ç¥¨æ»¡è¶³æ¡ä»¶ï¼Œå°±ä¼šç«‹å³å‡ºçŽ°åˆ°é¢„è¦çª—å£ã€‚还å¯ä»¥è®¾ç½®å®šæ—¶å™¨ï¼ŒæŒ‡å®šæ—¶é—´æ¥æ‰«æã€‚',\r\n // 'ç¬¬äºŒç§æ˜¯æ¨ªå‘市场扫æ',\r\n // '用户å¯ä¸€æ¬¡æ€§æ‰«æå…¨å¸‚场,当å‰ç¬¦åˆæ¡ä»¶çš„股票就会全部过滤出æ¥ï¼Œä»¥æ¤æ¥æ£€éªŒè‡ªå·±çš„æŠ•资æ€è·¯ã€‚',\r\n // '如下图:'\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '4-1-3',\r\n title: '我的ç–ç•¥å½’è°æ‰€æœ‰',\r\n children: [\r\n // '您对自己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n },\r\n {\r\n id: '4-1-4',\r\n title: '我的ç–略是å¦å®‰å…¨',\r\n children: [\r\n // '您对自宽投éžå¸¸ä¸¥è‚ƒå¯¹å¾…用户的ç–略安全问题。我们æä¾›ä¸šç•Œæœ€é«˜çš„å®‰å…¨ä¿æŠ¤ï¼Œé™¤äº†æ‚¨æœ¬äººï¼Œä»»ä½•äººæ— æ³•èŽ·å–æ‚¨çš„ç–略。己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '4-2',\r\n title: '回测常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-2-1',\r\n title: '回测的作用',\r\n children: [\r\n // { tit: '回测的作用' },\r\n // { tit: 'ç–ç•¥æœ‰æ•ˆä½“çŽ°äº†æ‚¨çš„äº¤æ˜“æ€æƒ³ï¼Œå®½æŠ•æä¾›ç®€å•易用ã€ä¸“业高效的ç–略回测平å°ï¼Œé€šè¿‡åކ岿•°æ®å›žæµ‹ï¼Œå¯ä»¥æ£€éªŒç–略的有效性。您å¯ä»¥ä¸“æ³¨äºŽç ”ç©¶ç–略逻辑,而ä¸å¿…被数æ®èŽ·å–ã€äº¤æ˜“æ’®åˆã€å›žæµ‹æŠ¥å‘Šç‰ç¹ç细节所困扰,除æ¤ä¹‹å¤–,宽投还æä¾›äº†å„ç§ä¸“业的ç–ç•¥å›žæµ‹å›¾è¡¨æŠ¥å‘Šï¼Œä¸ºæ‚¨èƒ½ç ”ç©¶æ›´å¤šæ›´æœ‰æ•ˆçš„ç–略而æœåŠ¡ã€‚', hide: 1 },\r\n // { tit: '按日回测和分钟回测的区别', hide: 1 },\r\n // { tit: '按日回测: æ¯å¤©è°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一个交易日的数æ®', hide: 1 },\r\n // { tit: '分钟回测: æ¯åˆ†é’Ÿè°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一分钟的数æ®', hide: 1 },\r\n // { tit: '频率:日', hide: 1 },\r\n // { tit: 'å½“é€‰æ‹©æ—¥é¢‘çŽ‡æ—¶ï¼Œç®—æ³•åœ¨æ¯æ ¹æ—¥çº¿ Bar 都会è¿è¡Œä¸€æ¬¡ï¼Œå³æ¯å¤©è¿è¡Œä¸€æ¬¡', hide: 1 },\r\n // { tit: '在算法ä¸ï¼Œå¯ä»¥èŽ·å–任何粒度的数æ®', hide: 1 },\r\n // { tit: 'æ—¥K线(Baråºåˆ—)', hide: 1 }\r\n ],\r\n img: ''\r\n },\r\n {\r\n id: '4-2-2',\r\n title: '按日回测和分钟回测的区别',\r\n children: [\r\n // { tit: '频率:Tick' },\r\n // { tit: '当选择 Tick 频率时,æ¯å½“有一个新 Tick,算法都会被执行一次', hide: 1 },\r\n // { tit: '回测å¯ä»¥ä½¿ç”¨å“ªäº›æ•°æ®', hide: 1 },\r\n // { tit: '回测å¯ä»¥å…费使用宽投æä¾›çš„æ‰€æœ‰æ•°æ®ã€‚å›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®æœ‰ä¸€å¤©çš„延时,å³å½“天的交易数æ®åœ¨ç¬¬äºŒå¤©æ›´æ–°åŽå¯ä½¿ç”¨', hide: 1 },\r\n // { tit: 'å»¶æ—¶åŽŸå› ï¼šå›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®åŸºäºŽLevel-1行情数æ®ï¼ŒLevel-1的完整交易数æ®éœ€è¦æ”¶ç›˜åŽæ‰èƒ½èŽ·å¾—', hide: 1 }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 4: {\r\n id: '5',\r\n title: 'CrystalTrade 相关',\r\n children: [\r\n {\r\n id: '5-1',\r\n title: '模拟交易的作用',\r\n children: [\r\n // {\r\n // id: '5-1-1',\r\n // title: '模拟交易的作用',\r\n // isHideTitle: 1,\r\n // children: [\r\n // { tit: '' }\r\n // ]\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-2',\r\n title: 'æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n children: [\r\n // {\r\n // id: '5-2-1',\r\n // title: 'æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ]\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-3',\r\n title: '如何进行模拟交易',\r\n children: [\r\n // {\r\n // id: '5-3-1',\r\n // title: '如何进行模拟交易',\r\n // isHideTitle: 1,\r\n // children: [\r\n\r\n // ],\r\n // img: [src6, src7]\r\n // },\r\n // {\r\n // id: '5-3-2',\r\n // title: '',\r\n // isHideTitle: 1,\r\n // children: [\r\n\r\n // ],\r\n // img: src8\r\n // },\r\n // {\r\n // id: '5-3-3',\r\n // title: '',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ],\r\n // img: src9\r\n // }\r\n ]\r\n },\r\n {\r\n id: '5-4',\r\n title: '我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n children: [\r\n // {\r\n // id: '5-4-1',\r\n // title: '我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n // isHideTitle: 1,\r\n // children: [\r\n // ]\r\n // }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n\r\nexport default help_side_en;","import React, { Component } from \"react\";\r\nimport Search from \"../search/search\";\r\nimport { Tree } from 'antd';\r\n\r\nimport help_side_cn from './../help_side_cn';\r\nimport help_side_en from './../help_side_en';\r\n\r\nconst { TreeNode } = Tree;\r\n\r\nclass SideMenu extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n searchData: [],\r\n index: 0,\r\n searchResult: [],\r\n searchStatus: false,\r\n data: window.webType === 'US' ? help_side_en : help_side_cn,\r\n treeData: [],\r\n treeResult: [],\r\n placeholder: 'åœ¨å¸®åŠ©ä¸æœç´¢'\r\n };\r\n }\r\n\r\n filterData(list) {\r\n let i = 0\r\n let that = this;\r\n let { searchData } = this.state;\r\n let newList = Array.isArray(list) ? list : [list]\r\n\r\n i++\r\n\r\n newList.map((key, index) => {\r\n if (key.children) {\r\n return that.filterData(key.children);\r\n } else {\r\n let id = key[\"id\"] || `1-${key.tit || key}`;\r\n return searchData.push({ id: `inner-${id}`, value: (key.title || (key.tit || key)) });\r\n }\r\n });\r\n\r\n return this.setState({\r\n searchData\r\n });\r\n }\r\n\r\n initData() {\r\n let list = [];\r\n Object.keys(this.state.data).map(item => {\r\n list.push(this.state.data[item]);\r\n });\r\n this.filterData(list);\r\n }\r\n\r\n searchPos(value) {\r\n if (!value) {\r\n this.setState({\r\n searchStatus: false\r\n })\r\n return;\r\n }\r\n\r\n let id = \"\";\r\n let st = 0;\r\n let res = [];\r\n let { searchResult } = this.state\r\n let { scrollContent } = this.props;\r\n let ele = document.getElementsByClassName(\"side-content\")[0];\r\n\r\n searchResult.length = 0\r\n\r\n this.state.searchData.forEach(item => {\r\n if (item.value.toLowerCase().indexOf(value.toLowerCase()) !== -1) {\r\n\r\n id = item.id;\r\n res.push(id);\r\n st = document.getElementById(id) ? document.getElementById(id).offsetTop : 0;\r\n ele.scrollTop = st;\r\n\r\n searchResult.push({ id, value: item.value })\r\n\r\n\r\n }\r\n\r\n this.setState({\r\n searchStatus: false\r\n })\r\n return (id = \"\");\r\n\r\n });\r\n\r\n this.setState(\r\n {\r\n index: res.length ? res[res.length - 1].split(\"inner-\")[1] : 0,\r\n searchResult\r\n },\r\n () => {\r\n this.props.setCurrentId(this.state.index);\r\n scrollContent && scrollContent(this.state.index);\r\n\r\n if (this.state.searchResult.length) {\r\n this.setState({\r\n searchStatus: true\r\n })\r\n } else {\r\n this.setState({\r\n searchStatus: false\r\n })\r\n }\r\n }\r\n );\r\n }\r\n\r\n handleClickScroll(e) {\r\n let {\r\n target,\r\n target: { id }\r\n } = e;\r\n let ele1 = document.getElementsByClassName(\"side-content\")[0];\r\n let ele2 = document.getElementsByClassName(\"help-content\")[0];\r\n let res = id.split('-')\r\n let contentId = res[0] + '-1-' + res[1]\r\n let resEle = document.getElementById(contentId)\r\n\r\n ele2.scrollTop = resEle.offsetTop;\r\n this.props.currentState && this.props.currentState(this.state.index);\r\n // this.searchPos(innerText);\r\n }\r\n\r\n onSelect(selectedKeys, event) {\r\n const { node: { props: { title } } } = event\r\n let arr = []\r\n\r\n let ele2 = document.getElementsByClassName(\"help-content\")[0];\r\n let dom = ele2.getElementsByTagName('*')\r\n\r\n for (let i = 0; i < dom.length - 1; i++) {\r\n // attr = dom[i].getAttribute('data-cur-title')\r\n let node = dom[i]\r\n let text = dom[i].getAttribute('data-cur-title')\r\n let id = dom[i].id\r\n\r\n if (text) {\r\n arr.push({\r\n id,\r\n node,\r\n text: text.toLocaleLowerCase()\r\n })\r\n }\r\n }\r\n //console.log(title, 'render node ')\r\n\r\n arr.forEach(arrItem => {\r\n //console.log(arrItem.text, 'render item text')\r\n\r\n if (arrItem.text.indexOf(title.toLocaleLowerCase()) > -1) {\r\n ele2.scrollTop = arrItem.node.offsetTop\r\n }\r\n })\r\n\r\n }\r\n\r\n initTree() {\r\n let { treeData } = this.state\r\n let ele2 = document.getElementsByClassName(\"side-content\")[0];\r\n let dom = ele2.getElementsByTagName('*')\r\n\r\n for (let i = 0; i < dom.length - 1; i++) {\r\n let node = dom[i]\r\n let text = dom[i].getAttribute('data-cur-title')\r\n let id = dom[i].id\r\n\r\n if (text) {\r\n treeData.push({\r\n id,\r\n node,\r\n text\r\n })\r\n }\r\n }\r\n\r\n this.setState({\r\n treeData\r\n })\r\n }\r\n\r\n renderSideContent() {\r\n let { index } = this.state;\r\n let { data } = this.state;\r\n\r\n return Object.keys(data).map((item, i) => (\r\n <div className=\"tree-title\" key={item}>\r\n {data[item].title}\r\n {data[item].children.map(outer => (\r\n <div className=\"tree-outer\" key={outer.id}>\r\n {outer.title}\r\n <div className=\"tree-inner\">\r\n {outer.children.map(inner => {\r\n return (\r\n <div\r\n key={inner.id}\r\n id={`inner-${inner.id}`}\r\n className=\"tree-inner-tit\"\r\n onClick={this.handleClickScroll.bind(this)}\r\n >\r\n {\r\n <div\r\n id={`inner-${inner.title}`}\r\n className={`tree-inner-dt ${\r\n inner.id == index ? \"active\" : \"\"\r\n }`}\r\n >\r\n {inner.title}\r\n </div>\r\n }\r\n {Array.isArray(inner.children) ? (\r\n <div className=\"tree-inner-di\">\r\n {inner.children.map(\r\n (descs, i) =>\r\n (descs.tit && !descs.hide) && (\r\n <div\r\n key={i}\r\n id={`inner-${descs.tit}`}\r\n className={`tree-inner-dit ${\r\n descs == index ? \"active\" : \"\"\r\n }`}\r\n >\r\n {descs.tit}\r\n </div>\r\n )\r\n )}\r\n </div>\r\n ) : (\r\n inner.children\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n ));\r\n }\r\n\r\n renderSearchResult() {\r\n let { searchStatus, searchResult } = this.state\r\n\r\n if (!searchStatus) {\r\n return\r\n }\r\n\r\n return searchResult.map((resultItem, index) => {\r\n return (\r\n <div className={\"search-result\"}\r\n onClick={(e) => this.props.scrollContent(e.target.dataset.pos)}\r\n key={resultItem.id + index}\r\n data-pos={resultItem.value}>{resultItem.value}</div>\r\n )\r\n })\r\n }\r\n\r\n renderTreeContent() {\r\n const { data } = this.state\r\n const od = Object.keys(data)\r\n return (<Tree onSelect={this.onSelect.bind(this)}>\r\n {\r\n od.map((tp, index) => {\r\n const di = data[tp]\r\n const fc = di.children\r\n return (\r\n <TreeNode title={di.title} key={`0-${index}`} id={`0-${index}`}>\r\n {\r\n fc.map((fi, fIndex) => (\r\n fi.title ?\r\n <TreeNode title={fi.title} key={`0-${index}-${fIndex}`} id={`0-${index}-${fIndex}`}>\r\n {\r\n fi.children.map((si, sIndex) => (\r\n si.title ?\r\n <TreeNode title={si.title} key={`0-${index}-${fIndex}-${sIndex}`} id={`0-${index}-${fIndex}-${sIndex}`}>\r\n {\r\n si.children ?\r\n Array.isArray(si.children) ?\r\n si.children.map(\r\n (fri, frIndex) => <TreeNode title={fri.tit || fri} key={`0-${index}-${fIndex}-${sIndex}-${frIndex}`} id={`0-${index}-${fIndex}-${sIndex}-${frIndex}`}></TreeNode>) :\r\n <TreeNode title={si.children} key={`0-${index}-${fIndex}-${sIndex}`} id={`0-${index}-${fIndex}-${sIndex}`}></TreeNode> :\r\n null\r\n }\r\n </TreeNode> :\r\n null\r\n ))\r\n }\r\n\r\n </TreeNode>\r\n : null\r\n ))\r\n }\r\n </TreeNode>\r\n // <TreeNode title='88998'></TreeNode>\r\n )\r\n })\r\n }\r\n </Tree>)\r\n }\r\n\r\n searchTree(value) {\r\n if (!value) {\r\n return\r\n }\r\n\r\n let { treeData, treeResult } = this.state\r\n\r\n treeData.forEach(tItem => {\r\n const { text, node, id } = tItem\r\n if (text.indexOf(value) > -1) {\r\n\r\n treeResult.push({\r\n id,\r\n text,\r\n node\r\n })\r\n }\r\n })\r\n\r\n this.setState({\r\n treeResult\r\n }, () => {\r\n })\r\n }\r\n\r\n onChange() {\r\n this.setState({\r\n searchStatus: false\r\n })\r\n }\r\n\r\n onFocus() {\r\n this.setState({\r\n placeholder: ''\r\n })\r\n }\r\n\r\n onBlur() {\r\n this.setState({\r\n placeholder: 'åœ¨å¸®åŠ©ä¸æœç´¢'\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.initData();\r\n this.initTree()\r\n }\r\n\r\n render() {\r\n let { searchStatus, placeholder } = this.state\r\n return (\r\n <div className=\"side-menu\">\r\n <Search search={this.searchPos.bind(this)} onChange={this.onChange.bind(this)} placeholder={placeholder} onFocus={this.onFocus.bind(this)} onBlur={this.onBlur.bind(this)} />\r\n <div className={'side-content'}>\r\n {\r\n searchStatus ?\r\n this.renderSearchResult() :\r\n this.renderTreeContent()\r\n }\r\n </div>\r\n {/* <div className=\"side-content\">\r\n {\r\n searchStatus ?\r\n this.renderSearchResult() :\r\n this.renderSideContent()\r\n }\r\n </div> */}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default SideMenu;","const help_cn = {\r\n 0: {\r\n id: '1',\r\n title: '快速入门',\r\n children: [\r\n {\r\n id: '1-1',\r\n num: '1',\r\n title: '1. InSync 快速入门',\r\n children: [\r\n {\r\n id: '1-1-1',\r\n num: '1.1',\r\n title: '1.1 InSync 使用手册',\r\n children: ['点击查看手册'],\r\n url: 'static/help/宽投InSync使用手册.pdf',\r\n color: '#5aa8ce'\r\n },\r\n /**\r\n {\r\n id: '1-1-2',\r\n num: '1.2',\r\n title: '1.2 InSync 视频教程',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n */\r\n ]\r\n },\r\n {\r\n id: '1-2',\r\n num: '2',\r\n title: '2. CrystalTrade 快速入门',\r\n children: [\r\n {\r\n id: '1-2-1',\r\n num: '2.1',\r\n title: '2.1 CrystalTrade 使用手册',\r\n children: ['下载使用手册'],\r\n url: 'static/help/宽投CrystalTrade使用手册.pdf',\r\n color: '#5aa8ce'\r\n },\r\n /**\r\n {\r\n id: '1-2-2',\r\n num: '2.2',\r\n title: '2.2 CrystalTrade 完整视频教程',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n */\r\n ]\r\n },\r\n /**\r\n {\r\n id: '1-3',\r\n num: '3',\r\n title: '3. 全能股票机器人',\r\n children: [\r\n {\r\n id: '1-3-1',\r\n num: '3.1',\r\n title: '',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-4',\r\n num: '4.',\r\n title: 'Alpha é‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n {\r\n id: '1-4-1',\r\n num: '4.1',\r\n title: '',\r\n children: ['下载使用手册'],\r\n url: 'static/help/宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°.pdf',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n }\r\n */\r\n ]\r\n },\r\n 1: {\r\n id: '2',\r\n title: '精选ç–ç•¥',\r\n children: [\r\n {\r\n id: '2-1',\r\n num: '1',\r\n title: '1. 入门级',\r\n children: [\r\n {\r\n id: '2-1-1',\r\n num: '1.1',\r\n title: '1.1 行情é¢',\r\n children: [\r\n {\r\n tit: '1. è‚¡ä»·åˆ›åŽ†å²æ–°é«˜'\r\n },\r\n 'BarHigh(\"D\",0)>=HistoryHigh(\"qianfuquan\",\"out_date\")',\r\n {\r\n tit: '2. 股价大于100'\r\n },\r\n 'Last>100',\r\n {\r\n tit: '3. 振幅大于5%'\r\n },\r\n 'BarRange(\"D\",0)/BarClose(\"D\",-1) > 0.05',\r\n { tit: '4. 开盘价å‘上跳空' },\r\n 'BarOpen(\"D\",0)>BarHigh(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-1-2',\r\n num: '1.2',\r\n title: '1.2 技术é¢',\r\n children: [\r\n { tit: '1. è‚¡ä»·çªç ´å¸ƒæž—线上轨' },\r\n 'BarClose(\"D\",-1) < BbUpper(\"D\",20,2,-1) & BarClose(\"D\",0) >BbUpper(\"D\",20,2,0)',\r\n { tit: '2. 今天放é‡2å€' },\r\n 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)*2',\r\n { tit: '3. 釿¯”大于2å°äºŽ5' },\r\n 'VolumeRatio(\"Now\") > 2 & VolumeRatio(\"Now\") < 5',\r\n { tit: '4. æ¢æ‰‹çŽ‡å¤§äºŽ5%' },\r\n 'TurnoverRate(\"D\",0) > 0.05'\r\n ]\r\n },\r\n {\r\n id: '2-1-3',\r\n num: '1.3',\r\n title: '1.3 财务é¢',\r\n children: [\r\n { tit: '1. æ¯è‚¡æ”¶ç›ŠåŒæ¯”å¢žåŠ 1.5å…ƒ' },\r\n 'JB_CW_ByIndex(4,-1)>JB_CW_ByIndex(4,-5)+1.5',\r\n { tit: '2. æ¯è‚¡å‡€èµ„äº§çŽ¯æ¯”å¢žåŠ 5%' },\r\n 'JB_CW_ByIndex(5,-1)>JB_CW_ByIndex(5,-2)*(1.05)',\r\n { tit: '3. æ¯è‚¡æœªåˆ†é…利润大于2' },\r\n 'JB_CW_ByIndex(9,-1) > 2',\r\n { tit: '4. æµé€šè‚¡è‚¡æœ¬åŒæ¯”å¢žåŠ 10%' },\r\n 'JB_CW_ByIndex(37,-1)*10000>JB_CW_ByIndex(37,-5)*10000*(1.1)',\r\n { tit: '5. 总股本å‡å°‘一åƒä¸‡è‚¡' },\r\n 'JB_CW_ByIndex(36,-1)*10000<JB_CW_ByIndex(36,-5)*10000-10000000'\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '2-2',\r\n num: '2',\r\n title: '进阶级',\r\n children: [\r\n {\r\n id: '2-2-1',\r\n title: '',\r\n children: [\r\n { tit: '1. 60分钟MACD金å‰' },\r\n 'Macd_DIF(\"CLOSE\",\"1\",12,26,-1)<Macd_DEA(\"CLOSE\",\"1\",12,26,9,-1)&Macd_DIF(\"CLOSE\",\"1\",12,26,0)>Macd_DEA(\"CLOSE\",\"1\",12,26,9,0)',\r\n { tit: '2. MACD空头排列' },\r\n { tit: '3. KDJæ»å‰' },\r\n 'KDJ_K(\"D\",9,-1)>KDJ_D(\"D\",9,-1)&KDJ_K(\"D\",9,0)<KDJ_D(\"D\",9,0)',\r\n { tit: '4. 5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿' },\r\n 'Sma(\"CLOSE\",\"D\",5,-1) < Sma(\"CLOSE\",\"D\",10,-1) & Sma(\"CLOSE\",\"D\",5,0) > Sma(\"CLOSE\",\"D\",10,0)',\r\n { tit: '5. å‘上跳空缺å£' },\r\n 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)',\r\n { tit: '6. ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%' },\r\n 'BarClose(\"D\",0) >= LoopAvg({BarClose(\"D\",#)},-5,-1,1) * (1+0.1)',\r\n { tit: '7. è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点' },\r\n 'LASTTIME>Time(\"10:00\") & BarClose(\"1\",-1) < PeriodHighIntraday(\"09:30\",\"10:00\") & BarClose(\"1\",0) > PeriodHighIntraday(\"09:30\",\"10:00\")',\r\n { tit: '8. 从过去50日高点回è½ï¼Œå¹…度大于25%' },\r\n '$High:PeriodHigh(\"D\",-50,-1);BarClose(\"D\",0)/$High-1<-0.25',\r\n { tit: '9. 过去3å¤©è¿žç»æ”¾é‡' },\r\n 'LoopCount({BarVolume(\"D\",#)>Sma(\"VOLUME\",\"D\",5,#-1)},-3,-1,1) >= 3',\r\n { tit: '10. 60分钟线与SH600000é…对交易的股票' },\r\n '@BenchMark:Sym_TSN_BarData(\"SH600000\",\"CLOSE\",\"60\")',\r\n '@Pair:TSN_BarData(\"CLOSE\",\"60\")',\r\n '@Spread:TS_Divide(@BenchMark,@Pair)',\r\n '@Mean_Spread:TS_Sma(@Spread,20)',\r\n '@Std_Spread:TS_Stddev(@Spread,20)',\r\n 'TS_Get(@Spread,-1)>TS_Get(@Mean_Spread,-1)+TS_Get(@Std_Spread,-1)&TS_Get(@Spread,-2)<TS_Get(@Mean_Spread,-2)+TS_Get(@Std_Spread,-2)'\r\n ]\r\n }\r\n\r\n ]\r\n },\r\n {\r\n id: '2-3',\r\n title: '3. 精通级',\r\n children: [\r\n {\r\n id: '2-3-1',\r\n title: '1. 弃婴状æ€',\r\n isHideTitle: 1,\r\n children: [\r\n 'Abs(BarOpen(\"D\",-2)-BarClose(\"D\",-2))<1/50*BarRange(\"D\",-2) & BarClose(\"D\",-3) < BarOpen(\"D\",-3) & BarClose(\"D\",-1) > BarOpen(\"D\",-1) & BarHigh(\"D\",-2) < BarLow(\"D\",-3) & BarHigh(\"D\",-2) < BarLow(\"D\",-1)',\r\n ]\r\n },\r\n {\r\n id: '2-3-2',\r\n title: '2. ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarClose(\"D\",-2)>BarOpen(\"D\",-2) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1) & BarLow(\"D\",-1)<BarLow(\"D\",-2) & BarHigh(\"D\",-1)>=BarHigh(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-3',\r\n title: '3. 熊势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarOpen(\"D\",-2)<BarClose(\"D\",-2) & BarOpen(\"D\",-1)>BarClose(\"D\",-1) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-4',\r\n title: '4. ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarClose(\"D\",-2)<BarOpen(\"D\",-2) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1) & BarHigh(\"D\",-1)>BarHigh(\"D\",-2) & BarLow(\"D\",-1)<=BarLow(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-5',\r\n title: '5. 牛势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarOpen(\"D\",-2)>BarClose(\"D\",-2) & BarOpen(\"D\",-1)<BarClose(\"D\",-1) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-6',\r\n title: '6. 60åˆ†é’Ÿçº¿ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)>BarOpen(\"60\",-2) & BarOpen(\"60\",-2)>BarClose(\"60\",-1) & BarClose(\"60\",-2)<BarOpen(\"60\",-1) & BarLow(\"60\",-1)<BarLow(\"60\",-2) & BarHigh(\"60\",-1)>=BarHigh(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-7',\r\n title: '7. 60åˆ†é’Ÿçº¿ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)<BarOpen(\"60\",-2) & BarOpen(\"60\",-2)<BarClose(\"60\",-1) & BarClose(\"60\",-2)>BarOpen(\"60\",-1) & BarHigh(\"60\",-1)>BarHigh(\"60\",-2) & BarLow(\"60\",-1)<=BarLow(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-8',\r\n title: '8. 看涨三明治线',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1) <BarOpen('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-9',\r\n title: '9. 乌云盖顶',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-2)>BarOpen('D',-2) & BarRange('D',-2)>SmaBarRange('D',-21, -2)+0.5*StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>2/3*BarRange('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & BarClose('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-10',\r\n title: '10. 下é™ä¸‰æ³•',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)<BarOpen('D',-5) & BarClose('D',-1)<BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarLow('D',-1)<BarLow('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-11',\r\n title: '11. 锤头',\r\n isHideTitle: 1,\r\n children: [\r\n \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)<PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-12',\r\n title: '12. åŠé¢ˆçº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-13',\r\n title: '13. 上å‡ä¸‰æ³•å½¢æ€',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)>BarOpen('D',-5) & BarClose('D',-1)>BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarHigh('D',-1)>BarHigh('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-14',\r\n title: '14. 20æ—¥å‡çº¿ä¸Šç©¿60æ—¥å‡çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"Sma20DAY_VOLUME>1000000 & Sma('CLOSE','D',20,-1)>=SMA('CLOSE','D',60,-1) & LoopAnd({SMA('CLOSE','D',20,$)<SMA('CLOSE','D',60,$)},-5,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-15',\r\n title: '15. 䏋陿’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST<PeriodLow('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)<BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-16',\r\n title: '16. 䏋陿’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST<PeriodLow('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)<BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-17',\r\n title: '17. ç›˜æ•´ä¸‹ç ´æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST<PeriodLow('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-18',\r\n title: '18. ä¸Šå‡æ’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST>PeriodHigh('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-19',\r\n title: '19. ä¸Šå‡æ’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST>PeriodHigh('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)>BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-20',\r\n title: '20. 盘整上穿日线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST>PeriodHigh('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-21',\r\n title: '21. åå—æ˜Ÿ15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/20*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-22',\r\n title: '22. åå—æ˜Ÿæ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & Abs(BarOpen('D',-1)-BarClose('D',-1))<1/20*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-23',\r\n title: '23. å‘下冲击30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)<SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)<SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-24',\r\n title: '24. å‘下冲击60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '60', 20, $)<SMA('CLOSE', '60', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '60', 8, $)<SMA('CLOSE', '60', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-25',\r\n title: '25. 蜻蜓åå—15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/30*BarRange('15',-1) & Abs(BarOpen('15',-1)-BarHigh('15',-1))<1/30*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-26',\r\n title: '26. 蜻蜓åå—æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarOpen('D',-1)-BarHigh('D',-1))<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-27',\r\n title: '27. 墓碑åå—æ˜Ÿ',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & BarClose('D',-1)-BarLow('D',-1)<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-28',\r\n title: '28. 身怀å…甲',\r\n isHideTitle: 1,\r\n children: [\r\n \"LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)>BarClose('D',-2) & BarOpen('D',-1)<BarClose('D',-1) & BarOpen('D',-2)>BarClose('D',-1) & BarClose('D',-2)<BarOpen('D',-1) | LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)<BarClose('D',-2) & BarOpen('D',-1)>BarClose('D',-1) & BarOpen('D',-2)<BarClose('D',-1) & BarClose('D',-2)>BarOpen('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-29',\r\n title: '29. 长光头',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))>5/6*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-30',\r\n title: '30. 长实体线',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarHigh('D',-1)-BarOpen('D',-1)-BarClose('D',-1)+BarLow('D',-1))<1/20*BarRange('D',-1) & BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-31',\r\n title: '31. Marubozu_5',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('5',-1)-BarClose('5',-1))=BarRange('5',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-32',\r\n title: '32. Marubozu_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))=BarHigh('D',-1)-BarLow('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-33',\r\n title: '33. NarrowRangeBuySignal_15min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg5:AVG(BarRange('15',-1), BarRange('15',-2), BarRange('15',-3), BarRange('15',-4), BarRange('15',-5)); SMA20DAY_VOLUME>1000000 & BarClose('15',-3)>BarOpen('15',-3) & BarClose('15',-2)>BarOpen('15',-2) & BarClose('15',-1)>BarOpen('15',-1) & BarClose('15',0)>BarOpen('15',0) & BarRange('15',0)<1/4*AVG5\"\r\n ]\r\n },\r\n {\r\n id: '2-3-34',\r\n title: '34. NR7_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg6:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6), BarRange('30',-7)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)<AVG6/2 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n },\r\n {\r\n id: '2-3-35',\r\n title: '35. OpeningRangeBreakdown_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LASTTime>TIME('10:00') & LAST<PeriodLowIntraday('9:30','10:00') & HIGH<=PeriodHighIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-36',\r\n title: '36. OpeningRangeBreakup_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & AVGRANGE_20DAY >0.5 & LASTTime>TIME('10:00')& LAST>PeriodHighIntraday('9:30','10:00') & LOW>=PeriodLowIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-37',\r\n title: '37. ShootingStar_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-2)>SmaBarRange('D',-21, -2)+StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>5/6*BarRange('D',-2) & BarClose('D',-2)>BarOpen('D',-2) & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarLow('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>BarClose('D',-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-38',\r\n title: '38. ShortDay_30',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & BarRange('30',-1)<SmaBarRange('30',-20, -1)*0.7 & Abs(BarClose('30',-1)-BarOpen('30',-1))<1/3*BarRange('30',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-39',\r\n title: '39. ShortDay_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)<SmaBarRange('D',-20, -1)-StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<2/3*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-40',\r\n title: '40. SpinningTop_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<1/6*BarRange('D',-1) & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))<1.2 & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))>0.8\"\r\n ]\r\n },\r\n {\r\n id: '2-3-41',\r\n title: '41. Stars_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarLow('D',-1)>BarHigh('D',-2) | BarHigh('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-42',\r\n title: '42. StickSandwich_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1)<BarOpen('D',-1) & BarClose('D',-3)=BarClose('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-12,-3,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-43',\r\n title: '43. Uptrend_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-3)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-44',\r\n title: '44. UpwardThrust_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)>SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)>SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-45',\r\n title: '45. WideRangeBar_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg5:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)>2.2*AVG5 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 2: {\r\n id: '3',\r\n title: '常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '3-1',\r\n title: '1. 关于宽投产å“',\r\n children: [\r\n {\r\n id: '3-1-1',\r\n title: '1.1 宽投æä¾›ä»€ä¹ˆæœåŠ¡',\r\n children: ''\r\n },\r\n {\r\n id: '3-1-2',\r\n title: '1)智能é‡åŒ–å¹³å°',\r\n children: [\r\n '宽投拥有100%自主创新的CEPï¼ˆå¤æ‚事件处ç†å¼•擎)技术,全市场Tick级行情数æ®å¤„ç†ï¼Œé¢å‘券商ã€ä¹°æ–¹æœºæž„与个人投资者æä¾›ä¸€ç«™å¼å®Œæ•´é‡åŒ–解决方案。投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€æˆ–宽投独有的å‘导å¼ç®€æ˜“函数与公å¼ï¼Œæ— 需编程,完æˆç–略构建ã€ç–ç•¥é£ŽæŽ§ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ¨¡æ‹Ÿæˆ–实盘è¿è¡Œç‰ï¼Œå¸®åŠ©ç”¨æˆ·ä¾¿åˆ©ã€å¿«é€Ÿã€é«˜æ•ˆå®ŒæˆæŠ•èµ„æ€æƒ³å¹¶æŠ•放市场。',\r\n '宽投智能é‡åŒ–å¹³å°çš„主è¦åŠŸèƒ½æœ‰ï¼š',\r\n { point: 1, tit: 'æ€è·¯æŒ–掘 :输入æ€è·¯ï¼Œå³å¾—结果。简易Quancept+å…¬å¼ï¼Œæ— 编程ã€éžå›ºåŒ–。支æŒAè‚¡ã€ç¾Žè‚¡ã€æœŸè´§ã€æœŸæƒ' },\r\n { point: 1, tit: 'æ— ç¼–ç¨‹å¤šç§å®žçŽ°æ–¹å¼ï¼šè‡ªç„¶è¯è¨€ã€ç®€æ˜“å…¬å¼ã€å‘导å¼' },\r\n { point: 1, tit: '支æŒ15ç§æ—¶é—´å‘¨æœŸ – 日线ã€1,2,3,5,7,10,13,15,30,60分钟线' },\r\n { point: 1, tit: '支æŒä»»æ„跨周期ã€è·¨å“ç§ï¼›' },\r\n { point: 1, tit: '构建ç–ç•¥ï¼šæ— éœ€ç¼–ç¨‹ï¼Œç®€æ˜“å…¬å¼ç¼–辑器结åˆè‡ªç„¶è¯è¨€ç†è§£ï¼Œ5分钟å³å¯æž„建完整ç–ç•¥ï¼ŒåŒæ—¶æ”¯æŒPythonã€R' },\r\n { point: 1, tit: '选股择时:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è¿›ä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶' },\r\n { point: 1, tit: '组åˆç–略:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è°ƒä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶' },\r\n { point: 1, tit: '回测验è¯ï¼šç²¾å‡†ä¸¥è°¨å›žæµ‹ï¼Œåˆ†é’Ÿçº§å›žæµ‹æ•ˆçŽ‡æ¯”çº¯Pythonå¹³å°é«˜50å€ä»¥ä¸Šï¼Œæœºå™¨å¦ä¹ 增强ç–略收益,é™ä½Žé£Žé™©å’Œæœ€å¤§å›žæ’¤ã€‚' },\r\n { point: 1, tit: '日内ã€éš”夜ç–略回测' },\r\n { point: 1, tit: '跨市场ã€è·¨å“ç§ã€è·¨å‘¨æœŸå›žæµ‹' },\r\n { point: 1, tit: '智能ç–略优化- AI驱动ç–略收益增强' },\r\n { point: 1, tit: 'å½’å› åˆ†æž-å¤šç»´åº¦æŒ‡æ ‡ç›é€‰ã€é»‘白åå•' },\r\n { point: 1, tit: '丰富的图形展示,详细回测报告' },\r\n { point: 1, tit: '智能交易管ç†: 自主创新的集ä¸äº¤æ˜“管ç†ç³»ç»Ÿ CrystalTrade,实现严密ç–略风控与稳å¥ç–略交易' },\r\n { point: 1, tit: '支æŒç®—法下å•ã€å¸‚ä»·ã€é™ä»·ç‰å¤šç§ä¸‹å•类型' },\r\n { point: 1, tit: 'æ”¯æŒæ¨¡æ‹Ÿã€å®žç›˜äº¤æ˜“' },\r\n { point: 1, tit: '支æŒå…¨è‡ªåŠ¨äº¤æ˜“å’Œè‡ªåŠ¨è§¦å‘ä¿¡å·æ‰‹å·¥ç¡®è®¤äº¤æ˜“ä¸¤ç§æ¨¡å¼' },\r\n ]\r\n },\r\n {\r\n id: '3-1-3',\r\n title: '2)全能股票机器人',\r\n children: [\r\n '宽投全能股票机器人基于宽投团队多年é‡åŒ–äº¤æ˜“å’Œç³»ç»Ÿç ”å‘ç»éªŒï¼Œåº”用最新人工智能和机器å¦ä¹ 技术,通过è¯éŸ³æˆ–æ–‡å—é—®ç”的交互方å¼ï¼Œå¿«é€ŸåŒ¹é…问题,并æä¾›å¤šç§åœºæ™¯åº”用的智能问ç”ï¼Œæ ¹æ® tick 级实时市场数æ®ï¼Œå°†å…³é”®ä¿¡æ¯æç‚¼å‘ˆçŽ°ã€‚',\r\n 'é¢å‘普通è¯åˆ¸æŠ•资者,彻底消除é‡åŒ–门槛,帮助用户从海é‡ä¿¡æ¯ä¸æ‰¾åˆ°æœ€é€‚åˆè‡ªå·±çš„ï¼Œä»Žè€Œå¿«é€ŸèŽ·å–æ‹©æ—¶é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹ã€æ™ºèƒ½ç–略优化ã€ç™½è¯äº¤æ˜“ã€ç™½è¯ç›¯ç›˜ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ã€‚',\r\n '全能股票机器人具有以下三大亮点:',\r\n { point: 1, tit: '自然è¯è¨€è¯ä¹‰è¯†åˆ«' },\r\n '宽投应用最新人工智能技术,通过è¯éŸ³æˆ–æ–‡å—与å°å®½æœºå™¨äººäº¤äº’,快速智能解æžï¼Œæç‚¼ä¸Žå¼•导用户设置择时选股æ€è·¯ã€‚',\r\n { point: 1, tit: '识别上下文,对多æ¡é€»è¾‘智能识别' },\r\n { point: 1, tit: 'ä¸åŒåœºæ™¯ä¸‹ï¼Œæ™ºèƒ½é—®ç”和智能æé†’' },\r\n { point: 1, tit: '快速识别,闪电匹é…' },\r\n { point: 1, tit: 'éšé—®éšç”ï¼Œéšæ—¶å¾…命' },\r\n { point: 1, tit: '自定义多æ¡ä»¶ç»„åˆ' },\r\n '多个选股æ¡ä»¶å¯ä»¥è‡ªå®šä¹‰å åŠ ï¼Œä»¥ä¾¿ç¼©å°ç›é€‰èŒƒå›´ï¼Œæ”¯æŒä½¿ç”¨è‡ªå®šä¹‰åŸºæœ¬é¢æŒ‡æ ‡å’ŒæŠ€æœ¯é¢æŒ‡æ ‡è¿›è¡Œå åŠ ç›é€‰ï¼ŒåŒæ—¶å¯¹é€‰å‡ºçš„è‚¡ç¥¨è¿›è¡Œæ¶¨è·Œå¹…æŽ’åºæˆ–ä»·æ ¼æŽ’åºï¼Œç»™ç”¨æˆ·å‘ˆçŽ°å‡ºæœ€æœ‰ä»·å€¼çš„é€‰è‚¡ç»“æžœï¼ˆä¾‹ï¼šæ¶¨å¹…å‰å,从å°åˆ°å¤§æŽ’åºï¼‰ã€‚用户还å¯é€šè¿‡è‡ªç„¶è¯è¨€ä¸Žæœºå™¨äººå¯¹è¯çš„æ–¹å¼æ¥å®šä¹‰å›žæµ‹æ¡ä»¶ï¼Œæ¯”如æ¢ç›ˆæ¢æŸï¼Œæœ€å¤§æŒä»“æœŸå¼ºå¤§å¹¶ç®€å•æ–¹ä¾¿ã€‚',\r\n { point: 1, tit: '完整é‡åŒ–æµç¨‹' },\r\n '投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€ï¼Œæ— éœ€ç¼–ç¨‹ï¼Œå®Œæˆæ™ºèƒ½ç™½è¯é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ™ºèƒ½ç™½è¯ä¸‹å•ã€æ™ºèƒ½ç™½è¯ç›¯ç›˜ã€æ¨¡æ‹Ÿæˆ–实盘ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ï¼Œå®žçŽ°å…¨æµç¨‹çš„é‡åŒ–æŠ•èµ„ç ”ç©¶æˆ–äº¤æ˜“ã€‚',\r\n ]\r\n },\r\n {\r\n id: '3-1-4',\r\n title: '3)Alphaé‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°ï¼Œæ˜¯å®½æŠ•å›¢é˜Ÿä¾æ‰˜é‡‘èžå¤§æ•°æ®å¼€å‘çš„é‡åŒ–æœåС平å°ï¼Œå…‹æœäº†ä¼ 统é‡åŒ–å› åå¼€å‘过程ä¸çš„ç§ç§é—®é¢˜ï¼Œä»¥é‡‘èžå¤§æ•°æ®ç»“åˆäººå·¥æ™ºèƒ½æŠ€æœ¯ï¼Œè‡ªåŠ¨åŒ–å› å生æˆã€æ™ºèƒ½å› å分æžã€æŠ•资组åˆä¼˜åŒ–,历å²å›žæµ‹ï¼Œæ¨¡æ‹Ÿæˆ–实盘交易。',\r\n { point: 1, tit: 'è‡ªåŠ¨åŒ–å› å生æˆï¼šæ— 需编程,采用宽投特有的简易公å¼ç»“åˆè´¢åŠ¡æ•°æ®ã€æŠ€æœ¯æŒ‡æ ‡ã€èˆ†æƒ…情感ã€å®žæ—¶é‡ä»·ç‰æ•°æ®ï¼Œæ›´çµæ´»ä¸°å¯Œçš„å®žçŽ°è‡ªå®šä¹‰å› å生æˆ' },\r\n { point: 1, tit: '支æŒå¤šæ™ºèƒ½å› å分æžï¼šå¯åŒæ—¶å¯¹å¤šä¸ªå› å进行智能分æžï¼Œæ‰¹é‡è¿ç®—ï¼Œæ›´é«˜æ•ˆã€æ›´å…¨é¢çš„å®žçŽ°å› åè¯„ä»·æŒ‡æ ‡' },\r\n { point: 1, tit: '智能投资组åˆä¼˜åŒ–——把信æ¯ã€é£Žé™©ä»¥åŠçº¦æŸç³»ç»Ÿæ€§åœ°ç»“åˆåœ¨ä¸€èµ·è¿›è¡ŒæŠ•资组åˆä¼˜åŒ–' },\r\n ]\r\n },\r\n {\r\n id: '3-1-5',\r\n title: '1.2 智能é‡åŒ–å¹³å°å®¢æˆ·ç«¯ç”¨æˆ·å¦‚何下载使用:',\r\n children: [\r\n { point: 1, tit: '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入InSync 客户端和CrystalTrade 客户端下载页é¢' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒInSync 客户端和 CrystalTrade 客户端账å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-1.png'\r\n },\r\n {\r\n id: '3-1-6',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-7',\r\n title: '1.3 全能股票机器人如何下载使用:',\r\n children: [\r\n { point: 1, tit: '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入Andriod手机APP下载页é¢ï¼›' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ³¨å†Œæ‰‹æœºå·ç åŠå¯†ç ç›´æŽ¥ç™»å½•ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ‰‹æœºå·æ³¨å†ŒåŽï¼Œä»¥æ‰‹æœºå·ç™»å½•ï¼›' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼Œæ‰‹æœºAPPè´¦å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-2.png'\r\n },\r\n {\r\n id: '3-1-8',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-9',\r\n title: '1.4 Alphaé‡åŒ–å› åæœåŠ¡å¦‚ä½•è¯•ç”¨:',\r\n children: [\r\n { point: 1, tit: '打开宽投Alphaé‡åŒ–å› åæœåŠ¡ç½‘å€http://www.alpha4me.comï¼›' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥ï¼›' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒAlphaé‡åŒ–å› åæœåŠ¡å¹³å°è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-3.png'\r\n },\r\n {\r\n id: '3-1-10',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-11',\r\n title: '1.5 如何与宽投å–å¾—è”ç³»',\r\n children: [\r\n '您å¯ä»¥é€šè¿‡ä»¥ä¸‹é€”径咨询å„类使用宽投产å“过程ä¸é‡åˆ°çš„问题:',\r\n '客æœç”µè¯ï¼š021-',\r\n '客æœQQ群:',\r\n '客æœé‚®ç®±ï¼šinfo@quancept.cn',\r\n ]\r\n },\r\n {\r\n id: '3-1-12',\r\n title: '1.6 宽投是å¦å…è´¹',\r\n children: [\r\n '试用版用户æä¾›çš„æœåŠ¡å’Œæ•°æ®éƒ½æ˜¯å…è´¹çš„ï¼Œè¯•ç”¨è´¦å·æœ‰æ•ˆæœŸä¸ºä¸¤å‘¨',\r\n 'è´ä¹°æ ‡å‡†ç‰ˆå¯ä»¥ä½¿ç”¨æ›´å¤šçš„功能和专业æœåŠ¡',\r\n '若您有æ„å‘,å¯è‡´ç”µå’¨è¯¢'\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 3: {\r\n id: '4',\r\n title: '2. InSync 相关',\r\n children: [\r\n {\r\n id: '4-1',\r\n title: '2.1 ç–略常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-1-1',\r\n title: '1)如何构建一个最简å•çš„ç–ç•¥',\r\n children: [\r\n { point: 1, tit: 'å‚ç…§ 精选ç–ç•¥ï¼Œä¿®æ”¹å…¬å¼æˆ–傿•°åŽï¼Œå¤åˆ¶ç²˜è´´åˆ°æ–°å»ºè¿‡æ»¤å™¨çª—å£ï¼›' },\r\n { point: 1, tit: '从精选ç–略克隆一个您感兴趣的ç–ç•¥' },\r\n { point: 1, tit: '新建一个ç–略,从头开始实现自己的交易æ€è·¯ï¼›' },\r\n 'å¦‚æžœæ‚¨æƒ³è¦æ›´è¯¦ç»†çš„了解如何写ç–略,点击这里。'\r\n ]\r\n },\r\n {\r\n id: '4-1-2',\r\n title: '2)如何快速检验投资æ€è·¯',\r\n children: [\r\n '用户通过自然è¯è¨€æˆ–便æ·å…¬å¼æž„建好ç–ç•¥åŽï¼Œå¼€å§‹ç´§ç›¯å¸‚场,快速检验自己的投资æ€è·¯ã€‚',\r\n 'æ¤æ—¶ï¼Œæœ‰ä¸¤ç§å¼•擎模å¼ä¾›ç”¨æˆ·é€‰æ‹©ï¼š',\r\n '一. ç¬¬ä¸€ç§æ˜¯å…¨å¸‚场触å‘过滤',\r\n 'Tick by tick驱动过滤引擎,在ç–ç•¥è¿è¡Œæ—¶ï¼Œä¸€æ—¦æœ‰ç›®æ ‡è‚¡ç¥¨æ»¡è¶³æ¡ä»¶ï¼Œå°±ä¼šç«‹å³å‡ºçŽ°åˆ°é¢„è¦çª—å£ã€‚还å¯ä»¥è®¾ç½®å®šæ—¶å™¨ï¼ŒæŒ‡å®šæ—¶é—´æ¥æ‰«æã€‚',\r\n '二. ç¬¬äºŒç§æ˜¯æ¨ªå‘市场扫æ',\r\n '用户å¯ä¸€æ¬¡æ€§æ‰«æå…¨å¸‚场,当å‰ç¬¦åˆæ¡ä»¶çš„股票就会全部过滤出æ¥ï¼Œä»¥æ¤æ¥æ£€éªŒè‡ªå·±çš„æŠ•资æ€è·¯ã€‚',\r\n '如下图:'\r\n ],\r\n img: '/static/images/h-4.png'\r\n },\r\n {\r\n id: '4-1-3',\r\n title: '3)我的ç–ç•¥å½’è°æ‰€æœ‰',\r\n children: [\r\n '您对自己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n },\r\n {\r\n id: '4-1-4',\r\n title: '4)我的ç–略是å¦å®‰å…¨',\r\n children: [\r\n '您对自宽投éžå¸¸ä¸¥è‚ƒå¯¹å¾…用户的ç–略安全问题。我们æä¾›ä¸šç•Œæœ€é«˜çš„å®‰å…¨ä¿æŠ¤ï¼Œé™¤äº†æ‚¨æœ¬äººï¼Œä»»ä½•äººæ— æ³•èŽ·å–æ‚¨çš„ç–略。己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '4-2',\r\n title: '2.2 回测常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-2-1',\r\n title: '1)回测的作用',\r\n children: [\r\n { tit: 'ç–ç•¥æœ‰æ•ˆä½“çŽ°äº†æ‚¨çš„äº¤æ˜“æ€æƒ³ï¼Œå®½æŠ•æä¾›ç®€å•易用ã€ä¸“业高效的ç–略回测平å°ï¼Œé€šè¿‡åކ岿•°æ®å›žæµ‹ï¼Œå¯ä»¥æ£€éªŒç–略的有效性。您å¯ä»¥ä¸“æ³¨äºŽç ”ç©¶ç–略逻辑,而ä¸å¿…被数æ®èŽ·å–ã€äº¤æ˜“æ’®åˆã€å›žæµ‹æŠ¥å‘Šç‰ç¹ç细节所困扰,除æ¤ä¹‹å¤–,宽投还æä¾›äº†å„ç§ä¸“业的ç–ç•¥å›žæµ‹å›¾è¡¨æŠ¥å‘Šï¼Œä¸ºæ‚¨èƒ½ç ”ç©¶æ›´å¤šæ›´æœ‰æ•ˆçš„ç–略而æœåŠ¡ã€‚', hide: 1 },\r\n { tit: '按日回测和分钟回测的区别', hide: 1 },\r\n { tit: '按日回测: æ¯å¤©è°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一个交易日的数æ®', hide: 1 },\r\n { tit: '分钟回测: æ¯åˆ†é’Ÿè°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一分钟的数æ®', hide: 1 },\r\n { tit: '频率:日', hide: 1 },\r\n { tit: 'å½“é€‰æ‹©æ—¥é¢‘çŽ‡æ—¶ï¼Œç®—æ³•åœ¨æ¯æ ¹æ—¥çº¿ Bar 都会è¿è¡Œä¸€æ¬¡ï¼Œå³æ¯å¤©è¿è¡Œä¸€æ¬¡', hide: 1 },\r\n { tit: '在算法ä¸ï¼Œå¯ä»¥èŽ·å–任何粒度的数æ®', hide: 1 },\r\n { tit: 'æ—¥K线(Baråºåˆ—)', hide: 1 },\r\n { tit: '频率:Tick' },\r\n { tit: '当选择 Tick 频率时,æ¯å½“有一个新 Tick,算法都会被执行一次', hide: 1 },\r\n ],\r\n img: '/static/images/h-5.png'\r\n },\r\n {\r\n id: '4-2-2',\r\n title: '3)回测å¯ä»¥ä½¿ç”¨å“ªäº›æ•°æ®',\r\n children: [\r\n { tit: '回测å¯ä»¥å…费使用宽投æä¾›çš„æ‰€æœ‰æ•°æ®ã€‚å›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®æœ‰ä¸€å¤©çš„延时,å³å½“天的交易数æ®åœ¨ç¬¬äºŒå¤©æ›´æ–°åŽå¯ä½¿ç”¨', hide: 1 },\r\n { tit: 'å»¶æ—¶åŽŸå› ï¼šå›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®åŸºäºŽLevel-1行情数æ®ï¼ŒLevel-1的完整交易数æ®éœ€è¦æ”¶ç›˜åŽæ‰èƒ½èŽ·å¾—', hide: 1 }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 4: {\r\n id: '5',\r\n title: '3. CrystalTrade 相关',\r\n children: [\r\n {\r\n id: '5-1',\r\n title: '3.1 模拟交易的作用',\r\n children: [\r\n {\r\n id: '5-1-1',\r\n title: '',\r\n children: [\r\n { tit: '模拟交易的数æ®ä¸Žå®žç›˜æ•°æ®æ˜¯åŒæ¥çš„,并且我们会æä¾›å®žæ—¶çš„æ¨¡æ‹Ÿæ’®åˆæœåŠ¡ï¼Œå› æ¤æ‚¨å¯ä»¥è¿›ä¸€æ¥æ£€éªŒç–略的有效性' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-2',\r\n title: '3.2 æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n children: [\r\n {\r\n id: '5-2-1',\r\n title: '',\r\n children: [\r\n { tit: '模拟交易使用的是实时更新的Level-1æ•°æ®' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-3',\r\n title: '3.3 如何进行模拟交易',\r\n children: [\r\n {\r\n id: '5-3-1',\r\n title: '',\r\n children: [\r\n { tit: '首先您需è¦ç¼–写一个ç–略,å¯ä»¥å…ˆåœ¨InSyncä¸å»ºç«‹ç–略,也å¯åœ¨CrystalTrade䏿–°å»ºä¸‹å•' },\r\n 'ç–略:'\r\n ],\r\n img: ['/static/images/h-6.png', '/static/images/h-1.png7']\r\n },\r\n {\r\n id: '5-3-2',\r\n title: '',\r\n children: [\r\n { tit: 'å¯ä»¥åœ¨InSync䏿ž„建完ç–ç•¥åŽè¿è¡Œä¸€æ¬¡å®Œæ•´çš„回测以åŽï¼Œå†å¯åŠ¨æ¨¡æ‹Ÿäº¤æ˜“ï¼Œä¹Ÿå¯ä»¥ç›´æŽ¥å¯¹æ–°å»ºç–略进行模拟交易' },\r\n { tit: '或者å¯ä»¥ä»Žä¸‹å•è¡¨æ ¼é‡Œé€‰æ‹©è¿›ä»“è¿‡æ»¤å™¨å’Œå‡ºä»“è¿‡æ»¤å™¨è¿›è¡Œç–略交易设置' }\r\n ],\r\n img: '/static/images/h-8.png'\r\n },\r\n {\r\n id: '5-3-3',\r\n title: '',\r\n children: [\r\n { tit: 'å¯åЍç–略交易之åŽå¯ä»¥åœ¨ç–略列表查看模拟交易ç–略的状æ€ï¼Œå¦‚仓ä½ä¿¡æ¯ã€ä¸‹å•è¯¦æƒ…ã€æˆäº¤æ˜Žç»†' },\r\n ],\r\n img: '/static/images/h-9.png'\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-4',\r\n title: '3.4 我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n children: [\r\n {\r\n id: '5-4-1',\r\n title: '',\r\n children: [\r\n { tit: '宽投支æŒå®žç›˜äº¤æ˜“,åªè¦åœ¨å®½æŠ•åˆä½œçš„券商开户,登录宽投智能交易管ç†ç³»ç»ŸCrystalTrade客户端,å³å¯å¼€å§‹å®žç›˜äº¤æ˜“' }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n\r\nexport default help_cn;","const help_en = {\r\n 0: {\r\n id: '1',\r\n title: '快速入门',\r\n children: [\r\n {\r\n id: '1-1',\r\n num: '1',\r\n title: '1. InSync 快速入门',\r\n children: [\r\n {\r\n id: '1-1-1',\r\n num: '1.1',\r\n title: '1.1 InSync 使用手册',\r\n children: ['点击查看手册'],\r\n url: 'static/help/宽投InSync使用手册.pdf',\r\n color: '#5aa8ce'\r\n },\r\n /**\r\n {\r\n id: '1-1-2',\r\n num: '1.2',\r\n title: '1.2 InSync 视频教程',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n */\r\n ]\r\n },\r\n {\r\n id: '1-2',\r\n num: '2',\r\n title: '2. CrystalTrade 快速入门',\r\n children: [\r\n {\r\n id: '1-2-1',\r\n num: '2.1',\r\n title: '2.1 CrystalTrade 使用手册',\r\n children: ['下载使用手册'],\r\n url: 'static/help/宽投CrystalTrade使用手册.pdf',\r\n color: '#5aa8ce'\r\n },\r\n /**\r\n {\r\n id: '1-2-2',\r\n num: '2.2',\r\n title: '2.2 CrystalTrade 完整视频教程',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n */\r\n ]\r\n },\r\n /**\r\n {\r\n id: '1-3',\r\n num: '3',\r\n title: '3. 全能股票机器人',\r\n children: [\r\n {\r\n id: '1-3-1',\r\n num: '3.1',\r\n title: '',\r\n children: ['点击观看视频教程'],\r\n url: '#',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n },\r\n {\r\n id: '1-4',\r\n num: '4.',\r\n title: 'Alpha é‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n {\r\n id: '1-4-1',\r\n num: '4.1',\r\n title: '',\r\n children: ['下载使用手册'],\r\n url: 'static/help/宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°.pdf',\r\n color: '#5aa8ce'\r\n }\r\n ]\r\n }\r\n */\r\n ]\r\n },\r\n 1: {\r\n id: '2',\r\n title: '精选ç–ç•¥',\r\n children: [\r\n {\r\n id: '2-1',\r\n num: '1',\r\n title: '1. 入门级',\r\n children: [\r\n {\r\n id: '2-1-1',\r\n num: '1.1',\r\n title: '1.1 行情é¢',\r\n children: [\r\n {\r\n tit: '1. è‚¡ä»·åˆ›åŽ†å²æ–°é«˜'\r\n },\r\n 'BarHigh(\"D\",0)>=HistoryHigh(\"qianfuquan\",\"out_date\")',\r\n {\r\n tit: '2. 股价大于100'\r\n },\r\n 'Last>100',\r\n {\r\n tit: '3. 振幅大于5%'\r\n },\r\n 'BarRange(\"D\",0)/BarClose(\"D\",-1) > 0.05',\r\n { tit: '4. 开盘价å‘上跳空' },\r\n 'BarOpen(\"D\",0)>BarHigh(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-1-2',\r\n num: '1.2',\r\n title: '1.2 技术é¢',\r\n children: [\r\n { tit: '1. è‚¡ä»·çªç ´å¸ƒæž—线上轨' },\r\n 'BarClose(\"D\",-1) < BbUpper(\"D\",20,2,-1) & BarClose(\"D\",0) >BbUpper(\"D\",20,2,0)',\r\n { tit: '2. 今天放é‡2å€' },\r\n 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)*2',\r\n { tit: '3. 釿¯”大于2å°äºŽ5' },\r\n 'VolumeRatio(\"Now\") > 2 & VolumeRatio(\"Now\") < 5',\r\n { tit: '4. æ¢æ‰‹çŽ‡å¤§äºŽ5%' },\r\n 'TurnoverRate(\"D\",0) > 0.05'\r\n ]\r\n },\r\n {\r\n id: '2-1-3',\r\n num: '1.3',\r\n title: '1.3 财务é¢',\r\n children: [\r\n { tit: '1. æ¯è‚¡æ”¶ç›ŠåŒæ¯”å¢žåŠ 1.5å…ƒ' },\r\n 'JB_CW_ByIndex(4,-1)>JB_CW_ByIndex(4,-5)+1.5',\r\n { tit: '2. æ¯è‚¡å‡€èµ„äº§çŽ¯æ¯”å¢žåŠ 5%' },\r\n 'JB_CW_ByIndex(5,-1)>JB_CW_ByIndex(5,-2)*(1.05)',\r\n { tit: '3. æ¯è‚¡æœªåˆ†é…利润大于2' },\r\n 'JB_CW_ByIndex(9,-1) > 2',\r\n { tit: '4. æµé€šè‚¡è‚¡æœ¬åŒæ¯”å¢žåŠ 10%' },\r\n 'JB_CW_ByIndex(37,-1)*10000>JB_CW_ByIndex(37,-5)*10000*(1.1)',\r\n { tit: '5. 总股本å‡å°‘一åƒä¸‡è‚¡' },\r\n 'JB_CW_ByIndex(36,-1)*10000<JB_CW_ByIndex(36,-5)*10000-10000000'\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '2-2',\r\n num: '2',\r\n title: '进阶级',\r\n children: [\r\n {\r\n id: '2-2-1',\r\n title: '',\r\n children: [\r\n { tit: '1. 60分钟MACD金å‰' },\r\n 'Macd_DIF(\"CLOSE\",\"1\",12,26,-1)<Macd_DEA(\"CLOSE\",\"1\",12,26,9,-1)&Macd_DIF(\"CLOSE\",\"1\",12,26,0)>Macd_DEA(\"CLOSE\",\"1\",12,26,9,0)',\r\n { tit: '2. MACD空头排列' },\r\n { tit: '3. KDJæ»å‰' },\r\n 'KDJ_K(\"D\",9,-1)>KDJ_D(\"D\",9,-1)&KDJ_K(\"D\",9,0)<KDJ_D(\"D\",9,0)',\r\n { tit: '4. 5æ—¥å‡çº¿ä¸Šç©¿10æ—¥å‡çº¿' },\r\n 'Sma(\"CLOSE\",\"D\",5,-1) < Sma(\"CLOSE\",\"D\",10,-1) & Sma(\"CLOSE\",\"D\",5,0) > Sma(\"CLOSE\",\"D\",10,0)',\r\n { tit: '5. å‘上跳空缺å£' },\r\n 'BarVolume(\"D\",0)>Sma(\"VOLUME\",\"D\",5,-1)',\r\n { tit: '6. ä»·æ ¼æ¯”æœ€è¿‘5天å‡å€¼é«˜10%' },\r\n 'BarClose(\"D\",0) >= LoopAvg({BarClose(\"D\",#)},-5,-1,1) * (1+0.1)',\r\n { tit: '7. è‚¡ä»·çªç ´å¼€ç›˜åŽ30分钟高点' },\r\n 'LASTTIME>Time(\"10:00\") & BarClose(\"1\",-1) < PeriodHighIntraday(\"09:30\",\"10:00\") & BarClose(\"1\",0) > PeriodHighIntraday(\"09:30\",\"10:00\")',\r\n { tit: '8. 从过去50日高点回è½ï¼Œå¹…度大于25%' },\r\n '$High:PeriodHigh(\"D\",-50,-1);BarClose(\"D\",0)/$High-1<-0.25',\r\n { tit: '9. 过去3å¤©è¿žç»æ”¾é‡' },\r\n 'LoopCount({BarVolume(\"D\",#)>Sma(\"VOLUME\",\"D\",5,#-1)},-3,-1,1) >= 3',\r\n { tit: '10. 60分钟线与SH600000é…对交易的股票' },\r\n '@BenchMark:Sym_TSN_BarData(\"SH600000\",\"CLOSE\",\"60\")',\r\n '@Pair:TSN_BarData(\"CLOSE\",\"60\")',\r\n '@Spread:TS_Divide(@BenchMark,@Pair)',\r\n '@Mean_Spread:TS_Sma(@Spread,20)',\r\n '@Std_Spread:TS_Stddev(@Spread,20)',\r\n 'TS_Get(@Spread,-1)>TS_Get(@Mean_Spread,-1)+TS_Get(@Std_Spread,-1)&TS_Get(@Spread,-2)<TS_Get(@Mean_Spread,-2)+TS_Get(@Std_Spread,-2)'\r\n ]\r\n }\r\n\r\n ]\r\n },\r\n {\r\n id: '2-3',\r\n title: '3. 精通级',\r\n children: [\r\n {\r\n id: '2-3-1',\r\n title: '1. 弃婴状æ€',\r\n isHideTitle: 1,\r\n children: [\r\n 'Abs(BarOpen(\"D\",-2)-BarClose(\"D\",-2))<1/50*BarRange(\"D\",-2) & BarClose(\"D\",-3) < BarOpen(\"D\",-3) & BarClose(\"D\",-1) > BarOpen(\"D\",-1) & BarHigh(\"D\",-2) < BarLow(\"D\",-3) & BarHigh(\"D\",-2) < BarLow(\"D\",-1)',\r\n ]\r\n },\r\n {\r\n id: '2-3-2',\r\n title: '2. ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarClose(\"D\",-2)>BarOpen(\"D\",-2) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1) & BarLow(\"D\",-1)<BarLow(\"D\",-2) & BarHigh(\"D\",-1)>=BarHigh(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-3',\r\n title: '3. 熊势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarOpen(\"D\",-2)<BarClose(\"D\",-2) & BarOpen(\"D\",-1)>BarClose(\"D\",-1) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-4',\r\n title: '4. ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarClose(\"D\",-2)<BarOpen(\"D\",-2) & BarOpen(\"D\",-2)<BarClose(\"D\",-1) & BarClose(\"D\",-2)>BarOpen(\"D\",-1) & BarHigh(\"D\",-1)>BarHigh(\"D\",-2) & BarLow(\"D\",-1)<=BarLow(\"D\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-5',\r\n title: '5. 牛势å•线',\r\n isHideTitle: 1,\r\n children: [\r\n 'BarOpen(\"D\",-2)>BarClose(\"D\",-2) & BarOpen(\"D\",-1)<BarClose(\"D\",-1) & BarOpen(\"D\",-2)>BarClose(\"D\",-1) & BarClose(\"D\",-2)<BarOpen(\"D\",-1)'\r\n ]\r\n },\r\n {\r\n id: '2-3-6',\r\n title: '6. 60åˆ†é’Ÿçº¿ç†ŠåŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)>BarOpen(\"60\",-2) & BarOpen(\"60\",-2)>BarClose(\"60\",-1) & BarClose(\"60\",-2)<BarOpen(\"60\",-1) & BarLow(\"60\",-1)<BarLow(\"60\",-2) & BarHigh(\"60\",-1)>=BarHigh(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-7',\r\n title: '7. 60åˆ†é’Ÿçº¿ç‰›åŠ¿åžæ²¡',\r\n isHideTitle: 1,\r\n children: [\r\n 'SMA20DAY_VOLUME>1000000 & BarClose(\"60\",-2)<BarOpen(\"60\",-2) & BarOpen(\"60\",-2)<BarClose(\"60\",-1) & BarClose(\"60\",-2)>BarOpen(\"60\",-1) & BarHigh(\"60\",-1)>BarHigh(\"60\",-2) & BarLow(\"60\",-1)<=BarLow(\"60\",-2)'\r\n ]\r\n },\r\n {\r\n id: '2-3-8',\r\n title: '8. 看涨三明治线',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1) <BarOpen('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-9',\r\n title: '9. 乌云盖顶',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-2)>BarOpen('D',-2) & BarRange('D',-2)>SmaBarRange('D',-21, -2)+0.5*StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>2/3*BarRange('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & BarClose('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-10',\r\n title: '10. 下é™ä¸‰æ³•',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)<BarOpen('D',-5) & BarClose('D',-1)<BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarLow('D',-1)<BarLow('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-11',\r\n title: '11. 锤头',\r\n isHideTitle: 1,\r\n children: [\r\n \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)<PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-12',\r\n title: '12. åŠé¢ˆçº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"LAST>1 & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarHigh('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>PeriodLow('D',-4,-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-4)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-13',\r\n title: '13. 上å‡ä¸‰æ³•å½¢æ€',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-5)>SmaBarRange('D',-24, -5) & BarClose('D',-5)>BarOpen('D',-5) & BarClose('D',-1)>BarOpen('D',-1) & PeriodLow('D',-4,-2)>BarLow('D',-5) & PeriodHigh('D',-4,-2)<BarHigh('D',-5) & BarHigh('D',-1)>BarHigh('D',-5)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-14',\r\n title: '14. 20æ—¥å‡çº¿ä¸Šç©¿60æ—¥å‡çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"Sma20DAY_VOLUME>1000000 & Sma('CLOSE','D',20,-1)>=SMA('CLOSE','D',60,-1) & LoopAnd({SMA('CLOSE','D',20,$)<SMA('CLOSE','D',60,$)},-5,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-15',\r\n title: '15. 䏋陿’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST<PeriodLow('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)<BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-16',\r\n title: '16. 䏋陿’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST<PeriodLow('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)<BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-17',\r\n title: '17. ç›˜æ•´ä¸‹ç ´æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST<PeriodLow('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-18',\r\n title: '18. ä¸Šå‡æ’å…¥30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))/(PeriodHigh('30', -30, -1)-PeriodLow('30', -30, -1))<1/3 & 0.25*(BbUpper('30',12,2, -1)- BbLower('30',12,2, -1))/(PeriodHigh('30', -12, -1)-PeriodLow('30', -12, -1))<0.3 & LAST>PeriodHigh('30', -12, -1) & !(LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-19',\r\n title: '19. ä¸Šå‡æ’å…¥60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))/(PeriodHigh('60', -30, -1)-PeriodLow('60', -30, -1))<1/3 & 0.25*(BbUpper('60',12,2, -1)- BbLower('60',12,2, -1))/(PeriodHigh('60', -12, -1)-PeriodLow('60', -12, -1))<0.3 & LAST>PeriodHigh('60', -12, -1) & !(LoopAnd({BARCLOSE('60',$)>BARCLOSE('60',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-20',\r\n title: '20. 盘整上穿日线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & (PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))/(PeriodHigh('D', -30, -1)-PeriodLow('D', -30, -1))<1/3 & 0.25*(BbUpper('D',12,2, -1)- BbLower('D',12,2, -1))/(PeriodHigh('D', -12, -1)-PeriodLow('D', -12, -1))<0.3 & LAST>PeriodHigh('D', -12, -1) & !(LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-1)},-5,-1,1))\"\r\n ]\r\n },\r\n {\r\n id: '2-3-21',\r\n title: '21. åå—æ˜Ÿ15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/20*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-22',\r\n title: '22. åå—æ˜Ÿæ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & Abs(BarOpen('D',-1)-BarClose('D',-1))<1/20*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-23',\r\n title: '23. å‘下冲击30分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)<SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)<SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-24',\r\n title: '24. å‘下冲击60分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '60', 20, $)<SMA('CLOSE', '60', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '60', 8, $)<SMA('CLOSE', '60', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-25',\r\n title: '25. 蜻蜓åå—15分钟线',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & LAST>5 & Abs(BarOpen('15',-1)-BarClose('15',-1))<1/30*BarRange('15',-1) & Abs(BarOpen('15',-1)-BarHigh('15',-1))<1/30*BarRange('15',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-26',\r\n title: '26. 蜻蜓åå—æ—¥çº¿',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarOpen('D',-1)-BarHigh('D',-1))<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-27',\r\n title: '27. 墓碑åå—æ˜Ÿ',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & BarClose('D',-1)-BarLow('D',-1)<1/30*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-28',\r\n title: '28. 身怀å…甲',\r\n isHideTitle: 1,\r\n children: [\r\n \"LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)>BarClose('D',-2) & BarOpen('D',-1)<BarClose('D',-1) & BarOpen('D',-2)>BarClose('D',-1) & BarClose('D',-2)<BarOpen('D',-1) | LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1) & BarOpen('D',-2)<BarClose('D',-2) & BarOpen('D',-1)>BarClose('D',-1) & BarOpen('D',-2)<BarClose('D',-1) & BarClose('D',-2)>BarOpen('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-29',\r\n title: '29. 长光头',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))>5/6*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-30',\r\n title: '30. 长实体线',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))<1/30*BarRange('D',-1) & Abs(BarHigh('D',-1)-BarOpen('D',-1)-BarClose('D',-1)+BarLow('D',-1))<1/20*BarRange('D',-1) & BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-31',\r\n title: '31. Marubozu_5',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LAST>5 & Abs(BarOpen('5',-1)-BarClose('5',-1))=BarRange('5',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-32',\r\n title: '32. Marubozu_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"Abs(BarOpen('D',-1)-BarClose('D',-1))=BarHigh('D',-1)-BarLow('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-33',\r\n title: '33. NarrowRangeBuySignal_15min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg5:AVG(BarRange('15',-1), BarRange('15',-2), BarRange('15',-3), BarRange('15',-4), BarRange('15',-5)); SMA20DAY_VOLUME>1000000 & BarClose('15',-3)>BarOpen('15',-3) & BarClose('15',-2)>BarOpen('15',-2) & BarClose('15',-1)>BarOpen('15',-1) & BarClose('15',0)>BarOpen('15',0) & BarRange('15',0)<1/4*AVG5\"\r\n ]\r\n },\r\n {\r\n id: '2-3-34',\r\n title: '34. NR7_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg6:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6), BarRange('30',-7)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)<AVG6/2 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n },\r\n {\r\n id: '2-3-35',\r\n title: '35. OpeningRangeBreakdown_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LASTTime>TIME('10:00') & LAST<PeriodLowIntraday('9:30','10:00') & HIGH<=PeriodHighIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-36',\r\n title: '36. OpeningRangeBreakup_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & AVGRANGE_20DAY >0.5 & LASTTime>TIME('10:00')& LAST>PeriodHighIntraday('9:30','10:00') & LOW>=PeriodLowIntraday('9:30','10:00')\"\r\n ]\r\n },\r\n {\r\n id: '2-3-37',\r\n title: '37. ShootingStar_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-2)>SmaBarRange('D',-21, -2)+StdDevBarRange('D',-21,-2) & Abs(BarClose('D',-2)-BarOpen('D',-2))>5/6*BarRange('D',-2) & BarClose('D',-2)>BarOpen('D',-2) & Abs(BarOpen('D',-1) - BarClose('D',-1))<2/5*BarRange('D',-1) & Abs(BarOpen('D',-1) - BarClose('D',-1))>1/10*BarRange('D',-1) & BarLow('D',-1)-BarOpen('D',-1)<1/30*BarRange('D',-1) & BarLow('D',-1)>BarClose('D',-2) & LoopAnd({BARCLOSE('D',$)>BARCLOSE('D',$-2)},-11,-2,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-38',\r\n title: '38. ShortDay_30',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>500000 & BarRange('30',-1)<SmaBarRange('30',-20, -1)*0.7 & Abs(BarClose('30',-1)-BarOpen('30',-1))<1/3*BarRange('30',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-39',\r\n title: '39. ShortDay_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)<SmaBarRange('D',-20, -1)-StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<2/3*BarRange('D',-1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-40',\r\n title: '40. SpinningTop_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarRange('D',-1)>SmaBarRange('D',-20, -1)+StdDevBarRange('D',-20,-1) & Abs(BarClose('D',-1)-BarOpen('D',-1))<1/6*BarRange('D',-1) & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))<1.2 & (BarHigh('D',-1)-Max(BarOpen('D',-1),BarClose('D',-1)))/(Min(BarOpen('D',-1),BarClose('D',-1))-BarLow('D',-1))>0.8\"\r\n ]\r\n },\r\n {\r\n id: '2-3-41',\r\n title: '41. Stars_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarLow('D',-1)>BarHigh('D',-2) | BarHigh('D',-1)<BarLow('D',-2)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-42',\r\n title: '42. StickSandwich_D',\r\n isHideTitle: 1,\r\n children: [\r\n \"BarClose('D',-3)<BarOpen('D',-3) & BarClose('D',-2)>BarOpen('D',-2) & BarClose('D',-1)<BarOpen('D',-1) & BarClose('D',-3)=BarClose('D',-1) & BarClose('D',-1)<BarLow('D',-2) & BarOpen('D',-1)>BarHigh('D',-2) & LoopAnd({BARCLOSE('D',$)<BARCLOSE('D',$-2)},-12,-3,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-43',\r\n title: '43. Uptrend_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({BARCLOSE('30',$)>BARCLOSE('30',$-3)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-44',\r\n title: '44. UpwardThrust_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"SMA20DAY_VOLUME>1000000 & LoopAnd({SMA('CLOSE', '30', 20, $)>SMA('CLOSE', '30', 20, $-1)},-10,-1,1) & LoopAnd({SMA('CLOSE', '30', 8, $)>SMA('CLOSE', '30', 8, $-1)},-10,-1,1)\"\r\n ]\r\n },\r\n {\r\n id: '2-3-45',\r\n title: '45. WideRangeBar_30min',\r\n isHideTitle: 1,\r\n children: [\r\n \"Avg5:AVG(BarRange('30',-2), BarRange('30',-3), BarRange('30',-4), BarRange('30',-5), BarRange('30',-6)); SMA20DAY_VOLUME>1000000 & BarRange('30',-1)>2.2*AVG5 & (PeriodHigh('30', -7, -1)-PeriodLow('30', -7, -1))/(PeriodHigh('30', -20, -1)-PeriodLow('30', -20, -1))<1/3\"\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 2: {\r\n id: '3',\r\n title: '常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '3-1',\r\n title: '1. 关于宽投产å“',\r\n children: [\r\n {\r\n id: '3-1-1',\r\n title: '1.1 宽投æä¾›ä»€ä¹ˆæœåŠ¡',\r\n children: ''\r\n },\r\n {\r\n id: '3-1-2',\r\n title: '1)智能é‡åŒ–å¹³å°',\r\n children: [\r\n '宽投拥有100%自主创新的CEPï¼ˆå¤æ‚事件处ç†å¼•擎)技术,全市场Tick级行情数æ®å¤„ç†ï¼Œé¢å‘券商ã€ä¹°æ–¹æœºæž„与个人投资者æä¾›ä¸€ç«™å¼å®Œæ•´é‡åŒ–解决方案。投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€æˆ–宽投独有的å‘导å¼ç®€æ˜“函数与公å¼ï¼Œæ— 需编程,完æˆç–略构建ã€ç–ç•¥é£ŽæŽ§ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ¨¡æ‹Ÿæˆ–实盘è¿è¡Œç‰ï¼Œå¸®åŠ©ç”¨æˆ·ä¾¿åˆ©ã€å¿«é€Ÿã€é«˜æ•ˆå®ŒæˆæŠ•èµ„æ€æƒ³å¹¶æŠ•放市场。',\r\n '宽投智能é‡åŒ–å¹³å°çš„主è¦åŠŸèƒ½æœ‰ï¼š',\r\n { point: 1, tit: 'æ€è·¯æŒ–掘 :输入æ€è·¯ï¼Œå³å¾—结果。简易Quancept+å…¬å¼ï¼Œæ— 编程ã€éžå›ºåŒ–。支æŒAè‚¡ã€ç¾Žè‚¡ã€æœŸè´§ã€æœŸæƒ' },\r\n { point: 1, tit: 'æ— ç¼–ç¨‹å¤šç§å®žçŽ°æ–¹å¼ï¼šè‡ªç„¶è¯è¨€ã€ç®€æ˜“å…¬å¼ã€å‘导å¼' },\r\n { point: 1, tit: '支æŒ15ç§æ—¶é—´å‘¨æœŸ – 日线ã€1,2,3,5,7,10,13,15,30,60分钟线' },\r\n { point: 1, tit: '支æŒä»»æ„跨周期ã€è·¨å“ç§ï¼›' },\r\n { point: 1, tit: '构建ç–ç•¥ï¼šæ— éœ€ç¼–ç¨‹ï¼Œç®€æ˜“å…¬å¼ç¼–辑器结åˆè‡ªç„¶è¯è¨€ç†è§£ï¼Œ5分钟å³å¯æž„建完整ç–ç•¥ï¼ŒåŒæ—¶æ”¯æŒPythonã€R' },\r\n { point: 1, tit: '选股择时:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è¿›ä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶' },\r\n { point: 1, tit: '组åˆç–略:æ¢ç›ˆã€æ¢æŸã€è·Ÿè¸ªæ¢ç›ˆã€æœ€å¤§æŒä»“期ã€ä¸‹å•类型ç‰ï¼Œç–略风控ã€è°ƒä»“æ¡ä»¶ã€å‡ºä»“æ¡ä»¶' },\r\n { point: 1, tit: '回测验è¯ï¼šç²¾å‡†ä¸¥è°¨å›žæµ‹ï¼Œåˆ†é’Ÿçº§å›žæµ‹æ•ˆçŽ‡æ¯”çº¯Pythonå¹³å°é«˜50å€ä»¥ä¸Šï¼Œæœºå™¨å¦ä¹ 增强ç–略收益,é™ä½Žé£Žé™©å’Œæœ€å¤§å›žæ’¤ã€‚' },\r\n { point: 1, tit: '日内ã€éš”夜ç–略回测' },\r\n { point: 1, tit: '跨市场ã€è·¨å“ç§ã€è·¨å‘¨æœŸå›žæµ‹' },\r\n { point: 1, tit: '智能ç–略优化- AI驱动ç–略收益增强' },\r\n { point: 1, tit: 'å½’å› åˆ†æž-å¤šç»´åº¦æŒ‡æ ‡ç›é€‰ã€é»‘白åå•' },\r\n { point: 1, tit: '丰富的图形展示,详细回测报告' },\r\n { point: 1, tit: '智能交易管ç†: 自主创新的集ä¸äº¤æ˜“管ç†ç³»ç»Ÿ CrystalTrade,实现严密ç–略风控与稳å¥ç–略交易' },\r\n { point: 1, tit: '支æŒç®—法下å•ã€å¸‚ä»·ã€é™ä»·ç‰å¤šç§ä¸‹å•类型' },\r\n { point: 1, tit: 'æ”¯æŒæ¨¡æ‹Ÿã€å®žç›˜äº¤æ˜“' },\r\n { point: 1, tit: '支æŒå…¨è‡ªåŠ¨äº¤æ˜“å’Œè‡ªåŠ¨è§¦å‘ä¿¡å·æ‰‹å·¥ç¡®è®¤äº¤æ˜“ä¸¤ç§æ¨¡å¼' },\r\n ]\r\n },\r\n {\r\n id: '3-1-3',\r\n title: '2)全能股票机器人',\r\n children: [\r\n '宽投全能股票机器人基于宽投团队多年é‡åŒ–äº¤æ˜“å’Œç³»ç»Ÿç ”å‘ç»éªŒï¼Œåº”用最新人工智能和机器å¦ä¹ 技术,通过è¯éŸ³æˆ–æ–‡å—é—®ç”的交互方å¼ï¼Œå¿«é€ŸåŒ¹é…问题,并æä¾›å¤šç§åœºæ™¯åº”用的智能问ç”ï¼Œæ ¹æ® tick 级实时市场数æ®ï¼Œå°†å…³é”®ä¿¡æ¯æç‚¼å‘ˆçŽ°ã€‚',\r\n 'é¢å‘普通è¯åˆ¸æŠ•资者,彻底消除é‡åŒ–门槛,帮助用户从海é‡ä¿¡æ¯ä¸æ‰¾åˆ°æœ€é€‚åˆè‡ªå·±çš„ï¼Œä»Žè€Œå¿«é€ŸèŽ·å–æ‹©æ—¶é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹ã€æ™ºèƒ½ç–略优化ã€ç™½è¯äº¤æ˜“ã€ç™½è¯ç›¯ç›˜ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ã€‚',\r\n '全能股票机器人具有以下三大亮点:',\r\n { point: 1, tit: '自然è¯è¨€è¯ä¹‰è¯†åˆ«' },\r\n '宽投应用最新人工智能技术,通过è¯éŸ³æˆ–æ–‡å—与å°å®½æœºå™¨äººäº¤äº’,快速智能解æžï¼Œæç‚¼ä¸Žå¼•导用户设置择时选股æ€è·¯ã€‚',\r\n { point: 1, tit: '识别上下文,对多æ¡é€»è¾‘智能识别' },\r\n { point: 1, tit: 'ä¸åŒåœºæ™¯ä¸‹ï¼Œæ™ºèƒ½é—®ç”和智能æé†’' },\r\n { point: 1, tit: '快速识别,闪电匹é…' },\r\n { point: 1, tit: 'éšé—®éšç”ï¼Œéšæ—¶å¾…命' },\r\n { point: 1, tit: '自定义多æ¡ä»¶ç»„åˆ' },\r\n '多个选股æ¡ä»¶å¯ä»¥è‡ªå®šä¹‰å åŠ ï¼Œä»¥ä¾¿ç¼©å°ç›é€‰èŒƒå›´ï¼Œæ”¯æŒä½¿ç”¨è‡ªå®šä¹‰åŸºæœ¬é¢æŒ‡æ ‡å’ŒæŠ€æœ¯é¢æŒ‡æ ‡è¿›è¡Œå åŠ ç›é€‰ï¼ŒåŒæ—¶å¯¹é€‰å‡ºçš„è‚¡ç¥¨è¿›è¡Œæ¶¨è·Œå¹…æŽ’åºæˆ–ä»·æ ¼æŽ’åºï¼Œç»™ç”¨æˆ·å‘ˆçŽ°å‡ºæœ€æœ‰ä»·å€¼çš„é€‰è‚¡ç»“æžœï¼ˆä¾‹ï¼šæ¶¨å¹…å‰å,从å°åˆ°å¤§æŽ’åºï¼‰ã€‚用户还å¯é€šè¿‡è‡ªç„¶è¯è¨€ä¸Žæœºå™¨äººå¯¹è¯çš„æ–¹å¼æ¥å®šä¹‰å›žæµ‹æ¡ä»¶ï¼Œæ¯”如æ¢ç›ˆæ¢æŸï¼Œæœ€å¤§æŒä»“æœŸå¼ºå¤§å¹¶ç®€å•æ–¹ä¾¿ã€‚',\r\n { point: 1, tit: '完整é‡åŒ–æµç¨‹' },\r\n '投资者å¯é€šè¿‡è‡ªç„¶è¯è¨€ï¼Œæ— éœ€ç¼–ç¨‹ï¼Œå®Œæˆæ™ºèƒ½ç™½è¯é€‰è‚¡ã€æ™ºèƒ½å›žæµ‹éªŒè¯ã€æ™ºèƒ½ç–ç•¥ä¼˜åŒ–ã€æ™ºèƒ½ç™½è¯ä¸‹å•ã€æ™ºèƒ½ç™½è¯ç›¯ç›˜ã€æ¨¡æ‹Ÿæˆ–实盘ç‰ä¸€ç³»åˆ—智能é‡åŒ–投资æœåŠ¡ï¼Œå®žçŽ°å…¨æµç¨‹çš„é‡åŒ–æŠ•èµ„ç ”ç©¶æˆ–äº¤æ˜“ã€‚',\r\n ]\r\n },\r\n {\r\n id: '3-1-4',\r\n title: '3)Alphaé‡åŒ–å› åæœåŠ¡å¹³å°',\r\n children: [\r\n '宽投Alphaé‡åŒ–å› åæœåŠ¡å¹³å°ï¼Œæ˜¯å®½æŠ•å›¢é˜Ÿä¾æ‰˜é‡‘èžå¤§æ•°æ®å¼€å‘çš„é‡åŒ–æœåС平å°ï¼Œå…‹æœäº†ä¼ 统é‡åŒ–å› åå¼€å‘过程ä¸çš„ç§ç§é—®é¢˜ï¼Œä»¥é‡‘èžå¤§æ•°æ®ç»“åˆäººå·¥æ™ºèƒ½æŠ€æœ¯ï¼Œè‡ªåŠ¨åŒ–å› å生æˆã€æ™ºèƒ½å› å分æžã€æŠ•资组åˆä¼˜åŒ–,历å²å›žæµ‹ï¼Œæ¨¡æ‹Ÿæˆ–实盘交易。',\r\n { point: 1, tit: 'è‡ªåŠ¨åŒ–å› å生æˆï¼šæ— 需编程,采用宽投特有的简易公å¼ç»“åˆè´¢åŠ¡æ•°æ®ã€æŠ€æœ¯æŒ‡æ ‡ã€èˆ†æƒ…情感ã€å®žæ—¶é‡ä»·ç‰æ•°æ®ï¼Œæ›´çµæ´»ä¸°å¯Œçš„å®žçŽ°è‡ªå®šä¹‰å› å生æˆ' },\r\n { point: 1, tit: '支æŒå¤šæ™ºèƒ½å› å分æžï¼šå¯åŒæ—¶å¯¹å¤šä¸ªå› å进行智能分æžï¼Œæ‰¹é‡è¿ç®—ï¼Œæ›´é«˜æ•ˆã€æ›´å…¨é¢çš„å®žçŽ°å› åè¯„ä»·æŒ‡æ ‡' },\r\n { point: 1, tit: '智能投资组åˆä¼˜åŒ–——把信æ¯ã€é£Žé™©ä»¥åŠçº¦æŸç³»ç»Ÿæ€§åœ°ç»“åˆåœ¨ä¸€èµ·è¿›è¡ŒæŠ•资组åˆä¼˜åŒ–' },\r\n ]\r\n },\r\n {\r\n id: '3-1-5',\r\n title: '1.2 智能é‡åŒ–å¹³å°å®¢æˆ·ç«¯ç”¨æˆ·å¦‚何下载使用:',\r\n children: [\r\n { point: 1, tit: '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入InSync 客户端和CrystalTrade 客户端下载页é¢' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒInSync 客户端和 CrystalTrade 客户端账å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-1.png'\r\n },\r\n {\r\n id: '3-1-6',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-7',\r\n title: '1.3 全能股票机器人如何下载使用:',\r\n children: [\r\n { point: 1, tit: '打开宽投官网www.quancept.cn,在官网首页导航æ 点击‘下载’按钮,进入Andriod手机APP下载页é¢ï¼›' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ³¨å†Œæ‰‹æœºå·ç åŠå¯†ç ç›´æŽ¥ç™»å½•ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•手机APP用户,å¯ç”¨æ‰‹æœºå·æ³¨å†ŒåŽï¼Œä»¥æ‰‹æœºå·ç™»å½•ï¼›' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼Œæ‰‹æœºAPPè´¦å·è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-2.png'\r\n },\r\n {\r\n id: '3-1-8',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-9',\r\n title: '1.4 Alphaé‡åŒ–å› åæœåŠ¡å¦‚ä½•è¯•ç”¨:',\r\n children: [\r\n { point: 1, tit: '打开宽投Alphaé‡åŒ–å› åæœåŠ¡ç½‘å€http://www.alpha4me.comï¼›' },\r\n { point: 1, tit: 'è‹¥æ‚¨å·²ç»æ˜¯å®½æŠ•客户端用户,å¯ç”¨å®¢æˆ·ç«¯è´¦å·åŠå¯†ç (以CNTU开头)ç›´æŽ¥ç™»å…¥ï¼›è‹¥è¿˜ä¸æ˜¯å®½æŠ•客户端用户,å¯ç”¨æ‰‹æœºå·æ³¨å†Œå®½æŠ•客户端账å·ç™»å…¥ï¼›' },\r\n '**æ³¨ï¼šæ‰‹æœºå·æ³¨å†Œçš„è´¦å·å¯äº«å—两周å…è´¹VIP试用æƒé™ï¼ŒAlphaé‡åŒ–å› åæœåŠ¡å¹³å°è¯•用账å·é»˜è®¤å·²å¼€é€šVIPæƒé™ï¼Œç”¨æˆ·å¯å‘客æœQQ群或电è¯å®¢æœå’¨è¯¢è¯•用延期或者è´ä¹°äº‹å®œã€‚'\r\n ],\r\n img: '/static/images/h-3.png'\r\n },\r\n {\r\n id: '3-1-10',\r\n title: '',\r\n children: [\r\n ''\r\n ]\r\n },\r\n {\r\n id: '3-1-11',\r\n title: '1.5 如何与宽投å–å¾—è”ç³»',\r\n children: [\r\n '您å¯ä»¥é€šè¿‡ä»¥ä¸‹é€”径咨询å„类使用宽投产å“过程ä¸é‡åˆ°çš„问题:',\r\n '客æœç”µè¯ï¼š021-',\r\n '客æœQQ群:',\r\n '客æœé‚®ç®±ï¼šinfo@quancept.cn',\r\n ]\r\n },\r\n {\r\n id: '3-1-12',\r\n title: '1.6 宽投是å¦å…è´¹',\r\n children: [\r\n '试用版用户æä¾›çš„æœåŠ¡å’Œæ•°æ®éƒ½æ˜¯å…è´¹çš„ï¼Œè¯•ç”¨è´¦å·æœ‰æ•ˆæœŸä¸ºä¸¤å‘¨',\r\n 'è´ä¹°æ ‡å‡†ç‰ˆå¯ä»¥ä½¿ç”¨æ›´å¤šçš„功能和专业æœåŠ¡',\r\n '若您有æ„å‘,å¯è‡´ç”µå’¨è¯¢'\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 3: {\r\n id: '4',\r\n title: '2. InSync 相关',\r\n children: [\r\n {\r\n id: '4-1',\r\n title: '2.1 ç–略常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-1-1',\r\n title: '1)如何构建一个最简å•çš„ç–ç•¥',\r\n children: [\r\n { point: 1, tit: 'å‚ç…§ 精选ç–ç•¥ï¼Œä¿®æ”¹å…¬å¼æˆ–傿•°åŽï¼Œå¤åˆ¶ç²˜è´´åˆ°æ–°å»ºè¿‡æ»¤å™¨çª—å£ï¼›' },\r\n { point: 1, tit: '从精选ç–略克隆一个您感兴趣的ç–ç•¥' },\r\n { point: 1, tit: '新建一个ç–略,从头开始实现自己的交易æ€è·¯ï¼›' },\r\n 'å¦‚æžœæ‚¨æƒ³è¦æ›´è¯¦ç»†çš„了解如何写ç–略,点击这里。'\r\n ]\r\n },\r\n {\r\n id: '4-1-2',\r\n title: '2)如何快速检验投资æ€è·¯',\r\n children: [\r\n '用户通过自然è¯è¨€æˆ–便æ·å…¬å¼æž„建好ç–ç•¥åŽï¼Œå¼€å§‹ç´§ç›¯å¸‚场,快速检验自己的投资æ€è·¯ã€‚',\r\n 'æ¤æ—¶ï¼Œæœ‰ä¸¤ç§å¼•擎模å¼ä¾›ç”¨æˆ·é€‰æ‹©ï¼š',\r\n '一. ç¬¬ä¸€ç§æ˜¯å…¨å¸‚场触å‘过滤',\r\n 'Tick by tick驱动过滤引擎,在ç–ç•¥è¿è¡Œæ—¶ï¼Œä¸€æ—¦æœ‰ç›®æ ‡è‚¡ç¥¨æ»¡è¶³æ¡ä»¶ï¼Œå°±ä¼šç«‹å³å‡ºçŽ°åˆ°é¢„è¦çª—å£ã€‚还å¯ä»¥è®¾ç½®å®šæ—¶å™¨ï¼ŒæŒ‡å®šæ—¶é—´æ¥æ‰«æã€‚',\r\n '二. ç¬¬äºŒç§æ˜¯æ¨ªå‘市场扫æ',\r\n '用户å¯ä¸€æ¬¡æ€§æ‰«æå…¨å¸‚场,当å‰ç¬¦åˆæ¡ä»¶çš„股票就会全部过滤出æ¥ï¼Œä»¥æ¤æ¥æ£€éªŒè‡ªå·±çš„æŠ•资æ€è·¯ã€‚',\r\n '如下图:'\r\n ],\r\n img: '/static/images/h-4.png'\r\n },\r\n {\r\n id: '4-1-3',\r\n title: '3)我的ç–ç•¥å½’è°æ‰€æœ‰',\r\n children: [\r\n '您对自己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n },\r\n {\r\n id: '4-1-4',\r\n title: '4)我的ç–略是å¦å®‰å…¨',\r\n children: [\r\n '您对自宽投éžå¸¸ä¸¥è‚ƒå¯¹å¾…用户的ç–略安全问题。我们æä¾›ä¸šç•Œæœ€é«˜çš„å®‰å…¨ä¿æŠ¤ï¼Œé™¤äº†æ‚¨æœ¬äººï¼Œä»»ä½•äººæ— æ³•èŽ·å–æ‚¨çš„ç–略。己构建的ç–略拥有100%的知识产æƒã€‚宽投ä¸ä¼šä¹Ÿæ— 法查看ã€å…¬å¸ƒæ‚¨çš„ç–ç•¥ã€å…¬å¼ã€æ•°æ®ï¼Œå¼€å‘者å¯è‡ªä¸»å…¬å¸ƒåˆ†äº«ã€‚',\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '4-2',\r\n title: '2.2 回测常è§é—®é¢˜',\r\n children: [\r\n {\r\n id: '4-2-1',\r\n title: '1)回测的作用',\r\n children: [\r\n { tit: 'ç–ç•¥æœ‰æ•ˆä½“çŽ°äº†æ‚¨çš„äº¤æ˜“æ€æƒ³ï¼Œå®½æŠ•æä¾›ç®€å•易用ã€ä¸“业高效的ç–略回测平å°ï¼Œé€šè¿‡åކ岿•°æ®å›žæµ‹ï¼Œå¯ä»¥æ£€éªŒç–略的有效性。您å¯ä»¥ä¸“æ³¨äºŽç ”ç©¶ç–略逻辑,而ä¸å¿…被数æ®èŽ·å–ã€äº¤æ˜“æ’®åˆã€å›žæµ‹æŠ¥å‘Šç‰ç¹ç细节所困扰,除æ¤ä¹‹å¤–,宽投还æä¾›äº†å„ç§ä¸“业的ç–ç•¥å›žæµ‹å›¾è¡¨æŠ¥å‘Šï¼Œä¸ºæ‚¨èƒ½ç ”ç©¶æ›´å¤šæ›´æœ‰æ•ˆçš„ç–略而æœåŠ¡ã€‚', hide: 1 },\r\n { tit: '按日回测和分钟回测的区别', hide: 1 },\r\n { tit: '按日回测: æ¯å¤©è°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一个交易日的数æ®', hide: 1 },\r\n { tit: '分钟回测: æ¯åˆ†é’Ÿè°ƒç”¨ä¸€æ¬¡æ•°æ®, æ•°æ®å‚数是上一分钟的数æ®', hide: 1 },\r\n { tit: '频率:日', hide: 1 },\r\n { tit: 'å½“é€‰æ‹©æ—¥é¢‘çŽ‡æ—¶ï¼Œç®—æ³•åœ¨æ¯æ ¹æ—¥çº¿ Bar 都会è¿è¡Œä¸€æ¬¡ï¼Œå³æ¯å¤©è¿è¡Œä¸€æ¬¡', hide: 1 },\r\n { tit: '在算法ä¸ï¼Œå¯ä»¥èŽ·å–任何粒度的数æ®', hide: 1 },\r\n { tit: 'æ—¥K线(Baråºåˆ—)', hide: 1 },\r\n { tit: '频率:Tick' },\r\n { tit: '当选择 Tick 频率时,æ¯å½“有一个新 Tick,算法都会被执行一次', hide: 1 },\r\n ],\r\n img: '/static/images/h-5.png'\r\n },\r\n {\r\n id: '4-2-2',\r\n title: '3)回测å¯ä»¥ä½¿ç”¨å“ªäº›æ•°æ®',\r\n children: [\r\n { tit: '回测å¯ä»¥å…费使用宽投æä¾›çš„æ‰€æœ‰æ•°æ®ã€‚å›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®æœ‰ä¸€å¤©çš„延时,å³å½“天的交易数æ®åœ¨ç¬¬äºŒå¤©æ›´æ–°åŽå¯ä½¿ç”¨', hide: 1 },\r\n { tit: 'å»¶æ—¶åŽŸå› ï¼šå›žæµ‹ä½¿ç”¨çš„äº¤æ˜“æ•°æ®åŸºäºŽLevel-1行情数æ®ï¼ŒLevel-1的完整交易数æ®éœ€è¦æ”¶ç›˜åŽæ‰èƒ½èŽ·å¾—', hide: 1 }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n 4: {\r\n id: '5',\r\n title: '3. CrystalTrade 相关',\r\n children: [\r\n {\r\n id: '5-1',\r\n title: '3.1 模拟交易的作用',\r\n children: [\r\n {\r\n id: '5-1-1',\r\n title: '',\r\n children: [\r\n { tit: '模拟交易的数æ®ä¸Žå®žç›˜æ•°æ®æ˜¯åŒæ¥çš„,并且我们会æä¾›å®žæ—¶çš„æ¨¡æ‹Ÿæ’®åˆæœåŠ¡ï¼Œå› æ¤æ‚¨å¯ä»¥è¿›ä¸€æ¥æ£€éªŒç–略的有效性' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-2',\r\n title: '3.2 æ¨¡æ‹Ÿäº¤æ˜“ä½¿ç”¨ä»€ä¹ˆæ•°æ®æº',\r\n children: [\r\n {\r\n id: '5-2-1',\r\n title: '',\r\n children: [\r\n { tit: '模拟交易使用的是实时更新的Level-1æ•°æ®' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-3',\r\n title: '3.3 如何进行模拟交易',\r\n children: [\r\n {\r\n id: '5-3-1',\r\n title: '',\r\n children: [\r\n { tit: '首先您需è¦ç¼–写一个ç–略,å¯ä»¥å…ˆåœ¨InSyncä¸å»ºç«‹ç–略,也å¯åœ¨CrystalTrade䏿–°å»ºä¸‹å•' },\r\n 'ç–略:'\r\n ],\r\n img: ['/static/images/h-6.png', '/static/images/h-1.png7']\r\n },\r\n {\r\n id: '5-3-2',\r\n title: '',\r\n children: [\r\n { tit: 'å¯ä»¥åœ¨InSync䏿ž„建完ç–ç•¥åŽè¿è¡Œä¸€æ¬¡å®Œæ•´çš„回测以åŽï¼Œå†å¯åŠ¨æ¨¡æ‹Ÿäº¤æ˜“ï¼Œä¹Ÿå¯ä»¥ç›´æŽ¥å¯¹æ–°å»ºç–略进行模拟交易' },\r\n { tit: '或者å¯ä»¥ä»Žä¸‹å•è¡¨æ ¼é‡Œé€‰æ‹©è¿›ä»“è¿‡æ»¤å™¨å’Œå‡ºä»“è¿‡æ»¤å™¨è¿›è¡Œç–略交易设置' }\r\n ],\r\n img: '/static/images/h-8.png'\r\n },\r\n {\r\n id: '5-3-3',\r\n title: '',\r\n children: [\r\n { tit: 'å¯åЍç–略交易之åŽå¯ä»¥åœ¨ç–略列表查看模拟交易ç–略的状æ€ï¼Œå¦‚仓ä½ä¿¡æ¯ã€ä¸‹å•è¯¦æƒ…ã€æˆäº¤æ˜Žç»†' },\r\n ],\r\n img: '/static/images/h-9.png'\r\n }\r\n ]\r\n },\r\n {\r\n id: '5-4',\r\n title: '3.4 我å¯ä»¥å®žç›˜äº¤æ˜“å—',\r\n children: [\r\n {\r\n id: '5-4-1',\r\n title: '',\r\n children: [\r\n { tit: '宽投支æŒå®žç›˜äº¤æ˜“,åªè¦åœ¨å®½æŠ•åˆä½œçš„券商开户,登录宽投智能交易管ç†ç³»ç»ŸCrystalTrade客户端,å³å¯å¼€å§‹å®žç›˜äº¤æ˜“' }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n\r\nexport default help_en;","import React, { Component } from \"react\";\r\nimport { Helmet } from 'react-helmet';\r\nimport SideMenu from \"./components/sideMenu/sideMenu\";\r\nimport help_cn from './components/help_cn';\r\nimport help_en from './components/help_en';\r\n\r\nimport '../main.css';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass HelpPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n data: window.webType === 'US' ? help_en : help_cn,\r\n current: 0,\r\n currentId: 0\r\n };\r\n }\r\n\r\n currentState(current) {\r\n this.setState({\r\n current\r\n })\r\n }\r\n\r\n renderChildNode(inner, descs) {\r\n var txt = '';\r\n if (inner.isHideTitle === undefined) {\r\n if (descs.tit === undefined) {\r\n if (inner.url !== undefined && inner.url !== '') {\r\n txt = <a href={inner.url} target=\"_blank\">{descs}</a>\r\n } else {\r\n txt = `${descs}`;\r\n }\r\n } else {\r\n txt = `${descs.tit}`;\r\n }\r\n } else {\r\n txt = descs.tit || descs;\r\n }\r\n return txt;\r\n }\r\n\r\n renderContent() {\r\n let { data, current } = this.state;\r\n\r\n return Object.keys(data).map((item, i) => (\r\n <div className=\"tree-title\" key={item} data-cur-title={data[item].title}>\r\n {data[item].title}\r\n {data[item].children.map(outer => (\r\n <div className=\"tree-outer\" key={outer.id} data-cur-title={outer.title}>\r\n {outer.title}\r\n <div className=\"tree-inner\">\r\n {outer.children.map((inner, titIndex) => {\r\n return (\r\n <div\r\n key={inner.id}\r\n id={`inner-1-${inner.id}`}\r\n className=\"tree-inner-tit\"\r\n\r\n >\r\n {\r\n inner.title ?\r\n inner.isHideTitle ?\r\n <div id={`inner-1-${inner.title}`} data-cur-title={inner.title} className={`tree-inner-dt ${inner.id == current ? \"active\" : \"\"}`}>{inner.title}</div> :\r\n <div id={`inner-1-${inner.title}`} data-cur-title={inner.title} className={`tree-inner-dt ${inner.id == current ? \"active\" : \"\"}`}>\r\n <span style={{ display: 'inline-block', visibility: 'hidden', width: 5 }}> </span>{inner.title}\r\n </div> :\r\n null\r\n }\r\n {Array.isArray(inner.children) ? (\r\n <div className=\"tree-inner-di\">\r\n {inner.children.map((descs, i) => (\r\n descs.point ? <div key={i} id={`inner-1-${descs.tit || descs}`} data-cur-title={descs.tit || descs} className={`tree-inner-dit ${descs == current ? \"active\" : \"\"}`}>• {descs.tit}</div> :\r\n <div key={i} id={`inner-1-${descs.tit || descs}`} data-cur-title={descs.tit || descs} className={`tree-inner-dit ${descs == current ? \"active\" : \"\"}`}>\r\n {\r\n this.renderChildNode(inner,descs)\r\n //inner.isHideTitle ? (descs.tit || descs) : `${descs.tit}` || inner.url ? <a href={inner.url}>{descs}</a> : descs\r\n }\r\n </div>\r\n ))}\r\n {\r\n inner.img ?\r\n Array.isArray(inner.img) ?\r\n (inner.img.map((imgs, imgsIndex) => <img src={imgs} key={imgsIndex} />)) :\r\n <img src={inner.img} /> : null\r\n }\r\n </div>\r\n ) : (\r\n <div style={{ color: `${inner.color ? inner.color : ''}` }}>{inner.desc}</div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n ));\r\n }\r\n\r\n contentScroll(id) {\r\n let ele = document.getElementsByClassName(\"help-content\")[0];\r\n let cons = ele.getElementsByTagName('*')\r\n\r\n if (id) {\r\n\r\n for (let i = 0; i < cons.length; i++) {\r\n let curId = cons[i].id\r\n if (curId.indexOf(id) !== -1) {\r\n ele.scrollTop = document.getElementById(curId) ? document.getElementById(curId).offsetTop : 0\r\n }\r\n }\r\n\r\n // ele.scrollTop = document.getElementById(`inner-1-${id}`) ? document.getElementById(`inner-1-${id}`).offsetTop : 0\r\n }\r\n\r\n }\r\n\r\n setCurrentId(currentId) {\r\n this.setState({\r\n currentId\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"help-container\">\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <SideMenu data={this.state.data} scrollContent={this.contentScroll.bind(this)} currentState={this.currentState.bind(this)} setCurrentId={this.setCurrentId.bind(this)} />\r\n <div className=\"help-content\">\r\n {this.renderContent()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport { HelpPage as default };","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Row, Col, Button } from 'antd';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass DownloadPage extends Component {\r\n\r\n handleDownloadInSync = () => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'InSync', 'Download', 'InSync']);\r\n\r\n //this.props.dispatch({ type: \"action_download\", payload: { files: 'Insync' } });\r\n window.location.href = '/api/download/insync';\r\n };\r\n\r\n handleDownloadCrystalTrade = () => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'CrystalTrade', 'Download', 'CrystalTrade']);\r\n\r\n window.location.href = '/api/download/files';\r\n };\r\n\r\n handleDownloadAndroidApp = () => {\r\n window.location.href = '/api/download/app';\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className={window.webType === 'US' ? 'download-container-us' : 'download-container'}></div>\r\n <div className='common-download'>\r\n <div className='common-download-cont'>\r\n <Row>\r\n <Col span={14}>\r\n <div style={{ border: '1px solid #e8e8e8', padding: '16px' }}>\r\n <Row>\r\n <Col span={4} style={{ padding: '20px 0px' }}><img src=\"static/images/in.png\" width=\"60\" alt=\"Download InSync\" title=\"Insync\" /></Col>\r\n <Col span={8} style={{ padding: '25px 16px', textAlign: 'left' }}>\r\n <b>InSync</b>\r\n <div><Button size='small' onClick={this.handleDownloadInSync}>{languageMessages['download.immediately']}</Button></div>\r\n </Col>\r\n <Col span={12}>\r\n <div style={{ textAlign: 'left' }}><h2>{languageMessages['download.info.001']}:</h2></div>\r\n <div style={{ textAlign: 'left' }}>\r\n <ul type=\"none\">\r\n <li>{languageMessages['download.info.002']}</li>\r\n {languageMessages['download.info.003'] !== '' ? <li>{languageMessages['download.info.003']} </li> : ''}\r\n {languageMessages['download.info.004'] !== '' ? <li>{languageMessages['download.info.004']} </li> : ''}\r\n {languageMessages['download.info.005'] !== '' ? <li>{languageMessages['download.info.005']}</li> : ''}\r\n </ul>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n <div style={{ border: '1px solid #e8e8e8', padding: '16px', marginTop: '10px' }}>\r\n <Row>\r\n <Col span={4} style={{ padding: '20px 0px' }}><img src=\"static/images/cry.png\" width=\"60\" alt=\"Download CrystalTrade\" title=\"CrystalTrade\" /></Col>\r\n <Col span={8} style={{ padding: '25px 16px' }}>\r\n <b>CrystalTrade</b>\r\n <div><Button size='small' onClick={this.handleDownloadCrystalTrade}>{languageMessages['download.immediately']}</Button></div>\r\n </Col>\r\n <Col span={12}>\r\n <div style={{ textAlign: 'left' }}><h2>{languageMessages['download.info.006']}:</h2></div>\r\n <div style={{ textAlign: 'left' }}>\r\n <ul type=\"none\">\r\n <li>{languageMessages['download.info.007']}</li>\r\n {languageMessages['download.info.008'] !== '' ? <li>{languageMessages['download.info.008']} </li> : ''}\r\n {languageMessages['download.info.009'] !== '' ? <li>{languageMessages['download.info.009']} </li> : ''}\r\n {languageMessages['download.info.010'] !== '' ? <li>{languageMessages['download.info.010']} </li> : ''}\r\n {languageMessages['download.info.011'] !== '' ? <li>{languageMessages['download.info.011']} </li> : ''}\r\n <li>{languageMessages['download.info.012']}</li>\r\n </ul>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n </Col>\r\n <Col span={10} style={{ paddingLeft: '30px' }}>\r\n <img src=\"static/images/cpe.png\" width=\"276\" alt=\"Quancept Trade\" />\r\n </Col>\r\n </Row>\r\n </div>\r\n {window.webType === 'US' ? '' : <div className='common-download-app'>\r\n <div className='common-download-cont'>\r\n <Row>\r\n <Col span={9} style={{ marginTop: '30px' }}>\r\n <img src=\"static/images/iphone.png\" width=\"270\" style={{ verticalAlign: 'middle' }} />\r\n </Col>\r\n <Col span={15}>\r\n <div style={{ border: '1px solid #e8e8e8', margin: '50px 0px 0px 30px', padding: '16px' }}>\r\n <Row>\r\n <Col span={4}>\r\n <div style={{ padding: '10px 0' }}><img src=\"static/images/adn.png\" width=\"60\" /></div>\r\n <div style={{ padding: '10px 0' }}><img src=\"static/images/ios.png\" width=\"60\" /></div>\r\n </Col>\r\n <Col span={8} style={{ textAlign: 'left' }}>\r\n <div style={{ padding: '15px 10px' }}>\r\n <b>{languageMessages['android.version']}</b>\r\n <div><Button size='small' onClick={this.handleDownloadAndroidApp}>{languageMessages['download.immediately']}</Button></div>\r\n </div>\r\n <div style={{ padding: '15px 10px' }}>\r\n <b>{languageMessages['ios.version']}</b>\r\n <div><Button size='small' disabled={true}>{languageMessages['stay.tuned']}</Button></div>\r\n </div>\r\n </Col>\r\n <Col span={12} style={{ padding: '10px 0' }}>\r\n <div style={{ textAlign: 'left' }}><b>{languageMessages['download.info.08']}:</b></div>\r\n <div style={{ textAlign: 'left' }}>{languageMessages['download.info.09']}</div>\r\n </Col>\r\n </Row>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n </div>}\r\n </div>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.download;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(DownloadPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { Layout, PageHeader, Tabs, Row, Col, Tag } from 'antd';\r\n\r\nconst { Content } = Layout;\r\nconst { TabPane } = Tabs;\r\nconst { CheckableTag } = Tag;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass VideoPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n activeKey: sessionStorage.getItem(\"activeVideoKey\") || '0',\r\n\r\n selectedKeys: '1'\r\n };\r\n }\r\n\r\n onSelectInSyncProduct = () => {\r\n this.setState({ selectedKeys: '1' });\r\n }\r\n\r\n onSelectCrystalTradeProduct = () => {\r\n this.setState({ selectedKeys: '2' });\r\n }\r\n\r\n onChangeItems = activeKey => {\r\n sessionStorage.setItem(\"activeVideoKey\", activeKey);\r\n this.setState({ activeKey });\r\n }\r\n\r\n renderInsync() {\r\n return <Tabs activeKey={this.state.activeKey} type=\"card\" onChange={this.onChangeItems}>\r\n <TabPane tab={languageMessages['videoTitle01']} key=\"0\">\r\n <Row gutter={24} justify=\"center\">\r\n <Col span={6}>\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjYxMDQ2OA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0101']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjYzOTgxNg==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0102']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMzUyMTAwNA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0103']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjYxMTMwMA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0104']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMzUyNDI4NA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0105']}</p>\r\n </Col>\r\n </Row>\r\n </TabPane>\r\n <TabPane tab={languageMessages['videoTitle02']} key=\"1\">\r\n <Row gutter={24} justify=\"center\">\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjY0MjQ5Ng==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0201']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMzUyMjM3Ng==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0202']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjY0Mjk1Mg==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0203']}</p>\r\n </Col>\r\n </Row>\r\n </TabPane>\r\n <TabPane tab={languageMessages['videoTitle03']} key=\"2\">\r\n <Row gutter={24} justify=\"center\">\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMzUyMjk3Mg==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0301']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjYxMTU4NA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0302']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDU2NTk0NjkyMA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0303']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDUxMjYyMDkyMA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0304']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMzUyMTk4NA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0305']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDQzMjY0MzE2MA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0306']}</p>\r\n </Col>\r\n </Row>\r\n </TabPane>\r\n </Tabs>\r\n }\r\n\r\n renderCrystalTrade() {\r\n return <Tabs activeKey={'0'} type=\"card\">\r\n <TabPane tab={languageMessages['videoTitle04']} key=\"0\">\r\n <Row gutter={24} justify=\"center\">\r\n <Col span={6}>\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDUxMjYyMDQ2OA==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0401']}</p>\r\n </Col>\r\n <Col span={6} >\r\n <div className=\"common-video\">\r\n <iframe src='//player.youku.com/embed/XNDU1MTExNDAxMg==' frameBorder=\"0\" allowFullScreen></iframe>\r\n </div>\r\n <p className='common-video-title'>{languageMessages['videoCont0402']}</p>\r\n </Col>\r\n </Row>\r\n </TabPane>\r\n </Tabs>\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['selProduct']}</h1>)}\r\n tags={[<CheckableTag key=\"1\" onChange={this.onSelectInSyncProduct} checked={this.state.selectedKeys === '1'}>InSync</CheckableTag>,\r\n <CheckableTag key=\"2\" onChange={this.onSelectCrystalTradeProduct} checked={this.state.selectedKeys === '2'}>CrystalTrade</CheckableTag>]}\r\n />\r\n </div>\r\n <Layout className='sub-tabs-content'>\r\n <div className=\"card-container common-tabs\">\r\n {this.state.selectedKeys === '1' ? this.renderInsync() : this.renderCrystalTrade()}\r\n </div>\r\n </Layout>\r\n </Content>)\r\n }\r\n}\r\n\r\nexport { VideoPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { Layout, Divider } from 'antd';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass AboutPage extends Component {\r\n\r\n render() {\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className='about-container'></div>\r\n <div className='about-content about'>\r\n <div className='common-title'><h2><Divider type=\"vertical\" />{languageMessages['about']}</h2></div>\r\n <p>{languageMessages['about.info.01']}</p>\r\n <p>{languageMessages['about.info.02']}</p>\r\n <p>{languageMessages['about.info.03']}</p>\r\n <p>{window.webType === 'US' ? '' : languageMessages['about.info.04']}</p>\r\n\r\n <div className='common-title'><h2><Divider type=\"vertical\" />{languageMessages['contact']}<a href=\"#\" name='contact' /></h2></div>\r\n <div>{languageMessages['contact.info.01']}</div>\r\n <div>{languageMessages['contact.info.02']}</div>\r\n <div>{languageMessages['contact.info.03']}</div>\r\n <div>{languageMessages['contact.info.04']}</div>\r\n </div>\r\n </Content>)\r\n }\r\n}\r\n \r\nexport { AboutPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport history from '../../helpers/history';\r\nimport { Layout } from 'antd';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass BlankPage extends Component {\r\n\r\n componentWillMount() {\r\n var pathname = sessionStorage.getItem('pathname');\r\n sessionStorage.removeItem('pathname');\r\n history.replace(pathname);\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container'><Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet></Content>);\r\n }\r\n}\r\n\r\nexport { BlankPage as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, message, Spin } from 'antd';\r\n\r\nconst { Content } = Layout;\r\n\r\nclass TestPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n spinLoadding: true,\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username !== undefined) {\r\n this.props.dispatch({ type: \"action_clear_cache\", payload: { UserName: user.username, Password: '' } });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status } = props;\r\n\r\n switch (status) {\r\n case 'clear_cache_success':\r\n message.success(\"æ¸…ç¼“å˜æ•°æ®æˆåŠŸ\");\r\n break;\r\n case 'clear_cache_failed':\r\n message.error(\"æ¸…ç¼“å˜æ•°æ®å¤±è´¥\");\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container'>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div style={{ padding: '50px', margin: '50px', textAlign: 'center' }}>空白页é¢</div>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.test;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(TestPage);\r\n\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, PageHeader, Table, Button, message } from 'antd';\r\nimport history from '../../helpers/history';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass ServicePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initLoadding: true,\r\n dataSource: [],\r\n\r\n currency: 'usd',\r\n }\r\n }\r\n\r\n componentWillMount() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.props.dispatch({ type: \"action_get_payment_service\", payload: { u: this.user.username } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, permission, vServices, expiration } = props;\r\n\r\n switch (status) {\r\n case 'service_success':\r\n permission = permission === undefined ? [] : permission;\r\n\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n \r\n this.SetServiceInfo(permission, vServices, expiration);\r\n break;\r\n case 'service_failed':\r\n break;\r\n }\r\n }\r\n\r\n //设置列表内容\r\n SetServiceInfo(permission, vServices, expiration) {\r\n var dataSource = [];\r\n if (vServices.length > 0) {\r\n let index = 1000;\r\n for (var kk in vServices) {\r\n var value = vServices[kk];\r\n\r\n let addOn = {};\r\n if (window.webType === 'US') {\r\n if (value.type === 4) {\r\n addOn = { key: index, name: [{ title: 'Add-on' }], intro: { items: [] }, date: '', status: [{ title: '' }], isCoupon: false, sg: 'Add-on' };\r\n index++;\r\n }\r\n\r\n if (value.type === 3) {\r\n addOn = { key: index, name: [{ title: 'MachineTrader Service' }], intro: { items: [languageMessages['service.intro']] }, date: languageMessages['Expiration'], status: [{ title: languageMessages['RemainingCredit'] }], isCoupon: false, sg: 'title' };\r\n index++;\r\n }\r\n }\r\n\r\n var discount = value.discount !== '' ? value.discount.split('|') : [];\r\n\r\n let price = value.price > 0 ? this.formatPrice(value.price) : 0;\r\n //let price = value.price > 0 ? value.price : 0;\r\n //if (value.type !== 5) price += languageMessages['yuan/month'];\r\n price += languageMessages['yuan/month'];\r\n\r\n let ins = value.ins !== '' ? value.ins.split('|') : [];\r\n var intro = { items: ins };\r\n\r\n var name = [];\r\n var date = '';\r\n var status = [];\r\n switch (value.type) {\r\n case 0:\r\n name = [{\r\n title: value.title\r\n }];\r\n\r\n date = '---';\r\n\r\n var ups = permission.filter(function (e) { return e.type === 'fs' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n }\r\n\r\n var uph = permission.filter(function (e) { return e.type === 'fh' });\r\n if (uph.length > 0) {\r\n var count = uph[0].totalCount - uph[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Monitor'] + ':' + count + languageMessages['times']] });\r\n }\r\n\r\n break;\r\n case 1:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 'bs' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n\r\n var upo = permission.filter(function (e) { return e.type === 'bh' });\r\n if (upo.length > 0) {\r\n var count = upo[0].totalCount - upo[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Monitor']+':' + count + languageMessages['times']] });\r\n\r\n date = upo[0].expiredDate;\r\n }\r\n break;\r\n case 2:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 's1' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n \r\n break;\r\n case 3:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 's2' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Explores'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n break;\r\n case 4:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var uph = permission.filter(function (e) { return e.type === 'h' });\r\n if (uph.length > 0) {\r\n var count = uph[0].totalCount - uph[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Monitor'] + ':' + count + languageMessages['times']] });\r\n\r\n date = uph[0].expiredDate;\r\n }\r\n\r\n //date = expiration !== undefined && expiration !== null ? expiration : '';\r\n //status.push({ title: '' });\r\n break;\r\n case 5:\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n date = expiration !== undefined && expiration !== null ? expiration : '';\r\n status.push({ title: '' });\r\n break;\r\n case 6:\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n date = expiration !== undefined && expiration !== null ? expiration : '';\r\n status.push({ title: '' });\r\n break;\r\n case 7:\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n date = expiration !== undefined && expiration !== null ? expiration : '';\r\n status.push({ title: '' });\r\n break;\r\n \r\n }\r\n\r\n // ä¼˜æƒ åˆ¸\r\n var couponSource = [];\r\n var coupon = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupon.dataSource !== undefined) {\r\n couponSource = coupon.dataSource;\r\n }\r\n\r\n // 是å¦å…¨åœºä¼˜æƒ 券\r\n var universalCouponIndex = couponSource.findIndex((n) => n.type === 0);\r\n\r\n var isCoupon = false;\r\n if (value.type > 0) {\r\n if (universalCouponIndex > -1) {\r\n isCoupon = true;\r\n } else {\r\n var subscript = couponSource.findIndex((n) => n.type === value.type);\r\n isCoupon = subscript > -1 ? true : false;\r\n }\r\n }\r\n\r\n dataSource.push({\r\n key: value.type,\r\n name: name,\r\n intro: intro,\r\n date: date,\r\n status: status,\r\n isCoupon: isCoupon,\r\n sg: ''\r\n });\r\n\r\n if (Object.keys(addOn).length > 0) {\r\n dataSource.push(addOn);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n initLoadding: false,\r\n dataSource,\r\n });\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n //è®¾ç½®ç¬¬äºŒåˆ—çš„æŠ˜æ‰£å’Œä¼˜æƒ ä»·\r\n parseDiscount(discount, isDiscount=false) {\r\n var info = [];\r\n if (discount.length > 0) {\r\n var strInfo = '';\r\n var nv = discount[0].split(';');\r\n if (nv.length > 0) {\r\n for (var n in nv) {\r\n var nvs = nv[n].split(',');\r\n if (nvs.length > 0) {\r\n var pp1 = nvs[1];\r\n if (pp1 >= 10000) {\r\n pp1 = (pp1 / 10000) + languageMessages['wan'];\r\n }\r\n pp1 = this.formatPrice(pp1);\r\n if (nvs[0] === '12') {\r\n if (strInfo !== '') strInfo += ',';\r\n strInfo += pp1 + languageMessages['yuan/year'];// + '(' + nvs[2] + languageMessages['discount'] + ')';\r\n } else if (nvs[0] === '24') {\r\n if (strInfo !== '') strInfo += ',';\r\n strInfo += pp1 + languageMessages['yuan/2year'];// + '(' + nvs[2] + languageMessages['discount'] +')';\r\n }\r\n }\r\n }\r\n //if (isDiscount) strInfo = languageMessages['vip.special'] + ':' + strInfo;\r\n }\r\n info.push(strInfo);\r\n\r\n if (discount.length > 1) {\r\n strInfo = '';\r\n nv = discount[1].split(';');\r\n if (nv.length > 0) {\r\n for (var n in nv) {\r\n var nvs = nv[n].split(',');\r\n if (nvs.length > 0) {\r\n pp1 = this.formatPrice(nvs[1]);\r\n if (nvs[0] === '12') {\r\n if (strInfo !== '') strInfo += ','\r\n strInfo += pp1 + languageMessages['yuan/year'];\r\n } else if (nvs[0] === '24') {\r\n if (strInfo !== '') strInfo += ','\r\n strInfo += pp1 + languageMessages['yuan/2year'];\r\n }\r\n }\r\n }\r\n strInfo = languageMessages['vip.special']+':' + strInfo;\r\n }\r\n info.push(strInfo);\r\n }\r\n }\r\n return info;\r\n }\r\n\r\n onBuyService = key => {\r\n history.push({ pathname: '/charge', state: { id: [key] } });\r\n }\r\n\r\n jumpCoupon = e => {\r\n history.push(\"/coupon\");\r\n }\r\n\r\n onMyBill = e => {\r\n e.preventDefault();\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"3\" } });\r\n }\r\n }\r\n\r\n render() {\r\n const columns = [\r\n {\r\n title: languageMessages['service.name'],\r\n dataIndex: 'name',\r\n align: 'center',\r\n className: 'common-service-name',\r\n width: 220,\r\n render: (name, record) => {\r\n return (<div>\r\n {record.isCoupon && (<div className=\"coupon-conent\">\r\n <div className=\"coupon-conent-red\" onClick={this.jumpCoupon}>{languageMessages['coupon']}</div>\r\n </div>)}\r\n {\r\n name && name.map((item, index) => {\r\n return <div key={index}>\r\n <b>{item.title}</b>\r\n {item.price !== undefined && (<div>{item.price}</div>)}\r\n {item.specialPrice !== undefined && (<div>{item.specialPrice}</div>)}\r\n {(item.button !== undefined) && (<div><Button size='small' style={{ width: 120 }} onClick={() => this.onBuyService(record.key)}>{item.button}</Button></div>)}\r\n </div>;\r\n })\r\n }</div>)\r\n }\r\n }, {\r\n title: languageMessages['service.intro'],\r\n dataIndex: 'intro',\r\n //align: 'center',\r\n render: (intro, record) => {\r\n var items = intro.items && intro.items.map((item, index) => {\r\n return (<span key={index} style={{ display: 'block' }}>{item}</span>)\r\n })\r\n \r\n return <div>{items}</div>;\r\n }\r\n }\r\n ];\r\n\r\n if (this.user.username !== undefined) {\r\n columns.push({\r\n title: languageMessages['Expiration'],\r\n dataIndex: 'date',\r\n //align: 'center',\r\n width: 150,\r\n });\r\n\r\n columns.push({\r\n title: languageMessages['RemainingCredit'],\r\n dataIndex: 'status',\r\n width: 300,\r\n //align: 'center',\r\n render: (status, record) => {\r\n var items = status.map((item, index) => {\r\n return (<div key={index}>\r\n <span style={{ display: 'block' }}>{item.title}</span>\r\n {item.cont && item.cont.map((ii, i) => {\r\n return (<b key={i} style={{ display: 'block' }}>{ii}</b>)\r\n })}\r\n </div>);\r\n })\r\n\r\n return <div>{items}</div>;\r\n },\r\n });\r\n }\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className='common-page-header'>\r\n <PageHeader title={languageMessages['please.select.service.type']}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyBill}>{languageMessages['my.account']}</Button>\r\n ]} />\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n <div style={{ margin: '10px 0 10px 10px' }}>\r\n <div style={{ padding: '5px 0' }}><b>Scan</b> - Scan through all symbols in a market and find symbols that match a set of custom criteria</div>\r\n <div style={{ padding: '5px 0' }}><b>Filter</b> - Monitor all symbols in a market constantly, send alert whenever any symbol meets a set of custom criteria</div>\r\n <div style={{ padding: '5px 0' }}><b>Monitor</b> - Monitor a single symbol constantly for specified criteria, send alert the moment condition is met, and/or trigger order to buy or sell</div>\r\n <div style={{ padding: '5px 0' }}><b>Strategy Explorer</b> - Backtest one symbol on many strategies, look for strategies with good performance for the symbol</div>\r\n <div style={{ padding: '5px 0' }}><b>Backtest/Optimization</b> - Backtest one strategy on any symbol group, from one stock to the entire market; Optimize strategy for better return and lower risk</div>\r\n </div>\r\n <div className='common-payment-service'>\r\n <Table size='small' bordered\r\n rowClassName={record => {\r\n let className = '';\r\n if (record.sg === 'Add-on') className = 'common-table-tips ant-table-expanded-row';\r\n if (record.sg === 'title') className = 'common-table-hand ant-table-expanded-row';\r\n return className;\r\n }}\r\n columns={columns}\r\n dataSource={this.state.dataSource}\r\n loading={this.state.initLoadding}\r\n pagination={false} />\r\n </div>\r\n\r\n <div style={{ margin: '20px 0', border: '1px solid #e8e8e8', padding: '16px' }}>\r\n <p>\r\n <span style={{ display: 'block' }}>Email: billing@quancept.com</span>\r\n </p>\r\n </div>\r\n </Layout>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.charge;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(ServicePage);\r\nexport { page as default }","import React from 'react';\r\nimport { CardElement } from '@stripe/react-stripe-js';\r\nimport { Tabs } from 'antd';\r\n\r\nconst { TabPane } = Tabs;\r\n\r\nconst CARD_ELEMENT_OPTIONS = {\r\n style: {\r\n base: {\r\n color: \"#32325d\",\r\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\r\n fontSmoothing: \"antialiased\",\r\n fontSize: \"16px\",\r\n \"::placeholder\": {\r\n color: \"#aab7c4\",\r\n },\r\n },\r\n invalid: {\r\n color: \"#fa755a\",\r\n iconColor: \"#fa755a\",\r\n },\r\n },\r\n};\r\n\r\nfunction callback(key) {\r\n console.log(key);\r\n};\r\n\r\nfunction CardSection() {\r\n return (<div className=\"card-container common-coupon\">\r\n <fieldset>\r\n <label>\r\n <div className=\"field\">\r\n <CardElement options={CARD_ELEMENT_OPTIONS} />\r\n </div>\r\n </label>\r\n </fieldset>\r\n </div>);\r\n};\r\n \r\nexport default CardSection;","import React from 'react';\r\nimport {ElementsConsumer, CardElement} from '@stripe/react-stripe-js';\r\nimport { Layout, Divider, Select, Button, message } from 'antd';\r\n\r\nimport CardSection from './CardSection';\r\n\r\nconst { Content } = Layout;\r\nconst { Option } = Select;\r\n\r\nconst backtestCredit = {\r\n /**\r\n 1: { 'price': '25', 'points': '$25/1000points' },\r\n 2: { 'price': '50', 'points': '$50/2000points' },\r\n 3: { 'price': '75', 'points': '$75/3000points' },\r\n 4: { 'price': '100', 'points': '$100/4000points' },\r\n 5: { 'price': '200', 'points': '$200/10000points' },\r\n 6: { 'price': '300', 'points': '$300/15000points' }\r\n */\r\n 1: { 'price': '25', 'points': '$25' },\r\n 2: { 'price': '50', 'points': '$50' },\r\n 3: { 'price': '75', 'points': '$75' },\r\n 4: { 'price': '100', 'points': '$100' },\r\n 5: { 'price': '200', 'points': '$200' },\r\n 6: { 'price': '300', 'points': '$300' }\r\n};\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass CheckoutForm extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n months: 1,\r\n couponId: 0,\r\n\r\n amount: 0,\r\n currency: 'usd',\r\n\r\n vService: undefined,\r\n\r\n payProcessing :false,\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { data, stripe } = props;\r\n\r\n switch (data.status) {\r\n case 'stripe_success':\r\n let vService = data.vService !== undefined && data.vService !== null ? data.vService[0] : undefined;\r\n if (vService !== undefined) {\r\n this.setState({ vService }, () => {\r\n this.changeAmount(this.state.months, this.state.couponId);\r\n });\r\n }\r\n break;\r\n case 'stripe_failed':\r\n \r\n break;\r\n case 'payment_method_success':\r\n if (data.clientSecret !== undefined) {\r\n try {\r\n stripe.handleCardAction(data.clientSecret).then(this.handlePaymentIntent);\r\n } catch (e) {\r\n console.log('e',e);\r\n }\r\n } else {\r\n if (data.permission !== undefined && data.permission !== null) {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.permission !== undefined) {\r\n user.permission = data.permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(user));\r\n }\r\n }\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n \r\n this.setState({ payProcessing: false });\r\n }\r\n break;\r\n case 'payment_method_failed':\r\n if (data.permission !== undefined && data.permission !== null) {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.permission !== undefined) {\r\n user.permission = data.permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(user));\r\n }\r\n }\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n\r\n this.setState({ payProcessing: false });\r\n break;\r\n case 'payment_intent_success':\r\n if (data.permission !== undefined && data.permission !== null) {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.permission !== undefined) {\r\n user.permission = data.permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(user));\r\n }\r\n }\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n \r\n this.setState({ payProcessing: false });\r\n break;\r\n case 'payment_intent_failed':\r\n this.setState({ payProcessing: false });\r\n break;\r\n }\r\n }\r\n\r\n handlePaymentIntent = (result) => {\r\n if (result.error) {\r\n this.setState({ payProcessing: false }, () => {\r\n this.props.data.dispatch({ type: \"action_pay_processing\", payload: { stepStatus: 'error', stepIndex: 2 }});\r\n });\r\n } else {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ payProcessing: false }, () => {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.data.dispatch({\r\n type: \"action_payment_intent\",\r\n payload: {\r\n pii: result.paymentIntent.id,\r\n u: user.username,\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n handlePaymentMethod = (result) => {\r\n let { amount, currency, months, couponId } = this.state;\r\n \r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ payProcessing: false }, () => {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.data.dispatch({\r\n type: \"action_payment_method\",\r\n payload: {\r\n pmi: result.paymentMethod.id,\r\n a: this.multiply(amount, 100),\r\n c: currency,\r\n m: months,\r\n n: couponId,\r\n t: this.props.data.vService[0].type,\r\n u: user.username,\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleSubmit = async (event) => {\r\n // We don't want to let default form submission happen here,\r\n // which would refresh the page.\r\n event.preventDefault();\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n const { stripe, elements } = this.props\r\n\r\n if (!stripe || !elements) {\r\n // Stripe.js has not yet loaded.\r\n // Make sure to disable form submission until Stripe.js has loaded.\r\n return;\r\n }\r\n\r\n this.setState({ payProcessing: true }, async () => {\r\n const payload = await stripe.createPaymentMethod({\r\n type: 'card',\r\n card: elements.getElement(CardElement),\r\n billing_details: {\r\n // Include any additional collected billing details.\r\n name: user.username,\r\n //address: 'test',\r\n //email: 'Jenny.Rosen@examplate.com',\r\n phone: user.username,\r\n },\r\n });\r\n\r\n if (payload.error) {\r\n message.error(`Payment failed ${payload.error.message}`);\r\n this.setState({ payProcessing: false });\r\n } else {\r\n //this.props.data.handleStepState({ stepStatus: 'finish', stepIndex: 1 });\r\n this.handlePaymentMethod(payload);\r\n }\r\n });\r\n }\r\n };\r\n\r\n multiply = (a, b) => {\r\n let m = 0, c = a.toString(), d = b.toString();\r\n\r\n try {\r\n m += c.split(\".\")[1].length\r\n } catch (e) { }\r\n\r\n try {\r\n m += d.split(\".\")[1].length\r\n } catch (e) { }\r\n return Number(c.replace(\".\", \"\")) * Number(d.replace(\".\", \"\")) / Math.pow(10, m);\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n\r\n //é€‰æ‹©å¥—é¤ æŠ˜æ‰£å’Œä¼˜æƒ \r\n onSelectMon = months => {\r\n this.changeAmount(months, this.state.couponId);\r\n }\r\n\r\n //é€‰æ‹©ä¼˜æƒ åˆ¸\r\n onSelectCoupon = couponId => {\r\n this.changeAmount(this.state.months, couponId);\r\n }\r\n\r\n changeAmount(months, couponId) {\r\n let { vService } = this.state;\r\n\r\n if (vService !== undefined) {\r\n var amount = 0;\r\n if (vService.type == 4) {\r\n if (backtestCredit[months] !== undefined) {\r\n amount = backtestCredit[months].price;\r\n }\r\n } else {\r\n let price = vService.price;\r\n\r\n var discounts = vService.discount.split('|');\r\n\r\n var discount = discounts[0].split(';');\r\n amount = this.getOrderTotalPrice(discount, months);\r\n\r\n if (amount === 0) {\r\n amount = this.multiply(price, months);\r\n }\r\n\r\n if (couponId !== 0) {\r\n var couponSource = [];\r\n var coupons = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupons.dataSource !== undefined) {\r\n couponSource = coupons.dataSource;\r\n }\r\n\r\n var coupon = couponSource.filter((e) => { return e.id === couponId });\r\n amount = this.multiply(amount, coupon[0].discount);\r\n }\r\n }\r\n \r\n\r\n this.setState({ amount, months, couponId });\r\n }\r\n }\r\n\r\n getOrderTotalPrice(discount, months) {\r\n var total = 0;\r\n if (discount.length > 0) {\r\n for (var kk in discount) {\r\n var d = discount[kk].split(',');\r\n if (d.length > 0) {\r\n if (d[0].toString() === months.toString()) {\r\n total = d[1];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return total;\r\n }\r\n\r\n parseDiscount(discount) {\r\n var strInfo = '';\r\n if (discount === '') return strInfo;\r\n \r\n var nvs = discount.split(',');\r\n if (nvs.length > 0) {\r\n var pp1 = nvs[1];\r\n if (pp1 >= 10000) {\r\n pp1 = (pp1 / 10000) + languageMessages['wan'];\r\n }\r\n pp1 = this.formatPrice(pp1);\r\n if (nvs[0] === '12') {\r\n if (strInfo !== '') strInfo += ',';\r\n strInfo += pp1 + languageMessages['yuan/year'];\r\n }\r\n }\r\n return strInfo;\r\n }\r\n\r\n SetCoupon(type) {\r\n var couponSource = [];\r\n var coupon = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupon.dataSource !== undefined) {\r\n couponSource = coupon.dataSource;\r\n }\r\n var coupons = couponSource.filter((n) => n.type === type || n.type === 0);\r\n return (<div><Select size='small' value={this.state.couponId} style={{ width: 180 }}\r\n onSelect={this.onSelectCoupon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n {coupons.map(item => {\r\n return (<Option key={item.id} value={item.id}>{item.name}</Option>)\r\n })}\r\n {coupons.length > 0 ? (<Option key='0' value={0}>{languageMessages['do.not.use']}</Option>) : (<Option key='0' value={0}>{languageMessages['no.available']}</Option>)}\r\n </Select></div>);\r\n }\r\n\r\n renderSpecialPrice(specialPrice) {\r\n if (specialPrice === 0) return '';\r\n return <label>\r\n <span>{languageMessages['vip.special.price']}</span>\r\n <div className=\"field price\">{this.formatPrice(specialPrice)}</div>\r\n </label>\r\n }\r\n\r\n renderSelItem(vService, months) {\r\n if (vService.type == 4) {\r\n return <Select size='small' value={months} style={{ width: 180 }}\r\n onSelect={this.onSelectMon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n {Object.keys(backtestCredit).map((item, index) => (<Option key={index} value={parseInt(item)}>{backtestCredit[item].points}</Option>))}\r\n </Select>;\r\n } else {\r\n return <Select size='small' value={months} style={{ width: 180 }}\r\n onSelect={this.onSelectMon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n <Option value={1}>{this.formatPrice(vService.price) + '/month'}</Option>\r\n <Option value={12}>{this.parseDiscount(vService.discount)}</Option>\r\n </Select>;\r\n }\r\n }\r\n\r\n renderBillInfo() {\r\n let { vService, amount, months } = this.state;\r\n if (vService === undefined) return '';\r\n \r\n return <fieldset>\r\n <label className='common-pay-form-hand'>\r\n <span>{vService.c}</span>\r\n <div className=\"field\">{vService.title}</div>\r\n </label>\r\n <label>\r\n <span>{'Payment method'}</span>\r\n <div className=\"field\">\r\n {this.renderSelItem(vService, months)}\r\n </div>\r\n </label>\r\n <label>\r\n <span>{languageMessages['coupon']}</span>\r\n <div className=\"field\">{this.SetCoupon(vService.type)}</div>\r\n </label>\r\n <label>\r\n <span>{languageMessages['subtotal']}</span>\r\n <div className=\"field\"><span>{this.formatPrice(amount)}</span></div>\r\n </label>\r\n </fieldset>\r\n }\r\n\r\n render() {\r\n const { stripe } = this.props;\r\n\r\n return (<Content className='card-section'>\r\n <div className='common-title'><Divider type=\"vertical\" />{'Billing information'}</div>\r\n {this.renderBillInfo()}\r\n <div className='common-title'><Divider type=\"vertical\" />{'Payment information'}</div>\r\n <CardSection />\r\n <div className='common-total'>{languageMessages['subtotal']}: {this.formatPrice(this.state.amount)}</div>\r\n <Button className=\"ant-btn ant-btn-sm pay-btn\" disabled={!stripe || this.state.payProcessing} onClick={this.handleSubmit} loading={this.state.payProcessing}>\r\n {languageMessages['pay']}\r\n </Button>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport default function InjectedCheckoutForm(data) {\r\n return (\r\n <ElementsConsumer>\r\n {({ stripe, elements }) => (\r\n <CheckoutForm stripe={stripe} elements={elements} data={data} />\r\n )}\r\n </ElementsConsumer>\r\n );\r\n}","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Elements } from '@stripe/react-stripe-js';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, Steps, Result, Button, Icon, Spin } from 'antd';\r\n\r\nimport CheckoutForm from './charge/CheckoutForm';\r\nimport emitter from '../Evt.js';\r\n\r\nimport './CardSectionStyles.css'\r\n\r\nconst { Content } = Layout;\r\nconst { Step } = Steps;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass ChargePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.stripePromise = loadStripe(process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY, { locale: window.webType === 'US' ? 'en' : 'auto' });\r\n\r\n this.state = {\r\n spinLoadding: true,\r\n\r\n currency: 'usd',\r\n \r\n stepStatus: 'wait', //wait process finish error\r\n stepIndex: 1,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n \r\n if (history.location.state !== undefined) {\r\n let type = history.location.state.id;\r\n this.props.dispatch({ type: \"action_get_stripe_key\", payload: { u: this.user.username, t: type } });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, clientSecret, stepStatus, stepIndex } = props;\r\n\r\n switch (status) {\r\n case 'stripe_success':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'stripe_failed':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'payment_method_success':\r\n if (clientSecret === undefined) {\r\n this.setState({ stepStatus: 'finish', stepIndex: 2 });\r\n }\r\n break;\r\n case 'payment_method_failed':\r\n this.setState({ stepStatus: 'error', stepIndex: 2 });\r\n break;\r\n case 'payment_intent_success':\r\n this.setState({ stepStatus: 'finish', stepIndex: 2 });\r\n break;\r\n case 'payment_intent_failed':\r\n this.setState({ stepStatus: 'error', stepIndex: 2 });\r\n break;\r\n case 'pay_processing':\r\n this.setState({ stepStatus, stepIndex });\r\n break;\r\n }\r\n }\r\n\r\n handleStepState(data) {\r\n this.setState({ stepStatus: data.stepStatus, stepIndex: data.stepIndex });\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n\r\n handleBackHome = () => {\r\n emitter.emit('callJump', 'vernacular');\r\n\r\n history.replace(\"/\");\r\n }\r\n\r\n handlePayAgain = () => {\r\n this.setState({ stepStatus: 'wait', stepIndex: 1, spinLoadding: true }, () => {\r\n this.init();\r\n });\r\n }\r\n\r\n handleSendEmail = () => {\r\n if (this.user.username !== undefined) {\r\n this.props.dispatch({ type: \"action_send_email\", payload: { u: this.user.username, s: this.props.account.status } });\r\n }\r\n }\r\n\r\n renderSuccess() {\r\n let title = '', amount = 0, coupon = '--', months = 0, expiredDate = '', orderNo = '', paymentStatus = 0;\r\n let paymentMethod = [];\r\n if (this.props.account !== undefined) {\r\n title = this.props.account.intro;\r\n amount = this.formatPrice(this.props.account.amount);\r\n\r\n if (this.props.account.type >= 4) {\r\n months = '--';\r\n expiredDate = '--';\r\n } else {\r\n months = this.props.account.months + ' ' + 'months';\r\n expiredDate = this.props.account.expiredDate;\r\n }\r\n \r\n orderNo = this.props.account.orderNo;\r\n paymentStatus = this.props.account.status;\r\n\r\n if (this.props.account.paymentMethodDetails !== undefined) {\r\n let paymentMethodDetails = this.props.account.paymentMethodDetails.split('|');\r\n if (paymentMethodDetails['0'] === 'card') {\r\n paymentMethod.push(<Icon key='card 01' type=\"credit-card\" />);\r\n paymentMethod.push(' ');\r\n paymentMethod.push(paymentMethodDetails['1']);\r\n paymentMethod.push(' •••• ');//<Icon type=\"small-dash\" />\r\n paymentMethod.push(paymentMethodDetails[2]);\r\n }\r\n }\r\n\r\n let couponId = this.props.account.couponId;\r\n if (couponId !== 0) {\r\n var couponSource = [];\r\n var coupons = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupons.dataSource !== undefined) {\r\n couponSource = coupons.dataSource;\r\n }\r\n\r\n var coupons = couponSource.filter((e) => { return e.id === couponId });\r\n coupon = coupons[0].name;\r\n }\r\n }\r\n\r\n let status = 'error';\r\n let subject = 'Your payment failed';\r\n let btn = [<Button key=\"resubscribe\" onClick={this.handlePayAgain}>Try again</Button>];\r\n if (paymentStatus === 1) {\r\n status = 'success';\r\n subject = 'Your payment succeeded';\r\n btn = [<Button key=\"resubscribe\" onClick={this.handleBackHome}>Back home</Button>];\r\n }\r\n\r\n return (<div className=\"common-payment-success\">\r\n <Result status={status} title={subject} subTitle=\"\" extra={btn}>\r\n <div className=\"common-payment-cont card-section\">\r\n <fieldset>\r\n <label>\r\n <span>{languageMessages['service.name']}</span>\r\n <div className=\"field\">{title}</div>\r\n </label>\r\n <label>\r\n <span>{'Total'}</span>\r\n <div className=\"field\"><span>{amount}</span></div>\r\n </label>\r\n <label>\r\n <span>{'Payment method'}</span>\r\n <div className=\"field\">{paymentMethod}</div>\r\n </label>\r\n <label>\r\n <span>{'Order no.'}</span>\r\n <div className=\"field\">{orderNo}</div>\r\n </label>\r\n </fieldset>\r\n <div className='common-payment-tips'>\r\n <p>{languageMessages['payment.prompt.01']}</p>\r\n <p>{languageMessages['payment.prompt.02']}</p>\r\n </div>\r\n </div>\r\n </Result>\r\n </div>);\r\n };\r\n\r\n renderForm() {\r\n return <Layout className='common-main-content'>\r\n <Elements stripe={this.stripePromise}>\r\n <CheckoutForm {...this.props} handleStepState={this.handleStepState.bind(this)} />\r\n </Elements>\r\n </Layout>\r\n };\r\n\r\n render() {\r\n return (<Content className='main-container'>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <Steps current={this.state.stepIndex} status={this.state.stepStatus}>\r\n <Step title=\"Billing information\" />\r\n <Step title=\"Payment and confirmation\" />\r\n <Step title=\"Finished\" />\r\n </Steps>\r\n </div>\r\n {this.state.stepIndex === 2 ? this.renderSuccess() : this.renderForm()}\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.charge;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(ChargePage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, PageHeader, Table, Button, message, Modal } from 'antd';\r\nimport history from '../../helpers/history';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass SubscriptionPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initLoadding: true,\r\n dataSource: [],\r\n\r\n subscriptions: [],\r\n\r\n subscriptionId: '',\r\n\r\n currency: 'usd',\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.props.dispatch({ type: \"action_get_payment_service\", payload: { u: this.user.username } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, state, permission, vServices, insyncExpiration, crystalTraderExpiration } = props;\r\n\r\n switch (status) {\r\n case 'service_success':\r\n permission = permission === undefined ? [] : permission;\r\n\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n \r\n this.SetServiceInfo(permission, vServices, insyncExpiration, crystalTraderExpiration);\r\n break;\r\n case 'service_failed':\r\n break;\r\n case 'cancel_subscription_success':\r\n var { dataSource, subscriptionId } = this.state;\r\n\r\n for (var kk in dataSource) {\r\n console.log(kk)\r\n console.log(dataSource[kk])\r\n if (dataSource[kk].sId === subscriptionId) {\r\n dataSource[kk].sId = '';\r\n break;\r\n }\r\n }\r\n\r\n message.success('Cancel subscription success');\r\n this.setState({ dataSource, subscriptionId: '', initLoadding: false });\r\n break;\r\n case 'cancel_subscription_failed':\r\n var error = 'Cancel subscription failed';\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ initLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n //设置列表内容\r\n SetServiceInfo(permission, vServices, insyncExpiration, crystalTraderExpiration) {\r\n var dataSource = [];\r\n if (vServices.length > 0) {\r\n let index = 1000;\r\n for (var kk in vServices) {\r\n var value = vServices[kk];\r\n\r\n let addOn = {};\r\n if (window.webType === 'US') {\r\n /**\r\n if (value.type === 1) {\r\n addOn = { key: index, name: [{ title: 'Add-on' }], intro: { items: [] }, date: '', status: [{ title: '' }], isCoupon: false, sg: 'Add-on' };\r\n index++;\r\n }\r\n */\r\n if (value.type === 4) {\r\n addOn = { key: index, name: [{ title: 'MachineTrader Service' }], intro: { items: [languageMessages['service.intro']] }, date: languageMessages['Expiration'], status: [{ title: languageMessages['RemainingCredit'] }], isCoupon: false, sg: 'title' };\r\n index++;\r\n }\r\n }\r\n\r\n var discount = value.discount !== '' ? value.discount.split('|') : [];\r\n\r\n let price = value.price > 0 ? this.formatPrice(value.price) : 0;\r\n price += languageMessages['yuan/month'];\r\n\r\n let ins = value.ins !== '' ? value.ins.split('|') : [];\r\n var intro = { items: ins };\r\n\r\n var name = [];\r\n var date = '';\r\n var status = [];\r\n switch (value.type) {\r\n case 0:\r\n name = [{\r\n title: value.title\r\n }];\r\n \r\n date = '---';\r\n\r\n var ups = permission.filter(function (e) { return e.type === 'fs' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status = [{ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] }];\r\n }\r\n\r\n var uph = permission.filter(function (e) { return e.type === 'fh' });\r\n if (uph.length > 0) {\r\n var count = uph[0].totalCount - uph[0].usageCount;\r\n status = [{ title: '', cont: [languageMessages['Monitor'] + ':' + count + languageMessages['times']] }];\r\n }\r\n\r\n break;\r\n case 1:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 'bs' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n\r\n var upo = permission.filter(function (e) { return e.type === 'bh' });\r\n if (upo.length > 0) {\r\n var count = upo[0].totalCount - upo[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Monitor'] + ':' + count + languageMessages['times']] });\r\n\r\n date = upo[0].expiredDate;\r\n }\r\n break;\r\n case 2:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 's1' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n break;\r\n case 3:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 's2' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Scan'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n break;\r\n case 4:\r\n var info = this.parseDiscount(discount);\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n specialPrice: info,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n var ups = permission.filter(function (e) { return e.type === 'h' });\r\n if (ups.length > 0) {\r\n var count = ups[0].totalCount - ups[0].usageCount;\r\n status.push({ title: '', cont: [languageMessages['Monitor'] + ':' + count + languageMessages['times']] });\r\n\r\n date = ups[0].expiredDate;\r\n }\r\n break;\r\n case 5:\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n date = insyncExpiration !== undefined && insyncExpiration !== null ? insyncExpiration : '';\r\n status.push({ title: '' });\r\n break;\r\n case 6:\r\n name = [{\r\n title: value.title,\r\n price: price,\r\n button: languageMessages['buy'],\r\n }];\r\n\r\n date = crystalTraderExpiration !== undefined && crystalTraderExpiration !== null ? crystalTraderExpiration : '';\r\n status.push({ title: '' });\r\n break;\r\n\r\n }\r\n\r\n // ä¼˜æƒ åˆ¸\r\n var couponSource = [];\r\n var coupon = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupon.dataSource !== undefined) {\r\n couponSource = coupon.dataSource;\r\n }\r\n\r\n // 是å¦å…¨åœºä¼˜æƒ 券\r\n var universalCouponIndex = couponSource.findIndex((n) => n.type === 0);\r\n\r\n let subState = '';\r\n var isCoupon = false;\r\n if (value.type > 0) {\r\n if (universalCouponIndex > -1) {\r\n isCoupon = true;\r\n } else {\r\n var subscript = couponSource.findIndex((n) => n.type === value.type);\r\n isCoupon = subscript > -1 ? true : false;\r\n }\r\n\r\n subState = 'plus';\r\n }\r\n \r\n dataSource.push({\r\n key: value.type,\r\n name: name,\r\n intro: intro,\r\n date: date,\r\n status: status,\r\n isCoupon: isCoupon,\r\n subState: subState,\r\n sg: '',\r\n sId: value.sId\r\n });\r\n\r\n if (Object.keys(addOn).length > 0) {\r\n dataSource.push(addOn);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n initLoadding: false,\r\n dataSource,\r\n });\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n //è®¾ç½®ç¬¬äºŒåˆ—çš„æŠ˜æ‰£å’Œä¼˜æƒ ä»·\r\n parseDiscount(discount, isDiscount = false) {\r\n var info = [];\r\n if (discount.length > 0) {\r\n var strInfo = '';\r\n var nv = discount[0].split(';');\r\n if (nv.length > 0) {\r\n for (var n in nv) {\r\n var nvs = nv[n].split(',');\r\n if (nvs.length > 0) {\r\n var pp1 = nvs[1];\r\n if (pp1 >= 10000) {\r\n pp1 = (pp1 / 10000) + languageMessages['wan'];\r\n }\r\n pp1 = this.formatPrice(pp1);\r\n if (nvs[0] === '12') {\r\n if (strInfo !== '') strInfo += ',';\r\n strInfo += pp1 + languageMessages['yuan/year'];// + '(' + nvs[2] + languageMessages['discount'] + ')';\r\n } else if (nvs[0] === '24') {\r\n if (strInfo !== '') strInfo += ',';\r\n strInfo += pp1 + languageMessages['yuan/2year'];// + '(' + nvs[2] + languageMessages['discount'] +')';\r\n }\r\n }\r\n }\r\n //if (isDiscount) strInfo = languageMessages['vip.special'] + ':' + strInfo;\r\n }\r\n info.push(strInfo);\r\n\r\n if (discount.length > 1) {\r\n strInfo = '';\r\n nv = discount[1].split(';');\r\n if (nv.length > 0) {\r\n for (var n in nv) {\r\n var nvs = nv[n].split(',');\r\n if (nvs.length > 0) {\r\n pp1 = this.formatPrice(nvs[1]);\r\n if (nvs[0] === '12') {\r\n if (strInfo !== '') strInfo += ','\r\n strInfo += pp1 + languageMessages['yuan/year'];\r\n } else if (nvs[0] === '24') {\r\n if (strInfo !== '') strInfo += ','\r\n strInfo += pp1 + languageMessages['yuan/2year'];\r\n }\r\n }\r\n }\r\n strInfo = languageMessages['vip.special'] + ':' + strInfo;\r\n }\r\n info.push(strInfo);\r\n }\r\n }\r\n return info;\r\n }\r\n\r\n handleCancelSubscription = sId => {\r\n if (this.user.username === undefined) {\r\n this.setState({ initLoading: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Payment', 'Cancel', this.user.username]);\r\n\r\n var _this = this;\r\n Confirm({\r\n title: <div>{\"Are you sure you want to cancel this subscription?\"}</div>,\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ subscriptionId: sId, initLoading: true }, () => {\r\n _this.props.dispatch({\r\n type: \"action_cancel_subscriptions\", payload: {\r\n u: _this.user.username,\r\n i: sId,\r\n }\r\n });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n\r\n onBuyService = (key) => {\r\n if (this.user.username === undefined) {\r\n this.setState({ initLoading: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Payment', 'BuyService', this.user.username]);\r\n\r\n history.push({ pathname: '/b', state: { subscriptions: [key] } });\r\n }\r\n\r\n /**\r\n let { dataSource, subscriptions } = this.state;\r\n\r\n for (let k in dataSource) {\r\n if (dataSource[k].key == key) {\r\n if (dataSource[k].subState === 'plus') {\r\n dataSource[k].subState = 'minus';\r\n subscriptions.push(key);\r\n } else {\r\n dataSource[k].subState = 'plus';\r\n subscriptions = subscriptions.filter(function (item) {\r\n return item !== key\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.setState({ dataSource, subscriptions });\r\n */\r\n }\r\n\r\n jumpCoupon = e => {\r\n history.push(\"/coupon\");\r\n }\r\n\r\n onMyBill = e => {\r\n e.preventDefault();\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"3\" } });\r\n }\r\n\r\n onMySubscription = e => {\r\n e.preventDefault();\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"7\" } });\r\n }\r\n }\r\n\r\n handleSubscription = e => {\r\n let { subscriptions } = this.state;\r\n if (subscriptions.length > 0) {\r\n history.push({ pathname: '/b', state: { subscriptions: this.state.subscriptions } });\r\n }\r\n }\r\n\r\n render() {\r\n const columns = [\r\n {\r\n title: languageMessages['service.name'],\r\n dataIndex: 'name',\r\n align: 'center',\r\n className: 'common-service-name',\r\n width: 220,\r\n render: (name, record) => {\r\n return (<div>\r\n {record.isCoupon && (<div className=\"coupon-conent\">\r\n <div className=\"coupon-conent-red\" onClick={this.jumpCoupon}>{languageMessages['coupon']}</div>\r\n </div>)}\r\n {\r\n name && name.map((item, index) => {\r\n return <div key={index}>\r\n {item.title}\r\n {item.price !== undefined && (<div>{item.price}</div>)}\r\n {item.specialPrice !== undefined && (<div>{item.specialPrice}</div>)}\r\n {(item.button !== undefined) && (record.sId === null || record.sId === '' ?\r\n (<div><Button size='small' style={{ width: 120 }} onClick={() => this.onBuyService(record.key)}>{item.button}</Button></div>) :\r\n (<div><Button size='small' style={{ width: 120 }} onClick={() => this.handleCancelSubscription(record.sId)}>{'Cancel'}</Button></div>)\r\n )}\r\n </div>;\r\n })\r\n }</div>)\r\n }\r\n }, {\r\n title: languageMessages['service.intro'],\r\n dataIndex: 'intro',\r\n //align: 'center',\r\n render: (intro, record) => {\r\n var items = intro.items && intro.items.map((item, index) => {\r\n return (<span key={index} style={{ display: 'block' }}>{item}</span>)\r\n })\r\n\r\n return <div>{items}</div>;\r\n }\r\n }\r\n ];\r\n\r\n if (this.user.username !== undefined) {\r\n columns.push({\r\n title: languageMessages['Expiration'],\r\n dataIndex: 'date',\r\n //align: 'center',\r\n width: 150,\r\n });\r\n columns.push({\r\n title: languageMessages['RemainingCredit'],\r\n dataIndex: 'status',\r\n width: 300,\r\n //align: 'center',\r\n render: (status, record) => {\r\n var items = status.map((item, index) => {\r\n return (<div key={index}>\r\n <span style={{ display: 'block' }}>{item.title}</span>\r\n {item.cont && item.cont.map((ii, i) => {\r\n return (<b key={i} style={{ display: 'block' }}>{ii}</b>)\r\n })}\r\n </div>);\r\n })\r\n\r\n return <div>{items}</div>;\r\n },\r\n });\r\n }\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['please.select.service.type']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMySubscription}>{'My subscription'}</Button>\r\n ]} />\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n <ul type=\"none\" style={{ margin: '10px 0 10px 10px' }}>\r\n <li style={{ padding: '5px 0' }}><b>Scan</b> - Scan through all symbols in a market and find symbols that match a set of custom criteria</li>\r\n <li style={{ padding: '5px 0' }}><b>Filter</b> - Monitor all symbols in a market constantly, send alert whenever any symbol meets a set of custom criteria</li>\r\n <li style={{ padding: '5px 0' }}><b>Monitor</b> - Monitor a single symbol constantly for specified criteria, send alert the moment condition is met, and/or trigger order to buy or sell</li>\r\n <li style={{ padding: '5px 0' }}><b>Strategy Explorer</b> - Backtest one symbol on many strategies, look for strategies with good performance for the symbol</li>\r\n <li style={{ padding: '5px 0' }}><b>Backtest/Optimization</b> - Backtest one strategy on any symbol group, from one stock to the entire market; Optimize strategy for better return and lower risk</li>\r\n </ul>\r\n <div className='common-payment-service'>\r\n <Table size='small' bordered\r\n rowClassName={record => {\r\n let className = '';\r\n if (record.sg === 'Add-on') className = 'common-table-tips ant-table-expanded-row';\r\n if (record.sg === 'title') className = 'common-table-hand ant-table-expanded-row';\r\n return className;\r\n }}\r\n columns={columns}\r\n dataSource={this.state.dataSource}\r\n loading={this.state.initLoadding}\r\n pagination={false} />\r\n </div>\r\n\r\n <ul type=\"none\" style={{ margin: '20px 0', border: '1px solid #e8e8e8', padding: '16px' }}>\r\n <li>Email: billing@quancept.com</li>\r\n </ul>\r\n </Layout>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.charge;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(SubscriptionPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\n\r\nimport {\r\n Form,\r\n Input,\r\n Row,\r\n Col,\r\n Button,\r\n AutoComplete,\r\n} from 'antd';\r\n\r\nfunction hasErrors(fieldsError) {\r\n return Object.keys(fieldsError).some(field => fieldsError[field]);\r\n}\r\n\r\nclass EmailForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n dataSource: [],\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.form.validateFields();\r\n }\r\n\r\n componentWillReceiveProps() {\r\n \r\n }\r\n\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Payment', 'Email', user.username]);\r\n\r\n this.props.form.validateFieldsAndScroll((err, values) => {\r\n if (!err) {\r\n this.props.dispatch({ type: \"action_check_email\", payload: { u: user.username, n: values.username, e: values.email, c: values.captcha } });\r\n }\r\n });\r\n }\r\n };\r\n\r\n sendCaptcha = e => {\r\n e.preventDefault();\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.form.validateFields(['email'], (err, values) => {\r\n if (!err) {\r\n this.props.dispatch({ type: \"action_email_captcha\", payload: { u: user.username, e: values.email } });\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleEmailChange = value => {\r\n this.setState({\r\n dataSource: !value || value.indexOf('@') >= 0 ? [] : [`${value}@gmail.com`, `${value}@163.com`, `${value}@qq.com`],\r\n }, () => {\r\n this.props.form.validateFields();\r\n });\r\n };\r\n\r\n handleChange = value => {\r\n this.props.form.validateFields();\r\n }\r\n\r\n render() {\r\n const { getFieldDecorator, getFieldsError, getFieldError, isFieldTouched } = this.props.form;\r\n\r\n const nameError = isFieldTouched('username') && getFieldError('username');\r\n const emailError = isFieldTouched('email') && getFieldError('email');\r\n const captchaError = isFieldTouched('captcha') && getFieldError('captcha');\r\n\r\n return (<Form onSubmit={this.handleSubmit} className='register-form' style={{ textAlign: 'left' }}>\r\n <Form.Item validateStatus={nameError ? 'error' : ''} help={emailError || ''}>\r\n {getFieldDecorator('username', {\r\n //initialValue: '',\r\n rules: [\r\n { required: true, message: 'Please input username' }\r\n ],\r\n })(<Input placeholder='Username' autoComplete={'off'} />)}\r\n </Form.Item>\r\n <Form.Item validateStatus={emailError ? 'error' : ''} help={emailError || ''}>\r\n {getFieldDecorator('email', {\r\n //initialValue: '',\r\n rules: [\r\n { type: 'email', message: 'The input is not valid E-mail', },\r\n { required: true, message: 'Please input E-mail' }\r\n ],\r\n })(\r\n <AutoComplete dataSource={this.state.dataSource}\r\n onChange={this.handleEmailChange}\r\n placeholder=\"Email address\"\r\n >\r\n <Input />\r\n </AutoComplete>,\r\n )}\r\n </Form.Item>\r\n <Form.Item validateStatus={captchaError ? 'error' : ''} help={captchaError || ''}>\r\n <Row gutter={8}>\r\n <Col span={12}>\r\n {getFieldDecorator('captcha', {\r\n rules: [{ required: true, message: 'Please input email confirmation code' }],\r\n })(<Input placeholder='Email confirmation code' onChange={this.handleChange} autoComplete={'off'} />)}\r\n </Col>\r\n <Col span={12}>\r\n <Button onClick={this.sendCaptcha} loading={this.props.status === 'email_captcha_commit'} disabled={this.props.status === 'email_captcha_commit'}>Send email confirmation code</Button>\r\n </Col>\r\n </Row>\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' htmlType=\"submit\" loading={this.props.status === 'check_email_commit'} disabled={this.props.status === 'check_email_commit' || hasErrors(getFieldsError())}>\r\n Confirm\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n );\r\n }\r\n}\r\n\r\nconst WrappedEmailForm = Form.create({ name: 'email' })(EmailForm);\r\nexport { WrappedEmailForm as default }","import React from 'react';\r\nimport { CardElement } from '@stripe/react-stripe-js';\r\n\r\nconst CARD_ELEMENT_OPTIONS = {\r\n style: {\r\n base: {\r\n color: \"#32325d\",\r\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\r\n fontSmoothing: \"antialiased\",\r\n fontSize: \"16px\",\r\n \"::placeholder\": {\r\n color: \"#aab7c4\",\r\n },\r\n },\r\n invalid: {\r\n color: \"#fa755a\",\r\n iconColor: \"#fa755a\",\r\n },\r\n },\r\n};\r\n\r\nfunction CardSection() {\r\n return (<fieldset className=\"card-content\" style={{ maxWidth: '600px' }}>\r\n <label>\r\n <span>Card</span>\r\n <div className=\"field\">\r\n <CardElement options={CARD_ELEMENT_OPTIONS} />\r\n </div>\r\n </label>\r\n </fieldset>);\r\n};\r\n \r\nexport default CardSection;","import React from 'react';\r\nimport { ElementsConsumer, CardElement } from '@stripe/react-stripe-js';\r\nimport { Layout, Table, Divider, Select, Button, message } from 'antd';\r\n\r\nimport CardSection from './CardSection';\r\n\r\nimport './../CardSectionStyles.css';\r\n\r\nconst { Content } = Layout;\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass PaymentForm extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n dataSource: [],\r\n\r\n months: 1,\r\n couponId: 0,\r\n\r\n amount: 0,\r\n currency: 'usd',\r\n \r\n email: '',\r\n\r\n hisSubscriptions: [],\r\n subscribed: [],\r\n\r\n\r\n payProcessing: false,\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { data, stripe } = props;\r\n\r\n switch (data.status) {\r\n case 'next_processing':\r\n let months = this.state.months;\r\n\r\n let hisSubscriptions = [];\r\n if (data.hisSubscription !== undefined) {\r\n for (let i in data.hisSubscription) {\r\n for (let j in data.hisSubscription[i]) {\r\n hisSubscriptions.push(data.hisSubscription[i][j].i);\r\n }\r\n }\r\n }\r\n\r\n let subscribed = [];\r\n let dataSource = [];\r\n let vService = data.vService !== undefined && data.vService !== null ? data.vService[0] : undefined;\r\n if (vService !== undefined) {\r\n for (let kk in data.vService) {\r\n let total = this.formatPrice(this.multiply(data.vService[kk].price, months));\r\n\r\n let Status = hisSubscriptions.filter(function(n){ return n === data.vService[kk].type });\r\n if (Status.length > 0) {\r\n subscribed.push(Status[0]);\r\n }\r\n\r\n dataSource.push({\r\n key: data.vService[kk].type,\r\n title: data.vService[kk].title,\r\n category: data.vService[kk].c,\r\n unitPrice: this.formatPrice(data.vService[kk].price),\r\n months: months,\r\n total: total,\r\n Status: Status,\r\n });\r\n }\r\n }\r\n\r\n let email = '';\r\n if (data.account !== undefined && data.account !== null) {\r\n email = data.account;\r\n }\r\n\r\n this.setState({ dataSource, email, hisSubscriptions, subscribed }, () => {\r\n this.changeAmount(months, this.state.couponId);\r\n });\r\n break;\r\n case 'create_subscription_success':\r\n let isSuccess = true;\r\n\r\n var paymentIntent = data.subscription.latest_invoice.payment_intent;\r\n \r\n if (paymentIntent !== null) {\r\n if (paymentIntent.status === 'requires_action') {\r\n stripe.confirmCardPayment(paymentIntent.client_secret, {\r\n payment_method: this.paymentMethodId,\r\n }).then((result) => {\r\n if (result.error) {\r\n // start code flow to handle updating the payment details Display error message in your UI.\r\n // The card was declined (i.e. insufficient funds, card has expired, etc)\r\n message.error(result.error);\r\n isSuccess = false;\r\n } else {\r\n if (result.paymentIntent.status === 'succeeded') {\r\n // There's a risk of the customer closing the window before callback\r\n // execution. To handle this case, set up a webhook endpoint and\r\n // listen to invoice.payment_succeeded. This webhook endpoint\r\n // returns an Invoice.\r\n\r\n //return { priceIds: priceIds, subscription: subscription, invoice: invoice, paymentMethodId: paymentMethodId, };\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (isSuccess && paymentIntent.status === 'requires_payment_method') {\r\n // Using localStorage to store the state of the retry here\r\n // (feel free to replace with what you prefer)\r\n // Store the latest invoice ID and status\r\n localStorage.setItem('latestInvoiceId', data.subscription.latest_invoice.id);\r\n localStorage.setItem('latestInvoicePaymentIntentStatus', data.subscription.latest_invoice.payment_intent.status);\r\n message.error('Your card was declined.');\r\n\r\n isSuccess = false;\r\n }\r\n \r\n }\r\n\r\n //success\r\n if (data.permission !== undefined && data.permission !== null) {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.permission !== undefined) {\r\n user.permission = data.permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(user));\r\n }\r\n }\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n\r\n this.setState({ payProcessing: false });\r\n break;\r\n case 'create_subscription_failed':\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n this.setState({ payProcessing: false });\r\n break;\r\n case 'retry_invoice_success':\r\n var paymentIntent = data.invoice.payment_intent;\r\n\r\n if (paymentIntent !== null) {\r\n if (paymentIntent.status === 'requires_action' || paymentIntent.status === 'requires_payment_method') {\r\n stripe.confirmCardPayment(paymentIntent.client_secret, {\r\n payment_method: this.paymentMethodId,\r\n }).then((result) => {\r\n if (result.error) {\r\n // start code flow to handle updating the payment details Display error message in your UI.\r\n // The card was declined (i.e. insufficient funds, card has expired, etc)\r\n message.error(result.error);\r\n } else {\r\n if (result.paymentIntent.status === 'succeeded') {\r\n // There's a risk of the customer closing the window before callback\r\n // execution. To handle this case, set up a webhook endpoint and\r\n // listen to invoice.payment_succeeded. This webhook endpoint\r\n // returns an Invoice.\r\n\r\n //return { priceIds: priceIds, subscription: subscription, invoice: invoice, paymentMethodId: paymentMethodId, };\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (data.invoice) {\r\n //const subscription = { id: data.invoice.subscription };\r\n localStorage.clear();\r\n }\r\n\r\n this.setState({ payProcessing: false });\r\n break;\r\n case 'retry_invoice_failed':\r\n if (data.coupons !== undefined && data.coupons !== null) {\r\n sessionStorage.setItem(\"CouponCache\", JSON.stringify(data.coupons));\r\n }\r\n this.setState({ payProcessing: false });\r\n break;\r\n }\r\n }\r\n\r\n retryInvoiceWithNewPaymentMethod = (paymentMethodId, invoiceId) => {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ payProcessing: false }, () => {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { amount, months, currency, couponId } = this.state;\r\n\r\n this.props.data.dispatch({\r\n type: \"action_retry_invoice\",\r\n payload: {\r\n pmi: paymentMethodId,\r\n a: this.multiply(amount, 100),\r\n c: currency,\r\n e: this.state.email,\r\n i: invoiceId,\r\n m: months,\r\n n: couponId,\r\n u: user.username,\r\n }\r\n });\r\n }\r\n }\r\n\r\n createSubscription = (paymentMethodId) => {\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ payProcessing: false }, () => {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { dataSource, amount, months, currency, couponId } = this.state;\r\n\r\n const product = [];\r\n for (let kk in dataSource) {\r\n product.push({ t: dataSource[kk].key });\r\n }\r\n\r\n this.props.data.dispatch({\r\n type: \"action_create_subscription\",\r\n payload: {\r\n pmi: paymentMethodId,\r\n a: this.multiply(amount, 100),\r\n c: currency,\r\n d: product,\r\n e: this.state.email,\r\n m: months,\r\n n: couponId,\r\n u: user.username,\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleSubmit = async (event) => {\r\n event.preventDefault();\r\n\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.data.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n const { stripe, elements } = this.props\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Payment', 'Payment', user.username]);\r\n\r\n if (!stripe || !elements) {\r\n // Stripe.js has not loaded yet. Make sure to disable\r\n // form submission until Stripe.js has loaded.\r\n return;\r\n }\r\n\r\n this.setState({ payProcessing: true }, async () => {\r\n // Use your card Element with other Stripe.js APIs\r\n const { error, paymentMethod } = await stripe.createPaymentMethod({\r\n type: 'card',\r\n card: elements.getElement(CardElement),\r\n });\r\n\r\n if (error) {\r\n message.error(`${error.message}`);\r\n this.setState({ payProcessing: false });\r\n return;\r\n }\r\n\r\n this.paymentMethodId = paymentMethod.id;\r\n // If a previous payment was attempted, get the lastest invoice\r\n const latestInvoicePaymentIntentStatus = localStorage.getItem('latestInvoicePaymentIntentStatus');\r\n if (latestInvoicePaymentIntentStatus === 'requires_payment_method') {\r\n // Update the payment method and retry invoice payment\r\n const invoiceId = localStorage.getItem('latestInvoiceId');\r\n this.retryInvoiceWithNewPaymentMethod(this.paymentMethodId, invoiceId);\r\n return;\r\n }\r\n\r\n // Create the subscription\r\n this.createSubscription(this.paymentMethodId);\r\n });\r\n }\r\n };\r\n\r\n add = (a, b) => {\r\n var r1, r2, m;\r\n try { r1 = a.toString().split(\".\")[1].length } catch (e) { r1 = 0 }\r\n try { r2 = b.toString().split(\".\")[1].length } catch (e) { r2 = 0 }\r\n m = Math.pow(10, Math.max(r1, r2));\r\n return (a * m + b * m) / m;\r\n }\r\n\r\n multiply = (a, b) => {\r\n let m = 0, c = a.toString(), d = b.toString();\r\n\r\n try {\r\n m += c.split(\".\")[1].length\r\n } catch (e) { }\r\n\r\n try {\r\n m += d.split(\".\")[1].length\r\n } catch (e) { }\r\n return Number(c.replace(\".\", \"\")) * Number(d.replace(\".\", \"\")) / Math.pow(10, m);\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n\r\n //é€‰æ‹©å¥—é¤ æŠ˜æ‰£å’Œä¼˜æƒ \r\n onSelectMon = months => {\r\n this.setState({ months }, () => {\r\n this.changeAmount(months, this.state.couponId);\r\n });\r\n }\r\n\r\n //é€‰æ‹©ä¼˜æƒ åˆ¸\r\n onSelectCoupon = couponId => {\r\n this.changeAmount(this.state.months, couponId);\r\n }\r\n\r\n getMonthsByAmount(type, months) {\r\n let amount = 0;\r\n\r\n let vService = this.props.data.vService.filter(function (item) { return item.type === type });\r\n if (vService.length > 0) {\r\n let price = vService[0].price;\r\n\r\n let discounts = vService[0].discount.split('|');\r\n\r\n //TODO:\r\n var discount = discounts[0].split(';');\r\n amount = this.getOrderTotalPrice(discount, months);\r\n\r\n if (amount === 0) amount = this.multiply(price, months);\r\n }\r\n\r\n return amount;\r\n }\r\n\r\n changeAmount(months, couponId) {\r\n let { dataSource } = this.state;\r\n \r\n let amount = 0;\r\n for (let kk in dataSource) {\r\n let type = dataSource[kk].key;\r\n\r\n let total = this.getMonthsByAmount(type, months);\r\n\r\n if (couponId > 0) {\r\n var couponSource = [];\r\n var coupons = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupons.dataSource !== undefined) {\r\n couponSource = coupons.dataSource;\r\n }\r\n\r\n var coupon = couponSource.filter((e) => { return e.id === couponId && e.type === type });\r\n if (coupon.length > 0) total = this.multiply(total, coupon[0].discount);\r\n }\r\n\r\n amount = this.add(amount, total);\r\n\r\n dataSource[kk].months = months;\r\n dataSource[kk].total = this.formatPrice(total);\r\n }\r\n \r\n this.setState({ amount, dataSource, couponId });\r\n }\r\n\r\n getOrderTotalPrice(discount, months) {\r\n var total = 0;\r\n if (discount.length > 0) {\r\n for (var kk in discount) {\r\n var d = discount[kk].split(',');\r\n if (d.length > 0) {\r\n if (d[0].toString() === months.toString()) {\r\n total = parseFloat(d[1]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return total;\r\n }\r\n\r\n onClickClose = e => {\r\n let tags = e.currentTarget.getAttribute('data-value');\r\n let type = parseInt(tags);\r\n\r\n let { dataSource, subscribed } = this.state;\r\n if (dataSource.length > 0) {\r\n dataSource = dataSource.filter(function (item) { return item.key !== type });\r\n subscribed = subscribed.filter(function (n) { return n !== type });\r\n this.setState({ dataSource, subscribed }, () => {\r\n this.changeAmount(this.state.months, this.state.couponId);\r\n });\r\n }\r\n }\r\n\r\n SetCoupon() {\r\n var couponSource = [];\r\n var coupon = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupon.dataSource !== undefined) {\r\n couponSource = coupon.dataSource;\r\n }\r\n //var coupons = couponSource.filter((n) => n.type === type || n.type === 0);\r\n return (<Select size='small' value={this.state.couponId} style={{ width: 180 }}\r\n onSelect={this.onSelectCoupon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n {couponSource.map(item => {\r\n return (<Option key={item.id} value={item.id}>{item.name}</Option>)\r\n })}\r\n {couponSource.length > 0 ? (<Option key='0' value={0}>{languageMessages['do.not.use']}</Option>) : (<Option key='0' value={0}>{languageMessages['no.available']}</Option>)}\r\n </Select>);\r\n }\r\n\r\n renderProduct() {\r\n const columns = [\r\n {\r\n title: 'Title',\r\n dataIndex: 'title',\r\n key: 'title',\r\n }, {\r\n title: 'Category',\r\n dataIndex: 'category',\r\n key: 'category',\r\n }, {\r\n title: 'Unit price',\r\n dataIndex: 'unitPrice',\r\n key: 'unitPrice',\r\n align: 'right',\r\n render: (text, record) => (\r\n <b>{record.unitPrice}</b>\r\n ),\r\n }, {\r\n title: 'Months',\r\n key: 'months',\r\n dataIndex: 'months',\r\n align: 'right',\r\n }, {\r\n title: 'Total',\r\n key: 'total',\r\n dataIndex: 'total',\r\n align: 'right',\r\n render: (text, record) => (\r\n <b>{record.total}</b>\r\n ),\r\n }\r\n /**, {\r\n title: 'Status',\r\n key: 'Status',\r\n dataIndex: 'Status',\r\n render: Status => (\r\n <span>{\r\n Status.length > 0 ? <span className='common-red'>{'Subscribed'}</span> : <span className='common-green'>{'Not subscribed'}</span>\r\n }\r\n </span>\r\n ),\r\n }*/\r\n ];\r\n\r\n return <Table size='small' bordered columns={columns} dataSource={this.state.dataSource} pagination={false} />;\r\n }\r\n\r\n renderBillInfo() {\r\n return <fieldset className=\"with-state\" style={{ maxWidth: '600px' }}>\r\n <label>\r\n <span>{languageMessages['coupon']}</span>\r\n <div className=\"field\">{this.SetCoupon()}</div>\r\n </label>\r\n <label>\r\n <span>Email</span>\r\n <input name=\"email\" value={this.state.email} type=\"email\" className=\"field\" placeholder=\"Email address\" readOnly />\r\n </label>\r\n </fieldset>\r\n }\r\n\r\n render() {\r\n let disabled = !this.props.stripe || this.state.payProcessing || this.state.subscribed.length > 0 || this.state.dataSource.length <= 0;\r\n\r\n return (<Content className='card-section'>\r\n <div className='common-title'><Divider type=\"vertical\" />{'Billing information'}</div>\r\n {this.renderProduct()}\r\n\r\n {this.renderBillInfo()}\r\n <div className='common-title'><Divider type=\"vertical\" />{'Payment information'}</div>\r\n <CardSection />\r\n <div className='common-total'>{languageMessages['subtotal']}: {this.formatPrice(this.state.amount)}</div>\r\n <Button className=\"ant-btn ant-btn-sm pay-btn\" disabled={disabled} onClick={this.handleSubmit} loading={this.state.payProcessing}>\r\n {'Buy'}\r\n </Button>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport default function InjectedCheckoutForm(data) {\r\n return (\r\n <ElementsConsumer>\r\n {({ stripe, elements }) => (\r\n <PaymentForm stripe={stripe} elements={elements} data={data} />\r\n )}\r\n </ElementsConsumer>\r\n );\r\n}","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Elements } from '@stripe/react-stripe-js';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, Steps, Result, Select, Card, Divider, message, Button, Icon, Spin } from 'antd';\r\nimport WrappedEmailForm from './subscription/EmailForm';\r\n\r\nimport PaymentForm from './subscription/PaymentForm';\r\nimport emitter from '../Evt.js';\r\n\r\nimport './CardSectionStyles.css';\r\n\r\nconst { Content } = Layout;\r\nconst { Step } = Steps;\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass BillingPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.stripePromise = loadStripe(process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY, { locale: window.webType === 'US' ? 'en' : 'auto' });\r\n\r\n this.state = {\r\n spinLoadding: true,\r\n \r\n currency: 'usd',\r\n\r\n account: '',\r\n accountOptions: [],\r\n\r\n stepStatus: 'wait', //wait process finish error\r\n stepIndex: 1,\r\n\r\n dataSource: [],\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n \r\n if (history.location.state !== undefined) {\r\n let subscriptions = history.location.state.subscriptions;\r\n this.props.dispatch({ type: \"action_get_stripe_key\", payload: { u: this.user.username, t: subscriptions } });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n \r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, stepStatus, stepIndex, customers } = props;\r\n\r\n switch (status) {\r\n case 'stripe_success':\r\n var account = '';\r\n var accountOptions = [];\r\n customers = customers !== undefined && customers !== null ? customers : [];\r\n if (customers.length > 0) {\r\n account = customers[0];\r\n\r\n accountOptions = customers.map(d => <Option key={d}>{d}</Option>);\r\n }\r\n\r\n this.setState({ account, accountOptions, spinLoadding: false });\r\n break;\r\n case 'stripe_failed':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'create_subscription_success':\r\n this.setState({ stepStatus: 'finish', stepIndex: 3 });\r\n break;\r\n case 'create_subscription_failed':\r\n this.setState({ stepStatus: 'error', stepIndex: 3 });\r\n break;\r\n case 'retry_invoice_success':\r\n this.setState({ stepStatus: 'finish', stepIndex: 3 });\r\n break;\r\n case 'retry_invoice_failed':\r\n this.setState({ stepStatus: 'error', stepIndex: 3 });\r\n break;\r\n case 'pay_processing':\r\n this.setState({ stepStatus, stepIndex });\r\n break;\r\n case 'next_processing':\r\n this.setState({ stepStatus, stepIndex });\r\n break;\r\n case 'email_captcha_success':\r\n message.success(\"email captcha get success\");\r\n break;\r\n case 'email_captcha_failed':\r\n message.error(\"email captcha get failed\");\r\n break;\r\n case 'check_email_success':\r\n let { account, accountOptions } = this.state;\r\n\r\n customers = customers !== undefined && customers !== null ? customers : [];\r\n if (customers.length > 0) {\r\n account = customers[customers.length - 1];\r\n\r\n accountOptions = customers.map(d => <Option key={d}>{d}</Option>);\r\n }\r\n\r\n this.setState({ account, accountOptions });\r\n break;\r\n case 'check_email_failed':\r\n message.error(\"check email failed\");\r\n break;\r\n }\r\n }\r\n\r\n add = (a, b) => {\r\n var r1, r2, m;\r\n try { r1 = a.toString().split(\".\")[1].length } catch (e) { r1 = 0 }\r\n try { r2 = b.toString().split(\".\")[1].length } catch (e) { r2 = 0 }\r\n m = Math.pow(10, Math.max(r1, r2));\r\n return (a * m + b * m) / m;\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n\r\n handleBackHome = () => {\r\n history.replace(\"/\");\r\n }\r\n\r\n handleResubscribe = () => {\r\n this.setState({ stepStatus: 'wait', stepIndex: 1, spinLoadding: true }, () => {\r\n this.init();\r\n });\r\n }\r\n\r\n handleChange = value => {\r\n this.setState({\r\n dataSource: !value || value.indexOf('@') >= 0 ? [] : [`${value}@gmail.com`, `${value}@163.com`, `${value}@qq.com`],\r\n });\r\n };\r\n\r\n handleChangeAccount = value => {\r\n this.setState({ account: value });\r\n }\r\n\r\n addAccount = () => {\r\n this.setState({ account: '' });\r\n }\r\n\r\n handleNext = () => {\r\n if (this.state.account !== '')\r\n this.props.dispatch({ type: \"action_next_processing\", payload: { stepStatus: 'wait', stepIndex: 2 } });\r\n }\r\n\r\n renderSuccess() {\r\n let total = 0;\r\n let subsriptionNo = '';\r\n let html = [];\r\n if (this.props.detailed !== undefined && this.props.detailed !== null) {\r\n let detailed = this.props.detailed;\r\n\r\n subsriptionNo = detailed['no'];\r\n\r\n let items = detailed['item'];\r\n for (let kk in items) {\r\n let amount = this.formatPrice(items[kk].n);\r\n html.push(<fieldset key={items[kk].i} className=\"with-state\">\r\n <label>\r\n <span>{'Service'}</span>\r\n <div className=\"field\">{items[kk].c + \" \" + items[kk].t}</div>\r\n </label>\r\n <label>\r\n <span>{'Amount'}</span>\r\n <div className=\"field\"><span>{amount}</span></div>\r\n </label>\r\n </fieldset>);\r\n \r\n total = this.add(total, items[kk].n);\r\n }\r\n }\r\n\r\n total = this.formatPrice(total);\r\n \r\n let status = 'error';\r\n let subject = 'Service subscription failed';\r\n let btn = [<Button size=\"large\" key=\"resubscribe\" onClick={this.handleResubscribe}>Back</Button>];\r\n let describe = [];\r\n if (this.props.status === 'create_subscription_success') {\r\n status = 'success';\r\n subject = 'Thank you for your subscription';\r\n btn = [<Button size=\"large\" key=\"resubscribe\" onClick={this.handleBackHome}>Go home</Button>];\r\n\r\n describe = [<div><span className='result-title'>{'Subsription #:' + subsriptionNo}</span></div>]\r\n }\r\n\r\n return (<div className=\"common-payment-success\">\r\n <Result status={status} title={subject} subTitle=\"\" extra={btn}>\r\n <div className=\"common-payment-cont card-section\">\r\n {describe}\r\n {html}\r\n </div>\r\n </Result>\r\n </div>);\r\n };\r\n\r\n renderForm() {\r\n if (this.state.stepIndex === 1) {\r\n let { account, accountOptions } = this.state;\r\n \r\n if (account !== '') {\r\n return <Layout className='common-main-content'>\r\n <Card title=\"My account\" bordered={false} className='common-card-container'>\r\n <div>\r\n <Select defaultValue={account}\r\n style={{ width: 450 }}\r\n placeholder=\"Select account\"\r\n onChange={this.handleChangeAccount}\r\n dropdownRender={menu => (\r\n <div>\r\n {menu}\r\n <Divider style={{ margin: '4px 0' }} />\r\n <div\r\n style={{ padding: '4px 8px', cursor: 'pointer' }}\r\n onMouseDown={e => e.preventDefault()}\r\n onClick={this.addAccount}\r\n >\r\n <Icon type=\"plus\" /> Add account\r\n </div>\r\n </div>\r\n )}\r\n >\r\n {accountOptions}\r\n </Select>\r\n <Button icon=\"plus\" size='small' onClick={this.addAccount} style={{ margin: '0 10px', height: 30, width: 36 }} />\r\n </div>\r\n <div style={{ margin: '20px 0' }}>\r\n <Button type=\"primary\" className=\"ant-btn-sm pay-btn\" onClick={this.handleNext}> Next </Button>\r\n </div>\r\n </Card>\r\n </Layout>\r\n } else {\r\n return <Layout className='common-main-content'>\r\n <Card title=\"My account\" bordered={false} className='common-card-container'>\r\n <WrappedEmailForm {...this.props} />\r\n </Card>\r\n </Layout>\r\n }\r\n } else if (this.state.stepIndex === 2){\r\n return <Layout className='common-main-content'>\r\n <Elements stripe={this.stripePromise}>\r\n <PaymentForm {...this.props} account={this.state.account} />\r\n </Elements>\r\n </Layout>\r\n }\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container'>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <Steps current={this.state.stepIndex} status={this.state.stepStatus}>\r\n <Step title=\"Account information\" />\r\n <Step title=\"Billing information\" />\r\n <Step title=\"Payment and confirmation\" />\r\n <Step title=\"Finished\" />\r\n </Steps>\r\n </div>\r\n {this.state.stepIndex === 3 ? this.renderSuccess() : this.renderForm()}\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.charge;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BillingPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Descriptions, Table, Select, Button, Divider, Spin, Menu, Icon, Dropdown, message } from 'antd';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst { Option } = Select;\r\n\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass UpdatePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n spinLoadding: true,\r\n\r\n dataSource: [],\r\n\r\n currency: 'usd',\r\n\r\n months: 0,\r\n amount: 0,\r\n couponId: 0,\r\n\r\n subscriptService: '',\r\n\r\n hisSubscriptions: [],\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n if (history.location.state !== undefined) {\r\n let subscriptions = history.location.state.subscriptions;\r\n \r\n this.props.dispatch({ type: \"action_subscription\", payload: { u: user.username, i: subscriptions } });\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n \r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, subscription, vService, hisSubscription } = props;\r\n\r\n switch (status) {\r\n case 'subscription_success':\r\n vService = vService === undefined || vService === null ? [] : vService;\r\n let data = vService.filter((n) => { return n.type > 0 });\r\n let subscriptService = <Menu onClick={this.appendSubscriptionService}>\r\n {\r\n Object.keys(data).map((index) => {\r\n let items = data[index];\r\n return <Menu.Item key={items.type}><Icon type=\"tag\" />{items.title}</Menu.Item>\r\n })\r\n }\r\n </Menu>;\r\n\r\n let months = 12;\r\n let amount = 0;\r\n let couponId = 0;\r\n\r\n let dataSource = [];\r\n if (subscription !== undefined) {\r\n months = subscription.months;\r\n amount = subscription.amount;\r\n couponId = subscription.couponId;\r\n \r\n if (subscription.intro !== undefined) {\r\n let intro = JSON.parse(subscription.intro);\r\n let item = intro.item;\r\n for (let i in item) {\r\n let data = vService.filter((n) => { return n.type === item[i].i });\r\n if (data.length > 0) {\r\n let total = this.formatPrice(this.multiply(data[0].price, months));\r\n\r\n dataSource.push({\r\n key: item[i].i,\r\n title: item[i].t,\r\n unitPrice: this.formatPrice(data[0].price),\r\n specialOffer: data[0].specialPrice === 0 ? '' : this.formatPrice(data[0].specialPrice),\r\n months: months,\r\n total: total,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n let hisSubscriptions = [];\r\n if (hisSubscription !== undefined) {\r\n for (let i in hisSubscription) {\r\n for (let j in hisSubscription[i]) {\r\n hisSubscriptions.push(hisSubscription[i][j].i);\r\n }\r\n }\r\n }\r\n\r\n this.setState({ dataSource, months, amount, subscriptService, couponId, hisSubscriptions, spinLoadding: false });\r\n break;\r\n case 'subscription_failed':\r\n var error = 'Get subscription failed';\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'update_subscription_success':\r\n message.success('update subscription success');\r\n break;\r\n case 'update_subscription_failed':\r\n message.error('update subscription failed');\r\n break;\r\n }\r\n }\r\n\r\n add = (a, b) => {\r\n var r1, r2, m;\r\n try { r1 = a.toString().split(\".\")[1].length } catch (e) { r1 = 0 }\r\n try { r2 = b.toString().split(\".\")[1].length } catch (e) { r2 = 0 }\r\n m = Math.pow(10, Math.max(r1, r2));\r\n return (a * m + b * m) / m;\r\n }\r\n\r\n multiply = (a, b) => {\r\n let m = 0, c = a.toString(), d = b.toString();\r\n\r\n try {\r\n m += c.split(\".\")[1].length\r\n } catch (e) { }\r\n\r\n try {\r\n m += d.split(\".\")[1].length\r\n } catch (e) { }\r\n return Number(c.replace(\".\", \"\")) * Number(d.replace(\".\", \"\")) / Math.pow(10, m);\r\n }\r\n\r\n formatPrice(amount) {\r\n let price = amount;//(amount / 100).toFixed(2);\r\n let numberFormat = new Intl.NumberFormat(['en-US'], {\r\n style: 'currency',\r\n currency: this.state.currency,\r\n currencyDisplay: 'symbol',\r\n });\r\n return numberFormat.format(price);\r\n }\r\n\r\n appendSubscriptionService = (e) => {\r\n let { dataSource, months, hisSubscriptions } = this.state;\r\n\r\n let id = parseInt(e.key);\r\n let tmp = hisSubscriptions.filter((n) => { return n === id });\r\n if (tmp.length > 0) {\r\n message.info('This service is already subscribed');\r\n } else {\r\n let data = this.props.vService.filter((n) => { return n.type === id });\r\n if (data.length > 0) {\r\n let total = this.multiply(data[0].price, months);\r\n\r\n dataSource.push({\r\n key: data[0].type,\r\n title: data[0].title,\r\n unitPrice: this.formatPrice(data[0].price),\r\n specialOffer: data[0].specialPrice === 0 ? '' : this.formatPrice(data[0].specialPrice),\r\n months: months,\r\n total: this.formatPrice(total)\r\n });\r\n\r\n hisSubscriptions.push(data[0].type);\r\n\r\n this.setState({ dataSource, hisSubscriptions }, () => {\r\n this.changeAmount(months, this.state.couponId);\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleUpdateSubscription = () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { dataSource, amount, months, currency, couponId } = this.state;\r\n\r\n const product = [];\r\n for (let kk in dataSource) {\r\n product.push({ t: dataSource[kk].key });\r\n }\r\n\r\n this.props.dispatch({\r\n type: \"action_update_subscription\",\r\n payload: {\r\n i: this.props.subscription.id,\r\n a: this.multiply(amount, 100),\r\n c: currency,\r\n d: product,\r\n m: months,\r\n n: couponId,\r\n u: user.username,\r\n }\r\n });\r\n }\r\n }\r\n\r\n onSelectMon = (months) => {\r\n this.setState({ months }, () => {\r\n this.changeAmount(months, this.state.couponId);\r\n });\r\n }\r\n\r\n onSelectCoupon = couponId => {\r\n this.changeAmount(this.state.months, couponId);\r\n }\r\n\r\n onClickClose = e => {\r\n let tags = e.currentTarget.getAttribute('data-value');\r\n let type = parseInt(tags);\r\n\r\n let { dataSource, hisSubscriptions } = this.state;\r\n\r\n if (dataSource.length > 0) {\r\n dataSource = dataSource.filter(function (item) { return item.key !== type });\r\n hisSubscriptions = hisSubscriptions.filter(function (item) { return item !== type });\r\n this.setState({ dataSource, hisSubscriptions }, () => {\r\n this.changeAmount(this.state.months, this.state.couponId);\r\n });\r\n }\r\n }\r\n\r\n getOrderTotalPrice(discount, months) {\r\n var total = 0;\r\n if (discount.length > 0) {\r\n for (var kk in discount) {\r\n var d = discount[kk].split(',');\r\n if (d.length > 0) {\r\n if (d[0].toString() === months.toString()) {\r\n total = parseFloat(d[1]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return total;\r\n }\r\n\r\n getMonthsByAmount(type, months) {\r\n let amount = 0;\r\n\r\n let vService = this.props.vService.filter(function (item) { return item.type === type });\r\n if (vService.length > 0) {\r\n let price = vService[0].price;\r\n let specialPrice = vService[0].specialPrice;\r\n\r\n let discounts = vService[0].discount.split('|');\r\n\r\n //TODO:\r\n var discount = discounts[0].split(';');\r\n amount = this.getOrderTotalPrice(discount, months);\r\n\r\n if (amount === 0) amount = this.multiply(price, months);\r\n }\r\n\r\n return amount;\r\n }\r\n\r\n changeAmount(months, couponId) {\r\n let { dataSource } = this.state;\r\n\r\n let amount = 0;\r\n for (let kk in dataSource) {\r\n let type = dataSource[kk].key;\r\n\r\n let total = this.getMonthsByAmount(type, months);\r\n\r\n if (couponId > 0) {\r\n var couponSource = [];\r\n var coupons = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupons.dataSource !== undefined) {\r\n couponSource = coupons.dataSource;\r\n }\r\n\r\n var coupon = couponSource.filter((e) => { return e.id === couponId && e.type === type });\r\n if (coupon.length > 0) total = this.multiply(total, coupon[0].discount);\r\n }\r\n\r\n amount = this.add(amount, total);\r\n\r\n dataSource[kk].months = months;\r\n dataSource[kk].total = this.formatPrice(total);\r\n }\r\n\r\n this.setState({ amount, dataSource, couponId });\r\n }\r\n\r\n SetCoupon() {\r\n var couponSource = [];\r\n var coupon = JSON.parse(sessionStorage.getItem(\"CouponCache\") || '{}') || {};\r\n if (coupon.dataSource !== undefined) {\r\n couponSource = coupon.dataSource;\r\n }\r\n //let type = 0;\r\n //var coupons = couponSource.filter((n) => n.type === type || n.type === 0);\r\n return (<Select size='small' value={this.state.couponId} style={{ width: 180, marginLeft: 10 }}\r\n onSelect={this.onSelectCoupon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n {couponSource.map(item => {\r\n return (<Option key={item.id} value={item.id}>{item.name}</Option>)\r\n })}\r\n {couponSource.length > 0 ? (<Option key='0' value={0}>{languageMessages['do.not.use']}</Option>) : (<Option key='0' value={0}>{languageMessages['no.available']}</Option>)}\r\n </Select>);\r\n }\r\n\r\n renderMonths() {\r\n return <Select size='small' value={this.state.months} style={{ width: 180, marginLeft: 10 }}\r\n onSelect={this.onSelectMon}\r\n dropdownStyle={{ zIndex: '1' }}>\r\n <Option value={1}>1</Option>\r\n <Option value={2}>2</Option>\r\n <Option value={3}>3</Option>\r\n <Option value={4}>4</Option>\r\n <Option value={5}>5</Option>\r\n <Option value={6}>6</Option>\r\n <Option value={7}>7</Option>\r\n <Option value={8}>8</Option>\r\n <Option value={9}>9</Option>\r\n <Option value={10}>10</Option>\r\n <Option value={11}>11</Option>\r\n <Option value={12}>{languageMessages['1year.discount']}</Option>\r\n {\r\n // <Option value={24}>{languageMessages['2year.discount']}</Option>\r\n }\r\n </Select>\r\n }\r\n\r\n renderSubscription(subscription) {\r\n if (subscription === undefined) return '';\r\n else return <Descriptions title=\"\" bordered>\r\n <Descriptions.Item label=\"Subscription no.\">{subscription.subscriptionNo}</Descriptions.Item>\r\n <Descriptions.Item label=\"Amount\" span={2}>\r\n <span className='common-sub-total'>{this.formatPrice(this.state.amount)}</span>\r\n </Descriptions.Item>\r\n <Descriptions.Item label=\"Created\" span={3}>{subscription.created}</Descriptions.Item>\r\n </Descriptions>\r\n }\r\n\r\n renderProduct() {\r\n const columns = [\r\n {\r\n title: '',\r\n key: 'Delete',\r\n width: 50,\r\n align: 'center',\r\n render: (text, record) => (\r\n <span>\r\n <Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value={record.key} />\r\n </span>\r\n ),\r\n }, {\r\n title: 'Title',\r\n dataIndex: 'title',\r\n key: 'title',\r\n }, {\r\n title: 'Unit price',\r\n dataIndex: 'unitPrice',\r\n key: 'unitPrice',\r\n align: 'right',\r\n render: (text, record) => (\r\n <b>{record.unitPrice}</b>\r\n ),\r\n }, {\r\n title: 'Months',\r\n key: 'months',\r\n dataIndex: 'months',\r\n align: 'right',\r\n }, {\r\n title: 'Total',\r\n key: 'total',\r\n dataIndex: 'total',\r\n align: 'right',\r\n render: (text, record) => (\r\n <b>{record.total}</b>\r\n ),\r\n },\r\n ];\r\n\r\n return <Table size='small' bordered columns={columns} dataSource={this.state.dataSource} pagination={false} />;\r\n }\r\n\r\n render() {\r\n let { subscription } = this.props;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={'Update subscript'} />\r\n </div>\r\n <Content style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{'Subscription information'}</div>\r\n {this.renderSubscription(subscription)}\r\n <div className='common-title'><Divider type=\"vertical\" />{'Service information'}\r\n <span style={{ float: 'right', marginTop: '-5px' }}><Dropdown overlay={this.state.subscriptService}>\r\n <Button icon=\"plus\"> Append subscript service </Button>\r\n </Dropdown>\r\n </span>\r\n </div>\r\n {this.renderProduct()}\r\n <div className='common-selected-coupon'>\r\n <span>Select months</span> {this.renderMonths()}\r\n </div>\r\n <div className='common-selected-coupon'>\r\n <span>Select coupon</span> {this.SetCoupon()}\r\n </div>\r\n <div className='common-total'>{languageMessages['subtotal']}: {this.formatPrice(this.state.amount)}</div>\r\n <Button className=\"ant-btn ant-btn-sm pay-btn\" onClick={this.handleUpdateSubscription} loading={this.props.status === 'subscription_processing_commit'} disabled={this.props.status === 'subscription_processing_commit'}>\r\n {'Update subscription'}\r\n </Button>\r\n </Content>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.charge;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(UpdatePage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport history from '../../../helpers/history';\r\nimport { Form, Input, Select, Checkbox, AutoComplete, DatePicker, Radio, Icon } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport emitter from '../../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar format = 'YYYY-MM-DD HH:mm';\r\nfunction range(start, end) {\r\n const result = [];\r\n for (var i = start; i < end; i++) {\r\n result.push(i);\r\n }\r\n return result;\r\n}\r\n\r\nconst closeShort = 'Close Short';\r\nconst closeLong = 'Close Long';\r\n\r\nconst closeTime = { 'CN': '15:00', 'US': '16:00' };\r\nclass BaseInfo extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n symbolStatus: '',\r\n symbolMessage: '',\r\n\r\n direction: closeShort,\r\n\r\n tradeQuantity: 1000,\r\n\r\n tradeQuantityStatus: '',\r\n tradeQuantityMessage: '',\r\n\r\n startDate: moment().format(format),\r\n endDate: moment().format('YYYY-MM-DD') + ' ' + closeTime[window.webType],\r\n nextDate: '',\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n endOpen: false,\r\n\r\n isVip: false,\r\n customEffectiveTime: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('submitHawkeye', this.submitHawkeye);\r\n }\r\n\r\n componentWillMount() {\r\n //this.init();\r\n }\r\n\r\n init = () => {\r\n /**\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() > oDate2.getTime()) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = '开始日期ä¸èƒ½å¤§äºŽç»“æŸæ—¥æœŸ';\r\n }\r\n */\r\n }\r\n\r\n submitHawkeye = (lastTimes, permission) => {\r\n if (lastTimes !== undefined && permission !== undefined) {\r\n\r\n var endDate = moment().format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n if (this.state.nextDate !== '') {\r\n endDate = moment(this.state.nextDate).format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n }\r\n\r\n //submit success\r\n this.setState({\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n direction: closeShort,\r\n tradeQuantity: 1000,\r\n startDate: moment().format('YYYY-MM-DD HH:mm'),\r\n endDate: endDate,\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('submitHawkeye', this.submitHawkeye);\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, nextDate, symbolItems } = props;\r\n\r\n switch (status) {\r\n case 'get_hawkeye_info_success':\r\n if (nextDate !== undefined) {\r\n var endDate = moment(nextDate).format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() > oDate2.getTime()) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n \r\n this.setState({ endDate, nextDate, tradeDateStatus, tradeDateMessage });\r\n }\r\n break;\r\n case 'get_symbol_items_success':\r\n var symbolItems = symbolItems;\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n setBaseInfo() {\r\n this.props.hawkeyeBaseInfo({\r\n symbolCode: this.state.symbolCode,\r\n symbolName: this.state.symbolName,\r\n direction: this.state.direction,\r\n tradeQuantity: this.state.tradeQuantityStatus === 'error' ? '' : this.state.tradeQuantity,\r\n startDate: this.state.startDate,\r\n endDate: this.state.tradeDateStatus === 'error' ? '' : this.state.endDate,\r\n latestPrice: this.state.latestPrice,\r\n quoteChange: this.state.quoteChange,\r\n });\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n\r\n /**\r\n if (symbolCode !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === symbolCode.toLowerCase(); });\r\n \r\n if (tmpDataCode.length > 0) {\r\n console.log('tmpDataCode', tmpDataCode);\r\n symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].stockName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n }\r\n */\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n \r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange }, () => {\r\n this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange }, () => {\r\n this.setBaseInfo();\r\n });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0\r\n }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0\r\n }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n // 选择方å‘[买,å–]\r\n onChangeDirection = (e) => {\r\n var direction = e.target.value;\r\n\r\n this.setState({ direction }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n\r\n // 交易数é‡\r\n onChangeTradeQuantity = (e) => {\r\n var tradeQuantity = e.target.value;\r\n var tradeQuantityStatus = '';\r\n var tradeQuantityMessage = '';\r\n if (tradeQuantity !== '') {\r\n //åˆ¤æ–æ˜¯å¦ä¸ºæ•´æ•°\r\n var pattern = /^\\+?[1-9][0-9]*$/;\r\n if (!pattern.test(tradeQuantity)) {\r\n tradeQuantityStatus = 'error';\r\n tradeQuantityMessage = languageMessages['tradeQuantityFormatFail'];\r\n } else {\r\n if (tradeQuantity.length > 12) {\r\n tradeQuantityStatus = 'error';\r\n tradeQuantityMessage = languageMessages['tradeQuantityLengthFail'];\r\n }\r\n }\r\n } else {\r\n tradeQuantityStatus = 'error';\r\n tradeQuantityMessage = languageMessages['tradeQuantityNotEmpty'];\r\n }\r\n this.setState({ tradeQuantity, tradeQuantityStatus, tradeQuantityMessage }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(format);\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n this.setState({ startDate }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n\r\n startDisabledDate = current => {\r\n return current && (current < moment().startOf('day') || current >= moment().add(1, 'months'));\r\n }\r\n\r\n startDisabledTime = current => {\r\n var hours = 0;\r\n var minutes = 0;\r\n\r\n if (current && current > moment().startOf('day') && current < moment().endOf('day')) {\r\n var mm = moment().add(5, 'minutes');\r\n hours = mm.hour();\r\n var startHour = moment(current).hour();\r\n if (hours >= startHour) {\r\n minutes = mm.minute();\r\n }\r\n }\r\n\r\n return {\r\n disabledHours: () => range(0, hours),\r\n disabledMinutes: () => range(0, minutes),\r\n };\r\n }\r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(format);\r\n\r\n //判æ–大于开始时间\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n \r\n this.setState({ endDate }, () => {\r\n this.setBaseInfo();\r\n });\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n\r\n return current && (current < moment(startDate) || current >= moment().add(1, 'months'));\r\n }\r\n\r\n endDisabledTime = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n\r\n var hours = 0;\r\n var minutes = 0;\r\n if (current && moment(current).format('YYYY-MM-DD') === moment(startDate).format('YYYY-MM-DD')) {\r\n hours = moment(startDate).hour();\r\n var endHour = moment(current).hour();\r\n\r\n if (hours > endHour) {\r\n minutes = 60;\r\n } else if (hours === endHour) {\r\n minutes = moment(startDate).add(5, 'minutes').minute();\r\n }\r\n } else if (moment(current) < moment(startDate)) {\r\n hours = 24;\r\n minutes = 60;\r\n }\r\n\r\n return {\r\n disabledHours: () => range(0, hours),\r\n disabledMinutes: () => range(0, minutes),\r\n };\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n if (oDate1.getTime() > oDate2.getTime()) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage }, () => {\r\n this.setBaseInfo();\r\n });\r\n };\r\n\r\n setHawkeyeDate = e => {\r\n this.setState({ customEffectiveTime: e.target.checked });\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} validateStatus={this.state.symbolStatus} help={this.state.symbolMessage} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterStockName-Symbol']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n <Form.Item colon={false} label={languageMessages['hawkeyeAction']} style={{ marginBottom: 0 }}>\r\n <Radio.Group value={this.state.direction} onChange={this.onChangeDirection}>\r\n <Radio value={closeShort}>{languageMessages['closeShort']}</Radio>\r\n <Radio value={closeLong}>{languageMessages['closeLong']}</Radio>\r\n </Radio.Group>\r\n </Form.Item>\r\n <Form.Item colon={false} label={languageMessages['tradeQuantity']} validateStatus={this.state.tradeQuantityStatus} help={this.state.tradeQuantityMessage} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <Input size=\"small\" style={{ width: 115 }} placeholder={languageMessages['tradeQuantityNotEmpty']} value={this.state.tradeQuantity} onChange={this.onChangeTradeQuantity} />\r\n </Form.Item>\r\n <Form.Item colon={false} label={languageMessages['effectTime']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\" showTime={{ format: 'HH:mm' }}\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n defaultValue={moment(this.state.startDate, format)}\r\n //disabledDate={this.startDisabledDate}\r\n //disabledTime={this.startDisabledTime}\r\n format={format} style={{ width: '150px' }}\r\n onChange={this.onChangeStartDate}\r\n disabled={!this.state.customEffectiveTime}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\" showTime={{ format: 'HH:mm' }}\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, format)}\r\n disabledDate={this.endDisabledDate}\r\n disabledTime={this.endDisabledTime}\r\n format={format} style={{ width: '150px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === '' || !this.state.customEffectiveTime}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', paddingLeft: 10 }}>\r\n <Checkbox onChange={this.setHawkeyeDate} disabled={!this.props.isVip}>{languageMessages['customExpirationTime']}</Checkbox>\r\n <a onClick={this.onValueAddedServices} style={{ fontSize: '10px' }}>{languageMessages['VIP.use-value.added.services']}</a>\r\n </span>\r\n </Form.Item>\r\n </Form>);\r\n }\r\n}\r\n \r\nconst BaseInfoForm = Form.create({ name: 'Base_Info' })(BaseInfo);\r\nexport { BaseInfoForm as default }","var RotationSentence = {\r\n 'cn': [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '10'\r\n ],\r\n 'en': [\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high',\r\n 'Price makes 2 day high'\r\n ]\r\n};\r\n\r\nexport default RotationSentence;","import React, { Component } from 'react';\r\nimport { Layout, Tree, Tabs, Input, Button, message } from 'antd';\r\n\r\nimport RotationSentence from './RotationSentence';\r\n\r\nimport '../../../highlight-within-textarea.css';\r\nimport $ from 'jquery';\r\nwindow.jQuery = $;\r\nrequire('highlight-within-textarea');\r\n\r\nconst { Sider } = Layout;\r\n\r\nconst { TabPane } = Tabs;\r\nconst { TreeNode } = Tree;\r\n\r\nconst TextArea = Input.TextArea;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n/**\r\nfunction getRandomArrayElements(arr, count) {\r\n var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;\r\n while (i-- > min) {\r\n index = Math.floor((i + 1) * Math.random());\r\n temp = shuffled[index];\r\n shuffled[index] = shuffled[i];\r\n shuffled[i] = temp;\r\n }\r\n return shuffled.slice(min);\r\n}\r\n*/\r\nfunction uuid() {\r\n var s = [];\r\n var hexDigits = \"0123456789abcdef\";\r\n for (var i = 0; i < 36; i++) {\r\n s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);\r\n }\r\n s[14] = \"4\"; // bits 12-15 of the time_hi_and_version field to 0010\r\n s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01\r\n s[8] = s[13] = s[18] = s[23] = \"-\";\r\n\r\n var uuid = s.join(\"\");\r\n return uuid;\r\n}\r\n\r\nvar specialSymbol = 'â–²';\r\nvar placeholder = '#val';\r\nconst regular = /(SH|SZ|sh|sz)?(\\d+)?(\\.)?(\\:)?(\\d+)(\\.)?(\\:)?(\\d+)?/g;\r\n//è§£æžæ¡ä»¶å—符串\r\nfunction ParseString(strings, regs, len = 9) {\r\n var condParams = {};\r\n\r\n var numLen = 0; //æ›¿æ¢æ•°å—的长度\r\n var index = -1;\r\n //var sentenceTemplate = strings.replace(/\\d+/g, function () {\r\n strings = strings.replace(/\\s+/g, '');\r\n strings = strings.replace(/,/ig, ',');\r\n var sentenceTemplate = strings.replace(regs, function () {\r\n if (index === -1) {\r\n index = arguments[len];\r\n } else {\r\n // 上一次长度\r\n var prevNum = condParams[index];\r\n numLen += prevNum.length;\r\n index = arguments[len] - numLen;\r\n }\r\n //console.log('arguments', arguments);\r\n condParams[index] = arguments[0];\r\n return '';\r\n });\r\n\r\n return { sentenceTemplate, condParams };\r\n}\r\n\r\nlet timer = null;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass VernacularHawkeye extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.analysisFormula = []; // 分æžå…¬å¼åˆ—表 增é‡\r\n\r\n this.placeholderTimer = null;\r\n this.state = {\r\n luString: [],//JSON.parse(sessionStorage.getItem(\"LuisStringCache\") || '[]') || [],\r\n checkedKeys: [],\r\n\r\n strategyData1: [],\r\n strategyData3: [],\r\n strategyData0: [],\r\n\r\n sentenceFormula: null,\r\n\r\n formulaName: '',\r\n formulaString: '',\r\n\r\n isLuisAnalysis: false,\r\n isPresetFormula: false,\r\n\r\n prevName: '', // 输入框的å‰ä¸€ä¸ªæ¡ä»¶\r\n useFormula: '',\r\n\r\n // current tab page\r\n luisTabsKey: sessionStorage.getItem(\"luisHawkeyeTabsKey\") || '1',\r\n luisTabsKeys: { '1': [], '3': [], '0': [] },\r\n\r\n isSelectCondition: false,\r\n isLoad: true,\r\n\r\n rotation: 0,\r\n }\r\n }\r\n\r\n iTimer = () => {\r\n this.placeholderTimer = setInterval(() => {\r\n let sentences = window.webType === 'US' ? RotationSentence.en : RotationSentence.cn;\r\n let { rotation } = this.state;\r\n rotation += 1;\r\n rotation = rotation >= sentences.length ? 0 : rotation;\r\n this.setState({ rotation });\r\n }, 5000);\r\n };\r\n\r\n componentDidMount() {\r\n setTimeout(this.iTimer, 0);\r\n }\r\n\r\n getSmileyDayString = (input) => {\r\n if (input === '') return false;\r\n\r\n if (locale.toLowerCase() === 'en-us') {\r\n let symbols = [];\r\n\r\n let tmpName = this.checkMatchFormula(input);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n let { luString, sentenceFormula } = this.state;\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (luString.length > 0) {\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tus;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n var isMacth = true;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n ins.push(ii);\r\n continue;\r\n }\r\n\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n\r\n para1 = para1.replace('%', '');\r\n\r\n if (tmpRegular.test(para1)) {\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n symbols.push(new RegExp(\"\\\\b(\" + para1 + \")\\\\b\", 'g'));\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n symbols.unshift(/(SH|SZ|sh|sz)?\\d+(?:\\.\\d+)?/g);\r\n return symbols;\r\n } else {\r\n return /(SH|SZ|sh|sz)?\\d+(?:\\.\\d+)?/g;\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.isSelectCondition) {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n //textAreaRef.setSelectionRange(0, textAreaRef.value.length);\r\n }\r\n\r\n if (this.state.isLoad && this.props.symbols !== undefined) {\r\n this.setState({ isLoad: false }, () => {\r\n $('.luis-highlight-textarea').highlightWithinTextarea({\r\n highlight: this.getSmileyDayString\r\n });\r\n })\r\n }\r\n\r\n /**\r\n * $('.luis-highlight-textarea').highlightWithinTextarea({\r\n highlight: /\\d+(?:\\.\\d+)?/g\r\n });\r\n */ \r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.placeholderTimer);\r\n }\r\n\r\n aryConcat(data01, data02, isSplice = true) {\r\n let obj = {};\r\n let arr = data01.concat(data02);\r\n\r\n var _this = this;\r\n let newArr = arr.reduce(function (pre, cur) {\r\n let tmpTis = _this.checkMatchFormula(cur.title);\r\n if (!obj.hasOwnProperty(tmpTis)) {\r\n pre.push(cur);\r\n }\r\n obj[tmpTis] = true;\r\n\r\n return pre;\r\n }, []);\r\n\r\n if (isSplice) newArr.splice(10);\r\n\r\n return newArr;\r\n }\r\n\r\n unique(array) {\r\n var res = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var isRepeat = true;\r\n for (var j = 0; i < res.length; j++) {\r\n if (array[i].cn === res[j].cn || array[i].us === res[j].us) {\r\n isRepeat = false;\r\n break;\r\n }\r\n }\r\n if (isRepeat) res.push(array[i]);\r\n }\r\n return res;\r\n }\r\n\r\n aryDeduplication(data01, data02, ins) {\r\n var obj = {};\r\n data01.forEach(item => {\r\n Object.keys(item).forEach(subItem => {\r\n obj.hasOwnProperty(subItem) ? obj[subItem].push(item[subItem]) : obj[subItem] = [item[subItem]]\r\n })\r\n })\r\n\r\n let tmpCurrLuString = data02.filter(function (v) { return v.c === ins && obj['key'].indexOf(v.id) !== -1 });\r\n data02 = data02.filter(function (v) { return v.c !== ins });\r\n\r\n return data02.concat(tmpCurrLuString);\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, luString, formulaString, sentenceFormula } = props;\r\n\r\n switch (status) {\r\n case 'get_hawkeye_info_success':\r\n var strategyData1 = [];\r\n var strategyData3 = [];\r\n var strategyData0 = [];\r\n for (var key in luString) {\r\n //var lustringTitle = locale === 'en-US' ? luString[key].us !== '' ? luString[key].us : luString[key].cn : luString[key].cn;\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n var sData = { title: lustringTitle, key: luString[key].id };\r\n\r\n if (luString[key].c === '1')\r\n strategyData1.push(sData);\r\n if (luString[key].c === '3')\r\n strategyData3.push(sData);\r\n if (luString[key].c === '0')\r\n strategyData0.push(sData);\r\n }\r\n\r\n var { luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n var currLuString = this.unique(luString);\r\n\r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({ strategyData1, strategyData3, strategyData0, luString: currLuString, checkedKeys: [], luisTabsKeys });\r\n break;\r\n case 'hawkeye_change_batch_success':\r\n var { strategyData1, strategyData3, strategyData0, luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n var currLuString = this.state.luString;\r\n currLuString = currLuString.concat(luString);\r\n currLuString = this.unique(currLuString);\r\n\r\n var strategyData = [];\r\n for (var key in luString) {\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n strategyData.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luisTabsKey === '1') strategyData1 = strategyData;\r\n if (luisTabsKey === '3') strategyData3 = strategyData;\r\n if (luisTabsKey === '0') strategyData0 = strategyData;\r\n \r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({ strategyData1, strategyData3, strategyData0, luString: currLuString, checkedKeys: [], luisTabsKeys });\r\n break;\r\n case 'hawkeye_change_condition_success':\r\n var { strategyData1, strategyData3, strategyData0, prevName, formulaName, isPresetFormula, luisTabsKeys, luisTabsKey, checkedKeys } = this.state;\r\n\r\n luisTabsKeys = { '1': [], '3': [], '0': [] };\r\n\r\n let isLoadLuItems = this.checkFormulaName(prevName, formulaName);\r\n\r\n prevName = '';\r\n\r\n var ids = 0;\r\n var formulaString = '';\r\n var useFormula = '';\r\n var isPresetFormula = false;\r\n if (sentenceFormula != null) {\r\n var resultFormula = this.setUseFormula(sentenceFormula);\r\n formulaString = resultFormula['formulaString'];\r\n useFormula = resultFormula['useFormula'];\r\n prevName = resultFormula['prevName'];\r\n isPresetFormula = useFormula.length > 0 ? true : false;\r\n\r\n ids = sentenceFormula.id;\r\n\r\n //this.analysisFormula.push({ name: this.state.formulaName, formula: formulaString });\r\n }\r\n\r\n var tmpIndex = '-1';\r\n\r\n /**\r\n var strategyData = [];\r\n for (var key in luString) {\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n if (luString[key].c === luisTabsKey) {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = luisTabsKey;\r\n }\r\n strategyData.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n }\r\n */\r\n\r\n let category = null;\r\n\r\n var tmpStrategyData1 = [];\r\n var tmpStrategyData3 = [];\r\n var tmpStrategyData0 = [];\r\n for (var key in luString) {\r\n if (category === null) {\r\n if (luString[key].c !== '2') category = luString[key].c === '' ? luisTabsKey : luString[key].c;\r\n }\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n\r\n if (luString[key].c === '') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = luisTabsKey;\r\n }\r\n\r\n if (luisTabsKey === '1') tmpStrategyData1.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '3') tmpStrategyData3.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '0') tmpStrategyData0.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n\r\n if (luString[key].c === '1') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '1';\r\n }\r\n tmpStrategyData1.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '3') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '3';\r\n }\r\n tmpStrategyData3.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '0') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '0';\r\n }\r\n tmpStrategyData0.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n }\r\n \r\n if (isLoadLuItems) {\r\n if (tmpStrategyData1.length > 0) {\r\n strategyData1 = this.aryConcat(tmpStrategyData1, strategyData1);\r\n\r\n //currLuString = this.aryDeduplication(strategyData1, currLuString, '1');\r\n }\r\n if (tmpStrategyData3.length > 0) {\r\n strategyData3 = this.aryConcat(tmpStrategyData3, strategyData3);\r\n\r\n //currLuString = this.aryDeduplication(strategyData3, currLuString, '3');\r\n }\r\n if (tmpStrategyData0.length > 0) {\r\n strategyData0 = this.aryConcat(tmpStrategyData0, strategyData0);\r\n\r\n //currLuString = this.aryDeduplication(strategyData0, currLuString, '0');\r\n }\r\n\r\n checkedKeys = [];\r\n if (tmpIndex !== '-1') {\r\n checkedKeys.push(ids.toString());\r\n luisTabsKeys[tmpIndex] = checkedKeys;\r\n }\r\n }\r\n\r\n if (category !== null) {\r\n luisTabsKey = category;\r\n } else {\r\n if (sentenceFormula !== null && sentenceFormula.c !== null && sentenceFormula.c !== '') {\r\n luisTabsKey = sentenceFormula.c;\r\n }\r\n }\r\n\r\n var currLuString = this.state.luString;\r\n currLuString = currLuString.concat(luString);\r\n currLuString = this.unique(currLuString);\r\n\r\n this.setState({ strategyData1, strategyData3, strategyData0, sentenceFormula, luString: currLuString, formulaString, useFormula, prevName, checkedKeys, luisTabsKeys, luisTabsKey, isPresetFormula });\r\n break;\r\n case 'analysis_success':\r\n if (this.state.isLuisAnalysis) {\r\n this.analysisFormula.push({ name: this.state.formulaName, formula: formulaString });\r\n\r\n var useFormula = this.replaceHtml(formulaString);\r\n this.setState({ formulaString, useFormula, isLuisAnalysis: false, isPresetFormula: true });\r\n }\r\n break;\r\n case 'analysis_fail':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // æ¢ä¸€æ‰¹\r\n onChangeBatch = e => {\r\n e.preventDefault();\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var { formulaName, luisTabsKey } = this.state;\r\n\r\n this.setState({ formulaName, checkedKeys: [] }, () => {\r\n this.props.dispatch({ type: \"action_hawkeye_change_batch\", payload: { UserId: user.username, keywords: formulaName, luisTabsKey: luisTabsKey } });\r\n });\r\n }\r\n\r\n // select condition\r\n onLuisSelect = keys => {\r\n var { checkedKeys, luString, luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n luisTabsKeys = { '1': [], '3': [], '0': [] };\r\n if (keys.length == 0) {\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n prevName: '',\r\n isPresetFormula: false,\r\n isSelectCondition: false,\r\n sentenceFormula: null\r\n }, () => {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n inputFormulaName.blur();\r\n });\r\n return;\r\n }\r\n\r\n checkedKeys = keys;\r\n\r\n \r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n\r\n var tmpluisString = luString.filter(function (e) { return e.id == checkedKeys; });\r\n if (tmpluisString.length > 0) {\r\n let sentenceFormula = tmpluisString[0];\r\n var formulaName = locale.toLowerCase() === 'en-us' ? sentenceFormula.us : sentenceFormula.cn;\r\n var formulaString = sentenceFormula.f;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var isPresetFormula = useFormula.length > 0 ? true : false;\r\n \r\n this.setState({\r\n checkedKeys,\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: isPresetFormula,\r\n isSelectCondition: true,\r\n sentenceFormula\r\n }, () => {\r\n if (formulaString === '') this.requestSentenceFormula(formulaName, 0);\r\n });\r\n }\r\n }\r\n\r\n // select condition\r\n onLuisCheck = keys => {\r\n var { checkedKeys, luString, luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n if (keys.length == 0) {\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys: { '1': [], '3': [], '0': [] },\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n prevName: '',\r\n isPresetFormula: false,\r\n isSelectCondition: false,\r\n sentenceFormula: null\r\n }, () => {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n inputFormulaName.blur();\r\n });\r\n return;\r\n }\r\n\r\n if (checkedKeys.length > 0) {\r\n var dd = [];\r\n keys.forEach(function (o) {\r\n var tmp = checkedKeys.indexOf(o) !== -1 ? null : o;\r\n if (tmp !== null) dd.push(tmp);\r\n });\r\n checkedKeys = dd;\r\n } else {\r\n if (keys.length > 0) checkedKeys.push(keys[0]);\r\n }\r\n\r\n if (checkedKeys.length > 0) {\r\n luisTabsKeys = { '1': [], '3': [], '0': [] };\r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n\r\n var tmpluisString = luString.filter(function (e) { return e.id == checkedKeys; });\r\n if (tmpluisString.length > 0) {\r\n let sentenceFormula = tmpluisString[0];\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? sentenceFormula.us : sentenceFormula.cn;\r\n\r\n var formulaName = lustringTitle;\r\n var formulaString = sentenceFormula.f;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var isPresetFormula = useFormula.length > 0 ? true : false;\r\n \r\n this.setState({\r\n checkedKeys,\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: isPresetFormula,\r\n isSelectCondition: true,\r\n sentenceFormula\r\n }, () => {\r\n if (formulaString === '') this.requestSentenceFormula(formulaName, 0);\r\n });\r\n }\r\n }\r\n };\r\n\r\n onFocusCondition = () => {\r\n this.setState({ isSelectCondition: false });\r\n }\r\n\r\n Trim(str, is_global) {\r\n var result;\r\n result = str.replace(/(^\\s+)|dao(\\s+$)/g, \"\");\r\n if (is_global.toLowerCase() == \"g\") {\r\n result = result.replace(/\\s/g, \"\");\r\n }\r\n return result;\r\n }\r\n\r\n checkMatchFormula(value) {\r\n if (value === '') return '';\r\n\r\n let tmpName = value.replace(/(\\r|\\n)/g, \"\");\r\n tmpName = tmpName.replace(/,/ig, ',');\r\n tmpName = tmpName.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n tmpName = tmpName.replace(/\\s+/g, ' ');\r\n return tmpName;\r\n }\r\n\r\n checkFormulaName(prevName, formulaName) {\r\n if (formulaName === '') return true;\r\n\r\n let tmpName1 = this.checkMatchFormula(prevName);\r\n let tmpName2 = this.checkMatchFormula(formulaName);\r\n\r\n return tmpName1 === tmpName2 ? false : true;\r\n }\r\n\r\n // æ¡ä»¶å¥åæ”¹å˜ ç”Ÿæˆæ¨¡æ¿\r\n onChangeCondition = e => {\r\n var formulaName = e.target.value;\r\n\r\n this.requestSentenceFormula(formulaName, 500);\r\n }\r\n\r\n requestSentenceFormula(formulaName, interval) {\r\n let { luString, prevName, sentenceFormula, luisTabsKey } = this.state;\r\n\r\n let isMacth = false;\r\n\r\n if (formulaName !== '') {\r\n if (locale.toLowerCase() === 'en-us') {\r\n let tmpName = this.checkMatchFormula(formulaName);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n var tmpPrevName = this.checkMatchFormula(prevName);\r\n let prevName1 = tmpPrevName.split(' ');\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (!isMacth) {\r\n if (luString.length > 0) {\r\n var tmpRegular = new RegExp(/[^0-9:.,]/);\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tus;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n isMacth = true;\r\n\r\n let prevName2 = prevName1;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n let tmp1 = tmpName1[ii].split(',');\r\n let tmp2 = tmpName2[ii].split(',');\r\n if (tmp1.length !== tmp2.length) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n ins.push(ii);\r\n continue;\r\n }\r\n if (tmpRegular.test(tmpName2[ii])) {\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n }\r\n\r\n if (tmpName2[ii] !== prevName2[ii]) {\r\n prevName2.splice(ii - 1, 0, '#val');\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n let formulaString = formulaModel.ftcn === undefined || formulaModel.ftcn === null ? '' : formulaModel.ftcn;\r\n let useFormula = formulaString;\r\n\r\n let isSymbol = true;\r\n if (formulaString !== '') {\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n let para2 = tmpName2[ins[ii]];\r\n\r\n let para3 = prevName2[ins[ii]] !== undefined ? prevName2[ins[ii]] : '';\r\n\r\n let para01 = para1.split(',');\r\n let para02 = para2.split(',');\r\n let para03 = para3.split(',');\r\n\r\n for (var jj in para02) {\r\n para1 = para01[jj].replace('%', '');\r\n para2 = para02[jj].replace('%', '');\r\n para3 = para03[jj] !== undefined ? para03[jj].replace('%', '') : '';\r\n\r\n para1 = para1.replace('(', '');\r\n para2 = para2.replace('(', '');\r\n para3 = para3.replace('(', '');\r\n\r\n para1 = para1.replace(')', '');\r\n para2 = para2.replace(')', '');\r\n para3 = para3.replace(')', '');\r\n\r\n if (tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaString = formulaString.replace(new RegExp(para2, 'g'), para1);\r\n\r\n var tmpString = para3 === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n if (!isSymbol) formulaString = '';\r\n\r\n luisTabsKey = formulaModel.c !== null ? formulaModel.c : luisTabsKey;\r\n\r\n this.setState({ formulaName, formulaString, useFormula, prevName: formulaName, luisTabsKey });\r\n\r\n break;\r\n } else {\r\n isMacth = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n var tmpPrevName = this.checkMatchFormula(prevName);\r\n var parseString1 = ParseString(tmpPrevName, regular);\r\n var prevName1 = parseString1['condParams'];\r\n\r\n let tmpName = this.checkMatchFormula(formulaName);\r\n var parseString = ParseString(tmpName, regular);\r\n var tmpName1 = parseString['sentenceTemplate'];\r\n var condParams = parseString['condParams'];\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (!isMacth) {\r\n if (luString.length > 0) {\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tcn;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n\r\n let parseString2 = ParseString(templatString, /#val\\d+?/g, 1);\r\n let tmpName2 = parseString2['sentenceTemplate'];\r\n var matchString = parseString2['condParams'];\r\n\r\n if (tmpName1 === tmpName2 && Object.keys(condParams).length === Object.keys(matchString).length) {\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n let formulaString = formulaModel.ftcn === undefined || formulaModel.ftcn === null ? '' : formulaModel.ftcn;\r\n let useFormula = formulaString;\r\n\r\n let isSymbol = true;\r\n if (formulaString !== '') {\r\n isMacth = true;\r\n\r\n for (var ii in matchString) {\r\n let para1 = condParams[ii];\r\n let para2 = matchString[ii];\r\n\r\n if (tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaString = formulaString.replace(new RegExp(para2, 'g'), para1);\r\n\r\n let tmp = Object.keys(prevName1).length > 0 ? prevName1[ii] !== undefined ? prevName1[ii] : '' : para1;\r\n var tmpString = tmp === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n if (!isSymbol) formulaString = '';\r\n\r\n luisTabsKey = formulaModel.c !== null ? formulaModel.c : luisTabsKey;\r\n\r\n this.setState({ formulaName, formulaString, useFormula, prevName: formulaName, luisTabsKey });\r\n\r\n break;\r\n } else {\r\n isMacth = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n if (!isMacth) {\r\n var { luisTabsKeys, checkedKeys } = this.state;\r\n\r\n let isLoadLuItems = this.checkFormulaName(prevName, formulaName);\r\n if (isLoadLuItems) {\r\n checkedKeys = [];\r\n }\r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n\r\n this.setState({ formulaName, formulaString: '', condParams, checkedKeys, luisTabsKeys }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n clearTimeout(timer);\r\n\r\n let _this = this;\r\n timer = setTimeout(function () {\r\n if (user.username === undefined) user.username = uuid();\r\n _this.props.dispatch({ type: \"action_hawkeye_change_condition\", payload: { UserId: user.username, keywords: formulaName, luisTabsKey: luisTabsKey } });\r\n }, interval);\r\n });\r\n }\r\n\r\n /**\r\n * var formulaString = '';\r\n\r\n if (formulaName !== '' && this.analysisFormula.length > 0) {\r\n var tmpFormulaString = this.analysisFormula.filter(function (e) { return e.name.toUpperCase() === formulaName.toUpperCase(); });\r\n if (tmpFormulaString.length > 0) {\r\n formulaString = tmpFormulaString[0].formula;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var { luisTabsKeys, luisTabsKey } = this.state;\r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula: useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: true,\r\n });\r\n }\r\n }\r\n */ \r\n }\r\n\r\n setUseFormula(sentenceFormula) {\r\n var { prevName, formulaName } = this.state;\r\n \r\n var formulaTemplateString = locale.toLowerCase() === 'en-us' ? sentenceFormula.ftus : sentenceFormula.ftcn;\r\n formulaTemplateString = formulaTemplateString === undefined || formulaTemplateString === null ? '' : formulaTemplateString;\r\n\r\n var status = sentenceFormula.status === undefined || sentenceFormula.status === null ? '111' : sentenceFormula.status;\r\n\r\n let isSymbol = true;\r\n let formulaString = sentenceFormula.f;\r\n let useFormula = formulaTemplateString;\r\n if (formulaName != '' && formulaTemplateString !== '') {\r\n if (locale.toLowerCase() === 'en-us') {\r\n let tmpName = this.checkMatchFormula(formulaName);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n prevName = this.checkMatchFormula(prevName);\r\n let prevName1 = prevName.split(' ');\r\n\r\n var templatString = sentenceFormula.tus;\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n let isMacth = true;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n let tmp1 = tmpName1[ii].split(',');\r\n let tmp2 = tmpName2[ii].split(',');\r\n if (tmp1.length !== tmp2.length) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n ins.push(ii);\r\n continue;\r\n }\r\n\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n if (tmpName2[ii] !== prevName1[ii]) {\r\n prevName1.splice(ii - 1, 0, '#val');\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n var tmpRegular = new RegExp(/[^0-9:.,]/);\r\n\r\n if (ins.length > 0) {\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n let para2 = tmpName2[ins[ii]];\r\n\r\n let para3 = prevName1[ins[ii]] !== undefined ? prevName1[ins[ii]] : '';\r\n\r\n let para01 = para1.split(',');\r\n let para02 = para2.split(',');\r\n let para03 = para3.split(',');\r\n\r\n for (var jj in para02) {\r\n para1 = para01[jj].replace('%', '');\r\n para2 = para02[jj].replace('%', '');\r\n para3 = para03[jj] !== undefined ? para03[jj].replace('%', '') : '';\r\n\r\n para1 = para1.replace('(', '');\r\n para2 = para2.replace('(', '');\r\n para3 = para3.replace('(', '');\r\n\r\n para1 = para1.replace(')', '');\r\n para2 = para2.replace(')', '');\r\n para3 = para3.replace(')', '');\r\n\r\n if (isSymbol && tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaTemplateString = formulaTemplateString.replace(new RegExp(para2, 'g'), para1);\r\n\r\n var tmpString = para3 === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n }\r\n }\r\n formulaString = formulaTemplateString;\r\n }\r\n }\r\n }\r\n } else {\r\n var formulaName1 = this.checkMatchFormula(formulaName);\r\n var formulaResult = ParseString(formulaName1, regular);\r\n var tmpName1 = formulaResult['sentenceTemplate'];\r\n var condParams = formulaResult['condParams'];\r\n\r\n var templatString = sentenceFormula.tcn;\r\n if (templatString !== null && templatString !== '') {\r\n templatString = templatString.replace(/%23val/g, '#val');\r\n\r\n let parseString = ParseString(templatString, /#val\\d+?/g, 1);\r\n var tmpName2 = parseString['sentenceTemplate'];\r\n var tmpCondParams = parseString['condParams'];\r\n\r\n if (tmpName1 === tmpName2 && Object.keys(condParams).length > 0) {\r\n prevName = this.checkMatchFormula(prevName);\r\n var parseString1 = ParseString(prevName, regular);\r\n var prevName1 = parseString1['condParams'];\r\n\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n for (var i in condParams) {\r\n if (tmpCondParams[i] === undefined) continue;\r\n\r\n if (tmpRegular.test(condParams[i])) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === condParams[i].toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaTemplateString = formulaTemplateString.replace(new RegExp(tmpCondParams[i], 'g'), condParams[i]);\r\n\r\n let tmp = Object.keys(prevName1).length > 0 ? prevName1[i] !== undefined ? prevName1[i] : '' : condParams[i];\r\n var tmpString = tmp === condParams[i] ? condParams[i] : specialSymbol + condParams[i] + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(tmpCondParams[i], 'g'), tmpString);\r\n }\r\n formulaString = formulaTemplateString;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (formulaString.indexOf(placeholder) !== -1 || useFormula.indexOf(placeholder) !== -1) {\r\n formulaString = '';\r\n //formulaString.replace(/#val\\d+?/g, '');\r\n //useFormula = '';\r\n\r\n //useFormula = useFormula.replace(/#val\\d+?/g, specialSymbol + '?' + specialSymbol);\r\n useFormula = useFormula.replace(/#val\\d+?/g, '?');\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n formulaString = status === '111' || status === '0' ? formulaString : '';\r\n formulaString = formulaString.length < 5 ? '' : formulaString;\r\n if (!isSymbol) formulaString = '';\r\n\r\n return { formulaString, useFormula, prevName: formulaName };\r\n }\r\n\r\n // æ ¼å¼åŒ–å…¬å¼ ä½¿é«˜äº®æ˜¾ç¤º\r\n replaceHtml(useFormula) {\r\n if (useFormula === null || useFormula === undefined || useFormula === '') return '';\r\n\r\n var useFormulas = [];\r\n var items = useFormula.split('\\n');\r\n for (var item in items) {\r\n if (useFormulas.length > 0) useFormulas.push(<br key={item} />);\r\n var tmpString = items[item];\r\n\r\n var tmpStrings = tmpString.split(specialSymbol);\r\n for (var ii in tmpStrings) {\r\n if (ii > 0 && ii % 2 == 1) {\r\n if (tmpStrings[ii] === '?') {\r\n useFormulas.push(<span key={'Highlight-' + item + '-' + ii} className='common-red'>{tmpStrings[ii]}</span>);\r\n } else {\r\n useFormulas.push(<span key={'Highlight-' + item + '-' + ii} className='common-bg'>{tmpStrings[ii]}</span>);\r\n }\r\n } else {\r\n useFormulas.push(tmpStrings[ii]);\r\n }\r\n }\r\n }\r\n\r\n return useFormulas;\r\n }\r\n // åˆ†æžæ¡ä»¶\r\n onIntelligentAnalysis = () => {\r\n var { formulaName } = this.state;\r\n\r\n this.setState({ isLuisAnalysis: true, formulaString: '' }, () => {\r\n this.props.LuisAnalysis({\r\n isLuisAnalysis: true\r\n });\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_luis_analysis\", payload: { UserName: user.username, RequestString: formulaName } });\r\n }\r\n });\r\n }\r\n\r\n onUseFormula = () => {\r\n let { count } = this.props;\r\n if (count >= 5) {\r\n message.warning(languageMessages['hawkeyeUpperLimit'], 5);\r\n return;\r\n }\r\n var { formulaName, formulaString, isLuisAnalysis, luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n luisTabsKeys[luisTabsKey] = [];\r\n \r\n this.setState({\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n isPresetFormula: false,\r\n isSelectCondition: true\r\n }, () => {\r\n this.props.dispatch({ type: \"action_Use_formula_hawkeye\", payload: { isLuisAnalysis: isLuisAnalysis, formulaName: formulaName, formulaString: formulaString, vernacularKey: new Date().getTime().toString() } });\r\n });\r\n }\r\n\r\n onChangeTabs = luisTabsKey => {\r\n var { luisTabsKeys } = this.state;\r\n sessionStorage.setItem(\"luisHawkeyeTabsKey\", luisTabsKey);\r\n this.setState({ luisTabsKey, checkedKeys: luisTabsKeys[luisTabsKey] });\r\n }\r\n\r\n renderTreeNodes = data =>\r\n data.map(item => {\r\n if (item.children) {\r\n return (\r\n <TreeNode title={item.title} key={item.key} dataRef={item}>\r\n {this.renderTreeNodes(item.children)}\r\n </TreeNode>\r\n );\r\n }\r\n return <TreeNode {...item} />;\r\n });\r\n\r\n renderSearchState(strategyData1, strategyData3, strategyData0) {\r\n var { luisTabsKey } = this.state;\r\n\r\n var isEmpty = true;\r\n var txt = \"\";\r\n switch (luisTabsKey) {\r\n case \"1\":\r\n if (strategyData1.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.mete.price.statements'];\r\n }\r\n break;\r\n case \"3\":\r\n if (strategyData3.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.technically.sentences'];\r\n }\r\n break;\r\n case \"0\":\r\n if (strategyData0.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.other.statements'];\r\n }\r\n break;\r\n }\r\n\r\n if (isEmpty) {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(0, 0, 0, 0.25)' }}>{txt}</div>\r\n } else {\r\n return <div className='luis-condition-change'>\r\n <Button shape=\"round\" size='small' onClick={this.onChangeBatch} disabled={this.props.isFilterScan || this.state.isLuisAnalysis}>\r\n {languageMessages['change.batch']}\r\n </Button>\r\n </div>\r\n }\r\n }\r\n\r\n renderIntelligentAnalysis(formulaName) {\r\n return '';\r\n /**\r\n if (locale.toLowerCase() === 'en-us') return '';\r\n else return <Button size='small' onClick={this.onIntelligentAnalysis} loading={this.props.status === 'analysis_commit'} disabled={this.props.status === 'analysis_commit' || formulaName === '' || this.props.isFilterScan || this.state.isPresetFormula}>\r\n {this.props.status === 'analysis_commit' ? languageMessages['parsing'] : languageMessages['intelligent.analysis']}\r\n </Button>\r\n */\r\n }\r\n\r\n render() {\r\n var { strategyData1, strategyData3, strategyData0, formulaName, formulaString, useFormula, rotation } = this.state;\r\n\r\n let textareaPlaceholder = languageMessages['vernacular.left.prompt'];\r\n\r\n let statement = languageMessages['input.hawkeye.statement'];\r\n if (window.webType === 'US') {\r\n let aryStatement = [];\r\n let tmpStatement = statement.replace('Highlighted', ',');\r\n let tmpStatements = tmpStatement.split(',');\r\n for (let i = 0; i <= tmpStatements.length; i++) {\r\n if (i === 1) {\r\n aryStatement.push(<span key={'statement' + i} className='common-bg'>Highlighted</span>)\r\n }\r\n aryStatement.push(tmpStatements[i]);\r\n }\r\n\r\n statement = aryStatement;\r\n\r\n var val = 'type your complete idea, e.g. \"#val\".';\r\n textareaPlaceholder = 'Type key word, e.g. \"Bollinger band\", then select from ideas in left panel, or';\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += val.replace('#val', RotationSentence.en[rotation]);\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += 'Monitor your stock. Have fun learning.';\r\n }\r\n /**else {\r\n var val = 'type your complete idea, e.g. \"#val\".';\r\n\r\n textareaPlaceholder = 'å˜é‡æ ¼å¼ï¼š';\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += val.replace('#val', RotationSentence.cn[rotation]);\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += 'å˜é‡æ ¼å¼';\r\n }*/\r\n\r\n return (<Layout className={window.webType === 'US' ? 'luis hawkeye-luis hawkeye-luis-us' : 'luis hawkeye-luis'}>\r\n <Sider width={360}>\r\n <Tabs size=\"small\" activeKey={this.state.luisTabsKey}\r\n animated={false}\r\n onChange={this.onChangeTabs}>\r\n <TabPane tab={languageMessages['mete.price']} key='1'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['1']} checkedKeys={this.state.luisTabsKeys['1']}>{this.renderTreeNodes(strategyData1)}</Tree>\r\n </TabPane>\r\n <TabPane tab={languageMessages['technically']} key='3'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['3']} checkedKeys={this.state.luisTabsKeys['3']}>{this.renderTreeNodes(strategyData3)}</Tree>\r\n </TabPane>\r\n <TabPane tab={languageMessages['other']} key='0'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['0']} checkedKeys={this.state.luisTabsKeys['0']}>{this.renderTreeNodes(strategyData0)}</Tree>\r\n </TabPane>\r\n </Tabs>\r\n {this.renderSearchState(strategyData1, strategyData3, strategyData0)}\r\n </Sider>\r\n <Layout className='luis-content'>\r\n <div style={{ padding: '10px 5px', marginBottom: 5 }}>{statement}</div>\r\n <TextArea ref=\"inputFormulaName\" className=\"luis-highlight-textarea\" placeholder={textareaPlaceholder} rows={4} onChange={this.onChangeCondition} onFocus={this.onFocusCondition} value={formulaName} />\r\n\r\n <div style={{ padding: '0px 0' }}>\r\n {this.renderIntelligentAnalysis(formulaName)}\r\n </div>\r\n\r\n <div style={{ padding: '10px 5px', marginBottom: 5 }}>{languageMessages['correspond.formula']}</div>\r\n <div className='common-edit'>{useFormula}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Button size='small' onClick={this.onUseFormula} disabled={formulaString === '' || this.props.isFilterScan || this.state.isLuisAnalysis}>{languageMessages['Add to conditions']}</Button>\r\n </div>\r\n </Layout>\r\n </Layout>);\r\n }\r\n}\r\n\r\nexport { VernacularHawkeye as default }","import React, { Component } from 'react';\r\nimport { Row, Col, Input, Select, Button } from 'antd';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst { Option } = Select;\r\n\r\nclass HawkeyeCondition extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n conditionContent: [],\r\n\r\n PriceRiseTo: '',\r\n PriceFellTo: '',\r\n ReboundRange01: '',\r\n ReboundRange02: '',\r\n Fallback01: '',\r\n Fallback02: '',\r\n\r\n DailyIncreaseReached: '5.00',\r\n DailyDeclineReached: '5.00',\r\n PriceRise: '20',\r\n PriceFalling: '20',\r\n\r\n StockPriceWearOn01: 'D',\r\n StockPriceWearOn02: '20',\r\n StockPriceFellBelow01: 'D',\r\n StockPriceFellBelow02: '20',\r\n\r\n Increase01: '1',\r\n Increase02: '0.50',\r\n Decline01: '1',\r\n Decline02: '0.50',\r\n\r\n DailyTurnoverRate: '8.00',\r\n KDJGoldFork: 'D',\r\n KDJDeadFork: 'D',\r\n MACDGoldFork: 'D',\r\n MACDDeadFork: 'D',\r\n\r\n PriceWearBollinger01: 'D',\r\n PriceWearBollinger02: 'up',\r\n PriceDownBollinger01: 'D',\r\n PriceDownBollinger02: 'down',\r\n\r\n //20200605\r\n BuyOneHigherThan: '', //买一价高于\r\n SellPriceBelow: '', //å–一价低于\r\n\r\n ReachHigh: '3.00', //高开达到\r\n GapReachHigh: '3.00', //跳空高开达到\r\n\r\n Volume01: '5', //æˆäº¤é‡\r\n Volume02: '3.0',\r\n\r\n VolumeRatio: '3.00', //釿¯”\r\n DailyAmplitude: '5.00', //日振幅\r\n\r\n AnyOnlineWear01: '60', //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02: '10',\r\n AnyOnlineWear03: '60',\r\n AnyOnlineWear04: '20',\r\n AnyMovingAverage01: '60', //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02: '10',\r\n AnyMovingAverage03: '60',\r\n AnyMovingAverage04: '20'\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { conditions, VernacularConditions } = props;\r\n\r\n var PriceRiseTo = '',\r\n PriceFellTo = '',\r\n\r\n ReboundRange01 = '',\r\n ReboundRange02 = '',\r\n Fallback01 = '',\r\n Fallback02 = '',\r\n\r\n DailyIncreaseReached = '5.00',\r\n DailyDeclineReached = '5.00',\r\n PriceRise = '20',\r\n PriceFalling = '20',\r\n StockPriceWearOn01 = 'D',\r\n StockPriceWearOn02 = '20',\r\n StockPriceFellBelow01 = 'D',\r\n StockPriceFellBelow02 = '20',\r\n Increase01 = '1',\r\n Increase02 = '0.50',\r\n Decline01 = '1',\r\n Decline02 = '0.50',\r\n\r\n DailyTurnoverRate = '8.00',\r\n KDJGoldFork = 'D',\r\n KDJDeadFork = 'D',\r\n MACDGoldFork = 'D',\r\n MACDDeadFork = 'D',\r\n\r\n PriceWearBollinger01 = 'D',\r\n PriceWearBollinger02 = 'up',\r\n PriceDownBollinger01 = 'D',\r\n PriceDownBollinger02 = 'down',\r\n\r\n //20200605\r\n BuyOneHigherThan = '', //买一价高于\r\n SellPriceBelow = '', //å–一价低于\r\n\r\n ReachHigh = '3.00', //高开达到\r\n GapReachHigh = '3.00', //跳空高开达到\r\n\r\n Volume01 = '5', //æˆäº¤é‡\r\n Volume02 = '3.0',\r\n VolumeRatio = '3.00', //釿¯”\r\n DailyAmplitude = '5.00', //日振幅\r\n\r\n AnyOnlineWear01 = '60', //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02 = '10',\r\n AnyOnlineWear03 = '60',\r\n AnyOnlineWear04 = '20',\r\n AnyMovingAverage01 = '60', //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02 = '10',\r\n AnyMovingAverage03 = '60',\r\n AnyMovingAverage04 = '20';\r\n\r\n var conditionContent = [];\r\n if (conditions.length > 0) {\r\n for (var i in conditions) {\r\n var key = conditions[i].key;\r\n var item = conditions[i].name;\r\n switch (item) {\r\n case 'PriceRiseTo':\r\n PriceRiseTo = this.state.PriceRiseTo;\r\n conditionContent.push({ key: key, cont: this.renderPriceRiseTo() });\r\n break;\r\n case 'PriceFellTo':\r\n PriceFellTo = this.state.PriceFellTo;\r\n conditionContent.push({ key: key, cont: this.renderPriceFellTo() });\r\n //conditionContent.push(this.renderPriceFellTo());\r\n break;\r\n case 'ReboundRange':\r\n ReboundRange01 = this.state.ReboundRange01;\r\n ReboundRange02 = this.state.ReboundRange02;\r\n conditionContent.push({ key: key, cont: this.renderReboundRange() });\r\n //conditionContent.push(this.renderReboundRange());\r\n break;\r\n case 'Fallback':\r\n Fallback01 = this.state.Fallback01;\r\n Fallback02 = this.state.Fallback02;\r\n conditionContent.push({ key: key, cont: this.renderFallback() });\r\n //conditionContent.push(this.renderFallback());\r\n break;\r\n\r\n case 'DailyIncreaseReached':\r\n DailyIncreaseReached = this.state.DailyIncreaseReached;\r\n conditionContent.push({ key: key, cont: this.renderDailyIncreaseReached() });\r\n //conditionContent.push(this.renderDailyIncreaseReached());\r\n break;\r\n case 'DailyDeclineReached':\r\n DailyDeclineReached = this.state.DailyDeclineReached;\r\n conditionContent.push({ key: key, cont: this.renderDailyDeclineReached() });\r\n //conditionContent.push(this.renderDailyDeclineReached());\r\n break;\r\n case 'PriceRise':\r\n PriceRise = this.state.PriceRise;\r\n conditionContent.push({ key: key, cont: this.renderPriceRise() });\r\n //conditionContent.push(this.renderPriceRise());\r\n break;\r\n case 'PriceFalling':\r\n PriceFalling = this.state.PriceFalling;\r\n conditionContent.push({ key: key, cont: this.renderPriceFalling() });\r\n //conditionContent.push(this.renderPriceFalling());\r\n break;\r\n case 'StockPriceWearOn':\r\n StockPriceWearOn01 = this.state.StockPriceWearOn01;\r\n StockPriceWearOn02 = this.state.StockPriceWearOn02;\r\n conditionContent.push({ key: key, cont: this.renderStockPriceWearOn() });\r\n //conditionContent.push(this.renderStockPriceWearOn());\r\n break;\r\n case 'StockPriceFellBelow':\r\n StockPriceFellBelow01 = this.state.StockPriceFellBelow01;\r\n StockPriceFellBelow02 = this.state.StockPriceFellBelow02;\r\n conditionContent.push({ key: key, cont: this.renderStockPriceFellBelow() });\r\n //conditionContent.push(this.renderStockPriceFellBelow());\r\n break;\r\n case 'Increase':\r\n Increase01 = this.state.Increase01;\r\n Increase02 = this.state.Increase02;\r\n conditionContent.push({ key: key, cont: this.renderIncrease() });\r\n //conditionContent.push(this.renderIncrease());\r\n break;\r\n case 'Decline':\r\n Decline01 = this.state.Decline01;\r\n Decline02 = this.state.Decline02;\r\n conditionContent.push({ key: key, cont: this.renderDecline() });\r\n //conditionContent.push(this.renderDecline());\r\n break;\r\n case 'DailyTurnoverRate':\r\n DailyTurnoverRate = this.state.DailyTurnoverRate;\r\n conditionContent.push({ key: key, cont: this.renderDailyTurnoverRate() });\r\n //conditionContent.push(this.renderDailyTurnoverRate());\r\n break;\r\n case 'KDJGoldFork':\r\n KDJGoldFork = this.state.KDJGoldFork;\r\n conditionContent.push({ key: key, cont: this.renderKDJGoldFork() });\r\n //conditionContent.push(this.renderKDJGoldFork());\r\n break;\r\n case 'KDJDeadFork':\r\n KDJDeadFork = this.state.KDJDeadFork;\r\n conditionContent.push({ key: key, cont: this.renderKDJDeadFork() });\r\n //conditionContent.push(this.renderKDJDeadFork());\r\n break;\r\n case 'MACDGoldFork':\r\n MACDGoldFork = this.state.MACDGoldFork;\r\n conditionContent.push({ key: key, cont: this.renderMACDGoldFork() });\r\n //conditionContent.push(this.renderMACDGoldFork());\r\n break;\r\n case 'MACDDeadFork':\r\n MACDDeadFork = this.state.MACDDeadFork;\r\n conditionContent.push({ key: key, cont: this.renderMACDDeadFork() });\r\n //conditionContent.push(this.renderMACDDeadFork());\r\n break;\r\n case 'PriceWearBollinger':\r\n PriceWearBollinger01 = this.state.PriceWearBollinger01;\r\n PriceWearBollinger02 = this.state.PriceWearBollinger02;\r\n conditionContent.push({ key: key, cont: this.renderPriceWearBollinger() });\r\n //conditionContent.push(this.renderPriceWearBollinger());\r\n break;\r\n case 'PriceDownBollinger':\r\n PriceDownBollinger01 = this.state.PriceDownBollinger01;\r\n PriceDownBollinger02 = this.state.PriceDownBollinger02;\r\n conditionContent.push({ key: key, cont: this.renderPriceDownBollinger() });\r\n //conditionContent.push(this.renderPriceDownBollinger());\r\n break;\r\n\r\n //20200605\r\n case 'BuyOneHigherThan': //买一价高于\r\n BuyOneHigherThan = this.state.BuyOneHigherThan;\r\n conditionContent.push({ key: key, cont: this.renderBuyOneHigherThan() });\r\n //conditionContent.push(this.renderBuyOneHigherThan());\r\n break;\r\n case 'SellPriceBelow': //å–一价低于\r\n SellPriceBelow = this.state.SellPriceBelow;\r\n conditionContent.push({ key: key, cont: this.renderSellPriceBelow() });\r\n //conditionContent.push(this.renderSellPriceBelow());\r\n break;\r\n case 'ReachHigh': //高开达到\r\n ReachHigh = this.state.ReachHigh;\r\n conditionContent.push({ key: key, cont: this.renderReachHigh() });\r\n //conditionContent.push(this.renderReachHigh());\r\n break;\r\n case 'GapReachHigh': //跳空高开达到\r\n GapReachHigh = this.state.GapReachHigh;\r\n conditionContent.push({ key: key, cont: this.renderGapReachHigh() });\r\n //conditionContent.push(this.renderGapReachHigh());\r\n break;\r\n case 'Volume': //æˆäº¤é‡\r\n Volume01 = this.state.Volume01;\r\n Volume02 = this.state.Volume02;\r\n conditionContent.push({ key: key, cont: this.renderVolume() });\r\n //conditionContent.push(this.renderVolume());\r\n break;\r\n case 'VolumeRatio': //釿¯”\r\n VolumeRatio = this.state.VolumeRatio;\r\n conditionContent.push({ key: key, cont: this.renderVolumeRatio() });\r\n //conditionContent.push(this.renderVolumeRatio());\r\n break;\r\n case 'DailyAmplitude': //日振幅\r\n DailyAmplitude = this.state.DailyAmplitude;\r\n conditionContent.push({ key: key, cont: this.renderDailyAmplitude() });\r\n //conditionContent.push(this.renderDailyAmplitude());\r\n break;\r\n case 'AnyOnlineWear': //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear01 = this.state.AnyOnlineWear01;\r\n AnyOnlineWear02 = this.state.AnyOnlineWear02;\r\n AnyOnlineWear03 = this.state.AnyOnlineWear03;\r\n AnyOnlineWear04 = this.state.AnyOnlineWear04;\r\n conditionContent.push({ key: key, cont: this.renderAnyOnlineWear() });\r\n //conditionContent.push(this.renderAnyOnlineWear());\r\n break;\r\n case 'AnyMovingAverage': //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage01 = this.state.AnyMovingAverage01;\r\n AnyMovingAverage02 = this.state.AnyMovingAverage02;\r\n AnyMovingAverage03 = this.state.AnyMovingAverage03;\r\n AnyMovingAverage04 = this.state.AnyMovingAverage04;\r\n conditionContent.push({ key: key, cont: this.renderAnyMovingAverage() });\r\n //conditionContent.push(this.renderAnyMovingAverage());\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (VernacularConditions.length > 0) {\r\n for (let k in VernacularConditions) {\r\n conditionContent.push({ key: VernacularConditions[k].key, cont: this.renderVernacularCondition(VernacularConditions[k]) });\r\n //conditionContent.push(this.renderVernacularCondition(VernacularConditions[k]));\r\n }\r\n }\r\n\r\n if (conditionContent.length > 0) {\r\n conditionContent = conditionContent.sort((a, b) => {\r\n return b.key - a.key\r\n });\r\n }\r\n\r\n this.setState({\r\n conditionContent,\r\n\r\n PriceRiseTo,\r\n PriceFellTo,\r\n\r\n ReboundRange01,\r\n ReboundRange02,\r\n Fallback01,\r\n Fallback02,\r\n\r\n DailyIncreaseReached,\r\n DailyDeclineReached,\r\n PriceRise,\r\n PriceFalling,\r\n StockPriceWearOn01,\r\n StockPriceWearOn02,\r\n StockPriceFellBelow01,\r\n StockPriceFellBelow02,\r\n Increase01,\r\n Increase02,\r\n Decline01,\r\n Decline02,\r\n\r\n DailyTurnoverRate,\r\n KDJGoldFork,\r\n KDJDeadFork,\r\n MACDGoldFork,\r\n MACDDeadFork,\r\n\r\n PriceWearBollinger01,\r\n PriceWearBollinger02,\r\n PriceDownBollinger01,\r\n PriceDownBollinger02,\r\n\r\n //20200605\r\n BuyOneHigherThan, //买一价高于\r\n SellPriceBelow, //å–一价低于\r\n\r\n ReachHigh, //高开达到\r\n GapReachHigh, //跳空高开达到\r\n\r\n Volume01, //æˆäº¤é‡\r\n Volume02,\r\n\r\n VolumeRatio, //釿¯”\r\n DailyAmplitude, //日振幅\r\n\r\n AnyOnlineWear01, //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02,\r\n AnyOnlineWear03,\r\n AnyOnlineWear04,\r\n AnyMovingAverage01, //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02,\r\n AnyMovingAverage03,\r\n AnyMovingAverage04,\r\n });\r\n }\r\n\r\n setConditions() {\r\n this.props.hawkeyeConditionParams({\r\n PriceRiseTo: this.state.PriceRiseTo,\r\n PriceFellTo: this.state.PriceFellTo,\r\n\r\n ReboundRange01: this.state.ReboundRange01,\r\n ReboundRange02: this.state.ReboundRange02,\r\n Fallback01: this.state.Fallback01,\r\n Fallback02: this.state.Fallback02,\r\n\r\n DailyIncreaseReached: this.state.DailyIncreaseReached,\r\n DailyDeclineReached: this.state.DailyDeclineReached,\r\n PriceRise: this.state.PriceRise,\r\n PriceFalling: this.state.PriceFalling,\r\n StockPriceWearOn01: this.state.StockPriceWearOn01,\r\n StockPriceWearOn02: this.state.StockPriceWearOn02,\r\n StockPriceFellBelow01: this.state.StockPriceFellBelow01,\r\n StockPriceFellBelow02: this.state.StockPriceFellBelow02,\r\n Increase01: this.state.Increase01,\r\n Increase02: this.state.Increase02,\r\n Decline01: this.state.Decline01,\r\n Decline02: this.state.Decline02,\r\n\r\n DailyTurnoverRate: this.state.DailyTurnoverRate,\r\n KDJGoldFork: this.state.KDJGoldFork,\r\n KDJDeadFork: this.state.KDJDeadFork,\r\n MACDGoldFork: this.state.MACDGoldFork,\r\n MACDDeadFork: this.state.MACDDeadFork,\r\n\r\n PriceWearBollinger01: this.state.PriceWearBollinger01,\r\n PriceWearBollinger02: this.state.PriceWearBollinger02,\r\n PriceDownBollinger01: this.state.PriceDownBollinger01,\r\n PriceDownBollinger02: this.state.PriceDownBollinger02,\r\n\r\n //20200605\r\n BuyOneHigherThan: this.state.BuyOneHigherThan, //买一价高于\r\n SellPriceBelow: this.state.SellPriceBelow, //å–一价低于\r\n\r\n ReachHigh: this.state.ReachHigh, //高开达到\r\n GapReachHigh: this.state.GapReachHigh, //跳空高开达到\r\n\r\n Volume01: this.state.Volume01, //æˆäº¤é‡\r\n Volume02: this.state.Volume02,\r\n VolumeRatio: this.state.VolumeRatio, //釿¯”\r\n DailyAmplitude: this.state.DailyAmplitude, //日振幅\r\n\r\n AnyOnlineWear01: this.state.AnyOnlineWear01, //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02: this.state.AnyOnlineWear02,\r\n AnyOnlineWear03: this.state.AnyOnlineWear03,\r\n AnyOnlineWear04: this.state.AnyOnlineWear04,\r\n AnyMovingAverage01: this.state.AnyMovingAverage01, //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02: this.state.AnyMovingAverage02,\r\n AnyMovingAverage03: this.state.AnyMovingAverage03,\r\n AnyMovingAverage04: this.state.AnyMovingAverage04\r\n });\r\n }\r\n\r\n //验è¯ç›®æ ‡ä»·æ ¼\r\n onChangeTargetDecimal = e => {\r\n e.preventDefault();\r\n\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n let intLen = 12;\r\n let decimalLen = 2;\r\n if (tags === 'Volume02') {\r\n decimalLen = 1;\r\n }\r\n\r\n var price = e.target.value;\r\n price = price.replace(/^\\s+|\\s+$/g, \"\");\r\n if (price.indexOf('.') === 0) {\r\n price = price.replace(/[^\\d]/g, \"\");\r\n }\r\n price = price.replace(/[^\\d.]/g, \"\");\r\n price = price.replace(/\\.{2,3}/g, \".\");\r\n price = price.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n \r\n if (price.length > 0) {\r\n if (price.indexOf('.') < 0) {\r\n if (price.length > intLen) price = price.slice(0, intLen);\r\n price = parseInt(price);\r\n } else {\r\n var tmpNumber = price.split('.');\r\n var tmpNum00 = tmpNumber[0];\r\n if (tmpNum00 > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n tmpNum00 = parseInt(tmpNum00);\r\n\r\n var tmpNum01 = tmpNumber[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n price = tmpNum00 + '.' + tmpNum01;\r\n }\r\n }\r\n\r\n var tmpPrice = {};\r\n tmpPrice[tags] = price;\r\n this.setState(tmpPrice, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n onBlurTargetDecimal = e => {\r\n e.preventDefault();\r\n\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n let intLen = 12;\r\n let decimalLen = 2;\r\n if (tags === 'Volume02') {\r\n decimalLen = 1;\r\n }\r\n\r\n var price = e.target.value;\r\n price = price.replace(/^\\s+|\\s+$/g, \"\");\r\n\r\n if (price.length > 0) {\r\n if (price.indexOf('.') < 0) {\r\n if (price.length > intLen) price = price.slice(0, intLen);\r\n price = parseInt(price);\r\n price = price + '.' + Array(decimalLen + 1).join(0);\r\n } else {\r\n var tmpValue = price.split('.');\r\n var tmpNum00 = tmpValue[0];\r\n if (tmpNum00.length > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n tmpNum00 = parseInt(tmpNum00);\r\n\r\n var tmpNum01 = tmpValue[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n else {\r\n var len = tmpNum01.length;\r\n if (len === 0) {\r\n tmpNum01 = tmpNum01 + Array(decimalLen + 1).join(0);\r\n } else if (len === 1) {\r\n tmpNum01 = tmpNum01 + Array(decimalLen).join(0);\r\n } else if (len === 2) {\r\n tmpNum01 = tmpNum01 + Array(decimalLen - 1).join(0);\r\n }\r\n }\r\n\r\n price = tmpNum00 + '.' + tmpNum01;\r\n }\r\n }\r\n\r\n var tmpPrice = {};\r\n tmpPrice[tags] = price;\r\n this.setState(tmpPrice, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n onChangeInt = (e) => {\r\n e.preventDefault();\r\n \r\n var tags = e.currentTarget.getAttribute('data-value');\r\n\r\n var amplitude = e.target.value;\r\n amplitude = amplitude.replace(/[^\\d]/g, \"\");\r\n\r\n if (amplitude.length > 0) {\r\n if (tags !== \"Volume01\") {\r\n let tmpAmplitude = parseInt(amplitude);\r\n if (tmpAmplitude > 200) amplitude = 200;\r\n } else {\r\n amplitude = amplitude.slice(0, 12);\r\n amplitude = parseInt(amplitude);\r\n }\r\n\r\n amplitude = amplitude + \"\";\r\n }\r\n \r\n var tmpAmplitude = {};\r\n tmpAmplitude[tags] = amplitude;\r\n this.setState(tmpAmplitude, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceRise = value => {\r\n this.setState({ PriceRise: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceFalling = value => {\r\n this.setState({ PriceFalling: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeStockPriceWearOn01 = value => {\r\n this.setState({ StockPriceWearOn01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeStockPriceFellBelow01 = value => {\r\n this.setState({ StockPriceFellBelow01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeIncrease01 = value => {\r\n this.setState({ Increase01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeDecline01 = value => {\r\n this.setState({ Decline01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeKDJGoldFork = value => {\r\n this.setState({ KDJGoldFork: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeKDJDeadFork = value => {\r\n this.setState({ KDJDeadFork: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeMACDGoldFork = value => {\r\n this.setState({ MACDGoldFork: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeMACDDeadFork = value => {\r\n this.setState({ MACDDeadFork: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceWearBollinger01 = value => {\r\n this.setState({ PriceWearBollinger01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceWearBollinger02 = value => {\r\n this.setState({ PriceWearBollinger02: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceDownBollinger01 = value => {\r\n this.setState({ PriceDownBollinger01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangePriceDownBollinger02 = value => {\r\n this.setState({ PriceDownBollinger02: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeAnyOnlineWear01 = value => {\r\n this.setState({ AnyOnlineWear01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeAnyOnlineWear03 = value => {\r\n this.setState({ AnyOnlineWear03: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeAnyMovingAverage01 = value => {\r\n this.setState({ AnyMovingAverage01: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n handleChangeAnyMovingAverage03 = value => {\r\n this.setState({ AnyMovingAverage03: value }, () => {\r\n this.setConditions();\r\n });\r\n }\r\n\r\n onClickClose = e => {\r\n var { conditions, VernacularConditions } = this.props;\r\n\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n conditions = conditions.filter(function (item) { return item.name !== tags });\r\n VernacularConditions = VernacularConditions.filter(function (item) { return item.key !== tags });\r\n\r\n this.props.hawkeyeConditions({ conditions: conditions, VernacularConditions: VernacularConditions });\r\n }\r\n\r\n //ä»·æ ¼æ¶¨åˆ°\r\n renderPriceRiseTo() {\r\n return <Row key='PriceRiseTo' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['PriceRiseTo']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.PriceRiseTo} addonBefore={languageMessages['usd']} addonAfter={languageMessages['yuan']} placeholder={languageMessages['PleaseEnterTargetPrice']} data-value='PriceRiseTo' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['priceHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceRiseTo' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼è·Œåˆ°\r\n renderPriceFellTo() {\r\n return <Row key='PriceFellTo' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['PriceFellTo']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.PriceFellTo} addonBefore={languageMessages['usd']} addonAfter={languageMessages['yuan']} placeholder={languageMessages['PleaseEnterTargetPrice']} data-value='PriceFellTo' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['priceHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceFellTo' /></Col>\r\n </Row>;\r\n }\r\n\r\n //上涨回è½\r\n renderReboundRange() {\r\n return <Row key='ReboundRange' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['priceUpTo']}</span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.ReboundRange01} placeholder={languageMessages['priceNotEmpty']} data-value='ReboundRange01' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['huiLuo']}</span>\r\n <Input style={{ width: 168 }} size='small' value={this.state.ReboundRange02} placeholder={languageMessages['priceDiffNotEmpty']} data-value='ReboundRange02' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['priceHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='ReboundRange' /></Col>\r\n </Row>;\r\n }\r\n\r\n //下跌åå¼¹\r\n renderFallback() {\r\n return <Row key='Fallback' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['priceDownTo']}</span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.Fallback01} placeholder={languageMessages['priceNotEmpty']} data-value='Fallback01' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['Bounce']}</span>\r\n <Input style={{ width: 168 }} size='small' value={this.state.Fallback02} placeholder={languageMessages['priceDiffNotEmpty']} data-value='Fallback02' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['priceHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='Fallback' /></Col>\r\n </Row>;\r\n }\r\n\r\n //日涨幅达到\r\n renderDailyIncreaseReached() {\r\n return <Row key='DailyIncreaseReached' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['dayIncreaseReach']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.DailyIncreaseReached} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterIncrease']} data-value='DailyIncreaseReached' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='DailyIncreaseReached' /></Col>\r\n </Row>;\r\n }\r\n\r\n //日跌幅达到\r\n renderDailyDeclineReached() {\r\n return <Row key='DailyDeclineReached' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['dayDeclineReach']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.DailyDeclineReached} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterDecline']} data-value='DailyDeclineReached' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='DailyDeclineReached' /></Col>\r\n </Row>;\r\n }\r\n\r\n //涨幅达到\r\n renderIncrease() {\r\n return <Row key='Increase' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.Increase01} style={{ width: 160 }} onChange={this.handleChangeIncrease01}>\r\n <Option value=\"1\">{languageMessages['1MinInside']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinInside']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinInside']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinInside']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinInside']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinInside']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinInside']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinInside']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['increaseReach']}</span>\r\n <Input style={{ width: 138 }} size='small' value={this.state.Increase02} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterIncrease']} data-value='Increase02' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='Increase' /></Col>\r\n </Row>;\r\n }\r\n\r\n //跌幅达到\r\n renderDecline() {\r\n return <Row key='Decline' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.Decline01} style={{ width: 160 }} onChange={this.handleChangeDecline01}>\r\n <Option value=\"1\">{languageMessages['1MinInside']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinInside']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinInside']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinInside']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinInside']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinInside']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinInside']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinInside']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['declineReach']}</span>\r\n <Input style={{ width: 138 }} size='small' value={this.state.Decline02} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterDecline']} data-value='Decline02' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='Decline' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸Šæ¶¨åˆ›\r\n renderPriceRise() {\r\n return <Row key='PriceRise' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['priceUpWound']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceRise} style={{ width: 200 }} onChange={this.handleChangePriceRise}>\r\n <Option value=\"5\">{languageMessages['5DayHigh']}</Option>\r\n <Option value=\"10\">{languageMessages['10DayHigh']}</Option>\r\n <Option value=\"20\">{languageMessages['20DayHigh']}</Option>\r\n <Option value=\"30\">{languageMessages['30DayHigh']}</Option>\r\n <Option value=\"60\">{languageMessages['60DayHigh']}</Option>\r\n <Option value=\"120\">{languageMessages['120DayHigh']}</Option>\r\n <Option value=\"200\">{languageMessages['200DayHigh']}</Option>\r\n <Option value=\"0\">{languageMessages['historyHigh']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceRise' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸‹è·Œåˆ›\r\n renderPriceFalling() {\r\n return <Row key='PriceFalling' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['priceDownWound']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceFalling} style={{ width: 200 }} onChange={this.handleChangePriceFalling}>\r\n <Option value=\"5\">{languageMessages['5DayLow']}</Option>\r\n <Option value=\"10\">{languageMessages['10DayLow']}</Option>\r\n <Option value=\"20\">{languageMessages['20DayLow']}</Option>\r\n <Option value=\"30\">{languageMessages['30DayLow']}</Option>\r\n <Option value=\"60\">{languageMessages['60DayLow']}</Option>\r\n <Option value=\"120\">{languageMessages['120DayLow']}</Option>\r\n <Option value=\"200\">{languageMessages['200DayLow']}</Option>\r\n <Option value=\"0\">{languageMessages['historyLow']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceFalling' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸Šç©¿\r\n renderStockPriceWearOn() {\r\n return <Row key='StockPriceWearOn' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['StockPriceUp']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.StockPriceWearOn01} style={{ width: 160 }} onChange={this.handleChangeStockPriceWearOn01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 80 }} size='small' value={this.state.StockPriceWearOn02} placeholder={languageMessages['PleaseEnterInteger']} data-value='StockPriceWearOn02' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='StockPriceWearOn' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸‹ç©¿\r\n renderStockPriceFellBelow() {\r\n return <Row key='StockPriceFellBelow' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['StockPriceDown']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.StockPriceFellBelow01} style={{ width: 160 }} onChange={this.handleChangeStockPriceFellBelow01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 80 }} size='small' value={this.state.StockPriceFellBelow02} placeholder={languageMessages['PleaseEnterInteger']} data-value='StockPriceFellBelow02' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='StockPriceFellBelow' /></Col>\r\n </Row>;\r\n }\r\n\r\n //æ—¥æ¢æ‰‹çއ\r\n renderDailyTurnoverRate() {\r\n return <Row key='DailyTurnoverRate' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['DailyTurnoverRate']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['reach']}</span>\r\n <Input style={{ width: window.webType === 'US' ? 181 : 165 }} size='small' value={this.state.DailyTurnoverRate} addonAfter=\"%\" placeholder={languageMessages['pleaseEnterTargetTurnoverRate']} data-value='DailyTurnoverRate' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='DailyTurnoverRate' /></Col>\r\n </Row>;\r\n }\r\n\r\n //KDJ金å‰\r\n renderKDJGoldFork() {\r\n return <Row key='KDJGoldFork' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.KDJGoldFork} style={{ width: 160 }} onChange={this.handleChangeKDJGoldFork}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['KDJGoldFork']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'></Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='KDJGoldFork' /></Col>\r\n </Row>;\r\n }\r\n\r\n //KDJæ»å‰\r\n renderKDJDeadFork() {\r\n return <Row key='KDJDeadFork' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.KDJDeadFork} style={{ width: 160 }} onChange={this.handleChangeKDJDeadFork}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['KDJDeadFork']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'></Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='KDJDeadFork' /></Col>\r\n </Row>;\r\n }\r\n\r\n //MACD金å‰\r\n renderMACDGoldFork() {\r\n return <Row key='MACDGoldFork' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.MACDGoldFork} style={{ width: 160 }} onChange={this.handleChangeMACDGoldFork}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['MACDGoldFork']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'></Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='MACDGoldFork' /></Col>\r\n </Row>;\r\n }\r\n\r\n //MACDæ»å‰\r\n renderMACDDeadFork() {\r\n return <Row key='MACDDeadFork' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.MACDDeadFork} style={{ width: 160 }} onChange={this.handleChangeMACDDeadFork}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['MACDDeadFork']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'></Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='MACDDeadFork' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸Šç©¿å¸ƒæž—çº¿\r\n renderPriceWearBollinger() {\r\n return <Row key='PriceWearBollinger' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceWearBollinger01} style={{ width: 160 }} onChange={this.handleChangePriceWearBollinger01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['priceUp']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceWearBollinger02} style={{ width: 200 }} onChange={this.handleChangePriceWearBollinger02}>\r\n <Option value=\"up\">{languageMessages['bollingerOnRail']}</Option>\r\n <Option value=\"mid\">{languageMessages['bollingerMidRail']}</Option>\r\n <Option value=\"down\">{languageMessages['bollingerLowRail']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceWearBollinger' /></Col>\r\n </Row>;\r\n }\r\n\r\n //ä»·æ ¼ä¸‹ç©¿å¸ƒæž—çº¿\r\n renderPriceDownBollinger() {\r\n return <Row key='PriceDownBollinger' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceDownBollinger01} style={{ width: 160 }} onChange={this.handleChangePriceDownBollinger01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ padding: '0 5px' }}>{languageMessages['priceDown']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.PriceDownBollinger02} style={{ width: 200 }} onChange={this.handleChangePriceDownBollinger02}>\r\n <Option value=\"up\">{languageMessages['bollingerOnRail']}</Option>\r\n <Option value=\"mid\">{languageMessages['bollingerMidRail']}</Option>\r\n <Option value=\"down\">{languageMessages['bollingerLowRail']}</Option>\r\n </Select>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='PriceDownBollinger' /></Col>\r\n </Row>;\r\n }\r\n\r\n //20200605\r\n renderBuyOneHigherThan() {\r\n return <Row key='BuyOneHigherThan' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['BuyOneHigherThan']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.BuyOneHigherThan} addonBefore={languageMessages['usd']} addonAfter={languageMessages['yuan']} placeholder={languageMessages['PleaseEnterTargetPrice']} data-value='BuyOneHigherThan' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='BuyOneHigherThan' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderSellPriceBelow() {\r\n return <Row key='SellPriceBelow' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['SellPriceBelow']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.SellPriceBelow} addonBefore={languageMessages['usd']} addonAfter={languageMessages['yuan']} placeholder={languageMessages['PleaseEnterTargetPrice']} data-value='SellPriceBelow' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='SellPriceBelow' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderReachHigh() {\r\n return <Row key='ReachHigh' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['ReachHigh']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.ReachHigh} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterTargetExtent']} data-value='ReachHigh' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='ReachHigh' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderGapReachHigh() {\r\n return <Row key='GapReachHigh' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['GapReachHigh']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.GapReachHigh} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterTargetExtent']} data-value='GapReachHigh' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='GapReachHigh' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderVolume() {\r\n return <Row key='Volume' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['VolumeIsPast']}</span>\r\n <Input style={{ width: 125 }} size='small' value={this.state.Volume01} addonAfter={languageMessages['day']} placeholder={languageMessages['PleaseEnterDays']} data-value='Volume01' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['Average']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.Volume02} addonAfter={languageMessages['multiple']} placeholder={languageMessages['PleaseEnterMultiple']} data-value='Volume02' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='Volume' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderVolumeRatio() {\r\n return <Row key='VolumeRatio' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['VolumeRatioThan']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Input style={{ width: 200 }} size='small' value={this.state.VolumeRatio} placeholder={languageMessages['PleaseEnterVolumeRatio']} data-value='VolumeRatio' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='VolumeRatio' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderDailyAmplitude() {\r\n return <Row key='DailyAmplitude' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['DailyAmplitude']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['reach']}</span>\r\n <Input style={{ width: window.webType === 'US' ? 181 : 165 }} size='small' value={this.state.DailyAmplitude} addonAfter=\"%\" placeholder={languageMessages['PleaseEnterTargetAmplitude']} data-value='DailyAmplitude' onChange={this.onChangeTargetDecimal} onBlur={this.onBlurTargetDecimal} />\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='DailyAmplitude' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderAnyOnlineWear() {\r\n return <Row key='AnyOnlineWear' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.AnyOnlineWear01} style={{ width: 160 }} onChange={this.handleChangeAnyOnlineWear01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.AnyOnlineWear02} placeholder={languageMessages['PleaseEnterInteger']} data-value='AnyOnlineWear02' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['UpperOvergo']}</span>\r\n <Select size='small' value={this.state.AnyOnlineWear03} style={{ width: 160 }} onChange={this.handleChangeAnyOnlineWear03}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.AnyOnlineWear04} placeholder={languageMessages['PleaseEnterInteger']} data-value='AnyOnlineWear04' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='AnyOnlineWear' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderAnyMovingAverage() {\r\n return <Row key='AnyMovingAverage' className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <Select size='small' value={this.state.AnyMovingAverage01} style={{ width: 160 }} onChange={this.handleChangeAnyMovingAverage01}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.AnyMovingAverage02} placeholder={languageMessages['PleaseEnterInteger']} data-value='AnyMovingAverage02' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={9} className='common-hawkeye-condition'>\r\n <span style={{ paddingRight: '5px' }}>{languageMessages['UnderOvergo']}</span>\r\n <Select size='small' value={this.state.AnyMovingAverage03} style={{ width: 160 }} onChange={this.handleChangeAnyMovingAverage03}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n <span style={{ paddingLeft: '5px' }}></span>\r\n <Input style={{ width: 100 }} size='small' value={this.state.AnyMovingAverage04} placeholder={languageMessages['PleaseEnterInteger']} data-value='AnyMovingAverage04' onChange={this.onChangeInt} />\r\n <span style={{ paddingLeft: '5px' }}>{languageMessages['AvgLine']}</span>\r\n </Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['condHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value='AnyMovingAverage' /></Col>\r\n </Row>;\r\n }\r\n\r\n renderVernacularCondition(VernacularCondition) {\r\n var useFormulas = [];\r\n var items = VernacularCondition.formula.split('\\n');\r\n for (var item in items) {\r\n if (useFormulas.length > 0) useFormulas.push(<br key={item} />);\r\n useFormulas.push(items[item]);\r\n }\r\n\r\n return <Row key={VernacularCondition.key} className='common-hawkeye-cell'>\r\n <Col span={9} className='common-hawkeye-condition'>{VernacularCondition.name}</Col>\r\n <Col span={9} className='common-hawkeye-condition'><code>{useFormulas}</code></Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['vernacularHawkeye']}</Col>\r\n <Col span={2}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value={VernacularCondition.key} /></Col>\r\n </Row>;\r\n }\r\n\r\n render() {\r\n return (<div style={{ display: this.props.hidden }}>\r\n <Row className='common-hawkeye-head'>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['hCondition']}</Col>\r\n <Col span={9} className='common-hawkeye-condition'>{languageMessages['correspond.formula'] +'\\\\'+ languageMessages['value']}</Col>\r\n <Col span={4} className='common-hawkeye-condition'>{languageMessages['type']}</Col>\r\n <Col span={2}>{languageMessages['control']}</Col>\r\n </Row>\r\n {\r\n this.state.conditionContent.map(item => {\r\n return item.cont;\r\n })\r\n }\r\n </div>);\r\n }\r\n}\r\n\r\nexport { HawkeyeCondition as default }","import React, { Component } from 'react';\r\nimport AnyChart from 'anychart-react';\r\nimport anychart from 'anychart';\r\nimport { Layout, Select, AutoComplete, LocaleProvider, DatePicker, Row, Col, Radio, Icon } from 'antd';\r\nimport moment, { locales } from 'moment';\r\n\r\nimport emitter from '../../Evt.js';\r\n\r\nimport zh_CN from 'antd/lib/locale-provider/zh_CN';\r\n\r\nimport 'moment/locale/zh-cn';\r\n\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nDate.prototype.format = function (fmt) {\r\n var o = {\r\n \"M+\": this.getMonth() + 1, //月份 \r\n \"d+\": this.getDate(), //æ—¥ \r\n \"h+\": this.getHours(), //å°æ—¶ \r\n \"m+\": this.getMinutes(), //分 \r\n \"s+\": this.getSeconds(), //ç§’ \r\n \"q+\": Math.floor((this.getMonth() + 3) / 3), //å£åº¦ \r\n \"S\": this.getMilliseconds() //毫秒 \r\n };\r\n if (/(y+)/.test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (this.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n }\r\n for (var k in o) {\r\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n }\r\n }\r\n return fmt;\r\n}\r\n\r\n//ç”Ÿæˆæ•°æ®\r\nfunction generate5MinsOHLCData(startDate, rowsCount, openValue, spread, opt_startVolume) {\r\n function rand(opt_spreadMult, opt_spreadAdd) {\r\n var spreadMult = (isNaN(opt_spreadMult) ? 1 : opt_spreadMult) * spread;\r\n var spreadAdd = isNaN(opt_spreadAdd) ? -0.5 : +opt_spreadAdd;\r\n return Math.round(((Math.random() * spreadMult) + spreadMult * spreadAdd) * 100) * 0.01;\r\n }\r\n\r\n function randVolume(opt_prev) {\r\n if (!opt_prev)\r\n return Math.round(Math.random() * 1e3) + 1e3;\r\n var diff = Math.round(Math.random() * 2e2) - 4e2;\r\n return Math.abs(opt_prev + diff);\r\n }\r\n\r\n function nextDate(date) {\r\n date.setTime(date.getTime() + 1000 * 60 * 5);\r\n if (date.getUTCHours() > 18) {\r\n date.setUTCDate(date.getUTCDate() + 1);\r\n date.setUTCHours(9);\r\n }\r\n if (date.getUTCDay() == 6) {\r\n date.setUTCDate(date.getUTCDate() + 2);\r\n } else if (date.getUTCDay() == 0) {\r\n date.setUTCDate(date.getUTCDate() + 1);\r\n }\r\n }\r\n\r\n startDate = startDate instanceof Date ? startDate : new Date(startDate);\r\n var current = new Date(startDate.getTime());\r\n var index = -1;\r\n\r\n var data = [];\r\n var open = openValue, close, high, low;\r\n var volume = randVolume(opt_startVolume);\r\n while (++index < rowsCount) {\r\n var diff = rand();\r\n close = open + diff;\r\n if (close < 0) close = open - diff;\r\n high = Math.max(open, close) + rand(0.2, 0);\r\n low = Math.max(Math.min(open, close) - rand(0.2, 0), 0);\r\n volume = randVolume(volume);\r\n data.push([\r\n current.getTime(),\r\n open,\r\n high,\r\n low,\r\n close,\r\n volume\r\n ]);\r\n open = close + rand(0.0001);\r\n nextDate(current);\r\n }\r\n return {\r\n data: data,\r\n lastValue: open,\r\n lastDate: current,\r\n lastVolume: volume\r\n };\r\n}\r\n/**\r\nvar rawData = {\r\n data: [],\r\n lastValue: 100,\r\n lastDate: new Date(new Date().getUTCFullYear() - 4, 0),\r\n lastVolume: 100\r\n};\r\n*/\r\n\r\nvar rawData = [];\r\n\r\nvar streamingTimerId;\r\n\r\nvar chart;\r\nvar dataTable;\r\nvar plot;\r\n\r\nvar mainMapping;\r\n\r\nvar chartHeight = 500;\r\n\r\nvar streamPointsCount = 500;\r\nvar streamingInterval = 1000;\r\n\r\nvar index = 0;\r\n\r\nvar requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\r\n\r\nvar datetime = '2019-02-26';\r\n\r\n// 周期\r\nvar timeSharing = 1440;\r\n\r\n\r\n// å¼€å§‹æ—¶é—´ï¼Œç»“æŸæ—¶é—´ï¼Œæœ€å°ï¼Œæœ€å¤§ï¼Œå®½ï¼Œé«˜ï¼Œä½ç½®\r\nvar chartInfo = { sDate: 0, eDate: 0, min: 0, max: 0, w: 0, h: 0, nPos: 0 };\r\n\r\n//chart系统设置\r\nvar locale = \"zh-cn\";\r\nvar timeZoneOffset = new Date().getTimezoneOffset();\r\nvar dateFormat = 'yyyy-MM-dd HH:mm:ss';\r\n\r\nanychart.format.outputLocale(locale);\r\nanychart.format.outputTimezone(timeZoneOffset);\r\nanychart.format.outputDateTimeFormat(dateFormat);\r\n\r\nclass HawkeyeKLine extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n historyDataItems: [],\r\n profitRange: [],\r\n\r\n translateX: 208,\r\n translateY: 60,\r\n\r\n estimatedDaysDisplay: 'block',//block\r\n targetPriceDisplay: 'block',//block\r\n\r\n }\r\n\r\n this.moving = false;\r\n this.lastX = null;\r\n this.lastY = null;\r\n window.onmouseup = e => this.onMouseUp(e);\r\n window.onmousemove = e => this.onMouseMove(e);\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('callTickData', (hd, pr) => {\r\n var { historyDataItems } = this.state;\r\n historyDataItems = historyDataItems.concat(hd);\r\n this.setState({ historyDataItems, profitRange: pr }, () => {\r\n this.renderChart();\r\n });\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n }\r\n\r\n componentWillUpdate() {\r\n }\r\n \r\n componentWillReceiveProps(props) {\r\n //console.log('componentWillReceiveProps');\r\n }\r\n\r\n onMouseDown(e) {\r\n //e.stopPropagation();\r\n //this.moving = true;\r\n }\r\n\r\n onMouseUp() {\r\n this.moving = false;\r\n this.lastX = null;\r\n this.lastY = null;\r\n }\r\n\r\n onMouseMove(e) {\r\n this.moving && this.onMove(e);\r\n }\r\n\r\n onMove(e) {\r\n if (this.lastX && this.lastY) {\r\n let dx = e.clientX - this.lastX;\r\n let dy = e.clientY - this.lastY;\r\n\r\n let vy = this.state.translateY + dy;\r\n if (vy < 0) vy = 0;\r\n if (vy > chartInfo.h) vy = chartInfo.h;\r\n\r\n let hx = this.state.translateX + dx;\r\n if (hx < 56) hx = 56;\r\n if (hx > chartInfo.w) hx = chartInfo.w;\r\n\r\n let { targetPriceDisplay, estimatedDaysDisplay } = this.state;\r\n if (targetPriceDisplay === 'block' && estimatedDaysDisplay === 'block') {\r\n this.setState({ translateX: hx, translateY: vy });\r\n } else if (targetPriceDisplay === 'block') {\r\n this.setState({ translateY: vy });\r\n } else if (estimatedDaysDisplay === 'block') {\r\n this.setState({ translateX: hx });\r\n }\r\n }\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n }\r\n\r\n onTargetPriceLine = () => {\r\n let { targetPriceDisplay } = this.state;\r\n\r\n targetPriceDisplay = targetPriceDisplay === 'block' ? 'none' : 'block';\r\n this.setState({ targetPriceDisplay });\r\n }\r\n\r\n onEstimatedTargetPriceDays = () => {\r\n let { estimatedDaysDisplay } = this.state;\r\n\r\n estimatedDaysDisplay = estimatedDaysDisplay === 'block' ? 'none' : 'block';\r\n this.setState({ estimatedDaysDisplay });\r\n }\r\n\r\n onTimeSharing = (e) => {\r\n var nodes = document.querySelectorAll('.stock-info-btn');\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].classList.contains(\"active\")) {\r\n nodes[i].classList.remove(\"active\");\r\n }\r\n }\r\n\r\n e.target.classList.add(\"active\");\r\n\r\n timeSharing = e.currentTarget.getAttribute('data-value');\r\n //console.log('timeSharing', timeSharing);\r\n }\r\n\r\n startStreaming() {\r\n streamingTimerId = setInterval(function () {\r\n if (requestAnimationFrame) {\r\n requestAnimationFrame(streamData);\r\n } else {\r\n streamData();\r\n }\r\n\r\n function streamData() {\r\n // 请求数æ®\r\n rawData = generate5MinsOHLCData(rawData.lastDate, streamPointsCount, rawData.lastValue, 10, rawData.lastVolume);\r\n\r\n //dataTable.addData(rawData.data, true);\r\n dataTable.addData(rawData.data);\r\n rawData.data = null;\r\n\r\n }\r\n\r\n }, streamingInterval);\r\n }\r\n\r\n renderChart() {\r\n function getDateTime(dt) {\r\n var df = dateFormat;\r\n switch (timeSharing) {\r\n case 0:\r\n df = 'HH:mm';\r\n break;\r\n case 5:\r\n df = 'MM/dd HH:mm';\r\n break;\r\n case 60:\r\n df = 'MM/dd HH:mm';\r\n break;\r\n case 1440:\r\n df = 'yyyy/MM/dd';\r\n break;\r\n case 10080:\r\n df = 'yyyy/MM/dd';\r\n break;\r\n default:\r\n break;\r\n }\r\n return anychart.format.dateTime(dt, df, timeZoneOffset, locale);\r\n }\r\n\r\n var { historyDataItems, profitRange } = this.state;\r\n\r\n if (historyDataItems.length > 0) {\r\n dataTable = anychart.data.table(\"BarStart\");\r\n dataTable.addData(historyDataItems);\r\n mainMapping = dataTable.mapAs({ open: \"Open\", high: \"High\", low: \"Low\", close: \"Close\", volume: \"Volume\" });\r\n\r\n //mainMapping = dataTable.mapAs();\r\n // first 3 fields for OHLC and Candlestick\r\n //mainMapping.addField('Open', 1, 'first');\r\n //mainMapping.addField('High', 2, 'max');\r\n //mainMapping.addField('Low', 3, 'min');\r\n //mainMapping.addField('Close', 4, 'last');\r\n // this one for line and spline\r\n //mainMapping.addField('value', 4, 'last');\r\n\r\n //columnMapping = dataTable.mapAs();\r\n //columnMapping.addField('value', 5, 'sum');\r\n\r\n //scrollerMapping = dataTable.mapAs();\r\n //scrollerMapping.addField('value', 4, 'last');\r\n\r\n var chartContainer = document.getElementById('chartContainer');\r\n var childs = chartContainer.childNodes;\r\n for (var i = childs.length - 1; i >= 0; i--) {\r\n chartContainer.removeChild(childs[i]);\r\n }\r\n\r\n chart = anychart.stock();\r\n\r\n //******************** è®¾ç½®ä¸æ˜¾ç¤ºåŒºåŸŸç»„ä»¶ *********************/\r\n chart.scroller().enabled(false);\r\n\r\n /**\r\n chart.scroller().xAxis().labels().format(function () {\r\n return anychart.format.dateTime(this.tickValue, \"HH:mm\");\r\n });\r\n chart.crosshair(false);\r\n */\r\n var _this = this;\r\n chart.crosshair().displayMode(\"float\");\r\n chart.crosshair().xLabel().format(function () {\r\n console.log('x this', this);\r\n\r\n /**\r\n * let { targetPriceDisplay, estimatedDaysDisplay } = this.state;\r\n if (targetPriceDisplay === 'block' && estimatedDaysDisplay === 'block') {\r\n this.setState({ translateX: hx, translateY: vy });\r\n } else if (targetPriceDisplay === 'block') {\r\n this.setState({ translateY: vy });\r\n } else if (estimatedDaysDisplay === 'block') {\r\n this.setState({ translateX: hx });\r\n }\r\n */\r\n return getDateTime(this.tickValue);\r\n });\r\n chart.crosshair().yLabel().format(function () {\r\n \r\n var vy = (this.max - this.value) / ((this.max - this.min) / chartInfo.h);\r\n\r\n let { targetPriceDisplay } = _this.state;\r\n if (targetPriceDisplay === 'block') {\r\n _this.setState({ translateY: vy });\r\n }\r\n \r\n return this.value;\r\n });\r\n\r\n chart.tooltip(false);\r\n chart.tooltip().titleFormat(function () {\r\n var dt = isNaN(this.points[0].x) ? isNaN(this.points[1].x) ? '' : this.points[1].x : this.points[0].x;\r\n if (dt === '') return '';\r\n console.log('this.points',this.points);\r\n return getDateTime(dt);\r\n });\r\n\r\n chart.padding(10, 66, 10, 66);\r\n\r\n chart.credits().enabled(false);\r\n\r\n //chart.scroller().line(scrollerMapping);\r\n\r\n //////////////////////////////////////////////////////////////\r\n\r\n plot = chart.plot(0);\r\n plot.legend(false);\r\n\r\n // K线图\r\n var series = plot.candlestick(mainMapping);\r\n\r\n series.normal().fallingFill(\"#438f4f\");\r\n series.normal().fallingStroke(\"#438f4f\");\r\n\r\n series.normal().risingFill(\"#da3634\", 0);\r\n series.normal().risingStroke(\"#da3634\");\r\n\r\n \r\n\r\n // 最新价\r\n var indicator = plot.priceIndicator();\r\n indicator.axis(chart.plot(0).yAxis(1));\r\n indicator.value('last-visible');\r\n\r\n indicator.stroke(\"#2655D9\");\r\n //indicator.stroke(\"#2655D9\", 2, \"2 2\");\r\n var tmpLabel = indicator.label();\r\n\r\n tmpLabel.fontColor(\"#666\");\r\n tmpLabel.padding(0);\r\n //tmpLabel.offsetX(-66);\r\n tmpLabel.width(66);\r\n tmpLabel.height(30);\r\n\r\n var bg = tmpLabel.background();\r\n bg.stroke(\"#2655D9\");\r\n bg.fill(\"#FFF\");\r\n tmpLabel.useHtml(true).format(function () {\r\n return this.value.toFixed(2) + '<br /> 最新价';\r\n });\r\n\r\n plot.yGrid(true);\r\n plot.xGrid(true);\r\n plot.xGrid().stroke({ color: \"#ccc\", dash: \"3 5\" });\r\n plot.yGrid().stroke({ color: \"#ccc\", dash: \"3 5\" });\r\n \r\n plot.yAxis(1).orientation('right');\r\n \r\n\r\n // xè½´\r\n plot.xAxis().labels().format(function (value) {\r\n var date = new Date(value[\"tickValue\"]);\r\n var options = {\r\n year: \"numeric\",\r\n month: \"short\"\r\n };\r\n\r\n return date.toLocaleDateString(locale, options);\r\n });\r\n //plot.yAxis().labels().offsetX(0);\r\n \r\n\r\n // attach it to all required events\r\n chart.listen(\"selectedrangechangestart\", function (e) {\r\n chartInfo.sDate = e.firstSelected;\r\n chartInfo.eDate = e.lastSelected;\r\n //console.log('selectedrangechangestart', e);\r\n //console.log('selectedrangechangestart', getDateTime(e.firstSelected), getDateTime(e.lastSelected));\r\n });\r\n chart.listen(\"selectedrangebeforechange\", function (e) {\r\n chartInfo.sDate = e.firstSelected;\r\n chartInfo.eDate = e.lastSelected;\r\n //console.log('selectedrangebeforechange', e);\r\n //console.log('selectedrangebeforechange', getDateTime(e.firstSelected), getDateTime(e.lastSelected));\r\n });\r\n chart.listen(\"selectedrangechange\", function (e) {\r\n chartInfo.sDate = e.firstSelected;\r\n chartInfo.eDate = e.lastSelected;\r\n //console.log('selectedrangechange', getDateTime(e.firstSelected), getDateTime(e.lastSelected));\r\n });\r\n chart.listen(\"selectedrangechangefinish\", function (e) {\r\n chartInfo.sDate = e.firstSelected;\r\n chartInfo.eDate = e.lastSelected;\r\n //console.log('selectedrangechangefinish', e);\r\n //console.log('selectedrangechangefinish', getDateTime(e.firstSelected), getDateTime(e.lastSelected));\r\n });\r\n\r\n chart.container('chartContainer');\r\n chart.draw();\r\n\r\n\r\n //chart.xMinorGrid(true);\r\n //chart.yMinorGrid(true);\r\n\r\n //plot.yGrid().enabled(true);\r\n\r\n \r\n\r\n var lastDate = '';\r\n //*************************** 交易区域 *******************************/\r\n if (profitRange.length > 0) {\r\n\r\n // å³ä¾§ç©ºé—´\r\n /**\r\n chart.xScale().maximumGap({\r\n intervalsCount: 15,\r\n unitType: 'day',//second,minute,hour,day,week\r\n unitCount: 0\r\n });\r\n */\r\n chartInfo.w = chart.getPixelBounds().width - 76;\r\n\r\n //chartInfo.w = plot.getPixelBounds().width;\r\n chartInfo.h = plot.yAxis().getPixelBounds().height;\r\n console.log('chartInfo', chartInfo);\r\n\r\n var items = [];\r\n var firstDate = '';\r\n\r\n for (var i in profitRange) {\r\n if (firstDate === '') firstDate = profitRange[i].BarStart;\r\n lastDate = profitRange[i].BarStart;\r\n\r\n var tmp = [];\r\n tmp.push(lastDate);\r\n tmp.push(profitRange[i].StopLoss);\r\n tmp.push(profitRange[i].TakeProfit);\r\n\r\n items.push(tmp);\r\n }\r\n\r\n var profitRangeTable = anychart.data.table();\r\n profitRangeTable.addData(items);\r\n //var areas = plot.rangeSplineArea(items);\r\n var areas = plot.rangeSplineArea(profitRangeTable.mapAs({ 'x': 0, 'high': 1, 'low': 2 }));\r\n\r\n areas.highStroke('#F5A623', 1, 1, 'round', 'round');\r\n areas.lowStroke('#F5A623', 1, 1, 'round', 'round');\r\n areas.fill('#FFEAC7');\r\n\r\n // åŠ ä¸€å¤©ï¼Œé“ºæ»¡æ˜¾ç¤ºåŒº\r\n var tmpLastDate = moment(lastDate).add(1, 'day').format('YYYY-MM-DD');\r\n\r\n var rangeMarker = plot.rangeMarker(0);\r\n rangeMarker.from(firstDate);\r\n rangeMarker.to(tmpLastDate);\r\n rangeMarker.fill('#D1E3FF 0.3403');\r\n rangeMarker.axis(plot.xAxis());\r\n\r\n /**\r\n // ç›®æ ‡ä»·\r\n var horizontalLine = plot.annotations().horizontalLine({\r\n valueAnchor: profitRange[5].TakeProfit,\r\n normal: { stroke: \"1 #9013FE\" },\r\n hovered: { stroke: \"1 #9013FE\" },\r\n selected: { stroke: \"1 #9013FE\" },\r\n zIndex: 99\r\n });\r\n\r\n var right = chartInfo.w / 2 - 31;\r\n\r\n var horizontalMarkers = horizontalLine.markers();\r\n horizontalMarkers.enabled(true);\r\n horizontalMarkers.size(30);\r\n horizontalMarkers.stroke('#9013FE');\r\n horizontalMarkers.fill('#FFF');\r\n horizontalMarkers.type('line');\r\n horizontalMarkers.rotation(90);\r\n horizontalMarkers.offsetX(right);\r\n horizontalMarkers.zIndex(100);\r\n\r\n\r\n var firstDate = profitRange[0].BarStart;\r\n // 设置最大æŒä»“期\r\n var verticalLine = plot.annotations().verticalLine({\r\n xAnchor: firstDate,\r\n normal: { stroke: \"1 #9013FE\" },\r\n hovered: { stroke: \"1 #9013FE\" },\r\n selected: { stroke: \"1 #9013FE\" },\r\n zIndex: 99\r\n });\r\n\r\n var top = 0 - chartInfo.h / 2 + 30;\r\n\r\n var markers = verticalLine.markers();\r\n markers.enabled(true);\r\n markers.size(30);\r\n markers.stroke('#9013FE');\r\n markers.fill('#FFF');\r\n markers.type('line');\r\n //markers.rotation(90);\r\n markers.offsetY(top);\r\n\r\n var verticalLineLabel = plot.annotations().label();\r\n\r\n var barEndTime = historyDataItems[historyDataItems.length - 1].BarStart;\r\n verticalLineLabel.xAnchor(barEndTime);\r\n verticalLineLabel.valueAnchor(chartInfo.max);\r\n\r\n var bg = verticalLineLabel.background();\r\n bg.stroke('0 #FFF');\r\n bg.fill('#FFF');\r\n verticalLineLabel.fontColor('#666');\r\n verticalLineLabel.fontSize(9);\r\n //verticalLineLabel.textIndent(5);\r\n verticalLineLabel.text('预计\\næ—¶é—´');\r\n verticalLineLabel.markers().size(0);\r\n verticalLineLabel.padding(0);\r\n\r\n verticalLineLabel.useHtml(true);\r\n\r\n verticalLineLabel.allowEdit(false);\r\n\r\n verticalLineLabel.zIndex(100);\r\n\r\n var offsetX = verticalLineLabel.offsetX();\r\n var offsetY = verticalLineLabel.offsetY();\r\n verticalLineLabel.offsetX(offsetX);\r\n verticalLineLabel.offsetY(offsetY);\r\n \r\n\r\n chart.listen('annotationSelect', function (e) {\r\n var annotation = e.annotation;\r\n });\r\n \r\n chart.listen('annotationChange', function (e) {\r\n var annotation = e.annotation;\r\n if (annotation.getType() === 'horizontal-line') {\r\n \r\n } else {\r\n var xAnchor = getDateTime(annotation.xAnchor());\r\n\r\n var oDate1 = Date.parse(xAnchor);\r\n var oDate2 = Date.parse(barEndTime);\r\n if (oDate1 > oDate2) {\r\n var dateSpan = oDate1 - oDate2;\r\n dateSpan = Math.abs(dateSpan);\r\n var iDays = Math.floor(dateSpan / (24 * 3600 * 1000));\r\n\r\n } else {\r\n verticalLine.xAnchor(firstDate);\r\n verticalLineLabel.xAnchor(barEndTime);\r\n }\r\n }\r\n });\r\n\r\n chart.listen('annotationChangeStart', function (e) {\r\n var annotation = e.annotation;\r\n if (annotation.getType() === 'horizontal-line') {\r\n\r\n } else {\r\n var xAnchor = getDateTime(annotation.xAnchor());\r\n\r\n var oDate1 = Date.parse(xAnchor);\r\n var oDate2 = Date.parse(barEndTime);\r\n if (oDate1 < oDate2) {\r\n verticalLine.xAnchor(firstDate);\r\n verticalLineLabel.xAnchor(barEndTime);\r\n }\r\n }\r\n });\r\n\r\n // Set event type to finish the annotation change\r\n chart.listen('annotationChangeFinish', function (e) {\r\n var annotation = e.annotation;\r\n if (annotation.getType() === 'horizontal-line') {\r\n\r\n } else {\r\n var xAnchor = getDateTime(annotation.xAnchor());\r\n\r\n var oDate1 = Date.parse(xAnchor);\r\n var oDate2 = Date.parse(barEndTime);\r\n if (oDate1 < oDate2) {\r\n verticalLine.xAnchor(firstDate);\r\n verticalLineLabel.xAnchor(barEndTime);\r\n }\r\n }\r\n });\r\n */\r\n\r\n // å–å‰næ¡è®°å½•展示图表\r\n var firstRange = '';\r\n if (historyDataItems.length > 15) {\r\n firstRange = historyDataItems[historyDataItems.length - 15].BarStart;\r\n } else {\r\n firstRange = historyDataItems[0].BarStart;\r\n }\r\n\r\n chart.selectRange(firstRange, lastDate);\r\n //chart.selectRange('points', 30, true);\r\n \r\n }\r\n }\r\n\r\n //return <AnyChart id=\"stockChart\" title=\"Stock hawkeye\" instance={chart} height={chartHeight} />\r\n }\r\n\r\n render() {\r\n return (<Content style={{ display: this.props.hidden }}>\r\n\r\n <div className=\"time-sharing\">\r\n <div data-value=\"0\" className=\"stock-info-btn\" onClick={this.onTimeSharing}>分时</div>\r\n <div data-value=\"5\" className=\"stock-info-btn\" onClick={this.onTimeSharing}>5分</div>\r\n <div data-value=\"60\" className=\"stock-info-btn\" onClick={this.onTimeSharing}>60分</div>\r\n <div data-value=\"1440\" className=\"stock-info-btn active\" onClick={this.onTimeSharing}>æ—¥K</div>\r\n <div data-value=\"10080\" className=\"stock-info-btn\" onClick={this.onTimeSharing}>周K</div>\r\n </div>\r\n <div className=\"stock-info\">\r\n <span className=\"stock-info-button\" onClick={this.onTargetPriceLine}>ç›®æ ‡ä»·</span>\r\n <span className=\"stock-info-button\" onClick={this.onEstimatedTargetPriceDays}>é¢„è®¡è¾¾åˆ°ç›®æ ‡ä»·å¤©æ•°</span>\r\n </div>\r\n\r\n <div className=\"charts\">\r\n <div id=\"chartContainer\" className=\"chart-content\"></div>\r\n <div className=\"drag-date-v-line blur\"\r\n onMouseDown={e => this.onMouseDown(e)}\r\n style={{ top: \"10px\", left: this.state.translateX + \"px\", display: this.state.estimatedDaysDisplay }}>\r\n <div className=\"drag-v-line\"></div>\r\n <div className=\"tipbox\">预计时间</div>\r\n </div>\r\n <div className=\"drag-date-h-line red\"\r\n onMouseDown={e => this.onMouseDown(e)}\r\n style={{ top: this.state.translateY + \"px\", display: this.state.targetPriceDisplay }}>\r\n <div className=\"drag-h-line\"></div>\r\n <div className=\"tipbox-txt\">\r\n <div>ç›®æ ‡ä»·<span id=\"take-profit-value\">69.00</span></div>\r\n <div>概率<span id=\"take-profit-probability\">98</span>%</div>\r\n </div>\r\n </div>\r\n </div>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { HawkeyeKLine as default }","import React, { Component } from 'react';\r\nimport history from '../../helpers/history';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\nclass TooltipPage extends Component {\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n history.push({ pathname: '/sc' });\r\n }\r\n\r\n render() {\r\n var height = '28px';\r\n var lineHeight = '14px';\r\n if (this.props.lineHeight !== undefined) {\r\n height = '35px';\r\n lineHeight = this.props.lineHeight + 'px';\r\n }\r\n \r\n return (<span style={{ color: '#9a9a9a', fontSize: '10px', display: 'inline-block', height: height, lineHeight: lineHeight, verticalAlign: 'bottom', marginLeft: '8px' }}>\r\n <span style={{color:'red'}}>{this.props.filterError}</span><br />\r\n ({languageMessages['remaining.times']}:{this.props.lastTimes}{languageMessages['times']},<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a>)\r\n </span>)}\r\n}\r\n\r\nexport { TooltipPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, Button, Radio, PageHeader, Tabs, Row, Col, Modal, Divider, Spin, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport BaseInfoForm from './components/BaseInfo';\r\nimport VernacularHawkeye from './components/VernacularHawkeye';\r\nimport HawkeyeCondition from './components/HawkeyeCondition';\r\nimport HawkeyeKLine from './components/HawkeyeKLine';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Content } = Layout;\r\nconst { TabPane } = Tabs;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst closeShort = 'Close Short';\r\nconst closeLong = 'Close Long';\r\n\r\nconst closeTime = { 'CN': '15:00', 'US': '16:00' };\r\nvar placeOrderType = [languageMessages['confirmOrderManually'], languageMessages['systemAutoOrders']];\r\nvar submitHawkeyeBtnTitle = [languageMessages['goHawkeye'], languageMessages['PaySingle']];\r\nclass HawkeyePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.user = {};\r\n this.state = {\r\n hawkeyeType: sessionStorage.getItem(\"hawkeyeType\") || '0',\r\n hawkeyeCondType: sessionStorage.getItem(\"hawkeyeCondType\") || '00',\r\n\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n direction: closeShort,\r\n tradeQuantity: 1000,\r\n startDate: moment().format('YYYY-MM-DD HH:mm'),\r\n endDate: moment().format('YYYY-MM-DD') + ' ' + closeTime[window.webType],\r\n\r\n confirmOrder: '0',//sessionStorage.getItem(\"confirmOrder\") || '0',\r\n\r\n conditions: [],\r\n\r\n VernacularConditions: [],\r\n\r\n PriceRiseTo: '',\r\n PriceFellTo: '',\r\n \r\n ReboundRange01: '',\r\n ReboundRange02: '',\r\n Fallback01: '',\r\n Fallback02: '',\r\n\r\n DailyIncreaseReached: '5.00',\r\n DailyDeclineReached: '5.00',\r\n PriceRise: '20',\r\n PriceFalling: '20',\r\n StockPriceWearOn01: 'D',\r\n StockPriceWearOn02: '20',\r\n StockPriceFellBelow01: 'D',\r\n StockPriceFellBelow02: '20',\r\n Increase01: '1',\r\n Increase02: '0.50',\r\n Decline01: '1',\r\n Decline02: '0.50',\r\n\r\n DailyTurnoverRate: '8.00',\r\n KDJGoldFork: 'D',\r\n KDJDeadFork: 'D',\r\n MACDGoldFork: 'D',\r\n MACDDeadFork: 'D',\r\n PriceWearBollinger01: 'D',\r\n PriceWearBollinger02: 'up',\r\n PriceDownBollinger01: 'D',\r\n PriceDownBollinger02: 'down',\r\n\r\n //20200605\r\n BuyOneHigherThan: '', //买一价高于\r\n SellPriceBelow: '', //å–一价低于\r\n\r\n ReachHigh: '3.00', //高开达到\r\n GapReachHigh: '3.00', //跳空高开达到\r\n\r\n Volume01: '5', //æˆäº¤é‡\r\n Volume02: '3.0',\r\n VolumeRatio: '3.00', //釿¯”\r\n DailyAmplitude: '5.00', //日振幅\r\n \r\n AnyOnlineWear01: '60', //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02: '10',\r\n AnyOnlineWear03: '60',\r\n AnyOnlineWear04: '20',\r\n AnyMovingAverage01: '60', //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02: '10',\r\n AnyMovingAverage03: '60',\r\n AnyMovingAverage04: '20',\r\n\r\n IsSmartHawkeye: false,\r\n smartHawkeye: {},\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n lastTimes: 0,\r\n\r\n filterError: '',\r\n\r\n modalVisible: false,\r\n\r\n spinLoadding: false,\r\n\r\n isLuisAnalysis: false,\r\n isFilterScan: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener('submitHawkeye', this.submitHawkeye);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_hawkeye_info\", payload: { UserId: user.username } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_hawkeye_info\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n submitHawkeye = (lastTimes, permission) => {\r\n var { spinLoadding } = this.state;\r\n\r\n if (lastTimes !== undefined && permission !== undefined) {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n var nodes = document.querySelectorAll('.common-tag');\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n\r\n var endDate = moment().format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n if (this.props.nextDate !== '') {\r\n endDate = moment(this.props.nextDate).format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n }\r\n\r\n //submit success\r\n this.setState({\r\n hawkeyeType: sessionStorage.getItem(\"hawkeyeType\") || '0',\r\n\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n direction: closeShort,\r\n tradeQuantity: 1000,\r\n startDate: moment().format('YYYY-MM-DD HH:mm'),\r\n endDate: endDate,\r\n\r\n confirmOrder: '0',//sessionStorage.getItem(\"confirmOrder\") || '0',\r\n\r\n conditions: [],\r\n\r\n VernacularConditions: [],\r\n\r\n IsSmartHawkeye: false,\r\n smartHawkeye: {},\r\n\r\n lastTimes,\r\n isVip: false,\r\n\r\n spinLoadding: false,\r\n\r\n isLuisAnalysis: false,\r\n isFilterScan: false\r\n });\r\n } else {\r\n if (spinLoadding) this.setState({ spinLoadding: false });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('submitHawkeye', this.submitHawkeye);\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'h':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'fh':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bh':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ph':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vh':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n\r\n let isVip = false;\r\n var upso = permissions.filter(function (e) { return e.type === 'vs' || e.type === 'vo' });\r\n if (upso.length > 0) {\r\n isVip = true;\r\n }\r\n\r\n this.setState({ lastTimes, isVip });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, nextDate, symbolList, symbolItems,\r\n permission,\r\n vernacularKey, formulaName, formulaString } = props;\r\n\r\n switch (status) {\r\n case 'get_hawkeye_info_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var endDate = moment().format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n if (nextDate !== undefined) {\r\n endDate = moment(nextDate).format('YYYY-MM-DD') + ' ' + closeTime[window.webType];\r\n }\r\n\r\n this.setState({ endDate, spinLoadding: false });\r\n break;\r\n case 'get_hawkeye_info_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'StockTick_success':\r\n if (symbolList.length > 0) {\r\n var latestPrice = parseFloat(symbolList[0].close).toFixed(2);\r\n var quoteChange = parseFloat(symbolList[0].chg).toFixed(2);\r\n\r\n this.setState({ latestPrice, quoteChange });\r\n }\r\n break;\r\n case 'StockTick_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_symbol_items_success':\r\n this.setState({ symbolItems });\r\n break;\r\n case 'get_symbol_items_fail':\r\n this.setState({\r\n symbolItems: [],\r\n });\r\n break;\r\n case 'get_hawkeye_base':\r\n var data = props.data;\r\n\r\n var { symbolCode, hawkeyeType, conditions } = this.state;\r\n if (hawkeyeType === '3' && symbolCode !== data.symbolCode) {\r\n // request tick data\r\n //emitter.emit('callIntradayData', data.symbolCode, '1440');\r\n }\r\n\r\n if (data.direction === closeShort) {\r\n conditions = conditions.filter(function (item) { return item.name !== 'ReboundRange' });\r\n }\r\n if (data.direction === closeLong) {\r\n conditions = conditions.filter(function (item) { return item.name !== 'Fallback' });\r\n }\r\n\r\n var symbolCode = '';\r\n var symbolName = '';\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.symbol.toLowerCase() === data.symbolCode.toLowerCase(); });\r\n if (tmpDataCode.length > 0) {\r\n symbolCode = data.symbolCode;\r\n symbolName = data.symbolName;\r\n }\r\n }\r\n this.setState({\r\n symbolCode: symbolCode,\r\n symbolName: symbolName,\r\n direction: data.direction,\r\n tradeQuantity: data.tradeQuantity,\r\n startDate: data.startDate,\r\n endDate: data.endDate,\r\n latestPrice: data.latestPrice,\r\n quoteChange: data.quoteChange,\r\n conditions\r\n }, () => {\r\n //åˆ¤æ–æ˜¯å¦å¯ä»¥æäº¤ç›¯ç›˜\r\n this.checkIsSmartHawkeye();\r\n });\r\n break;\r\n case 'Use_formula_hawkeye':\r\n let { VernacularConditions } = this.state;\r\n\r\n let tmpVernacularConditions = VernacularConditions.filter(function (item) { return item.name === formulaName });\r\n if (tmpVernacularConditions.length > 0) {\r\n message.info(languageMessages['hawkeyeConditionAlreadyExists'], 5);\r\n } else {\r\n let content = this.renderVernacularHawkeye(vernacularKey, formulaName, formulaString);\r\n VernacularConditions.push({ key: vernacularKey, name: formulaName, formula: formulaString, content: content });\r\n\r\n this.setState({ VernacularConditions }, () => {\r\n this.checkIsSmartHawkeye();\r\n });\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n });\r\n }\r\n\r\n handleBaseInfo(data) {\r\n this.props.dispatch({ type: \"action_get_hawkeye_base\", payload: { data: data } });\r\n }\r\n\r\n hawkeyeConditions(data) {\r\n var PriceRiseTo = '',\r\n PriceFellTo = '',\r\n\r\n ReboundRange01 = '',\r\n ReboundRange02 = '',\r\n Fallback01 = '',\r\n Fallback02 = '',\r\n\r\n DailyIncreaseReached = '5.00',\r\n DailyDeclineReached = '5.00',\r\n PriceRise = '20',\r\n PriceFalling = '20',\r\n StockPriceWearOn01 = 'D',\r\n StockPriceWearOn02 = '20',\r\n StockPriceFellBelow01 = 'D',\r\n StockPriceFellBelow02 = '20',\r\n Increase01 = '1',\r\n Increase02 = '0.50',\r\n Decline01 = '1',\r\n Decline02 = '0.50',\r\n\r\n DailyTurnoverRate = '8.00',\r\n KDJGoldFork = 'D',\r\n KDJDeadFork = 'D',\r\n MACDGoldFork = 'D',\r\n MACDDeadFork = 'D',\r\n\r\n PriceWearBollinger01 = 'D',\r\n PriceWearBollinger02 = 'up',\r\n PriceDownBollinger01 = 'D',\r\n PriceDownBollinger02 = 'down',\r\n\r\n //20200605\r\n BuyOneHigherThan = '', //买一价高于\r\n SellPriceBelow = '', //å–一价低于\r\n\r\n ReachHigh = '3.00', //高开达到\r\n GapReachHigh = '3.00', //跳空高开达到\r\n\r\n Volume01 = '5', //æˆäº¤é‡\r\n Volume02 = '3.0',\r\n VolumeRatio = '3.00', //釿¯”\r\n DailyAmplitude = '5.00', //日振幅\r\n\r\n AnyOnlineWear01 = '60', //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02 = '10',\r\n AnyOnlineWear03 = '60',\r\n AnyOnlineWear04 = '20',\r\n AnyMovingAverage01 = '60', //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02 = '10',\r\n AnyMovingAverage03 = '60',\r\n AnyMovingAverage04 = '20';\r\n \r\n if (data.conditions.length > 0) {\r\n for (var i in data.conditions) {\r\n var item = data.conditions[i].name;\r\n switch (item) {\r\n case 'PriceRiseTo':\r\n PriceRiseTo = this.state.PriceRiseTo;\r\n break;\r\n case 'PriceFellTo':\r\n PriceFellTo = this.state.PriceFellTo;\r\n break;\r\n \r\n case 'ReboundRange':\r\n ReboundRange01 = this.state.ReboundRange01;\r\n ReboundRange02 = this.state.ReboundRange02;\r\n break;\r\n case 'Fallback':\r\n Fallback01 = this.state.Fallback01;\r\n Fallback02 = this.state.Fallback02;\r\n break;\r\n\r\n case 'DailyIncreaseReached':\r\n DailyIncreaseReached = this.state.DailyIncreaseReached;\r\n break;\r\n case 'DailyDeclineReached':\r\n DailyDeclineReached = this.state.DailyDeclineReached;\r\n break;\r\n case 'PriceRise':\r\n PriceRise = this.state.PriceRise;\r\n break;\r\n case 'PriceFalling':\r\n PriceFalling = this.state.PriceFalling;\r\n break;\r\n case 'StockPriceWearOn':\r\n StockPriceWearOn01 = this.state.StockPriceWearOn01;\r\n StockPriceWearOn02 = this.state.StockPriceWearOn02;\r\n break;\r\n case 'StockPriceFellBelow':\r\n StockPriceFellBelow01 = this.state.StockPriceFellBelow01;\r\n StockPriceFellBelow02 = this.state.StockPriceFellBelow02;\r\n break;\r\n case 'Increase':\r\n Increase01 = this.state.Increase01;\r\n Increase02 = this.state.Increase02;\r\n break;\r\n case 'Decline':\r\n Decline01 = this.state.Decline01;\r\n Decline02 = this.state.Decline02;\r\n break;\r\n\r\n case 'DailyTurnoverRate':\r\n DailyTurnoverRate = this.state.DailyTurnoverRate;\r\n break;\r\n case 'KDJGoldFork':\r\n KDJGoldFork = this.state.KDJGoldFork;\r\n break;\r\n case 'KDJDeadFork':\r\n KDJDeadFork = this.state.KDJDeadFork;\r\n break;\r\n case 'MACDGoldFork':\r\n MACDGoldFork = this.state.MACDGoldFork;\r\n break;\r\n case 'MACDDeadFork':\r\n MACDDeadFork = this.state.MACDDeadFork;\r\n break;\r\n case 'PriceWearBollinger':\r\n PriceWearBollinger01 = this.state.PriceWearBollinger01;\r\n PriceWearBollinger02 = this.state.PriceWearBollinger02;\r\n break;\r\n case 'PriceDownBollinger':\r\n PriceDownBollinger01 = this.state.PriceDownBollinger01;\r\n PriceDownBollinger02 = this.state.PriceDownBollinger02;\r\n break;\r\n //20200605\r\n case 'BuyOneHigherThan': //买一价高于\r\n BuyOneHigherThan = this.state.BuyOneHigherThan;\r\n break;\r\n case 'SellPriceBelow': //å–一价低于\r\n SellPriceBelow = this.state.SellPriceBelow;\r\n break;\r\n case 'ReachHigh': //高开达到\r\n ReachHigh = this.state.ReachHigh;\r\n break;\r\n case 'GapReachHigh': //跳空高开达到\r\n GapReachHigh = this.state.GapReachHigh;\r\n break;\r\n case 'Volume': //æˆäº¤é‡\r\n Volume01 = this.state.Volume01;\r\n Volume02 = this.state.Volume02;\r\n break;\r\n case 'VolumeRatio': //釿¯”\r\n VolumeRatio = this.state.VolumeRatio;\r\n break;\r\n case 'DailyAmplitude': //日振幅\r\n DailyAmplitude = this.state.DailyAmplitude;\r\n break;\r\n case 'AnyOnlineWear': //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear01 = this.state.AnyOnlineWear01;\r\n AnyOnlineWear02 = this.state.AnyOnlineWear02;\r\n AnyOnlineWear03 = this.state.AnyOnlineWear03;\r\n AnyOnlineWear04 = this.state.AnyOnlineWear04;\r\n break;\r\n case 'AnyMovingAverage': //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage01 = this.state.AnyMovingAverage01;\r\n AnyMovingAverage02 = this.state.AnyMovingAverage02;\r\n AnyMovingAverage03 = this.state.AnyMovingAverage03;\r\n AnyMovingAverage04 = this.state.AnyMovingAverage04;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n conditions: data.conditions,\r\n\r\n VernacularConditions: data.VernacularConditions,\r\n\r\n PriceRiseTo,\r\n PriceFellTo,\r\n \r\n ReboundRange01,\r\n ReboundRange02,\r\n Fallback01,\r\n Fallback02,\r\n\r\n DailyIncreaseReached,\r\n DailyDeclineReached,\r\n PriceRise,\r\n PriceFalling,\r\n StockPriceWearOn01,\r\n StockPriceWearOn02,\r\n StockPriceFellBelow01,\r\n StockPriceFellBelow02,\r\n Increase01,\r\n Increase02,\r\n Decline01,\r\n Decline02,\r\n\r\n DailyTurnoverRate,\r\n KDJGoldFork,\r\n KDJDeadFork,\r\n MACDGoldFork,\r\n MACDDeadFork,\r\n\r\n PriceWearBollinger01,\r\n PriceWearBollinger02,\r\n PriceDownBollinger01,\r\n PriceDownBollinger02,\r\n\r\n //20200605\r\n BuyOneHigherThan, //买一价高于\r\n SellPriceBelow, //å–一价低于\r\n\r\n ReachHigh, //高开达到\r\n GapReachHigh, //跳空高开达到\r\n\r\n Volume01, //æˆäº¤é‡\r\n Volume02,\r\n VolumeRatio, //釿¯”\r\n DailyAmplitude, //日振幅\r\n\r\n AnyOnlineWear01, //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02,\r\n AnyOnlineWear03,\r\n AnyOnlineWear04,\r\n AnyMovingAverage01, //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02,\r\n AnyMovingAverage03,\r\n AnyMovingAverage04\r\n }, () => {\r\n var nodes = document.querySelectorAll('.common-tag');\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (data.conditions.findIndex((n) => n.name === dd) > -1) {\r\n if (!nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.add(\"checked\");\r\n }\r\n } else {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n this.checkIsSmartHawkeye();\r\n });\r\n }\r\n\r\n hawkeyeConditionParams(data) {\r\n this.setState({\r\n PriceRiseTo: data.PriceRiseTo,\r\n PriceFellTo: data.PriceFellTo,\r\n \r\n ReboundRange01: data.ReboundRange01,\r\n ReboundRange02: data.ReboundRange02,\r\n Fallback01: data.Fallback01,\r\n Fallback02: data.Fallback02,\r\n\r\n DailyIncreaseReached: data.DailyIncreaseReached,\r\n DailyDeclineReached: data.DailyDeclineReached,\r\n PriceRise: data.PriceRise,\r\n PriceFalling: data.PriceFalling,\r\n StockPriceWearOn01: data.StockPriceWearOn01,\r\n StockPriceWearOn02: data.StockPriceWearOn02,\r\n StockPriceFellBelow01: data.StockPriceFellBelow01,\r\n StockPriceFellBelow02: data.StockPriceFellBelow02,\r\n Increase01: data.Increase01,\r\n Increase02: data.Increase02,\r\n Decline01: data.Decline01,\r\n Decline02: data.Decline02,\r\n\r\n DailyTurnoverRate: data.DailyTurnoverRate,\r\n KDJGoldFork: data.KDJGoldFork,\r\n KDJDeadFork: data.KDJDeadFork,\r\n MACDGoldFork: data.MACDGoldFork,\r\n MACDDeadFork: data.MACDDeadFork,\r\n\r\n PriceWearBollinger01: data.PriceWearBollinger01,\r\n PriceWearBollinger02: data.PriceWearBollinger02,\r\n PriceDownBollinger01: data.PriceDownBollinger01,\r\n PriceDownBollinger02: data.PriceDownBollinger02,\r\n\r\n //20200605\r\n BuyOneHigherThan: data.BuyOneHigherThan, //买一价高于\r\n SellPriceBelow: data.SellPriceBelow, //å–一价低于\r\n\r\n ReachHigh: data.ReachHigh, //高开达到\r\n GapReachHigh: data.GapReachHigh, //跳空高开达到\r\n\r\n Volume01: data.Volume01, //æˆäº¤é‡\r\n Volume02: data.Volume02,\r\n VolumeRatio: data.VolumeRatio, //釿¯”\r\n DailyAmplitude: data.DailyAmplitude, //日振幅\r\n\r\n AnyOnlineWear01: data.AnyOnlineWear01, //ä»»æ„å‡çº¿ä¸Šç©¿\r\n AnyOnlineWear02: data.AnyOnlineWear02,\r\n AnyOnlineWear03: data.AnyOnlineWear03,\r\n AnyOnlineWear04: data.AnyOnlineWear04,\r\n AnyMovingAverage01: data.AnyMovingAverage01, //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n AnyMovingAverage02: data.AnyMovingAverage02,\r\n AnyMovingAverage03: data.AnyMovingAverage03,\r\n AnyMovingAverage04: data.AnyMovingAverage04\r\n }, () => {\r\n this.checkIsSmartHawkeye();\r\n });\r\n }\r\n\r\n handleMyHawkeye = e => {\r\n e.preventDefault();\r\n\r\n emitter.emit('callJump', 'hawkeyeList');\r\n\r\n history.push(\"/hawkeyeList\");\r\n };\r\n\r\n onChangeTabs = key => {\r\n var hawkeyeType = key;\r\n\r\n sessionStorage.setItem(\"hawkeyeType\", hawkeyeType);\r\n\r\n this.setState({ hawkeyeType }, () => {\r\n this.checkIsSmartHawkeye();\r\n });\r\n }\r\n\r\n onChangeCondTabs = key => {\r\n var hawkeyeCondType = key;\r\n\r\n sessionStorage.setItem(\"hawkeyeCondType\", hawkeyeCondType);\r\n\r\n this.setState({ hawkeyeCondType }, () => {\r\n \r\n });\r\n }\r\n\r\n onSelectKLineCondition = e => {\r\n if (e.target.classList.contains(\"disabled\")) return false;\r\n\r\n if (e.target.classList.contains(\"checked\")) {\r\n e.target.classList.remove(\"checked\");\r\n } else {\r\n e.target.classList.add(\"checked\");\r\n }\r\n }\r\n\r\n onSelectCondition = e => {\r\n var { conditions, VernacularConditions, hawkeyeType, direction } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (tags === 'ReboundRange' && direction === closeShort) return;\r\n if (tags === 'Fallback' && direction === closeLong) return;\r\n\r\n var tmpConditions = ['PriceRiseTo', 'PriceFellTo', 'ReboundRange', 'Fallback'];\r\n if (hawkeyeType === '1' && conditions.length > 0) {\r\n tmpConditions = tmpConditions.filter(function (i) { return i !== tags; });\r\n conditions = conditions.filter(function (i) { return tmpConditions.indexOf(i.name) === -1; });\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n }\r\n \r\n if (e.target.classList.contains(\"checked\")) {\r\n if (conditions.length <= 0) return;\r\n\r\n e.target.classList.remove(\"checked\");\r\n\r\n conditions = conditions.filter(function (item) { return item.name !== tags });\r\n } else {\r\n let count = VernacularConditions.length + conditions.length;\r\n if (count >= 5) {\r\n message.warning(languageMessages['hawkeyeUpperLimit'], 5);\r\n return;\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n\r\n conditions.push({ key: new Date().getTime().toString(), name: tags });\r\n }\r\n\r\n this.setState({ conditions }, () => {\r\n this.checkIsSmartHawkeye();\r\n });\r\n } catch (e) { }\r\n }\r\n\r\n checkIsSmartHawkeye() {\r\n var { conditions, VernacularConditions } = this.state;\r\n\r\n var IsBaseHawkeye = false;\r\n if (this.state.symbolCode !== ''\r\n && this.state.direction !== ''\r\n && this.state.tradeQuantity !== ''\r\n && this.state.startDate !== ''\r\n && this.state.endDate !== '') {\r\n IsBaseHawkeye = true;\r\n }\r\n\r\n var IsSmartHawkeye = false;\r\n if (IsBaseHawkeye) {\r\n if (VernacularConditions.length > 0) { //白è¯ç›¯ç›˜\r\n IsSmartHawkeye = true;\r\n }\r\n\r\n if (conditions.length > 0) {\r\n IsSmartHawkeye = true;\r\n for (var i in conditions) {\r\n var item = conditions[i].name;\r\n switch (item) {\r\n case 'PriceRiseTo':\r\n if (this.state.PriceRiseTo === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'PriceFellTo':\r\n if (this.state.PriceFellTo === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n \r\n case 'ReboundRange':\r\n if (this.state.ReboundRange01 === '' || this.state.ReboundRange02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'Fallback':\r\n if (this.state.Fallback01 === '' || this.state.Fallback02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n\r\n case 'DailyIncreaseReached':\r\n if (this.state.DailyIncreaseReached === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'DailyDeclineReached':\r\n if (this.state.DailyDeclineReached === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'PriceRise':\r\n if (this.state.PriceRise === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'PriceFalling':\r\n if (this.state.PriceFalling === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'StockPriceWearOn':\r\n if (this.state.StockPriceWearOn01 === '' || this.state.StockPriceWearOn02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'StockPriceFellBelow':\r\n if (this.state.StockPriceFellBelow01 === '' || this.state.StockPriceFellBelow02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'Increase':\r\n if (this.state.Increase01 === '' || this.state.Increase02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'Decline':\r\n if (this.state.Decline01 === '' || this.state.Decline02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n\r\n case 'DailyTurnoverRate':\r\n if (this.state.DailyTurnoverRate === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'KDJGoldFork':\r\n if (this.state.KDJGoldFork === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'KDJDeadFork':\r\n if (this.state.KDJDeadFork === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'MACDGoldFork':\r\n if (this.state.MACDGoldFork === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'MACDDeadFork':\r\n if (this.state.MACDDeadFork === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'PriceWearBollinger':\r\n if (this.state.PriceWearBollinger01 === '' || this.state.PriceWearBollinger02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'PriceDownBollinger':\r\n if (this.state.PriceDownBollinger01 === '' || this.state.PriceDownBollinger02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n //20200605\r\n case 'BuyOneHigherThan': //买一价高于\r\n if (this.state.BuyOneHigherThan === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'SellPriceBelow': //å–一价低于\r\n if (this.state.SellPriceBelow === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'ReachHigh': //高开达到\r\n if (this.state.ReachHigh === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'GapReachHigh': //跳空高开达到\r\n if (this.state.GapReachHigh === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'Volume': //æˆäº¤é‡\r\n if (this.state.Volume01 === '' || this.state.Volume02 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'VolumeRatio': //釿¯”\r\n if (this.state.VolumeRatio === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'DailyAmplitude': //日振幅\r\n if (this.state.DailyAmplitude === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'AnyOnlineWear': //ä»»æ„å‡çº¿ä¸Šç©¿\r\n if (this.state.AnyOnlineWear01 === '' || this.state.AnyOnlineWear02 === '' || this.state.AnyOnlineWear03 === '' || this.state.AnyOnlineWear04 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n case 'AnyMovingAverage': //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n if (this.state.AnyMovingAverage01 === '' || this.state.AnyMovingAverage02 === '' || this.state.AnyMovingAverage03 === '' || this.state.AnyMovingAverage04 === '') {\r\n IsSmartHawkeye = false;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.setState({ IsSmartHawkeye });\r\n }\r\n\r\n onSmartHawkeye = e => {\r\n e.preventDefault();\r\n\r\n var { hawkeyeType, IsSmartHawkeye, conditions, VernacularConditions } = this.state;\r\n if (IsSmartHawkeye) {\r\n var smartHawkeye = {\r\n HawkeyeType: this.state.hawkeyeType,\r\n SymbolName: this.state.symbolName,\r\n SymbolCode: this.state.symbolCode,\r\n Direction: this.state.direction,\r\n TradeQuantity: this.state.tradeQuantity,\r\n\r\n StartDate: this.state.startDate,\r\n EndDate: this.state.endDate,\r\n\r\n ConfirmOrder: this.state.confirmOrder,\r\n\r\n HawkeyeCondition: ''\r\n };\r\n\r\n switch (hawkeyeType) {\r\n case '0': // 白è¯ç›¯ç›˜\r\n case '1': // ä»·æ ¼æ¡ä»¶ç›¯ç›˜\r\n case '2':\r\n var selectCondition = {};\r\n for (var i in conditions) {\r\n var item = conditions[i].name;\r\n switch (item) {\r\n case 'PriceRiseTo':\r\n smartHawkeye['PriceRiseTo'] = this.state.PriceRiseTo;\r\n \r\n selectCondition['PriceRiseTo'] = strReplace(languageMessages['PriceRiseToInfo'], { '{num}': smartHawkeye['PriceRiseTo'] });\r\n break;\r\n case 'PriceFellTo':\r\n smartHawkeye['PriceFellTo'] = this.state.PriceFellTo;\r\n\r\n selectCondition['PriceFellTo'] = strReplace(languageMessages['PriceFellToInfo'], { '{num}': smartHawkeye['PriceFellTo'] });\r\n break;\r\n case 'ReboundRange':\r\n smartHawkeye['ReboundRange01'] = this.state.ReboundRange01;\r\n smartHawkeye['ReboundRange02'] = this.state.ReboundRange02;\r\n \r\n selectCondition['ReboundRange'] = strReplace(languageMessages['ReboundRangeInfo'], { '{num1}': smartHawkeye['ReboundRange01'], '{num2}': smartHawkeye['ReboundRange02'] });\r\n break;\r\n case 'Fallback':\r\n smartHawkeye['Fallback01'] = this.state.Fallback01;\r\n smartHawkeye['Fallback02'] = this.state.Fallback02;\r\n \r\n selectCondition['Fallback'] = strReplace(languageMessages['FallbackInfo'], { '{num1}': smartHawkeye['Fallback01'], '{num2}': smartHawkeye['Fallback02'] });\r\n break;\r\n case 'DailyIncreaseReached':\r\n smartHawkeye['DailyIncreaseReached'] = this.state.DailyIncreaseReached;\r\n \r\n selectCondition['DailyIncreaseReached'] = strReplace(languageMessages['DailyIncreaseReachedInfo'], { '{num}': smartHawkeye['DailyIncreaseReached'] });\r\n break;\r\n case 'DailyDeclineReached':\r\n smartHawkeye['DailyDeclineReached'] = this.state.DailyDeclineReached;\r\n \r\n selectCondition['DailyDeclineReached'] = strReplace(languageMessages['DailyDeclineReachedInfo'], { '{num}': smartHawkeye['DailyDeclineReached'] });\r\n break;\r\n case 'PriceRise':\r\n smartHawkeye['PriceRise'] = this.state.PriceRise;\r\n\r\n var intro = languageMessages['priceUpWoundHistoryHigh'];\r\n if (smartHawkeye['PriceRise'] !== \"0\") {\r\n intro = strReplace(languageMessages['priceUpWoundInfo'], { '{num}': smartHawkeye['PriceRise'] });\r\n }\r\n\r\n selectCondition['PriceRise'] = intro;\r\n break;\r\n case 'PriceFalling':\r\n smartHawkeye['PriceFalling'] = this.state.PriceFalling;\r\n\r\n var intro = languageMessages['priceDownWoundHistoryLow'];\r\n if (smartHawkeye['PriceFalling'] !== \"0\") {\r\n intro = strReplace(languageMessages['priceDownWoundInfo'], { '{num}': smartHawkeye['PriceFalling'] });\r\n }\r\n\r\n selectCondition['PriceFalling'] = intro;\r\n break;\r\n case 'StockPriceWearOn':\r\n smartHawkeye['StockPriceWearOn01'] = this.state.StockPriceWearOn01;\r\n smartHawkeye['StockPriceWearOn02'] = this.state.StockPriceWearOn02;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['StockPriceWearOn01'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['StockPriceWearOn01'] });\r\n }\r\n\r\n selectCondition['StockPriceWearOn'] = strReplace(languageMessages['StockPriceWearOnInfo'], { '{num}': intro, '{avg}': smartHawkeye['StockPriceWearOn02'] });\r\n break;\r\n case 'StockPriceFellBelow':\r\n smartHawkeye['StockPriceFellBelow01'] = this.state.StockPriceFellBelow01;\r\n smartHawkeye['StockPriceFellBelow02'] = this.state.StockPriceFellBelow02;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['StockPriceFellBelow01'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['StockPriceWearOn01'] });\r\n }\r\n\r\n selectCondition['StockPriceFellBelow'] = strReplace(languageMessages['StockPriceFellBelowInfo'], { '{num}': intro, '{avg}': smartHawkeye['StockPriceFellBelow02'] });\r\n break;\r\n case 'Increase':\r\n smartHawkeye['Increase01'] = this.state.Increase01;\r\n smartHawkeye['Increase02'] = this.state.Increase02;\r\n \r\n selectCondition['Increase'] = strReplace(languageMessages['IncreaseInfo'], { '{num1}': smartHawkeye['Increase01'], '{num2}': smartHawkeye['Increase02'] });\r\n break;\r\n case 'Decline':\r\n smartHawkeye['Decline01'] = this.state.Decline01;\r\n smartHawkeye['Decline02'] = this.state.Decline02;\r\n \r\n selectCondition['Decline'] = strReplace(languageMessages['DeclineInfo'], { '{num1}': smartHawkeye['Decline01'], '{num2}': smartHawkeye['Decline02'] });\r\n break;\r\n case 'DailyTurnoverRate':\r\n smartHawkeye['DailyTurnoverRate'] = this.state.DailyTurnoverRate;\r\n \r\n selectCondition['DailyTurnoverRate'] = languageMessages['DailyTurnoverRate'] + ' ' + smartHawkeye['DailyTurnoverRate'] + \"%\";\r\n break;\r\n case 'KDJGoldFork':\r\n smartHawkeye['KDJGoldFork'] = this.state.KDJGoldFork;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['KDJGoldFork'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['KDJGoldFork'] });\r\n }\r\n \r\n selectCondition['KDJGoldFork'] = intro + languageMessages['KDJGoldFork'];\r\n break;\r\n case 'KDJDeadFork':\r\n smartHawkeye['KDJDeadFork'] = this.state.KDJDeadFork;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['KDJDeadFork'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['KDJDeadFork'] });\r\n }\r\n \r\n selectCondition['KDJDeadFork'] = intro + languageMessages['KDJDeadFork'];\r\n break;\r\n case 'MACDGoldFork':\r\n smartHawkeye['MACDGoldFork'] = this.state.MACDGoldFork;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['MACDGoldFork'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['MACDGoldFork'] });\r\n }\r\n \r\n selectCondition['MACDGoldFork'] = intro + languageMessages['MACDGoldFork'];\r\n break;\r\n case 'MACDDeadFork':\r\n smartHawkeye['MACDDeadFork'] = this.state.MACDDeadFork;\r\n\r\n var intro = languageMessages['dailyLine'];\r\n if (smartHawkeye['MACDDeadFork'] !== \"D\") {\r\n intro = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['MACDDeadFork'] });\r\n }\r\n \r\n selectCondition['MACDDeadFork'] = intro + languageMessages['MACDDeadFork'];\r\n break;\r\n case 'PriceWearBollinger':\r\n smartHawkeye['PriceWearBollinger01'] = this.state.PriceWearBollinger01;\r\n smartHawkeye['PriceWearBollinger02'] = this.state.PriceWearBollinger02;\r\n\r\n var line = languageMessages['dailyLine'];\r\n if (smartHawkeye['PriceWearBollinger01'] !== \"D\") {\r\n line = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['PriceWearBollinger01'] });\r\n }\r\n\r\n var intro = languageMessages['OnRail'];\r\n switch (smartHawkeye['PriceWearBollinger02']) {\r\n case \"up\":\r\n intro = languageMessages['OnRail'];\r\n break;\r\n case \"mid\":\r\n intro = languageMessages['MidRail'];\r\n break;\r\n case \"down\":\r\n intro = languageMessages['LowRail'];\r\n break;\r\n }\r\n\r\n selectCondition['PriceWearBollinger'] = strReplace(languageMessages['PricesGoThroughBollingerInfo'], { '{num1}': line, '{num2}': intro });\r\n break;\r\n case 'PriceDownBollinger':\r\n smartHawkeye['PriceDownBollinger01'] = this.state.PriceDownBollinger01;\r\n smartHawkeye['PriceDownBollinger02'] = this.state.PriceDownBollinger02;\r\n\r\n var line = languageMessages['dailyLine'];\r\n if (smartHawkeye['PriceDownBollinger01'] !== \"D\") {\r\n line = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['PriceDownBollinger01'] });\r\n }\r\n\r\n var intro = languageMessages['OnRail'];\r\n switch (smartHawkeye['PriceDownBollinger02']) {\r\n case \"up\":\r\n intro = languageMessages['OnRail'];\r\n break;\r\n case \"mid\":\r\n intro = languageMessages['MidRail'];\r\n break;\r\n case \"down\":\r\n intro = languageMessages['LowRail'];\r\n break;\r\n }\r\n \r\n selectCondition['PriceDownBollinger'] = strReplace(languageMessages['PriceDownBollingerInfo'], { '{num1}': line, '{num2}': intro });\r\n break;\r\n //20200605\r\n case 'BuyOneHigherThan': //买一价高于\r\n smartHawkeye['BuyOneHigherThan'] = this.state.BuyOneHigherThan;\r\n\r\n selectCondition['BuyOneHigherThan'] = languageMessages['BuyOneHigherThan'] + ' ' + smartHawkeye['BuyOneHigherThan'] + languageMessages['yuan'];\r\n break;\r\n case 'SellPriceBelow': //å–一价低于\r\n smartHawkeye['SellPriceBelow'] = this.state.SellPriceBelow;\r\n\r\n selectCondition['SellPriceBelow'] = languageMessages['SellPriceBelow'] + ' ' + smartHawkeye['SellPriceBelow'] + languageMessages['yuan'];\r\n break;\r\n case 'ReachHigh': //高开达到\r\n smartHawkeye['ReachHigh'] = this.state.ReachHigh;\r\n\r\n selectCondition['ReachHigh'] = languageMessages['ReachHigh'] + ' ' + smartHawkeye['ReachHigh'] + \"%\";\r\n break;\r\n case 'GapReachHigh': //跳空高开达到\r\n smartHawkeye['GapReachHigh'] = this.state.GapReachHigh;\r\n\r\n selectCondition['GapReachHigh'] = languageMessages['GapReachHigh'] + ' ' + smartHawkeye['GapReachHigh'] + \"%\";\r\n break;\r\n case 'Volume': //æˆäº¤é‡\r\n smartHawkeye['Volume01'] = this.state.Volume01;\r\n smartHawkeye['Volume02'] = this.state.Volume02;\r\n\r\n selectCondition['Volume'] = strReplace(languageMessages['VolumeAveragePastDays'], { '{num1}': smartHawkeye['Volume01'], '{num2}': smartHawkeye['Volume02'] });\r\n break;\r\n case 'VolumeRatio': //釿¯”\r\n smartHawkeye['VolumeRatio'] = this.state.VolumeRatio;\r\n\r\n selectCondition['VolumeRatio'] = languageMessages['VolumeRatioThan'] + ' ' + smartHawkeye['VolumeRatio'];\r\n break;\r\n case 'DailyAmplitude': //日振幅\r\n smartHawkeye['DailyAmplitude'] = this.state.DailyAmplitude;\r\n\r\n selectCondition['DailyAmplitude'] = languageMessages['DailyAmplitude'] + ' ' + smartHawkeye['DailyAmplitude'] + \"%\";\r\n break;\r\n case 'AnyOnlineWear': //ä»»æ„å‡çº¿ä¸Šç©¿\r\n smartHawkeye['AnyOnlineWear01'] = this.state.AnyOnlineWear01;\r\n smartHawkeye['AnyOnlineWear02'] = this.state.AnyOnlineWear02;\r\n smartHawkeye['AnyOnlineWear03'] = this.state.AnyOnlineWear03;\r\n smartHawkeye['AnyOnlineWear04'] = this.state.AnyOnlineWear04;\r\n\r\n var line01 = languageMessages['dailyLine'];\r\n if (smartHawkeye['AnyOnlineWear01'] !== \"D\") {\r\n line01 = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['AnyOnlineWear01'] });\r\n }\r\n var line02 = languageMessages['dailyLine'];\r\n if (smartHawkeye['AnyOnlineWear03'] !== \"D\") {\r\n line02 = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['AnyOnlineWear03'] });\r\n }\r\n\r\n selectCondition['AnyOnlineWear'] = strReplace(languageMessages['AnyMovingAverageInfo'], { '{num1}': line01, '{avg1}': smartHawkeye['AnyOnlineWear02'], '{num2}': line02, '{avg2}': smartHawkeye['AnyOnlineWear04'] });\r\n break;\r\n case 'AnyMovingAverage': //ä»»æ„å‡çº¿ä¸‹ç©¿\r\n smartHawkeye['AnyMovingAverage01'] = this.state.AnyMovingAverage01;\r\n smartHawkeye['AnyMovingAverage02'] = this.state.AnyMovingAverage02;\r\n smartHawkeye['AnyMovingAverage03'] = this.state.AnyMovingAverage03;\r\n smartHawkeye['AnyMovingAverage04'] = this.state.AnyMovingAverage04;\r\n\r\n var line01 = languageMessages['dailyLine'];\r\n if (smartHawkeye['AnyMovingAverage01'] !== \"D\") {\r\n line01 = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['AnyMovingAverage01'] });\r\n }\r\n var line02 = languageMessages['dailyLine'];\r\n if (smartHawkeye['AnyMovingAverage03'] !== \"D\") {\r\n line02 = strReplace(languageMessages['numMinLine'], { '{num}': smartHawkeye['AnyMovingAverage03'] });\r\n }\r\n\r\n selectCondition['AnyMovingAverage'] = strReplace(languageMessages['AnyMovingAverageInfo'], { '{num1}': line01, '{avg1}': smartHawkeye['AnyMovingAverage02'], '{num2}': line02, '{avg2}': smartHawkeye['AnyMovingAverage04'] });\r\n break;\r\n default:\r\n /**\r\n \r\n */\r\n break;\r\n }\r\n }\r\n\r\n \r\n //var selectCondition = {};\r\n let tmpVernacularConditions = [];\r\n for (var i in VernacularConditions) {\r\n var item = VernacularConditions[i];\r\n\r\n tmpVernacularConditions.push({ key: item.key, formula: item.formula });\r\n\r\n selectCondition[item.key] = item.name;\r\n }\r\n smartHawkeye['VernacularConditions'] = tmpVernacularConditions;\r\n smartHawkeye['HawkeyeCondition'] = JSON.stringify(selectCondition);\r\n\r\n\r\n //smartHawkeye['HawkeyeCondition'] = JSON.stringify(selectCondition);\r\n break;\r\n case '3': // k线盯盘\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n this.setState({ smartHawkeye, modalVisible: true });\r\n }\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n // æäº¤ç›¯ç›˜\r\n onSubmitHawkeye = () => {\r\n var { lastTimes } = this.state;\r\n\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n modalVisible: false,\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.hawkeye.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Hawkeye', 'Submit', 'Start hawkeye']);\r\n\r\n this.setState({\r\n modalVisible: false,\r\n spinLoadding: true,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_send_hub_message\", payload: { service: 'SendHawkeye', userId: this.user.username, msg: this.state.smartHawkeye } });\r\n });\r\n }\r\n }\r\n\r\n handleHawkeyeCancel = () => {\r\n this.setState({\r\n modalVisible: false,\r\n });\r\n };\r\n\r\n changeConfirmOrder = (e) => {\r\n //sessionStorage.setItem(\"confirmOrder\", e.target.value);\r\n this.setState({ confirmOrder: e.target.value });\r\n }\r\n\r\n renderSelectCondition() {\r\n var hawkeyeCondition = this.state.smartHawkeye['HawkeyeCondition'] === undefined ? {} : JSON.parse(this.state.smartHawkeye['HawkeyeCondition'] || '{}') || {};\r\n\r\n var html = [];\r\n for (var item in hawkeyeCondition) {\r\n html.push(<div className=\"common-gutter-row\" key={item}>{hawkeyeCondition[item]}</div>);\r\n }\r\n \r\n return <Col span={16}>{html}</Col>;\r\n }\r\n\r\n renderKLineHawkeye() {\r\n return <TabPane tab={languageMessages['kLineHawkeye']} key=\"3\">\r\n <div className={this.state.direction === closeLong ? 'common-k-line' : 'common-k-line disabled'} onClick={this.onSelectKLineCondition}>{languageMessages['closeShortHawkeye']}</div>\r\n <div className={this.state.direction === closeShort ? 'common-k-line' : 'common-k-line disabled'} onClick={this.onSelectKLineCondition}>{languageMessages['closeLongHawkeye']}</div>\r\n </TabPane>;\r\n }\r\n\r\n onClickClose = e => {\r\n let { VernacularConditions } = this.state;\r\n\r\n let tags = e.currentTarget.getAttribute('data-value');\r\n VernacularConditions = VernacularConditions.filter(function (item) { return item.key !== tags });\r\n\r\n this.setState({ VernacularConditions }, () => {\r\n this.checkIsSmartHawkeye();\r\n });\r\n }\r\n\r\n renderVernacularHawkeye(key, text, content) {\r\n var useFormulas = [];\r\n var items = content.split('\\n');\r\n for (var item in items) {\r\n if (useFormulas.length > 0) useFormulas.push(<br key={item} />);\r\n var tmpString = items[item];\r\n useFormulas.push(tmpString);\r\n }\r\n\r\n return <Row key={key} className='common-hawkeye-cell'>\r\n <Col span={8} className='common-hawkeye-condition'>{text}</Col>\r\n <Col span={13} className='common-hawkeye-condition'>{useFormulas}</Col>\r\n <Col span={3}><Button size='small' shape=\"circle\" icon=\"close\" onClick={this.onClickClose} data-value={key} /></Col>\r\n </Row>\r\n }\r\n\r\n render() {\r\n let count = this.state.VernacularConditions.length + this.state.conditions.length;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['Monitor symbol']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.handleMyHawkeye}>{languageMessages['myHawkeye']}</Button>\r\n ]} />\r\n </div>\r\n <Modal title={languageMessages['intelligentHawkeyeConfirm']}\r\n visible={this.state.modalVisible}\r\n onOk={this.onSubmitHawkeye}\r\n onCancel={this.handleHawkeyeCancel}>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col><Col className=\"common-gutter-row\" span={16}>{this.state.symbolCode} {this.state.symbolName}</Col>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeDirection']}:</Col><Col className=\"common-gutter-row\" span={16}>{this.state.direction === closeShort ? languageMessages['closeShort'] : languageMessages['closeLong']}</Col>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradeQuantity']}:</Col><Col className=\"common-gutter-row\" span={16}>{this.state.tradeQuantity}</Col>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['hawkeyeStragegy']}:</Col>\r\n {this.renderSelectCondition()}\r\n </Row>\r\n </Modal>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n <div className='common-title'></div>\r\n <div style={{ padding: '10px 0' }}>\r\n <BaseInfoForm dispatch={this.props.dispatch} isVip={this.state.isVip} status={this.props.status} nextDate={this.props.nextDate} symbolItems={this.state.symbolItems} hawkeyeBaseInfo={this.handleBaseInfo.bind(this)} />\r\n </div>\r\n <div className={this.state.hawkeyeType === '0' ? 'common-hawkeye-page-00' : 'common-hawkeye-page-01' }>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['hawkeyeCondition']}</div>\r\n <div className=\"card-container common-tabs\">\r\n <Tabs type=\"card\"\r\n activeKey={this.state.hawkeyeType}\r\n className='common-hawkeye-tabs'\r\n onChange={this.onChangeTabs}>\r\n <TabPane tab={languageMessages['vernacularHawkeye']} key=\"0\">\r\n <VernacularHawkeye {...this.props} isFilterScan={this.state.isFilterScan} LuisAnalysis={this.handleLuisAnalysis.bind(this)} count={count} />\r\n </TabPane>\r\n <TabPane tab={languageMessages['priceHawkeye']} key=\"1\">\r\n <div className='common-tag' onClick={this.onSelectCondition} data-value='PriceRiseTo'>{languageMessages['PriceRiseTo']}</div>\r\n <div className='common-tag' onClick={this.onSelectCondition} data-value='PriceFellTo'>{languageMessages['PriceFellTo']}</div>\r\n \r\n <div className={this.state.direction === closeLong ? 'common-tag' : 'common-tag disabled'} onClick={this.onSelectCondition} data-value='ReboundRange'>{languageMessages['ReboundRange']}</div>\r\n <div className={this.state.direction === closeShort ? 'common-tag' : 'common-tag disabled'} onClick={this.onSelectCondition} data-value='Fallback'>{languageMessages['Fallback']}</div>\r\n </TabPane>\r\n <TabPane tab={languageMessages['condHawkeye']} key=\"2\">\r\n <div className='card-container common-tabs-sub-content'>\r\n <Tabs type=\"card\"\r\n activeKey={this.state.hawkeyeCondType}\r\n className='common-hawkeye-tabs'\r\n onChange={this.onChangeCondTabs}>\r\n <TabPane tab={languageMessages['mete.price']} key=\"00\">\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='DailyIncreaseReached'>{languageMessages['DailyIncreaseReached']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='DailyDeclineReached'>{languageMessages['DailyDeclineReached']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='Increase'>{languageMessages['Increase']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='Decline'>{languageMessages['Decline']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='BuyOneHigherThan'>{languageMessages['BuyOneHigherThan']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='SellPriceBelow'>{languageMessages['SellPriceBelow']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='PriceRise'>{languageMessages['PriceRise']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='PriceFalling'>{languageMessages['PriceFalling']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='ReachHigh'>{languageMessages['ReachHigh']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='GapReachHigh'>{languageMessages['GapReachHigh']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='Volume'>{languageMessages['volume']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='VolumeRatio'>{languageMessages['VolumeRatio']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='DailyAmplitude'>{languageMessages['DailyAmplitude']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='DailyTurnoverRate'>{languageMessages['DailyTurnoverRate']}</div>\r\n </TabPane>\r\n <TabPane tab={languageMessages['technically']} key=\"01\">\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='StockPriceWearOn'>{languageMessages['StockPriceWearOn']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='StockPriceFellBelow'>{languageMessages['StockPriceFellBelow']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='AnyOnlineWear'>{languageMessages['AnyOnlineWear']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='AnyMovingAverage'>{languageMessages['AnyMovingAverage']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='KDJGoldFork'>{languageMessages['KDJGoldFork']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='KDJDeadFork'>{languageMessages['KDJDeadFork']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='MACDGoldFork'>{languageMessages['MACDGoldFork']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='MACDDeadFork'>{languageMessages['MACDDeadFork']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='PriceWearBollinger'>{languageMessages['PricesGoThroughBollinger']}</div>\r\n <div className={window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag'} onClick={this.onSelectCondition} data-value='PriceDownBollinger'>{languageMessages['PriceDownBollinger']}</div>\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n </div>\r\n <div className={this.state.hawkeyeType === '0' ? 'common-hawkeye-page-02' : 'common-hawkeye-page-03'}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['selCondTrigger']}</div>\r\n <div className='common-hawkeye-content'>\r\n {<HawkeyeCondition hidden={this.state.hawkeyeType !== '3' ? 'block' : 'none'}\r\n conditions={this.state.conditions}\r\n VernacularConditions={this.state.VernacularConditions}\r\n hawkeyeConditions={this.hawkeyeConditions.bind(this)}\r\n hawkeyeConditionParams={this.hawkeyeConditionParams.bind(this)} />}\r\n\r\n {<HawkeyeKLine hidden={this.state.hawkeyeType === '3' ? 'block' : 'none'} />}\r\n </div>\r\n </div>\r\n <div style={{ clear: 'both' }}></div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['hawkeyeMode']}</div>\r\n <Radio.Group value={this.state.confirmOrder} onChange={this.changeConfirmOrder}>\r\n <Radio value=\"0\">{languageMessages['intelligentHawkeye']}</Radio>\r\n <Radio value=\"1\">{languageMessages['smartPay']}</Radio>\r\n </Radio.Group>\r\n <div style={{ padding: '10px 0' }}>\r\n <p>{languageMessages['hawkeye.mode']}<span className='common-red'>{placeOrderType[this.state.confirmOrder]}</span></p>\r\n <Button size='small' loading={false} disabled={!this.state.IsSmartHawkeye} onClick={this.onSmartHawkeye}>\r\n {submitHawkeyeBtnTitle[this.state.confirmOrder]}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Content>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.hawkeye;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(HawkeyePage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Tabs, Table, Modal, Button, Icon, message, Row, Col } from 'antd';\r\nimport moment from 'moment';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst { TabPane } = Tabs;\r\n\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst closeShort = 'Close Short';\r\n\r\nclass HawkeyeListPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.wColumns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolName'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => <a>{text}</a>,\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => <a>{text}</a>,\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: 'latestPrice',\r\n sorter: (a, b) => a.latestPrice - b.latestPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n return <span>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: 'rangePercent',\r\n sorter: (a, b) => a.rangePercent - b.rangePercent,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n }, {\r\n title: languageMessages['hawkeyeType'],\r\n dataIndex: 'hawkeyeType',\r\n sorter: (a, b) => a.hawkeyeType - b.hawkeyeType,\r\n sortDirections: ['descend', 'ascend'],\r\n render: type => (\r\n <span>\r\n {type === 0 ? languageMessages['vernacularHawkeye'] : type === 1 ? languageMessages['priceHawkeye'] : type === 2 ? languageMessages['condHawkeye'] : type === 3 ? languageMessages['HybridHawkeye'] : languageMessages['kLineHawkeye']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['hawkeyeCondition'],\r\n dataIndex: 'hawkeyeCondition',\r\n sorter: (a, b) => a.hawkeyeCondition < b.hawkeyeCondition ? -1 : a.hawkeyeCondition > b.hawkeyeCondition ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: cond => {\r\n var html = [];\r\n if (cond !== undefined && cond !== '') {\r\n var hawkeyeCondition = JSON.parse(cond || '{}') || {};\r\n for (var item in hawkeyeCondition) {\r\n html.push(<div key={item}>{hawkeyeCondition[item]}</div>);\r\n }\r\n }\r\n return html;\r\n }\r\n }, {\r\n title: languageMessages['tradeDirection'],\r\n dataIndex: 'tradeDirection',\r\n sorter: (a, b) => a.tradeDirection < b.tradeDirection ? -1 : a.tradeDirection > b.tradeDirection ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: direction => (\r\n <span>\r\n {direction === closeShort ? languageMessages['closeShort'] : languageMessages['closeLong']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeQuantity'],\r\n dataIndex: 'tradeQuantity',\r\n sorter: (a, b) => a.tradeQuantity - b.tradeQuantity,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['expireDate'],\r\n dataIndex: 'expireDate',\r\n sorter: (a, b) => a.expireDate - b.expireDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['triggerDate'],\r\n dataIndex: 'triggerDate',\r\n sorter: (a, b) => a.triggerDate - b.triggerDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['triggerCondition'],\r\n dataIndex: 'triggerCondition',\r\n sorter: (a, b) => a.triggerCondition - b.triggerCondition,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['control'],\r\n dataIndex: '',\r\n align: 'center',\r\n render: (text, record) =>\r\n (<span style={{ whiteSpace: 'nowrap' }}>\r\n <a className='table-button' onClick={() => this.onHawkeyePlaceOrder(record.key)}>{languageMessages['placeOrder']}</a>\r\n <span style={{ padding: '0 2px' }}></span>\r\n <a className='table-button' onClick={() => this.onHawkeyeClose(record.key)}>{languageMessages['close']}</a>\r\n </span>),\r\n },\r\n ];\r\n\r\n this.columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolName'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => <a>{text}</a>,\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => <a>{text}</a>,\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: 'latestPrice',\r\n sorter: (a, b) => a.latestPrice - b.latestPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n if (row.rangePercent >= 0) {\r\n return <span style={{ color: \"red\" }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: \"green\" }}>{text}</span>;\r\n }\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: 'rangePercent',\r\n sorter: (a, b) => a.rangePercent - b.rangePercent,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: \"red\" }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: \"green\" }}>{text}%</span>;\r\n }\r\n },\r\n }, {\r\n title: languageMessages['hawkeyeType'],\r\n dataIndex: 'hawkeyeType',\r\n sorter: (a, b) => a.hawkeyeType - b.hawkeyeType,\r\n sortDirections: ['descend', 'ascend'],\r\n render: type => (\r\n <span>\r\n {type === 0 ? languageMessages['vernacularHawkeye'] : type === 1 ? languageMessages['priceHawkeye'] : type === 2 ? languageMessages['condHawkeye'] : type === 3 ? languageMessages['HybridHawkeye'] : languageMessages['kLineHawkeye']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['hawkeyeCondition'],\r\n dataIndex: 'hawkeyeCondition',\r\n sorter: (a, b) => a.hawkeyeCondition < b.hawkeyeCondition ? -1 : a.hawkeyeCondition > b.hawkeyeCondition ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: cond => {\r\n var html = [];\r\n if (cond !== undefined && cond !== '') {\r\n var hawkeyeCondition = JSON.parse(cond || '{}') || {};\r\n for (var item in hawkeyeCondition) {\r\n html.push(<div key={item}>{hawkeyeCondition[item]}</div>);\r\n }\r\n }\r\n return html;\r\n }\r\n }, {\r\n title: languageMessages['tradeDirection'],\r\n dataIndex: 'tradeDirection',\r\n sorter: (a, b) => a.tradeDirection < b.tradeDirection ? -1 : a.tradeDirection > b.tradeDirection ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: direction => (\r\n <span>\r\n {direction === closeShort ? languageMessages['closeShort'] : languageMessages['closeLong']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeQuantity'],\r\n dataIndex: 'tradeQuantity',\r\n sorter: (a, b) => a.tradeQuantity - b.tradeQuantity,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['expireDate'],\r\n dataIndex: 'expireDate',\r\n sorter: (a, b) => a.expireDate - b.expireDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['control'],\r\n dataIndex: '',\r\n align: 'center',\r\n //render: (text, record) => <Icon type=\"stop\" style={{ fontSize: '18px', color: '#1C9FCE' }} onClick={() => this.onHawkeyeCancel(record.key)} />,\r\n render: (text, record) => <a className='table-button' onClick={() => this.onHawkeyeCancel(record.key)}>{languageMessages['stop']}</a>,\r\n },\r\n ];\r\n\r\n this.nColumns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n className: 'common-gray',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolName'],\r\n dataIndex: 'symbolName',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['hawkeyeType'],\r\n dataIndex: 'hawkeyeType',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.hawkeyeType - b.hawkeyeType,\r\n sortDirections: ['descend', 'ascend'],\r\n render: type => (\r\n <span>\r\n {type === 0 ? languageMessages['vernacularHawkeye'] : type === 1 ? languageMessages['priceHawkeye'] : type === 2 ? languageMessages['condHawkeye'] : type === 3 ? languageMessages['HybridHawkeye'] : languageMessages['kLineHawkeye']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['hawkeyeCondition'],\r\n dataIndex: 'hawkeyeCondition',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.hawkeyeCondition < b.hawkeyeCondition ? -1 : a.hawkeyeCondition > b.hawkeyeCondition ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: cond => {\r\n var html = [];\r\n if (cond !== undefined && cond !== '') {\r\n var hawkeyeCondition = JSON.parse(cond || '{}') || {};\r\n for (var item in hawkeyeCondition) {\r\n html.push(<div key={item}>{hawkeyeCondition[item]}</div>);\r\n }\r\n }\r\n return html;\r\n }\r\n }, {\r\n title: languageMessages['tradeDirection'],\r\n dataIndex: 'tradeDirection',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.tradeDirection < b.tradeDirection ? -1 : a.tradeDirection > b.tradeDirection ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: direction => (\r\n <span>\r\n {direction === closeShort ? languageMessages['closeShort'] : languageMessages['closeLong']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeQuantity'],\r\n dataIndex: 'tradeQuantity',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.tradeQuantity - b.tradeQuantity,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['expireDate'],\r\n dataIndex: 'expireDate',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.expireDate - b.expireDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['triggerDate'],\r\n dataIndex: 'triggerDate',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.triggerDate - b.triggerDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['triggerCondition'],\r\n dataIndex: 'triggerCondition',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.triggerCondition - b.triggerCondition,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n className: 'common-gray',\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status === 2 ? languageMessages['ordered'] : status === 3 ? languageMessages['triggered'] : status === 4 ? languageMessages['closed'] : status === 5 ? languageMessages['activeTermination'] : status === 6 ? languageMessages['hawkeyeError'] : languageMessages['invalid']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['control'],\r\n dataIndex: '',\r\n align: 'center',\r\n render: (text, record) => <Icon type=\"delete\" style={{ fontSize: '18px' }} onClick={() => this.onRemove(record.key)}/>,\r\n },\r\n ];\r\n\r\n this.user = {};\r\n this.state = {\r\n initLoadding: true,\r\n\r\n activeKey: sessionStorage.getItem(\"hawkeyeListTabActiveKey\") || '0',\r\n\r\n selectedRowKeys: [],\r\n\r\n wDataSource: [],\r\n dataSource: [],\r\n nDataSource: [],\r\n\r\n placeOrderVisible: false,\r\n hawkeyeOrder: {},\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n\r\n emitter.addListener('ConfirmHawkeye', this.ConfirmHawkeye);\r\n emitter.addListener('triggerHawkeye', this.triggerHawkeye);\r\n emitter.addListener('callHawkeye', this.callHawkeye);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n\r\n emitter.removeListener('callHawkeye', this.callHawkeye);\r\n emitter.removeListener('ConfirmHawkeye', this.ConfirmHawkeye);\r\n emitter.removeListener('triggerHawkeye', this.triggerHawkeye);\r\n }\r\n\r\n ConfirmHawkeye = (hawkeyeIds, confirmResult) => {\r\n var { wDataSource, dataSource, nDataSource, activeKey, initLoadding } = this.state;\r\n\r\n var confirmHawkeye = wDataSource.filter(function (v) { return hawkeyeIds.indexOf(v.key) !== -1 });\r\n if (confirmHawkeye.length > 0) {\r\n activeKey = '2';\r\n for (var item in confirmHawkeye) {\r\n confirmHawkeye[item].updated = moment().format('YYYY-MM-DD HH:mm:ss');\r\n if (confirmResult === 0) {\r\n confirmHawkeye[item].status = 4;\r\n } else {\r\n confirmHawkeye[item].status = 2;\r\n }\r\n nDataSource.splice(0, 0, confirmHawkeye[item]);\r\n }\r\n\r\n wDataSource = wDataSource.filter(function (v) { return hawkeyeIds.indexOf(v.key) === -1 });\r\n\r\n var len = wDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n wDataSource[ii].sequence = index;\r\n }\r\n len = dataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n dataSource[ii].sequence = index;\r\n }\r\n len = nDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n nDataSource[ii].sequence = index;\r\n }\r\n\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", activeKey);\r\n this.setState({\r\n wDataSource,\r\n dataSource,\r\n nDataSource,\r\n activeKey,\r\n selectedRowKeys: [],\r\n initLoadding: false\r\n });\r\n } else {\r\n if (initLoadding) this.setState({ initLoadding: false });\r\n }\r\n }\r\n\r\n triggerHawkeye = (hawkeye) => {\r\n var { wDataSource, dataSource, nDataSource, activeKey, initLoadding } = this.state;\r\n\r\n var tmpHawkeyes = dataSource.filter(function (v) { return hawkeye.Id == v.key });\r\n if (tmpHawkeyes.length > 0) {\r\n activeKey = hawkeye.ConfirmOrder === 0 ? '0' : '2';\r\n for (var item in tmpHawkeyes) {\r\n tmpHawkeyes[item].triggerCondition = hawkeye.TriggerCondition;\r\n tmpHawkeyes[item].triggerDate = hawkeye.TriggerDateTime;\r\n tmpHawkeyes[item].updated = moment().format('YYYY-MM-DD HH:mm:ss');\r\n\r\n if (hawkeye.ConfirmOrder === 0) {\r\n tmpHawkeyes[item].status = 1;\r\n wDataSource.splice(0, 0, tmpHawkeyes[item]);\r\n } else {\r\n tmpHawkeyes[item].status = 2;\r\n nDataSource.splice(0, 0, tmpHawkeyes[item]);\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return hawkeye.Id != v.key });\r\n\r\n var len = wDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n wDataSource[ii].sequence = index;\r\n }\r\n len = dataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n dataSource[ii].sequence = index;\r\n }\r\n len = nDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n nDataSource[ii].sequence = index;\r\n }\r\n\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", activeKey);\r\n this.setState({\r\n wDataSource,\r\n dataSource,\r\n nDataSource,\r\n activeKey,\r\n selectedRowKeys: [],\r\n initLoadding: false\r\n });\r\n } else {\r\n if (initLoadding) this.setState({ initLoadding: false });\r\n }\r\n }\r\n\r\n callHawkeye = (hawkeyeIds, type) => {\r\n var { wDataSource, dataSource, nDataSource, activeKey, initLoadding } = this.state;\r\n\r\n var tmpHawkeyes = dataSource.filter(function (v) { return hawkeyeIds.indexOf(v.key) !== -1 });\r\n if (tmpHawkeyes.length > 0) {\r\n activeKey = type === 0 ? '0' : '2';\r\n for (var item in tmpHawkeyes) {\r\n tmpHawkeyes[item].updated = moment().format('YYYY-MM-DD HH:mm:ss');\r\n if (type === 0) {\r\n tmpHawkeyes[item].status = 1;\r\n wDataSource.splice(0, 0, tmpHawkeyes[item]);\r\n } else {\r\n tmpHawkeyes[item].status = type === 1 ? 3 : 5;\r\n nDataSource.splice(0, 0, tmpHawkeyes[item]);\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return hawkeyeIds.indexOf(v.key) === -1 });\r\n\r\n var len = wDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n wDataSource[ii].sequence = index;\r\n }\r\n len = dataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n dataSource[ii].sequence = index;\r\n }\r\n len = nDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n nDataSource[ii].sequence = index;\r\n }\r\n\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", activeKey);\r\n this.setState({\r\n wDataSource,\r\n dataSource,\r\n nDataSource,\r\n activeKey,\r\n selectedRowKeys: [],\r\n initLoadding: false\r\n });\r\n } else {\r\n if (initLoadding) this.setState({ initLoadding: false });\r\n }\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ initLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_hawkeye_items\", payload: { UserId: user.username } });\r\n }\r\n */\r\n\r\n var u = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_hawkeye_items\", payload: { UserId: u } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, items, hawkeyeId } = props;\r\n\r\n switch (status) {\r\n case 'get_hawkeye_success':\r\n var wDataSource = [];\r\n var dataSource = [];\r\n var nDataSource = [];\r\n\r\n if (items !== null) {\r\n var wIndex = 1;\r\n var index = 1;\r\n var nIndex = 1;\r\n for (var item in items) {\r\n var status = items[item].status;\r\n\r\n //是å¦å·²å¤±æ•ˆ items[item].endDate\r\n if (status < 2) {\r\n var now = moment();\r\n var end = moment(items[item].endDate);\r\n if (now > end) status = 8;\r\n }\r\n\r\n var data = {\r\n key: items[item].id.toString(),\r\n userId: items[item].userId,\r\n symbolCode: items[item].symbolCode,\r\n symbolName: items[item].symbolName,\r\n latestPrice: items[item].latestPrice,\r\n rangePercent: items[item].rangePercent,\r\n hawkeyeType: items[item].hawkeyeType,\r\n hawkeyeCondition: items[item].hawkeyeCondition,\r\n tradeDirection: items[item].tradeDirection,\r\n tradeQuantity: items[item].tradeQuantity,\r\n expireDate: items[item].startDate + '~' + items[item].endDate,\r\n triggerDate: items[item].triggerDate,\r\n triggerCondition: items[item].triggerCondition,\r\n updated: items[item].updated,\r\n status: status\r\n };\r\n\r\n if (status === 0) {\r\n data.sequence = wIndex;\r\n dataSource.push(data);\r\n wIndex++;\r\n } else if (status === 1) {\r\n data.sequence = index;\r\n wDataSource.push(data);\r\n index++;\r\n } else {\r\n data.sequence = nIndex;\r\n nDataSource.push(data);\r\n nIndex++;\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n dataSource,\r\n wDataSource,\r\n nDataSource,\r\n initLoadding: false\r\n });\r\n break;\r\n case 'get_hawkeye_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ initLoadding: false });\r\n break;\r\n case 'remove_hawkeye_success':\r\n if (hawkeyeId !== '') {\r\n var { nDataSource } = this.state;\r\n var hawkeyeIds = hawkeyeId.split(',');\r\n\r\n nDataSource = nDataSource.filter(function (v) { return hawkeyeIds.indexOf(v.key.toString()) === -1 });\r\n var len = nDataSource.length;\r\n for (var ii = 0; ii < len; ii++) {\r\n var index = ii + 1;\r\n nDataSource[ii].sequence = index;\r\n }\r\n\r\n this.setState({ nDataSource, initLoadding: false });\r\n }\r\n break;\r\n case 'remove_hawkeye_fail':\r\n var error = languageMessages['deleteHawkeyeFailed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ initLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onCreateHawkEye = e => {\r\n e.preventDefault();\r\n\r\n emitter.emit('callJump', 'hawkeye');\r\n\r\n history.push(\"/hawkeye\");\r\n }\r\n\r\n onChangeHawkeyeItems = activeKey => {\r\n sessionStorage.setItem(\"hawkeyeListTabActiveKey\", activeKey);\r\n this.setState({ activeKey, selectedRowKeys: [] });\r\n }\r\n\r\n onHawkeyePlaceOrder = hawkeyeId => {\r\n //var hawkeyeIds = [hawkeyeId];\r\n this.hawkeyePlaceOrder(hawkeyeId);\r\n }\r\n\r\n hawkeyePlaceOrder(hawkeyeId) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var tmpHawkeyeOrder = this.state.wDataSource.filter(function (e) { return hawkeyeId.indexOf(e.key) >= 0 });\r\n\r\n if (tmpHawkeyeOrder.length > 0) {\r\n this.setState({ placeOrderVisible: true, hawkeyeOrder: tmpHawkeyeOrder[0] });\r\n }\r\n }\r\n }\r\n\r\n onHawkeyeClose = hawkeyeId => {\r\n var hawkeyeIds = [hawkeyeId];\r\n this.hawkeyeClose(hawkeyeIds);\r\n }\r\n\r\n onHawkeyeCloses = () => {\r\n var hawkeyeIds = this.state.selectedRowKeys;\r\n this.hawkeyeClose(hawkeyeIds);\r\n }\r\n\r\n hawkeyeClose(hawkeyeIds) {\r\n if (hawkeyeIds.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var hawkeyeName = '';\r\n var tmpHawkeye = this.state.wDataSource.filter(function (e) { return hawkeyeIds.indexOf(e.key) >= 0 });\r\n if (tmpHawkeye.length > 0) {\r\n hawkeyeName = tmpHawkeye[0].symbolName;\r\n }\r\n //var txt = '确定è¦å…³é—待下å•盯盘“' + hawkeyeName + 'â€ï¼Ÿ';\r\n var txt = strReplace(languageMessages['confirmCloseHawkeye'], { '{name}': hawkeyeName });\r\n if (hawkeyeIds.length > 1) {\r\n //txt = '确定è¦å…³é—“' + hawkeyeName + 'â€ç‰ ' + hawkeyeIds.length + ' 个待下å•盯盘?';\r\n txt = strReplace(languageMessages['confirmCloseHawkeyes'], { '{name}': hawkeyeName, '{num}': hawkeyeIds.length });\r\n }\r\n var hawkeyeId = hawkeyeIds.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['prompt'],\r\n content: txt,\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ initLoadding: true }, () => {\r\n emitter.emit('HawkeyeConfirm', hawkeyeId, 0);\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n }\r\n\r\n onHawkeyeCancel = hawkeyeId => {\r\n //e.stopPropagation();\r\n\r\n var hawkeyeIds = [hawkeyeId];\r\n this.hawkeyeCancel(hawkeyeIds);\r\n }\r\n\r\n onHawkeyeCancels = () => {\r\n var hawkeyeIds = this.state.selectedRowKeys;\r\n this.hawkeyeCancel(hawkeyeIds);\r\n }\r\n\r\n hawkeyeCancel(hawkeyeIds) {\r\n if (hawkeyeIds.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var hawkeyeName = '';\r\n var tmpHawkeye = this.state.dataSource.filter(function (e) { return e.key === hawkeyeIds[0] });\r\n if (tmpHawkeye.length > 0) {\r\n hawkeyeName = tmpHawkeye[0].symbolName;\r\n }\r\n //var txt = '确定è¦ç»ˆæ¢ç›‘控ä¸ç›¯ç›˜â€œ' + hawkeyeName + 'â€ï¼Ÿ';\r\n var txt = strReplace(languageMessages['confirmStopHawkeye'], { '{name}': hawkeyeName });\r\n if (hawkeyeIds.length > 1) {\r\n //txt = '确定è¦ç»ˆæ¢â€œ' + hawkeyeName + 'â€ç‰ ' + hawkeyeIds.length + ' 个监控ä¸ç›¯ç›˜ï¼Ÿ';\r\n txt = strReplace(languageMessages['confirmStopHawkeyes'], { '{name}': hawkeyeName, '{num}': hawkeyeIds.length });\r\n }\r\n var hawkeyeId = hawkeyeIds.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['prompt'],\r\n content: txt,\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ initLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_send_hub_message\", payload: { service: 'SendHawkeyeCancel', userId: _this.user.username, msg: hawkeyeId } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n }\r\n\r\n onRemove = hawkeyeId => {\r\n //e.stopPropagation();\r\n\r\n var hawkeyeIds = [hawkeyeId];\r\n this.remove(hawkeyeIds);\r\n }\r\n\r\n onRemoves = () => {\r\n var hawkeyeIds = this.state.selectedRowKeys;\r\n this.remove(hawkeyeIds);\r\n }\r\n\r\n remove(hawkeyeIds) {\r\n if (hawkeyeIds.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var hawkeyeName = '';\r\n var tmpHawkeye = this.state.nDataSource.filter(function (e) { return e.key === hawkeyeIds[0] });\r\n if (tmpHawkeye.length > 0) {\r\n hawkeyeName = tmpHawkeye[0].symbolName;\r\n }\r\n //var txt = '确定è¦åˆ 除已结æŸç›¯ç›˜â€œ' + hawkeyeName + 'â€ï¼Ÿ';\r\n var txt = strReplace(languageMessages['confirmRemoveHawkeye'], { '{name}': hawkeyeName });\r\n if (hawkeyeIds.length > 1) {\r\n //txt = '确定è¦åˆ 除“' + hawkeyeName + 'â€ç‰ ' + hawkeyeIds.length + ' 个已结æŸç›¯ç›˜ï¼Ÿ';\r\n txt = strReplace(languageMessages['confirmRemoveHawkeyes'], { '{name}': hawkeyeName, '{num}': hawkeyeIds.length });\r\n }\r\n var hawkeyeId = hawkeyeIds.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['prompt'],\r\n content: txt,\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ initLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_hawkeye\", payload: { UserId: _this.user.username, hawkeyeId: hawkeyeId } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n OnSelectRows = (record) => {\r\n return {\r\n onClick: () => {\r\n \r\n this.setState({ rowId: record.key });\r\n }\r\n }\r\n }\r\n */\r\n\r\n setRowClassName = (record) => {\r\n return record.key === this.state.rowId ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n handleConfirmOrder = () => {\r\n var { hawkeyeOrder } = this.state;\r\n\r\n this.setState({ initLoadding: true, placeOrderVisible: false }, () => {\r\n emitter.emit('HawkeyeConfirm', hawkeyeOrder.key, 1);\r\n });\r\n }\r\n\r\n handleCancelOrder = () => {\r\n this.setState({ placeOrderVisible: false, hawkeyeOrder: {} });\r\n }\r\n\r\n renderHawkeyeOrder(hawkeyeOrder) {\r\n return <div>\r\n <p>{languageMessages['commissionInformation']}</p>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={4}>{languageMessages['symbolCode']}:</Col>\r\n <Col className=\"common-gutter-row\" span={20}>{hawkeyeOrder['symbolCode']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={4}>{languageMessages['symbolName']}:</Col>\r\n <Col className=\"common-gutter-row\" span={20}>{hawkeyeOrder['symbolName']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={4}>{languageMessages['tradeDirection']}:</Col>\r\n <Col className=\"common-gutter-row\" span={20}>{hawkeyeOrder['Direction'] === 'Close Short' ? languageMessages['closeShort'] : languageMessages['closeLong']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={4}>{languageMessages['tradeQuantity']}:</Col>\r\n <Col className=\"common-gutter-row\" span={20}>{hawkeyeOrder['tradeQuantity']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={4}>{languageMessages['commissionMode']}</Col>\r\n <Col className=\"common-gutter-row\" span={20}>{languageMessages['marketPrice']}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n render() {\r\n const { wDataSource, dataSource, nDataSource, selectedRowKeys, activeKey } = this.state;\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n //onClick: this.onSelectChange,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n var operations = '';\r\n switch (activeKey) {\r\n case '0':\r\n operations = <Button size='small' onClick={this.onHawkeyeCloses} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['close']}</Button>;\r\n break;\r\n case '1':\r\n operations = <Button size='small' onClick={this.onHawkeyeCancels} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['stop']}</Button>;\r\n break;\r\n case '2':\r\n operations = <Button size='small' onClick={this.onRemoves} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>;\r\n break;\r\n default:\r\n operations = <Button size='small' onClick={this.onHawkeyeCancels} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['stop']}</Button>;\r\n break;\r\n }\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myHawkeye']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onCreateHawkEye}>{languageMessages['newHawkeye']}</Button>\r\n ]} />\r\n </div>\r\n <Modal title={languageMessages['orderConfirmation']}\r\n visible={this.state.placeOrderVisible}\r\n okText={languageMessages['confirm']}\r\n onOk={this.handleConfirmOrder}\r\n cancelText={languageMessages['cancel']}\r\n onCancel={this.handleCancelOrder}>\r\n {this.renderHawkeyeOrder(this.state.hawkeyeOrder)}\r\n </Modal>\r\n <Layout className='sub-tabs-content'>\r\n <div className=\"card-container common-tabs\">\r\n <Tabs activeKey={activeKey} type=\"card\"\r\n onChange={this.onChangeHawkeyeItems}\r\n tabBarExtraContent={operations}>\r\n <TabPane tab={languageMessages['pendingOrder']} key=\"0\">\r\n <Table bordered size='small' columns={this.wColumns}\r\n dataSource={wDataSource}\r\n loading={this.state.initLoadding}\r\n rowSelection={rowSelection}\r\n //onRow={this.OnSelectRows}\r\n rowClassName={this.setRowClassName} />\r\n </TabPane>\r\n <TabPane tab={languageMessages['monitoring']} key=\"1\">\r\n <Table bordered size='small' columns={this.columns}\r\n dataSource={dataSource}\r\n loading={this.state.initLoadding}\r\n rowSelection={rowSelection}\r\n //onRow={this.OnSelectRows}\r\n rowClassName={this.setRowClassName}/>\r\n </TabPane>\r\n <TabPane tab={languageMessages['over']} key=\"2\">\r\n <Table className='common-table-gray' bordered size='small' columns={this.nColumns}\r\n dataSource={nDataSource}\r\n loading={this.state.initLoadding}\r\n rowSelection={rowSelection}\r\n //onRow={this.OnSelectRows}\r\n rowClassName={this.setRowClassName}/>\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n </Layout>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.hawkeye;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(HawkeyeListPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Row, Col, Tooltip, Divider } from 'antd';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass StockFormulaPage extends Component {\r\n render() {\r\n var { conceptId } = this.props;\r\n\r\n // ç–略库解释\r\n this.conceptExplanations = JSON.parse(sessionStorage.getItem(\"ConceptExplanationsCache\") || '[]') || [];\r\n\r\n // ç–略库\r\n this.concepts = JSON.parse(sessionStorage.getItem(\"ConceptsCache\") || '{}') || {};\r\n\r\n var conceptStrategy = [];\r\n for (var kk in this.concepts) {\r\n conceptStrategy = this.concepts[kk].filter((e) => e.key == conceptId);\r\n if (conceptStrategy.length > 0) break;\r\n }\r\n\r\n var comment = '';\r\n var html = [];\r\n if (conceptStrategy.length > 0) {\r\n var filterString = [];\r\n if (conceptStrategy[0].filterString !== '') {\r\n var explanations = conceptStrategy[0].filterString.split(',');\r\n if (explanations.length > 0) {\r\n for (var num in explanations) {\r\n filterString.push(this.conceptExplanations[explanations[num]]);\r\n }\r\n }\r\n }\r\n\r\n comment = conceptStrategy[0].comment;\r\n\r\n var index = 0;\r\n for (var kk in filterString) {\r\n var filterStringTitle = locale.toLowerCase() === 'en-us' ? filterString[kk].us : filterString[kk].cn;\r\n\r\n if (filterStringTitle !== '') {\r\n var text = <span>{filterStringTitle}</span>;\r\n html.push(<Tooltip overlayClassName='common-explanation' key={index} placement=\"bottom\" title={text}><span className='common-formula common-formula-explanation'>{filterString[kk].formula}</span></Tooltip>);\r\n } else {\r\n html.push(<Tooltip overlayClassName='common-explanation' key={index} placement=\"bottom\"><span className='common-formula'>{filterString[kk].formula}</span></Tooltip>);\r\n if (filterString[kk].formula === ';') html.push(<br key={'br_'+index} />);\r\n }\r\n index++;\r\n }\r\n }\r\n \r\n return (<Row gutter={1}>\r\n <Col span={14}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['strategy.formula']}</div>\r\n <div className='common-edit'>{html}</div>\r\n </Col>\r\n <Col span={10}>\r\n <div className='common-title'>{languageMessages['comment']}</div>\r\n <div className='common-edit'>{comment}</div>\r\n </Col>\r\n </Row>);\r\n }\r\n}\r\n\r\nexport { StockFormulaPage as default }","import React, { Component } from 'react';\r\nimport { Radio, Select, Divider, Alert, Icon } from 'antd';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nconst MaxTagTextLength = 5;\r\nconst SelectWidth = 130;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass SymbolGroupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.stockData = [];\r\n this.conceptData = [];\r\n this.srcData = [];\r\n this.indexData = [];\r\n\r\n this.customGroupsData = [];\r\n\r\n this.state = {\r\n isRefresh: false,\r\n stockPoolKey: 'STOCK',\r\n\r\n stockCount: 0,\r\n\r\n stock: '3180',\r\n concept: ['2'],\r\n src: ['5'],\r\n index: ['7'],\r\n\r\n st: '1',\r\n\r\n generalIndex: '8001,8002,8003,8004,8005',\r\n\r\n fund: '4006',\r\n\r\n customGroups: '-',\r\n\r\n maxTagPlaceholder: '...',\r\n\r\n isSymbolGroup: true,\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n var { isRefresh, stock, concept, src, index, st, generalIndex, fund, customGroups } = this.state;\r\n if (!isRefresh) {\r\n var { defaultSymbolGroups } = this.props;\r\n var sectors = defaultSymbolGroups.sectors;\r\n if (sectors !== undefined && sectors !== null) {\r\n //概念\r\n this.conceptData = [];\r\n this.conceptData.push(<Option key='2'>{languageMessages['select.all']}</Option>);\r\n if (sectors[2] !== undefined) {\r\n for (let key in sectors[2].items) {\r\n var subGroupName = sectors[2].items[key].cn;\r\n\r\n this.conceptData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n //è¯ç›‘会\r\n this.srcData = [];\r\n this.srcData.push(<Option key='5'>{languageMessages['select.all']}</Option>);\r\n if (sectors[5] !== undefined) {\r\n for (let key in sectors[5].items) {\r\n var subGroupName = sectors[5].items[key].cn;\r\n\r\n this.srcData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n //指数\r\n this.indexData = [];\r\n this.indexData.push(<Option key='7'>{languageMessages['select.all']}</Option>);\r\n if (sectors[7] !== undefined) {\r\n for (let key in sectors[7].items) {\r\n var subGroupName = sectors[7].items[key].cn;\r\n\r\n this.indexData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n isRefresh = true;\r\n } else {\r\n this.conceptData = [];\r\n this.conceptData.push(<Option key='2'> -- </Option>);\r\n\r\n this.srcData = [];\r\n this.srcData.push(<Option key='5'> -- </Option>);\r\n\r\n this.indexData = [];\r\n this.indexData.push(<Option key='7'> -- </Option>);\r\n }\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n //设置默认值\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var num = stockGroups.indexOf('-');\r\n if (num > -1) {\r\n var tmpSt = stockGroups.slice(num, stockGroups.length);\r\n if (tmpSt !== '') st = tmpSt;\r\n\r\n stockGroups = stockGroups.slice(0, num);\r\n }\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sh = sg[ks].substr(0, 1);\r\n switch (sh) {\r\n case '2':\r\n concept = sg[ks].split(',');\r\n break;\r\n case '5':\r\n src = sg[ks].split(',');\r\n break;\r\n case '7':\r\n index = sg[ks].split(',');\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n generalIndex = stockGroups;\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (isRefresh) {\r\n this.setState({\r\n isRefresh,\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n concept: concept,\r\n src: src,\r\n index: index,\r\n\r\n st: st,\r\n\r\n generalIndex: generalIndex,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { stock, generalIndex, fund, customGroups } = this.state;\r\n var { defaultSymbolGroups } = props;\r\n\r\n var concept = ['2'], src = ['5'], index = ['7'], st = '1';\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var num = stockGroups.indexOf('-');\r\n if (num > -1) {\r\n var tmpSt = stockGroups.slice(num, stockGroups.length);\r\n if (tmpSt !== '') st = tmpSt;\r\n\r\n stockGroups = stockGroups.slice(0, num);\r\n }\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sh = sg[ks].substr(0, 1);\r\n switch (sh) {\r\n case '2':\r\n concept = sg[ks].split(',');\r\n break;\r\n case '5':\r\n src = sg[ks].split(',');\r\n break;\r\n case '7':\r\n index = sg[ks].split(',');\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n generalIndex = stockGroups;\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.setState({\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n concept: concept,\r\n src: src,\r\n index: index,\r\n\r\n st: st,\r\n\r\n generalIndex: generalIndex,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n this.setStockGroup('stockPoolKey', e.target.value);\r\n };\r\n\r\n handleStockChange = value => {\r\n this.setStockGroup('stock', value.key);\r\n }\r\n\r\n ///\r\n // a 已选ä¸ï¼Œb 当å‰é€‰ä¸ï¼Œ key 全部, items 当å‰åˆ—表\r\n ///\r\n ///setSelectStockGroup(a, b, items, key) {\r\n setSelectStockGroup(a, b, key) {\r\n var data = [];\r\n if (a.length > b.length) {\r\n if (b.length > 0) {\r\n var tmp = a.filter(function (i) { return b.indexOf(i) === -1; });\r\n if (tmp.length > 0) {\r\n if (tmp.indexOf(key) > -1) { // å…¨ä¸é€‰\r\n data = [key];\r\n } else {\r\n data = b;\r\n var index = data.indexOf(key);\r\n if (index > -1) {\r\n data.splice(index, 1);\r\n }\r\n }\r\n }\r\n } else {\r\n data = [key];\r\n /**\r\n if (a.indexOf(key) > -1) {\r\n for (let kk in items) {\r\n data.push(kk);\r\n }\r\n }\r\n */\r\n }\r\n } else {\r\n var tmp = b.filter(function (i) { return a.indexOf(i) === -1; });\r\n if (tmp.length > 0) {\r\n if (tmp.indexOf(key) > -1) { // 全选\r\n data = [key];\r\n /**\r\n for (let kk in items) {\r\n data.push(kk);\r\n }\r\n */\r\n } else {\r\n data = b;\r\n var index = data.indexOf(key);\r\n if (index > -1) {\r\n data.splice(index, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length === 0) data = [key];\r\n return data;\r\n };\r\n\r\n handleConceptChange = value => {\r\n var { concept } = this.state;\r\n concept = this.setSelectStockGroup(concept, value, '2');\r\n\r\n if (concept.indexOf('2') > -1) {\r\n this.setStockGroup('concept', []);\r\n } else {\r\n this.setStockGroup('concept', concept);\r\n }\r\n }\r\n\r\n handleSrcChange = value => {\r\n var { src } = this.state;\r\n src = this.setSelectStockGroup(src, value, '5');\r\n\r\n if (src.indexOf('5') > -1) {\r\n this.setStockGroup('src', []);\r\n } else {\r\n this.setStockGroup('src', src);\r\n }\r\n }\r\n\r\n handleIndexChange = value => {\r\n var { index } = this.state;\r\n index = this.setSelectStockGroup(index, value, '7');\r\n\r\n if (index.indexOf('7') > -1) {\r\n this.setStockGroup('index', []);\r\n } else {\r\n this.setStockGroup('index', index);\r\n }\r\n };\r\n\r\n handleStChange = value => {\r\n this.setStockGroup('st', value.key);\r\n }\r\n\r\n handleFundChange = value => {\r\n this.setStockGroup('fund', value.key);\r\n }\r\n\r\n handleCustomGroupsChange = value => {\r\n this.setStockGroup('customGroups', value.key);\r\n }\r\n\r\n setStockGroup(type, value) {\r\n var { stockPoolKey, stock, concept, src, index, st, generalIndex, fund, customGroups } = this.state;\r\n\r\n switch (type) {\r\n case 'stockPoolKey':\r\n stockPoolKey = value;\r\n break;\r\n case 'stock':\r\n stock = value;\r\n break;\r\n case 'concept':\r\n concept = value;\r\n break;\r\n case 'src':\r\n src = value;\r\n break;\r\n case 'index':\r\n index = value;\r\n break;\r\n case 'st':\r\n st = value;\r\n break;\r\n case 'fund':\r\n fund = value;\r\n break;\r\n case 'customGroups':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var stockGroups = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n stockGroups = stock;\r\n\r\n if (concept.indexOf('2') === -1) {\r\n stockGroups += ';' + concept.join(',');\r\n }\r\n if (src.indexOf('5') === -1) {\r\n stockGroups += ';' + src.join(',');\r\n }\r\n if (index.indexOf('7') === -1) {\r\n stockGroups += ';' + index.join(',');\r\n }\r\n if (st !== '1') {\r\n stockGroups += st;\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n stockGroups = generalIndex;\r\n break;\r\n case 'FUND':\r\n stockGroups = fund;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockGroups = customGroups;\r\n break;\r\n default:\r\n stockGroups = stock;\r\n break;\r\n }\r\n\r\n this.props.stockGroup({ stockPoolKey: stockPoolKey, stockGroups: stockGroups });\r\n }\r\n\r\n renderSymbolGroup() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['index.component']}</label>\r\n <Select labelInValue\r\n size='small'\r\n value={{ key: this.state.stock }}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStockChange}>\r\n <Option key='3180'>{languageMessages['all.stocks']}</Option>\r\n <Option key='3183'>{languageMessages['sh.sz.motherboard']}</Option>\r\n <Option key='3181'>{languageMessages['second.boardmarket']}</Option>\r\n <Option key='3182'>{languageMessages['sme.board']}</Option>\r\n <Option key='3069'>{languageMessages['csi.300']}</Option>\r\n <Option key='7300'>{languageMessages['csi.500']}</Option>\r\n <Option key='7302'>{languageMessages['csi.800']}</Option>\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['concept.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.concept}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleConceptChange}>\r\n {this.conceptData}\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['src.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.src}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleSrcChange}>\r\n {this.srcData}\r\n </Select>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['index.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.index}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleIndexChange}>\r\n {this.indexData}\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['ST.stock']}</label>\r\n <Select labelInValue\r\n size='small'\r\n value={{ key: this.state.st }}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStChange}>\r\n <Option key='1'>{languageMessages['contain']}</Option>\r\n <Option key='-9001'>{languageMessages['excluded']}</Option>\r\n </Select>\r\n </div>\r\n </div>);\r\n }\r\n\r\n //基金\r\n renderFundPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <label>{languageMessages['sys.fund.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.fund }}\r\n style={{ width: 120, padding: '0 10px' }}\r\n onChange={this.handleFundChange}>\r\n <Option key='4006'>ETF</Option>\r\n <Option key='4030'>{languageMessages['sh.grading.mother']}</Option>\r\n <Option key='4031'>{languageMessages['sh.grading.a']}</Option>\r\n <Option key='4032'>{languageMessages['sh.grading.b']}</Option>\r\n <Option key='4033'>{languageMessages['sz.grading.mother']}</Option>\r\n <Option key='4034'>{languageMessages['sz.grading.a']}</Option>\r\n <Option key='4035'>{languageMessages['sz.grading.b']}</Option>\r\n </Select>\r\n </div>);\r\n }\r\n\r\n //自选\r\n renderCustomGroupsPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <span>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </span>\r\n </div>);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isSymbolGroup } = this.state;\r\n isSymbolGroup = isSymbolGroup ? false : true;\r\n this.setState({ isSymbolGroup });\r\n }\r\n\r\n renderPoolCount(stockPoolKey, stockCount) {\r\n if (stockPoolKey === 'STOCK') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'GENERAL_INDEX') {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"index.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'FUND') {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"fund.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockCount, isSymbolGroup } = this.state;\r\n return (<div>\r\n {this.renderPoolCount(stockPoolKey, stockCount)}\r\n <div style={{ display: isSymbolGroup ? '' : 'none' }}>\r\n <RadioGroup onChange={this.onSelectStockPool} value={stockPoolKey}>\r\n <Radio value={'STOCK'}>{languageMessages['stock']}</Radio>\r\n <Radio value={'GENERAL_INDEX'}>{languageMessages['general.index']}</Radio>\r\n <Radio value={'FUND'}>{languageMessages['fund']}</Radio>\r\n <Radio value={'CUSTOM_GROUPS'}>{languageMessages['optional.stock.pool']}</Radio>\r\n </RadioGroup>\r\n {\r\n stockPoolKey === 'STOCK' ? this.renderSymbolGroup() :\r\n stockPoolKey === 'FUND' ? this.renderFundPanel() :\r\n stockPoolKey === 'CUSTOM_GROUPS' ? this.renderCustomGroupsPanel() : ''\r\n }\r\n {this.props.error === 'STOCK_GROUP_ERROR' ? (<Alert message={languageMessages['please.select.stock.pool']} type=\"error\" />) : ''}\r\n </div>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { SymbolGroupPage as default }","import React, { Component } from 'react';\r\nimport { Row, Col, Radio, Select, Divider, Alert, Icon, Checkbox } from 'antd';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nconst MaxTagTextLength = 5;\r\nconst SelectWidth = 150;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass USSymbolGroupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.html = null;\r\n\r\n this.industryTitle = [];\r\n this.industryData = [];\r\n \r\n this.customGroupsData = [];\r\n\r\n this.state = {\r\n isRefresh: false,\r\n stockPoolKey: 'STOCK',\r\n\r\n stockCount: 0,\r\n\r\n stock: '10000',\r\n industry: {},\r\n\r\n fund: '30000',\r\n\r\n customGroups: '-',\r\n\r\n maxTagPlaceholder: '...',\r\n\r\n isSymbolGroup: true,\r\n\r\n sectorIndustryBtn: 'sector-industry-btn',\r\n sectorIndustryIcon: 'plus',\r\n sectorIndustryContent: 'none',\r\n sectorClass: {},\r\n industryClass: {},\r\n industryItemClass: {},\r\n industrySelectClass: {},\r\n\r\n selectSectorId: 0,\r\n \r\n popsTop: 0,\r\n popsLeft: 0,\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n var { isRefresh, stock, industry, fund, customGroups } = this.state;\r\n if (!isRefresh) {\r\n var { defaultSymbolGroups } = this.props;\r\n\r\n /**\r\n for (var kk in sectors) {\r\n if (kk >= 100) continue;\r\n\r\n var data = [];\r\n data.push(<Option key={kk}>{languageMessages['select.all']}</Option>);\r\n for (var key in sectors[kk].items) {\r\n var subGroupName = locale.toLowerCase() === 'en-us' ? sectors[kk].items[key].en : sectors[kk].items[key].cn;\r\n\r\n data.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n\r\n this.industryTitle[kk] = locale.toLowerCase() === 'en-us' ? sectors[kk].en : sectors[kk].cn;\r\n this.industryData[kk] = data;\r\n }\r\n */\r\n\r\n isRefresh = true;\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n if(sh > 0) industry[sh] = sg[ks].split(',');\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (isRefresh) {\r\n this.setState({\r\n isRefresh,\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { stockPoolKey, stock, industry, fund, customGroups } = this.state;\r\n var { defaultSymbolGroups } = props;\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n\r\n stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n industry[sh] = sg[ks].split(',');\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.setState({\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n this.setStockGroup('stockPoolKey', e.target.value);\r\n\r\n this.setState({\r\n stockPoolKey: e.target.value,\r\n });\r\n };\r\n\r\n handleStockChange = value => {\r\n this.setStockGroup('stock', value.key);\r\n\r\n this.setState({\r\n stock: value.key,\r\n });\r\n }\r\n\r\n handleCustomGroupsChange = value => {\r\n this.setStockGroup('customGroups', value.key);\r\n\r\n this.setState({\r\n customGroups: value.key,\r\n });\r\n }\r\n\r\n setStockGroup(type, value) {\r\n var { stockPoolKey, stock, industry, fund, customGroups } = this.state;\r\n\r\n switch (type) {\r\n case 'stockPoolKey':\r\n stockPoolKey = value;\r\n break;\r\n case 'stock':\r\n stock = value;\r\n break;\r\n case 'industry':\r\n industry = value;\r\n break;\r\n case 'customGroups':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n var stockGroups = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n stockGroups = stock;\r\n \r\n for (var kk in industry) {\r\n if (industry[kk].indexOf(kk) === -1) {\r\n stockGroups += ';' + industry[kk].join(',');\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n stockGroups = fund;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockGroups = customGroups;\r\n break;\r\n default:\r\n stockGroups = stock;\r\n break;\r\n }\r\n\r\n this.props.stockGroup({ stockPoolKey: stockPoolKey, stockGroups: stockGroups });\r\n }\r\n\r\n handleSectorMouseOver = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn hover';\r\n let sectorIndustryIcon = 'minus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'block' });\r\n }\r\n\r\n handleSectorMouseOut = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn';\r\n let sectorIndustryIcon = 'plus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'none' });\r\n }\r\n\r\n HandleMouseOver = (key) => {\r\n var industry = document.getElementById('industry-' + key);\r\n if (industry) {\r\n\r\n var h1 = key * 32;\r\n\r\n var h2 = industry.offsetHeight;\r\n if (h1 > h2) {\r\n industry.style.top = h1 + 'px';\r\n }\r\n\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = 'hover';\r\n industryClass[key] = 'block';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n }\r\n\r\n HandleMouseOut = (key) => {\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = '';\r\n industryClass[key] = 'none';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n\r\n HandleIndustryMouseOver = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = 'hover';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryMouseOut = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = '';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryClick = (sectorId, industryId) => {\r\n let { industry, industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industrySelectClass[industryId] = 'checked';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n industryItems.push(industryId);\r\n industry[sectorId] = industryItems\r\n } else {\r\n industry[sectorId] = [industryId]\r\n }\r\n \r\n } else {\r\n industrySelectClass[industryId] = '';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n if (industryItems.length > 0) {\r\n let index = industryItems.indexOf(industryId);\r\n if (index > -1) {\r\n industryItems.splice(index, 1);\r\n if (industryItems.length > 0) {\r\n industry[sectorId] = industryItems;\r\n } else {\r\n delete industry[sectorId];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStockGroup('industry', industry);\r\n\r\n this.setState({ industry, industryItemClass })\r\n }\r\n\r\n renderSectorIndustry() {\r\n var { defaultSymbolGroups } = this.props;\r\n var sectors = defaultSymbolGroups.sectors;\r\n\r\n if (sectors !== undefined && sectors !== null) {\r\n return <ul className=\"sector-industry-content\" style={{ display: this.state.sectorIndustryContent }}>\r\n {\r\n Object.keys(sectors).map((kk, index) => {\r\n let items = sectors[kk];\r\n let industryClass = this.state.industryClass[index] === undefined ? 'none' : this.state.industryClass[index];\r\n let isCheck = this.state.industry[kk] === undefined ? false : true;\r\n return <li key={kk} onMouseOver={() => this.HandleMouseOver(index)} onMouseOut={() => this.HandleMouseOut(index)}>\r\n <div className={this.state.sectorClass[index]}><Checkbox checked={isCheck} /><span className='title'>{locale.toLowerCase() === 'en-us' ? items.en : items.cn}</span></div>\r\n <div className='industry-content' style={{ display: industryClass }} id={'industry-' + index}><dl>\r\n {Object.keys(items.items).map(k => {\r\n let industrySelectClass = this.state.industrySelectClass[k] === undefined ? '' : this.state.industrySelectClass[k];\r\n let industryItemClass = this.state.industryItemClass[k] === undefined ? '' : this.state.industryItemClass[k];\r\n return <dd key={k} className={industrySelectClass + ' ' + industryItemClass}\r\n onClick={() => this.HandleIndustryClick(kk, k)}\r\n onMouseOver={() => this.HandleIndustryMouseOver(k)}\r\n onMouseOut={() => this.HandleIndustryMouseOut(k)}>{locale.toLowerCase() === 'en-us' ? items.items[k].en : items.items[k].cn}</dd>\r\n })}\r\n </dl></div>\r\n </li>\r\n })\r\n }\r\n </ul>;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n renderSymbolGroup() {\r\n return (<div className='common-industry'>\r\n <label className='common-label'>{languageMessages['index.component']}</label>\r\n <Select labelInValue\r\n size='small'\r\n defaultValue={{ key: this.state.stock }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStockChange}>\r\n <Option key='10000'>{languageMessages['all.stocks']}</Option>\r\n <Option key='10301'>{languageMessages['d-jones.index']}</Option>\r\n <Option key='10202'>{languageMessages['nasdaq.100']}</Option>\r\n <Option key='10401'>{languageMessages['sp.500']}</Option>\r\n <Option key='10501'>{languageMessages['russell.2000']}</Option>\r\n </Select>\r\n <div className='sector-industry-container' onMouseOver={this.handleSectorMouseOver} onMouseOut={this.handleSectorMouseOut}>\r\n <span className={this.state.sectorIndustryBtn}>\r\n <Icon type={this.state.sectorIndustryIcon} /><label>{languageMessages['Sector']}</label>\r\n </span>\r\n {this.renderSectorIndustry()}\r\n </div>\r\n </div>)\r\n }\r\n\r\n //自选\r\n renderCustomGroupsPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <div>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </div>\r\n </div>);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isSymbolGroup } = this.state;\r\n isSymbolGroup = isSymbolGroup ? false : true;\r\n this.setState({ isSymbolGroup });\r\n }\r\n\r\n renderPoolCount(stockPoolKey, stockCount) {\r\n if (stockPoolKey === 'STOCK') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'FUND') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"fund.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockCount, isSymbolGroup } = this.state;\r\n return (<div>\r\n {this.renderPoolCount(stockPoolKey, stockCount)}\r\n <div style={{ display: isSymbolGroup ? '' : 'none' }}>\r\n <RadioGroup onChange={this.onSelectStockPool} value={stockPoolKey}>\r\n <Radio value={'STOCK'}>{languageMessages['stock']}</Radio>\r\n <Radio value={'FUND'}>{languageMessages['fund']}</Radio>\r\n <Radio value={'CUSTOM_GROUPS'}>{languageMessages['optional.stock.pool']}</Radio>\r\n </RadioGroup>\r\n {\r\n stockPoolKey === 'STOCK' ? this.renderSymbolGroup() :\r\n stockPoolKey === 'CUSTOM_GROUPS' ? this.renderCustomGroupsPanel() : ''\r\n }\r\n {this.props.error === 'STOCK_GROUP_ERROR' ? (<Alert message={languageMessages['please.select.stock.pool']} type=\"error\" />) : ''}\r\n </div>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { USSymbolGroupPage as default }","import React, { Component } from 'react';\r\nimport { Select, Divider } from 'antd';\r\n\r\nconst Option = Select.Option;\r\n\r\nclass StockOrderPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.languageMessages = window.appLocale.messages;\r\n\r\n this.defaultOrderType = [\r\n { key: '$LATEST_PRICE', value: this.languageMessages['latest.price'] },\r\n { key: '$RANGE_PERCENT', value: this.languageMessages['quote.change'] },\r\n { key: '$VOLUME_NUM', value: this.languageMessages['volume'] },\r\n { key: '$AMOUNT_NUM', value: this.languageMessages['turnover'] },\r\n { key: '$TURNOVER_RATE', value: this.languageMessages['turnover.rate'] },\r\n { key: '$HIST_VOLATILITY', value: this.languageMessages['volatility'] }\r\n ];\r\n \r\n this.state = {\r\n orderType: '$VOLUME_NUM', // æœ€æ–°ä»·ã€æ¶¨è·Œå¹…ã€æˆäº¤é‡ã€æˆäº¤é¢ã€æ¢æ‰‹çŽ‡ã€æ³¢åŠ¨çŽ‡\r\n orderDirection: '0',\r\n\r\n orderTypeItem: [], // 排åºåˆ—表\r\n\r\n isResetItem: true,\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n var { orderType, orderDirection } = this.state;\r\n\r\n this.props.stockOrder({\r\n orderType: orderType,\r\n orderDirection: orderDirection\r\n });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { filterString } = props;\r\n var { isResetItem } = this.state;\r\n\r\n if (!isResetItem) {\r\n this.setState({ isResetItem: true });\r\n } else {\r\n var customVariable = [];\r\n if (this.defaultOrderType.length > 0) {\r\n for (var k in this.defaultOrderType) {\r\n customVariable.push({ key: this.defaultOrderType[k].key, value: this.defaultOrderType[k].value });\r\n }\r\n }\r\n \r\n filterString = filterString === undefined ? '' : '';\r\n \r\n var startPos = filterString.indexOf(\"$\");\r\n while (startPos > -1) {\r\n var tmpString = '';\r\n var endPos = filterString.indexOf(\"$\", startPos + 1);\r\n if (endPos > -1) {\r\n tmpString = filterString.slice(startPos, endPos);\r\n } else {\r\n tmpString = filterString.slice(startPos);\r\n }\r\n\r\n var isPos = false;\r\n var tmpPos = tmpString.indexOf(\"@\");\r\n var splitPos = tmpString.indexOf(\":\");\r\n if (tmpPos > -1) {\r\n if (tmpPos > splitPos && splitPos > -1) {\r\n isPos = true;\r\n }\r\n } else {\r\n if (splitPos > -1) {\r\n isPos = true;\r\n }\r\n }\r\n\r\n if (isPos) {\r\n tmpString = tmpString.slice(0, splitPos);\r\n tmpString = tmpString.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n customVariable.push({ key: tmpString, value: tmpString });\r\n }\r\n startPos = endPos;\r\n }\r\n\r\n var orderTypeItem = [];\r\n if (customVariable.length > 0) {\r\n for (var k in customVariable) {\r\n orderTypeItem.push(<Option key={customVariable[k].key}>{customVariable[k].value}</Option>);\r\n }\r\n }\r\n this.setState({ orderTypeItem });\r\n }\r\n }\r\n\r\n handleOrderTypeChange = value => {\r\n var { orderDirection } = this.state;\r\n\r\n this.setState({\r\n orderType: value.key,\r\n isResetItem: false\r\n }, () => {\r\n this.props.stockOrder({\r\n orderType: value.key,\r\n orderDirection: orderDirection\r\n });\r\n });\r\n }\r\n\r\n handleOrderDirectionChange = value => {\r\n var { orderType } = this.state;\r\n\r\n this.setState({\r\n orderDirection: value.key,\r\n isResetItem: false\r\n }, () => {\r\n this.props.stockOrder({\r\n orderType: orderType,\r\n orderDirection: value.key\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (<div>\r\n <div className='common-title' style={{ padding: '8px 0' }}><Divider type=\"vertical\" />{this.languageMessages['sort.filter']}</div>\r\n <label>{this.languageMessages['press']}</label>\r\n <Select labelInValue size='small' disabled={this.props.isUseOrder}\r\n defaultValue={{ key: this.state.orderType }}\r\n style={{ width: 120, padding: '0 10px' }}\r\n onChange={this.handleOrderTypeChange}>\r\n {this.state.orderTypeItem}\r\n </Select>\r\n <label>{this.languageMessages['sort,filter']}</label>\r\n <Select labelInValue size='small' disabled={this.props.isUseOrder}\r\n defaultValue={{ key: this.state.orderDirection }}\r\n style={{ width: 80, padding: '0 10px' }}\r\n onChange={this.handleOrderDirectionChange}>\r\n <Option value=\"0\">{this.languageMessages['before']}</Option>\r\n <Option value=\"1\">{this.languageMessages['after']}</Option>\r\n </Select>\r\n <label>{this.languageMessages['ranking']}</label>\r\n </div>);\r\n }\r\n}\r\n\r\nexport { StockOrderPage as default }","import React, { Component } from 'react';\r\nimport { CSVLink } from \"react-csv\";\r\nimport { Table, PageHeader, Button, Input, Form, Menu, Dropdown, Icon, Modal } from 'antd';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass StockResultPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.csvData = [];\r\n\r\n this.myDate = new Date();\r\n this.fileName = 'scan_stock_result_'+this.myDate.getYear() +''+ this.myDate.getMonth() +''+ this.myDate.getDate() +''+ this.myDate.getHours() +''+ this.myDate.getMinutes() +''+ this.myDate.getSeconds() + \".csv\";\r\n\r\n this.state = {\r\n selectedRowKeys: [],\r\n\r\n saveStock: false,\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n modalVisible: false,\r\n\r\n stockName: '',\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n if (props.isStockGroupDone) {\r\n this.setState({ modalVisible: false });\r\n }\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys, saveStock: selectedRowKeys.length > 0 ? true : false });\r\n };\r\n\r\n onJoinCustomStock = e => {\r\n let { scanAlert } = this.props;\r\n let { selectedRowKeys } = this.state;\r\n \r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var groupId = e.key;\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpCustomGroups = customStockGroups.filter(function (e) { return e.groupId == groupId });\r\n if (tmpCustomGroups.length > 0) {\r\n var symbolList = tmpCustomGroups[0].symbolList;\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.props.customStockEvent({ GroupId: groupId, GroupName: tmpCustomGroups[0].groupName, SymbolList: symbolList, StockCount: stockCount });\r\n }\r\n } else {\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.setState({\r\n modalVisible: true,\r\n stockName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleSaveGroupName = () => {\r\n let { scanAlert } = this.props;\r\n let { stockName, selectedRowKeys } = this.state\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpData = customStockGroups.filter(function (e) { return e.groupName == stockName; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['stock.pool.name.already.exists'],\r\n });\r\n } else {\r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.props.customStockEvent({ GroupId: 0, GroupName: stockName, SymbolList: symbolList, StockCount: stockCount });\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleCancelGroupName = e => {\r\n this.setState({\r\n modalVisible: false,\r\n stockName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n onChangeGroupName = e => {\r\n e.preventDefault();\r\n\r\n let stockName = e.target.value;\r\n if (stockName !== '') {\r\n stockName = stockName.slice(0, 20);\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(stockName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['stock.pool.name.format'];\r\n }\r\n\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n stockName: stockName\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n let { scanAlert, stockPoolKey } = this.props;\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: this.state.selectedRowKeys,\r\n //onClick: this.onSelectChange,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n let columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'symbolCode',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: '$LATEST_PRICE',\r\n sorter: (a, b) => a.$LATEST_PRICE - b.$LATEST_PRICE,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n return <span>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: '$RANGE_PERCENT',\r\n sorter: (a, b) => a.$RANGE_PERCENT - b.$RANGE_PERCENT,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['$RANGE_PERCENT'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n }\r\n ]\r\n\r\n this.csvData = [];\r\n this.csvData.push([languageMessages['symbol.code'], languageMessages['symbol.code'], languageMessages['latest.price'], languageMessages['quote.change']]);\r\n\r\n var dataSource = [];\r\n if (scanAlert != null && scanAlert !== undefined) {\r\n var subject = scanAlert.title !== '' ? scanAlert.title.split(\",\") : [];\r\n if (subject.length > 0) {\r\n\r\n //获å–å˜é‡å› å\r\n /**\r\n subject.forEach((v, i) => {\r\n if (v === '$LATEST_PRICE' || v === '$RANGE_PERCENT') {\r\n var nn = v;\r\n \r\n if (v === '$LATEST_PRICE') nn = '最新价';\r\n if (v === '$RANGE_PERCENT') nn = '涨跌幅';\r\n \r\n columns.push({\r\n title: nn,\r\n dataIndex: v,\r\n sorter: (a, b) => a[v] - b[v],\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['$RANGE_PERCENT'] >= 0) {\r\n return <span style={{ color: \"red\" }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: \"green\" }}>{text}</span>;\r\n }\r\n },\r\n });\r\n }\r\n })\r\n */\r\n }\r\n\r\n //èŽ·å–æ¯æ”¯è‚¡ç¥¨çš„å˜é‡å€¼\r\n scanAlert.stockItems.forEach((item, index) => {\r\n var row = {\r\n key: index,\r\n sequence: index + 1\r\n }\r\n\r\n //å°†æ¯ä¸ªå˜é‡å€¼æ·»åŠ åˆ°row对象\r\n for (var kk in item) {\r\n if (kk === 'symbolCode' || kk === 'symbolName') {\r\n row[kk] = item[kk];\r\n }\r\n\r\n if (kk === '$LATEST_PRICE' || kk === '$RANGE_PERCENT') {\r\n if (kk === '$RANGE_PERCENT' && item[kk] === '-1000000000') {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n } else {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n }\r\n }\r\n }\r\n dataSource.push(row);\r\n this.csvData.push([row.symbolCode, row.symbolName, row.$LATEST_PRICE, row.$RANGE_PERCENT]);\r\n })\r\n }\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var customStockGroupData = [];\r\n if (customStockGroups.length > 0) {\r\n for (let key in customStockGroups) {\r\n customStockGroupData.push(<Menu.Item key={customStockGroups[key].groupId}>{customStockGroups[key].groupName}</Menu.Item>);\r\n }\r\n } else {\r\n customStockGroupData.push(<Menu.Item key='0'><Icon type=\"plus-circle\" />{languageMessages['new.stock.pool']}</Menu.Item>);\r\n }\r\n\r\n let menu = (\r\n <Menu onClick={this.onJoinCustomStock}>\r\n {customStockGroupData}\r\n </Menu>\r\n );\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n var txt = stockPoolKey === 'GENERAL_INDEX' ? languageMessages['index'] : stockPoolKey === 'FUND' ? languageMessages['fund'] : languageMessages['stock'];\r\n txt = txt.toLowerCase();\r\n return (<div className='common-stock-result'>\r\n <PageHeader\r\n title={(<p style={{ fontWeight: 'normal', fontSize: '14px', color: '#a2a2a2' }}>\r\n <FormattedMessage id=\"eligible.stocks\" values={{ num: dataSource.length || 0, name: txt }} />\r\n </p>)}\r\n extra={[\r\n <Dropdown key=\"1\" overlay={menu} disabled={!this.state.saveStock}><Button size='small'>{languageMessages['add.choice']}<Icon type=\"down\" /></Button></Dropdown>,\r\n <CSVLink key=\"2\" data={this.csvData} filename={this.fileName} className=\"ant-btn ant-btn-sm\" target=\"_blank\">\r\n <Icon type=\"download\" /><span>{languageMessages['save.stock']}</span>\r\n </CSVLink>\r\n ]} />\r\n <Modal title={languageMessages['new.stock.pool']}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleSaveGroupName}\r\n confirmLoading={this.props.stockGroupLoadding}\r\n onCancel={this.handleCancelGroupName}>\r\n <Form {...formItemLayout}>\r\n <Form.Item\r\n label={languageMessages['stock.pool.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['stock.pool.name.placeholder']} id={this.state.validateStatus} value={this.state.stockName} onChange={this.onChangeGroupName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n <Table rowSelection={rowSelection}\r\n bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n pagination={{ pageSize: 20 }} />\r\n </div>)\r\n }\r\n}\r\n\r\nexport { StockResultPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Tree, Button, Input, Form, Modal, Divider, Spin, message } from 'antd';\r\n\r\nimport StockFormulaPage from '../../pannels/stock/StockFormulaPage';\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\nimport USSymbolGroupPage from '../../pannels/stock/USSymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport StockResultPage from '../../pannels/stock/StockResultPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Sider, Content } = Layout;\r\n\r\nconst { TreeNode } = Tree;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass ConceptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.strageies = {};\r\n this.conceptExplanations = [];\r\n\r\n this.user = {};\r\n this.state = {\r\n customId: 0,\r\n stockPoolKey: 'STOCK',\r\n\r\n lastTimes: 0,\r\n\r\n conceptStrategyData: [],\r\n\r\n selectKeys: [],\r\n expandedKeys: [],\r\n\r\n stockGroups: window.webType === 'US' ? '10000' : '3180',\r\n\r\n filterId: 0,\r\n filterName: '',\r\n filterString: '',\r\n formulaString: '',\r\n\r\n orderType: '$VOLUME_NUM', //默认排åºç±»åž‹\r\n orderDirection: '0',\r\n isUseOrder: false,\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n\r\n saveVisible: false,\r\n\r\n stockCount: 0,\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n siderClass: false,\r\n };\r\n\r\n this.onSelectConceptStrategy = this.onSelectConceptStrategy.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_concept_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_concept_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n /**\r\n componentDidMount() {\r\n window.addEventListener('scroll', this.handleScroll.bind(this)); //ç›‘å¬æ»šåЍ\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('scroll', this.handleScroll.bind(this));\r\n }\r\n\r\n handleScroll = e => {\r\n const scrollTop = (e.srcElement && e.srcElement.scrollingElement.scrollTop) || document.body.scrollTop;\r\n\r\n const clientHeight = (e.srcElement && e.srcElement.scrollingElement.clientHeight) || document.body.clientHeight;\r\n // 页é¢é«˜åº¦\r\n const scrollHeight = (e.srcElement && e.srcElement.scrollingElement.scrollHeight) || document.body.scrollHeight;\r\n // è·ç¦»é¡µé¢åº•部的高度\r\n const height = scrollHeight - scrollTop - clientHeight;\r\n if (scrollTop >= 48) {\r\n //this.setState({ siderClass: true });\r\n } else {\r\n //this.setState({ siderClass: false });\r\n }\r\n \r\n //console.log(scrollTop, clientHeight, scrollHeight, height);\r\n }\r\n */\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'fs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ps':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's1':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's2':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n setTreeStrategy(key, tmpSelectedRowKeys) {\r\n if (this.strageies.hasOwnProperty(key)) {\r\n var tmpStrategy = this.strageies[key];\r\n if (tmpStrategy.hasOwnProperty('0')) {\r\n var kk = tmpStrategy['0'].key;\r\n if (tmpStrategy['0'].isLeaf) {\r\n var sks = [];\r\n sks.push(kk.toString());\r\n\r\n var filterString = [];\r\n if (tmpStrategy['0'].filterString !== '') {\r\n var explanations = tmpStrategy['0'].filterString.split(',');\r\n if (explanations.length > 0) {\r\n for (var num in explanations) {\r\n filterString.push(this.conceptExplanations[explanations[num]]);\r\n }\r\n }\r\n }\r\n\r\n var strings = '';\r\n if (filterString.length > 0) {\r\n for (var kk in filterString) {\r\n strings += filterString[kk].formula;\r\n }\r\n }\r\n\r\n this.setState({\r\n customId: 0,\r\n selectKeys: sks,\r\n expandedKeys: tmpSelectedRowKeys,\r\n filterName: tmpStrategy['0'].title,\r\n filterString: filterString,\r\n formulaString: strings,\r\n });\r\n } else {\r\n tmpSelectedRowKeys.push(kk.toString());\r\n this.setTreeStrategy(kk, tmpSelectedRowKeys);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setTreeStrategyData(key) {\r\n var dd = [];\r\n for (var kk in this.strageies[key]) {\r\n dd.push(this.strageies[key][kk]);\r\n var ks = this.strageies[key][kk].key;\r\n if (this.strageies.hasOwnProperty(ks)) {\r\n this.strageies[key][kk].children = this.setTreeStrategyData(ks);\r\n }\r\n }\r\n return dd;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, concepts, conceptExplanations, editStrategy, customGroup, permission, lastTimes } = props;\r\n\r\n switch (status) {\r\n case 'concept_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n // ç–略库解释\r\n this.conceptExplanations = conceptExplanations;\r\n // ç–略库\r\n var conceptStrategyData = [];\r\n for (var ii in concepts) {\r\n var tmpConcepts = [];\r\n for (var jj in concepts[ii]) {\r\n var key = concepts[ii][jj].id;\r\n var title = locale.toLowerCase() === 'en-us' ? concepts[ii][jj].en : concepts[ii][jj].cn;\r\n var filterString = concepts[ii][jj].filterString;\r\n var isLeaf = concepts[ii][jj].isLeaf;\r\n var comment = locale.toLowerCase() === 'en-us' ? concepts[ii][jj].cen : concepts[ii][jj].ccn;\r\n var tmpItem = { key: key, title: title, filterString: filterString, isLeaf: isLeaf, comment: comment };\r\n\r\n tmpConcepts.push(tmpItem);\r\n }\r\n\r\n this.strageies[ii] = tmpConcepts;\r\n }\r\n \r\n if (this.strageies.hasOwnProperty('0')) {\r\n var tmpSelectedRowKeys = [];\r\n this.setTreeStrategy('0', tmpSelectedRowKeys);\r\n\r\n for (var kk in this.strageies['0']) {\r\n var key = this.strageies['0'][kk].key;\r\n if (this.strageies.hasOwnProperty(key)) {\r\n this.strageies['0'][kk].children = this.setTreeStrategyData(key);\r\n }\r\n }\r\n conceptStrategyData = this.strageies[0];\r\n }\r\n \r\n sessionStorage.setItem(\"ConceptsCache\", JSON.stringify(this.strageies));\r\n sessionStorage.setItem(\"ConceptExplanationsCache\", JSON.stringify(this.conceptExplanations));\r\n\r\n this.setState({ conceptStrategyData, spinLoadding: false });\r\n break;\r\n case 'concept_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'scan_success':\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({ lastTimes: lastTimes, isShowStockResultPage: true, filterError: '' });\r\n break;\r\n case 'scan_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['stock.picker.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['no.choice.to.stock'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.stock.picker.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['stock.picker.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ filterError: error });\r\n break;\r\n case 'save_success':\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (customStrategy.length > 0) {\r\n const index = customStrategy.findIndex(item => item.id === editStrategy.id);\r\n if (index > -1) {\r\n customStrategy[index] = editStrategy;\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategy));\r\n\r\n var conceptStrategyCache = {\r\n customId: editStrategy.id,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n filterId: editStrategy.filterId,\r\n filterName: editStrategy.filterName,\r\n filterString: editStrategy.filterString,\r\n };\r\n sessionStorage.setItem(\"ConceptStrategyCache\", JSON.stringify(conceptStrategyCache));\r\n \r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n saveVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n customId: editStrategy.id,\r\n strategyName: editStrategy.filterName,\r\n });\r\n break;\r\n case 'save_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['save.strategy.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['save.strategy.failed'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.save.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['save.strategy.timeout'];\r\n break;\r\n case 7:\r\n error = languageMessages['save.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n\r\n }\r\n message.error(error);\r\n this.setState({\r\n saveVisible: false,\r\n });\r\n break;\r\n case 'update_customStock_success':\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n\r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['joining.stock.pool.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n isUseOrder: data.isUseOrder,\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n this.setState({\r\n stockCount: data.StockCount\r\n }, () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n this.props.dispatch({ type: \"action_update_result_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n this.props.dispatch({ type: \"action_add_result_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n }\r\n });\r\n }\r\n\r\n jumpMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/strategy\");\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/customStock\");\r\n }\r\n\r\n onMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/myStrategy\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n startStockPicker = () => {\r\n var { filterError, lastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['stock.picker.strategy.in.error']);\r\n //return;\r\n }\r\n\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n this.setState({ isShowStockResultPage: false, filterError: '' }, () => {\r\n this.checkOperatingStrategy('scen_strategy');\r\n });\r\n }\r\n };\r\n\r\n onSaveStrategy = () => {\r\n var { filterName } = this.state;\r\n\r\n this.setState({\r\n saveVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: filterName,\r\n });\r\n }\r\n\r\n handleSaveStrategy = () => {\r\n var { strategyName, customId } = this.state;\r\n\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.filterName == strategyName && e.id !== customId });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.checkOperatingStrategy('save_strategy');\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = () => {\r\n this.setState({\r\n saveVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n });\r\n };\r\n\r\n checkOperatingStrategy(type) {\r\n var { stockGroups,\r\n stockPoolKey,\r\n selectKeys,\r\n filterName,\r\n filterString,\r\n customId,\r\n strategyName,\r\n orderType,\r\n orderDirection,\r\n isUseOrder} = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR'\r\n });\r\n return;\r\n }\r\n \r\n var strings = '';\r\n for (var kk in filterString) {\r\n strings += filterString[kk].formula;\r\n }\r\n\r\n if (strings.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n strategyName = strategyName === '' ? filterName : strategyName;\r\n switch (type) {\r\n case 'scen_strategy':\r\n this.props.dispatch({\r\n type: \"action_scen_strategy\", payload: {\r\n UserId: this.user.username,\r\n Type: 0,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: strings,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n });\r\n break;\r\n case 'save_strategy':\r\n var conceptId = selectKeys.length > 0 ? selectKeys[0] : 0;\r\n this.props.dispatch({ type: \"action_save_strategy\", payload: { UserId: this.user.username, Type: 0, CustomId: customId, ConceptId: conceptId, FilterId: 0, FilterName: strategyName, GroupType: stockPoolKey, FilterString: strings, SymbolGroupId: stockGroups } });\r\n break;\r\n }\r\n }\r\n\r\n onEditStrategy = e => {\r\n e.preventDefault();\r\n let { stockPoolKey, stockGroups, filterId, filterName, filterString, customId, selectKeys } = this.state;\r\n\r\n var strings = '';\r\n for (var kk in filterString) {\r\n var tmpString = strings.charAt(strings.length - 1);\r\n if (tmpString === ';') strings += '\\n';\r\n strings += filterString[kk].formula;\r\n }\r\n \r\n var conceptStrategyCache = {\r\n conceptId: selectKeys.length > 0 ? selectKeys[0] : 0,\r\n customId: customId,\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n filterId: filterId,\r\n filterName: filterName,\r\n filterString: strings\r\n };\r\n sessionStorage.setItem(\"ConceptStrategyCache\", JSON.stringify(conceptStrategyCache));\r\n history.push(\"/editStrategy\");\r\n }\r\n\r\n onChangeStrategyName = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n \r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n\r\n onSelectConceptStrategy = (keys, event) => {\r\n if (event.node.props.isLeaf) {\r\n var filterString = [];\r\n if (event.node.props.filterString !== '') {\r\n var explanations = event.node.props.filterString.split(',');\r\n if (explanations.length > 0) {\r\n for (var num in explanations) {\r\n filterString.push(this.conceptExplanations[explanations[num]]);\r\n }\r\n }\r\n }\r\n\r\n var strings = '';\r\n if (filterString.length > 0) {\r\n for (var kk in filterString) {\r\n strings += filterString[kk].formula;\r\n }\r\n }\r\n\r\n var tmpFilterString = strings.toLowerCase();\r\n var topIndex = tmpFilterString.indexOf(\"selecttopn\");\r\n var bottomIndex = tmpFilterString.indexOf(\"selectbottomn\");\r\n var isUseOrder = false;\r\n if (topIndex !== -1 || bottomIndex !== -1) {\r\n //SelectTopN,SelectBottomN\r\n isUseOrder = true;\r\n }\r\n\r\n this.setState({\r\n selectKeys: keys,\r\n filterName: event.node.props.title,\r\n strategyName: '',\r\n filterString: filterString,\r\n formulaString: strings,\r\n filterError: '',\r\n customId: 0,\r\n isUseOrder: isUseOrder,\r\n });\r\n } else {\r\n var { expandedKeys } = this.state;\r\n if (event.selected) {\r\n var index = expandedKeys.indexOf(keys[0]);\r\n if (index === -1) {\r\n this.setState({ expandedKeys: keys });\r\n } else {\r\n this.setState({ expandedKeys: [] });\r\n }\r\n }\r\n }\r\n };\r\n\r\n onExpandConceptStrategy = (expandedKey, event) => {\r\n if (event.expanded) {\r\n if (expandedKey.length > 0) {\r\n var { expandedKeys } = this.state;\r\n expandedKeys = expandedKey.filter(function (i) { return expandedKeys.indexOf(i) === -1; });\r\n\r\n this.setState({ expandedKeys });\r\n }\r\n } else {\r\n this.setState({ expandedKeys: [] });\r\n }\r\n }\r\n\r\n renderTreeNodes = data =>\r\n data.map(item => {\r\n if (item.children) {\r\n return (\r\n <TreeNode title={item.title} key={item.key} dataRef={item}>\r\n {this.renderTreeNodes(item.children)}\r\n </TreeNode>\r\n );\r\n }\r\n return <TreeNode {...item} dataRef={item} />;\r\n });\r\n\r\n renderConceptStrategy(conceptStrategyData, selectKeys, expandedKeys) {\r\n if (conceptStrategyData.length > 0) {\r\n return <Tree\r\n expandedKeys={expandedKeys}\r\n onExpand={this.onExpandConceptStrategy}\r\n selectedKeys={selectKeys}\r\n onSelect={this.onSelectConceptStrategy}>{this.renderTreeNodes(conceptStrategyData)}</Tree>\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(255, 255, 255, 0.75' }}>{languageMessages['no.strategy.library']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockGroups, selectKeys, expandedKeys, conceptStrategyData } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n var conceptId = selectKeys.length > 0 ? selectKeys[0] : 0;\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className=\"common-page-header\">\r\n <PageHeader title={(<h1>{languageMessages['intl.menu.strategyStockPicking']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyStrategy}>{languageMessages['my.strategy']}</Button>,\r\n <Button key=\"2\" size='small' onClick={this.onEditStrategy} disabled={this.state.filterString === ''}>{languageMessages['edit.strategy']}</Button>,\r\n <Button key=\"3\" size='small' onClick={this.onSaveStrategy} disabled={this.state.filterString === ''}>{languageMessages['save.strategy']}</Button>\r\n ]} />\r\n <Modal title={languageMessages['new.strategy']}\r\n visible={this.state.saveVisible}\r\n onOk={this.handleSaveStrategy}\r\n confirmLoading={this.props.status === 'save_commit'}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategyName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className={`main-content ${this.state.siderClass ? \"sider-class\" : \"\"}`}>\r\n <Sider width={300}>\r\n <PageHeader className='common-sider-header' title={languageMessages['featured.strategy.directory']} />\r\n <Divider />\r\n <div className=\"common-sider-content\">\r\n {this.renderConceptStrategy(conceptStrategyData, selectKeys, expandedKeys)}\r\n </div>\r\n </Sider>\r\n <Layout>\r\n <Content className='common-content'>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <StockFormulaPage conceptId={conceptId} />\r\n <StockOrderPage filterString={this.state.formulaString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n\r\n <div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.startStockPicker} loading={this.props.status === 'scan_commit'} disabled={this.props.status === 'scan_commit'}>\r\n {this.props.status === 'scan_commit' ? languageMessages['stock.picking'] : languageMessages['real.stock.picking']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Content>\r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='common-content'>\r\n <StockResultPage status={this.props.status} stockPoolKey={stockPoolKey} scanAlert={this.props.scanAlert} customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>\r\n )}\r\n </Layout>\r\n </Layout>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.concept;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(ConceptPage);\r\nexport { page as default }","var RotationSentence = {\r\n 'cn': [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '10'\r\n ],\r\n 'en': [\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high',\r\n 'Price makes 50 day high'\r\n ]\r\n};\r\n\r\nexport default RotationSentence;","import React, { Component } from 'react';\r\nimport { Layout, Tree, Tabs, Input, Button, Divider, Icon, Radio } from 'antd';\r\n\r\nimport RotationSentence from './RotationSentence';\r\n\r\nimport '../../highlight-within-textarea.css';\r\nimport $ from 'jquery';\r\nwindow.jQuery = $;\r\nrequire('highlight-within-textarea');\r\n\r\nconst { Sider } = Layout;\r\n\r\nconst { TabPane } = Tabs;\r\nconst { TreeNode } = Tree;\r\n\r\nconst TextArea = Input.TextArea;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n/**\r\nfunction getRandomArrayElements(arr, count) {\r\n var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;\r\n while (i-- > min) {\r\n index = Math.floor((i + 1) * Math.random());\r\n temp = shuffled[index];\r\n shuffled[index] = shuffled[i];\r\n shuffled[i] = temp;\r\n }\r\n return shuffled.slice(min);\r\n}\r\n*/\r\nfunction uuid() {\r\n var s = [];\r\n var hexDigits = \"0123456789abcdef\";\r\n for (var i = 0; i < 36; i++) {\r\n s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);\r\n }\r\n s[14] = \"4\"; // bits 12-15 of the time_hi_and_version field to 0010\r\n s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01\r\n s[8] = s[13] = s[18] = s[23] = \"-\";\r\n\r\n var uuid = s.join(\"\");\r\n return uuid;\r\n}\r\n\r\nvar userIdNum = 0;\r\n\r\nvar specialSymbol = 'â–²';\r\nvar placeholder = '#val';\r\nconst regular = /(SH|SZ|sh|sz)?(\\d+)?(\\.)?(\\:)?(\\d+)(\\.)?(\\:)?(\\d+)?/g;\r\n//è§£æžæ¡ä»¶å—符串\r\nfunction ParseString(strings, regs, len = 9) {\r\n var condParams = {};\r\n\r\n var numLen = 0; //æ›¿æ¢æ•°å—的长度\r\n var index = -1;\r\n //var sentenceTemplate = strings.replace(/\\d+/g, function () {\r\n strings = strings.replace(/\\s+/g, '');\r\n strings = strings.replace(/,/ig, ',');\r\n var sentenceTemplate = strings.replace(regs, function () {\r\n if (index === -1) {\r\n index = arguments[len];\r\n } else {\r\n // 上一次长度\r\n var prevNum = condParams[index];\r\n numLen += prevNum.length;\r\n index = arguments[len] - numLen;\r\n }\r\n //console.log('arguments', arguments);\r\n condParams[index] = arguments[0];\r\n return '';\r\n });\r\n\r\n return { sentenceTemplate, condParams };\r\n}\r\n\r\nlet timer = null;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass LuisPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.analysisFormula = []; // 分æžå…¬å¼åˆ—表 增é‡\r\n\r\n let cacheFormulaName = sessionStorage.getItem(\"cacheFormulaName\") || '';\r\n let tmpFormulaName = cacheFormulaName;\r\n sessionStorage.removeItem(\"cacheFormulaName\");\r\n\r\n var VernacularStrategy = JSON.parse(sessionStorage.getItem(\"VernacularStrategyCache\") || '{}') || {};\r\n\r\n this.placeholderTimer = null;\r\n\r\n this.state = {\r\n luString: [],//JSON.parse(sessionStorage.getItem(\"LuisStringCache\") || '[]') || [],\r\n checkedKeys: [],\r\n\r\n strategyData1: [],\r\n strategyData2: [],\r\n strategyData3: [],\r\n strategyData0: [],\r\n\r\n sentenceFormula: null,\r\n strategyIntraday: [], //日内\r\n\r\n formulaName: tmpFormulaName,\r\n formulaString: '',\r\n\r\n filterString: '',\r\n\r\n isLuisAnalysis: false,\r\n isPresetFormula: false,\r\n \r\n prevName: '', // 输入框的å‰ä¸€ä¸ªæ¡ä»¶\r\n useFormula: '',\r\n\r\n // current tab page\r\n luisTabsKey: sessionStorage.getItem(\"luisTabsKey\") || '1',\r\n luisTabsKeys: { '1': [], '2': [], '3': [], '0': [], '4': [] },\r\n\r\n isLuis: VernacularStrategy.filterId === undefined ? true : false,\r\n\r\n isSelectCondition: false,\r\n isLoad: true,\r\n\r\n isIntraday: sessionStorage.getItem(\"isIntraday\") || '0',\r\n\r\n rotation: 0,\r\n }\r\n }\r\n\r\n iTimer = () => {\r\n this.placeholderTimer = setInterval(() => {\r\n let sentences = window.webType === 'US' ? RotationSentence.en : RotationSentence.cn;\r\n let { rotation } = this.state;\r\n rotation += 1;\r\n rotation = rotation >= sentences.length ? 0 : rotation;\r\n this.setState({ rotation });\r\n }, 5000);\r\n };\r\n\r\n componentDidMount() {\r\n setTimeout(this.iTimer, 0);\r\n }\r\n\r\n getSmileyDayString = (input) => {\r\n if (input === '') return false;\r\n\r\n if (locale.toLowerCase() === 'en-us') {\r\n let symbols = [];\r\n \r\n let tmpName = this.checkMatchFormula(input);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n let { luString, sentenceFormula } = this.state;\r\n \r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n \r\n if (luString.length > 0) {\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tus;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n var isMacth = true;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n ins.push(ii);\r\n continue;\r\n }\r\n\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n\r\n para1 = para1.replace('%', '');\r\n\r\n if (tmpRegular.test(para1)) {\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n symbols.push(new RegExp(\"\\\\b(\"+para1+\")\\\\b\", 'g'));\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n symbols.unshift(/(SH|SZ|sh|sz)?\\d+(?:\\.\\d+)?/g);\r\n return symbols;\r\n } else {\r\n /**\r\n let symbols = [];\r\n\r\n let tmpName = this.checkMatchFormula(input);\r\n var parseString = ParseString(tmpName, regular);\r\n var tmpName1 = parseString['sentenceTemplate'];\r\n var condParams = parseString['condParams'];\r\n\r\n console.log('tmpName1', tmpName1);\r\n console.log('condParams', condParams);\r\n\r\n let { luString, sentenceFormula } = this.state;\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.cn === sentenceFormula.cn });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (luString.length > 0) {\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tcn;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n\r\n let parseString2 = ParseString(templatString, /#val\\d+?/g, 1);\r\n let tmpName2 = parseString2['sentenceTemplate'];\r\n var matchString = parseString2['condParams'];\r\n\r\n if (tmpName1 === tmpName2 && Object.keys(condParams).length === Object.keys(matchString).length) {\r\n\r\n console.log('tmpName2', tmpName2);\r\n console.log('matchString', matchString);\r\n \r\n for (var ii in matchString) {\r\n let para1 = condParams[ii];\r\n\r\n if (tmpRegular.test(para1)) {\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n symbols.push(new RegExp(\"\\\\b(\" + para1 + \")\\\\b\", 'g'));\r\n }\r\n }\r\n }\r\n }\r\n \r\n break;\r\n }\r\n }\r\n }\r\n }\r\n */\r\n return /(SH|SZ|sh|sz)?\\d+(?:\\.\\d+)?/g;\r\n\r\n //symbols.unshift(/(^(?!(SH|sh|SZ|sz)))\\d+(?:\\.\\d+)?/g);\r\n //return symbols;\r\n\r\n //return /^((?!(SH|sh|SZ|sz))\\d+)(?:\\.\\d+)?/g;\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.isSelectCondition) {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n //textAreaRef.setSelectionRange(0, textAreaRef.value.length);\r\n }\r\n\r\n if (this.state.isLoad && this.props.symbols !== undefined) {\r\n this.setState({ isLoad: false }, () => {\r\n $('.luis-highlight-textarea').highlightWithinTextarea({\r\n highlight: this.getSmileyDayString\r\n });\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n\r\n clearInterval(this.placeholderTimer);\r\n }\r\n\r\n aryConcat(data01, data02, isSplice = true) {\r\n let obj = {};\r\n let arr = data01.concat(data02);\r\n\r\n var _this = this;\r\n let newArr = arr.reduce(function (pre, cur) {\r\n let tmpTis = _this.checkMatchFormula(cur.title);\r\n if (!obj.hasOwnProperty(tmpTis)) {\r\n pre.push(cur);\r\n }\r\n obj[tmpTis] = true;\r\n\r\n return pre;\r\n }, []);\r\n\r\n if (isSplice) newArr.splice(10);\r\n\r\n return newArr;\r\n }\r\n\r\n unique(array) {\r\n var res = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var isRepeat = true;\r\n for (var j = 0; i < res.length; j++) {\r\n if (array[i].cn === res[j].cn || array[i].us === res[j].us) {\r\n isRepeat = false;\r\n break;\r\n }\r\n }\r\n if (isRepeat) res.push(array[i]);\r\n }\r\n return res;\r\n }\r\n\r\n aryDeduplication(data01, data02, ins) {\r\n var obj = {};\r\n data01.forEach(item => {\r\n Object.keys(item).forEach(subItem => {\r\n obj.hasOwnProperty(subItem) ? obj[subItem].push(item[subItem]) : obj[subItem] = item[subItem]\r\n })\r\n })\r\n\r\n let tmpCurrLuString = data02.filter(function (v) { return v.c === ins && obj['key'].indexOf(v.id) !== -1 });\r\n data02 = data02.filter(function (v) { return v.c !== ins });\r\n\r\n return data02.concat(tmpCurrLuString);\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, luString, formulaString, sentenceFormula } = props;\r\n\r\n switch (status) {\r\n case 'luis_success':\r\n var strategyData1 = [];\r\n var strategyData2 = [];\r\n var strategyData3 = [];\r\n var strategyData0 = [];\r\n var strategyIntraday = [];\r\n for (var key in luString) {\r\n //var lustringTitle = locale === 'en-US' ? luString[key].us !== '' ? luString[key].us : luString[key].cn : luString[key].cn;\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n var sData = { title: lustringTitle, key: luString[key].id };\r\n\r\n if (luString[key].c === '1')\r\n strategyData1.push(sData);\r\n if (luString[key].c === '2')\r\n strategyData2.push(sData);\r\n if (luString[key].c === '3')\r\n strategyData3.push(sData);\r\n if (luString[key].c === '0')\r\n strategyData0.push(sData);\r\n if (luString[key].c === '4')\r\n strategyIntraday.push(sData);\r\n }\r\n\r\n var { luisTabsKeys, luisTabsKey } = this.state;\r\n\r\n var currLuString = this.unique(luString);\r\n\r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({ strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday, luString: currLuString, checkedKeys: [], luisTabsKeys });\r\n break;\r\n case 'get_change_batch_success':\r\n var { strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday, luisTabsKeys, luisTabsKey, isIntraday } = this.state;\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n var currLuString = this.state.luString;\r\n currLuString = currLuString.concat(luString);\r\n currLuString = this.unique(currLuString);\r\n\r\n var strategyData = [];\r\n for (var key in luString) {\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n strategyData.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luisTabsKey === '1') strategyData1 = strategyData;\r\n if (luisTabsKey === '2') strategyData2 = strategyData;\r\n if (luisTabsKey === '3') strategyData3 = strategyData;\r\n if (luisTabsKey === '0') strategyData0 = strategyData;\r\n if (luisTabsKey === '4') strategyIntraday = strategyData;\r\n \r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({ strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday, luString: currLuString, checkedKeys: [], luisTabsKeys });\r\n break;\r\n case 'get_change_condition_success':\r\n var { strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday, prevName, formulaName, isPresetFormula, luisTabsKeys, luisTabsKey, checkedKeys } = this.state;\r\n\r\n luisTabsKeys = { '1': [], '2': [], '3': [], '0': [], '4': [] };\r\n\r\n let isLoadLuItems = this.checkFormulaName(prevName, formulaName);\r\n\r\n prevName = '';\r\n\r\n var ids = 0;\r\n var formulaString = '';\r\n var useFormula = '';\r\n var isPresetFormula = false;\r\n if (sentenceFormula != null) {\r\n var resultFormula = this.setUseFormula(sentenceFormula);\r\n formulaString = resultFormula['formulaString'];\r\n useFormula = resultFormula['useFormula'];\r\n prevName = resultFormula['prevName'];\r\n isPresetFormula = useFormula.length > 0 ? true : false;\r\n\r\n ids = sentenceFormula.id;\r\n\r\n //this.analysisFormula.push({ name: this.state.formulaName, formula: formulaString });\r\n }\r\n \r\n var tmpIndex = '-1';\r\n\r\n /**\r\n var strategyData = [];\r\n for (var key in luString) {\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n if (luString[key].c === luisTabsKey) {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = luisTabsKey;\r\n }\r\n strategyData.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n }\r\n */\r\n\r\n let category = null;\r\n \r\n var tmpStrategyData1 = [];\r\n var tmpStrategyData2 = [];\r\n var tmpStrategyData3 = [];\r\n var tmpStrategyData0 = [];\r\n var tmpStrategyIntraday = [];\r\n for (var key in luString) {\r\n if (category === null) category = luString[key].c === '' ? luisTabsKey : luString[key].c;\r\n var lustringTitle = locale.toLowerCase() === 'en-us' ? luString[key].us : luString[key].cn;\r\n if (lustringTitle === '') continue;\r\n\r\n if (luString[key].c === '') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = luisTabsKey;\r\n }\r\n\r\n if (luisTabsKey === '1') tmpStrategyData1.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '2') tmpStrategyData2.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '3') tmpStrategyData3.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '0') tmpStrategyData0.push({ title: lustringTitle, key: luString[key].id });\r\n if (luisTabsKey === '4') tmpStrategyIntraday.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n\r\n if (luString[key].c === '1') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '1';\r\n }\r\n tmpStrategyData1.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '2') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '2';\r\n }\r\n tmpStrategyData2.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '3') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '3';\r\n }\r\n tmpStrategyData3.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '0') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '0';\r\n }\r\n tmpStrategyData0.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n if (luString[key].c === '4') {\r\n if (ids === luString[key].id && formulaString === luString[key].f) {\r\n tmpIndex = '4';\r\n }\r\n tmpStrategyIntraday.push({ title: lustringTitle, key: luString[key].id });\r\n }\r\n }\r\n\r\n if (isLoadLuItems) {\r\n if (tmpStrategyData1.length > 0) {\r\n strategyData1 = this.aryConcat(tmpStrategyData1, strategyData1);\r\n \r\n //currLuString = this.aryDeduplication(tmpStrategyData1, currLuString, '1');\r\n }\r\n if (tmpStrategyData2.length > 0) {\r\n strategyData2 = this.aryConcat(tmpStrategyData2, strategyData2);\r\n\r\n //currLuString = this.aryDeduplication(tmpStrategyData2, currLuString, '2');\r\n }\r\n if (tmpStrategyData3.length > 0) {\r\n strategyData3 = this.aryConcat(tmpStrategyData3, strategyData3);\r\n\r\n //currLuString = this.aryDeduplication(tmpStrategyData3, currLuString, '3');\r\n }\r\n if (tmpStrategyData0.length > 0) {\r\n strategyData0 = this.aryConcat(tmpStrategyData0, strategyData0);\r\n\r\n //currLuString = this.aryDeduplication(tmpStrategyData0, currLuString, '0');\r\n }\r\n if (tmpStrategyIntraday.length > 0) {\r\n strategyIntraday = this.aryConcat(tmpStrategyIntraday, strategyIntraday);\r\n\r\n //currLuString = this.aryDeduplication(tmpStrategyIntraday, currLuString, '4');\r\n }\r\n\r\n checkedKeys = [];\r\n if (tmpIndex !== '-1') {\r\n checkedKeys.push(ids.toString());\r\n luisTabsKeys[tmpIndex] = checkedKeys;\r\n }\r\n }\r\n\r\n if (category !== null) {\r\n luisTabsKey = category;\r\n } else {\r\n if (sentenceFormula !== null && sentenceFormula.c !== null && sentenceFormula.c !== '') {\r\n luisTabsKey = sentenceFormula.c;\r\n }\r\n }\r\n\r\n var currLuString = this.state.luString;\r\n currLuString = currLuString.concat(luString);\r\n currLuString = this.unique(currLuString);\r\n\r\n this.setState({ strategyData1, strategyData2, strategyData3, strategyData0, sentenceFormula, strategyIntraday, luString: currLuString, formulaString, useFormula, prevName, checkedKeys, luisTabsKeys, luisTabsKey, isPresetFormula });\r\n break;\r\n case 'analysis_success':\r\n if (this.state.isLuisAnalysis) {\r\n this.analysisFormula.push({ name: this.state.formulaName, formula: formulaString });\r\n \r\n var useFormula = this.replaceHtml(formulaString);\r\n this.setState({ formulaString, useFormula, isLuisAnalysis: false, isPresetFormula: true });\r\n }\r\n break;\r\n case 'analysis_fail':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isLuis } = this.state;\r\n isLuis = isLuis ? false : true;\r\n this.setState({ isLuis });\r\n }\r\n\r\n // æ¢ä¸€æ‰¹\r\n onChangeBatch = e => {\r\n e.preventDefault();\r\n \r\n var { formulaName, luisTabsKey, isIntraday } = this.state;\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n\r\n this.setState({ formulaName, checkedKeys: [] }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n this.props.dispatch({ type: \"action_change_batch\", payload: { UserId: user.username, keywords: formulaName, luisTabsKey: luisTabsKey } });\r\n });\r\n }\r\n\r\n // select condition\r\n onLuisSelect = keys => {\r\n var { checkedKeys, luString, luisTabsKeys, luisTabsKey, isIntraday } = this.state;\r\n\r\n luisTabsKeys = { '1': [], '2': [], '3': [], '0': [], '4': [] };\r\n if (keys.length == 0) {\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n prevName: '',\r\n isPresetFormula: false,\r\n isSelectCondition: false,\r\n sentenceFormula: null\r\n }, () => {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n inputFormulaName.blur();\r\n });\r\n return;\r\n }\r\n\r\n checkedKeys = keys;\r\n \r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n \r\n var tmpluisString = luString.filter(function (e) { return e.id == checkedKeys; });\r\n if (tmpluisString.length > 0) {\r\n let sentenceFormula = tmpluisString[0];\r\n var formulaName = locale.toLowerCase() === 'en-us' ? sentenceFormula.us : sentenceFormula.cn;\r\n var formulaString = sentenceFormula.f;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var isPresetFormula = useFormula.length > 0 ? true : false;\r\n \r\n this.setState({\r\n checkedKeys,\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: isPresetFormula,\r\n isSelectCondition: true,\r\n sentenceFormula\r\n }, () => {\r\n if (formulaString === '') this.requestSentenceFormula(formulaName, 0);\r\n });\r\n }\r\n }\r\n\r\n // select condition\r\n onLuisCheck = keys => {\r\n var { checkedKeys, luString, luisTabsKeys, luisTabsKey, isIntraday } = this.state;\r\n \r\n if (keys.length == 0) {\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys: { '1': [], '2': [], '3': [], '0': [], '4': [] },\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n prevName: '',\r\n isPresetFormula: false,\r\n isSelectCondition: false,\r\n sentenceFormula: null\r\n }, () => {\r\n const { inputFormulaName } = this.refs;\r\n inputFormulaName.focus();\r\n inputFormulaName.blur();\r\n });\r\n return;\r\n }\r\n\r\n if (checkedKeys.length > 0) {\r\n var dd = [];\r\n keys.forEach(function (o) {\r\n var tmp = checkedKeys.indexOf(o) !== -1 ? null : o;\r\n if (tmp !== null) dd.push(tmp);\r\n });\r\n checkedKeys = dd;\r\n } else {\r\n if (keys.length > 0) checkedKeys.push(keys[0]);\r\n }\r\n\r\n if (checkedKeys.length > 0) {\r\n luisTabsKeys = { '1': [], '2': [], '3': [], '0': [], '4': [] };\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n\r\n var tmpluisString = luString.filter(function (e) { return e.id == checkedKeys; });\r\n if (tmpluisString.length > 0) {\r\n let sentenceFormula = tmpluisString[0];\r\n var formulaName = locale.toLowerCase() === 'en-us' ? sentenceFormula.us : sentenceFormula.cn;\r\n var formulaString = sentenceFormula.f;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var isPresetFormula = useFormula.length > 0 ? true : false;\r\n \r\n this.setState({\r\n checkedKeys,\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: isPresetFormula,\r\n isSelectCondition: true,\r\n sentenceFormula\r\n }, () => {\r\n if (formulaString === '') this.requestSentenceFormula(formulaName, 0);\r\n });\r\n }\r\n }\r\n };\r\n\r\n onFocusCondition = () => {\r\n this.setState({ isSelectCondition: false });\r\n }\r\n\r\n checkMatchFormula(value) {\r\n if (value === '') return '';\r\n\r\n let tmpName = value.replace(/(\\r|\\n)/g, \"\");\r\n tmpName = tmpName.replace(/,/ig, ',');\r\n tmpName = tmpName.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n tmpName = tmpName.replace(/\\s+/g, ' ');\r\n return tmpName;\r\n }\r\n\r\n checkFormulaName(prevName, formulaName) {\r\n if (formulaName === '') return true;\r\n\r\n let tmpName1 = this.checkMatchFormula(prevName);\r\n let tmpName2 = this.checkMatchFormula(formulaName);\r\n\r\n return tmpName1 === tmpName2 ? false : true;\r\n }\r\n\r\n // æ¡ä»¶å¥åæ”¹å˜ ç”Ÿæˆæ¨¡æ¿\r\n onChangeCondition = e => {\r\n var formulaName = e.target.value;\r\n \r\n this.requestSentenceFormula(formulaName, 800);\r\n }\r\n\r\n requestSentenceFormula(formulaName, interval) {\r\n let { luString, prevName, sentenceFormula, luisTabsKey } = this.state;\r\n\r\n let isMacth = false;\r\n\r\n if (formulaName !== '') {\r\n if (locale.toLowerCase() === 'en-us') {\r\n let tmpName = this.checkMatchFormula(formulaName);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n var tmpPrevName = this.checkMatchFormula(prevName);\r\n let prevName1 = tmpPrevName.split(' ');\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (!isMacth) {\r\n if (luString.length > 0) {\r\n var tmpRegular = new RegExp(/[^0-9:.,]/);\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tus;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n isMacth = true;\r\n\r\n let prevName2 = prevName1;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n let tmp1 = tmpName1[ii].split(',');\r\n let tmp2 = tmpName2[ii].split(',');\r\n if (tmp1.length !== tmp2.length) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n ins.push(ii);\r\n continue;\r\n }\r\n if (tmpRegular.test(tmpName2[ii])) {\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n }\r\n\r\n if (tmpName2[ii] !== prevName2[ii]) {\r\n prevName2.splice(ii - 1, 0, '#val');\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n let formulaString = formulaModel.ftcn === undefined || formulaModel.ftcn === null ? '' : formulaModel.ftcn;\r\n let useFormula = formulaString;\r\n\r\n let isSymbol = true;\r\n if (formulaString !== '') {\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n let para2 = tmpName2[ins[ii]];\r\n\r\n let para3 = prevName2[ins[ii]] !== undefined ? prevName2[ins[ii]] : '';\r\n\r\n let para01 = para1.split(',');\r\n let para02 = para2.split(',');\r\n let para03 = para3.split(',');\r\n\r\n for (var jj in para02) {\r\n para1 = para01[jj].replace('%', '');\r\n para2 = para02[jj].replace('%', '');\r\n para3 = para03[jj] !== undefined ? para03[jj].replace('%', '') : '';\r\n\r\n para1 = para1.replace('(', '');\r\n para2 = para2.replace('(', '');\r\n para3 = para3.replace('(', '');\r\n\r\n para1 = para1.replace(')', '');\r\n para2 = para2.replace(')', '');\r\n para3 = para3.replace(')', '');\r\n\r\n if (tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaString = formulaString.replace(new RegExp(para2, 'g'), para1);\r\n\r\n var tmpString = para3 === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n if (!isSymbol) formulaString = '';\r\n\r\n luisTabsKey = formulaModel.c !== null ? formulaModel.c : luisTabsKey;\r\n\r\n this.setState({ formulaName, formulaString, useFormula, prevName: formulaName, luisTabsKey });\r\n\r\n break;\r\n } else {\r\n isMacth = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n var tmpPrevName = this.checkMatchFormula(prevName);\r\n var parseString1 = ParseString(tmpPrevName, regular);\r\n var prevName1 = parseString1['condParams'];\r\n \r\n let tmpName = this.checkMatchFormula(formulaName);\r\n var parseString = ParseString(tmpName, regular);\r\n var tmpName1 = parseString['sentenceTemplate'];\r\n var condParams = parseString['condParams'];\r\n\r\n if (sentenceFormula !== null) {\r\n var tmp = luString.filter(function (e) { return e.us === sentenceFormula.us });\r\n if (tmp.length <= 0) {\r\n luString.unshift(sentenceFormula);\r\n }\r\n }\r\n\r\n if (!isMacth) {\r\n if (luString.length > 0) {\r\n for (var ii in luString) {\r\n let formulaModel = luString[ii];\r\n var templatString = formulaModel.tcn;\r\n\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n\r\n let parseString2 = ParseString(templatString, /#val\\d+?/g, 1);\r\n let tmpName2 = parseString2['sentenceTemplate'];\r\n var matchString = parseString2['condParams'];\r\n\r\n if (tmpName1 === tmpName2 && Object.keys(condParams).length === Object.keys(matchString).length) {\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n let formulaString = formulaModel.ftcn === undefined || formulaModel.ftcn === null ? '' : formulaModel.ftcn;\r\n let useFormula = formulaString;\r\n\r\n let isSymbol = true;\r\n if (formulaString !== '') {\r\n isMacth = true;\r\n\r\n for (var ii in matchString) {\r\n let para1 = condParams[ii];\r\n let para2 = matchString[ii];\r\n\r\n if (tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaString = formulaString.replace(new RegExp(para2, 'g'), para1);\r\n\r\n let tmp = Object.keys(prevName1).length > 0 ? prevName1[ii] !== undefined ? prevName1[ii] : '' : para1;\r\n var tmpString = tmp === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n if (!isSymbol) formulaString = '';\r\n\r\n luisTabsKey = formulaModel.c !== null ? formulaModel.c : luisTabsKey;\r\n\r\n this.setState({ formulaName, formulaString, useFormula, prevName: formulaName, luisTabsKey });\r\n\r\n break;\r\n } else {\r\n isMacth = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n if (!isMacth) {\r\n var { luisTabsKeys, isIntraday, checkedKeys } = this.state;\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n \r\n let isLoadLuItems = this.checkFormulaName(prevName, formulaName);\r\n if (isLoadLuItems) {\r\n checkedKeys = [];\r\n }\r\n luisTabsKeys[luisTabsKey] = checkedKeys;\r\n\r\n this.setState({ formulaName, formulaString: '', checkedKeys, luisTabsKeys }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n clearTimeout(timer);\r\n\r\n let _this = this;\r\n timer = setTimeout(function () {\r\n userIdNum += 1;\r\n let userId = userIdNum;\r\n if (user.username === undefined) userId = uuid();\r\n else userId = user.username + '-' + userId;\r\n _this.props.dispatch({ type: \"action_change_condition\", payload: { UserId: userId, keywords: formulaName, luisTabsKey: luisTabsKey } });\r\n }, interval);\r\n });\r\n }\r\n\r\n /**\r\n var formulaString = '';\r\n\r\n if (formulaName !== '' && this.analysisFormula.length > 0) {\r\n var tmpFormulaString = this.analysisFormula.filter(function (e) { return e.name.toUpperCase() === formulaName.toUpperCase(); });\r\n if (tmpFormulaString.length > 0) {\r\n formulaString = tmpFormulaString[0].formula;\r\n var useFormula = this.replaceHtml(formulaString);\r\n\r\n var { luisTabsKeys, luisTabsKey, isIntraday } = this.state;\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n luisTabsKeys[luisTabsKey] = [];\r\n this.setState({\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n formulaName,\r\n formulaString,\r\n useFormula: useFormula,\r\n prevName: formulaName,\r\n isPresetFormula: true,\r\n });\r\n }\r\n }\r\n */\r\n }\r\n\r\n setUseFormula(sentenceFormula) {\r\n var { prevName, formulaName } = this.state;\r\n \r\n var formulaTemplateString = locale.toLowerCase() === 'en-us' ? sentenceFormula.ftus : sentenceFormula.ftcn;\r\n formulaTemplateString = formulaTemplateString === undefined || formulaTemplateString === null ? '' : formulaTemplateString;\r\n\r\n var status = sentenceFormula.status === undefined || sentenceFormula.status === null ? '111' : sentenceFormula.status;\r\n\r\n let isSymbol = true;\r\n let formulaString = sentenceFormula.f;\r\n let useFormula = formulaTemplateString;\r\n if (formulaName != '' && formulaTemplateString !== '') {\r\n if (locale.toLowerCase() === 'en-us') {\r\n let tmpName = this.checkMatchFormula(formulaName);\r\n let tmpName1 = tmpName.split(' ');\r\n\r\n prevName = this.checkMatchFormula(prevName);\r\n let prevName1 = prevName.split(' ');\r\n\r\n var templatString = sentenceFormula.tus;\r\n if (templatString !== null && templatString !== '') {\r\n templatString = this.checkMatchFormula(templatString);\r\n let tmpName2 = templatString.split(' ');\r\n if (tmpName1.length === tmpName2.length) {\r\n\r\n let isMacth = true;\r\n\r\n let ins = [];\r\n for (var ii in tmpName2) {\r\n if (tmpName2[ii].indexOf(placeholder) !== -1) {\r\n let tmp1 = tmpName1[ii].split(',');\r\n let tmp2 = tmpName2[ii].split(',');\r\n if (tmp1.length !== tmp2.length) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n ins.push(ii);\r\n continue;\r\n }\r\n\r\n if (tmpName2[ii] !== tmpName1[ii]) {\r\n isMacth = false;\r\n break;\r\n }\r\n\r\n if (tmpName2[ii] !== prevName1[ii]) {\r\n prevName1.splice(ii - 1, 0, '#val');\r\n }\r\n }\r\n\r\n if (isMacth) {\r\n var tmpRegular = new RegExp(/[^0-9:.,]/);\r\n \r\n if (ins.length > 0) {\r\n for (var ii in ins) {\r\n let para1 = tmpName1[ins[ii]];\r\n let para2 = tmpName2[ins[ii]];\r\n\r\n let para3 = prevName1[ins[ii]] !== undefined ? prevName1[ins[ii]] : '';\r\n\r\n let para01 = para1.split(',');\r\n let para02 = para2.split(',');\r\n let para03 = para3.split(',');\r\n\r\n for (var jj in para02) {\r\n para1 = para01[jj].replace('%', '');\r\n para2 = para02[jj].replace('%', '');\r\n para3 = para03[jj] !== undefined ? para03[jj].replace('%', '') : '';\r\n\r\n para1 = para1.replace('(', '');\r\n para2 = para2.replace('(', '');\r\n para3 = para3.replace('(', '');\r\n\r\n para1 = para1.replace(')', '');\r\n para2 = para2.replace(')', '');\r\n para3 = para3.replace(')', '');\r\n\r\n if (isSymbol && tmpRegular.test(para1)) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === para1.toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaTemplateString = formulaTemplateString.replace(new RegExp(para2, 'g'), para1);\r\n \r\n var tmpString = para3 === para1 ? para1 : specialSymbol + para1 + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(para2, 'g'), tmpString);\r\n }\r\n }\r\n }\r\n formulaString = formulaTemplateString;\r\n }\r\n }\r\n }\r\n } else {\r\n var formulaName1 = this.checkMatchFormula(formulaName);\r\n var formulaResult = ParseString(formulaName1, regular);\r\n var tmpName1 = formulaResult['sentenceTemplate'];\r\n var condParams = formulaResult['condParams'];\r\n \r\n var templatString = sentenceFormula.tcn;\r\n if (templatString !== null && templatString !== '') {\r\n templatString = templatString.replace(/%23val/g, '#val');\r\n\r\n let parseString = ParseString(templatString, /#val\\d+?/g, 1);\r\n var tmpName2 = parseString['sentenceTemplate'];\r\n var tmpCondParams = parseString['condParams'];\r\n\r\n if (tmpName1 === tmpName2 && Object.keys(condParams).length > 0) {\r\n prevName = this.checkMatchFormula(prevName);\r\n var parseString1 = ParseString(prevName, regular);\r\n var prevName1 = parseString1['condParams'];\r\n\r\n var tmpRegular = new RegExp(/[^0-9:.]/);\r\n\r\n for (var i in condParams) {\r\n if (tmpCondParams[i] === undefined) continue;\r\n\r\n if (tmpRegular.test(condParams[i])) {\r\n isSymbol = false;\r\n // change symbol\r\n if (this.props.symbols.length > 0) {\r\n let tmpSymbols = this.props.symbols.filter((s) => { return s.toUpperCase() === condParams[i].toUpperCase() });\r\n if (tmpSymbols.length > 0) {\r\n isSymbol = true;\r\n }\r\n }\r\n }\r\n\r\n formulaTemplateString = formulaTemplateString.replace(new RegExp(tmpCondParams[i], 'g'), condParams[i]);\r\n\r\n let tmp = Object.keys(prevName1).length > 0 ? prevName1[i] !== undefined ? prevName1[i] : '' : condParams[i];\r\n var tmpString = tmp === condParams[i] ? condParams[i] : specialSymbol + condParams[i] + specialSymbol;\r\n useFormula = useFormula.replace(new RegExp(tmpCondParams[i], 'g'), tmpString);\r\n }\r\n formulaString = formulaTemplateString;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (formulaString.indexOf(placeholder) !== -1 || useFormula.indexOf(placeholder) !== -1) {\r\n formulaString = '';\r\n //formulaString.replace(/#val\\d+?/g, '');\r\n //useFormula = '';\r\n\r\n //useFormula = useFormula.replace(/#val\\d+?/g, specialSymbol + '?' + specialSymbol);\r\n useFormula = useFormula.replace(/#val\\d+?/g, '?');\r\n }\r\n\r\n if (useFormula !== '') useFormula = this.replaceHtml(useFormula);\r\n else useFormula = this.replaceHtml(formulaString);\r\n\r\n formulaString = status === '111' || status === '0' ? formulaString : '';\r\n formulaString = formulaString.length < 5 ? '' : formulaString;\r\n if (!isSymbol) formulaString = '';\r\n\r\n return { formulaString, useFormula, prevName: formulaName };\r\n }\r\n\r\n // æ ¼å¼åŒ–å…¬å¼ ä½¿é«˜äº®æ˜¾ç¤º\r\n replaceHtml(useFormula) {\r\n if (useFormula === null || useFormula === undefined || useFormula === '') return '';\r\n\r\n var useFormulas = [];\r\n var items = useFormula.split('\\n');\r\n for (var item in items) {\r\n if (useFormulas.length > 0) useFormulas.push(<br key={item} />);\r\n var tmpString = items[item];\r\n\r\n var tmpStrings = tmpString.split(specialSymbol);\r\n for (var ii in tmpStrings) {\r\n if (ii > 0 && ii % 2 == 1) {\r\n if (tmpStrings[ii] === '?') {\r\n useFormulas.push(<span key={'Highlight-' + item + '-' + ii} className='common-red'>{tmpStrings[ii]}</span>);\r\n } else {\r\n useFormulas.push(<span key={'Highlight-' + item + '-' + ii} className='common-bg'>{tmpStrings[ii]}</span>);\r\n }\r\n } else {\r\n useFormulas.push(tmpStrings[ii]);\r\n }\r\n }\r\n }\r\n\r\n return useFormulas;\r\n }\r\n\r\n onUseFormula = () => {\r\n var { filterString } = this.props;\r\n var { formulaString, isLuisAnalysis, luisTabsKeys, luisTabsKey, isIntraday } = this.state;\r\n\r\n if (filterString !== '') {\r\n var tmpString = filterString.charAt(filterString.length - 1);\r\n if (tmpString !== ';') filterString += ';';\r\n filterString += '\\n';\r\n }\r\n filterString += formulaString;\r\n\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n luisTabsKeys[luisTabsKey] = [];\r\n\r\n \r\n window._hmt && window._hmt.push(['_trackEvent', 'Use formula', 'use', 'Vernacular use formula']);\r\n\r\n this.setState({\r\n formulaName: '',\r\n formulaString: '',\r\n useFormula: '',\r\n checkedKeys: [],\r\n luisTabsKeys,\r\n isPresetFormula: false,\r\n isSelectCondition: true\r\n }, () => {\r\n /**\r\n this.props.LuisAnalysis({\r\n isLuisAnalysis: isLuisAnalysis,\r\n filterString: filterString\r\n });\r\n */\r\n\r\n this.props.dispatch({ type: \"action_Use_formula\", payload: { isLuisAnalysis: isLuisAnalysis, filterString: filterString } });\r\n });\r\n }\r\n\r\n onChangeTabs = luisTabsKey => {\r\n var { luisTabsKeys } = this.state;\r\n sessionStorage.setItem(\"luisTabsKey\", luisTabsKey);\r\n this.setState({ luisTabsKey, checkedKeys: luisTabsKeys[luisTabsKey] });\r\n }\r\n\r\n changeIsIntraday = e => {\r\n sessionStorage.setItem(\"isIntraday\", e.target.value);\r\n this.setState({ isIntraday: e.target.value });\r\n }\r\n \r\n renderTreeNodes = data =>\r\n data.map(item => {\r\n if (item.children) {\r\n return (\r\n <TreeNode title={item.title} key={item.key} dataRef={item}>\r\n {this.renderTreeNodes(item.children)}\r\n </TreeNode>\r\n );\r\n }\r\n return <TreeNode {...item} />;\r\n });\r\n\r\n renderSearchState(strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday) {\r\n var { luisTabsKey, isIntraday } = this.state;\r\n luisTabsKey = isIntraday === '1' ? '4' : luisTabsKey;\r\n\r\n var isEmpty = true;\r\n var txt = \"\";\r\n switch (luisTabsKey) {\r\n case \"1\":\r\n if (strategyData1.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.mete.price.statements'];\r\n }\r\n break;\r\n case \"2\":\r\n if (strategyData2.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.fundamental.statements'];\r\n }\r\n break;\r\n case \"3\":\r\n if (strategyData3.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.technically.sentences'];\r\n }\r\n break;\r\n case \"0\":\r\n if (strategyData0.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.other.statements'];\r\n }\r\n break;\r\n case \"4\":\r\n if (strategyIntraday.length > 0) {\r\n isEmpty = false;\r\n } else {\r\n txt = languageMessages['not.match.intraday.statements'];\r\n }\r\n break;\r\n }\r\n\r\n if (isEmpty) {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color:'rgba(0, 0, 0, 0.25)' }}>{txt}</div>\r\n } else {\r\n return <div className='luis-condition-change'>\r\n <Button shape=\"round\" size='small' onClick={this.onChangeBatch} disabled={this.props.isFilterScan || this.state.isLuisAnalysis}>\r\n {languageMessages['change.batch']}\r\n </Button>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday, formulaName, formulaString, useFormula, rotation } = this.state;\r\n\r\n let textareaPlaceholder = languageMessages['vernacular.left.prompt'];\r\n\r\n let statement = languageMessages['input.stock.picking.statement'];\r\n if (window.webType === 'US') {\r\n let aryStatement = [];\r\n let tmpStatement = statement.replace('Highlighted', ',');\r\n let tmpStatements = tmpStatement.split(',');\r\n for (let i = 0; i <= tmpStatements.length; i++) {\r\n if (i === 1) {\r\n aryStatement.push(<span key={'statement' + i} className='common-bg'>Highlighted</span>)\r\n }\r\n aryStatement.push(tmpStatements[i]);\r\n }\r\n\r\n statement = aryStatement;\r\n\r\n var val = 'type your complete idea, e.g. \"#val\".';\r\n textareaPlaceholder = 'Type key word, e.g. \"Bollinger band\", then select from ideas in left panel, or';\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += val.replace('#val', RotationSentence.en[rotation]);\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += 'Scan the market.Have fun learning.';\r\n }\r\n /**else {\r\n var val = 'type your complete idea, e.g. \"#val\".';\r\n\r\n textareaPlaceholder = 'å˜é‡æ ¼å¼ï¼š';\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += val.replace('#val', RotationSentence.cn[rotation]);\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += 'å˜é‡æ ¼å¼';\r\n }*/\r\n\r\n return (<div>\r\n <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['vernacular.stock.picking']}\r\n <Icon type={this.state.isLuis ? 'up' : 'down'} style={{padding:'0 5px'}} />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.isLuis ? '' : 'none' }}>\r\n <Radio.Group value={this.state.isIntraday} onChange={this.changeIsIntraday} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['all']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['intraday']}</Radio.Button>\r\n </Radio.Group>\r\n <Layout className={window.webType === 'US' ? 'luis luis-us' : 'luis'}>\r\n <Sider width={360}>\r\n <Tabs size=\"small\" style={{ display: this.state.isIntraday === '0' ? '' : 'none' }}\r\n activeKey={this.state.luisTabsKey}\r\n animated={false}\r\n onChange={this.onChangeTabs}>\r\n <TabPane tab={languageMessages['mete.price']} key='1'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['1']} checkedKeys={this.state.luisTabsKeys['1']}>{this.renderTreeNodes(strategyData1)}</Tree>\r\n </TabPane>\r\n <TabPane tab={languageMessages['fundamental']} key='2'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['2']} checkedKeys={this.state.luisTabsKeys['2']}>{this.renderTreeNodes(strategyData2)}</Tree>\r\n </TabPane>\r\n <TabPane tab={languageMessages['technically']} key='3'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['3']} checkedKeys={this.state.luisTabsKeys['3']}>{this.renderTreeNodes(strategyData3)}</Tree>\r\n </TabPane>\r\n <TabPane tab={languageMessages['other']} key='0'>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['0']} checkedKeys={this.state.luisTabsKeys['0']}>{this.renderTreeNodes(strategyData0)}</Tree>\r\n </TabPane>\r\n </Tabs>\r\n <div style={{ padding:'15px 0', display: this.state.isIntraday === '0' ? 'none' : '' }}>\r\n <Tree checkable onCheck={this.onLuisCheck} onSelect={this.onLuisSelect} selectedKeys={this.state.luisTabsKeys['4']} checkedKeys={this.state.luisTabsKeys['4']}>{this.renderTreeNodes(strategyIntraday)}</Tree>\r\n </div>\r\n {this.renderSearchState(strategyData1, strategyData2, strategyData3, strategyData0, strategyIntraday)}\r\n </Sider>\r\n <Layout className='luis-content'>\r\n <h2 style={{ padding: '10px 5px', marginBottom: 5, fontWeight: 'normal' }}>{statement}</h2>\r\n <TextArea ref='inputFormulaName' className=\"luis-highlight-textarea\" placeholder={textareaPlaceholder} rows={4} onChange={this.onChangeCondition} onFocus={this.onFocusCondition} value={formulaName} />\r\n\r\n <h2 style={{ padding: '10px 5px', marginBottom: 5, fontWeight: 'normal' }}>{languageMessages['correspond.formula']}</h2>\r\n <div className='common-edit'>{useFormula}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Button size='small' onClick={this.onUseFormula} disabled={formulaString === '' || this.props.isFilterScan || this.state.isLuisAnalysis}>{languageMessages['using.formula']}</Button>\r\n </div>\r\n </Layout>\r\n </Layout>\r\n </div>\r\n </div>);\r\n }\r\n}\r\n\r\nexport { LuisPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history'\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Icon, Spin, Row, Col, message } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport LuisPage from '../../pannels/stock/LuisPage';\r\nimport StockFormulaPage from '../../pannels/stock/StockFormulaPage';\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\nimport USSymbolGroupPage from '../../pannels/stock/USSymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport StockResultPage from '../../pannels/stock/StockResultPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport FilterFunction from '../filterFunctions';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Confirm = Modal.confirm;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass EditStrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n var ConceptStrategy = JSON.parse(sessionStorage.getItem(\"ConceptStrategyCache\") || '{}') || {};\r\n\r\n this.user = {};\r\n this.state = {\r\n conceptId: ConceptStrategy.conceptId === undefined ? 0 : ConceptStrategy.conceptId,\r\n customId: ConceptStrategy.customId === undefined ? 0 : ConceptStrategy.customId,\r\n stockPoolKey: ConceptStrategy.stockPoolKey === undefined ? 'STOCK' : ConceptStrategy.stockPoolKey,\r\n\r\n lastTimes: 0,\r\n \r\n caretPosition: 0,\r\n\r\n stockGroups: ConceptStrategy.stockGroups === undefined ? (window.webType === 'US' ? '10000' : '3180') : ConceptStrategy.stockGroups,\r\n \r\n filterId: ConceptStrategy.filterId === undefined ? 0 : ConceptStrategy.filterId,\r\n filterName: ConceptStrategy.filterName === undefined ? '' : ConceptStrategy.filterName,\r\n filterString: ConceptStrategy.filterString === undefined ? '' : ConceptStrategy.filterString,\r\n\r\n orderType: '$VOLUME_NUM',\r\n orderDirection: '0',\r\n isUseOrder: false,\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n\r\n saveVisible: false,\r\n\r\n stockCount: 0,\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n\r\n isLuisAnalysis: false,\r\n isFilterScan: false\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n\r\n this.rta.setCaretPosition(this.state.filterString.length);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_edit_concept_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'fs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ps':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's1':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's2':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, editStrategy, customGroup, permission, lastTimes, useFormulaData } = props;\r\n\r\n switch (status) {\r\n case 'luis_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'luis_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'analysis_success':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'analysis_fail':\r\n var error = languageMessages['Intelligent.analysis.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['unable.get.intelligent.analysis.results'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.analytics.service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.analytics.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 6:\r\n error = languageMessages['request.analysis.timeout'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'scan_success':\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({ lastTimes: lastTimes, isShowStockResultPage: true, filterError: '', textareaClass: 'common-textarea', isFilterScan: false });\r\n break;\r\n case 'scan_fail':\r\n var error = '';\r\n var textareaClass = 'common-textarea';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['stock.picker.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['no.choice.to.stock'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.stock.picker.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['stock.picker.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ filterError: error, textareaClass: textareaClass, isFilterScan: false });\r\n break;\r\n case 'save_success':\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (customStrategy.length > 0) {\r\n const index = customStrategy.findIndex(item => item.id === editStrategy.id);\r\n if (index > -1) {\r\n customStrategy[index] = editStrategy;\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategy));\r\n\r\n var conceptStrategyCache = {\r\n customId: editStrategy.id,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n filterId: editStrategy.filterId,\r\n filterName: editStrategy.filterName,\r\n filterString: editStrategy.filterString,\r\n };\r\n sessionStorage.setItem(\"ConceptStrategyCache\", JSON.stringify(conceptStrategyCache));\r\n \r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n saveVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n customId: editStrategy.id,\r\n strategyName: editStrategy.filterName,\r\n });\r\n break;\r\n case 'save_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['save.strategy.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['save.strategy.failed'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.save.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['save.strategy.timeout'];\r\n break;\r\n case 7:\r\n error = languageMessages['save.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({\r\n saveVisible: false,\r\n });\r\n break;\r\n case 'update_customStock_success':\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n \r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['joining.stock.pool.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'clear_filter_string':\r\n this.setState({ filterString: '' });\r\n break;\r\n case 'use_formula':\r\n this.setState({\r\n isLuisAnalysis: useFormulaData.isLuisAnalysis,\r\n filterString: useFormulaData.filterString\r\n }, () => {\r\n if (!useFormulaData.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n onMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/myStrategy\");\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n });\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n }, () => {\r\n if (!data.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n this.setState({\r\n stockCount: data.StockCount\r\n }, () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n this.props.dispatch({ type: \"action_update_result_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n this.props.dispatch({ type: \"action_add_result_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n }\r\n });\r\n }\r\n\r\n jumpMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/strategy\");\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/customStock\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n startStockPicker = () => {\r\n var { filterError, lastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['stock.picker.strategy.in.error']);\r\n //return;\r\n }\r\n\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n this.setState({ isShowStockResultPage: false, isFilterScan: true, filterError: '' }, () => {\r\n this.checkOperatingStrategy('scen_strategy');\r\n });\r\n }\r\n };\r\n\r\n onSaveStrategy = () => {\r\n let { filterName, strategyName } = this.state;\r\n\r\n this.setState({\r\n saveVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: strategyName === '' ? filterName : strategyName,\r\n });\r\n }\r\n\r\n handleSaveStrategy = () => {\r\n var { strategyName, customId } = this.state;\r\n \r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.filterName == strategyName && e.id != customId });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.checkOperatingStrategy('save_strategy');\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = () => {\r\n this.setState({\r\n saveVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n });\r\n };\r\n\r\n checkOperatingStrategy(type) {\r\n let { customId,\r\n stockGroups,\r\n stockPoolKey,\r\n conceptId,\r\n filterName,\r\n filterString,\r\n strategyName,\r\n orderType,\r\n orderDirection,\r\n isUseOrder} = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR',\r\n isFilterScan: false\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n strategyName = strategyName === '' ? filterName : strategyName;\r\n switch (type) {\r\n case 'scen_strategy':\r\n this.props.dispatch({\r\n type: \"action_scen_strategy\", payload: {\r\n UserId: this.user.username,\r\n Type: 0,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n });\r\n break;\r\n case 'save_strategy':\r\n this.props.dispatch({ type: \"action_save_strategy\", payload: { UserId: this.user.username, Type: 0, CustomId: customId, ConceptId: conceptId, FilterId: 0, FilterName: strategyName, GroupType: stockPoolKey, FilterString: filterString, SymbolGroupId: stockGroups } });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n var filterString = e.target.value;\r\n var tmpFilterString = filterString.toLowerCase();\r\n var topIndex = tmpFilterString.indexOf(\"selecttopn\");\r\n var bottomIndex = tmpFilterString.indexOf(\"selectbottomn\");\r\n var isUseOrder = false;\r\n if (topIndex !== -1 || bottomIndex !== -1) {\r\n //SelectTopN,SelectBottomN\r\n isUseOrder = true;\r\n }\r\n\r\n var { caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n //console.log('autoMatchData', autoMatchData);\r\n\r\n this.setState({\r\n filterString: filterString,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isUseOrder: isUseOrder,\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onChangeStrategy = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n \r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n\r\n clearFilterString = () => {\r\n if (this.props.status === 'clear_filter_string') {\r\n this.setState({ filterString: '' });\r\n } else {\r\n this.props.dispatch({ type: \"action_clear_filterString\" });\r\n }\r\n }\r\n\r\n onBack = () => {\r\n Confirm({\r\n title: languageMessages['prompt'],\r\n content: languageMessages['are.you.leaving.this.page'],\r\n cancelText: languageMessages['leave'],\r\n okText: languageMessages['stay'],\r\n onOk() { },\r\n onCancel() { history.goBack(); },\r\n });\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockGroups, filterString, conceptId } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader onBack={this.onBack} backIcon={(<Icon type=\"left\" />)}\r\n title={(<h1 style={{ cursor: 'pointer' }} onClick={this.onBack}>{this.state.strategyName || this.state.filterName}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyStrategy}>{languageMessages['my.strategy']}</Button>\r\n ]} />\r\n <Modal title={languageMessages['new.strategy']}\r\n visible={this.state.saveVisible}\r\n onOk={this.handleSaveStrategy}\r\n confirmLoading={this.props.status === 'save_commit'}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategy} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Content className='cont-content luis-main-content'>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <LuisPage {...this.props} filterString={filterString} isFilterScan={this.state.isFilterScan} LuisAnalysis={this.handleLuisAnalysis.bind(this)} />\r\n \r\n <Row gutter={2}>\r\n <Col span={12}>\r\n <StockFormulaPage conceptId={conceptId} />\r\n </Col>\r\n <Col span={12}>\r\n <div className='common-title'>{languageMessages['formula.editing']}\r\n <div style={{ float: 'right' }}>\r\n <Button size='small' onClick={this.onSaveStrategy} disabled={this.state.filterString === ''}>{languageMessages['save.strategy']}</Button>\r\n <Button size='small' onClick={this.clearFilterString} style={{ marginLeft: '20px' }}>{languageMessages['clear']}</Button>\r\n </div>\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n placeholder={languageMessages['use.formula.generated.or.vernacular.stock.selection']}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle} />\r\n </Col>\r\n </Row>\r\n\r\n <StockOrderPage filterString={filterString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n\r\n <div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.startStockPicker} loading={this.props.status === 'scan_commit'} disabled={this.props.status === 'scan_commit' || this.state.filterString === '' || this.state.isLuisAnalysis}>\r\n {this.props.status === 'scan_commit' ? languageMessages['stock.picking'] : languageMessages['real.stock.picking']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Content>\r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='cont-content'>\r\n <StockResultPage status={this.props.status} stockPoolKey={stockPoolKey} scanAlert={this.props.scanAlert} customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>)}\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.concept;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(EditStrategyPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, Row, Col } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport LuisPage from '../../pannels/stock/LuisPage';\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\nimport USSymbolGroupPage from '../../pannels/stock/USSymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport StockResultPage from '../../pannels/stock/StockResultPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass VernacularPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n let tmpStockGroups = window.webType === 'US' ? '10000' : '3180';\r\n\r\n let tmpOrderType = '$VOLUME_NUM';\r\n let tmpOrderDirection = '0';\r\n\r\n /**\r\n var cacheFilterString = JSON.parse(sessionStorage.getItem(\"cacheScanCondition\") || '{}') || {};\r\n if (Object.keys(cacheFilterString).length > 0) {\r\n tmpFilterString = cacheFilterString['filterString'];\r\n tmpStockPoolKey = cacheFilterString['stockPoolKey'];\r\n tmpStockGroups = cacheFilterString['stockGroups'];\r\n\r\n tmpOrderType = cacheFilterString['orderType'];\r\n tmpOrderDirection = cacheFilterString['orderDirection'];\r\n\r\n sessionStorage.removeItem(\"cacheScanCondition\");\r\n }\r\n */\r\n \r\n this.user = {};\r\n this.state = {\r\n customId: 0,\r\n stockPoolKey: 'STOCK',\r\n\r\n lastTimes: 0,\r\n\r\n caretPosition: 0,\r\n\r\n stockGroups: tmpStockGroups,\r\n \r\n filterId: 0,\r\n filterName: '',\r\n filterString: '',\r\n\r\n orderType: tmpOrderType,\r\n orderDirection: tmpOrderDirection,\r\n isUseOrder: false,\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n \r\n stockCount: 0,\r\n\r\n scanAlert: {},\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n\r\n isLuisAnalysis: false,\r\n isFilterScan: false,\r\n\r\n scanRequestLoadding: false,\r\n saveFormulaLoadding: false,\r\n\r\n stockGroupLoadding: false,\r\n isStockGroupDone: false,\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener(\"callFilterRequestResult\", this.callFilterRequestResult);\r\n\r\n emitter.addListener(\"callScanAlertResult\", this.callScanAlertResult);\r\n\r\n emitter.addListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.addListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n\r\n this.rta.setCaretPosition(this.state.filterString.length);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.removeListener('callScanAlertResult', this.callScanAlertResult);\r\n\r\n emitter.removeListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.removeListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n }\r\n\r\n callSendError = (status) => {\r\n var error = '';\r\n switch (status) {\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n }\r\n \r\n this.setState({ spinLoadding: false, scanRequestLoadding: false, isFilterScan: false, stockGroupLoadding: false, isStockGroupDone: false, filterError: error });\r\n }\r\n\r\n callCustomSymbolGroups = (symbolGroup) => {\r\n let { isStockGroupDone } = this.state;\r\n\r\n if (symbolGroup.Status === 0) {\r\n var customStockGroupsCache = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroupsCache.length > 0) {\r\n const index = customStockGroupsCache.findIndex(item => item.groupId === symbolGroup.gi);\r\n if (index > -1) {\r\n customStockGroupsCache[index].groupName = symbolGroup.gn;\r\n customStockGroupsCache[index].symbolList = symbolGroup.sg;\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n isStockGroupDone = true;\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n } else {\r\n isStockGroupDone = false;\r\n message.error(symbolGroup.Description);\r\n }\r\n\r\n this.setState({ stockGroupLoadding: false, isStockGroupDone });\r\n }\r\n\r\n callSaveFilterRequestResult = (filterResult, filter, customStrategy) => {\r\n if (filterResult.Status === 0) {\r\n if (customStrategy === null) {\r\n message.error(languageMessages['save.strategy.failed']);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n return;\r\n }\r\n if (filter.Category === 'save' || filter.Category === 'save_done') {\r\n var customStrategyCache = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (customStrategyCache.length > 0) {\r\n const index = customStrategyCache.findIndex(item => item.id === filter.customId);\r\n if (index > -1) {\r\n customStrategyCache[index] = customStrategy;\r\n } else {\r\n customStrategyCache.push(customStrategy);\r\n }\r\n } else {\r\n customStrategyCache.push(customStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategyCache));\r\n\r\n var VernacularStrategyCache = {\r\n customId: customStrategy.id,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n filterId: customStrategy.filterId,\r\n filterName: customStrategy.filterName,\r\n filterString: customStrategy.filterString\r\n };\r\n sessionStorage.setItem(\"VernacularStrategyCache\", JSON.stringify(VernacularStrategyCache));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n modalVisible: false,\r\n customId: customStrategy.id,\r\n });\r\n } else {\r\n message.error(languageMessages['save.strategy.failed']);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n }\r\n } else {\r\n message.error(filterResult.Description);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n }\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n message.error(filterResult.Description);\r\n } else {\r\n //message.error(filterResult.Description);\r\n this.setState({\r\n scanRequestLoadding: false,\r\n filterError: filterResult.Description,\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n }\r\n }\r\n\r\n callScanAlertResult = (scanAlert, permission, lastTimes) => {\r\n if (scanAlert.hasOwnProperty('count') > 0 && scanAlert['count'] > 0) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({\r\n scanRequestLoadding: false,\r\n scanAlert: scanAlert,\r\n lastTimes: lastTimes,\r\n isShowStockResultPage: true,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n } else {\r\n var error = languageMessages['no.choice.to.stock']\r\n this.setState({\r\n scanRequestLoadding: false,\r\n filterError: error,\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n }\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'fs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ps':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's1':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's2':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, editStrategy, customGroup, permission, lastTimes, useFormulaData } = props;\r\n \r\n switch (status) {\r\n case 'luis_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'luis_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'scan_formula_success':\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({\r\n lastTimes: lastTimes,\r\n isShowStockResultPage: true,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n break;\r\n case 'scan_formula_fail':\r\n var error = '';\r\n var textareaClass = 'common-textarea';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['stock.picker.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['no.choice.to.stock'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.stock.picker.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['stock.picker.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ filterError: error, textareaClass: textareaClass, isFilterScan: false, });\r\n break;\r\n case 'analysis_success':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'analysis_fail':\r\n var error = languageMessages['Intelligent.analysis.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['unable.get.intelligent.analysis.results'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.analytics.service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.analytics.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 6:\r\n error = languageMessages['request.analysis.timeout'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'save_formula_success':\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (customStrategy.length > 0) {\r\n const index = customStrategy.findIndex(item => item.id === editStrategy.id);\r\n if (index > -1) {\r\n customStrategy[index] = editStrategy;\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategy));\r\n\r\n var VernacularStrategyCache = {\r\n customId: editStrategy.id,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n filterId: editStrategy.filterId,\r\n filterName: editStrategy.filterName,\r\n filterString: editStrategy.filterString\r\n };\r\n sessionStorage.setItem(\"VernacularStrategyCache\", JSON.stringify(VernacularStrategyCache));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n modalVisible: false,\r\n customId: editStrategy.id,\r\n });\r\n\r\n break;\r\n case 'save_formula_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['save.strategy.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['save.strategy.failed'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.save.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['save.strategy.timeout'];\r\n break;\r\n case 7:\r\n error = languageMessages['save.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({\r\n modalVisible: false,\r\n });\r\n break;\r\n case 'update_customStock_success':\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['joining.stock.pool.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'clear_filter_string':\r\n this.setState({ filterString: '' });\r\n break;\r\n case 'use_formula':\r\n this.setState({\r\n isLuisAnalysis: useFormulaData.isLuisAnalysis,\r\n filterString: useFormulaData.filterString\r\n }, () => {\r\n if (!useFormulaData.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n isUseOrder: data.isUseOrder,\r\n });\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n }, () => {\r\n if (!data.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.setState({\r\n stockGroupLoadding: true,\r\n isStockGroupDone: false,\r\n stockCount: data.StockCount\r\n }, () => {\r\n\r\n var action = 'new';\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n action = 'update';\r\n //this.props.dispatch({ type: \"action_update_formula_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n //this.props.dispatch({ type: \"action_add_formula_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: action,\r\n GroupId: data.GroupId,\r\n UserId: this.user.username,\r\n GroupName: data.GroupName,\r\n OldGroupName: data.GroupName,\r\n SymbolList: data.SymbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n jumpMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'strategy');\r\n history.push(\"/strategy\");\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'customStock');\r\n history.push(\"/customStock\");\r\n }\r\n\r\n onMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'strategy');\r\n history.push(\"/strategy\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n startStockPicker = () => {\r\n let { filterError, lastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['stock.picker.strategy.in.error']);\r\n //return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Formula scan', 'scan', 'Vernacular Formula scan']);\r\n\r\n if (this.user.username === undefined) {\r\n //saved to cache\r\n /**\r\n let tmpScanCondition = {\r\n filterString: this.state.filterString,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n orderType: this.state.orderType,\r\n orderDirection: this.state.orderDirection\r\n };\r\n\r\n //sessionStorage.setItem(\"cacheScanCondition\", JSON.stringify(tmpScanCondition));\r\n */\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.checkOperatingStrategy('scan_strategy');\r\n }\r\n };\r\n\r\n onSaveStrategy = () => {\r\n var { filterName, strategyName } = this.state;\r\n\r\n this.setState({\r\n modalTitle: languageMessages['new.strategy'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: strategyName === '' ? filterName : strategyName\r\n });\r\n }\r\n\r\n handleSaveStrategy = () => {\r\n var { strategyName, customId } = this.state;\r\n \r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.filterName == strategyName && e.id != customId });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.checkOperatingStrategy('save_strategy');\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = () => {\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n strategyName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n checkOperatingStrategy(type) {\r\n var { stockGroups,\r\n stockPoolKey,\r\n filterName,\r\n filterString,\r\n customId,\r\n strategyName,\r\n orderType,\r\n orderDirection,\r\n isUseOrder} = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR',\r\n isFilterScan: false,\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n strategyName = strategyName === '' ? filterName : strategyName;\r\n switch (type) {\r\n case 'scan_strategy':\r\n this.setState({ isShowStockResultPage: false, isFilterScan: true, filterError: '', scanRequestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'scan',\r\n Action: 'scan',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n }\r\n });\r\n });\r\n\r\n /**\r\n var params = {\r\n UserId: this.user.username,\r\n Type: 1,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n };\r\n\r\n this.props.dispatch({ type: \"action_scan_formula_strategy\", payload: params });\r\n */\r\n break;\r\n case 'save_strategy':\r\n this.setState({ saveFormulaLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'save',\r\n Action: 'new',\r\n UserId: this.user.username,\r\n Type: 1,\r\n CustomId: customId,\r\n ConceptId: 0,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups\r\n }\r\n }\r\n });\r\n });\r\n \r\n /**\r\n this.props.dispatch({\r\n type: \"action_save_formula_strategy\", payload: {\r\n UserId: this.user.username,\r\n Type: 1,\r\n CustomId: customId,\r\n ConceptId: 0,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups\r\n }\r\n });\r\n */\r\n break;\r\n }\r\n }\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n var filterString = e.target.value;\r\n var tmpFilterString = filterString.toLowerCase();\r\n var topIndex = tmpFilterString.indexOf(\"selecttopn\");\r\n var bottomIndex = tmpFilterString.indexOf(\"selectbottomn\");\r\n var isUseOrder = false;\r\n if (topIndex !== -1 || bottomIndex !== -1) {\r\n //SelectTopN,SelectBottomN\r\n isUseOrder = true;\r\n }\r\n\r\n this.setState({\r\n filterString: filterString,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isUseOrder: isUseOrder,\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onChangeStrategy = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n \r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n\r\n clearFilterString = () => {\r\n if (this.props.status === 'clear_filter_string') {\r\n this.setState({ filterString: '' });\r\n } else {\r\n this.props.dispatch({ type: \"action_clear_filterString\" });\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, filterString, stockGroups } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title.newScan']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['description.scan']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title.newScan']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description.scan']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title.newScan']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description.scan']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['title.newScan']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyStrategy}>{languageMessages['my.strategy']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n onOk={this.handleSaveStrategy}\r\n confirmLoading={this.state.saveFormulaLoadding}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategy} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n <ul style={{ margin: '10px 0' }}>\r\n <li style={{ padding: '5px 0' }}><h2>{languageMessages['description.scan']}</h2></li>\r\n </ul>\r\n\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <LuisPage {...this.props} filterString={filterString} isFilterScan={this.state.isFilterScan} LuisAnalysis={this.handleLuisAnalysis.bind(this)}/>\r\n\r\n <div id=\"textareaAnchor\" className='common-title'>\r\n <Divider type=\"vertical\" /><span>{languageMessages['formula.editing']}</span>\r\n <Button size='small' onClick={this.onSaveStrategy} disabled={this.state.filterString === ''} style={{ marginLeft: '20px' }}>{languageMessages['save.strategy']}</Button>\r\n <Button size='small' onClick={this.clearFilterString} style={{ marginLeft: '20px' }}>{languageMessages['clear']}</Button>\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n placeholder={languageMessages['use.formula.generated.or.vernacular.stock.selection']}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle}/>\r\n\r\n <StockOrderPage filterString={filterString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n \r\n <div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>\r\n\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.startStockPicker} loading={this.state.scanRequestLoadding} disabled={this.state.scanRequestLoadding || this.state.filterString === '' || this.state.isLuisAnalysis}>\r\n {this.state.scanRequestLoadding ? languageMessages['stock.picking'] : languageMessages['real.stock.picking']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Layout>\r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='cont-content'>\r\n <StockResultPage isStockGroupDone={this.state.isStockGroupDone} stockGroupLoadding={this.state.stockGroupLoadding} stockPoolKey={stockPoolKey} scanAlert={this.state.scanAlert} customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>)}\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.vernacular;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(VernacularPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Menu, Button, Input, Form, Modal, Divider, Spin, message } from 'antd';\r\n\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\nimport USSymbolGroupPage from '../../pannels/stock/USSymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport StockResultPage from '../../pannels/stock/StockResultPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Sider, Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass MyStrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'STOCK',\r\n\r\n strategyData: [],\r\n currentSelectKey: '',\r\n\r\n saveVisible: false,\r\n\r\n lastTimes: 0,\r\n\r\n caretPosition: 0,\r\n \r\n stockGroups: window.webType === 'US' ? '10000' : '3180',\r\n \r\n filterName: '',\r\n filterString: '',\r\n\r\n orderType: '$VOLUME_NUM',\r\n orderDirection: '0',\r\n isUseOrder: false,\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n\r\n stockCount: 0,\r\n action: '',\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_formula_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_formula_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'fs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ps':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's1':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's2':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n setStrategyShow(customStrategy) {\r\n var { strategyData, stockPoolKey, stockGroups, currentSelectKey, filterName, filterString } = this.state;\r\n \r\n strategyData = [];\r\n for (var key in customStrategy) {\r\n if (currentSelectKey === '') {\r\n currentSelectKey = customStrategy[key].id.toString();\r\n stockPoolKey = customStrategy[key].groupType;\r\n stockGroups = customStrategy[key].symbolGroupId;\r\n filterName = customStrategy[key].filterName;\r\n filterString = customStrategy[key].filterString;\r\n }\r\n\r\n strategyData.push(<Menu.Item key={customStrategy[key].id}>{customStrategy[key].filterName}</Menu.Item>);\r\n }\r\n\r\n if (currentSelectKey !== '') {\r\n this.setState({\r\n strategyData: strategyData,\r\n currentSelectKey: currentSelectKey,\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n filterName: filterName,\r\n filterString: filterString,\r\n spinLoadding: false\r\n });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, editStrategy, customGroup, permission, lastTimes } = props;\r\n \r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n switch (status) {\r\n case 'formula_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n if (customStrategy.length > 0) {\r\n this.setStrategyShow(customStrategy);\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n break;\r\n case 'formula_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'scan_formula_success':\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({ lastTimes: lastTimes, isShowStockResultPage: true, filterError: '', textareaClass: 'common-textarea' });\r\n break;\r\n case 'scan_formula_fail':\r\n var error = '';\r\n var textareaClass = 'common-textarea';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['stock.picker.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['no.choice.to.stock'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.stock.picker.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['stock.picker.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ filterError: error, textareaClass: textareaClass });\r\n break;\r\n case 'save_formula_success':\r\n if (customStrategy.length > 0) {\r\n const index = customStrategy.findIndex(item => item.id === editStrategy.id);\r\n if (index > -1) {\r\n customStrategy[index] = editStrategy;\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n } else {\r\n customStrategy.push(editStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategy));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n modalVisible: false,\r\n });\r\n\r\n //更新左侧数æ®\r\n if (customStrategy) {\r\n this.setStrategyShow(customStrategy);\r\n }\r\n\r\n break;\r\n case 'save_formula_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['save.strategy.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['save.strategy.failed'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.save.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['save.strategy.timeout'];\r\n break;\r\n case 7:\r\n error = languageMessages['save.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({\r\n modalVisible: false,\r\n });\r\n break;\r\n case 'update_customStock_success':\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['joining.stock.pool.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n var secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n isUseOrder: data.isUseOrder,\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n this.setState({\r\n stockCount: data.StockCount\r\n }, () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n this.props.dispatch({ type: \"action_update_formula_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n this.props.dispatch({ type: \"action_add_formula_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n }\r\n });\r\n }\r\n\r\n jumpMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/strategy\");\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n history.push(\"/customStock\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n this.setState({\r\n stockPoolkKey: e.target.value,\r\n error: ''\r\n });\r\n };\r\n\r\n startStockPicker = () => {\r\n let { filterError, lastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['stock.picker.strategy.in.error']);\r\n //return;\r\n }\r\n\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({ isShowStockResultPage: false, filterError: '' }, () => {\r\n this.checkOperatingStrategy();\r\n });\r\n }\r\n };\r\n\r\n checkOperatingStrategy() {\r\n let { stockGroups,\r\n stockPoolKey,\r\n filterString,\r\n orderType,\r\n orderDirection,\r\n isUseOrder} = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR'\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n \r\n this.props.dispatch({\r\n type: \"action_scan_formula_strategy\", payload: {\r\n UserId: this.user.username,\r\n Type: 1,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n });\r\n }\r\n\r\n onNewStrategy = () => {\r\n this.setState({\r\n modalTitle: languageMessages['new.strategy'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n action: 'new',\r\n });\r\n }\r\n\r\n onCopyStrategy = () => {\r\n let { filterName } = this.state;\r\n this.setState({\r\n modalTitle: languageMessages['copy.strategy'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: filterName + languageMessages['_copy'],\r\n action: 'copy',\r\n });\r\n }\r\n\r\n onEditStrategy = e => {\r\n e.preventDefault();\r\n var { stockPoolKey, stockGroups, currentSelectKey, filterName, filterString } = this.state;\r\n\r\n var conceptId = 0;\r\n var filterId = 0;\r\n var url = '/vernacular';\r\n var cacheName = 'VernacularStrategyCache';\r\n\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpCustomStrategy = customStrategy.filter(function (e) { return e.id == currentSelectKey; });\r\n\r\n if (tmpCustomStrategy.length > 0) {\r\n if (tmpCustomStrategy[0].type === 0) {\r\n conceptId = tmpCustomStrategy[0].conceptId;\r\n filterId = tmpCustomStrategy[0].filterId;\r\n url = '/editStrategy';\r\n cacheName = 'ConceptStrategyCache';\r\n } else {\r\n url = '/vernacular';\r\n cacheName = 'VernacularStrategyCache';\r\n }\r\n }\r\n\r\n var StrategyCache = {\r\n conceptId: conceptId,\r\n customId: currentSelectKey,\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n filterId: filterId,\r\n filterName: filterName,\r\n filterString: filterString\r\n };\r\n\r\n sessionStorage.setItem(cacheName, JSON.stringify(StrategyCache));\r\n history.push(url);\r\n }\r\n\r\n handleSaveStrategy = e => {\r\n e.preventDefault();\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var { stockPoolKey, stockGroups, currentSelectKey, strategyName, filterName, filterString, action } = this.state;\r\n\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.filterName == strategyName; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n var conceptId = 0;\r\n var filterId = 0;\r\n var url = '/vernacular';\r\n var cacheName = 'VernacularStrategyCache';\r\n var msg = '';\r\n switch (action) {\r\n case 'new':\r\n stockPoolKey = 'STOCK';\r\n stockGroups = window.webType === 'US' ? '10000' : '3180';\r\n filterName = strategyName;\r\n filterString = '';\r\n\r\n msg = languageMessages['new.strategy.success'];\r\n break;\r\n case 'copy':\r\n filterName = strategyName;\r\n\r\n var tmpCustomStrategy = customStrategy.filter(function (e) { return e.id == currentSelectKey; });\r\n if (tmpCustomStrategy.length > 0) {\r\n if (tmpCustomStrategy[0].type === 0) {\r\n conceptId = tmpCustomStrategy[0].conceptId;\r\n filterId = tmpCustomStrategy[0].filterId;\r\n url = '/editStrategy';\r\n cacheName = 'ConceptStrategyCache';\r\n } else {\r\n url = '/vernacular';\r\n cacheName = 'VernacularStrategyCache';\r\n }\r\n }\r\n\r\n msg = languageMessages['copy.strategy.success'];\r\n break;\r\n }\r\n\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n strategyName: '',\r\n\r\n filterName: strategyName,\r\n\r\n action: '',\r\n });\r\n\r\n var StrategyCache = {\r\n conceptId: conceptId, //\r\n customId: 0,\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n filterId: filterId,\r\n filterName: filterName,\r\n filterString: filterString\r\n };\r\n\r\n sessionStorage.setItem(cacheName, JSON.stringify(StrategyCache));\r\n history.push(url);\r\n\r\n message.success(msg);\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = () => {\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n strategyName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n };\r\n\r\n handleMenuClick = e => {\r\n var tmpSelectKey = e.key;\r\n\r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.id == tmpSelectKey; });\r\n if (tmpData.length > 0) {\r\n var data = tmpData[0];\r\n\r\n var filterString = data.filterString;\r\n var tmpFilterString = filterString.toLowerCase();\r\n var topIndex = tmpFilterString.indexOf(\"selecttopn\");\r\n var bottomIndex = tmpFilterString.indexOf(\"selectbottomn\");\r\n var isUseOrder = false;\r\n if (topIndex !== -1 || bottomIndex !== -1) {\r\n //SelectTopN,SelectBottomN\r\n isUseOrder = true;\r\n }\r\n\r\n this.setState({\r\n currentSelectKey: tmpSelectKey.toString(),\r\n stockPoolKey: data.groupType,\r\n stockGroups: data.symbolGroupId,\r\n filterName: data.filterName,\r\n filterString: filterString,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isUseOrder: isUseOrder,\r\n });\r\n }\r\n }\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n this.setState({\r\n filterString: e.target.value,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n let { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return dataSource;\r\n }\r\n\r\n onChangeStrategy = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n \r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n\r\n renderStrategyItem(strategyData, currentSelectKey) {\r\n if (strategyData.length > 0) {\r\n return <Menu inlineIndent={50} defaultSelectedKeys={[currentSelectKey || '1']} mode=\"inline\" onClick={this.handleMenuClick}>\r\n {strategyData}\r\n </Menu>\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(255, 255, 255, 0.75' }}>{languageMessages['no.strategy']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, stockPoolKey, stockGroups, filterString, currentSelectKey } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n };\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['my.strategy']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onNewStrategy}>{languageMessages['new.strategy']}</Button>,\r\n <Button key=\"2\" size='small' onClick={this.onCopyStrategy} disabled={strategyData.length <= 0}>{languageMessages['copy.strategy']}</Button>,\r\n <Button key=\"3\" size='small' onClick={this.onEditStrategy} disabled={strategyData.length <= 0}>{languageMessages['edit.strategy']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleSaveStrategy}\r\n confirmLoading={this.props.status === 'save_formula_commit'}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategy} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='main-content'>\r\n <Sider width={300}>\r\n <PageHeader className='common-sider-header' title={languageMessages['strategy.items']} />\r\n <Divider />\r\n <div className=\"common-sider-content\">\r\n {this.renderStrategyItem(strategyData, currentSelectKey)}\r\n </div>\r\n </Sider>\r\n <Layout>\r\n <Content className='common-content'>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['formula.editing']}</div>\r\n <div className='common-edit'><pre>{filterString}</pre></div>\r\n \r\n <StockOrderPage filterString={filterString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n\r\n <div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.startStockPicker} loading={this.props.status === 'scan_formula_commit'} disabled={this.props.status === 'scan_formula_commit' || this.state.filterString === ''}>\r\n {this.props.status === 'scan_formula_commit' ? languageMessages['stock.picking'] : languageMessages['real.stock.picking']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Content>\r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='common-content'>\r\n <StockResultPage status={this.props.status} stockPoolKey={stockPoolKey} scanAlert={this.props.scanAlert} customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>\r\n )}\r\n </Layout>\r\n </Layout>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.vernacular;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyStrategyPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, Row, Col } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport LuisPage from '../../pannels/stock/LuisPage';\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\nimport USSymbolGroupPage from '../../pannels/stock/USSymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport StockResultPage from '../../pannels/stock/StockResultPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass UpdateStrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n var VernacularStrategy = JSON.parse(sessionStorage.getItem(\"VernacularStrategyCache\") || '{}') || {};\r\n \r\n let tmpStockGroups = window.webType === 'US' ? '10000' : '3180';\r\n\r\n let tmpFilterString = VernacularStrategy.filterString === undefined ? '' : VernacularStrategy.filterString;\r\n let tmpStockPoolKey = VernacularStrategy.stockPoolKey === undefined ? 'STOCK' : VernacularStrategy.stockPoolKey;\r\n tmpStockGroups = VernacularStrategy.stockGroups === undefined ? tmpStockGroups : VernacularStrategy.stockGroups;\r\n\r\n let tmpOrderType = '$VOLUME_NUM';\r\n let tmpOrderDirection = '0';\r\n\r\n /**\r\n var cacheFilterString = JSON.parse(sessionStorage.getItem(\"cacheScanCondition\") || '{}') || {};\r\n if (Object.keys(cacheFilterString).length > 0) {\r\n tmpFilterString = cacheFilterString['filterString'];\r\n tmpStockPoolKey = cacheFilterString['stockPoolKey'];\r\n tmpStockGroups = cacheFilterString['stockGroups'];\r\n\r\n tmpOrderType = cacheFilterString['orderType'];\r\n tmpOrderDirection = cacheFilterString['orderDirection'];\r\n\r\n sessionStorage.removeItem(\"cacheScanCondition\");\r\n }\r\n */\r\n \r\n this.user = {};\r\n this.state = {\r\n customId: VernacularStrategy.customId === undefined ? 0 : VernacularStrategy.customId,\r\n stockPoolKey: tmpStockPoolKey,\r\n\r\n lastTimes: 0,\r\n\r\n caretPosition: 0,\r\n\r\n stockGroups: tmpStockGroups,\r\n \r\n filterId: VernacularStrategy.filterId === undefined ? 0 : VernacularStrategy.filterId,\r\n filterName: VernacularStrategy.filterName === undefined ? '' : VernacularStrategy.filterName,\r\n filterString: tmpFilterString,\r\n\r\n orderType: tmpOrderType,\r\n orderDirection: tmpOrderDirection,\r\n isUseOrder: false,\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n \r\n stockCount: 0,\r\n\r\n scanAlert: {},\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n\r\n isLuisAnalysis: false,\r\n isFilterScan: false,\r\n\r\n scanRequestLoadding: false,\r\n saveFormulaLoadding: false,\r\n\r\n stockGroupLoadding: false,\r\n isStockGroupDone: false,\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener(\"callFilterRequestResult\", this.callFilterRequestResult);\r\n\r\n emitter.addListener(\"callScanAlertResult\", this.callScanAlertResult);\r\n\r\n emitter.addListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.addListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n\r\n this.rta.setCaretPosition(this.state.filterString.length);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.removeListener('callScanAlertResult', this.callScanAlertResult);\r\n\r\n emitter.removeListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.removeListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n\r\n sessionStorage.removeItem(\"VernacularStrategyCache\");\r\n }\r\n\r\n callSendError = (status) => {\r\n var error = '';\r\n switch (status) {\r\n case 7:\r\n error = languageMessages['today.stock.picks.end'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n }\r\n\r\n this.setState({ spinLoadding: false, scanRequestLoadding: false, isFilterScan: false, stockGroupLoadding: false, isStockGroupDone: false, filterError: error });\r\n }\r\n\r\n callCustomSymbolGroups = (symbolGroup) => {\r\n let { isStockGroupDone } = this.state;\r\n\r\n if (symbolGroup.Status === 0) {\r\n var customStockGroupsCache = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroupsCache.length > 0) {\r\n const index = customStockGroupsCache.findIndex(item => item.groupId === symbolGroup.gi);\r\n if (index > -1) {\r\n customStockGroupsCache[index].groupName = symbolGroup.gn;\r\n customStockGroupsCache[index].symbolList = symbolGroup.sg;\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n isStockGroupDone = true;\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n } else {\r\n isStockGroupDone = false;\r\n message.error(symbolGroup.Description);\r\n }\r\n\r\n this.setState({ stockGroupLoadding: false, isStockGroupDone });\r\n }\r\n\r\n callSaveFilterRequestResult = (filterResult, filter, customStrategy) => {\r\n if (filterResult.Status === 0) {\r\n if (filter.Category === 'save_done') {\r\n var customStrategyCache = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (customStrategyCache.length > 0) {\r\n const index = customStrategyCache.findIndex(item => item.id === filter.customId);\r\n if (index > -1) {\r\n customStrategyCache[index] = customStrategy;\r\n } else {\r\n customStrategyCache.push(customStrategy);\r\n }\r\n } else {\r\n customStrategyCache.push(customStrategy);\r\n }\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategyCache));\r\n\r\n var VernacularStrategyCache = {\r\n customId: customStrategy.id,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n filterId: customStrategy.filterId,\r\n filterName: customStrategy.filterName,\r\n filterString: customStrategy.filterString\r\n };\r\n sessionStorage.setItem(\"VernacularStrategyCache\", JSON.stringify(VernacularStrategyCache));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyStrategy}>{languageMessages['my.strategy']}</a>\"</span>;\r\n this.timerModal(languageMessages['save.strategy.success'], content);\r\n\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n modalVisible: false,\r\n customId: customStrategy.id,\r\n });\r\n } else {\r\n message.error(languageMessages['save.strategy.failed']);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n }\r\n } else {\r\n message.error(filterResult.Description);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n }\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n message.error(filterResult.Description);\r\n } else {\r\n message.error(filterResult.Description);\r\n }\r\n }\r\n\r\n callScanAlertResult = (scanAlert, permission, lastTimes) => {\r\n if (scanAlert.hasOwnProperty('count') > 0 && scanAlert['count'] > 0) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.setState({\r\n scanRequestLoadding: false,\r\n scanAlert: scanAlert,\r\n lastTimes: lastTimes,\r\n isShowStockResultPage: true,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n } else {\r\n var error = languageMessages['no.choice.to.stock']\r\n this.setState({\r\n scanRequestLoadding: false,\r\n filterError: error,\r\n textareaClass: 'common-textarea',\r\n isFilterScan: false,\r\n });\r\n }\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'fs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'bs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'ps':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'vs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's1':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 's2':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, editStrategy, customGroup, permission, lastTimes, useFormulaData } = props;\r\n \r\n switch (status) {\r\n case 'luis_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'luis_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n \r\n case 'analysis_success':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'analysis_fail':\r\n var error = languageMessages['Intelligent.analysis.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['unable.get.intelligent.analysis.results'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.analytics.service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.analytics.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 6:\r\n error = languageMessages['request.analysis.timeout'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'clear_filter_string':\r\n this.setState({ filterString: '' });\r\n break;\r\n case 'use_formula':\r\n this.setState({\r\n isLuisAnalysis: useFormulaData.isLuisAnalysis,\r\n filterString: useFormulaData.filterString\r\n }, () => {\r\n if (!useFormulaData.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n isUseOrder: data.isUseOrder,\r\n });\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n }, () => {\r\n if (!data.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.setState({\r\n stockGroupLoadding: true,\r\n isStockGroupDone: false,\r\n stockCount: data.StockCount\r\n }, () => {\r\n\r\n var action = 'new';\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n action = 'update';\r\n //this.props.dispatch({ type: \"action_update_formula_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n //this.props.dispatch({ type: \"action_add_formula_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: action,\r\n GroupId: data.GroupId,\r\n UserId: this.user.username,\r\n GroupName: data.GroupName,\r\n SymbolList: data.SymbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n jumpMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'strategy');\r\n history.push(\"/strategy\");\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'customStock');\r\n history.push(\"/customStock\");\r\n }\r\n\r\n onMyStrategy = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'strategy');\r\n history.push(\"/strategy\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n startStockPicker = () => {\r\n let { filterError, lastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['stock.picker.strategy.in.error']);\r\n //return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Formula scan', 'scan', 'Vernacular Formula scan']);\r\n\r\n if (this.user.username === undefined) {\r\n //saved to cache\r\n /**\r\n let tmpScanCondition = {\r\n filterString: this.state.filterString,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n orderType: this.state.orderType,\r\n orderDirection: this.state.orderDirection\r\n };\r\n\r\n //sessionStorage.setItem(\"cacheScanCondition\", JSON.stringify(tmpScanCondition));\r\n */\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.checkOperatingStrategy('scan_strategy');\r\n }\r\n };\r\n\r\n onSaveStrategy = () => {\r\n var { filterName, strategyName } = this.state;\r\n\r\n this.setState({\r\n modalTitle: languageMessages['new.strategy'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: strategyName === '' ? filterName : strategyName\r\n });\r\n }\r\n\r\n handleSaveStrategy = () => {\r\n var { strategyName, customId } = this.state;\r\n \r\n var customStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpData = customStrategy.filter(function (e) { return e.filterName == strategyName && e.id != customId });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.checkOperatingStrategy('save_strategy');\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = () => {\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n strategyName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n checkOperatingStrategy(type) {\r\n var { stockGroups,\r\n stockPoolKey,\r\n filterName,\r\n filterString,\r\n customId,\r\n strategyName,\r\n orderType,\r\n orderDirection,\r\n isUseOrder} = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR',\r\n isFilterScan: false,\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n strategyName = strategyName === '' ? filterName : strategyName;\r\n switch (type) {\r\n case 'scan_strategy':\r\n this.setState({ isShowStockResultPage: false, isFilterScan: true, filterError: '', scanRequestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'scan',\r\n Action: 'scan',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n }\r\n });\r\n });\r\n\r\n /**\r\n var params = {\r\n UserId: this.user.username,\r\n Type: 1,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n };\r\n\r\n this.props.dispatch({ type: \"action_scan_formula_strategy\", payload: params });\r\n */\r\n break;\r\n case 'save_strategy':\r\n this.setState({ saveFormulaLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'save',\r\n Action: 'new',\r\n UserId: this.user.username,\r\n Type: 1,\r\n CustomId: customId,\r\n ConceptId: 0,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups\r\n }\r\n }\r\n });\r\n });\r\n \r\n /**\r\n this.props.dispatch({\r\n type: \"action_save_formula_strategy\", payload: {\r\n UserId: this.user.username,\r\n Type: 1,\r\n CustomId: customId,\r\n ConceptId: 0,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups\r\n }\r\n });\r\n */\r\n break;\r\n }\r\n }\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n var filterString = e.target.value;\r\n var tmpFilterString = filterString.toLowerCase();\r\n var topIndex = tmpFilterString.indexOf(\"selecttopn\");\r\n var bottomIndex = tmpFilterString.indexOf(\"selectbottomn\");\r\n var isUseOrder = false;\r\n if (topIndex !== -1 || bottomIndex !== -1) {\r\n //SelectTopN,SelectBottomN\r\n isUseOrder = true;\r\n }\r\n\r\n this.setState({\r\n filterString: filterString,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n isUseOrder: isUseOrder,\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onChangeStrategy = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n \r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n\r\n clearFilterString = () => {\r\n if (this.props.status === 'clear_filter_string') {\r\n this.setState({ filterString: '' });\r\n } else {\r\n this.props.dispatch({ type: \"action_clear_filterString\" });\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, filterString, stockGroups } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['vernacular title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['vernacular title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['vernacular title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['vernacular description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['update scan']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyStrategy}>{languageMessages['my.strategy']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n onOk={this.handleSaveStrategy}\r\n confirmLoading={this.state.saveFormulaLoadding}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategy} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <LuisPage {...this.props} filterString={filterString} isFilterScan={this.state.isFilterScan} LuisAnalysis={this.handleLuisAnalysis.bind(this)}/>\r\n\r\n <div id=\"textareaAnchor\" className='common-title'>\r\n <Divider type=\"vertical\" /><span>{languageMessages['formula.editing']}</span>\r\n <Button size='small' onClick={this.onSaveStrategy} disabled={this.state.filterString === ''} style={{ marginLeft: '20px' }}>{languageMessages['save.strategy']}</Button>\r\n <Button size='small' onClick={this.clearFilterString} style={{ marginLeft: '20px' }}>{languageMessages['clear']}</Button>\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n placeholder={languageMessages['use.formula.generated.or.vernacular.stock.selection']}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle}/>\r\n\r\n <StockOrderPage filterString={filterString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n \r\n <div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>\r\n\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.startStockPicker} loading={this.state.scanRequestLoadding} disabled={this.state.scanRequestLoadding || this.state.filterString === '' || this.state.isLuisAnalysis}>\r\n {this.state.scanRequestLoadding ? languageMessages['stock.picking'] : languageMessages['real.stock.picking']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </Layout>\r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='cont-content'>\r\n <StockResultPage isStockGroupDone={this.state.isStockGroupDone} stockGroupLoadding={this.state.stockGroupLoadding} stockPoolKey={stockPoolKey} scanAlert={this.state.scanAlert} customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>)}\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.vernacular;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(UpdateStrategyPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, Table, Button, PageHeader, Modal, Form, Input, message, Spin } from 'antd';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass StrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n initLoadding: true,\r\n selectedRowKeys: [],\r\n dataSource: [],\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n strategyName: '',\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n action: '',\r\n\r\n saveFormulaLoadding: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n\r\n emitter.addListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n\r\n emitter.addListener('callRemoveStrategyResult', this.callRemoveStrategyResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n\r\n emitter.removeListener('callSaveFilterRequestResult', this.callSaveFilterRequestResult);\r\n\r\n emitter.removeListener('callRemoveStrategyResult', this.callRemoveStrategyResult);\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, saveFormulaLoadding: false });\r\n }\r\n\r\n callRemoveStrategyResult = () => {\r\n let { selectedRowKeys, dataSource } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n dataSource = dataSource.filter(function (v) { return selectedRowKeys.indexOf(v.key) === -1 });\r\n\r\n var customStrategyCache = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var tmpCustomStrategyCache = customStrategyCache.filter(function (v) { return selectedRowKeys.indexOf(v.id) !== -1 });\r\n\r\n customStrategyCache = customStrategyCache.filter(function (v) { return selectedRowKeys.indexOf(v.id) === -1 });\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategyCache));\r\n\r\n if (tmpCustomStrategyCache.length > 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n for (var ii in tmpCustomStrategyCache) {\r\n if (filtersCache.hasOwnProperty(tmpCustomStrategyCache[ii].filterId)) {\r\n delete (filtersCache[tmpCustomStrategyCache[ii].filterId]);\r\n }\r\n }\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n }\r\n\r\n message.success(languageMessages['remove.strategy.success']);\r\n }\r\n this.setState({\r\n spinLoadding: false,\r\n selectedRowKeys: [],\r\n dataSource: dataSource,\r\n strategyName: '',\r\n\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n\r\n callSaveFilterRequestResult = (filterResult, filter, customStrategy) => {\r\n if (filterResult.Status === 0) {\r\n if (customStrategy === null) {\r\n message.error(languageMessages['save.strategy.failed']);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n return;\r\n }\r\n if (filter.Category === 'save' || filter.Category === 'save_done') {\r\n var { dataSource, selectedRowKeys } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n var customStrategyCache = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n\r\n var index = dataSource.length;\r\n index++;\r\n dataSource.push({\r\n key: customStrategy.id,\r\n sequence: index++,\r\n userId: customStrategy.userId,\r\n type: customStrategy.type,\r\n conceptId: customStrategy.conceptId,\r\n groupType: customStrategy.groupType,\r\n filterId: customStrategy.filterId,\r\n filterName: customStrategy.filterName,\r\n filterString: customStrategy.filterString,\r\n symbolGroupId: customStrategy.symbolGroupId,\r\n updated: customStrategy.updated\r\n });\r\n\r\n customStrategyCache.push(customStrategy);\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategyCache));\r\n\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n selectedRowKeys: [],\r\n dataSource: dataSource,\r\n strategyName: '',\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n } else {\r\n message.error(languageMessages['copy.strategy.failed']);\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n } else {\r\n message.error(filterResult.Description);\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n }\r\n\r\n init = () => {\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ initLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n \r\n }\r\n */\r\n\r\n var dataSource = [];\r\n var CustomStrategy = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n if (CustomStrategy.length > 0) {\r\n var index = 1;\r\n for (var kk in CustomStrategy) {\r\n dataSource.push({\r\n key: CustomStrategy[kk].id,\r\n sequence: index,\r\n userId: CustomStrategy[kk].userId,\r\n type: CustomStrategy[kk].type,\r\n conceptId: CustomStrategy[kk].conceptId,\r\n groupType: CustomStrategy[kk].groupType,\r\n filterId: CustomStrategy[kk].filterId,\r\n filterName: CustomStrategy[kk].filterName,\r\n filterString: CustomStrategy[kk].filterString,\r\n symbolGroupId: CustomStrategy[kk].symbolGroupId,\r\n updated: CustomStrategy[kk].updated\r\n });\r\n index++;\r\n }\r\n }\r\n this.setState({ dataSource, initLoadding: false });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, customStrategy } = props;\r\n var { dataSource, strategyName, selectedRowKeys, action } = this.state;\r\n\r\n var items = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n switch (status) {\r\n case 'strategy_success':\r\n \r\n break;\r\n case 'strategy_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'rename_strategy_success':\r\n if (selectedRowKeys.length > 0) {\r\n if (action === 'rename') {\r\n if (strategyName !== '') {\r\n const index = dataSource.findIndex(item => item.key === selectedRowKeys[0]);\r\n dataSource[index].filterName = strategyName;\r\n\r\n const ii = items.findIndex(item => item.id === selectedRowKeys[0]);\r\n if (ii > -1) {\r\n items[ii].filterName = strategyName;\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(items));\r\n }\r\n }\r\n\r\n this.setState({\r\n saveFormulaLoadding: false,\r\n selectedRowKeys: [],\r\n dataSource: dataSource,\r\n strategyName: '',\r\n\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n }\r\n break;\r\n case 'rename_strategy_fail':\r\n var error = languageMessages['rename.strategy.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({\r\n saveFormulaLoadding: false\r\n });\r\n break;\r\n case 'copy_strategy_success':\r\n if (selectedRowKeys.length > 0) {\r\n var index = dataSource.length;\r\n index++;\r\n dataSource.push({\r\n key: customStrategy.id,\r\n sequence: index++,\r\n userId: customStrategy.userId,\r\n type: customStrategy.type,\r\n conceptId: customStrategy.conceptId,\r\n groupType: customStrategy.groupType,\r\n filterId: customStrategy.filterId,\r\n filterName: customStrategy.filterName,\r\n filterString: customStrategy.filterString,\r\n symbolGroupId: customStrategy.symbolGroupId,\r\n updated: customStrategy.updated\r\n });\r\n \r\n items.push(customStrategy);\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(items));\r\n\r\n this.setState({\r\n selectedRowKeys: [],\r\n dataSource: dataSource,\r\n strategyName: '',\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n }\r\n break;\r\n case 'copy_strategy_fail':\r\n var error = languageMessages['copy.strategy.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['copy.strategy.failed'];\r\n break;\r\n case 3:\r\n error = languageMessages['copy.strategy.account.not.exist'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.copy.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['copy.strategy.timeout'];\r\n break;\r\n case 7:\r\n error = languageMessages['copy.strategy.error'];\r\n break;\r\n case 8:\r\n error = languageMessages['connection.strategy.server.failed'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n break;\r\n case 'remove_success':\r\n if (selectedRowKeys.length > 0) {\r\n dataSource = dataSource.filter(function (v) { return selectedRowKeys.indexOf(v.key) === -1 });\r\n\r\n var tmpItems = items.filter(function (v) { return selectedRowKeys.indexOf(v.id) !== -1 });\r\n\r\n items = items.filter(function (v) { return selectedRowKeys.indexOf(v.id) === -1 });\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(items));\r\n \r\n if (tmpItems.length > 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n for (var ii in tmpItems) {\r\n if (filtersCache.hasOwnProperty(tmpItems[ii].filterId)) {\r\n delete (filtersCache[tmpItems[ii].filterId]);\r\n }\r\n }\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n }\r\n \r\n message.success(languageMessages['remove.strategy.success']);\r\n }\r\n this.setState({\r\n spinLoadding: false,\r\n selectedRowKeys: [],\r\n dataSource: dataSource,\r\n strategyName: '',\r\n\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n break;\r\n case 'remove_fail':\r\n var error = languageMessages['remove.strategy.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case -1:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onRename = e => {\r\n e.preventDefault();\r\n var { selectedRowKeys, dataSource } = this.state;\r\n\r\n if (selectedRowKeys.length === 1) {\r\n var tmpData = dataSource.filter(function (e) { return e.key === selectedRowKeys[0]; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n modalVisible: true,\r\n modalTitle: languageMessages['rename'],\r\n strategyName: tmpData[0].filterName,\r\n action: 'rename',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n }\r\n }\r\n }\r\n\r\n onCopy = e => {\r\n e.preventDefault();\r\n var { selectedRowKeys, dataSource } = this.state;\r\n\r\n if (selectedRowKeys.length === 1) {\r\n var tmpData = dataSource.filter(function (e) { return e.key === selectedRowKeys[0]; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n modalVisible: true,\r\n modalTitle: languageMessages['copy'],\r\n strategyName: tmpData[0].filterName + languageMessages['_copy'],\r\n action: 'copy',\r\n \r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n }\r\n }\r\n }\r\n\r\n onRemove = e => {\r\n e.preventDefault();\r\n var { selectedRowKeys, dataSource } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n var data = dataSource.filter(function (v) { return selectedRowKeys.indexOf(v.key) !== -1 && v.filterId !== 0 });\r\n var filterId = '';\r\n if (data.length > 0) {\r\n for (var kk in data) {\r\n if (filterId !== '') filterId += ',';\r\n filterId += data[kk].filterId;\r\n }\r\n }\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['remove.this.strategy'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n\r\n //_this.props.dispatch({ type: \"action_remove_strategy\", payload: { UserId: user.username, strategyId: selectedRowKeys.join(','), filterId: filterId } });\r\n\r\n _this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendRemoveCustomStrategy', userId: user.username,\r\n msg: {\r\n s: selectedRowKeys.join(',')\r\n }\r\n }\r\n });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n handleUpdateStrategy = e => {\r\n e.preventDefault();\r\n var { selectedRowKeys, dataSource, strategyName, action } = this.state;\r\n\r\n var items = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n var checkData = items.filter(function (e) { return e.filterName == strategyName; });\r\n if (checkData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['strategy.name.already.exists'],\r\n });\r\n } else {\r\n var tmpData = dataSource.filter(function (e) { return e.key === selectedRowKeys[0]; });\r\n if (tmpData.length > 0) {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n switch (action) {\r\n case 'rename':\r\n this.setState({ saveFormulaLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_rename_strategy\",\r\n payload: {\r\n Id: tmpData[0].key,\r\n UserId: tmpData[0].userId,\r\n Type: tmpData[0].type,\r\n ConceptId: tmpData[0].conceptId,\r\n FilterId: tmpData[0].filterId,\r\n FilterName: strategyName,\r\n FilterString: tmpData[0].filterString,\r\n GroupType: tmpData[0].groupType,\r\n SymbolGroupId: tmpData[0].symbolGroupId\r\n }\r\n });\r\n });\r\n \r\n break;\r\n case 'copy':\r\n this.setState({ saveFormulaLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: user.username,\r\n msg: {\r\n Category: 'save',\r\n Action: 'new',\r\n UserId: user.username,\r\n Type: tmpData[0].type,\r\n CustomId: 0,\r\n ConceptId: tmpData[0].conceptId,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n GroupType: tmpData[0].groupType,\r\n FilterString: tmpData[0].filterString,\r\n SymbolGroupId: tmpData[0].symbolGroupId\r\n }\r\n }\r\n });\r\n });\r\n \r\n\r\n /**\r\n this.props.dispatch({\r\n type: \"action_copy_strategy\",\r\n payload: {\r\n customId: 0,\r\n UserId: user.username,\r\n Type: tmpData[0].type,\r\n ConceptId: tmpData[0].conceptId,\r\n FilterId: 0,\r\n FilterName: strategyName,\r\n FilterString: tmpData[0].filterString,\r\n GroupType: tmpData[0].groupType,\r\n SymbolGroupId: tmpData[0].symbolGroupId\r\n }\r\n });\r\n */\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleCancelStrategy = e => {\r\n e.preventDefault();\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n action: '',\r\n });\r\n };\r\n\r\n onChangeStrategy = e => {\r\n e.preventDefault();\r\n\r\n var strategyName = e.target.value;\r\n if (strategyName !== '') {\r\n strategyName = strategyName.slice(0, 20);\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(strategyName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['strategy.name.format'];\r\n }\r\n\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n strategyName: strategyName\r\n });\r\n }\r\n }\r\n\r\n newConceptStrategy = () => {\r\n emitter.emit('callJump', 'concept');\r\n history.push(\"/concept\");\r\n };\r\n\r\n newCustomStrategy = () => {\r\n sessionStorage.removeItem(\"VernacularStrategyCache\");\r\n emitter.emit('callJump', 'vernacular');\r\n history.push(\"/vernacular\");\r\n };\r\n\r\n onBacktestItems = () => {\r\n message.info(languageMessages['function.not.open']);\r\n }\r\n\r\n selectRow = (record) => {\r\n var StrategyCache = {\r\n conceptId: record.conceptId,\r\n customId: record.key,\r\n stockPoolKey: record.groupType,\r\n stockGroups: record.symbolGroupId,\r\n filterId: record.filterId,\r\n filterName: record.filterName,\r\n filterString: record.filterString\r\n };\r\n\r\n if (record.type === 0) {\r\n sessionStorage.setItem(\"ConceptStrategyCache\", JSON.stringify(StrategyCache));\r\n //emitter.emit('callJump', 'concept');\r\n history.push(\"/editStrategy\");\r\n } else {\r\n sessionStorage.setItem(\"VernacularStrategyCache\", JSON.stringify(StrategyCache));\r\n //emitter.emit('callJump', 'vernacular');\r\n history.push(\"/usp\");\r\n }\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n render() {\r\n var { dataSource, selectedRowKeys } = this.state;\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n //onClick: this.onSelectChange,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'filterName',\r\n sorter: (a, b) => a.filterName < b.filterName ? -1 : a.filterName > b.filterName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['symbol.type'],\r\n dataIndex: 'type',\r\n sorter: (a, b) => a.type - b.type,\r\n sortDirections: ['descend', 'ascend'],\r\n render: type => (\r\n <span>\r\n {type === 0 ? languageMessages['intl.menu.strategyStockPicking'] : languageMessages['vernacular.stock.picking']}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['backtest.status'],\r\n dataIndex: 'backtestStatus',\r\n sorter: (a, b) => a.backtestStatus - b.backtestStatus,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['last.updated'],\r\n dataIndex: 'updated',\r\n sorter: (a, b) => a.updated < b.updated ? -1 : a.updated > b.updated ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['backtest.count'],\r\n dataIndex: 'backtestCount',\r\n sorter: (a, b) => a.backtestCount - b.backtestCount,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['control'],\r\n dataIndex: '',\r\n render: (text, record) => <a onClick={() => this.onBacktestItems(record.key)}>{languageMessages['backtest.items']}</a>,\r\n },\r\n ];\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['my.strategy']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.newCustomStrategy}>{languageMessages['new.vernacular.stock.picker']}</Button>\r\n ]}\r\n />\r\n </div>\r\n <div className='table-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRename} disabled={selectedRowKeys.length === 1 ? false : true}>{languageMessages['rename']}</Button>\r\n <Button onClick={this.onCopy} disabled={selectedRowKeys.length === 1 ? false : true}>{languageMessages['copy']}</Button>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n onOk={this.handleUpdateStrategy}\r\n confirmLoading={this.state.saveFormulaLoadding}\r\n onCancel={this.handleCancelStrategy}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['strategy.name.placeholder']} id={this.state.validateStatus} value={this.state.strategyName} onChange={this.onChangeStrategy} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Table rowSelection={rowSelection}\r\n bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n loading={this.state.initLoadding}\r\n onRow={(record) => ({\r\n onClick: () => {\r\n //this.selectRow(record);\r\n },\r\n })}\r\n />\r\n </div>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n \r\nfunction mapStateToProps(state) {\r\n return state.strategy;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(StrategyPage);\r\n\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Modal, Button, Menu, PageHeader, Table, Input, Icon, AutoComplete, Form, Divider, Popover, Spin, message } from 'antd';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content, Sider } = Layout;\r\nconst { Option } = AutoComplete;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass CustomStockPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.customStockGroupData = [];\r\n\r\n this.user = {};\r\n this.state = {\r\n selectedRowKeys: [],\r\n \r\n dataSource: [],\r\n\r\n keywords: '',\r\n symbolItems: [],\r\n customStockGroup: [],\r\n\r\n currentSelectKey: 0,\r\n groupName: '',\r\n symbolList: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n stockName: '',\r\n action: '',\r\n\r\n spinLoadding: true,\r\n saveSymbolGroupLoadding: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n\r\n emitter.addListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n\r\n emitter.removeListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, saveSymbolGroupLoadding: false });\r\n }\r\n\r\n callCustomSymbolGroups = (symbolGroup) => {\r\n if (symbolGroup.Status === 0) {\r\n var customStockGroupsCache = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n\r\n if (symbolGroup.Action === 'delete') {\r\n customStockGroupsCache = customStockGroupsCache.filter(function (e) { return e.groupId !== symbolGroup.gi });\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n this.setCustomGroup(customStockGroupsCache, symbolGroup.sgs, 0);\r\n\r\n message.success(languageMessages['remove.stock.option.success']);\r\n } else {\r\n const index = customStockGroupsCache.findIndex(item => item.groupId === symbolGroup.gi);\r\n if (index > -1) {\r\n customStockGroupsCache[index].groupName = symbolGroup.gn;\r\n customStockGroupsCache[index].symbolList = symbolGroup.sg;\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n var currentSelectKey = symbolGroup.gi;\r\n this.setCustomGroup(customStockGroupsCache, symbolGroup.sgs, currentSelectKey);\r\n }\r\n } else {\r\n message.error(symbolGroup.Description);\r\n }\r\n\r\n this.setState({ modalVisible: false, spinLoadding: false, saveSymbolGroupLoadding: false });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n \r\n }\r\n */\r\n\r\n /**\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n this.props.dispatch({ type: \"action_get_custom_stock_tick\", payload: { UserId: this.user.username, SymbolList: customStockGroups[0].symbolList } });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n */\r\n\r\n this.props.dispatch({ type: \"action_get_custom_stock\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n setCustomGroup(customStock, symbols, currentSelectKey) {\r\n var { groupName, symbolList } = this.state\r\n \r\n for (let key in customStock) {\r\n if (currentSelectKey === 0) currentSelectKey = customStock[key].groupId;\r\n \r\n if (currentSelectKey === customStock[key].groupId) {\r\n groupName = customStock[key].groupName;\r\n symbolList = customStock[key].symbolList;\r\n }\r\n }\r\n\r\n var dataSource = [];\r\n if (symbols.length > 0) {\r\n var index = symbols.length;\r\n for (var kk in symbols) {\r\n dataSource.unshift({\r\n key: symbols[kk].symbol+','+index,\r\n sequence: index,\r\n stockCode: symbols[kk].symbol,\r\n stockName: symbols[kk].symbolName,\r\n price: parseFloat(symbols[kk].close).toFixed(2),\r\n quoteChange: parseFloat(symbols[kk].chg).toFixed(2)\r\n });\r\n index--;\r\n }\r\n }\r\n \r\n this.setState({\r\n customStockGroup: customStock,\r\n currentSelectKey: currentSelectKey,\r\n groupName: groupName,\r\n symbolList: symbolList,\r\n symbolItems: [],\r\n dataSource: dataSource,\r\n selectedRowKeys: [],\r\n spinLoadding: false,\r\n });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, fail, customGroup, symbolList, symbolItems, currGroupId } = props;\r\n var { currentSelectKey } = this.state;\r\n \r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n switch (status) {\r\n case 'customStock_success':\r\n if (customStockGroups.length > 0) {\r\n this.setCustomGroup(customStockGroups, symbolList, currGroupId);\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n break;\r\n case 'customStock_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'customStockTick_success':\r\n if (customStockGroups.length > 0) {\r\n this.setCustomGroup(customStockGroups, symbolList, currentSelectKey);\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n break;\r\n case 'customStockTick_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'add_customStock_success':\r\n customStockGroups.push(customGroup);\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n currentSelectKey = customGroup.groupId;\r\n this.setCustomGroup(customStockGroups, symbolList, currentSelectKey);\r\n\r\n this.setState({ modalVisible: false });\r\n break;\r\n case 'add_customStock_fail':\r\n var error = languageMessages['add.stock.option.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 3:\r\n if (fail === 'Custom symbol group quota reached.') {\r\n error = languageMessages['reach.the.stock.quota'];\r\n }\r\n break;\r\n case 4:\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'update_customStock_success':\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n currentSelectKey = customGroup.groupId;\r\n this.setCustomGroup(customStockGroups, symbolList, currentSelectKey);\r\n\r\n this.setState({ modalVisible: false });\r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['add.or.update.stock.option.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 3:\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'remove_customStock_success':\r\n if (currentSelectKey !== 0) {\r\n customStockGroups = customStockGroups.filter(function (e) { return e.groupId !== currentSelectKey });\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n \r\n this.setCustomGroup(customStockGroups, symbolList, 0);\r\n\r\n message.success(languageMessages['remove.stock.option.success']);\r\n }\r\n break;\r\n case 'remove_customStock_fail':\r\n var error = languageMessages['remove.stock.option.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 3:\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_symbol_items_fail':\r\n this.setState({\r\n symbolItems: [],\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleMenuClick = e => {\r\n var { customStockGroup } = this.state;\r\n var tmpSelectKey = parseInt(e.key);\r\n \r\n var tmpData = customStockGroup.filter(function (e) { return e.groupId == tmpSelectKey; });\r\n if (tmpData.length > 0) {\r\n var data = tmpData[0];\r\n \r\n if (data.symbolList !== '') {\r\n this.setState({\r\n currentSelectKey: tmpSelectKey,\r\n groupName: data.groupName,\r\n }, () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_custom_stock_tick\", payload: { UserId: this.user.username, SymbolList: data.symbolList } });\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n currentSelectKey: tmpSelectKey,\r\n groupName: data.groupName,\r\n symbolList: '',\r\n dataSource: []\r\n });\r\n }\r\n }\r\n };\r\n\r\n handlePopoverMenuClick = e => {\r\n if (e.key !== '') {\r\n var groupIds = e.key.split('_');\r\n if (groupIds.length > 1) {\r\n var gId = parseInt(groupIds[1]);\r\n switch (groupIds[0]) {\r\n case 'rename':\r\n this.renameStockGroup(gId);\r\n break;\r\n case 'copy':\r\n this.copyStockGroup(gId);\r\n break;\r\n case 'remove':\r\n this.removeStockGroup(gId);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n renameStockGroup(gId) {\r\n let { customStockGroup, groupName, symbolList } = this.state;\r\n var tmpCustomStockGroup = customStockGroup.filter(function (e) { return e.groupId === gId });\r\n if (tmpCustomStockGroup.length > 0) {\r\n groupName = tmpCustomStockGroup[0].groupName;\r\n symbolList = tmpCustomStockGroup[0].symbolList;\r\n }\r\n\r\n this.setState({\r\n modalVisible: true,\r\n modalTitle: languageMessages['rename'],\r\n stockName: groupName,\r\n validateStatus: '',\r\n validateMessage: '',\r\n currentSelectKey: gId,\r\n groupName,\r\n symbolList,\r\n action: 'update',\r\n });\r\n }\r\n\r\n copyStockGroup(gId) {\r\n let { customStockGroup, groupName, symbolList } = this.state;\r\n var tmpCustomStockGroup = customStockGroup.filter(function (e) { return e.groupId === gId });\r\n if (tmpCustomStockGroup.length > 0) {\r\n groupName = tmpCustomStockGroup[0].groupName;\r\n symbolList = tmpCustomStockGroup[0].symbolList;\r\n }\r\n\r\n this.setState({\r\n modalVisible: true,\r\n modalTitle: languageMessages['copy.stock.pool'],\r\n stockName: groupName + languageMessages['_copy'],\r\n validateStatus: '',\r\n validateMessage: '',\r\n currentSelectKey: gId,\r\n groupName,\r\n symbolList,\r\n action: 'copy',\r\n });\r\n }\r\n\r\n removeStockGroup(gId) {\r\n var { customStockGroup, groupName, symbolList } = this.state;\r\n \r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var tmpCustomStockGroup = customStockGroup.filter(function (e) { return e.groupId === gId });\r\n if (tmpCustomStockGroup.length > 0) {\r\n groupName = tmpCustomStockGroup[0].groupName;\r\n symbolList = tmpCustomStockGroup[0].symbolList;\r\n }\r\n\r\n var _this = this;\r\n Confirm({\r\n title: <div>{languageMessages['make.sure.delete.stock.pool']}“{groupName}â€?</div>,\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n\r\n _this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: _this.user.username,\r\n msg: {\r\n Action: 'delete',\r\n GroupId: gId,\r\n UserId: _this.user.username,\r\n GroupName: groupName,\r\n OldGroupName: groupName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n\r\n //_this.props.dispatch({ type: \"action_remove_custom_stock\", payload: { GroupId: currentSelectKey, UserId: _this.user.username, GroupName: groupName, SymbolList: symbolList } });\r\n\r\n },\r\n onCancel() {},\r\n });\r\n }\r\n }\r\n\r\n onCreateCustomStockGroup = e => {\r\n this.setState({\r\n modalVisible: true,\r\n modalTitle: languageMessages['new.stock.pool'],\r\n stockName: '',\r\n validateStatus: '',\r\n validateMessage: '',\r\n action: 'new',\r\n });\r\n };\r\n\r\n handleSaveGroupName = e => {\r\n var { currentSelectKey, groupName, stockName, symbolList, action } = this.state\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpData = customStockGroups.filter(function (e) { return e.groupName == stockName; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['stock.pool.name.already.exists'],\r\n });\r\n } else {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n /**\r\n switch (action) {\r\n case 'new':\r\n this.props.dispatch({ type: \"action_add_custom_stock\", payload: { UserId: this.user.username, GroupName: stockName, SymbolList: '' } });\r\n break;\r\n case 'rename':\r\n if (currentSelectKey !== '') {\r\n this.props.dispatch({ type: \"action_rename_custom_stock\", payload: { GroupId: currentSelectKey, UserId: this.user.username, GroupName: stockName, SymbolList: symbolList } });\r\n }\r\n break;\r\n case 'copy':\r\n if (currentSelectKey !== '') {\r\n this.props.dispatch({ type: \"action_add_custom_stock\", payload: { UserId: this.user.username, GroupName: stockName, SymbolList: symbolList } });\r\n }\r\n break;\r\n }\r\n */\r\n\r\n this.setState({ saveSymbolGroupLoadding: true }, () => {\r\n symbolList = action === 'new' ? '' : symbolList;\r\n action = action === 'copy' ? 'new' : action;\r\n var groupId = action === 'new' ? 0 : currentSelectKey;\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: action,\r\n GroupId: groupId,\r\n UserId: this.user.username,\r\n GroupName: stockName,\r\n OldGroupName: groupName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n handleCancelGroupName = e => {\r\n this.setState({\r\n modalVisible: false,\r\n modalTitle: '',\r\n stockName: '',\r\n validateStatus: '',\r\n validateMessage: '',\r\n action: '',\r\n });\r\n };\r\n\r\n onChangeGroupName = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var stockName = e.target.value;\r\n if (stockName !== '') {\r\n stockName = stockName.slice(0, 20);\r\n \r\n //var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n var pattern = /^[A-Za-z0-9_]+$/gi;\r\n if (!pattern.test(stockName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['stock.pool.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n stockName: stockName\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { currentSelectKey, groupName, symbolList, selectedRowKeys } = this.state;\r\n \r\n if (selectedRowKeys.length > 0) {\r\n var tmpSelectRowKeys = [];\r\n for (var k in selectedRowKeys) {\r\n var tmpValue = selectedRowKeys[k].split(',');\r\n if (tmpValue.length > 0) {\r\n tmpSelectRowKeys.push(tmpValue[0]);\r\n } else {\r\n tmpSelectRowKeys.push(selectedRowKeys[k]);\r\n }\r\n }\r\n \r\n var tmpSymbolList = symbolList.split(',');\r\n tmpSymbolList = tmpSymbolList.filter(function (i) { return tmpSelectRowKeys.indexOf(i) === -1; });\r\n symbolList = tmpSymbolList.join(',');\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.stock'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n\r\n _this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: _this.user.username,\r\n msg: {\r\n Action: 'update',\r\n GroupId: currentSelectKey,\r\n UserId: _this.user.username,\r\n GroupName: groupName,\r\n OldGroupName: groupName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n\r\n //_this.props.dispatch({ type: \"action_update_custom_stock\", payload: { GroupId: currentSelectKey, UserId: _this.user.username, GroupName: groupName, SymbolList: symbolList } });\r\n\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n onSelectSymbol = value => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var { currentSelectKey, groupName, symbolList, symbolItems } = this.state;\r\n\r\n if (currentSelectKey === 0) {\r\n message.warning(languageMessages['please.select.or.new.stock.pool']);\r\n return;\r\n }\r\n\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.symbol.indexOf(value) !== -1; });\r\n if (tmpDataCode.length > 0) {\r\n var selectSymbol = tmpDataCode[0];\r\n\r\n if (symbolList.indexOf(selectSymbol.symbol) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += selectSymbol.symbol;\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: 'update',\r\n GroupId: currentSelectKey,\r\n UserId: this.user.username,\r\n GroupName: groupName,\r\n OldGroupName: groupName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n\r\n //this.props.dispatch({ type: \"action_update_custom_stock\", payload: { GroupId: currentSelectKey, UserId: this.user.username, GroupName: groupName, SymbolList: symbolList } });\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleSearch = value => {\r\n /**\r\n var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase().indexOf(value.toLowerCase()) !== -1; });\r\n if (tmpDataCode.length < 20) {\r\n var tmpDataName = symbolItems.filter(function (e) { return e.stockName.toLowerCase().indexOf(value.toLowerCase()) !== -1; });\r\n if (tmpDataCode.length > 0) tmpDataCode = tmpDataCode.concat(tmpDataName);\r\n else tmpDataCode = tmpDataName.concat(tmpDataCode);\r\n }\r\n\r\n if (tmpDataCode.length > 0) {\r\n tmpDataCode = tmpDataCode.slice(0, 20);\r\n } else {\r\n tmpDataCode = [{ stockCode: '\"' + value + '\"' + languageMessages['no.matches.found'], stockName: '' }];\r\n }\r\n */\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n })\r\n };\r\n\r\n selectRow = (record) => {\r\n const selectedRowKeys = [...this.state.selectedRowKeys];\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n this.setState({ selectedRowKeys });\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderCustomStockItem(currentSelectKey) {\r\n let { customStockGroup } = this.state;\r\n\r\n this.customStockGroupData = [];\r\n\r\n for (var key in customStockGroup) {\r\n var rename = 'rename_' + customStockGroup[key].groupId;\r\n var copy = 'copy_' + customStockGroup[key].groupId;\r\n var remove = 'remove_' + customStockGroup[key].groupId;\r\n var content = (<Menu style={{ textAlign: 'center' }} selectedKeys={[]} inlineIndent={16} mode=\"inline\" onClick={this.handlePopoverMenuClick}>\r\n <Menu.Item key={rename}>\r\n <span>{languageMessages['rename']}</span>\r\n </Menu.Item>\r\n <Menu.Item key={copy}>\r\n <span>{languageMessages['copy']}</span>\r\n </Menu.Item>\r\n <Menu.Item key={remove}>\r\n <span>{languageMessages['remove']}</span>\r\n </Menu.Item>\r\n </Menu>);\r\n this.customStockGroupData.push(<Menu.Item key={customStockGroup[key].groupId}>\r\n <span><Icon type=\"file\" />{customStockGroup[key].groupName}</span>\r\n <span style={{ float: 'right' }}>\r\n <Popover placement=\"bottomLeft\" title='' content={content} trigger=\"click\">\r\n <Button style={{ padding: '0 0 0 8px', backgroundColor: 'transparent', border: 'none' }} size=\"small\" shape=\"round\" icon=\"ellipsis\" />\r\n </Popover>\r\n </span></Menu.Item>);\r\n }\r\n\r\n if (this.customStockGroupData.length > 0) {\r\n var gIds = currentSelectKey.toString();\r\n return <Menu inlineIndent={50} selectedKeys={[gIds || '0']} mode=\"inline\" onClick={this.handleMenuClick}>\r\n {this.customStockGroupData}\r\n </Menu>;\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(255, 255, 255, 0.75' }}>{languageMessages['no.stock.pool']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { dataSource, symbolItems, selectedRowKeys, currentSelectKey } = this.state;\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n var formItemLayout = {\r\n labelCol: {\r\n xs: { span: 24 },\r\n sm: { span: 4 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 24 },\r\n sm: { span: 20 },\r\n },\r\n };\r\n \r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'stockCode',\r\n sorter: (a, b) => a.stockCode < b.stockCode ? -1 : a.stockCode > b.stockCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'stockName',\r\n sorter: (a, b) => a.stockName < b.stockName ? -1 : a.stockName > b.stockName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: 'price',\r\n sorter: (a, b) => a.price - b.price,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n return <span>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: 'quoteChange',\r\n sorter: (a, b) => a.quoteChange - b.quoteChange,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n }\r\n ];\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['intl.menu.customStock']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onCreateCustomStockGroup}>{languageMessages['new.stock.pool']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleSaveGroupName}\r\n confirmLoading={this.state.saveSymbolGroupLoadding}\r\n onCancel={this.handleCancelGroupName}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['stock.pool.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['stock.pool.name.placeholder']} id={this.state.validateStatus} value={this.state.stockName} onChange={this.onChangeGroupName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='main-content'>\r\n <Sider width={300}>\r\n <PageHeader className='common-sider-header' title={languageMessages['optional.stock.pool']} />\r\n <Divider />\r\n <div className=\"common-sider-content\">\r\n {this.renderCustomStockItem(currentSelectKey)}\r\n </div>\r\n </Sider>\r\n <Layout className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n <AutoComplete\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n placeholder={languageMessages['add.stock.option']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <Table rowSelection={rowSelection}\r\n bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n onRow={(record) => ({\r\n onClick: () => {\r\n this.selectRow(record);\r\n },\r\n })} />\r\n </Layout>\r\n </Layout>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.customStock;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(CustomStockPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport history from '../../helpers/history';\r\nimport { Form, Input, Select, Button, Modal, DatePicker } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Option } = Select;\r\n\r\nconst messages = defineMessages({\r\n optionSymbol: {\r\n id: 'intl.optionSymbol',\r\n defaultMessage: 'æœŸæƒæ ‡çš„',\r\n },\r\n scanStartEndDate: {\r\n id: 'intl.scanStartEndDate',\r\n defaultMessage: '扫æèµ·æ¢æ—¥',\r\n },\r\n today: {\r\n id: 'intl.today',\r\n defaultMessage: '今天',\r\n },\r\n to: {\r\n id: 'intl.to',\r\n defaultMessage: '至',\r\n },\r\n direction: {\r\n id: 'intl.direction',\r\n defaultMessage: '涨跌设置',\r\n },\r\n strategyScan: {\r\n id: 'intl.strategyScan',\r\n defaultMessage: 'ç–略扫æ',\r\n },\r\n strategyScanning: {\r\n id: 'intl.strategyScanning',\r\n defaultMessage: 'ç–略扫æä¸',\r\n },\r\n});\r\n\r\nfunction hasErrors(fieldsError) {\r\n return Object.keys(fieldsError).some(field => fieldsError[field]);\r\n}\r\n\r\nconst dateFormat = 'YYYYMMDD';\r\n\r\nfunction CurrentDate() {\r\n var now = new Date();\r\n\r\n var year = now.getFullYear(); //å¹´\r\n var month = now.getMonth() + 1; //月\r\n var day = now.getDate(); //æ—¥\r\n\r\n var clock = year + \"\";\r\n\r\n if (month < 10)\r\n clock += \"0\";\r\n\r\n clock += month + \"\";\r\n\r\n if (day < 10)\r\n clock += \"0\";\r\n\r\n clock += day;\r\n\r\n return clock;\r\n}\r\n\r\nclass PriceInput extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n number: props.number,\r\n };\r\n }\r\n\r\n /**\r\n static getDerivedStateFromProps(nextProps) {\r\n // Should be a controlled component.\r\n if ('value' in nextProps) {\r\n return {\r\n ...(nextProps.value || {}),\r\n };\r\n }\r\n \r\n return null;\r\n }\r\n */\r\n\r\n componentWillReceiveProps(props) {\r\n this.setState({ number: props.number });\r\n }\r\n\r\n handleNumberChange = e => {\r\n //const number = parseInt(e.target.value || 0, 10);\r\n //const number = parseFloat(Number(e.target.value || 0).toFixed(2));\r\n //console.log('number', number);\r\n ////if (Number.isNaN(number)) {\r\n // return;\r\n //}\r\n /** \r\n const number = e.target.value;\r\n var re = /^\\d+(?=\\.{0,1}\\d+$|$)/;\r\n if (number !== \"\") {\r\n if (!re.test(number)) {\r\n return;\r\n }\r\n }\r\n */\r\n\r\n let direction = this.props.direction;\r\n let intLen = 12;\r\n let decimalLen = 2;\r\n if (direction === '0' || direction === '1') {\r\n decimalLen = 3;\r\n }\r\n\r\n var number = e.target.value;\r\n if (number.indexOf('.') === 0) {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n }\r\n number = number.replace(/[^\\d.]/g, \"\");\r\n number = number.replace(/\\.{2,3}/g, \".\");\r\n number = number.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n \r\n if (number.indexOf('.') < 0) {\r\n if (number.length > intLen) number = number.slice(0, intLen);\r\n\r\n if (number !== '') number = parseInt(number);\r\n } else {\r\n var tmpNumber = number.split('.');\r\n var tmpNum00 = tmpNumber[0];\r\n if (tmpNum00.length > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n\r\n if (tmpNum00 !== '') tmpNum00 = parseInt(tmpNum00);\r\n \r\n var tmpNum01 = tmpNumber[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n number = tmpNum00 + '.' + tmpNum01;\r\n }\r\n\r\n if (!('value' in this.props)) {\r\n this.setState({ number });\r\n }\r\n this.triggerChange({ number });\r\n };\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n let direction = this.props.direction;\r\n\r\n var number = e.target.value;\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n if (direction === '0' || direction === '1') {\r\n number = number + '.000';\r\n } else {\r\n number = number + '.00';\r\n }\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (direction === '0' || direction === '1') {\r\n if (len === 0) {\r\n number = number + '000';\r\n } else if (len === 1) {\r\n number = number + '00';\r\n } else if (len === 2) {\r\n number = number + '0';\r\n }\r\n } else {\r\n if (len === 0) {\r\n number = number + '00';\r\n } else if (len === 1) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n }\r\n if (!('value' in this.props)) {\r\n this.setState({ number });\r\n }\r\n this.triggerChange({ number });\r\n }\r\n\r\n triggerChange = changedValue => {\r\n const { onChange } = this.props;\r\n if (onChange) {\r\n onChange(changedValue);\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n <Input type=\"text\" size='small' value={this.state.number} style={{ width: '100px' }} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={this.props.placeholder} />\r\n );\r\n }\r\n}\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass OptionParams extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.underlyingList = [];\r\n\r\n this.state = {\r\n underlying: 'SH510300',\r\n price: '0',\r\n endDate: moment().add(30, 'days').format(dateFormat),\r\n\r\n direction: '0',\r\n predictedValue: '',\r\n\r\n endDateStatus: '',\r\n predictedValueStatus: '',\r\n\r\n placeholder: languageMessages['priceNotEmpty'],\r\n isShowPercent: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.form.validateFields();\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n if (props.underlyingList !== undefined && props.underlyingList !== null) {\r\n if (props.underlyingList.length > 0) {\r\n //var underlying = '';\r\n //var price = '0';\r\n // var endDate = CurrentDate();\r\n this.underlyingList = [];\r\n for (var kk in props.underlyingList) {\r\n //if (underlying === '') {\r\n //underlying = props.underlyingList[kk];\r\n //price = props.underlyingList[kk].price;\r\n //endDate = props.underlyingList[kk].endDate;\r\n //}\r\n this.underlyingList.push(<Option key={props.underlyingList[kk]}>{props.underlyingList[kk]}</Option>);\r\n }\r\n\r\n if (props.price !== '0') {\r\n //price = props.price;\r\n }\r\n\r\n this.setState({\r\n //underlying: underlying,\r\n //price: price,\r\n //endDate: endDate\r\n });\r\n }\r\n }\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n let user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (this.props.lastTimes <= 0) {\r\n var content = <span>{languageMessages['option.scans.have.run.out']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.props.form.validateFields((err, values) => {\r\n if (!err) {\r\n let { endDate, predictedValue } = this.state;\r\n if (endDate === '') {\r\n let endDateStatus = 'error';\r\n this.setState({ endDateStatus });\r\n return;\r\n }\r\n \r\n if (predictedValue === '') {\r\n let predictedValueStatus = 'error';\r\n this.setState({ predictedValueStatus });\r\n return;\r\n }\r\n\r\n //Bullish,Bearish 0,1,2,3\r\n //Percent,Price\r\n let predictedValueUnit = 'Price';\r\n let direction = 'Bullish';\r\n switch (values.Direction) {\r\n case '0':\r\n direction = 'Bullish';\r\n predictedValueUnit = 'Price';\r\n break;\r\n case '1':\r\n direction = 'Bearish';\r\n predictedValueUnit = 'Price';\r\n break;\r\n case '2':\r\n direction = 'Bullish';\r\n predictedValueUnit = 'Percent';\r\n break;\r\n case '3':\r\n direction = 'Bearish';\r\n predictedValueUnit = 'Percent';\r\n break;\r\n default:\r\n direction = 'Bullish';\r\n predictedValueUnit = 'Price';\r\n break;\r\n }\r\n \r\n var scanRequest = {\r\n UserName: user.username,\r\n Underlying: values.Underlying,\r\n EndDate: endDate,\r\n Direction: direction,\r\n PredictedValue: predictedValue,\r\n PredictedValueUnit: predictedValueUnit\r\n };\r\n this.props.dispatch({ type: \"action_option_scan\", payload: scanRequest });\r\n }\r\n });\r\n }\r\n };\r\n\r\n handleUnderlyingChange = value => {\r\n this.setState({ underlying: value });\r\n }\r\n\r\n handleEndDate = (dates, dateStrings) => {\r\n var endDateStatus = '';\r\n if (dateStrings === '') endDateStatus = 'error';\r\n this.setState({ endDate: dateStrings, endDateStatus });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n return current && (current < moment().startOf('day'));\r\n }\r\n\r\n handleDirectionChange = value => {\r\n let predictedValue = '';\r\n let isShowPercent = false;\r\n let placeholder = languageMessages['priceNotEmpty'];\r\n if (value === '2' || value === '3') {\r\n predictedValue = '5.00';\r\n isShowPercent = true;\r\n placeholder = languageMessages['PleaseEnterQuoteChange'];\r\n }\r\n \r\n this.setState({ direction: value, predictedValue, isShowPercent, placeholder });\r\n }\r\n \r\n handlePredictedValueChange = e => {\r\n var predictedValue = e.number;\r\n var predictedValueStatus = '';\r\n if (predictedValue === '') predictedValueStatus = 'error';\r\n this.setState({ predictedValue, predictedValueStatus });\r\n }\r\n\r\n render() {\r\n const { getFieldDecorator, getFieldsError } = this.props.form;\r\n\r\n return (<div>\r\n <Form layout=\"inline\">\r\n <Form.Item label={(<FormattedMessage {...messages.optionSymbol} />)}>\r\n <div>\r\n {getFieldDecorator('Underlying', {\r\n initialValue: this.state.underlying,\r\n })(\r\n <Select size='small' style={{ width: '120px' }}\r\n placeholder={languageMessages['please.select.option.target']}\r\n onChange={this.handleUnderlyingChange}>\r\n {this.underlyingList.length > 0 && this.underlyingList}\r\n </Select>,\r\n )}\r\n </div>\r\n <div style={{ position: 'relative', top: '-15px', display: 'none' }}>{languageMessages['latest.price']}:<span style={{ color: 'red' }}>{this.state.price}</span></div>\r\n </Form.Item>\r\n <Form.Item label={(<FormattedMessage {...messages.scanStartEndDate} />)} validateStatus={this.state.endDateStatus}>\r\n <span><FormattedMessage {...messages.today} /></span>\r\n <span style={{ padding: '0 10px' }}><FormattedMessage {...messages.to} /></span>\r\n {\r\n getFieldDecorator('EndDate', {\r\n initialValue: moment(this.state.endDate, dateFormat),\r\n rules: [{ type: 'object', message: languageMessages['please.enter.scan.start.and.end.date'] }],\r\n })(<DatePicker size='small' style={{ width: '100px' }}\r\n allowClear={false}\r\n format={dateFormat}\r\n disabledDate={this.todayDisabledDate}\r\n onChange={this.handleEndDate} />)\r\n }\r\n </Form.Item>\r\n <Form.Item label={(<FormattedMessage {...messages.direction} />)}>\r\n {getFieldDecorator('Direction', {\r\n initialValue: '0',\r\n rules: [{ message: languageMessages['please.select.ups.and.downs.setting'] }],\r\n })(\r\n <Select size='small' style={{ width: '80px' }} onChange={this.handleDirectionChange}>\r\n <Option value=\"0\">{languageMessages['riseTo']}</Option>\r\n <Option value=\"1\">{languageMessages['fallTo']}</Option>\r\n <Option value=\"2\">{languageMessages['rise']}</Option>\r\n <Option value=\"3\">{languageMessages['fall']}</Option>\r\n </Select>,\r\n )}\r\n </Form.Item>\r\n\r\n <Form.Item validateStatus={this.state.predictedValueStatus}>\r\n {getFieldDecorator('PredictedValue', {\r\n })(\r\n <PriceInput direction={this.state.direction} number={this.state.predictedValue} onChange={this.handlePredictedValueChange} placeholder={this.state.placeholder} />\r\n )}\r\n <span style={{ padding: '0 5px', display: this.state.isShowPercent ? '' : 'none' }}>%</span>\r\n </Form.Item>\r\n </Form>\r\n <div style={{ padding: '0', height: '40px' }}>\r\n <Button size='small' loading={this.props.strategyScan} onClick={this.handleSubmit} disabled={this.underlyingList.length > 0 ? (this.props.strategyScan ? this.props.strategyScan : (hasErrors(getFieldsError()))):true}>\r\n {this.props.strategyScan ? (<FormattedMessage {...messages.strategyScanning} />) : (<FormattedMessage {...messages.strategyScan} />)}\r\n </Button>\r\n <TooltipPage lastTimes={this.props.lastTimes} filterError={this.props.optionError} />\r\n </div>\r\n </div>);\r\n }\r\n}\r\n\r\nconst OptionParamsForm = Form.create({ name: 'Option_Params' })(OptionParams);\r\nexport { OptionParamsForm as default }","var languageMessages = window.appLocale.messages;\r\n\r\nvar optionData = {\r\n tooltip: {\r\n trigger: 'axis',\r\n extraCssText: 'background:#fff;border:1px solid #aaa;color:#555'\r\n },\r\n legend: {\r\n data: [languageMessages['profit.and.loss']]\r\n },\r\n grid: {\r\n left: '2%',\r\n right: '8%',\r\n bottom: '2%',\r\n containLabel: true\r\n },\r\n xAxis: {\r\n type: 'category',\r\n name: languageMessages['price'],\r\n boundaryGap: false,\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: languageMessages['profitloss'],\r\n },\r\n series: [\r\n {\r\n name: languageMessages['profit.and.loss'],\r\n type: 'line',\r\n showSymbol: false,\r\n smooth: true,\r\n itemStyle: {\r\n normal: {\r\n color: '#0099CC',\r\n lineStyle: {\r\n color: '#0099CC'\r\n }\r\n }\r\n },\r\n data: [],\r\n markPoint: {\r\n symbol: 'circle',\r\n symbolSize: [8, 8],\r\n itemStyle: {\r\n color: '#336699',\r\n borderColor: '#336699'\r\n },\r\n label: {\r\n color:'#333333',\r\n position: [10, 10],\r\n //align: 'center',\r\n /**\r\n formatter: function (param) {\r\n return param.value.split(\"\").join(\"\\n\");\r\n } \r\n */\r\n },\r\n data: []\r\n }\r\n },\r\n /**\r\n {\r\n name: languageMessages['breakEvenPoint'],\r\n type: 'line',\r\n itemStyle: {\r\n normal: {\r\n color: '#339999',\r\n lineStyle: {\r\n color: '#339999'\r\n }\r\n }\r\n },\r\n data: []\r\n }\r\n */\r\n ]\r\n};\r\n\r\nfunction deepCopy(obj, cache = []) {\r\n function find(list, f) {\r\n return list.filter(f)[0]\r\n }\r\n\r\n // just return if obj is immutable value\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n // if obj is hit, it is in circular structure\r\n const hit = find(cache, c => c.original === obj)\r\n if (hit) {\r\n return hit.copy\r\n }\r\n\r\n const copy = Array.isArray(obj) ? [] : {}\r\n // put the copy into cache at first\r\n // because we want to refer it in recursive deepCopy\r\n cache.push({\r\n original: obj,\r\n copy\r\n })\r\n\r\n Object.keys(obj).forEach(key => {\r\n copy[key] = deepCopy(obj[key], cache)\r\n })\r\n\r\n return copy\r\n}\r\n\r\nfunction getChartOption(chartName, data) {\r\n var option = optionData;\r\n \r\n var x = [];\r\n var y = [];\r\n var p = [];\r\n\r\n let ins = 0;\r\n for (var key in data) {\r\n let xx = data[key].x.toFixed(3);\r\n\r\n let yy = data[key].y;\r\n if (yy === 0) {\r\n let tmpKey = ins > 0 ? ins - 1 : 0;\r\n if (xx === x[tmpKey]) {\r\n y[tmpKey] = 0;\r\n\r\n if (ins > 0) ins--;\r\n } else {\r\n x.push(xx);\r\n y.push(yy);\r\n }\r\n \r\n p.push({ value: languageMessages['breakEvenPoint'], xAxis: ins, yAxis: 0 });\r\n } else {\r\n x.push(xx);\r\n y.push(yy);\r\n }\r\n\r\n ins++;\r\n }\r\n\r\n option.xAxis.data = x;\r\n option.series[0].data = y;\r\n option.series[0].markPoint.data = p;\r\n\r\n option.tooltip.formatter = function (params) {\r\n let result = languageMessages[chartName] === undefined ? chartName : languageMessages[chartName];\r\n if (params[0] !== undefined) {\r\n result += '<br/>';\r\n let yValue = params[0].value === null ? 0 : params[0].value === undefined ? 0 : params[0].value;\r\n if (yValue === 0) {\r\n result += languageMessages['breakEvenPoint'] + ': ' + params[0].name + '<br>';\r\n } else {\r\n result += languageMessages['price'] + ': ' + params[0].name + '<br>';\r\n }\r\n \r\n let className = yValue > 0 ? 'color:red' : 'color:green';\r\n result += params[0].seriesName + ': <span style=' + className + '>' + yValue.toFixed(3) + '</span>';\r\n }\r\n return result;\r\n }\r\n\r\n return deepCopy(option)\r\n}\r\n\r\nexport { getChartOption }","import React, { Component } from 'react';\r\nimport { Table, Row, Col } from 'antd';\r\n\r\nimport echarts from 'echarts/lib/echarts';\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { getChartOption } from '../../pannels/option/ChartsParams';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nvar optionsChart = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass OptionResultPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n \r\n chartHeight: '0px',\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { strategies } = props;\r\n var { rowId } = this.state;\r\n\r\n var recordName = '';\r\n var dataSource = [];\r\n if (strategies.length > 0) {\r\n var index = 0;\r\n for (var kk in strategies) {\r\n if (rowId === -1) {\r\n rowId = kk;\r\n recordName = strategies[kk].name;\r\n }\r\n var sequence = index + 1;\r\n let breakEventPoints = strategies[kk].breakEvenPoint;\r\n\r\n dataSource.push({\r\n key: index,\r\n sequence: sequence,\r\n name: strategies[kk].name,\r\n description: strategies[kk].description,\r\n margin: strategies[kk].margin,\r\n investment: strategies[kk].investment,\r\n breakEvenPoint: breakEventPoints,\r\n pnl: strategies[kk].pnl,\r\n yieldToMaturity: strategies[kk].yieldToMaturity,\r\n maxProfit: strategies[kk].maxProfit,\r\n maxRisk: strategies[kk].maxRisk\r\n });\r\n index++;\r\n }\r\n } else {\r\n rowId = -1;\r\n }\r\n \r\n this.setState({ dataSource, rowId, chartHeight: '450px' }, () => {\r\n if (strategies.hasOwnProperty(rowId)) {\r\n optionsChart = echarts.init(document.getElementById('options'));\r\n optionsChart.setOption(getChartOption(recordName, strategies[rowId].pnlPoints));\r\n\r\n optionsChart.resize();\r\n\r\n window.onresize = function () {\r\n optionsChart.resize();\r\n }\r\n\r\n //this.OnSelectShowChart(dataSource[rowId]);\r\n this.setRowClassName(dataSource[rowId]);\r\n } else {\r\n if (optionsChart !== null) {\r\n optionsChart.resize();\r\n optionsChart.clear();\r\n }\r\n }\r\n });\r\n }\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { strategies } = this.props;\r\n \r\n if (strategies.length > 0) {\r\n if (strategies.hasOwnProperty(record.key)) {\r\n this.setState({ chartHeight: '450px' }, () => {\r\n optionsChart = echarts.init(document.getElementById('options'));\r\n optionsChart.setOption(getChartOption(record.name, strategies[record.key].pnlPoints));\r\n\r\n optionsChart.resize();\r\n\r\n window.onresize = function () {\r\n optionsChart.resize();\r\n }\r\n });\r\n }\r\n }\r\n this.setState({ rowId: record.key });\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n render() {\r\n var { dataSource, chartHeight } = this.state;\r\n\r\n var columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50,\r\n }, {\r\n title: languageMessages['combination.name'],\r\n dataIndex: 'name',\r\n key: 'name',\r\n width: 120,\r\n sorter: (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n <a onClick={() => this.OnSelectShowChart(record.key)}>{languageMessages[text] !== undefined ? languageMessages[text] : text}</a>\r\n </span>\r\n ),\r\n }, {\r\n title: languageMessages['combination.details'],\r\n dataIndex: 'description',\r\n key: 'description',\r\n width: 150,\r\n sorter: (a, b) => a.description < b.description ? -1 : a.description > b.description ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n const description = text.split(',');\r\n return description.map((item, index) => {\r\n return (<div key={index}>{item}</div>);\r\n })\r\n }, \r\n }, {\r\n title: languageMessages['margin'],\r\n dataIndex: 'margin',\r\n key: 'margin',\r\n className: 'common-right',\r\n width: 80,\r\n align: 'right',\r\n sorter: (a, b) => a.margin.replace(/,/g, \"\") - b.margin.replace(/,/g, \"\"),\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['investment'],\r\n dataIndex: 'investment',\r\n key: 'investment',\r\n className: 'common-right',\r\n width: 130,\r\n align: 'right',\r\n //sorter: (a, b) => a.investment < b.investment ? -1 : a.investment > b.investment ? 1 : 0,\r\n //sorter: (a, b) => a.investment - b.investment,\r\n sorter: (a, b) => a.investment.replace(/,/g, \"\") - b.investment.replace(/,/g, \"\"),\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n let tmpInvestment = row['investment'].replace(/,/g, \"\");\r\n if (tmpInvestment > 0) {\r\n return <span>{text} ({languageMessages['cost']})</span>;\r\n } else {\r\n text = text.replace('-', '');\r\n return <span>{text} ({languageMessages['income']})</span>;\r\n }\r\n },\r\n }, {\r\n title: languageMessages['breakEvenPoint'],\r\n dataIndex: 'breakEvenPoint',\r\n key: 'breakEvenPoint',\r\n className: 'common-right',\r\n width: 90,\r\n align: 'right',\r\n sorter: (a, b) => a.breakEvenPoint[0] - b.breakEvenPoint[0],\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n return text.map((item, index) => {\r\n return index < 3 ? (<div key={index}>{item.toFixed(3)}</div>) : index === 3 ? (<div key={index}>...</div>) : '';\r\n })\r\n },\r\n }, {\r\n title: languageMessages['profit.and.loss'],\r\n dataIndex: 'pnl',\r\n key: 'pnl',\r\n className: 'common-right',\r\n width: 90,\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl < b.pnl ? -1 : a.pnl > b.pnl ? 1 : 0,\r\n sorter: (a, b) => a.pnl.replace(/,/g, \"\") - b.pnl.replace(/,/g, \"\"),\r\n //sorter: (a, b) => sort(a.pnl, b.pnl),\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['yieldToMaturity'],\r\n dataIndex: 'yieldToMaturity',\r\n key: 'yieldToMaturity',\r\n className: 'common-right',\r\n width: 100,\r\n align: 'right',\r\n //sorter: (a, b) => a.yieldToMaturity - b.yieldToMaturity,\r\n sorter: (a, b) => a.yieldToMaturity.replace(/,/g, \"\") - b.yieldToMaturity.replace(/,/g, \"\"),\r\n //sorter: (a, b) => sort(a.yieldToMaturity, b.yieldToMaturity),\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['maxProfit'],\r\n dataIndex: 'maxProfit',\r\n key: 'maxProfit',\r\n className: 'common-right',\r\n width: 90,\r\n align: 'right',\r\n //sorter: (a, b) => a.maxProfit < b.maxProfit ? -1 : a.maxProfit > b.maxProfit ? 1 : 0,\r\n sorter: (a, b) => a.maxProfit.replace(/,/g, \"\") - b.maxProfit.replace(/,/g, \"\"),\r\n //sorter: (a, b) => sort(a.maxProfit, b.maxProfit),\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n if (row['maxProfit'] === 'Infinity') {\r\n text = 'æ— é™';\r\n }\r\n return <span style={{ color: \"red\" }}>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['maxRisk'],\r\n dataIndex: 'maxRisk',\r\n key: 'maxRisk',\r\n className: 'common-right',\r\n width: 90,\r\n align: 'right',\r\n sorter: (a, b) => a.maxRisk.replace(/,/g, \"\") - b.maxRisk.replace(/,/g, \"\"),\r\n //sorter: (a, b) => sort(a.maxRisk, b.maxRisk),\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n if (row['maxRisk'] === '-Infinity') {\r\n text = '-æ— é™';\r\n }\r\n return <span style={{ color: \"green\" }}>{text}</span>;\r\n },\r\n }\r\n ]\r\n\r\n return (<div className='common-stock-result'>\r\n <Row gutter={5}>\r\n <Col span={14}>\r\n <div className='common-title'><FormattedMessage id=\"option.scan.result\" values={{ num: dataSource.length || 0 }} /></div>\r\n <Table bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n pagination={{ pageSize: 10 }}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n scroll={{ x: 1000 }} />\r\n </Col>\r\n <Col span={10}>\r\n <div className='common-title'>{languageMessages['combined.profit.and.loss.curve']}</div>\r\n <div id=\"options\" style={{ height: chartHeight }}></div>\r\n </Col>\r\n </Row>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { OptionResultPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Button, PageHeader, Divider, Spin, message } from 'antd';\r\n\r\nimport OptionParamsForm from '../../pannels/option/OptionParams';\r\nimport OptionResultPage from '../../pannels/option/OptionResultPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass OptionPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.user = {};\r\n this.state = {\r\n underlyingList: [],\r\n strategies: [],\r\n price: '0',\r\n\r\n lastTimes: 0,\r\n\r\n strategyScan: false,\r\n\r\n optionError: '',\r\n\r\n spinLoadding: true,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n \r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_option\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'vo':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n case 'o':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, underlyingList, scanResponse, permission, lastTimes } = props\r\n\r\n this.setState({\r\n strategies: [],\r\n strategyScan: false\r\n });\r\n\r\n switch (status) {\r\n case 'get_option_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n //this.setState({ spinLoadding: false });\r\n this.setState({ underlyingList, spinLoadding: false });\r\n break;\r\n case 'get_option_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'option_scan_commit':\r\n this.setState({\r\n strategyScan: true,\r\n });\r\n break;\r\n case 'option_scan_success':\r\n if (scanResponse !== undefined) {\r\n if (scanResponse.error === null) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n \r\n this.setState({\r\n lastTimes: lastTimes,\r\n strategies: scanResponse.strategies,\r\n price: scanResponse.stockPrice,\r\n optionError: '',\r\n });\r\n }\r\n }\r\n break;\r\n case 'option_scan_fail':\r\n var error = '';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['option.scan.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 3:\r\n error = languageMessages['option.scans.have.run.out'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.option.scan.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['no.option.data.scanned'];\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ optionError: error });\r\n break;\r\n }\r\n }\r\n\r\n onPerpleScan = () => {\r\n message.info(languageMessages['function.not.open']);\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['optionStrategyScan']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onPerpleScan}>{languageMessages['personal.position.scan']}</Button>\r\n ]} />\r\n </div>\r\n <Content style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['parameter.settings']}</div>\r\n <div style={{padding:'10px 0'}}>\r\n <OptionParamsForm {...this.state} dispatch={this.props.dispatch} />\r\n </div>\r\n </Content>\r\n <div style={{ backgroundColor: '#efefef', height:'24px' }}></div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '30px' }}>\r\n <OptionResultPage strategies={this.state.strategies} />\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.option;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(OptionPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { DatePicker, Modal, Select, Button, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { RangePicker } = DatePicker;\r\nconst Option = Select.Option;\r\n\r\nconst dateFormat = 'YYYYMMDD';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass FactorGeneratorPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.factorGeneratorTimer = null;\r\n\r\n var startDate = moment().quarter(moment().quarter() - 1).startOf('quarter').format(dateFormat);\r\n var endDate = moment().subtract(20, 'days').format(dateFormat);\r\n\r\n this.user = {};\r\n this.state = {\r\n \"startdate\": startDate,\r\n \"enddate\": endDate,\r\n \"period\": 'D',\r\n\r\n gLastTimes: 0,\r\n\r\n generatorButtonTxt: languageMessages['generating.factor.file'],\r\n generatorStatus: false,\r\n generatorWait: false,\r\n\r\n generatorError: '',\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n\r\n var generatorButtonTxt = languageMessages['generating.factor.file'];\r\n var generatorStatus = false;\r\n var generatorFactor = JSON.parse(sessionStorage.getItem(\"GeneratorFactorCache\") || '{}') || {};\r\n if (generatorFactor.generatorWait !== undefined) {\r\n generatorStatus = true;\r\n generatorButtonTxt = languageMessages['generating'];\r\n\r\n this.props.factorGenerator({ generatorStatus: true });\r\n }\r\n this.setState({\r\n generatorStatus: generatorStatus,\r\n generatorButtonTxt: generatorButtonTxt\r\n });\r\n }\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var gLastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'g':\r\n gLastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ gLastTimes });\r\n }\r\n\r\n componentDidUpdate() {\r\n var generatorWait = false;\r\n var generatorFactor = JSON.parse(sessionStorage.getItem(\"GeneratorFactorCache\") || '{}') || {};\r\n if (generatorFactor.generatorWait !== undefined) {\r\n generatorWait = generatorFactor.generatorWait;\r\n } else {\r\n generatorWait = this.state.generatorWait;\r\n }\r\n if (!this.factorGeneratorTimer && generatorWait) {\r\n this.factorGeneratorTimer = setInterval(this.queryGenerateStatus, 10000);\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, taskName, permission, lastTimes, currDate } = props;\r\n\r\n switch (status) {\r\n case 'get_factor_filters_success':\r\n if (currDate !== undefined) {\r\n var enddate = moment(currDate).format(dateFormat);\r\n this.setState({ enddate });\r\n }\r\n break;\r\n case 'commit':\r\n this.setState({ generatorButtonTxt: languageMessages['submitting'] });\r\n break;\r\n case 'ready':\r\n var generatorWait = true;\r\n this.setState({ generatorButtonTxt: languageMessages['ready.generate'], generatorWait: generatorWait });\r\n\r\n sessionStorage.setItem(\"GeneratorFactorCache\", JSON.stringify({ taskName: taskName, generatorWait: generatorWait }));\r\n break;\r\n case 'working':\r\n this.setState({ generatorButtonTxt: languageMessages['generating'] });\r\n break;\r\n case 'finished':\r\n if (this.factorGeneratorTimer) {\r\n clearInterval(this.factorGeneratorTimer)\r\n this.factorGeneratorTimer = null\r\n }\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n\r\n this.setState({\r\n generatorButtonTxt: languageMessages['generating.factor.file'],\r\n generatorStatus: false,\r\n generatorWait: false,\r\n gLastTimes: lastTimes,\r\n generatorError: '',\r\n });\r\n\r\n sessionStorage.removeItem(\"GeneratorFactorCache\");\r\n break;\r\n case 'error':\r\n if (this.factorGeneratorTimer) {\r\n clearInterval(this.factorGeneratorTimer)\r\n this.factorGeneratorTimer = null\r\n }\r\n\r\n var error = '';\r\n switch (state) {\r\n case 0:// 生æˆå¼‚常\r\n error = languageMessages['build.failed'];\r\n break;\r\n case 3:// 用户异常\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 4:// 点数ä¸å¤Ÿ\r\n error = languageMessages['factor.generation.has.run.out'];\r\n break;\r\n }\r\n\r\n this.setState({\r\n generatorButtonTxt: languageMessages['generating.factor.file'],\r\n generatorStatus: false,\r\n generatorWait: false,\r\n generatorError: error,\r\n });\r\n\r\n sessionStorage.removeItem(\"GeneratorFactorCache\");\r\n break;\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.factorGeneratorTimer) {\r\n clearInterval(this.factorGeneratorTimer)\r\n this.factorGeneratorTimer = null\r\n }\r\n }\r\n\r\n disabledDate = (current) => {\r\n return current && current > moment(this.props.currDate, \"YYYY-MM-DD\");\r\n }\r\n\r\n onDateChange = (dates, dateStrings) => {\r\n this.setState({ startdate: dateStrings[0], enddate: dateStrings[1] })\r\n }\r\n\r\n handlePeriodChange = (value) => {\r\n this.setState({ period: value.key })\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n \r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n // 生æˆå› å\r\n handleGeneratorFactorFile = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (this.state.gLastTimes <= 0) {\r\n var content = <span>{languageMessages['factor.generation.has.run.out']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n if (this.props.scanFilterStatus) {\r\n message.error(languageMessages['please.complete.factor.scan']);\r\n return;\r\n }\r\n\r\n this.setState({ generatorStatus: true }, () => {\r\n if (this.props.filter.filterName !== undefined) {\r\n this.props.factorGenerator({ generatorStatus: true });\r\n\r\n let feature = {\r\n UserName: this.user.username,\r\n FilterName: this.props.filter.filterName,\r\n StartDate: this.state.startdate,\r\n EndDate: this.state.enddate,\r\n Period: this.state.period\r\n }\r\n this.props.dispatch({ type: \"action_factor_file_generate\", payload: feature });\r\n }\r\n });\r\n }\r\n }\r\n\r\n queryGenerateStatus = () => {\r\n if (this.factorGeneratorTimer) {\r\n var taskName = '';\r\n var generatorFactor = JSON.parse(sessionStorage.getItem(\"GeneratorFactorCache\") || '{}') || {};\r\n if (generatorFactor.taskName !== undefined && generatorFactor.generatorWait !== undefined) {\r\n taskName = generatorFactor.taskName;\r\n } else {\r\n taskName = this.props.taskName;\r\n }\r\n if (taskName !== '') {\r\n this.props.dispatch({ type: \"action_factor_file_generate_query\", payload: taskName });\r\n }\r\n }\r\n }\r\n\r\n onDownload = () => {\r\n window.location.href = '/api/factor/download?taskname=' + this.props.taskName;\r\n }\r\n\r\n render() {\r\n var { startdate, enddate } = this.state;\r\n\r\n return (<React.Fragment>\r\n <div className='row-container' style={{ justifyContent: 'flex-start' }}>\r\n <div>\r\n <RangePicker size='small' style={{ width: 200 }}\r\n value={[moment(startdate, dateFormat), moment(enddate, dateFormat)]}\r\n disabledDate={this.disabledDate}\r\n format={dateFormat}\r\n onChange={this.onDateChange} />\r\n </div>\r\n <div>\r\n <label style={{ margin: \"0 10px\" }}> {languageMessages['data.frequency']} </label>\r\n <Select size='small' labelInValue defaultValue={{ key: 'D' }} style={{ width: 120 }}\r\n onChange={this.handlePeriodChange}>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60minute.line']}</Option>\r\n </Select>\r\n </div>\r\n </div>\r\n <div style={{ padding: '10px 0', lineHeight: '32px' }}>\r\n <Button size='small' onClick={this.handleGeneratorFactorFile} loading={this.state.generatorStatus} disabled={this.state.generatorStatus || this.props.filterString === ''}>\r\n {this.state.generatorButtonTxt}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.gLastTimes} filterError={this.state.generatorError} />\r\n {this.props.status === \"finished\" && <span style={{ padding: '0px 20px' }}><span style={{ lineHeight: \"32px\", color: 'green' }}>{languageMessages['generated.complete']}</span> <a className='btn' onClick={this.onDownload} style={{ lineHeight: \"32px\" }}>{languageMessages['intl.menu.download']}</a></span>}\r\n </div>\r\n </React.Fragment>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.factor;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(FactorGeneratorPage);\r\nexport { page as FactorGenerator }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { CSVLink } from \"react-csv\";\r\nimport history from '../../helpers/history';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { FactorGenerator } from './FactorGenerator';\r\n\r\nimport { Layout, Table, PageHeader, Modal, Select, Button, Spin, Icon, Row, Col, Divider, message } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport SymbolGroupPage from '../../pannels/stock/SymbolGroupPage';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nimport FilterFunction from '../filterFunctions';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Option = Select.Option;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass FactorPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.csvData = [];\r\n this.myDate = new Date();\r\n this.fileName = 'scan_factor_result_' + this.myDate.getYear() + '' + this.myDate.getMonth() + '' + this.myDate.getDate() + '' + this.myDate.getHours() + '' + this.myDate.getMinutes() + '' + this.myDate.getSeconds() + \".csv\";\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'STOCK',\r\n stockPickerModeKey: 'REAL',\r\n\r\n fLastTimes: 0,\r\n\r\n pastTime: '10:00',\r\n\r\n caretPosition: 0,\r\n\r\n stockGroups: '3069',\r\n\r\n filterId: 0,\r\n filterName: '',\r\n filterString: '',\r\n\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n \r\n selectedRowKeys: [],\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n\r\n scanFilterStatus: true,\r\n generatorStatus: false,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_factor_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_factor_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var fLastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'f':\r\n fLastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ fLastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, state, fail, filter, permission, fLastTimes } = props;\r\n\r\n switch (status) {\r\n case 'get_factor_filters_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var filterId = 0;\r\n var filterName = '';\r\n var filterString = '';\r\n var scanFilterStatus = true;\r\n if (filter !== null && filter.filterId !== undefined) {\r\n filterId = filter.filterId;\r\n filterName = filter.filterName;\r\n filterString = filter.filterString;\r\n scanFilterStatus = false;\r\n }\r\n\r\n this.setState({\r\n filterId,\r\n filterName,\r\n filterString,\r\n spinLoadding: false,\r\n scanFilterStatus,\r\n });\r\n break;\r\n case 'get_factor_filters_failed':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'scan_factorFilter_success':\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n\r\n this.fileName = 'scan_factor_result_' + this.myDate.getYear() + '' + this.myDate.getMonth() + '' + this.myDate.getDate() + '' + this.myDate.getHours() + '' + this.myDate.getMinutes() + '' + this.myDate.getSeconds() + \".csv\";\r\n\r\n var filterId = filter.filterId;\r\n var filterName = filter.filterName;\r\n var filterString = filter.filterString;\r\n var scanFilterStatus = filterId > 0 ? false : true;\r\n\r\n this.setState({\r\n filterId,\r\n filterName,\r\n filterString,\r\n fLastTimes: fLastTimes,\r\n isShowStockResultPage: true,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n scanFilterStatus,\r\n });\r\n break;\r\n case 'scan_factorFilter_failed':\r\n var error = '';\r\n var textareaClass = 'common-textarea';\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['scan.strategy.exception'];\r\n break;\r\n case 2:\r\n error = languageMessages['no.scan.to.stock'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.strategy.Service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['request.scan.strategy.failed'];\r\n break;\r\n case 6:\r\n error = languageMessages['scan.strategy.error'];\r\n if (fail === 'Filter quota is reached.') {\r\n error = languageMessages['reaching.strategy.quota'];\r\n } else {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n var eer = '';\r\n var ff = fail.split(':');\r\n if (ff.length > 0) {\r\n for (var i in ff) {\r\n if (i == 0) continue;\r\n eer += ff[i];\r\n }\r\n }\r\n if (eer !== '') error += ' : ' + eer;\r\n }\r\n break;\r\n case 7:\r\n error = languageMessages['today.scan.strategy.end'];\r\n break;\r\n case 11:\r\n error = languageMessages['Service.not.operation'];\r\n break;\r\n case 12:\r\n error = languageMessages['Subscription.expired'];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.setState({\r\n filterError: error,\r\n textareaClass: textareaClass\r\n });\r\n break;\r\n case 'finished':\r\n this.setState({ generatorStatus: false });\r\n break;\r\n case 'error':\r\n this.setState({ generatorStatus: false });\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey\r\n }, () => {\r\n if (this.user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n });\r\n }\r\n\r\n handlefactorGenerator(data) {\r\n this.setState({\r\n generatorStatus: data.generatorStatus,\r\n });\r\n }\r\n\r\n myFactorFile = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/factorIndex\");\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n this.setState({\r\n filterString: e.target.value,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n scanFilterStatus: true,\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onRowChange = (selectedRowKeys) => {\r\n this.setState({ selectedRowKeys: selectedRowKeys })\r\n }\r\n\r\n handleFactorScan = () => {\r\n let { stockPoolKey, filterId, filterName, filterString, stockGroups, filterError, fLastTimes } = this.state;\r\n\r\n if (filterError !== '') {\r\n //message.error(languageMessages['scan.strategy.in.error']);\r\n //return;\r\n }\r\n \r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (fLastTimes <= 0) {\r\n var content = <span>{languageMessages['today.scan.strategy.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n this.setState({ isShowStockResultPage: false, scanFilterStatus: true, filterError: '' }, () => {\r\n var requestFilter = {\r\n UserId: this.user.username,\r\n Type: 1,\r\n FilterId: filterId,\r\n FilterName: filterName,\r\n FilterString: filterString,\r\n GroupType: stockPoolKey,\r\n SymbolGroupId: stockGroups\r\n };\r\n this.props.dispatch({ type: \"action_factorfilter_scan\", payload: requestFilter });\r\n });\r\n }\r\n }\r\n\r\n renderRealPanel() {\r\n return (<div style={{ padding: '10px 0' }}>{languageMessages['real-time.market.stock.picker']}</div>);\r\n }\r\n\r\n renderPastTimePanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <p>æ ¹æ®ä»¥ä¸Šé€‰è‚¡ç–略,回溯到过去æŸä¸€ä¸ªæ—¶é—´ç‚¹é€‰è‚¡ã€‚</p>\r\n <label>时间点</label>\r\n <Select defaultValue={this.state.pastTime}\r\n style={{ width: 120 }}\r\n onChange={this.handlePastTimeChange}>\r\n <Option key='09:30'>09:30</Option>\r\n <Option key='09:45'>09:45</Option>\r\n <Option key='10:00'>10:00</Option>\r\n <Option key='10:15'>10:15</Option>\r\n <Option key='10:30'>10:30</Option>\r\n <Option key='10:45'>10:45</Option>\r\n <Option key='11:00'>11:00</Option>\r\n <Option key='11:15'>11:15</Option>\r\n <Option key='11:30'>11:30</Option>\r\n <Option key='13:00'>13:00</Option>\r\n <Option key='13:15'>13:15</Option>\r\n <Option key='13:30'>13:30</Option>\r\n <Option key='13:45'>13:45</Option>\r\n <Option key='14:00'>14:00</Option>\r\n <Option key='14:15'>14:15</Option>\r\n <Option key='14:10'>14:30</Option>\r\n <Option key='14:45'>14:45</Option>\r\n <Option key='15:00'>15:00</Option>\r\n </Select>\r\n </div>);\r\n }\r\n\r\n renderStockResult = (stockPoolKey) => {\r\n const { scanAlert } = this.props;\r\n /**\r\n const rowSelection = {\r\n title: '全选',\r\n onClick: this.onRowChange,\r\n selectedRowKeys: this.state.selectedRowKeys,\r\n onChange: this.onRowChange\r\n }*/\r\n\r\n /**\r\n let header = [{ label: \"DATETIME\", key: \"DATETIME\" },\r\n { label: \"WEEKDAY\", key: \"WEEKDAY\" },\r\n { label: \"SYMBOL\", key: \"SYMBOL\" }\r\n ]\r\n */\r\n\r\n var columns = [{\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n fixed: 'left',\r\n width: 80\r\n }, {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'symbolCode',\r\n fixed: 'left',\r\n width: 120\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'symbolName',\r\n fixed: 'left',\r\n width: 120\r\n }];\r\n \r\n this.csvData = [];\r\n var dataSource = [];\r\n if (scanAlert != null && scanAlert !== undefined) {\r\n // æ ‡é¢˜\r\n var csvDataTitle = [languageMessages['symbol.code'], languageMessages['symbol.name']];\r\n var subject = scanAlert.title !== '' ? scanAlert.title.split(\",\") : [];\r\n if (subject.length > 0) {\r\n subject.forEach((v, i) => {\r\n columns.push({ title: v, dataIndex: v });\r\n csvDataTitle.push(v);\r\n });\r\n }\r\n this.csvData.push(csvDataTitle);\r\n\r\n // 内容\r\n scanAlert.stockItems.forEach((item, index) => {\r\n var row = {\r\n key: index,\r\n sequence: index + 1\r\n }\r\n\r\n var csvDataItem = [];\r\n for (var kk in item) {\r\n if (kk === 'symbolCode' || kk === 'symbolName') {\r\n row[kk] = item[kk];\r\n csvDataItem.push(item[kk]);\r\n } else {\r\n row[kk] = parseFloat(item[kk]).toFixed(4);\r\n csvDataItem.push(parseFloat(item[kk]).toFixed(4));\r\n }\r\n }\r\n dataSource.push(row);\r\n this.csvData.push(csvDataItem);\r\n })\r\n }\r\n var scrollParams = { x: columns.length * 150 };\r\n\r\n var txt = stockPoolKey === 'GENERAL_INDEX' ? languageMessages['index'] : stockPoolKey === 'FUND' ? languageMessages['fund'] : languageMessages['stock'];\r\n\r\n return (<div className='common-stock-result'>\r\n <Divider style={{ margin: '16px 0px 10px 0px' }} />\r\n <PageHeader\r\n title={(<p style={{ fontWeight: 'normal', fontSize: '14px', color: '#a2a2a2' }}>\r\n <FormattedMessage id=\"factor.scan.result\" values={{ num: dataSource.length || 0, name: txt }} />\r\n </p>)}\r\n extra={[<span key=\"1\" style={{ fontWeight: 'normal', fontSize: '14px', color: '#a2a2a2' }}>{languageMessages['save.factor.local']}</span>,\r\n <CSVLink key=\"2\" data={this.csvData} filename={this.fileName} className=\"ant-btn ant-btn-sm\" target=\"_blank\">\r\n <Icon type=\"download\" /><span>{languageMessages['save.stock']}</span>\r\n </CSVLink>\r\n ]} />\r\n <Table size='small' bordered columns={columns} dataSource={dataSource} scroll={scrollParams}\r\n pagination={{ pageSize: 20, }} />\r\n </div>)\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockGroups, filterString } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount\r\n };\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader\r\n title=\"\"\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.myFactorFile}>{languageMessages['my.factor.file']}</Button>\r\n ]} />\r\n </div>\r\n <Content className='factor-content'>\r\n <div className='common-title' style={{ paddingBottom: '0px' }}>{languageMessages['factor.title.01']}</div>\r\n <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />\r\n <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['formula.editing']}\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle} />\r\n \r\n <div style={{ padding: '10px 0 0 0' }}>\r\n <Button size='small' onClick={this.handleFactorScan} loading={this.props.status === 'scan_factorFilter_commit'} disabled={this.props.status === 'scan_factorFilter_commit' || this.state.filterString === '' || this.state.generatorStatus}>\r\n {this.props.status === 'scan_factorFilter_commit' ? languageMessages['scanning'] : languageMessages['factorScan']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.fLastTimes} filterError={this.state.filterError} />\r\n </div>\r\n {this.state.isShowStockResultPage && this.renderStockResult(stockPoolKey)}\r\n </Content>\r\n \r\n <div className='common-separate-block' style={{ margin: 0 }}></div>\r\n <Content className='factor-content'>\r\n <div className='common-title'>{languageMessages['factor.title.02']}<span style={{ fontSize: '10px' }}>({languageMessages['generating.factor.file.condition']})</span></div>\r\n <FactorGenerator filterString={filterString} scanFilterStatus={this.state.scanFilterStatus} factorGenerator={this.handlefactorGenerator.bind(this)}></FactorGenerator>\r\n </Content>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.factor;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(FactorPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Table, Upload, Button, Icon, Modal, PageHeader, Progress, message } from 'antd';\r\nimport history from '../../helpers/history';\r\nimport emitter from '../Evt.js';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst FactorStatus = [\r\n languageMessages['start.generating'],\r\n languageMessages['generated.file.in'],\r\n languageMessages['build.failed'],\r\n languageMessages['not.analyzed'],\r\n languageMessages['start.analysis'],\r\n languageMessages['analysis.failure'],\r\n languageMessages['analyzing'],\r\n languageMessages['analysis.completed']\r\n]\r\n\r\nconst { Content } = Layout;\r\nconst confirm = Modal.confirm;\r\n\r\nclass FactorIndex extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.columns = [{\r\n title: languageMessages['factor.file.name'],\r\n dataIndex: 'fileName',\r\n key: 'fileName'\r\n }, {\r\n title: languageMessages['last.update.date'],\r\n dataIndex: 'update',\r\n key: 'update'\r\n }, {\r\n title: languageMessages['type'],\r\n dataIndex: 'type',\r\n key: 'type',\r\n render: type => (\r\n <span>\r\n {type ? languageMessages['upload'] : languageMessages['generate']}\r\n </span>\r\n )\r\n },{\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n key: 'status',\r\n render: status => (\r\n <span>\r\n {FactorStatus[status]}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['control'],\r\n dataIndex: 'control',\r\n render: (text, record) => {\r\n const { analyzeKey } = this.state;\r\n const analyzer = this.isAnalyzer(record);\r\n return (<div>\r\n {record.status === 2 ? (<span style={{ color: '#ccc' }}><a onClick={() => this.onRemove(record.key)}>{languageMessages['remove']}</a></span>) :\r\n record.status === 5 ? (<span style={{ color: '#ccc' }}><a onClick={() => this.onRemove(record.key)}>{languageMessages['remove']}</a></span>) :\r\n record.status === 7 ? (<span><a onClick={() => this.onClickViewResult(record.taskId)}>{languageMessages['view.analysis.results']}</a> | <a onClick={() => this.onRemove(record.key)}>{languageMessages['remove']}</a></span>) : \r\n (record.status === 0 || record.status === 1) ? (<span style={{ color: '#ccc' }}>{languageMessages['build.please.wait']}</span>) :\r\n analyzer ? (<span>{record.description}</span>) : (<span><a disabled={analyzeKey !== 0} onClick={() => this.StartAnalyzer(record.key)}>{languageMessages['start.analysis']}</a> | <a onClick={() => this.onRemove(record.key)}>{languageMessages['remove']}</a></span>)\r\n }\r\n </div>)\r\n },\r\n }];\r\n\r\n this.queryAnalyzeTimer = null;\r\n\r\n this.user = {};\r\n this.state = {\r\n initLoadding: true,\r\n dataSource: [],\r\n\r\n aLastTimes: 0,\r\n\r\n analyzeKey: 0,\r\n \r\n removeKey: 0,\r\n\r\n fileList: [],\r\n };\r\n }\r\n\r\n isAnalyzer = record => record.key === this.state.analyzeKey;\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ initLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n if (user.permission !== undefined) {\r\n this.setUserPermission(user.permission);\r\n }\r\n this.props.dispatch({ type: \"action_get_factor_files\", payload: { UserId: user.username } });\r\n }\r\n */\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n this.props.dispatch({ type: \"action_get_factor_files\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var aLastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'a':\r\n aLastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n }\r\n }\r\n this.setState({ aLastTimes });\r\n }\r\n\r\n componentDidUpdate() {\r\n const { dataSource, analyzeKey } = this.state;\r\n\r\n var analyzeTaskId = 0;\r\n var analyzeStatus = '';\r\n var factorAnalyze = JSON.parse(sessionStorage.getItem(\"FactorAnalyzeCache\") || '{}') || {};\r\n if (factorAnalyze.taskId !== undefined && factorAnalyze.status !== undefined) {\r\n analyzeTaskId = factorAnalyze.taskId;\r\n analyzeStatus = factorAnalyze.status;\r\n } else {\r\n analyzeTaskId = this.props.analyzeTaskId;\r\n analyzeStatus = this.props.analyzeStatus;\r\n }\r\n \r\n if (!this.queryAnalyzeTimer && analyzeStatus === \"working\") {\r\n if (analyzeTaskId > 0 && analyzeKey == 0) {\r\n var tmpFactorFile = dataSource.filter(function (e) { return e.taskId == analyzeTaskId; });\r\n if (tmpFactorFile.length > 0) {\r\n this.setState({\r\n analyzeKey: tmpFactorFile[0].key,\r\n });\r\n }\r\n }\r\n this.queryAnalyzeTimer = setInterval(this.queryAnalyzeStatus, 10000)\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n let { status, state, factorFiles, factorFile, analyzeTaskId, analyzeState, analyzeStage, permission, lastTimes } = props\r\n let { dataSource, removeKey, analyzeKey } = this.state;\r\n\r\n switch (status) {\r\n case 'get_factor_files_success':\r\n dataSource = [];\r\n if (factorFiles != null) {\r\n var factorAnalyze = JSON.parse(sessionStorage.getItem(\"FactorAnalyzeCache\") || '{}') || {};\r\n var taskId = 0;\r\n if (factorAnalyze.taskId !== undefined && factorAnalyze.percent !== undefined) {\r\n taskId = factorAnalyze.taskId;\r\n percent = factorAnalyze.percent;\r\n }\r\n for (var i in factorFiles) {\r\n var description = '';\r\n if (taskId > 0 && taskId === factorFiles[i].taskId) {\r\n description = <Progress size=\"small\" percent={percent} />\r\n }\r\n dataSource.push({\r\n key: factorFiles[i].id,\r\n fileName: factorFiles[i].fileName,\r\n update: factorFiles[i].updated,\r\n taskId: factorFiles[i].taskId,\r\n type: factorFiles[i].type,\r\n status: factorFiles[i].status,\r\n description: description,\r\n });\r\n }\r\n }\r\n \r\n this.setState({ dataSource, initLoadding: false });\r\n break;\r\n case 'get_factor_files_failed':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ dataSource: [], initLoadding: false });\r\n break;\r\n case 'factor_analyze_commit':\r\n var index = dataSource.findIndex(item => item.key === analyzeKey);\r\n if (index > -1) {\r\n dataSource[index].description = languageMessages['is.submitting'];\r\n this.setState({ dataSource });\r\n }\r\n break;\r\n case 'factor_analyze_ready':\r\n var index = dataSource.findIndex(item => item.key === analyzeKey);\r\n if (index > -1) {\r\n dataSource[index].taskId = analyzeTaskId;\r\n dataSource[index].status = analyzeState;\r\n dataSource[index].description = languageMessages['prepare.analysis'];\r\n this.setState({ dataSource });\r\n }\r\n\r\n sessionStorage.setItem(\"FactorAnalyzeCache\", JSON.stringify({\r\n status: 'working',\r\n taskId: analyzeTaskId,\r\n percent: 0,\r\n }));\r\n break;\r\n case 'factor_analyze_working':\r\n let percent = 0\r\n if (analyzeStage && analyzeStage.length === 2) {\r\n percent = parseInt(analyzeStage[0] / analyzeStage[1] * 100)\r\n }\r\n \r\n var index = dataSource.findIndex(item => item.key === analyzeKey);\r\n if (index > -1) {\r\n dataSource[index].status = analyzeState;\r\n dataSource[index].description = <Progress size=\"small\" percent={percent} />;\r\n\r\n sessionStorage.setItem(\"FactorAnalyzeCache\", JSON.stringify({\r\n status: 'working',\r\n taskId: dataSource[index].taskId,\r\n percent: percent,\r\n }));\r\n\r\n this.setState({ dataSource });\r\n }\r\n break;\r\n case 'factor_analyze_finished':\r\n if (this.queryAnalyzeTimer) {\r\n clearInterval(this.queryAnalyzeTimer)\r\n this.queryAnalyzeTimer = null;\r\n }\r\n\r\n var index = dataSource.findIndex(item => item.key === analyzeKey);\r\n if (index > -1) {\r\n dataSource[index].status = analyzeState;\r\n dataSource[index].description = languageMessages['analysis.completed'];\r\n }\r\n this.setState({ dataSource, analyzeKey: 0, aLastTimes: lastTimes });\r\n \r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n\r\n sessionStorage.removeItem(\"FactorAnalyzeCache\");\r\n break;\r\n case 'factor_analyze_error':\r\n if (this.queryAnalyzeTimer) {\r\n clearInterval(this.queryAnalyzeTimer)\r\n this.queryAnalyzeTimer = null;\r\n }\r\n\r\n var error = languageMessages['analysis.failure'];\r\n switch (state) {\r\n case 0:\r\n error = languageMessages['analysis.of.anomalies'];\r\n break;\r\n case 2:\r\n error = languageMessages['analysis.failure'];\r\n break;\r\n case 3:\r\n error = languageMessages['error.analyzing.data'];\r\n break;\r\n case 4:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 5:\r\n error = languageMessages['analysis.points.end'];\r\n break;\r\n case 6:\r\n error = languageMessages['analysis.server.not.responding'];\r\n break;\r\n case 7:\r\n error = languageMessages['no.querying.analysis.tasks'];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var index = dataSource.findIndex(item => item.key === analyzeKey);\r\n if (index > -1) {\r\n dataSource[index].status = analyzeState;\r\n dataSource[index].description = languageMessages['analysis.failure'];\r\n this.setState({ dataSource, analyzeKey: 0 });\r\n }\r\n\r\n sessionStorage.removeItem(\"FactorAnalyzeCache\");\r\n message.error(error);\r\n break;\r\n case 'upload_file':\r\n var dd = {\r\n key: factorFile.id,\r\n fileName: factorFile.fileName,\r\n update: factorFile.updated,\r\n taskId: factorFile.taskId,\r\n type: factorFile.type,\r\n status: factorFile.status,\r\n description: '',\r\n }\r\n if (dataSource.length > 0) {\r\n dataSource.unshift(dd);\r\n } else {\r\n dataSource.push(dd);\r\n }\r\n\r\n this.setState({ dataSource, initLoadding: false });\r\n break;\r\n case 'upload_file_error':\r\n this.setState({ initLoadding: false });\r\n message.error(languageMessages['upload.failed']);\r\n break;\r\n case 'remove_file':\r\n if (removeKey > 0) {\r\n dataSource = dataSource.filter(item => item.key !== removeKey);\r\n this.setState({ dataSource, removeKey: 0 });\r\n }\r\n break;\r\n case 'remove_file_error':\r\n var error = languageMessages['remove.factor.file.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.queryAnalyzeTimer) {\r\n clearInterval(this.queryAnalyzeTimer);\r\n this.queryAnalyzeTimer = null;\r\n }\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n onClickViewResult = (key) => {\r\n if (key != 0) {\r\n sessionStorage.setItem(\"resultTaskId\", key);\r\n history.replace(\"/factorAnalyzer\")\r\n }\r\n }\r\n\r\n StartAnalyzer = (key) => {\r\n let { aLastTimes } = this.state;\r\n \r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var _this = this;\r\n confirm({\r\n title: languageMessages['analyze.this.factor.file'],\r\n content: <span> {languageMessages['remaining.times']}:{aLastTimes}{languageMessages['times']},<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a> </span>,\r\n okText: languageMessages['analysis'],\r\n okType: 'danger',\r\n okButtonProps: {\r\n disabled: aLastTimes > 0 ? false : true,\r\n //size: 'small',\r\n },\r\n cancelText: languageMessages['cancel'],\r\n cancelButtonProps: {\r\n //size: 'small',\r\n },\r\n onOk() {\r\n _this.setState({ analyzeKey: key }, () => {\r\n _this.props.dispatch({ type: \"action_start_analyze\", payload: { UserName: _this.user.username, FileId: key } });\r\n });\r\n },\r\n onCancel() {\r\n },\r\n });\r\n }\r\n }\r\n\r\n queryAnalyzeStatus = () => {\r\n if (this.queryAnalyzeTimer) {\r\n var analyzeTaskId = 0;\r\n var factorAnalyze = JSON.parse(sessionStorage.getItem(\"FactorAnalyzeCache\") || '{}') || {};\r\n if (factorAnalyze.taskId !== undefined) {\r\n analyzeTaskId = factorAnalyze.taskId;\r\n } else {\r\n analyzeTaskId = this.props.analyzeTaskId;\r\n }\r\n\r\n if (analyzeTaskId > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_analyze_query\", payload: { UserName: this.user.username, TaskId: analyzeTaskId } });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onRemove = (key) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var _this = this;\r\n confirm({\r\n title: languageMessages['delete.this.factor.file'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ removeKey: key }, () => {\r\n _this.props.dispatch({ type: \"action_remove_file\", payload: { UserName: _this.user.username, FileName: key } });\r\n });\r\n },\r\n onCancel() {\r\n },\r\n });\r\n }\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n const isCSV = file.type.match(\"application/vnd.ms-excel\");\r\n if (!isCSV) {\r\n message.error(languageMessages['upload.factor.format']);\r\n }\r\n const isLt20M = file.size / 1024 / 1024 < 20;\r\n if (!isLt20M) {\r\n message.error(languageMessages['upload.factor.size']);\r\n }\r\n return isCSV && isLt20M;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n \r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n \r\n if (info.file.status === 'done') {\r\n //文件转移\r\n this.setState({ fileList: [], initLoadding: true }, () => {\r\n this.props.dispatch({ type: \"action_upload_migrate\", payload: { UserName: this.user.username, FileName: info.file.response.fileName } });\r\n });\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n onBack = e => {\r\n e.preventDefault();\r\n history.goBack();\r\n }\r\n \r\n render() {\r\n const { dataSource, initLoadding } = this.state\r\n\r\n return (<Content className='main-container'>\r\n <div className='common-page-header'>\r\n <PageHeader onBack={this.onBack} backIcon={(<Icon type=\"left\" />)} title={(<span style={{ cursor: 'pointer' }} onClick={this.onBack}>{languageMessages['my.factor.file']}</span>)} />\r\n </div>\r\n\r\n <Layout className='cont-content'>\r\n <div className=\"table-operations\" style={{ margin: '16px 0px' }}>\r\n <div style={{ float: \"left\" }}>\r\n <Upload name='file' action=\"/api/file/factors/\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['upload.factor.file']} </Button>\r\n </Upload>\r\n </div>\r\n </div>\r\n <Table bordered size='small' loading={initLoadding} dataSource={dataSource} columns={this.columns} />\r\n </Layout>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.factor;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(FactorIndex);\r\nexport default page","//å„åˆ†ä½æ•°å¹³å‡æ”¶ç›Š\r\nvar AverageRetByQuantileOption = {\r\n legend: {\r\n data: []\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: {show: false},\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n\r\n series: []\r\n};\r\n//å› åAlpha强度\r\nvar AlphaStrengthOption = {\r\n legend: {\r\n data: [\"1D\",\"3D\",\"5D\",\"7D\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n series: [\r\n {\r\n name:'1D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }, {\r\n name:'3D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'5D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'7D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n//å› å累计收益\r\nvar CumRetOption = {\r\n legend: {\r\n data: [\"1D\",\"3D\",\"5D\",\"7D\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value',\r\n },\r\n\r\n series: [\r\n {\r\n name:'1D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }, {\r\n name:'3D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'5D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n } , {\r\n name:'7D',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n//分ä½åˆ†ç»„累计累计收益\r\nvar CumRetByQuantileOption = {\r\n legend: {\r\n top: 25,\r\n data: [\"Qn 1\",\"Qn 2\",\"Qn 3\",\"Qn 4\",\"Qn 5\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (params) {\r\n var relVal = params[0].name;\r\n for (var i = 0; i < params.length; i++) {\r\n var seriesName = params[i].seriesName.replace('Qn', 'Quantile')\r\n relVal += '<div><span style=\"display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background:' + params[i].color + '\"></span>' + seriesName + ' : ' + params[i].value + \"</div>\";\r\n }\r\n return relVal;\r\n },\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value',\r\n },\r\n series: [\r\n {\r\n name:'Qn 1',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }, {\r\n name:'Qn 2',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'Qn 3',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'Qn 4',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name:'Qn 5',\r\n type:'line',\r\n smooth:true,\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n//行业\r\nvar AverageRetBySectorOption = {\r\n legend: {\r\n top: 25,\r\n data: [\"1D\",\"3D\",\"5D\",\"7D\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: {show: false},\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n series: [\r\n {\r\n name:'1D',\r\n type:'bar',\r\n barGap: 0,\r\n data: []\r\n },\r\n {\r\n name:'3D',\r\n type:'bar',\r\n barGap: 0,\r\n data:[]\r\n },\r\n {\r\n name:'5D',\r\n type:'bar',\r\n barGap: 0,\r\n data: []\r\n },\r\n {\r\n name:'7D',\r\n type:'bar',\r\n barGap: 0,\r\n data: []\r\n }\r\n ]\r\n};\r\n\r\nexport {AverageRetByQuantileOption,AlphaStrengthOption,CumRetOption,CumRetByQuantileOption,AverageRetBySectorOption}","//IC分æž\r\nvar ICValueByPeriodOption = {\r\n legend: {\r\n data: [\"1D\", \"3D\", \"5D\", \"7D\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n series: [\r\n {\r\n name: '1D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n }, {\r\n name: '3D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name: '5D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name: '7D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n//行业IC分æž\r\nvar ICMeanBySectorOption = {\r\n legend: {\r\n data: []\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: { show: false },\r\n axisLabel: {\r\n formatter: function (value) {\r\n return value.split(\"\").join(\"\\n\");\r\n }\r\n },\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n\r\n series: []\r\n};\r\n\r\nexport { ICValueByPeriodOption, ICMeanBySectorOption }","var TurnoverCurveOption = {\r\n legend: {\r\n data: [\"1D\", \"3D\", \"5D\", \"7D\"]\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: []\r\n },\r\n yAxis: {\r\n type: 'value'\r\n },\r\n series: [\r\n {\r\n name: '1D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n }, {\r\n name: '3D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name: '5D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n name: '7D',\r\n type: 'line',\r\n smooth: true,\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n\r\nexport { TurnoverCurveOption }","import { AverageRetByQuantileOption, AlphaStrengthOption, CumRetOption, CumRetByQuantileOption, AverageRetBySectorOption } from './factorReturn'\r\nimport { ICValueByPeriodOption, ICMeanBySectorOption } from './factorIndicate'\r\nimport { TurnoverCurveOption } from './factorTurnover'\r\n\r\nfunction deepCopy(obj, cache = []) {\r\n function find(list, f) {\r\n return list.filter(f)[0]\r\n }\r\n\r\n // just return if obj is immutable value\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n // if obj is hit, it is in circular structure\r\n const hit = find(cache, c => c.original === obj)\r\n if (hit) {\r\n return hit.copy\r\n }\r\n\r\n const copy = Array.isArray(obj) ? [] : {}\r\n // put the copy into cache at first\r\n // because we want to refer it in recursive deepCopy\r\n cache.push({\r\n original: obj,\r\n copy\r\n })\r\n\r\n Object.keys(obj).forEach(key => {\r\n copy[key] = deepCopy(obj[key], cache)\r\n })\r\n\r\n return copy\r\n}\r\n\r\nfunction getChartOption(chartName, factorData, sector) {\r\n let option = null\r\n let max = 0\r\n let min = 999\r\n switch (chartName) {\r\n case \"IcValueByPeriod\":\r\n option = ICValueByPeriodOption\r\n option.xAxis.data = factorData['x']\r\n\r\n var ii = 0\r\n for (var key in factorData) {\r\n if (key == \"x\") continue;\r\n option.series[ii].data = factorData[key]\r\n ii++\r\n }\r\n\r\n break;\r\n case \"IcMeanBySector\":\r\n option = ICMeanBySectorOption\r\n option.xAxis.data = factorData['x']\r\n\r\n option.legend.data = []\r\n option.series = []\r\n\r\n for (var key in factorData) {\r\n if (key == \"x\") continue;\r\n option.legend.data.push(key)\r\n\r\n var seriesConfig = { name: key, type: 'bar', barGap: 0, data: factorData[key] }\r\n option.series.push(seriesConfig)\r\n }\r\n\r\n break;\r\n case 'AverageRetByQuantile':\r\n option = AverageRetByQuantileOption\r\n\r\n option.xAxis.data = factorData[\"AverageRetByQuantile\"]['x']\r\n\r\n option.legend.data = []\r\n option.series = []\r\n\r\n for (var key in factorData[\"AverageRetByQuantile\"]) {\r\n if (key == \"x\") continue;\r\n option.legend.data.push(key)\r\n\r\n var seriesConfig = { name: key, type: 'bar', barGap: 0, data: factorData[\"AverageRetByQuantile\"][key] }\r\n option.series.push(seriesConfig)\r\n }\r\n break;\r\n case \"AlphaStrength\":\r\n option = AlphaStrengthOption\r\n option.xAxis.data = factorData[\"AlphaStrength\"]['x']\r\n\r\n var ii = 0\r\n for (var key in factorData[\"AlphaStrength\"]) {\r\n if (key == \"x\") continue;\r\n option.series[ii].data = factorData[\"AlphaStrength\"][key]\r\n ii++\r\n }\r\n break;\r\n case \"CumRet\":\r\n option = CumRetOption\r\n option.xAxis.data = factorData[\"CumRet\"]['x']\r\n\r\n var ii = 0\r\n for (var key in factorData[\"CumRet\"]) {\r\n if (key == \"x\") continue;\r\n option.series[ii].data = factorData[\"CumRet\"][key]\r\n ii++\r\n }\r\n\r\n max = 0\r\n min = 999\r\n for (let i = 0; i < 4; i++) {\r\n if (Math.max.apply(null, option.series[i].data) > max)\r\n max = Math.max.apply(null, option.series[i].data)\r\n if (Math.min.apply(null, option.series[i].data) < min)\r\n min = Math.min.apply(null, option.series[i].data)\r\n }\r\n min -= 0.01\r\n max += 0.01\r\n option.yAxis.min = min.toFixed(2)\r\n option.yAxis.max = max.toFixed(2)\r\n\r\n // debugger\r\n break;\r\n case \"CumRetByQuantile\":\r\n option = CumRetByQuantileOption\r\n option.title.text = sector\r\n option.xAxis.data = factorData[\"CumRetByQuantile\"]['x']\r\n \r\n var ii = 0\r\n for (var kk in factorData[\"CumRetByQuantile\"][sector]) {\r\n option.series[ii].data = factorData[\"CumRetByQuantile\"][sector][kk]\r\n ii++\r\n }\r\n\r\n max = 0\r\n min = 999\r\n for (let i = 0; i < 5; i++) {\r\n if (Math.max.apply(null, option.series[i].data) > max)\r\n max = Math.max.apply(null, option.series[i].data)\r\n if (Math.min.apply(null, option.series[i].data) < min)\r\n min = Math.min.apply(null, option.series[i].data)\r\n }\r\n min -= 0.01\r\n max += 0.01\r\n option.yAxis.min = min.toFixed(2)\r\n option.yAxis.max = max.toFixed(2)\r\n \r\n break;\r\n case \"RetBySector\":\r\n option = AverageRetBySectorOption\r\n option.title.text = sector\r\n option.xAxis.data = factorData[\"RetBySector\"]['x']\r\n \r\n var ii = 0\r\n for (var kk in factorData[\"RetBySector\"][sector]) {\r\n option.series[ii].data = factorData[\"RetBySector\"][sector][kk]\r\n ii++\r\n }\r\n break;\r\n case \"TurnoverCurve\":\r\n option = TurnoverCurveOption\r\n option.xAxis.data = factorData['x']\r\n\r\n var ii = 0\r\n for (var key in factorData) {\r\n if (key == \"x\" || key == \"min\" || key == \"max\") continue;\r\n option.series[ii].data = factorData[key]\r\n ii++\r\n }\r\n\r\n option.yAxis.min = factorData['min']\r\n option.yAxis.max = factorData['max']\r\n\r\n break;\r\n }\r\n return deepCopy(option)\r\n}\r\n\r\nexport { getChartOption }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Tabs, Menu, Table, PageHeader, Icon, Divider, message, Spin } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\nimport { PageTitle } from '../../components';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content, Sider } = Layout;\r\nconst TabPane = Tabs.TabPane;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst columns = [\r\n {\r\n title: languageMessages['factorName'],\r\n dataIndex: 'factorName',\r\n render: (value, row, index) => {\r\n const obj = {\r\n children: value,\r\n props: {},\r\n };\r\n if (index === 0) {\r\n obj.props.rowSpan = 4;\r\n } else {\r\n obj.props.rowSpan = 0;\r\n }\r\n return obj;\r\n },\r\n }, {\r\n title: languageMessages['periodWise'],\r\n dataIndex: 'periodWise'\r\n }, {\r\n title: languageMessages['totalRet'],\r\n dataIndex: 'totalRet',\r\n render: totalRet => (\r\n <span>\r\n {totalRet}%\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['sharpeRatio'],\r\n dataIndex: 'sharpeRatio'\r\n }, {\r\n title: languageMessages['annAlpha'],\r\n dataIndex: 'annAlpha'\r\n }, {\r\n title: languageMessages['beta'],\r\n dataIndex: 'beta'\r\n }\r\n];\r\n\r\nconst monotonicColumns = [\r\n {\r\n title: '',\r\n dataIndex: 'monotonic'\r\n }, {\r\n title: '1D',\r\n dataIndex: '1D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '3D',\r\n dataIndex: '3D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '5D',\r\n dataIndex: '5D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '7D',\r\n dataIndex: '7D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }\r\n];\r\n\r\nconst MonotonicBySectorColumns = [\r\n {\r\n title: languageMessages['industry.name'],\r\n dataIndex: 'sectorName'\r\n }, {\r\n title: languageMessages['monotonic(period)'],\r\n children: [\r\n {\r\n title: '1D',\r\n dataIndex: '1D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '3D',\r\n dataIndex: '3D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '5D',\r\n dataIndex: '5D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }, {\r\n title: '7D',\r\n dataIndex: '7D',\r\n render: (text) => {\r\n if (text) {\r\n return <span style={{ color: \"red\" }}>{languageMessages['have']}</span>;\r\n } else {\r\n return <span>{languageMessages['not']}</span>;\r\n }\r\n },\r\n }\r\n ],\r\n }\r\n];\r\n\r\nconst icColumns = [\r\n {\r\n title: '',\r\n dataIndex: 'periodWise'\r\n }, {\r\n title: '1D',\r\n dataIndex: '1D'\r\n }, {\r\n title: '3D',\r\n dataIndex: '3D'\r\n }, {\r\n title: '5D',\r\n dataIndex: '5D'\r\n }, {\r\n title: '7D',\r\n dataIndex: '7D'\r\n }\r\n]\r\n\r\nconst turnoverColumns = [\r\n {\r\n title: '',\r\n dataIndex: 'quantileNum'\r\n }, {\r\n title: '1D',\r\n dataIndex: '1D'\r\n }, {\r\n title: '3D',\r\n dataIndex: '3D'\r\n }, {\r\n title: '5D',\r\n dataIndex: '5D'\r\n }, {\r\n title: '7D',\r\n dataIndex: '7D'\r\n }\r\n]\r\n\r\nclass FactorAnalyzer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.channels = {}\r\n this.charts = {\r\n \"factor-return\": {\r\n \"OverView\": null,\r\n \"AverageRetByQuantile\": null,\r\n \"MonotonicByPeriod\": null,\r\n \"AlphaStrength\": null,\r\n \"CumRet\": null,\r\n \"CumRetByQuantile\": null,\r\n \"MonotonicBySector\": null,\r\n \"RetBySector\": null\r\n }\r\n }\r\n\r\n this.IcValueByPeriodChart = null;\r\n this.IcMeanBySectorChart = null;\r\n this.TurnoverCurveChart = null;\r\n\r\n var defaultSelectedFactorName = \"\"\r\n if (props.factorNames && props.factorNames.length > 0) {\r\n defaultSelectedFactorName = props.factorNames[0]\r\n }\r\n\r\n var resultTaskId = sessionStorage.getItem(\"resultTaskId\") || '0';\r\n this.state = {\r\n selectedFactorCategory: \"factor-return\",\r\n selectedFactorName: defaultSelectedFactorName,\r\n factorNames: this.props.factorNames,\r\n dataSource: [],\r\n resultTaskId: resultTaskId,\r\n monotonicDataSource: [],\r\n MonotonicBySectorDataSource: [],\r\n icDataSource: [],\r\n turnoverDataSource: [],\r\n\r\n spinLoadding: true,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n \r\n init() {// å·¦ä¾§å› å\r\n const { resultTaskId } = this.state\r\n\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n if (resultTaskId > 0) {\r\n this.props.dispatch({ type: \"action_get_factor_list\", payload: { UserName: user.username, TaskId: resultTaskId } })\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { status, state, chartName, factorNames, factorName, factorData } = props;\r\n const { selectedFactorCategory, resultTaskId } = this.state;\r\n \r\n // å°†fetch到的数æ®ï¼Œè£…载到相应的option\r\n if (status === \"data_loaded\") {\r\n switch (selectedFactorCategory) {\r\n case \"factor-return\":\r\n switch (chartName) {\r\n case \"OverView\":\r\n const overview = factorData[chartName]\r\n if (overview != null) {\r\n var data = [];\r\n var index = 1000;\r\n for (var ii in overview) {\r\n var tmp = {\r\n key: index,\r\n factorName: overview[ii].factorName,\r\n periodWise: overview[ii].periodWise,\r\n totalRet: overview[ii].totalRet,\r\n sharpeRatio: overview[ii].sharpeRatio,\r\n annAlpha: overview[ii].annAlpha,\r\n beta: overview[ii].beta\r\n };\r\n data.push(tmp);\r\n\r\n index++\r\n }\r\n this.setState({ dataSource: data })\r\n }\r\n break;\r\n case \"CumRetByQuantile\":\r\n this.charts[\"factor-return\"][chartName] = {}\r\n const labelItem = Object.keys(factorData[chartName])\r\n\r\n for (let i = 0; i < labelItem.length; i++) {\r\n if (labelItem[i] === \"x\") continue\r\n\r\n this.charts[\"factor-return\"][chartName][labelItem[i]] = echarts.init(document.getElementById(chartName + \"-\" + labelItem[i]));\r\n this.charts[\"factor-return\"][chartName][labelItem[i]].setOption(getChartOption(chartName, factorData, labelItem[i]));\r\n }\r\n break;\r\n case \"RetBySector\":\r\n this.charts[\"factor-return\"][chartName] = {}\r\n const nameList = Object.keys(factorData[chartName])\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < nameList.length; i++) {\r\n if (nameList[i] === 'x') continue\r\n\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"50%\"\r\n div.style.height = \"450px\"\r\n\r\n div.setAttribute(\"id\", chartName + \"-\" + i)\r\n pdiv.appendChild(div)\r\n\r\n this.charts[\"factor-return\"][chartName][nameList[i]] = echarts.init(document.getElementById(chartName + \"-\" + i));\r\n this.charts[\"factor-return\"][chartName][nameList[i]].setOption(getChartOption(chartName, factorData, nameList[i]));\r\n }\r\n break;\r\n case \"MonotonicByPeriod\":\r\n const MonotonicItem = factorData[chartName]\r\n\r\n if (MonotonicItem != null) {\r\n var data = [];\r\n\r\n var tmp = {\r\n key: 1,\r\n monotonic: languageMessages['monotonic']\r\n };\r\n\r\n for (var kk in MonotonicItem) {\r\n for (var sk in MonotonicItem[kk]) {\r\n tmp[sk] = MonotonicItem[kk][sk];\r\n }\r\n }\r\n\r\n data.push(tmp);\r\n this.setState({ monotonicDataSource: data })\r\n }\r\n break;\r\n case \"MonotonicBySector\":\r\n const MonotonicBySectorItem = factorData[chartName]\r\n\r\n if (MonotonicBySectorItem != null) {\r\n var data = [];\r\n var index = 10;\r\n for (var kk in MonotonicBySectorItem) {\r\n var tmp = {\r\n key: index,\r\n sectorName: kk\r\n };\r\n\r\n for (var sk in MonotonicBySectorItem[kk]) {\r\n for (var jj in MonotonicBySectorItem[kk][sk]) {\r\n tmp[jj] = MonotonicBySectorItem[kk][sk][jj];\r\n }\r\n }\r\n\r\n data.push(tmp);\r\n\r\n index++;\r\n }\r\n this.setState({ MonotonicBySectorDataSource: data })\r\n }\r\n break;\r\n default:\r\n this.charts[\"factor-return\"][chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[\"factor-return\"][chartName].setOption(getChartOption(chartName, factorData));\r\n break;\r\n }\r\n break;\r\n case \"factor-indicate\":\r\n if (factorData.IcValueByPeriodItem != null) {\r\n this.IcValueByPeriodChart = echarts.init(document.getElementById(\"IcValueByPeriod\"));\r\n this.IcValueByPeriodChart.setOption(getChartOption(\"IcValueByPeriod\", factorData.IcValueByPeriodItem));\r\n }\r\n\r\n if (factorData.IcStatsItem != null) {\r\n var dd = [];\r\n var index = 2000;\r\n for (var kk in factorData.IcStatsItem) {\r\n var tmp = {\r\n key: index,\r\n periodWise: kk,\r\n };\r\n for (var sk in factorData.IcStatsItem[kk]) {\r\n for (var jj in factorData.IcStatsItem[kk][sk]) {\r\n tmp[jj] = factorData.IcStatsItem[kk][sk][jj];\r\n }\r\n }\r\n dd.push(tmp);\r\n index++;\r\n }\r\n this.setState({ icDataSource: dd })\r\n }\r\n\r\n if (factorData.IcMeanBySectorItem != null) {\r\n this.IcMeanBySectorChart = echarts.init(document.getElementById(\"IcMeanBySector\"));\r\n this.IcMeanBySectorChart.setOption(getChartOption(\"IcMeanBySector\", factorData.IcMeanBySectorItem));\r\n }\r\n\r\n break;\r\n case \"factor-turnover\":\r\n if (factorData.FactorMeanOutPctItem != null) {\r\n var dd = [];\r\n var index = 3000;\r\n for (var kk in factorData.FactorMeanOutPctItem) {\r\n var tmp = {\r\n key: index,\r\n quantileNum: kk,\r\n };\r\n for (var sk in factorData.FactorMeanOutPctItem[kk]) {\r\n for (var jj in factorData.FactorMeanOutPctItem[kk][sk]) {\r\n tmp[jj] = factorData.FactorMeanOutPctItem[kk][sk][jj];\r\n }\r\n }\r\n dd.push(tmp);\r\n index++;\r\n }\r\n\r\n this.setState({ turnoverDataSource: dd })\r\n }\r\n if (factorData.FactorRankingCorrItem != null) {\r\n this.TurnoverCurveChart = echarts.init(document.getElementById(\"TurnoverCurve\"));\r\n this.TurnoverCurveChart.setOption(getChartOption(\"TurnoverCurve\", factorData.FactorRankingCorrItem));\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n this.channels[factorName][selectedFactorCategory] = true;\r\n\r\n /**\r\n var _this = this;\r\n window.onresize = function () {\r\n if (_this.charts[\"factor-return\"][\"AverageRetByQuantile\"] != null)\r\n _this.charts[\"factor-return\"][\"AverageRetByQuantile\"].resize();\r\n if (_this.charts[\"factor-return\"][\"AlphaStrength\"] != null)\r\n _this.charts[\"factor-return\"][\"AlphaStrength\"].resize();\r\n if (_this.charts[\"factor-return\"][\"CumRet\"] != null)\r\n _this.charts[\"factor-return\"][\"CumRet\"].resize();\r\n\r\n if (_this.IcValueByPeriodChart != null) _this.IcValueByPeriodChart.resize();\r\n if (_this.IcMeanBySectorChart != null) _this.IcMeanBySectorChart.resize();\r\n\r\n if (_this.TurnoverCurveChart != null) _this.TurnoverCurveChart.resize();\r\n }\r\n */\r\n\r\n //å‘出事件,表明数æ®å·²ç»æ¸²æŸ“到å‰ç«¯\r\n //props.dispatch({ type: \"empty_status\" })\r\n\r\n this.setState({ spinLoadding: false });\r\n } else if (status === \"factor_list_loaded\") {\r\n if (factorNames == null) {\r\n this.setState({ factorNames: [], selectedFactorName: '', spinLoadding: false })\r\n } else {\r\n this.setState({\r\n factorNames,\r\n selectedFactorName: factorNames[0]\r\n });\r\n\r\n var chartNameList = Object.keys(this.charts[\"factor-return\"])\r\n props.dispatch({ type: \"action_get_factor_return\", payload: { taskId: resultTaskId, chartNames: chartNameList, factorName: factorNames[0] } })\r\n\r\n this.channels[factorNames[0]] = {};\r\n }\r\n //props.dispatch({ type: \"empty_status\" })\r\n } else if (status === \"factor_list_failed\") {\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n }\r\n }\r\n\r\n renderTabContent = (selectedKey) => {\r\n switch (selectedKey) {\r\n case \"factor-return\":\r\n const { dataSource, monotonicDataSource, MonotonicBySectorDataSource } = this.state\r\n var t1 = (<div><p>å„åˆ†ä½æ•°å¹³å‡æ”¶ç›Šï¼š</p>\r\n <p>图形说明:把æ¯ä¸ªäº¤æ˜“æ—¥çš„å› å值分æˆ5个分ä½ï¼ˆåˆ†ä½å€¼ä¸Žå› åå€¼æˆæ£æ¯”ï¼‰ï¼Œç„¶åŽæŠŠæ‰€æœ‰äº¤æ˜“æ—¥ç›¸åŒåˆ†ä½è¿›è¡Œgroup,计算该groupä¸çš„平凿”¶ç›Šã€‚</p>\r\n <p>æ³¨ï¼šå½“è‚¡ç¥¨å› å值和其对应forward returnæˆè´Ÿç›¸å…³æ—¶ï¼Œquantile_5ä¸çš„平凿”¶ç›Šå而比quantile_1çš„å¹³å‡æ”¶ç›Šä½Žï¼Œè¿™æ˜¯æ£å¸¸çŽ°è±¡ã€‚</p>\r\n <p>呈å•调性的数æ®ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>)\r\n var t2 = (<div><p>å› åAlpha强度:</p>\r\n <p>图形说明:把æ¯ä¸ªäº¤æ˜“æ—¥çš„å› å值分æˆ5个分ä½ï¼ˆåˆ†ä½å€¼ä¸Žå› åå€¼æˆæ£æ¯”ï¼‰ï¼ŒåŒæ—¶è®¡ç®—quantile_5ä¸è‚¡ç¥¨çš„平凿”¶ç›Šä¸Žquantile_1ä¸è‚¡ç¥¨çš„平凿”¶ç›Šä¹‹å·®ï¼Œç„¶åŽå°†è¯¥åºåˆ—进行构图。</p>\r\n <p>æ³¨ï¼šå› ä¸ºåˆ†ä½å€¼æ˜¯æŒ‰å› å值进行quantileçš„ï¼Œå½“å› å值大的股票对应的forward returnåè€Œå°æ—¶ï¼Œè¯¥å›¾å°±ä¼šå‡ºçŽ°è´Ÿæ•°ï¼Œè¿™æ˜¯æ£å¸¸çŽ°è±¡ã€‚</p>\r\n <p>始终在0è½´ä¹‹ä¸Šæˆ–ä¹‹ä¸‹ï¼ŒåŒæ—¶ç»å¯¹å€¼è¶Šå¤§è¶Šå¥½ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>);\r\n var t3 = (<div><p>å› å累计收益:</p>\r\n <p>å›¾å½¢è¯´æ˜Žï¼šè®¡ç®—æ¯æ—¥æŒä»“的累计收益。</p>\r\n <p>ç´¯è®¡æ”¶ç›Šè¶Šå¤§è¶Šå¥½ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>);\r\n var t4 = (<div><p>分ä½åˆ†ç»„累计累计收益:</p>\r\n <p>图形说明:考察 1Dã€3Dã€5Dã€7D forward returnä¸‹ï¼Œå› å在å„分ä½ä¸‹çš„累计收益。</p>\r\n <p>注:quantile5的累计收益并ä¸ä¸€å®šä¼šæ¯”quantile1的累计收益表现è¦å¥½ã€‚</p></div>);\r\n var t5 = (<div><p>行业内分组收益对比:</p>\r\n <p>ç›®çš„ï¼šæ˜¾ç¤ºå› å在ä¸åŒè¡Œä¸šä¸çš„è¡¨çŽ°ï¼Œè€ƒå¯Ÿå› å在ä¸åŒè¡Œä¸šä¸çš„æœ‰æ•ˆæ€§ã€‚对于ä¸åŒçš„è¡Œä¸šï¼Œè®¡ç®—ç”¨å› ååˆ†ä½æ•°é€‰è‚¡æž„建组åˆå¾—到的平å‡è¶…颿”¶ç›Šï¼›ç›´æ–¹å›¾ä¸ä¸åŒçš„颜色代表ä¸åŒçš„调仓周期。</p>\r\n <p>图形说明:把æ¯ä¸ªäº¤æ˜“æ—¥çš„å› å值分æˆ5个分ä½ï¼Œç„¶åŽæŠŠæ‰€æœ‰äº¤æ˜“æ—¥çš„ç›¸åŒåˆ†ä½groupï¼ŒåŒæ—¶åœ¨è¯¥group䏿Œ‰sector进行group,最åŽè®¡ç®—该groupä¸çš„平凿”¶ç›Šã€‚</p>\r\n <p>æ³¨ï¼šè¯¥æŒ‡æ ‡èƒ½è§‚å¯Ÿå› å在哪个行业更有效。</p>\r\n <p>呈现å•调性的数æ®ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>);\r\n return (<div>\r\n <PageTitle title=\"åˆ†æžæ€»è§ˆ\" position=\"sub\" style={{ marginTop: \"20px\", marginBottom: \"20px\" }}></PageTitle>\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={false} />\r\n\r\n <PageTitle title=\"å„åˆ†ä½æ•°å¹³å‡æ”¶ç›Š\" position=\"sub\" circle={t1} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"AverageRetByQuantile\" style={{ height: \"450px\", marginTop: \"20px\" }} > </div>\r\n <div><b>å„åˆ†ä½æ•°å¹³å‡æ”¶ç›Šå›¾</b>:判æ–å› åçš„å•调性。å•è°ƒæ€§è¶Šæ˜Žæ˜¾çš„å› å,alpha属性越明显。上图表示æŒä»“1ã€3ã€5ã€7天åŽï¼Œå„åˆ†ä½æ•°å¯ä»¥èŽ·å¾—çš„å¹³å‡æ”¶ç›Šã€‚从图ä¸å¯ä»¥çœ‹å‡ºè¯¥å› åçš„å•调性(Monotonic)如下:\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} dataSource={monotonicDataSource} columns={monotonicColumns} pagination={false} />\r\n </div>\r\n\r\n <PageTitle title=\"å› åAlpha强度\" position=\"sub\" circle={t2} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"AlphaStrength\" style={{ height: \"450px\", marginTop: \"20px\" }} > </div>\r\n\r\n <PageTitle title=\"å› å累计收益\" position=\"sub\" circle={t3} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"CumRet\" style={{ height: \"450px\" }} > </div>\r\n <div><b>å› å累计收益曲线</b>:显示组åˆå‡€å€¼æ”¶ç›Šæ›²çº¿ã€‚</div>\r\n\r\n <PageTitle title=\"分ä½åˆ†ç»„累计收益\" position=\"sub\" circle={t4} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"CumRetByQuantile\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} >\r\n <div id=\"CumRetByQuantile-1D\" style={{ width: \"50%\", height: \"400px\" }} ></div>\r\n <div id=\"CumRetByQuantile-3D\" style={{ width: \"50%\", height: \"400px\" }} ></div>\r\n <div id=\"CumRetByQuantile-5D\" style={{ width: \"50%\", height: \"400px\" }} ></div>\r\n <div id=\"CumRetByQuantile-7D\" style={{ width: \"50%\", height: \"400px\" }} ></div>\r\n </div>\r\n \r\n <PageTitle title=\"行业内分组收益对比\" position=\"sub\" circle={t5} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div style={{ marginTop: \"20px\" }}><b>è¡Œä¸šå†…å› åå•调性对比表</b>ï¼šæ˜¾ç¤ºå› å在ä¸åŒè¡Œä¸šä¸æ˜¯å¦æœ‰å•调性(Monotonic) 。å•调性越好,表明该行业的 alpha 属性越强。从下表ä¸å¯ä»¥çœ‹å‡ºè¯¥å› åçš„å•调性(Monotonic)如下:\r\n <Table bordered size='small' dataSource={MonotonicBySectorDataSource} columns={MonotonicBySectorColumns} pagination={false} />\r\n </div>\r\n <div style={{ marginTop: \"20px\" }}><b>行业内分组收益对比图</b>ï¼šæ˜¾ç¤ºå› å在ä¸åŒè¡Œä¸šä¸çš„表现。\r\n <p>ä¸Šé¢ '<b>è¡Œä¸šå†…å› åå•调性对比表</b>' ä¸çš„å› åæ˜¯å¦æœ‰å•调性是从下é¢ä¸€ç³»åˆ—对比图ä¸å¾—出的结果。å•调性越好,表明该行业的 alpha 属性越强。</p>\r\n </div>\r\n <div id=\"RetBySector\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n </div>)\r\n break;\r\n case \"factor-indicate\":\r\n const { icDataSource } = this.state\r\n var t1 = (<div><p>{languageMessages['ic.analysis']}:</p>\r\n <p>目的:信æ¯ç³»æ•°ï¼ˆIC) è¡¡é‡çš„æ˜¯å› å预测股票收益的能力。</p>\r\n <p>图形说明:按照ä¸åŒå‘¨æœŸçš„forward return,将æ¯å¤©çš„IC值进行展示。</p>\r\n <p>始终在0è½´ä¹‹ä¸Šæˆ–ä¹‹ä¸‹ï¼ŒåŒæ—¶ç»å¯¹å€¼è¶Šå¤§è¶Šå¥½çš„æ•°æ®ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>);\r\n var t2 = (<div><p>行业IC分æžï¼š</p>\r\n <p>目的:分行业的ICå‡å€¼ä½œå›¾ï¼Œå¯ä»¥æ˜¾ç¤ºè¯¥å› å在ä¸åŒè¡Œä¸šé‡Œçš„表现,在哪些行业里表现会比较å‡è¡¡ï¼›ä¸åŒçš„颜色代表ä¸åŒçš„调仓周期。</p>\r\n <p>图形说明:将行业进行groupï¼ŒåŒæ—¶è®¡ç®—该行业平å‡ic值。</p></div>);\r\n var t3 = (<div><p>å› åIC统计分æžï¼š</p>\r\n <p>目的:从统计å¦è§’度考察IC的稳定性。</p>\r\n <p>è¡¨æ ¼è¯´æ˜Žï¼šå¯¹ICåºåˆ—åšt-test,对应的Null hypothesis是population meanç‰äºŽ0,å³å¦‚果求出æ¥çš„P-valueå°äºŽè¯¸å¦‚0.05,那么å¯ä»¥reject null hypothesis,å³IC值并ä¸ç‰äºŽ0ï¼Œé‚£ä¹ˆè¯´æ˜Žè¿™ä¸ªå› åæ˜¯æœ‰ä¸€å®šé¢„测能力。</p></div>);\r\n return (<div>\r\n <PageTitle title={languageMessages['ic.analysis']} position=\"sub\" circle={t1} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"IcValueByPeriod\" style={{ height: \"450px\", marginTop: \"20px\" }} > </div>\r\n\r\n <PageTitle title=\"行业IC分æž\" position=\"sub\" circle={t2} style={{ marginTop: \"20px\" }}></PageTitle>\r\n <div id=\"IcMeanBySector\" style={{ height: \"450px\", marginTop: \"20px\" }} > </div>\r\n <div><b>行业IC分æž</b>:分行业的ICå‡å€¼ä½œå›¾ï¼Œå¯ä»¥æ˜¾ç¤ºè¯¥å› å在ä¸åŒè¡Œä¸šé‡Œçš„表现;ä¸åŒçš„颜色代表ä¸åŒçš„调仓周期。</div>\r\n\r\n <PageTitle title=\"å› åIC统计分æž\" position=\"sub\" circle={t3} style={{ marginTop: \"20px\", marginBottom: \"20px\" }}></PageTitle>\r\n <Table bordered size='small' dataSource={icDataSource} columns={icColumns} pagination={false} />\r\n <div><b>å› åæŽ’åºè‡ªç›¸å…³åˆ†æž</b>:从统计å¦è§’度考察IC的稳定性。</div>\r\n </div>)\r\n break;\r\n case \"factor-turnover\":\r\n const { turnoverDataSource } = this.state\r\n var t1 = (<div><p>å› å值自相关性:</p>\r\n <p>目的:通过计算æ¯ä¸ªäº¤æ˜“周期的autocorrelation(rank(factor_values))æ¥è¡¡é‡æ¢æ‰‹çŽ‡ã€‚</p>\r\n <p>图形说明:计算æ¯äº¤æ˜“æ—¥å› å的自相关性。具体地autocorrelation(rank(factor_values)),以5D为例,auto_corr_of_t5 = corr(rank(factor_values_t0), rank(factor_values_t5))。</p>\r\n <p>值越大越好,说明æ¯å¤©çš„调仓数å°ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>);\r\n var t2 = (<div><p>组åˆè°ƒå‡ºçŽ‡ï¼š</p>\r\n <p>目的:通过æ¯ä¸ªä¸åŒäº¤æ˜“周期的ä¸åŒquantile的股票调出率æ¥è¡¡é‡æ¢æ‰‹çŽ‡ã€‚</p>\r\n <p>è¡¨æ ¼è¯´æ˜Žï¼šæŒ‰å› å值以æ¯ä¸ªäº¤æ˜“日为å•ä½è¿›è¡Œ5分ä½ï¼Œç„¶åŽè®¡ç®—æ¯åˆ†ä½ä¸çš„å¹³å‡è°ƒå‡ºçŽ‡ã€‚è°ƒå‡ºçŽ‡è®¡ç®—å…¬å¼ï¼štoday_turnover_ratio = len(set(yesterday_symbols)-set(today_symbols))/len(set(yesterday_symbols))。</p>\r\n <p>值越å°è¶Šå¥½ï¼Œè¯´æ˜Žæ¯å¤©çš„调仓数å°ï¼Œåˆ™è¡¨æ˜Žå› åæœ‰æ•ˆã€‚</p></div>)\r\n return (<div>\r\n <PageTitle title=\"å› å值自相关性\" position=\"sub\" circle={t1} style={{ marginTop: \"20px\", marginBottom: \"20px\" }}></PageTitle>\r\n <div id=\"TurnoverCurve\" style={{ height: \"450px\", marginTop: \"20px\" }} > </div>\r\n <div><b>{languageMessages['turnover.analysis']}</b>:通过计算æ¯ä¸ªäº¤æ˜“周期的autocorrelation(rank(factor_values))æ¥è¡¡é‡æ¢æ‰‹çŽ‡ã€‚</div>\r\n\r\n <PageTitle title=\"组åˆè°ƒå‡ºçއ\" position=\"sub\" circle={t2} style={{ marginTop: \"20px\", marginBottom: \"20px\" }}></PageTitle>\r\n <Table bordered size='small' dataSource={turnoverDataSource} columns={turnoverColumns} pagination={false} />\r\n <div><b>组åˆè°ƒå‡ºçއ</b>:通过æ¯ä¸ªä¸åŒäº¤æ˜“周期的ä¸åŒquantile的股票调出率æ¥è¡¡é‡æ¢æ‰‹çŽ‡ã€‚\r\n <p>è¡¨æ ¼ä¸æ‰€å¯¹åº”值分别为:æ¯1天调一次仓的平å‡è°ƒå‡ºçŽ‡ï¼›æ¯3天调一次仓的平å‡è°ƒå‡ºçŽ‡ï¼›æ¯5天调一次仓的平å‡è°ƒå‡ºçŽ‡ï¼›æ¯7天调一次仓的平å‡è°ƒå‡ºçŽ‡ã€‚</p>\r\n <p>如æ¢ç®—æˆæ¢æ‰‹çŽ‡å€¼ï¼Œåˆ™éœ€å¯¹ä¸åŒè°ƒä»“期的值除以æŒä»“期,å³å¯å¾—到æ¯å¤©çš„æ¢æ‰‹çŽ‡ï¼Œå¦‚ï¼š3D所对应的调仓率æ¢ç®—æˆæ¢æ‰‹çŽ‡ï¼Œåˆ™éœ€æŠŠå…¶å¯¹åº”çš„è°ƒä»“çŽ‡é™¤ä»¥3。</p>\r\n </div>\r\n </div>)\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onSelectFactorCategory = (key) => {//key 为 tab åç§°\r\n const { resultTaskId } = this.state\r\n\r\n if (resultTaskId > 0) {\r\n const { selectedFactorName } = this.state\r\n this.setState({ selectedFactorCategory: key })\r\n\r\n if (!this.channels.hasOwnProperty(selectedFactorName)) this.channels[selectedFactorName] = {};\r\n\r\n if (this.channels[selectedFactorName].hasOwnProperty(key)) {\r\n this.props.dispatch({ type: \"empty_status\" })\r\n } else {\r\n switch (key) {\r\n case \"factor-return\":\r\n var chartNameList = Object.keys(this.charts[\"factor-return\"])\r\n this.props.dispatch({ type: \"action_get_factor_return\", payload: { taskId: resultTaskId, chartNames: chartNameList, factorName: this.state.selectedFactorName || this.state.factorNames[0] } })\r\n break;\r\n case \"factor-indicate\":\r\n this.props.dispatch({ type: \"action_get_factor_indicate\", payload: { taskId: resultTaskId, factorName: this.state.selectedFactorName || this.state.factorNames[0] } })\r\n break;\r\n case \"factor-turnover\":\r\n this.props.dispatch({ type: \"action_get_factor_turnover\", payload: { taskId: resultTaskId, factorName: this.state.selectedFactorName || this.state.factorNames[0] } })\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n onSelectFactorName = ({ key }) => {\r\n this.channels = {}\r\n this.setState({ selectedFactorName: key }, () => this.onSelectFactorCategory(this.state.selectedFactorCategory))\r\n }\r\n\r\n onBack = e => {\r\n e.preventDefault();\r\n history.goBack();\r\n }\r\n\r\n render() {\r\n let { selectedFactorName, factorNames } = this.state\r\n\r\n return (<Content className='main-container'>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader onBack={this.onBack} backIcon={(<Icon type=\"left\" />)}\r\n title={(<span style={{ cursor: 'pointer' }} onClick={this.onBack}>{languageMessages['factor.analysis']}</span>)} />\r\n </div>\r\n <Layout className='main-content'>\r\n <Sider width={200}>\r\n <PageHeader className='common-sider-header' title={languageMessages['factorName']} />\r\n <Divider />\r\n <div className=\"common-sider-content\">\r\n {factorNames != null && (<Menu mode=\"inline\" inlineIndent={50}\r\n selectedKeys={[selectedFactorName]}\r\n onSelect={this.onSelectFactorName} >\r\n {factorNames.map((item => <Menu.Item key={item}>{item}</Menu.Item>))}\r\n </Menu>)}\r\n </div>\r\n </Sider>\r\n <Layout className='common-content'>\r\n <div className=\"card-container factor-analyzer\">\r\n <Tabs type=\"card\" defaultActiveKey=\"factor-return\" onChange={this.onSelectFactorCategory}>\r\n <TabPane tab={<span>{languageMessages['rate.of.return.analysis']}</span>} key=\"factor-return\">\r\n {this.renderTabContent(\"factor-return\")}\r\n </TabPane>\r\n <TabPane tab={<span>{languageMessages['ic.analysis']}</span>} key=\"factor-indicate\">\r\n {this.renderTabContent(\"factor-indicate\")}\r\n </TabPane>\r\n <TabPane tab={<span>{languageMessages['turnover.analysis']}</span>} key=\"factor-turnover\">\r\n {this.renderTabContent(\"factor-turnover\")}\r\n </TabPane>\r\n </Tabs>\r\n </div>\r\n </Layout>\r\n </Layout>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n \r\nfunction mapStateToProps(state) {\r\n return state.factor;\r\n}\r\n\r\nFactorAnalyzer.defaultProps = {\r\n factorNames: []\r\n}\r\n\r\nconst page = connect(mapStateToProps)(FactorAnalyzer);\r\n\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, Form, Input, Select, PageHeader, Tabs, Table, AutoComplete, Button, Divider, Spin, message } from 'antd';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst { TabPane } = Tabs;\r\nconst { Option } = AutoComplete;\r\nconst Options = Select.Option;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass IndexPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n spinLoadding: true,\r\n\r\n tDataSource: [],\r\n cDataSource: [],\r\n sDataSource: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n dayline: '1',\r\n min60line: '1',\r\n\r\n dayline01: '',\r\n dayline02: '',\r\n min60line01: '',\r\n min60line02: '',\r\n\r\n symbolStatus: '',\r\n symbolMessage: '',\r\n\r\n daylineMode: 0,\r\n min60lineMode: 0,\r\n\r\n sectorItems: [],\r\n symbolItems: [],\r\n\r\n currentSelectKey: '',\r\n\r\n sactorCategoryRowId: '-1',\r\n sactorRowId: '-1',\r\n \r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n \r\n }\r\n */\r\n this.props.dispatch({ type: \"action_region_sector\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, sectorItems, symbolItems } = props;\r\n\r\n switch (status) {\r\n case 'get_region_sector_success':\r\n sectorItems = sectorItems === undefined || sectorItems === null ? [] : sectorItems;\r\n\r\n var tDataSource = [];\r\n var cDataSource = [];\r\n var sDataSource = [];\r\n\r\n var sactorRowId = '-1';\r\n var sactorCategoryRowId = '-1'\r\n var currentSelectKey = '2';\r\n if (sectorItems.length > 0) {\r\n let tmpSectorItems = sectorItems[0];\r\n currentSelectKey = tmpSectorItems.id;\r\n currentSelectKey = currentSelectKey.toString();\r\n\r\n var index = 1;\r\n var sectorList = tmpSectorItems.rs === undefined || tmpSectorItems.rs === null ? [] : tmpSectorItems.rs;\r\n for (var i = 0; i < sectorList.length; i++) {\r\n if (i === 0) {\r\n var subIndex = 1;\r\n var tmpSymbols = sectorList[i].s;\r\n for (var j = 0; j < tmpSymbols.length; j++) {\r\n if (j === 0) {\r\n sactorRowId = subIndex;\r\n }\r\n cDataSource.push({\r\n key: subIndex,\r\n sequence: subIndex,\r\n stockCode: tmpSymbols[j],\r\n quoteChange: 1.8,\r\n });\r\n\r\n subIndex++;\r\n }\r\n\r\n sactorCategoryRowId = sectorList[i].id;\r\n }\r\n\r\n tDataSource.push({\r\n key: sectorList[i].id,\r\n sequence: index,\r\n name: sectorList[i].n,\r\n quoteChange: 1.8,\r\n volumeRatio: 1.5,\r\n riseSpeed: 0.1,\r\n riseNumber: 10,\r\n fallNumber: 20,\r\n tradeAmount: 1000,\r\n increase5day: 10,\r\n increase10day: 20,\r\n increase20day: 20,\r\n });\r\n\r\n index++;\r\n }\r\n }\r\n\r\n this.setState({ sectorItems, tDataSource, cDataSource, currentSelectKey, sactorCategoryRowId, sactorRowId, spinLoadding: false }, () => {\r\n var record = tDataSource[0]\r\n var tmpRecord = tDataSource.filter(function (n) { return n.key === sactorCategoryRowId });\r\n if (tmpRecord.length > 0) {\r\n record = tmpRecord[0];\r\n }\r\n this.setRowClassName(record);\r\n\r\n record = cDataSource[0];\r\n tmpRecord = cDataSource.filter(function (n) { return n.key === sactorRowId });\r\n if (tmpRecord.length > 0) {\r\n record = tmpRecord[0];\r\n }\r\n\r\n this.setSymbolRowClassName(record);\r\n });\r\n break;\r\n case 'get_region_sector_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n var symbolItems = symbolItems;\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n });\r\n }\r\n }\r\n\r\n handleDayLineChange = value => {\r\n let dayline = value.key;\r\n let daylineMode = dayline === '0' ? 1 : 0;\r\n this.setState({ dayline, daylineMode });\r\n }\r\n\r\n handleMin60LineChange = value => {\r\n let min60line = value.key;\r\n let min60lineMode = min60line === '0' ? 1 : 0;\r\n this.setState({ min60line, min60lineMode });\r\n }\r\n\r\n handleDayLineBack = () => {\r\n this.setState({ dayline: '1', daylineMode: 0 });\r\n }\r\n\r\n handleMin60lineModeBack = () => {\r\n this.setState({ min60line: '1', min60lineMode: 0 });\r\n }\r\n\r\n handleNumberChange = e => {\r\n let intLen = 1;\r\n let decimalLen = 2;\r\n\r\n var less = '';\r\n var number = e.target.value;\r\n var n = number.match(\"^-\");\r\n if (n !== null && n.length > 0) {\r\n less = n[0];\r\n }\r\n\r\n if (number.indexOf('.') === 0) {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n }\r\n number = number.replace(/[^\\d.]/g, \"\");\r\n number = number.replace(/\\.{2,3}/g, \".\");\r\n number = number.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n\r\n if (number.indexOf('.') < 0) {\r\n if (number.length > intLen) number = number.slice(0, intLen);\r\n\r\n if (number !== '') number = parseInt(number);\r\n if (number > 1) number = 1;\r\n } else {\r\n var tmpNumber = number.split('.');\r\n var tmpNum00 = tmpNumber[0];\r\n if (tmpNum00.length > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n\r\n if (tmpNum00 !== '') tmpNum00 = parseInt(tmpNum00);\r\n if (tmpNum00 > 1) tmpNum00 = 1;\r\n\r\n var tmpNum01 = tmpNumber[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n if (tmpNum00 === 1) {\r\n var len = tmpNum01.length;\r\n if (len === 2) {\r\n number = tmpNum00 + '.00';\r\n } else if (len === 1) {\r\n number = tmpNum00 + '.0';\r\n } else {\r\n number = tmpNum00;\r\n }\r\n } else {\r\n number = tmpNum00 + '.' + tmpNum01;\r\n }\r\n }\r\n\r\n let tags = e.target.getAttribute('data-value');\r\n var tmpParams = {};\r\n tmpParams[tags] = less + '' + number;\r\n this.setState(tmpParams);\r\n };\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n var number = e.target.value;\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n if (number === '-') number = '-0';\r\n number = number + '.00';\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (len === 0) {\r\n number = number + '00';\r\n } else if (len === 1) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n\r\n let tags = e.target.getAttribute('data-value');\r\n var tmpParams = {};\r\n tmpParams[tags] = number;\r\n this.setState(tmpParams);\r\n }\r\n\r\n setRowClassName = (record) => {\r\n if (record === undefined) return '';\r\n return record.key.toString() === this.state.sactorCategoryRowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n setSymbolRowClassName = (record) => {\r\n if (record === undefined) return '';\r\n return record.key.toString() === this.state.sactorRowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n selectSactorCategoryRow = (record) => {\r\n let { currentSelectKey } = this.state;\r\n \r\n let sactorCategoryRowId = record.key.toString();\r\n let sactorRowId = '-1';\r\n this.getDatabase(currentSelectKey, sactorCategoryRowId, sactorRowId);\r\n }\r\n\r\n selectSactorRow = (record) => {\r\n let { currentSelectKey, sactorCategoryRowId } = this.state;\r\n \r\n let sactorRowId = record.key.toString();\r\n\r\n this.getDatabase(currentSelectKey, sactorCategoryRowId, sactorRowId);\r\n }\r\n\r\n handleChangeSector = (currentSelectKey) => {\r\n let sactorCategoryRowId = '-1';\r\n let sactorRowId = '-1';\r\n this.getDatabase(currentSelectKey, sactorCategoryRowId, sactorRowId);\r\n }\r\n\r\n getDatabase(currentSelectKey, sactorCategoryRowId, sactorRowId) {\r\n let { sectorItems } = this.state;\r\n // åˆ‡æ¢æ•°æ®\r\n\r\n var tDataSource = [];\r\n var cDataSource = [];\r\n var sDataSource = [];\r\n\r\n var items = sectorItems.filter(function (v) { return v.id === parseInt(currentSelectKey) });\r\n\r\n if (items.length > 0) {\r\n let tmpSectorItems = items[0];\r\n currentSelectKey = tmpSectorItems.id;\r\n currentSelectKey = currentSelectKey.toString();\r\n\r\n var index = 1;\r\n var sectorList = tmpSectorItems.rs === undefined || tmpSectorItems.rs === null ? [] : tmpSectorItems.rs;\r\n for (var i = 0; i < sectorList.length; i++) {\r\n if (sactorCategoryRowId === '-1') sactorCategoryRowId = sectorList[i].id;\r\n\r\n if (sectorList[i].id === parseInt(sactorCategoryRowId)) {\r\n var subIndex = 1;\r\n var tmpSymbols = sectorList[i].s;\r\n for (var j = 0; j < tmpSymbols.length; j++) {\r\n if (sactorRowId === '-1') sactorRowId = subIndex;\r\n\r\n cDataSource.push({\r\n key: subIndex,\r\n sequence: subIndex,\r\n stockCode: tmpSymbols[j],\r\n quoteChange: 1.8,\r\n });\r\n\r\n subIndex++;\r\n }\r\n }\r\n\r\n tDataSource.push({\r\n key: sectorList[i].id,\r\n sequence: index,\r\n name: sectorList[i].n,\r\n quoteChange: 1.8,\r\n volumeRatio: 1.5,\r\n riseSpeed: 0.1,\r\n riseNumber: 10,\r\n fallNumber: 20,\r\n tradeAmount: 1000,\r\n increase5day: 10,\r\n increase10day: 20,\r\n increase20day: 20,\r\n });\r\n\r\n index++;\r\n }\r\n }\r\n\r\n this.setState({ tDataSource, cDataSource, currentSelectKey, sactorCategoryRowId, sactorRowId }, () => {\r\n var record = tDataSource[0]\r\n var tmpRecord = tDataSource.filter(function (n) { return n.key === sactorCategoryRowId });\r\n if (tmpRecord.length > 0) {\r\n record = tmpRecord[0];\r\n }\r\n this.setRowClassName(record);\r\n\r\n record = cDataSource[0];\r\n tmpRecord = cDataSource.filter(function (n) { return n.key === sactorRowId });\r\n if (tmpRecord.length > 0) {\r\n record = tmpRecord[0];\r\n }\r\n this.setSymbolRowClassName(record);\r\n });\r\n }\r\n\r\n renderOption = (group) => {\r\n return <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n }\r\n\r\n render() {\r\n var { tDataSource, cDataSource, sDataSource, symbolItems, symbolCode } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n let tColumns = [];\r\n let cColumns = [];\r\n let sColumns = [];\r\n\r\n let sequence = {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50,\r\n fixed: 'left',\r\n }\r\n\r\n tColumns.push(sequence);\r\n cColumns.push(sequence);\r\n sColumns.push(sequence);\r\n\r\n let name = {\r\n title: 'åç§°',\r\n dataIndex: 'name',\r\n width: 150,\r\n sorter: (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n fixed: 'left',\r\n };\r\n\r\n let stockcode = {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'stockCode',\r\n width: 120,\r\n sorter: (a, b) => a.stockCode < b.stockCode ? -1 : a.stockCode > b.stockCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n fixed: 'left',\r\n };\r\n\r\n let stockname = {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'stockName',\r\n width: 120,\r\n sorter: (a, b) => a.stockName < b.stockName ? -1 : a.stockName > b.stockName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n fixed: 'left',\r\n };\r\n\r\n let overallrating = {\r\n title: '综åˆè¯„分',\r\n dataIndex: 'overallRating',\r\n width: 100,\r\n sorter: (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n fixed: 'left',\r\n };\r\n\r\n let corrcoefficient = {\r\n title: '相关系数',\r\n dataIndex: 'corrCoefficient',\r\n width: 100,\r\n sorter: (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n fixed: 'left',\r\n };\r\n let quotechange = {\r\n title: languageMessages['quote.change'],\r\n dataIndex: 'quoteChange',\r\n sorter: (a, b) => a.quoteChange - b.quoteChange,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n };\r\n let latest = {\r\n title: languageMessages['latest.price'],\r\n dataIndex: 'price',\r\n sorter: (a, b) => a.price - b.price,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n return <span>{text}</span>;\r\n },\r\n };\r\n\r\n let risefall = {\r\n title: '涨跌',\r\n dataIndex: 'riseFall',\r\n sorter: (a, b) => a.riseFall - b.riseFall,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let volumeratio = {\r\n title: '釿¯”',\r\n dataIndex: 'volumeRatio',\r\n sorter: (a, b) => a.volumeRatio - b.volumeRatio,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n let risespeed = {\r\n title: '涨速',\r\n dataIndex: 'riseSpeed',\r\n sorter: (a, b) => a.riseSpeed - b.riseSpeed,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n let risenumber = {\r\n title: '涨家数',\r\n dataIndex: 'riseNumber',\r\n sorter: (a, b) => a.riseNumber - b.riseNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n let fallnumber = {\r\n title: '跌家数',\r\n dataIndex: 'fallNumber',\r\n sorter: (a, b) => a.fallNumber - b.fallNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n let tradeamount = {\r\n title: 'æˆäº¤é¢',\r\n dataIndex: 'tradeAmount',\r\n sorter: (a, b) => a.tradeAmount - b.tradeAmount,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let increase5day = {\r\n title: '5日涨幅',\r\n dataIndex: 'increase5day',\r\n sorter: (a, b) => a.increase5day - b.increase5day,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n };\r\n\r\n let increase10day = {\r\n title: '10日涨幅',\r\n dataIndex: 'increase10day',\r\n sorter: (a, b) => a.increase10day - b.increase10day,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n };\r\n\r\n let increase20day = {\r\n title: '20日涨幅',\r\n dataIndex: 'increase20day',\r\n sorter: (a, b) => a.increase20day - b.increase20day,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n };\r\n\r\n let totalmarketvalue = {\r\n title: '总市值',\r\n dataIndex: 'totalMarketValue',\r\n sorter: (a, b) => a.totalMarketValue - b.totalMarketValue,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let circulationmarketvalue = {\r\n title: 'æµé€šå¸‚值',\r\n dataIndex: 'circulationMarketValue',\r\n sorter: (a, b) => a.circulationMarketValue - b.circulationMarketValue,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n \r\n let turnoverrate = {\r\n title: 'æ¢æ‰‹çއ%',\r\n dataIndex: 'turnoverRate',\r\n sorter: (a, b) => a.turnoverRate < b.turnoverRate,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let amplitude = {\r\n title: '振幅%',\r\n dataIndex: 'amplitude',\r\n sorter: (a, b) => a.amplitude < b.amplitude,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let PERatio = {\r\n title: '市盈率(动)',\r\n dataIndex: 'PERatio',\r\n sorter: (a, b) => a.PERatio - b.PERatio,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let tallest = {\r\n title: '最高',\r\n dataIndex: 'tallest',\r\n sorter: (a, b) => a.tallest - b.tallest,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n let lowest = {\r\n title: '最低',\r\n dataIndex: 'lowest',\r\n sorter: (a, b) => a.lowest - b.lowest,\r\n sortDirections: ['descend', 'ascend'],\r\n };\r\n\r\n\r\n sColumns.push(stockcode);\r\n sColumns.push(stockname);\r\n sColumns.push(overallrating);\r\n sColumns.push(corrcoefficient);\r\n sColumns.push(quotechange);\r\n sColumns.push(latest);\r\n sColumns.push(risefall);\r\n sColumns.push(volumeratio);\r\n sColumns.push(risespeed);\r\n sColumns.push(tradeamount);\r\n sColumns.push(increase5day);\r\n sColumns.push(increase10day);\r\n sColumns.push(increase20day);\r\n sColumns.push(totalmarketvalue);\r\n sColumns.push(circulationmarketvalue);\r\n sColumns.push(turnoverrate);\r\n sColumns.push(amplitude);\r\n sColumns.push(PERatio);\r\n sColumns.push(tallest);\r\n sColumns.push(lowest);\r\n\r\n\r\n \r\n\r\n let tmpquotechange = {\r\n title: languageMessages['quote.change'],\r\n dataIndex: 'quoteChange',\r\n sorter: (a, b) => a.quoteChange - b.quoteChange,\r\n align: 'right',\r\n width: 100,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text) => {\r\n if (text >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n fixed: 'left',\r\n };\r\n let tmplatest = {\r\n title: languageMessages['latest.price'],\r\n dataIndex: 'price',\r\n sorter: (a, b) => a.price - b.price,\r\n align: 'right',\r\n width: 100,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row) => {\r\n return <span>{text}</span>;\r\n },\r\n fixed: 'left',\r\n };\r\n\r\n tColumns.push(name);\r\n \r\n tColumns.push(tmpquotechange);\r\n\r\n tColumns.push(volumeratio);\r\n tColumns.push(risespeed);\r\n tColumns.push(risenumber);\r\n tColumns.push(fallnumber);\r\n tColumns.push(tradeamount);\r\n tColumns.push(increase5day);\r\n tColumns.push(increase10day);\r\n tColumns.push(increase20day);\r\n\r\n\r\n cColumns.push(stockcode);\r\n cColumns.push(stockname);\r\n\r\n cColumns.push(tmpquotechange);\r\n cColumns.push(tmplatest);\r\n\r\n cColumns.push(risefall);\r\n cColumns.push(volumeratio);\r\n cColumns.push(risespeed);\r\n cColumns.push(tradeamount);\r\n cColumns.push(increase5day);\r\n cColumns.push(increase10day);\r\n cColumns.push(increase20day);\r\n cColumns.push(totalmarketvalue);\r\n cColumns.push(circulationmarketvalue);\r\n cColumns.push(turnoverrate);\r\n cColumns.push(amplitude);\r\n cColumns.push(PERatio);\r\n cColumns.push(tallest);\r\n cColumns.push(lowest);\r\n\r\n //var sector = [{ 'id': 2, 'name': '概念' }, { 'id': 5, 'name': 'è¯ç›‘会行业' }, { 'id': 7, 'name': '指数æ¿å—'}];\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['correlation.query']}</h1>)} />\r\n </div>\r\n <Layout className='main-tabs-content'>\r\n <div className='common-title'><Divider type=\"vertical\" />{'沪深市场'}</div>\r\n \r\n <div className=\"card-container common-tabs\">\r\n <Tabs activeKey={this.state.currentSelectKey} type=\"card\" onChange={this.handleChangeSector}>\r\n {this.state.sectorItems.map(item => (\r\n <TabPane tab={`${item.n}`} key={`${item.id}`}>\r\n <Table bordered size='small'\r\n columns={tColumns}\r\n dataSource={tDataSource}\r\n rowClassName={this.setRowClassName}\r\n onRow={(record) => ({\r\n onClick: () => {\r\n this.selectSactorCategoryRow(record);\r\n },\r\n })} scroll={{ x: 950 }} pagination={{ defaultPageSize: 8 }} />\r\n\r\n <div className='common-title'>{'注册制次新股 æ¿å—共有 35 åªä¸ªè‚¡'}</div>\r\n\r\n <Table bordered size='small'\r\n columns={cColumns}\r\n dataSource={cDataSource}\r\n rowClassName={this.setSymbolRowClassName}\r\n onRow={(record) => ({\r\n onClick: () => {\r\n this.selectSactorRow(record);\r\n },\r\n })} scroll={{ x: 1950 }} pagination={{ defaultPageSize: 8 }} />\r\n </TabPane>\r\n ))}\r\n </Tabs>\r\n </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{'相关性查询'}</div>\r\n <div>\r\n\r\n <Form labelAlign={'left'} layout=\"inline\">\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} validateStatus={this.state.symbolStatus} help={this.state.symbolMessage} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(this.renderOption)}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterStockName-Symbol']}\r\n optionLabelProp=\"value\">\r\n </AutoComplete>\r\n </Form.Item>\r\n <Form.Item colon={false} style={{ marginBottom: 0 }}>\r\n <b>{'相关性'}</b>\r\n </Form.Item>\r\n <Form.Item colon={false} label={'日线'} validateStatus={this.state.tradeQuantityStatus} help={this.state.tradeQuantityMessage} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <div style={{ display: this.state.daylineMode === 0 ? '' : 'none' }}>\r\n <Select labelInValue size='small' style={{ width: '120px' }} value={{ key: this.state.dayline }}\r\n onChange={this.handleDayLineChange}>\r\n <Options key='1'>{'高度æ£ç›¸å…³'}</Options>\r\n <Options key='2'>{'高度负相关'}</Options>\r\n <Options key='3'>{'低度相关'}</Options>\r\n <Options key='4'>{'ä¸ç›¸å…³'}</Options>\r\n <Options key='0'>{'自定义相关性'}</Options>\r\n </Select>\r\n </div>\r\n <div style={{ display: this.state.daylineMode === 0 ? 'none' : '' }}>\r\n <Input size=\"small\" style={{ width: 80 }} value={this.state.dayline01} data-value='dayline01' onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} />\r\n <span style={{ padding:'0 10px' }}>至</span>\r\n <Input size=\"small\" style={{ width: 80 }} value={this.state.dayline02} data-value='dayline02' onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} />\r\n <span style={{ padding: '0 5px' }}></span>\r\n <Button size=\"small\" onClick={this.handleDayLineBack}>{'返回'}</Button>\r\n </div>\r\n </Form.Item>\r\n <Form.Item colon={false} label={'60分钟线'} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <div style={{ display: this.state.min60lineMode === 0 ? '' : 'none' }}>\r\n <Select labelInValue size='small' style={{ width: '120px' }} value={{ key: this.state.min60line }}\r\n onChange={this.handleMin60LineChange}>\r\n <Options key='1'>{'高度æ£ç›¸å…³'}</Options>\r\n <Options key='2'>{'高度负相关'}</Options>\r\n <Options key='3'>{'低度相关'}</Options>\r\n <Options key='4'>{'ä¸ç›¸å…³'}</Options>\r\n <Options key='0'>{'自定义相关性'}</Options>\r\n </Select>\r\n </div>\r\n <div style={{ display: this.state.min60lineMode === 0 ? 'none' : '' }}>\r\n <Input size=\"small\" style={{ width: 80 }} value={this.state.min60line01} data-value='min60line01' onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} />\r\n <span style={{ padding: '0 10px' }}>至</span>\r\n <Input size=\"small\" style={{ width: 80 }} value={this.state.min60line02} data-value='min60line02' onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} />\r\n <span style={{ padding: '0 5px' }}></span>\r\n <Button size=\"small\" onClick={this.handleMin60lineModeBack}>{'返回'}</Button>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n <div style={{ padding: '0', height: '40px' }}>\r\n <Button size='small' onClick={this.handleSubmit} disabled={true}>\r\n {'查询'}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <div className='common-title'>{'æ ¹æ®è®¾ç½®ï¼Œå…±æŸ¥è¯¢åˆ° 2 åªè‚¡ç¥¨'}</div>\r\n <Table bordered size='small'\r\n columns={sColumns}\r\n dataSource={sDataSource}\r\n scroll={{ x: 2150 }} pagination={{ defaultPageSize: 8 }} />\r\n </Layout>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.correlation;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(IndexPage);\r\nexport { page as default }","var statisticsOption = {\r\n legend: {\r\n data: [],\r\n bottom: 0,\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n },\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n title: {\r\n left: 'center',\r\n text: '',\r\n top: 10\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: { show: false },\r\n axisLabel: { interval: 0, rotate: 30 },\r\n data: []\r\n //data: [1,2,3,4,5]\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: '',\r\n minInterval: 0\r\n },\r\n series: [{\r\n type: 'bar',\r\n barWidth: '5%',\r\n label: {\r\n show: true,\r\n position: 'top',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n color: '',\r\n markPoint: {\r\n symbol: 'pin',\r\n symbolSize: 1,\r\n itemStyle: { color: '#fff' },\r\n label: { rotate: 90, color: '#fff' },\r\n data: []\r\n },\r\n data: []\r\n //data: [1000, 700, 800, 600, 780]\r\n }]\r\n};\r\n\r\nexport { statisticsOption }","var equityOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n\r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: { color: '#666' },\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n min: 0,\r\n max: 1100000,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: \"\"\r\n }],\r\n\r\n series: [\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n itemStyle: {\r\n normal: {\r\n color: '#CE0000'\r\n }\r\n },\r\n symbol: 'none',\r\n markLine: {\r\n symbol: 'none',\r\n label: {\r\n position: 'end'\r\n },\r\n silent: true,\r\n data: [{\r\n yAxis: 1000000.00,\r\n lineStyle: {\r\n color: '#FF8000'\r\n }\r\n }]\r\n },\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: 'Darkgreen'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: '#90EE90'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n\r\nexport { equityOption }","var incomeOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n \r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLine: {\r\n show: true,\r\n onZero: false,\r\n lineStyle: {\r\n color: '666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: ''\r\n }],\r\n\r\n series: []\r\n};\r\n\r\nexport { incomeOption }","var fundsOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n axisPointer: {\r\n type: 'cross'\r\n },\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 22,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n \r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLine: {\r\n show: true,\r\n onZero: false,\r\n lineStyle: {\r\n color: '666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n /**\r\n axisPointer: {\r\n snap: true\r\n },\r\n */\r\n name: ''\r\n }],\r\n\r\n series: []\r\n};\r\n\r\nexport { fundsOption }","import { statisticsOption } from './statistics'\r\nimport { equityOption } from './equity'\r\nimport { incomeOption } from './income'\r\nimport { fundsOption } from './funds'\r\n\r\nfunction deepCopy(obj, cache = []) {\r\n function find(list, f) {\r\n return list.filter(f)[0]\r\n }\r\n\r\n // just return if obj is immutable value\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n // if obj is hit, it is in circular structure\r\n const hit = find(cache, c => c.original === obj)\r\n if (hit) {\r\n return hit.copy\r\n }\r\n\r\n const copy = Array.isArray(obj) ? [] : {}\r\n // put the copy into cache at first\r\n // because we want to refer it in recursive deepCopy\r\n cache.push({\r\n original: obj,\r\n copy\r\n })\r\n\r\n Object.keys(obj).forEach(key => {\r\n copy[key] = deepCopy(obj[key], cache)\r\n })\r\n\r\n return copy\r\n}\r\n\r\nfunction getChartOption(chartName, chartData) {\r\n let option = null\r\n let min = 0\r\n let max = 999\r\n switch (chartName) {\r\n case \"grid\":\r\n option = statisticsOption\r\n \r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 0\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n\r\n option.series = [];\r\n var count = data.length\r\n if (count > 0) {\r\n for (var i = 0; i < count; i++) {\r\n var w = data[i]['data'].length;\r\n w = w * 5 /// count\r\n if (count > 1) w = w * 0.75\r\n\r\n option.series.push({\r\n type: 'bar',\r\n barGap: 0.2,\r\n name: chartData['name'][i],\r\n barWidth: w + \"%\",\r\n label: {\r\n show: true,\r\n position: 'top',\r\n //align: 'left',\r\n //verticalAlign: 'middle',\r\n //rotate: 90,\r\n //formatter: '{c}',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n color: chartData['color'][i],\r\n markPoint: {\r\n symbol: 'pin',\r\n symbolSize: 1,\r\n itemStyle: { color: data[i]['markPoint']['color'] },\r\n label: { rotate: 90, color: '#fff' },\r\n data: data[i]['markPoint']['data']\r\n },\r\n data: data[i]['data']\r\n });\r\n\r\n legend.push(chartData['name'][i]);\r\n }\r\n }\r\n\r\n option.legend.data = legend;\r\n break;\r\n case \"statistics\":\r\n option = statisticsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.legend.data = [];\r\n \r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 30\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n option.series[0].type = 'bar';\r\n option.series[0].name = '';\r\n\r\n var w = chartData['data'].length;\r\n w = w * 5\r\n option.series[0].barWidth = w + \"%\";\r\n \r\n option.series[0].color = chartData['color']\r\n option.series[0].data = chartData['data']\r\n \r\n option.series[0].markPoint.itemStyle.color = chartData['markPoint']['color']\r\n option.series[0].markPoint.data = chartData['markPoint']['data']\r\n break;\r\n case \"income\":\r\n option = incomeOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n option.yAxis[0].name = chartData['yName']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series.push({\r\n smooth: false,\r\n name: data[i].name,\r\n type: 'line',\r\n color: data[i].color,\r\n symbol: 'none',\r\n data: data[i].data\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"funds\":\r\n option = fundsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n option.yAxis[0].name = chartData['yName']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series.push({\r\n smooth: false,\r\n name: data[i].name,\r\n type: 'line',\r\n color: data[i].color,\r\n symbol: 'none',\r\n data: data[i].data,\r\n markArea: {\r\n data: chartData['markAreaData']\r\n }\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"equity\":\r\n option = equityOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n\r\n min = 0\r\n max = 999\r\n var originFund = 0;\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series[i].name = data[i].name\r\n option.series[i].data = data[i].data == null ? [] : data[i].data;\r\n \r\n legend.push(data[i].name);\r\n \r\n if (option.series[i].data.length > 0) {\r\n if (min == 0 || Math.min.apply(null, option.series[i].data) < min)\r\n min = Math.min.apply(null, option.series[i].data)\r\n if (max == 0 || Math.max.apply(null, option.series[i].data) > max)\r\n max = Math.max.apply(null, option.series[i].data)\r\n\r\n if (data[i].type === 1) {\r\n originFund = data[i].data[0]\r\n option.series[i].markLine.data[0].yAxis = originFund\r\n }\r\n }\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n min = parseInt(Math.floor(min));\r\n max = parseInt(Math.ceil(max));\r\n \r\n if ((Math.abs(min)).toString().length > 1) {\r\n if (originFund != undefined) originFund = parseInt(originFund.toString());\r\n\r\n var len = Math.abs(originFund);\r\n len = len.toString().length - 2;\r\n\r\n len = Math.pow(10, len)\r\n len = parseInt(len.toString())\r\n\r\n if (min < 0) {\r\n min = 0;\r\n } else {\r\n min = parseInt(min / len) * len;\r\n }\r\n\r\n max = parseInt(max / len + 1) * len;\r\n }\r\n\r\n option.yAxis[0].min = min\r\n option.yAxis[0].max = max\r\n break;\r\n \r\n }\r\n return deepCopy(option)\r\n}\r\n\r\nexport { getChartOption }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Divider, message } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\nimport emitter from '../Evt.js';\r\nimport { equal } from 'assert';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n\r\nvar statistics = [\r\n { 'sName': languageMessages['annualizedRateOfReturn'], 'xData': [], 'yName': '(%)', \"data\": [], color: '#5470c6', markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 0 },\r\n { 'sName': languageMessages['totalPnl'], 'xData': [], 'yName': '($)', \"data\": [], color: '#5470c6', markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 0 },\r\n { 'sName': languageMessages['profitFactor'], 'xData': [], 'yName': '', \"data\": [], color: '#5470c6', markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 0 },\r\n { 'sName': languageMessages['maxdrawdown'], 'xData': [], 'yName': '(%)', \"data\": [], color: '#5470c6', markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 0 },\r\n { 'sName': languageMessages['totalTrades'], 'xData': [], 'yName': languageMessages['number'], \"data\": [], color: '#5470c6', markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 1 }\r\n];\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n /**\r\n {\r\n 'name': '沪深300',\r\n 'color': '#CE0000',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['thisStrategy'],\r\n 'color': 'blue',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }*/\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nvar equitys = {\r\n 'sName': languageMessages['equityCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],//['20200102', '20200103', '20200106', '20200107', '20200108', '20200109', '20200110'],\r\n 'data': [\r\n {\r\n 'type': 1,\r\n 'name': 'symbol',\r\n 'color': '#CE0000',\r\n 'data': []//[1000000.00, 998246.70, 994475.20, 1001924.00, 990385.80, 1002921.00, 1002635.00]\r\n },\r\n {\r\n 'type': 0,\r\n 'name': languageMessages['equity'],\r\n 'color': 'blue',\r\n 'data': []//[1007270.00, 1010562.00, 1017566.00, 1031863.00, 1019762.00, 1036715.00, 1032639.00]\r\n },\r\n {\r\n 'type': 0,\r\n 'name': languageMessages['cash'],\r\n 'data': []//[7340.11, 10632.11, 17636.11, 31933.11, 19832.11, 36785.11, 1032639.00]\r\n }\r\n ],\r\n};\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nclass BacktestResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null,\r\n \"equity\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n\r\n income: '',\r\n equity: '',\r\n trade: '',\r\n\r\n dataSource: [],\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n \r\n init() {\r\n \r\n }\r\n\r\n resizeChart() {\r\n var statistics = this.charts['statistics'];\r\n var incomeChart = this.charts['income'];\r\n var equityChart = this.charts['equity'];\r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n if (equityChart != null) equityChart.resize();\r\n\r\n if (statistics != null) {\r\n for (let i = 0; i < 5; i++) {\r\n statistics[\"statistics-\" + i].resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setEquityData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setStatisticsData(chartName, chartData) {\r\n this.charts[chartName] = {};\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < chartData.length; i++) {\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"33.3%\";\r\n div.style.height = \"360px\";\r\n\r\n var ids = chartName + \"-\" + i;\r\n div.setAttribute(\"id\", ids);\r\n pdiv.appendChild(div)\r\n\r\n //chartData[i].color = colors[i];\r\n\r\n this.charts[chartName][ids] = echarts.init(document.getElementById(ids));\r\n this.charts[chartName][ids].setOption(getChartOption(chartName, chartData[i]));\r\n\r\n this.charts[chartName][ids].resize();\r\n }\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null,\r\n \"equity\": null\r\n };\r\n\r\n for (var i = 0; i < 5; i++) {\r\n statistics[i].xData = [];\r\n statistics[i].data = [];\r\n statistics[i].markPoint = { symbol: 'none', data: [], color: '#fac858' };\r\n }\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n\r\n equitys.xData = [];\r\n equitys.data[0].data = [];\r\n equitys.data[1].data = [];\r\n equitys.data[2].data = [];\r\n\r\n var income = [];\r\n var equity = '';\r\n var trade = '';\r\n\r\n var dataSource = [];\r\n\r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n let profitFactorItem = [];\r\n for (var item in statisticsResult) {\r\n conditions.push({ 'id': statisticsResult[item].backtestId, 'name': statisticsResult[item].strategyName });\r\n\r\n statistics[0].xData.push(statisticsResult[item].strategyName);\r\n statistics[1].xData.push(statisticsResult[item].strategyName);\r\n statistics[2].xData.push(statisticsResult[item].strategyName);\r\n statistics[3].xData.push(statisticsResult[item].strategyName);\r\n statistics[4].xData.push(statisticsResult[item].strategyName);\r\n\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n var totalPnl = this.keepDecimals(statisticsResult[item].totalPnl, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n var maxDrawdown = this.keepDecimals(statisticsResult[item].maxDrawdown, '');\r\n\r\n maxDrawdown = maxDrawdown > 0 ? 0 - maxDrawdown : maxDrawdown;\r\n\r\n if (annualizedRateOfReturn >= 0) {\r\n statistics[0].data.push(annualizedRateOfReturn);\r\n } else {\r\n statistics[0].data.push({ value: annualizedRateOfReturn, label: { position: 'bottom' } });\r\n }\r\n\r\n if (totalPnl >= 0) {\r\n statistics[1].data.push(totalPnl);\r\n } else {\r\n statistics[1].data.push({ value: totalPnl, label: { position: 'bottom' } });\r\n }\r\n\r\n if (profitFactor >= 100000) {\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n //statistics[2].markPoint.symbol = 'pin';\r\n statistics[2].markPoint.color = color;\r\n statistics[2].markPoint.data.push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 2 });\r\n statistics[2].data.push({\r\n value: profitFactor,\r\n label: { position: profitFactor >= 0 ? 'top' : 'bottom' },\r\n itemStyle: {\r\n color: color\r\n }\r\n });\r\n\r\n profitFactorItem.push(item);\r\n } else {\r\n if (profitFactor >= 0) statistics[2].data.push(profitFactor);\r\n else statistics[2].data.push({ value: profitFactor, label: { position: 'bottom' } });\r\n\r\n if (profitFactor > maxProfitFactor) maxProfitFactor = profitFactor;\r\n }\r\n\r\n if (maxDrawdown >= 0) {\r\n statistics[3].data.push(maxDrawdown);\r\n } else {\r\n statistics[3].data.push({ value: maxDrawdown, label: { position: 'bottom' } });\r\n }\r\n \r\n if (statisticsResult[item].totalTrades >= 0) {\r\n statistics[4].data.push(statisticsResult[item].totalTrades);\r\n } else {\r\n statistics[4].data.push({ value: statisticsResult[item].totalTrades, label: { position: 'bottom' } });\r\n }\r\n }\r\n\r\n if (profitFactorItem.length > 0) {\r\n for (var item in profitFactorItem) {\r\n if (maxProfitFactor > 0) {\r\n statistics[2].data[profitFactorItem[item]].value = maxProfitFactor;\r\n statistics[2].markPoint.data[item].yAxis = maxProfitFactor / 3;\r\n }\r\n }\r\n }\r\n\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n equity = conditions[0].id;\r\n trade = conditions[0].id;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = statisticsResult[0].strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n \r\n equitys.xData = statisticsResult[0].equityCurve.date;\r\n equitys.data[0].name = statisticsResult[0].symbolCode;//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n equitys.data[0].data = statisticsResult[0].equityCurve.bEquity;\r\n equitys.data[1].name = statisticsResult[0].strategyName;\r\n equitys.data[1].data = statisticsResult[0].equityCurve.equity;\r\n equitys.data[2].data = statisticsResult[0].equityCurve.cash;\r\n\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n /**\r\n var bpUsed = parseFloat(trades[item].bpUsed);\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: index,\r\n symbolName: trades[item].symbol,\r\n entryDate: trades[item].entryDatetime,\r\n entryPrice: trades[item].entryPrice,\r\n direction: trades[item].direction,\r\n quantity: trades[item].quantity,\r\n exitDate: trades[item].exitDatetime,\r\n exitPrice: trades[item].exitPrice,\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2),\r\n initbp: bpUsed.toFixed(2),\r\n exitInfo: languageMessages[trades[item].closeInfo],\r\n remark: trades[item].memo\r\n });\r\n\r\n index++;\r\n */\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStatisticsData(\"statistics\", statistics);\r\n this.setIncomeData(\"income\", incomes);\r\n this.setEquityData(\"equity\", equitys);\r\n\r\n this.setState({ conditions, income, equity, trade, dataSource, statisticsResult });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { statisticsResult } = props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n /**\r\n if (e.target.classList.contains(\"checked\")) {\r\n e.target.classList.remove(\"checked\");\r\n\r\n if (income.length <= 0) return;\r\n income = income.filter(function (item) { return item !== tags });\r\n } else {\r\n let count = income.length;\r\n if (count >= 3) {\r\n message.warning(languageMessages['hawkeyeUpperLimit'], 5);\r\n return;\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n\r\n income.push(tags);\r\n }\r\n */\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.backtestId; });\r\n if (tmpIncomes.length > 0) {\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = tmpIncomes[0].strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n this.setState({ income });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByEquity = e => {\r\n var { equity } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (equity == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n equity = tags;\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n var tmpEquitys = statisticsResult.filter(function (e) { return e.backtestId == equity; });\r\n if (tmpEquitys.length > 0) {\r\n equitys.xData = tmpEquitys[0].equityCurve.date;\r\n equitys.data[0].data = tmpEquitys[0].equityCurve.bEquity;\r\n equitys.data[1].name = tmpEquitys[0].strategyName;\r\n equitys.data[1].data = tmpEquitys[0].equityCurve.equity;\r\n equitys.data[2].data = tmpEquitys[0].equityCurve.cash;\r\n\r\n this.setEquityData(\"equity\", equitys);\r\n }\r\n\r\n this.setState({ equity });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.backtestId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n /**\r\n var bpUsed = parseFloat(trades[item].bpUsed);\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: index,\r\n symbolName: trades[item].symbol,\r\n entryDate: trades[item].entryDatetime,\r\n entryPrice: trades[item].entryPrice,\r\n direction: trades[item].direction,\r\n quantity: trades[item].quantity,\r\n exitDate: trades[item].exitDatetime,\r\n exitPrice: trades[item].exitPrice,\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2),\r\n initbp: bpUsed.toFixed(2),\r\n exitInfo: trades[item].closeInfo,\r\n remark: trades[item].memo\r\n });\r\n\r\n index++;\r\n */\r\n }\r\n }\r\n \r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n \r\n\r\n render() {\r\n var { conditions, income, equity, trade, dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['volume'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['turnover'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['pnl'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n /**\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['entryDate'],\r\n dataIndex: 'entryDate',\r\n sorter: (a, b) => a.entryDate - b.entryDate,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['entryPrice'],\r\n dataIndex: 'entryPrice',\r\n align: 'right',\r\n sorter: (a, b) => a.entryPrice - b.entryPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['quantity'],\r\n dataIndex: 'quantity',\r\n align: 'right',\r\n sorter: (a, b) => a.quantity - b.quantity,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitDate'],\r\n dataIndex: 'exitDate',\r\n sorter: (a, b) => a.exitDate - b.exitDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitPrice'],\r\n dataIndex: 'exitPrice',\r\n align: 'right',\r\n sorter: (a, b) => a.exitPrice - b.exitPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnl'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n sorter: (a, b) => a.pnl - b.pnl,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnl'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n sorter: (a, b) => a.pnlp - b.pnlp,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['initbp'],\r\n dataIndex: 'initbp',\r\n align: 'right',\r\n sorter: (a, b) => a.initbp - b.initbp,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitInfo'],\r\n dataIndex: 'exitInfo',\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.exitInfo) ? languageMessages[record.exitInfo] : record.exitInfo}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['remark'],\r\n dataIndex: 'remark'\r\n },\r\n ];\r\n */\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestDetails']}</div>\r\n <div id=\"statistics\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={income == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByIncome} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={equity == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByEquity} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n <div id=\"equity\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { BacktestResult as default }\r\n\r\n/**\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestResult);\r\nexport { page as default }\r\n */","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, AutoComplete, Button, Input, Form, DatePicker, Divider, Spin, Tag, Icon, Popover, message, Modal, Progress, Radio } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport BacktestResult from './BacktestResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nconst { Content } = Layout;\r\n\r\nconst { CheckableTag } = Tag;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nconst PeriodTags = ['15m', '60m', 'D'];\r\nconst StrategyMode = { '0': languageMessages['bullishStrategy'], '1': languageMessages['bearishStrategy'], '2': languageMessages['shockStrategy'] };\r\nclass BacktestPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n strategyType: '0',\r\n\r\n strategyList: [],\r\n nonStrategyList: [],\r\n\r\n lastTimes: 0,\r\n\r\n spinLoadding: true,\r\n\r\n selectedPeriod: 2,\r\n\r\n startDate: moment().add(-1, 'months').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n endOpen: false,\r\n\r\n strategyItems: {},\r\n\r\n IsStartBacktest: false,\r\n\r\n filterError: '',\r\n\r\n backtestStatus: 0,\r\n \r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n\r\n isHubConnection: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callBacktestError\", this.callBacktestError);\r\n emitter.addListener('callBacktestLastTimes', this.callBacktestLastTimes);\r\n emitter.addListener('callBacktestStatus', this.callBacktestStatus);\r\n emitter.addListener('callBacktestResult', this.callBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callBacktestError', this.callBacktestError);\r\n emitter.removeListener('callBacktestLastTimes', this.callBacktestLastTimes);\r\n emitter.removeListener('callBacktestStatus', this.callBacktestStatus);\r\n emitter.removeListener('callBacktestResult', this.callBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var tmpNonStrategyList = [];\r\n var statisticsResult = [];\r\n \r\n if (backtestResult.length > 0) {\r\n tmpNonStrategyList = this.state.strategyList;\r\n\r\n //var maxAnnualizedRateOfReturn = 0;\r\n //var maxDrawdown = 0;\r\n\r\n //var symbolCode = '';\r\n //var startDate = '';\r\n //var endDate = '';\r\n\r\n //var barInterval = [];\r\n \r\n for (var item in backtestResult) {\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n //symbolCode = backtestResult[item]['symbol'];\r\n //startDate = backtestResult[item]['fromDate'];\r\n //endDate = backtestResult[item]['toDate'];\r\n\r\n /**\r\n var tmpBarInterval = backtestResult[item]['strategyName'];\r\n var tmpBarIntervals = tmpBarInterval.split('_');\r\n if (tmpBarIntervals.length > 0) {\r\n tmpBarInterval = tmpBarIntervals[tmpBarIntervals.length - 1];\r\n tmpBarInterval = tmpBarInterval.replace('m', '').replace('M', '');\r\n\r\n if (barInterval.indexOf(tmpBarInterval) == -1) barInterval.push(tmpBarInterval);\r\n }\r\n */\r\n\r\n tmpNonStrategyList = tmpNonStrategyList.filter(function (s) { return s != backtestResult[item]['strategyName']; });\r\n\r\n var strategyName = '';\r\n var tmpStrategyName = this.props.strategyItems.filter(function (s) { return s.sn == backtestResult[item]['strategyName']; });\r\n if (tmpStrategyName.length > 0) {\r\n strategyName = tmpStrategyName[0].tt;\r\n\r\n //if (barInterval.indexOf(tmpStrategyName[0].bi) == -1) barInterval.push(tmpStrategyName[0].bi);\r\n }\r\n\r\n //var annualizedRateOfReturn = backtestResult[item]['statistics'].annualizedRateOfReturn;\r\n //var maxDrawdownPercent = backtestResult[item]['statistics'].maxDrawdownPercent;\r\n\r\n //maxAnnualizedRateOfReturn = maxAnnualizedRateOfReturn == 0 || parseFloat(annualizedRateOfReturn) > parseFloat(maxAnnualizedRateOfReturn) ? annualizedRateOfReturn : maxAnnualizedRateOfReturn;\r\n //maxDrawdown = maxDrawdown == 0 || maxDrawdownPercent > maxDrawdown ? maxDrawdownPercent : maxDrawdown;\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n strategyName: strategyName,\r\n \r\n symbolCode: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: '0',\r\n \r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n //var backtestInterval = selectedPeriod == -1 ? '' : PeriodTags[selectedPeriod].replace('m', '');\r\n //if (backtestInterval == '') {\r\n // backtestInterval = barInterval.join();\r\n //}\r\n \r\n //maxAnnualizedRateOfReturn = this.keepDecimals(maxAnnualizedRateOfReturn, '%');\r\n //maxDrawdown = this.keepDecimals(maxDrawdown, '%');\r\n }\r\n\r\n var nonStrategyList = [];\r\n if (tmpNonStrategyList.length > 0) {\r\n for (var item in tmpNonStrategyList) {\r\n var tmpStrategyName = this.props.strategyItems.filter(function (s) { return s.sn == tmpNonStrategyList[item]; });\r\n if (tmpStrategyName.length > 0) {\r\n nonStrategyList.push(tmpStrategyName[0].tt);\r\n }\r\n }\r\n }\r\n \r\n this.setState({ backtestStatus: 3, statisticsResult, nonStrategyList, spinLoadding: false });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_backtest_strategy\", payload: { u: userId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bt':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n setStrategyItems(strategyItems, strategyType, selectedPeriod) {\r\n var tmpStrategyItems = {};\r\n if (strategyItems != null) {\r\n for (var item in strategyItems) {\r\n if (strategyType != strategyItems[item].t) continue;\r\n\r\n if (!tmpStrategyItems.hasOwnProperty(strategyType)) {\r\n tmpStrategyItems[strategyType] = {};\r\n }\r\n \r\n if (strategyType == '0') {\r\n var strategyName = strategyItems[item].sn.toLowerCase();\r\n var tmpStrategyName = strategyName;\r\n switch (selectedPeriod) {\r\n case 0:\r\n if (tmpStrategyName.slice(tmpStrategyName.length - 4, tmpStrategyName.length) == '_15m') {\r\n tmpStrategyName = tmpStrategyName.slice(0, tmpStrategyName.length - 4);\r\n } else {\r\n if (tmpStrategyName.slice(tmpStrategyName.length - 3, tmpStrategyName.length) == '_15') {\r\n tmpStrategyName = tmpStrategyName.slice(0, tmpStrategyName.length - 3);\r\n }\r\n }\r\n break;\r\n case 1:\r\n if (tmpStrategyName.slice(tmpStrategyName.length - 4, tmpStrategyName.length) == '_60m') {\r\n tmpStrategyName = tmpStrategyName.slice(0, tmpStrategyName.length - 4);\r\n } else {\r\n if (tmpStrategyName.slice(tmpStrategyName.length - 3, tmpStrategyName.length) == '_60') {\r\n tmpStrategyName = tmpStrategyName.slice(0, tmpStrategyName.length - 3);\r\n }\r\n }\r\n break;\r\n case 2:\r\n if (tmpStrategyName.slice(tmpStrategyName.length - 2, tmpStrategyName.length) == '_d') {\r\n tmpStrategyName = tmpStrategyName.slice(0, tmpStrategyName.length - 2);\r\n }\r\n break;\r\n }\r\n if (strategyName == tmpStrategyName) continue;\r\n }\r\n\r\n var intro = [];\r\n if (strategyItems[item].re != '') {\r\n var intros = strategyItems[item].re.split('\\n');\r\n for (var ii in intros) {\r\n //if (intros[ii] == '') continue;\r\n\r\n if (intro.length > 0) intro.push(<br key={ii} />);\r\n intro.push(intros[ii]);\r\n }\r\n }\r\n\r\n var strategyMode = StrategyMode[strategyItems[item].c];\r\n if (!tmpStrategyItems[strategyType].hasOwnProperty(strategyMode)) {\r\n tmpStrategyItems[strategyType][strategyMode] = [];\r\n }\r\n\r\n tmpStrategyItems[strategyType][strategyMode].push({\r\n 'id': strategyItems[item].sId,\r\n 'name': strategyItems[item].sn,\r\n 'title': strategyItems[item].tt,\r\n 'intro': intro\r\n });\r\n }\r\n }\r\n\r\n return tmpStrategyItems;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, strategyItems, permission } = props;\r\n\r\n switch (status) {\r\n case 'get_backtest_strategy_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n \r\n var tmpStrategyItems = this.setStrategyItems(strategyItems, this.state.strategyType, 2);\r\n\r\n this.setState({ strategyItems: tmpStrategyItems, spinLoadding: false });\r\n break;\r\n case 'get_backtest_strategy_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n handleMyBacktest = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/mbt\");\r\n };\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({ symbolCode, IsStartBacktest, filterError: '' });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' });\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n onSelectStrategy = e => {\r\n var { strategyList, startDate, endDate, backtestStatus } = this.state;\r\n if (backtestStatus == 1 || backtestStatus == 2) {\r\n message.info(languageMessages['backtesting']);\r\n return;\r\n }\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n\r\n if (e.target.classList.contains(\"checked\")) {\r\n e.target.classList.remove(\"checked\");\r\n\r\n if (strategyList.length <= 0) return;\r\n\r\n strategyList = strategyList.filter(function (item) { return item !== tags });\r\n } else {\r\n let count = strategyList.length;\r\n if (count >= 10) {\r\n message.warning(languageMessages['mostOptionalStrategies'], 5);\r\n return;\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n\r\n strategyList.push(tags);\r\n }\r\n\r\n if (strategyList.length > 0) {\r\n for (var item in strategyList) {\r\n var tmpStrategyItems = this.props.strategyItems.filter(function (e) { return e.sn == strategyList[item]; });\r\n if (tmpStrategyItems.length > 0) {\r\n \r\n endDate = moment(tmpStrategyItems[0]['ed']).format('YYYY-MM-DD');\r\n\r\n startDate = moment(tmpStrategyItems[0]['ed']).add(-1, 'months').format('YYYY-MM-DD');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('strategyList', strategyList);\r\n\r\n this.setState({ strategyList, startDate, endDate, IsStartBacktest, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n } catch (e) { }\r\n }\r\n \r\n handlePeriodChange(index) {\r\n if (this.state.backtestStatus == 1 || this.state.backtestStatus == 2) {\r\n message.info(languageMessages['backtesting']);\r\n return;\r\n }\r\n\r\n var classItems = document.getElementsByClassName('common-backtest-strategy');\r\n for (var item in classItems) {\r\n var nodes = classItems[item].childNodes;\r\n if (nodes != undefined) {\r\n for (var i = 0; i < nodes.length; i++) {\r\n var childNodes = nodes[i].childNodes;\r\n for (var j = 0; j < childNodes.length; j++) {\r\n if (childNodes[j].classList.contains(\"checked\")) {\r\n childNodes[j].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n var strategyList = [];\r\n\r\n var tmpStrategyItems = this.setStrategyItems(this.props.strategyItems, this.state.strategyType, index);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('strategyList', strategyList);\r\n this.setState({ selectedPeriod: index, strategyList, IsStartBacktest, strategyItems: tmpStrategyItems, filterError: '' });\r\n }\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('startDate', startDate);\r\n\r\n this.setState({ startDate, IsStartBacktest, filterError: '' });\r\n }\r\n \r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n \r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('endDate', endDate);\r\n\r\n this.setState({ endDate, IsStartBacktest, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true, filterError: '' });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n };\r\n\r\n checkIsStartBacktest(type, value) {\r\n var IsStartBacktest = false;\r\n let { symbolCode, strategyList, startDate, endDate } = this.state;\r\n\r\n switch (type) {\r\n case 'symbolCode':\r\n symbolCode = value;\r\n break;\r\n case 'strategyList':\r\n strategyList = value;\r\n break;\r\n case 'startDate':\r\n startDate = value;\r\n break;\r\n case 'endDate':\r\n endDate = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (symbolCode != '' && strategyList.length > 0) {\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate2.getTime() > oDate1.getTime()) {\r\n IsStartBacktest = true;\r\n }\r\n }\r\n\r\n return IsStartBacktest;\r\n }\r\n\r\n onStartBacktest = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, strategyList, startDate, endDate, selectedPeriod, lastTimes, strategyType } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n \r\n var strategyLists = [];\r\n if (strategyType == '0') {\r\n for (var item in strategyList) {\r\n var strategyName = strategyList[item].toLowerCase();\r\n var tmpStrategyName = this.props.strategyItems.filter(function (e) { return e.sn.toLowerCase() == strategyName; });\r\n if (tmpStrategyName.length == 0) {\r\n strategyName = '';\r\n }\r\n \r\n if (strategyName != '') strategyLists.push(strategyName);\r\n }\r\n } else {\r\n strategyLists = strategyList;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n nonStrategyList: [],\r\n filterError: '',\r\n spinLoadding: true,\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'backtestStrategy',\r\n SymbolCode: symbolCode,\r\n SymbolName: symbolName,\r\n StrategyList: strategyLists,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n SelectedPeriod: selectedPeriod,\r\n reqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n importBacktestResult = () => {\r\n //console.log('import');\r\n }\r\n\r\n changeStrategyType = e => {\r\n if (this.state.backtestStatus == 1 || this.state.backtestStatus == 2) {\r\n message.info(languageMessages['backtesting']);\r\n return;\r\n }\r\n\r\n var classItems = document.getElementsByClassName('common-backtest-strategy');\r\n for (var item in classItems) {\r\n var nodes = classItems[item].childNodes;\r\n if (nodes != undefined) {\r\n for (var i = 0; i < nodes.length; i++) {\r\n var childNodes = nodes[i].childNodes;\r\n for (var j = 0; j < childNodes.length; j++) {\r\n if (childNodes[j].classList.contains(\"checked\")) {\r\n childNodes[j].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n var strategyType = e.target.value;\r\n var selectedPeriod = strategyType == '0' ? 2 : -1;\r\n var strategyList = [];\r\n\r\n var tmpStrategyItems = this.setStrategyItems(this.props.strategyItems, strategyType, selectedPeriod);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('strategyList', strategyList);\r\n\r\n this.setState({ strategyType, strategyList, selectedPeriod, IsStartBacktest, strategyItems: tmpStrategyItems, filterError: '' });\r\n }\r\n\r\n renderStrategyLib() {\r\n let { strategyItems, strategyType, strategyList } = this.state;\r\n \r\n if (strategyItems.hasOwnProperty(strategyType)) {\r\n var tmpStrategyItems = strategyItems[strategyType];\r\n\r\n if (Object.keys(tmpStrategyItems).length === 0) return;\r\n\r\n return Object.keys(tmpStrategyItems).map((item, ii) => (<div key={ii}>\r\n <p>{item}</p>\r\n <div className='common-backtest-strategy'>\r\n {\r\n tmpStrategyItems[item].map((tag, index) => (\r\n <Popover key={index} placement=\"top\" title={(<span>{tag.title}</span>)} content={(<div style={{ padding: '10px' }}>{tag.intro}</div>)}>\r\n <div className={window.webType === 'US' ? 'common-tag-container common-tag-us' : 'common-tag-container'}><div className={strategyList.indexOf(tag.name) > -1 ? 'content checked' : 'content'} onClick={this.onSelectStrategy} data-value={tag.name}>{tag.title}</div></div>\r\n </Popover>\r\n ))\r\n }\r\n </div>\r\n </div>));\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode, selectedPeriod, percent } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['strategyExcavate']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.handleMyBacktest}>{languageMessages['myExcavate']}</Button>\r\n ]} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['strategyLib']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Radio.Group value={this.state.strategyType} onChange={this.changeStrategyType} style={{ marginBottom: '20px' }}>\r\n <Radio value=\"0\">{languageMessages['standardStrategy']}</Radio>\r\n <Radio value=\"1\">{languageMessages['featuredStrategy']}</Radio>\r\n </Radio.Group>\r\n {this.renderStrategyLib()}\r\n <div style={{ padding: '16px 0', display: this.state.strategyType === '0' ? 'block' : 'none' }}>\r\n <span style={{ paddingRight: '10px' }}>{languageMessages['strategyPeriod']}</span>\r\n {PeriodTags.map((tag, index) => (\r\n <CheckableTag\r\n key={index}\r\n checked={selectedPeriod === index}\r\n onChange={() => this.handlePeriodChange(index)}>\r\n {tag}\r\n </CheckableTag>\r\n ))}\r\n </div>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestCondition']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div style={{ marginBottom: '10px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <Button size='small' loading={false} disabled={!this.state.IsStartBacktest} onClick={this.onStartBacktest}>\r\n {languageMessages['startBacktest']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['backtestStatus']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['backtestingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['backtestCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n \r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.nonStrategyList.length == 0 || (<div style={{ margin: '20px 0' }}>\r\n <b>{languageMessages['prompt']}</b>\r\n <p style={{ padding: '10px 0' }} className='common-red'>\r\n {\r\n this.state.nonStrategyList.map((item, ii) => (<span key={ii}>\r\n {strReplace(languageMessages['strategyNoTrade'], { '{name}': item })}\r\n </span>))\r\n }\r\n </p>\r\n </div>)}\r\n \r\n {this.state.statisticsResult.length == 0 || (<BacktestResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport BacktestResult from './BacktestResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyBacktestPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n \r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: '0', u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].statistics != null) {\r\n statisticsResult = tmpDataSource[item].statistics;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n var maxdrawdown = this.keepDecimals(tmpDataSource[item].md, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n maxRateOfReturn: maxRateOfReturn,\r\n maxdrawdown: maxdrawdown,\r\n strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n strategyNumber: tmpDataSource[item].sn,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n this.setState({ dataSource, rowId, statisticsResult });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_single_stock_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false }, () => {\r\n this.setBacktestResult(singleStockBacktestResult);\r\n });\r\n break;\r\n case 'get_single_stock_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_single_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false }, () => {\r\n this.setBacktestResult(singleStockBacktestResult);\r\n });\r\n break;\r\n case 'get_single_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_backtest_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n \r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, selectedRowKeys: [] }, () => {\r\n this.setBacktestResult(singleStockBacktestResult);\r\n });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n\r\n /**\r\n let { dataSource, singleStockBacktestResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = backtestIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n }\r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n */\r\n break;\r\n case 'get_remove_backtest_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n \r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult }, () => {\r\n this.setBacktestResult(singleStockBacktestResult);\r\n });\r\n }else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_symbol_items\", payload: { t: '0', u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: '0', u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: '0', u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n importBacktestResult = (e, value) => {\r\n e.stopPropagation();\r\n console.log(value);\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.backtest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_backtest\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n \r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['maxRateOfReturn']+'(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxdrawdown']+'(%)',\r\n dataIndex: 'maxdrawdown',\r\n width: 105,\r\n align: 'center',\r\n sorter: (a, b) => a.maxdrawdown - b.maxdrawdown,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxdrawdown'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['strategyNumber'],\r\n dataIndex: 'strategyNumber',\r\n width: 90,\r\n align: 'center',\r\n sorter: (a, b) => a.strategyNumber - b.strategyNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['backtesting'] : languageMessages['complete']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n \r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['strategyExcavate']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n \r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BacktestResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyBacktestPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message, Select, Upload, Icon, Radio, Input } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n\r\nvar statistics = [\r\n { 'sName': languageMessages['grandTotal/annualizedRateOfReturn'], 'name': [languageMessages['grandTotalRateOfReturn'], languageMessages['annualizedRateOfReturn']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#5470c6', '#fac858'], markPoint: { symbol: 'none', data: [], color: '#fac858' }, minInterval: 0 },\r\n { 'sName': languageMessages['profitFactor'], 'name': [languageMessages['profitFactor']], 'xData': [], 'yName': '', \"data\": [], color: ['#5470c6'], markPoint: { symbol: 'none', data: [], color: '#5470c6' }, minInterval: 0 },\r\n { 'sName': languageMessages['buyingPowerRequried'], 'name': [languageMessages['buyingPowerRequried']], 'xData': [], 'yName': '', \"data\": [], color: ['#fac858'], markPoint: { data: [] }, minInterval: 0 },\r\n];\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass OptimalGridResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n\r\n income: '',\r\n trade: '',\r\n\r\n dataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '',\r\n initCapital: 0,\r\n capital: 0,\r\n category: 3,\r\n gridCnt: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n promptModalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n let promptModalVisible = false;\r\n switch (status) {\r\n case 3:\r\n promptModalVisible = true;\r\n break;\r\n default:\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false, promptModalVisible });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n resizeChart() {\r\n var statistics = this.charts['statistics'];\r\n var incomeChart = this.charts['income'];\r\n //var equityChart = this.charts['equity'];\r\n \r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n //if (equityChart != null) equityChart.resize();\r\n \r\n if (statistics != null) {\r\n for (let i = 0; i < 2; i++) {\r\n statistics[\"statistics-\" + i].resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setStatisticsData(chartName, chartData) {\r\n this.charts[chartName] = {};\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < chartData.length; i++) {\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"33.3%\";\r\n div.style.height = \"360px\";\r\n\r\n var ids = chartName + \"-\" + i;\r\n div.setAttribute(\"id\", ids);\r\n pdiv.appendChild(div)\r\n\r\n //chartData[i].color = colors[i];\r\n\r\n this.charts[chartName][ids] = echarts.init(document.getElementById(ids));\r\n this.charts[chartName][ids].setOption(getChartOption('grid', chartData[i]));\r\n\r\n this.charts[chartName][ids].resize();\r\n }\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n };\r\n\r\n for (var i = 0; i < 3; i++) {\r\n statistics[i].xData = [];\r\n statistics[i].data = [];\r\n }\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n\r\n var income = '';\r\n var trade = '';\r\n\r\n let modalBacktestId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n \r\n var dataSource = [];\r\n\r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n\r\n statistics[1].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[2].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n\r\n for (var item in statisticsResult) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n\r\n if (modalBacktestId === '') modalBacktestId = statisticsResult[item].backtestId;\r\n if (modalSymbolCode === '') modalSymbolCode = statisticsResult[item].symbol;\r\n if (modalSymbolName === '') modalSymbolName = statisticsResult[item].symbolName;\r\n if (modalStrategyType === '') modalStrategyType = statisticsResult[item].d;\r\n \r\n\r\n var strategyName = statisticsResult[item].strategyName;\r\n strategyName = strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n\r\n conditions.push({ 'id': statisticsResult[item].backtestId, 'name': strategyName });\r\n\r\n var initialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].initialRateOfReturnOnCapital, '');\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n var chartCapital = statisticsResult[item].capital;\r\n\r\n if (capital === 0) capital = chartCapital;\r\n if (gridCnt === 0) gridCnt = statisticsResult[item].gridCnt;\r\n \r\n statistics[0].xData.push(strategyName);\r\n statistics[1].xData.push(strategyName);\r\n\r\n statistics[0].data[0][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[1][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n\r\n if (profitFactor >= 100000) {\r\n //statistics[1].markPoint.symbol = 'pin';\r\n\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: 'top' }, itemStyle: { color: color } });\r\n statistics[1].data[0][\"markPoint\"][\"color\"] = color;\r\n statistics[1].data[0][\"markPoint\"][\"data\"].push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 });\r\n } else {\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: profitFactor >= 0 ? 'top' : 'bottom' } });\r\n if (statistics[1].data[0][\"markPoint\"][\"data\"].length == 0) {\r\n statistics[1].data[0][\"markPoint\"] = { color: '#fff', data: [] };\r\n }\r\n\r\n var tmpProfitFactor = parseFloat(profitFactor);\r\n var tmpMaxProfitFactor = parseFloat(maxProfitFactor);\r\n if (tmpProfitFactor > tmpMaxProfitFactor) maxProfitFactor = profitFactor;\r\n }\r\n\r\n statistics[2].data[0][\"data\"].push({ value: chartCapital, label: { position: chartCapital >= 0 ? 'top' : 'bottom' } });\r\n }\r\n\r\n if (maxProfitFactor > 0) {\r\n for (var item in statistics[1].data[0][\"data\"]) {\r\n if (statistics[1].data[0][\"data\"][item].value >= 100000) {\r\n statistics[1].data[0][\"data\"][item].value = maxProfitFactor;\r\n }\r\n }\r\n\r\n for (var ii in statistics[1].data[0][\"markPoint\"][\"data\"]) {\r\n statistics[1].data[0][\"markPoint\"][\"data\"][ii].yAxis = maxProfitFactor / 3;\r\n }\r\n }\r\n\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n //equity = conditions[0].id;\r\n trade = conditions[0].id;\r\n\r\n modalStrategyName = conditions[0].name;\r\n\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n //strategyName = statisticsResult[0].strategyName;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n /**\r\n * è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–å‡ºï¼Œä»·æ ¼=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n 第二行, æ–¹å‘= ä¹°å…¥ï¼Œä»·æ ¼=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n\r\n è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–出,æˆäº¤ä»·=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“进仓时间â€\r\n 第二行, æ–¹å‘= 买入,æˆäº¤ä»·=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“出仓时间â€\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n * \r\n */\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStatisticsData(\"statistics\", statistics);\r\n this.setIncomeData(\"income\", incomes);\r\n\r\n let initCapital = capital;\r\n this.setState({ conditions, income, trade, dataSource, statisticsResult, modalBacktestId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType, initCapital, capital, gridCnt });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { status, statisticsResult, basePosition, share } = props;\r\n\r\n switch (status) {\r\n case 'get_base_position_success':\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n basePosition,\r\n share,\r\n spinLoadding: false\r\n }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n\r\n break;\r\n case 'get_base_position_fail':\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n break;\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n let modalBacktestId = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.backtestId; });\r\n if (tmpIncomes.length > 0) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': tmpIncomes[0].gridCnt });\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n modalBacktestId = tmpIncomes[0].backtestId;\r\n modalStrategyName = tmpIncomes[0].strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n capital = tmpIncomes[0].capital;\r\n gridCnt = tmpIncomes[0].gridCnt;\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n let initCapital = capital;\r\n this.setState({ income, modalBacktestId, modalStrategyName, initCapital, capital, gridCnt });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.backtestId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n \r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n \r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n }\r\n }\r\n \r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n buildBindBroker = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_auth\", payload: { u: user.username } });\r\n }\r\n }\r\n\r\n handleChangeCapital = e => {\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n handleBlurCapital = e => {\r\n e.preventDefault();\r\n\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n onRealTime = () => {\r\n this.setState({\r\n spinLoadding: true,\r\n tradeType: 0,\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: 0 } });\r\n }\r\n });\r\n }\r\n\r\n onSimulation = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n });\r\n }\r\n\r\n onMultiOptimization = () => {\r\n history.push({ pathname: '/ob', state: { backtestId: this.state.modalBacktestId } });\r\n //history.push({ pathname: '/oo', state: { backtestId: this.state.modalBacktestId } });\r\n }\r\n\r\n onScrollOptimization = () => {\r\n //history.push({ pathname: '/ob', state: { backtestId: this.state.modalBacktestId } });\r\n history.push({ pathname: '/oo', state: { backtestId: this.state.modalBacktestId } });\r\n }\r\n\r\n renderModalContent() {\r\n if (this.state.tradeType == 0) {\r\n return this.renderModalRealTimeContent();\r\n } else {\r\n return this.renderModalSimulationContent();\r\n }\r\n }\r\n\r\n renderModalSimulationContent() {\r\n let newDate = moment().add(1, 'd');\r\n let fromDate = newDate.format('YYYY-MM-DD 09:30:00');\r\n let endDate = window.webType === 'US' ? newDate.add(2, 'w').format('YYYY-MM-DD 16:00:00') : newDate.add(2, 'w').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n renderModalRealTimeContent() {\r\n return window.webType === 'US' ? this.renderModalRealTimeContentForUs() : this.renderModalRealTimeContentForCn();\r\n }\r\n\r\n renderModalRealTimeContentForCn() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'åŽé‘«è¯åˆ¸' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']}\r\n <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n\r\n </div>\r\n }\r\n\r\n renderModalRealTimeContentForUs() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'TD', 'name': 'TdAmeritrade' }, { 'id': 'IB', 'name': 'IB' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div style={{ display: this.state.broker == 'TD' ? '' : 'none' }}><Button size='small' onClick={this.buildBindBroker}>{languageMessages['login td account']}</Button></div>\r\n <div style={{ display: this.state.broker == 'IB' ? '' : 'none' }}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { tradeType, modalBacktestId, modalSymbolCode, modalStrategyType, category, capital } = this.state;\r\n\r\n if (tradeType == 0 && this.state.initCapital > capital) {\r\n message.info(languageMessages['Buying power to allocate tips']);\r\n } else {\r\n this.setState({ spinLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n StrategyId: 0,\r\n SymbolCode: modalSymbolCode,\r\n Category: category,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n handlePromptOk = e => {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n handlePromptCancel = e => {\r\n this.setState({ promptModalVisible: false });\r\n }\r\n\r\n render() {\r\n var { conditions, income, trade, dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestDetails']}</div>\r\n\r\n <div id=\"statistics\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={income == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByIncome} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n <div className='common-trade-btn'>\r\n <Button size='small' onClick={this.onMultiOptimization}>{languageMessages['Multi-dimensionalOptimization']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onRealTime}>{languageMessages['goRealTime']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onSimulation}>{languageMessages['goSimulation']}</Button>\r\n </div>\r\n </div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n\r\n <Modal\r\n title={languageMessages['prompt']}\r\n visible={this.state.promptModalVisible}\r\n onOk={this.handlePromptOk}\r\n onCancel={this.handlePromptCancel}>\r\n <div dangerouslySetInnerHTML={{ __html: languageMessages['simulated trading limit'] }} />\r\n <p>{languageMessages['simulated trading limit prompt']}</p>\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { OptimalGridResult as default }\r\n\r\n/**\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestResult);\r\nexport { page as default }\r\n */","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, AutoComplete, Button, Input, Form, DatePicker, Divider, Spin, Icon, Checkbox, Modal, Progress, message } from 'antd';\r\nimport moment, { max } from 'moment';\r\n\r\nimport OptimalGridResult from './OptimalGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass OptimalGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n lastTimes: 0,\r\n\r\n spinLoadding: true,\r\n \r\n upper: '',\r\n lower: '',\r\n\r\n startDate: moment().add(-15, 'days').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n priceRangeStatus: '',\r\n priceRangeMessage: '',\r\n\r\n endOpen: false,\r\n\r\n IsStartBacktest: false,\r\n\r\n dayTradeOnly: false,\r\n\r\n filterError: '',\r\n\r\n backtestStatus: 0,\r\n \r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n\r\n isHubConnection: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callOptimalGridError\", this.callBacktestError);\r\n emitter.addListener('callOptimalGridLastTimes', this.callBacktestLastTimes);\r\n emitter.addListener('callOptimalGridStatus', this.callBacktestStatus);\r\n emitter.addListener('callOptimalGridResult', this.callBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callOptimalGridError', this.callBacktestError);\r\n emitter.removeListener('callOptimalGridLastTimes', this.callBacktestLastTimes);\r\n emitter.removeListener('callOptimalGridStatus', this.callBacktestStatus);\r\n emitter.removeListener('callOptimalGridResult', this.callBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var statisticsResult = [];\r\n \r\n if (backtestResult.length > 0) {\r\n \r\n for (var item in backtestResult) {\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n if (br[0].StrategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var strategyName = backtestResult[item]['strategyName'];\r\n //var backtestInfo = strategyName.split('-');\r\n //if (backtestInfo.length < 6) continue;\r\n //if (backtestInfo[0] !== 'E') continue;\r\n \r\n //var gridCnt = backtestInfo[6];\r\n //var lower = backtest.Lower;\r\n //var upper = backtest.Upper;\r\n\r\n //let tmpGridCnt = parseInt(gridCnt);\r\n //var tmpLower = parseFloat(lower);\r\n //var tmpUpper = parseFloat(upper);\r\n \r\n //let gridWidth = (tmpUpper - tmpLower) / tmpGridCnt;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n strategyName: br[0].StrategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n d: backtest.DayTradeOnly,\r\n\r\n priceRange: '',//tmpLower.toFixed(2) + \"~\" + tmpUpper.toFixed(2),\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',//gridWidth.toFixed(2),\r\n\r\n capital: br[0].Capital,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n }\r\n \r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_explore_grid\", payload: { u: userId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'egs':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, permission, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_explore_grid_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_explore_grid_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n handleMyBacktest = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/mbg\");\r\n };\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({ symbolCode, IsStartBacktest, filterError: '' });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' });\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value, filterError: '' }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('startDate', startDate);\r\n\r\n this.setState({ startDate, IsStartBacktest, filterError: '' });\r\n }\r\n \r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n \r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('endDate', endDate);\r\n\r\n this.setState({ endDate, IsStartBacktest, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate) || current < moment(endDate).add(-6, 'months'));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true, filterError: '' });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n };\r\n\r\n handleNumberChange = e => {\r\n let intLen = 12;\r\n let decimalLen = 2;\r\n\r\n var number = e.target.value;\r\n let tags = e.currentTarget.getAttribute('data-value');\r\n if (tags === 'lower' || tags === 'upper') {\r\n decimalLen = 3;\r\n }\r\n\r\n if (number.indexOf('.') === 0) {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n }\r\n number = number.replace(/[^\\d.]/g, \"\");\r\n number = number.replace(/\\.{2,3}/g, \".\");\r\n number = number.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n\r\n if (number.indexOf('.') < 0) {\r\n if (number.length > intLen) number = number.slice(0, intLen);\r\n\r\n if (number !== '') number = parseInt(number);\r\n } else {\r\n var tmpNumber = number.split('.');\r\n var tmpNum00 = tmpNumber[0];\r\n if (tmpNum00.length > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n\r\n if (tmpNum00 !== '') tmpNum00 = parseInt(tmpNum00);\r\n\r\n var tmpNum01 = tmpNumber[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n number = tmpNum00 + '.' + tmpNum01;\r\n }\r\n\r\n this.checkInputParamsStatus(tags, number);\r\n }\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n var number = e.target.value;\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (tags === 'lower' || tags === 'upper') {\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n number = number + '.000';\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (len === 0) {\r\n number = number + '000';\r\n } else if (len === 1) {\r\n number = number + '00';\r\n } else if (len === 2) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n } else {\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n number = number + '.00';\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (len === 0) {\r\n number = number + '00';\r\n } else if (len === 1) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.checkInputParamsStatus(tags, number);\r\n }\r\n\r\n checkInputParamsStatus(tags, number) {\r\n let { lower, upper } = this.state;\r\n\r\n let priceRangeStatus = '';\r\n let priceRangeMessage = '';\r\n\r\n if (tags === 'lower') {\r\n if (upper != '' && number != '') {\r\n let tmpUpper = parseFloat(upper);\r\n let tmpLower = parseFloat(number);\r\n if (tmpLower >= tmpUpper) {\r\n priceRangeStatus = 'error';\r\n priceRangeMessage = languageMessages['lowestPriceCannotBeGreaterThanHighestPrice'];\r\n }\r\n }\r\n }\r\n\r\n if (tags === 'upper') {\r\n if (lower != '' && number != '') {\r\n let tmpUpper = parseFloat(number);\r\n let tmpLower = parseFloat(lower);\r\n if (tmpLower >= tmpUpper) {\r\n priceRangeStatus = 'error';\r\n priceRangeMessage = languageMessages['lowestPriceCannotBeGreaterThanHighestPrice'];\r\n }\r\n }\r\n }\r\n\r\n var tmpPrice = {};\r\n tmpPrice[tags] = number;\r\n\r\n tmpPrice['IsStartBacktest'] = this.checkIsStartBacktest(tags, number);\r\n\r\n tmpPrice['priceRangeStatus'] = priceRangeStatus;\r\n tmpPrice['priceRangeMessage'] = priceRangeMessage;\r\n tmpPrice['filterError'] = '';\r\n\r\n this.setState(tmpPrice);\r\n }\r\n\r\n handleChangeDayTradeOnly = e => {\r\n var dayTradeOnly = e.target.checked;\r\n\r\n this.setState({ dayTradeOnly });\r\n }\r\n\r\n checkIsStartBacktest(type, value) {\r\n var IsStartBacktest = false;\r\n let { symbolCode, startDate, endDate, lower, upper } = this.state;\r\n\r\n switch (type) {\r\n case 'symbolCode':\r\n symbolCode = value;\r\n break;\r\n case 'lower':\r\n lower = value;\r\n break;\r\n case 'upper':\r\n upper = value;\r\n break;\r\n case 'startDate':\r\n startDate = value;\r\n break;\r\n case 'endDate':\r\n endDate = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (symbolCode != '' && lower != '' && upper != '') {\r\n var tmpLower = parseFloat(lower);\r\n var tmpUpper = parseFloat(upper);\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n if (tmpUpper > tmpLower && oDate2.getTime() > oDate1.getTime()) {\r\n IsStartBacktest = true;\r\n }\r\n }\r\n\r\n return IsStartBacktest;\r\n }\r\n\r\n onStartBacktest = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, startDate, endDate, lastTimes, latestPrice, lower, upper, dayTradeOnly } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n filterError: '',\r\n spinLoadding: true,\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'exploreGridStrategy',\r\n SymbolCode: symbolCode,\r\n SymbolName: symbolName,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n Lower: lower,\r\n Upper: upper,\r\n DayTradeOnly: dayTradeOnly ? '1' : '0',\r\n Last: latestPrice,\r\n reqId: guid(),\r\n CommType: 0,\r\n MinComm: 0,\r\n PerShareCommission: 0\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n importBacktestResult = () => {\r\n //console.log('import');\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode, percent } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['optimalGrid']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['gridSetting']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['priceRange']} validateStatus={this.state.priceRangeStatus} help={this.state.priceRangeMessage}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.lower} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['lowestPriceRange']} data-value='lower' />\r\n <span style={{ margin: '0 10px' }}>--</span>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.upper} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['highestPriceRange']} data-value='upper' />\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item>\r\n <Checkbox checked={this.state.dayTradeOnly} onChange={this.handleChangeDayTradeOnly}>{languageMessages['DayTradeOnly']}</Checkbox>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestCondition']}</div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <Button size='small' loading={false} disabled={!this.state.IsStartBacktest} onClick={this.onStartBacktest}>\r\n {languageMessages['startBacktest']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['backtestStatus']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['backtestingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['backtestCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n \r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptimalGridResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(OptimalGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport OptimalGridResult from './OptimalGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyOptimalGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n \r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '3',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].statistics != null) {\r\n statisticsResult = tmpDataSource[item].statistics;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n var maxdrawdown = this.keepDecimals(tmpDataSource[item].md, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n maxRateOfReturn: maxRateOfReturn,\r\n maxdrawdown: maxdrawdown,\r\n strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n strategyNumber: tmpDataSource[item].sn,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols, backtestIds, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_single_stock_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_single_stock_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_single_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_single_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_backtest_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n\r\n /**\r\n let { dataSource, singleStockBacktestResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = backtestIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n }\r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n */\r\n break;\r\n case 'get_remove_backtest_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n \r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n }else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_symbol_items\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.backtest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_backtest\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n \r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['maxRateOfReturn']+'(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxdrawdown']+'(%)',\r\n dataIndex: 'maxdrawdown',\r\n width: 105,\r\n align: 'center',\r\n sorter: (a, b) => a.maxdrawdown - b.maxdrawdown,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxdrawdown'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['strategyNumber'],\r\n dataIndex: 'strategyNumber',\r\n align: 'center',\r\n width: 90,\r\n sorter: (a, b) => a.strategyNumber - b.strategyNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['backtesting'] : languageMessages['complete']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n \r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['optimalGrid']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n \r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptimalGridResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyOptimalGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message, Select, Upload, Icon, Radio, Input } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n\r\nvar statistics = [\r\n //{ 'sName': languageMessages['Original income/Profit after optimization'], 'name': [languageMessages['Original income'], languageMessages['Original annualized income'], languageMessages['Profit after optimization'], languageMessages['Annualized income after optimization']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#73c0de', '#fac858', '#5470c6', '#ee6666'], minInterval: 0 },\r\n { 'sName': languageMessages['Original income/Profit after optimization'], 'name': [languageMessages['totalRet'], languageMessages['annualizedRateOfReturn']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#73c0de', '#fac858'], minInterval: 0 },\r\n { 'sName': languageMessages['profitFactor'], 'name': [languageMessages['Original profit-loss ratio'], languageMessages['Profit and loss ratio after optimization']], 'xData': [], 'yName': '', \"data\": [], color: ['#73c0de', '#5470c6'], minInterval: 0 },\r\n { 'sName': languageMessages['buyingPowerRequried'], 'name': [languageMessages['buyingPowerRequried']], 'xData': [], 'yName': '', \"data\": [], color: ['#fac858'], minInterval: 0 },\r\n];\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['Original strategy income'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['stocks + original strategy income'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['Profit after optimization'],\r\n 'color': '#ea7ccc',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['stocks + income after optimization'],\r\n 'color': '#fac858',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass BatchResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n }\r\n\r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n tradeCondition: [],\r\n\r\n income: '',\r\n equity: '',\r\n trade: '',\r\n\r\n infoDataSource: [],\r\n dataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalBatchId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '',\r\n initCapital: 0,\r\n capital: 0,\r\n gridCnt: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n promptModalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n fileList: [],\r\n\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n let promptModalVisible = false;\r\n switch (status) {\r\n case 3:\r\n promptModalVisible = true;\r\n break;\r\n default:\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false, promptModalVisible });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n resizeChart() {\r\n var statistics = this.charts['statistics'];\r\n var incomeChart = this.charts['income'];\r\n\r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n\r\n if (statistics != null) {\r\n for (let i = 0; i < 3; i++) {\r\n statistics[\"statistics-\" + i].resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setStatisticsData(chartName, chartData) {\r\n this.charts[chartName] = {};\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < chartData.length; i++) {\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"33.3%\";\r\n div.style.height = \"360px\";\r\n\r\n var ids = chartName + \"-\" + i;\r\n div.setAttribute(\"id\", ids);\r\n pdiv.appendChild(div)\r\n\r\n //chartData[i].color = colors[i];\r\n\r\n this.charts[chartName][ids] = echarts.init(document.getElementById(ids));\r\n this.charts[chartName][ids].setOption(getChartOption('grid', chartData[i]));\r\n\r\n this.charts[chartName][ids].resize();\r\n }\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n var tradeCondition = [];\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n };\r\n\r\n for (var i = 0; i < 3; i++) {\r\n statistics[i].xData = [];\r\n statistics[i].data = [];\r\n }\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n incomes.data[3].data = [];\r\n incomes.data[4].data = [];\r\n\r\n var income = '';\r\n var trade = '';\r\n\r\n let modalBacktestId = '';\r\n let modalBatchId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n\r\n var infoDataSource = [];\r\n var dataSource = [];\r\n \r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n\r\n var statisticsItems = [];\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n //statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n //statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n\r\n statistics[1].data.push({ data: [], markPoint: { color: '#fff', data: []} });\r\n statistics[1].data.push({ data: [], markPoint: { color: '#fff', data: []} });\r\n\r\n statistics[2].data.push({ data: [], markPoint: { color: '#fff', data: []} });\r\n\r\n for (var item in statisticsResult) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n\r\n if (modalBacktestId === '') modalBacktestId = statisticsResult[item].backtestId;\r\n if (modalBatchId === '') modalBatchId = statisticsResult[item].batchId;\r\n if (modalSymbolCode === '') modalSymbolCode = statisticsResult[item].symbol;\r\n if (modalSymbolName === '') modalSymbolName = statisticsResult[item].symbolName;\r\n if (modalStrategyType === '') modalStrategyType = statisticsResult[item].dayTradeOnly;\r\n\r\n var strategyName = statisticsResult[item].strategyName;\r\n strategyName = strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n\r\n infoDataSource.push({\r\n key: item,\r\n strategyName: strategyName,\r\n targetDistance: statisticsResult[item].targetDistance,\r\n stopDistance: statisticsResult[item].stopDistance,\r\n maxHoldingPeriod: statisticsResult[item].maxHoldingPeriod\r\n });\r\n\r\n conditions.push({ 'id': statisticsResult[item].backtestId, 'name': strategyName });\r\n\r\n var oInitialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].oInitialRateOfReturnOnCapital, '');\r\n var initialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].initialRateOfReturnOnCapital, '');\r\n var oAnnualizedRateOfReturn = this.keepDecimals(statisticsResult[item].oAnnualizedRateOfReturn, '');\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n var oProfitFactor = this.keepDecimals(statisticsResult[item].oProfitFactor, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n var chartCapital = statisticsResult[item].capital;\r\n\r\n if (capital === 0) capital = chartCapital;\r\n if (gridCnt === 0) gridCnt = statisticsResult[item].gridCnt;\r\n \r\n //statistics[0].xData.push(strategyName);\r\n statistics[1].xData.push(strategyName);\r\n statistics[2].xData.push(strategyName);\r\n\r\n /**\r\n if (statistics[0].data[0][\"data\"].length == 0) {\r\n statistics[0].data[0][\"data\"].push({ value: oInitialRateOfReturnOnCapital, label: { position: oInitialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[1][\"data\"].push({ value: oAnnualizedRateOfReturn, label: { position: oAnnualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[2][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[3][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n } else {\r\n statistics[0].data[0][\"data\"].push({ value: '', label: { position: 'top' } });\r\n statistics[0].data[1][\"data\"].push({ value: '', label: { position: 'top' } });\r\n statistics[0].data[2][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[3][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n }\r\n \r\n statistics[0].data[0][\"data\"].push({ value: oInitialRateOfReturnOnCapital, label: { position: oInitialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[1][\"data\"].push({ value: oAnnualizedRateOfReturn, label: { position: oAnnualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[2][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[3][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n */\r\n \r\n if (statisticsItems.length == 0) {\r\n statisticsItems.push({\r\n strategyName: languageMessages['Original strategy'],\r\n rateOfReturn: { value: oInitialRateOfReturnOnCapital, label: { position: oInitialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } },\r\n annualizedRateOfReturn: { value: oAnnualizedRateOfReturn, label: { position: oAnnualizedRateOfReturn >= 0 ? 'top' : 'bottom' } }\r\n });\r\n }\r\n statisticsItems.push({\r\n strategyName: languageMessages['Optimized']+strategyName,\r\n rateOfReturn: { value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } },\r\n annualizedRateOfReturn: { value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } }\r\n });\r\n\r\n if (oProfitFactor >= 100000) {\r\n //statistics[1].markPoint.symbol = 'pin';\r\n //statistics[1].markPoint.push({ color: color, data: { value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: oProfitFactor / 3 } });//.color = color;\r\n //statistics[1].markPoint.data.push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: oProfitFactor / 3 });\r\n\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n statistics[1].data[0][\"data\"].push({ value: oProfitFactor, label: { position: 'top' }, itemStyle: { color: color } });\r\n statistics[1].data[0][\"markPoint\"][\"color\"] = color;//: color, data: { value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: oProfitFactor / 3 } };\r\n statistics[1].data[0][\"markPoint\"][\"data\"].push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: oProfitFactor / 3 });\r\n } else {\r\n statistics[1].data[0][\"data\"].push({ value: oProfitFactor, label: { position: oProfitFactor >= 0 ? 'top' : 'bottom' } });\r\n\r\n var tmpProfitFactor = parseFloat(oProfitFactor);\r\n var tmpMaxProfitFactor = parseFloat(maxProfitFactor);\r\n if (tmpProfitFactor > tmpMaxProfitFactor) maxProfitFactor = oProfitFactor;\r\n }\r\n \r\n if (profitFactor >= 100000) {\r\n //statistics[1].markPoint.symbol = 'pin';\r\n //statistics[1].markPoint.push({ color: color, data: { value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 } });//.color = color;\r\n //statistics[1].markPoint.data.push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 });\r\n\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n statistics[1].data[1][\"data\"].push({ value: profitFactor, label: { position: 'top' }, itemStyle: { color: color } });\r\n statistics[1].data[1][\"markPoint\"][\"color\"] = color;\r\n statistics[1].data[1][\"markPoint\"][\"data\"].push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 });\r\n } else {\r\n statistics[1].data[1][\"data\"].push({ value: profitFactor, label: { position: profitFactor >= 0 ? 'top' : 'bottom' } });\r\n\r\n var tmpProfitFactor = parseFloat(profitFactor);\r\n var tmpMaxProfitFactor = parseFloat(maxProfitFactor);\r\n if (tmpProfitFactor > tmpMaxProfitFactor) maxProfitFactor = profitFactor;\r\n }\r\n\r\n statistics[2].data[0][\"data\"].push({ value: chartCapital, label: { position: chartCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[2].data[0][\"markPoint\"] = { color: '#fff', data: [] };\r\n }\r\n \r\n for (var item in statisticsItems) {\r\n statistics[0].xData.push(statisticsItems[item].strategyName);\r\n statistics[0].data[0][\"data\"].push(statisticsItems[item].rateOfReturn);\r\n statistics[0].data[1][\"data\"].push(statisticsItems[item].annualizedRateOfReturn);\r\n }\r\n \r\n if (maxProfitFactor > 0) {\r\n for (var item in statistics[1].data[0][\"data\"]) {\r\n if (statistics[1].data[0][\"data\"][item].value >= 100000) {\r\n statistics[1].data[0][\"data\"][item].value = maxProfitFactor;\r\n }\r\n }\r\n \r\n for (var ii in statistics[1].data[0][\"markPoint\"][\"data\"]) {\r\n statistics[1].data[0][\"markPoint\"][\"data\"][ii].yAxis = maxProfitFactor / 3;\r\n }\r\n\r\n for (var item in statistics[1].data[1][\"data\"]) {\r\n if (statistics[1].data[1][\"data\"][item].value >= 100000) {\r\n statistics[1].data[1][\"data\"][item].value = maxProfitFactor;\r\n }\r\n }\r\n \r\n for (var ii in statistics[1].data[1][\"markPoint\"][\"data\"]) {\r\n statistics[1].data[1][\"markPoint\"][\"data\"][ii].yAxis = maxProfitFactor / 3;\r\n }\r\n }\r\n\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n trade = conditions[0].id;\r\n\r\n modalStrategyName = conditions[0].name;\r\n\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n //strategyName = statisticsResult[0].strategyName;\r\n\r\n var oRateOfReturn = statisticsResult[0].oEquityCurve.rateOfReturn;\r\n var oBRateOfReturn = statisticsResult[0].oEquityCurve.bRateOfReturn;\r\n incomes.data[0].data = oRateOfReturn;\r\n incomes.data[1].data = oBRateOfReturn;\r\n var oSuperimposedIncome = [];\r\n for (var ii in oRateOfReturn) {\r\n var tmp = parseFloat(oRateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n oSuperimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[2].data = oSuperimposedIncome;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n //var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[3].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n //incomes.data[3].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[4].data = superimposedIncome;\r\n\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n }\r\n\r\n var dd = infoDataSource.filter(function (e) { return '0' != e.maxHoldingPeriod; });\r\n if (dd.length == 0) {\r\n var tmpName = conditions[0].name.replace('-m', '').replace('-d', '');\r\n tradeCondition.push({ 'id': conditions[0].id, 'name': tmpName });\r\n } else {\r\n tradeCondition = conditions;\r\n }\r\n\r\n if (tradeCondition.length > 0) {\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n /**\r\n * è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–å‡ºï¼Œä»·æ ¼=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n 第二行, æ–¹å‘= ä¹°å…¥ï¼Œä»·æ ¼=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n \r\n è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–出,æˆäº¤ä»·=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“进仓时间â€\r\n 第二行, æ–¹å‘= 买入,æˆäº¤ä»·=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“出仓时间â€\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n * \r\n */\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolCode: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolCode: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStatisticsData(\"statistics\", statistics);\r\n this.setIncomeData(\"income\", incomes);\r\n\r\n let initCapital = capital;\r\n this.setState({ conditions, tradeCondition, income, trade, dataSource, infoDataSource, statisticsResult, modalBacktestId, modalBatchId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType, initCapital, capital, gridCnt });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { status, statisticsResult, basePosition, share } = props;\r\n\r\n switch (status) {\r\n case 'get_base_position_success':\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n basePosition,\r\n share,\r\n spinLoadding: false\r\n }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n\r\n break;\r\n case 'get_base_position_fail':\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n break;\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n let modalBacktestId = '';\r\n let modalBatchId = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.backtestId; });\r\n if (tmpIncomes.length > 0) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': tmpIncomes[0].gridCnt });\r\n\r\n var oRateOfReturn = tmpIncomes[0].oEquityCurve.rateOfReturn;\r\n var oBRateOfReturn = tmpIncomes[0].oEquityCurve.bRateOfReturn;\r\n incomes.data[0].data = oRateOfReturn;\r\n incomes.data[1].data = oBRateOfReturn;\r\n var oSuperimposedIncome = [];\r\n for (var ii in oRateOfReturn) {\r\n var tmp = parseFloat(oRateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n oSuperimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[2].data = oSuperimposedIncome;\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n //var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n incomes.data[3].data = rateOfReturn;\r\n //incomes.data[1].name = strategyName;\r\n //incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[4].data = superimposedIncome;\r\n\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n modalBacktestId = tmpIncomes[0].backtestId;\r\n modalBatchId = tmpIncomes[0].batchId;\r\n modalStrategyName = tmpIncomes[0].strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n capital = tmpIncomes[0].capital;\r\n gridCnt = tmpIncomes[0].gridCnt;\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n let initCapital = capital;\r\n this.setState({ income, modalBacktestId, modalBatchId, modalStrategyName, initCapital, capital, gridCnt });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.backtestId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolCode: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolCode: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n }\r\n }\r\n\r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n\r\n renderModalContent() {\r\n if (this.state.tradeType == 0) {\r\n return this.renderModalRealTimeContent();\r\n } else {\r\n return this.renderModalSimulationContent();\r\n }\r\n }\r\n\r\n onRealTime = () => {\r\n this.setState({\r\n spinLoadding: true,\r\n tradeType: 0,\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.props.type, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: 0 } });\r\n }\r\n });\r\n }\r\n\r\n onSimulation = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n });\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n buildBindBroker = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_auth\", payload: { u: user.username } });\r\n }\r\n }\r\n\r\n handleChangeCapital = e => {\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.props.type, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n handleBlurCapital = e => {\r\n e.preventDefault();\r\n\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.props.type, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n renderModalRealTimeContent() {\r\n return window.webType === 'US' ? this.renderModalRealTimeContentForUs() : this.renderModalRealTimeContentForCn();\r\n }\r\n\r\n renderModalRealTimeContentForCn() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'åŽé‘«è¯åˆ¸' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']}\r\n <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n\r\n </div>\r\n }\r\n\r\n renderModalRealTimeContentForUs() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'TD', 'name': 'TdAmeritrade' }, { 'id': 'IB', 'name': 'IB' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div style={{ display: this.state.broker == 'TD' ? '' : 'none' }}><Button size='small' onClick={this.buildBindBroker}>{languageMessages['login td account']}</Button></div>\r\n <div style={{ display: this.state.broker == 'IB' ? '' : 'none' }}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n renderModalSimulationContent() {\r\n let newDate = moment().add(1, 'd');\r\n let fromDate = newDate.format('YYYY-MM-DD 09:30:00');\r\n let endDate = window.webType === 'US' ? newDate.add(2, 'w').format('YYYY-MM-DD 16:00:00') : newDate.add(2, 'w').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { tradeType, modalBacktestId, modalBatchId, modalSymbolCode, modalStrategyType, capital, broker } = this.state;\r\n\r\n if (tradeType == 0 && this.state.initCapital > capital) {\r\n message.info(languageMessages['Buying power to allocate tips']);\r\n } else {\r\n this.setState({ spinLoadding: true }, () => {\r\n let category = parseInt(this.props.type);\r\n category += 3;\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n BatchId: modalBatchId,\r\n StrategyId: '0',\r\n SymbolCode: modalSymbolCode,\r\n Category: category,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ExecutionPlatform: broker,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n handlePromptOk = e => {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n handlePromptCancel = e => {\r\n this.setState({ promptModalVisible: false });\r\n }\r\n\r\n render() {\r\n var { conditions, tradeCondition, income, trade, dataSource, infoDataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode'\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n const infoColumns = [{\r\n title: languageMessages['gridStrategy'],\r\n dataIndex: 'strategyName',\r\n width: 80\r\n }, {\r\n title: languageMessages['targetDistance'],\r\n dataIndex: 'targetDistance',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (row['targetDistance'] != null && row['targetDistance'] != '') {\r\n const targetDistance = row['targetDistance'].replace('%', '');\r\n if (targetDistance == '$target') {\r\n return <span>{languageMessages['original']}</span>;\r\n } else if (targetDistance > 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else if (targetDistance == 0) {\r\n return '';\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n }, {\r\n title: languageMessages['stopDistance'],\r\n dataIndex: 'stopDistance',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (row['stopDistance'] != null && row['stopDistance'] != '') {\r\n const stopDistance = row['stopDistance'].replace('%', '');\r\n if (stopDistance > 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else if (stopDistance == 0) {\r\n return '';\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxHoldingPeriod'],\r\n dataIndex: 'maxHoldingPeriod',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (text == '') return <span></span>\r\n else if (text == '0') return <span>{languageMessages['none']}</span>;\r\n else return <span>{text}{row['strategyName'].charAt(row['strategyName'].length - 1) == 'm' ? languageMessages['minute'] : languageMessages['day']}</span>;\r\n }\r\n }\r\n ];\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['optimized details']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={infoColumns} dataSource={infoDataSource} pagination={false} />\r\n\r\n <div id=\"statistics\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={income == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByIncome} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n <div className='common-trade-btn'>\r\n <Button size='small' onClick={this.onRealTime}>{languageMessages['goRealTime']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onSimulation}>{languageMessages['goSimulation']}</Button>\r\n </div>\r\n </div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {tradeCondition.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n\r\n <Modal\r\n title={languageMessages['prompt']}\r\n visible={this.state.promptModalVisible}\r\n onOk={this.handlePromptOk}\r\n onCancel={this.handlePromptCancel}>\r\n <div dangerouslySetInnerHTML={{ __html: languageMessages['simulated trading limit'] }} />\r\n <p>{languageMessages['simulated trading limit prompt']}</p>\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { BatchResult as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, Button, Form, Divider, Spin, Modal, Progress, message } from 'antd';\r\n\r\nimport BatchResult from './BatchResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass OptimalBatchPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.backtestId = \"0\";\r\n if (history.location.state !== undefined) {\r\n this.backtestId = history.location.state.backtestId;\r\n }\r\n\r\n this.user = {};\r\n this.state = {\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n \r\n priceRange: '',\r\n\r\n backtestRange: '',\r\n\r\n dayTradeOnly: '0',\r\n\r\n lastTimes: 0,\r\n type: 3,\r\n\r\n spinLoadding: true,\r\n\r\n filterError: '',\r\n\r\n isStartOptimized: false,\r\n\r\n backtestStatus: 0,\r\n\r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callOptimalBatchError\", this.callOptimalBatchError);\r\n emitter.addListener('callOptimalBatchLastTimes', this.callOptimalBatchLastTimes);\r\n emitter.addListener('callOptimalBatchStatus', this.callOptimalBatchStatus);\r\n emitter.addListener('callOptimalBatchResult', this.callOptimalBatchResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callOptimalBatchError', this.callOptimalBatchError);\r\n emitter.removeListener('callOptimalBatchLastTimes', this.callOptimalBatchLastTimes);\r\n emitter.removeListener('callOptimalBatchStatus', this.callOptimalBatchStatus);\r\n emitter.removeListener('callOptimalBatchResult', this.callOptimalBatchResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callOptimalBatchError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callOptimalBatchLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //if (value > 0) {\r\n // value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n //}\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callOptimalBatchStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callOptimalBatchResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n\r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n if (br[0].StrategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var strategyName = backtestResult[item]['strategyName'];\r\n //if (strategyName.indexOf('strategy') == -1) continue;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: br[0].StrategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: backtest.DayTradeOnly,\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',\r\n\r\n capital: br[0].Capital,\r\n\r\n oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_batch_info\", payload: { u: userId, b: this.backtestId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bo':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n\r\n return lastTimes;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, batchInfo, permission, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_batch_info_success':\r\n var lastTimes = 0;\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n lastTimes = this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var symbolCode = '';\r\n var latestPrice = 0;\r\n var quoteChange = 0;\r\n var priceRange = '';\r\n var backtestRange = '';\r\n var dayTradeOnly = '0';\r\n var isStartOptimized = false;\r\n if (batchInfo != undefined) {\r\n symbolCode = batchInfo.symbol;\r\n latestPrice = batchInfo.latestPrice;\r\n quoteChange = batchInfo.quoteChange;\r\n priceRange = batchInfo.priceRange;\r\n backtestRange = batchInfo.backtestRange;\r\n dayTradeOnly = batchInfo.dayTradeOnly;\r\n\r\n //this.onStartOptimized();\r\n isStartOptimized = true;\r\n }\r\n\r\n this.setState({ symbolCode, latestPrice, quoteChange, priceRange, backtestRange, dayTradeOnly, isStartOptimized, lastTimes, spinLoadding: false });\r\n break;\r\n case 'get_batch_info_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n getCapital(tmpLower, tmpUpper, gridCnt) {\r\n if (window.webType === 'US') {\r\n let gridWidth = 0;\r\n let capital = 0;\r\n\r\n return { gridWidth, capital };\r\n } else {\r\n let baseNumber = 100;\r\n\r\n let priceRange = tmpUpper - tmpLower;\r\n\r\n let tmpGridCnt = parseInt(gridCnt);\r\n let gridWidth = priceRange / tmpGridCnt;\r\n\r\n let tmpPrice = (tmpGridCnt + 1) / 2;\r\n tmpPrice = parseInt(tmpPrice);\r\n\r\n let comm = Math.ceil(tmpPrice * 5 / 0.0003 / 1000) * 1000;\r\n\r\n let capital = (tmpLower + tmpLower + (tmpPrice - 1) * gridWidth) * tmpPrice / 2 * baseNumber;\r\n capital = Math.ceil(capital);\r\n\r\n capital = Math.max(comm, capital);\r\n\r\n return { gridWidth, capital };\r\n }\r\n }\r\n\r\n onStartOptimized = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBatchBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'optimalBatch',\r\n SymbolCode: symbolCode,\r\n SymbolName: '',\r\n BacktestId: this.backtestId,\r\n BacktestType: this.state.type,\r\n Last: latestPrice,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n var { percent } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['optimalGrid'] + ' » ' + languageMessages['Multi-dimensionalOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <div>{this.state.symbolCode}</div>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['priceRange']}>\r\n {this.state.priceRange}\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item>\r\n {this.state.dayTradeOnly === '0' ? languageMessages['Cross-day trading only'] : languageMessages['Day trading only']}\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']}>\r\n {this.state.backtestRange}\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <Button size='small' loading={false} disabled={!this.state.isStartOptimized} onClick={this.onStartOptimized}>\r\n {languageMessages['startOptimized']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['backtestStatus']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['optimizingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['optimizedCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BatchResult dispatch={this.props.dispatch} type={this.state.type} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(OptimalBatchPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport BatchResult from './BatchResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyOptimalBatchPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n strategyData: [],\r\n\r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n \r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '3',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setStatisticsResult(backtestResult) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: backtestResult[item]['strategyName'],\r\n\r\n symbol: backtestResult[item]['symbol'],\r\n symbolName: backtestResult[item]['symbolName'],\r\n \r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: backtestResult[item]['gridCnt'],\r\n gridWidth: '',\r\n\r\n capital: backtestResult[item]['capital'],\r\n dayTradeOnly: backtestResult[item]['dayTradeOnly'],\r\n\r\n oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpDataSource[item].bbs);\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var oMaxRateOfReturn = this.keepDecimals(tmpDataSource[item].omr, '');\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n oMaxRateOfReturn: oMaxRateOfReturn,\r\n maxRateOfReturn: maxRateOfReturn,\r\n //strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n //strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_optimize_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_optimize_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_optimize_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_optimize_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_optimize_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'get_remove_optimize_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n\r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_symbol\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.batchbacktest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_optimize\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpData[0].bbs);\r\n }\r\n \r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['Original max annualized income'] + '(%)',\r\n dataIndex: 'oMaxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.oMaxRateOfReturn - b.oMaxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['oMaxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['max Annualized income after optimization'] + '(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 150,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 3 ? languageMessages['complete'] : status == 5 ? languageMessages['error'] : languageMessages['optimizing']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myBacktest'] + ' » ' + languageMessages['Multi-dimensionalOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BatchResult dispatch={this.props.dispatch} type={this.state.type} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyOptimalBatchPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message, Select, Upload, Icon, Radio } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n\r\nvar statistics = [\r\n //{ 'sName': languageMessages['Original income/Profit after optimization'], 'name': [languageMessages['Original income'], languageMessages['Original annualized income'], languageMessages['Profit after optimization'], languageMessages['Annualized income after optimization']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#73c0de', '#fac858', '#5470c6', '#ee6666'], minInterval: 0 },\r\n { 'sName': languageMessages['totalRet'] + '/' + languageMessages['annualizedRateOfReturn'], 'name': [languageMessages['totalRet'], languageMessages['annualizedRateOfReturn']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#73c0de', '#fac858'], minInterval: 0 },\r\n { 'sName': languageMessages['profitFactor'], 'name': [languageMessages['profitFactor']], 'xData': [], 'yName': '', \"data\": [], color: ['#5470c6'], minInterval: 0 },\r\n { 'sName': languageMessages['buyingPowerRequried'], 'name': [languageMessages['buyingPowerRequried']], 'xData': [], 'yName': '', \"data\": [], color: ['#fac858'], minInterval: 0 },\r\n];\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n /**\r\n 'data': [\r\n {\r\n 'name': languageMessages['Original strategy income'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['stocks + original strategy income'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['Profit after optimization'],\r\n 'color': '#ea7ccc',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['stocks + income after optimization'],\r\n 'color': '#fac858',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n */\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass OptResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n }\r\n\r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n tradeCondition: [],\r\n\r\n income: '',\r\n equity: '',\r\n trade: '',\r\n\r\n infoDataSource: [],\r\n dataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '',\r\n initCapital: 0,\r\n capital: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n promptModalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n fileList: [],\r\n\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n let promptModalVisible = false;\r\n switch (status) {\r\n case 3:\r\n promptModalVisible = true;\r\n break;\r\n default:\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false, promptModalVisible });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n resizeChart() {\r\n var statistics = this.charts['statistics'];\r\n var incomeChart = this.charts['income'];\r\n\r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n\r\n if (statistics != null) {\r\n for (let i = 0; i < 3; i++) {\r\n statistics[\"statistics-\" + i].resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setStatisticsData(chartName, chartData) {\r\n this.charts[chartName] = {};\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < chartData.length; i++) {\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"33.3%\";\r\n div.style.height = \"360px\";\r\n\r\n var ids = chartName + \"-\" + i;\r\n div.setAttribute(\"id\", ids);\r\n pdiv.appendChild(div)\r\n\r\n //chartData[i].color = colors[i];\r\n\r\n this.charts[chartName][ids] = echarts.init(document.getElementById(ids));\r\n this.charts[chartName][ids].setOption(getChartOption('grid', chartData[i]));\r\n\r\n this.charts[chartName][ids].resize();\r\n }\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n var tradeCondition = [];\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n };\r\n\r\n for (var i = 0; i < 3; i++) {\r\n statistics[i].xData = [];\r\n statistics[i].data = [];\r\n }\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n //incomes.data[3].data = [];\r\n //incomes.data[4].data = [];\r\n\r\n var income = '';\r\n var trade = '';\r\n\r\n let modalBacktestId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n\r\n var infoDataSource = [];\r\n var dataSource = [];\r\n \r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n \r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n\r\n statistics[1].data.push({ data: [], markPoint: { color: '#fff', data: []} });\r\n\r\n statistics[2].data.push({ data: [], markPoint: { color: '#fff', data: []} });\r\n\r\n var strategyName = '';\r\n for (var item in statisticsResult) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n\r\n if (modalBacktestId === '') modalBacktestId = statisticsResult[item].backtestId;\r\n if (modalSymbolCode === '') modalSymbolCode = statisticsResult[item].symbol;\r\n if (modalSymbolName === '') modalSymbolName = statisticsResult[item].symbolName;\r\n if (modalStrategyType === '') modalStrategyType = statisticsResult[item].dayTradeOnly;\r\n\r\n strategyName = statisticsResult[item].strategyName;\r\n strategyName = strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n var tmpStrategyName = strategyName + '-' + statisticsResult[item].batchId;\r\n\r\n infoDataSource.push({\r\n key: item,\r\n strategyName: tmpStrategyName,\r\n targetDistance: statisticsResult[item].targetDistance,\r\n stopDistance: statisticsResult[item].stopDistance,\r\n maxHoldingPeriod: statisticsResult[item].maxHoldingPeriod\r\n });\r\n\r\n conditions.push({ 'id': statisticsResult[item].batchId, 'name': tmpStrategyName });\r\n\r\n //var oInitialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].oInitialRateOfReturnOnCapital, '');\r\n var initialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].initialRateOfReturnOnCapital, '');\r\n //var oAnnualizedRateOfReturn = this.keepDecimals(statisticsResult[item].oAnnualizedRateOfReturn, '');\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n //var oProfitFactor = this.keepDecimals(statisticsResult[item].oProfitFactor, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n var chartCapital = statisticsResult[item].capital;\r\n\r\n if (capital === 0) capital = chartCapital;\r\n \r\n statistics[0].xData.push(tmpStrategyName);\r\n statistics[1].xData.push(tmpStrategyName);\r\n statistics[2].xData.push(tmpStrategyName);\r\n \r\n statistics[0].data[0][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[1][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n \r\n if (profitFactor >= 100000) {\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: 'top' }, itemStyle: { color: color } });\r\n statistics[1].data[0][\"markPoint\"][\"color\"] = color;\r\n statistics[1].data[0][\"markPoint\"][\"data\"].push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 });\r\n } else {\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: profitFactor >= 0 ? 'top' : 'bottom' } });\r\n\r\n var tmpProfitFactor = parseFloat(profitFactor);\r\n var tmpMaxProfitFactor = parseFloat(maxProfitFactor);\r\n if (tmpProfitFactor > tmpMaxProfitFactor) maxProfitFactor = profitFactor;\r\n }\r\n\r\n statistics[2].data[0][\"data\"].push({ value: chartCapital, label: { position: chartCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[2].data[0][\"markPoint\"] = { color: '#fff', data: [] };\r\n }\r\n\r\n if (maxProfitFactor > 0) {\r\n for (var item in statistics[1].data[0][\"data\"]) {\r\n if (statistics[1].data[0][\"data\"][item].value >= 100000) {\r\n statistics[1].data[0][\"data\"][item].value = maxProfitFactor;\r\n }\r\n }\r\n \r\n for (var ii in statistics[1].data[0][\"markPoint\"][\"data\"]) {\r\n statistics[1].data[0][\"markPoint\"][\"data\"][ii].yAxis = maxProfitFactor / 3;\r\n }\r\n }\r\n\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n trade = conditions[0].id;\r\n\r\n modalStrategyName = conditions[0].name;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n \r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n incomes.data[0].data = rateOfReturn;\r\n incomes.data[1].data = bRateOfReturn;\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[2].data = superimposedIncome;\r\n \r\n /**\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n incomes.data[3].data = rateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[4].data = superimposedIncome;\r\n */\r\n }\r\n\r\n var dd = infoDataSource.filter(function (e) { return '0' != e.maxHoldingPeriod; });\r\n if (dd.length == 0) {\r\n tradeCondition.push({ 'id': conditions[0].id, 'name': strategyName });\r\n } else {\r\n tradeCondition = conditions;\r\n }\r\n\r\n if (tradeCondition.length > 0) {\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n /**\r\n * è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–å‡ºï¼Œä»·æ ¼=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n 第二行, æ–¹å‘= ä¹°å…¥ï¼Œä»·æ ¼=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n \r\n è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–出,æˆäº¤ä»·=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“进仓时间â€\r\n 第二行, æ–¹å‘= 买入,æˆäº¤ä»·=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“出仓时间â€\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n * \r\n */\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolCode: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolCode: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStatisticsData(\"statistics\", statistics);\r\n this.setIncomeData(\"income\", incomes);\r\n\r\n let initCapital = capital;\r\n this.setState({ conditions, tradeCondition, income, trade, dataSource, infoDataSource, statisticsResult, modalBacktestId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType, initCapital, capital });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { statisticsResult } = props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n let modalBacktestId = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.batchId; });\r\n if (tmpIncomes.length > 0) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': tmpIncomes[0].gridCnt });\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n incomes.data[0].data = rateOfReturn;\r\n incomes.data[1].data = bRateOfReturn;\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[2].data = superimposedIncome;\r\n\r\n //var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n\r\n /**\r\n incomes.data[3].data = rateOfReturn;\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(oBRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n incomes.data[4].data = superimposedIncome;\r\n */\r\n\r\n modalBacktestId = tmpIncomes[0].backtestId;\r\n modalStrategyName = tmpIncomes[0].strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n capital = tmpIncomes[0].capital;\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n let initCapital = capital;\r\n this.setState({ income, modalBacktestId, modalStrategyName, initCapital, capital });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.batchId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolCode: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolCode: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n }\r\n }\r\n\r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n\r\n renderModalContent() {\r\n if (this.state.tradeType == 0) {\r\n return this.renderModalRealTimeContent();\r\n } else {\r\n return this.renderModalSimulationContent();\r\n }\r\n }\r\n\r\n onRealTime = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n tradeType: 0,\r\n });\r\n }\r\n\r\n onSimulation = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n });\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n renderModalRealTimeContent() {\r\n const brokerItems = [];\r\n\r\n if (window.webType === 'US')\r\n brokerItems.push({ 'id': 'IB', 'name': 'IB' });\r\n else\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'Quancept' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange}>\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.capital}</span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? 'none' : '' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.modalSymbolCode}</span> <span style={{ marginLeft: 10 }}>{strReplace(languageMessages['share'], { '{num}': 0 })}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n renderModalSimulationContent() {\r\n let newDate = moment().add(1, 'd');\r\n let fromDate = newDate.format('YYYY-MM-DD 09:30:00');\r\n let endDate = window.webType === 'US' ? newDate.add(2, 'w').format('YYYY-MM-DD 16:00:00') : newDate.add(2, 'w').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n this.setState({ spinLoadding: true }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { tradeType, modalBacktestId, modalSymbolCode, modalStrategyType, income, capital, broker } = this.state;\r\n\r\n let category = this.props.type;\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n BatchId: income,\r\n StrategyId: '0',\r\n SymbolCode: modalSymbolCode,\r\n Category: category,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ExecutionPlatform: broker,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n handlePromptOk = e => {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n handlePromptCancel = e => {\r\n this.setState({ promptModalVisible: false });\r\n }\r\n\r\n render() {\r\n var { conditions, tradeCondition, income, trade, dataSource, infoDataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode'\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n const infoColumns = [{\r\n title: languageMessages['gridStrategy'],\r\n dataIndex: 'strategyName',\r\n width: 80\r\n }, {\r\n title: languageMessages['targetDistance'],\r\n dataIndex: 'targetDistance',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (row['targetDistance'] != null && row['targetDistance'] != '') {\r\n const targetDistance = row['targetDistance'].replace('%', '');\r\n if (targetDistance == '$target') {\r\n return <span>{languageMessages['original']}</span>;\r\n } else if (targetDistance > 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else if (targetDistance == 0) {\r\n return '';\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n }, {\r\n title: languageMessages['stopDistance'],\r\n dataIndex: 'stopDistance',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (row['stopDistance'] != null && row['stopDistance'] != '') {\r\n const stopDistance = row['stopDistance'].replace('%', '');\r\n if (stopDistance > 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else if (stopDistance == 0) {\r\n return '';\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxHoldingPeriod'],\r\n dataIndex: 'maxHoldingPeriod',\r\n align: 'right',\r\n render: (text, row, index) => {\r\n if (text == '') return <span></span>\r\n else if (text == '0') return <span>{languageMessages['none']}</span>;\r\n else return <span>{text}{languageMessages['minute']}</span>;\r\n //else return <span>{text}{row['strategyName'].charAt(row['strategyName'].length - 1) == 'm' ? languageMessages['minute'] : languageMessages['day']}</span>;\r\n }\r\n }\r\n ];\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['optimized details']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={infoColumns} dataSource={infoDataSource} pagination={false} />\r\n\r\n <div id=\"statistics\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={income == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByIncome} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n <div className='common-trade-btn'>\r\n <Button size='small' disabled={window.webType === 'US' ? false : true} onClick={this.onRealTime}>{languageMessages['goRealTime']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onSimulation}>{languageMessages['goSimulation']}</Button>\r\n </div>\r\n </div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {tradeCondition.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n\r\n <Modal\r\n title={languageMessages['prompt']}\r\n visible={this.state.promptModalVisible}\r\n onOk={this.handlePromptOk}\r\n onCancel={this.handlePromptCancel}>\r\n <div dangerouslySetInnerHTML={{ __html: languageMessages['simulated trading limit'] }} />\r\n <p>{languageMessages['simulated trading limit prompt']}</p>\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { OptResult as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, Button, Form, Divider, Spin, Modal, Progress } from 'antd';\r\n\r\nimport OptResult from './OptResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass OptimalOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.backtestId = \"0\";\r\n if (history.location.state !== undefined) {\r\n this.backtestId = history.location.state.backtestId;\r\n }\r\n\r\n this.user = {};\r\n this.state = {\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n \r\n priceRange: '',\r\n\r\n backtestRange: '',\r\n\r\n dayTradeOnly: '0',\r\n\r\n lastTimes: 0,\r\n type: 3,\r\n\r\n spinLoadding: true,\r\n\r\n filterError: '',\r\n\r\n isStartOptimized: false,\r\n\r\n backtestStatus: 0,\r\n\r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callOptimalOptError\", this.callOptimalOptError);\r\n emitter.addListener('callOptimalOptLastTimes', this.callOptimalOptLastTimes);\r\n emitter.addListener('callOptimalOptStatus', this.callOptimalOptStatus);\r\n emitter.addListener('callOptimalOptResult', this.callOptimalOptResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callOptimalOptError', this.callOptimalOptError);\r\n emitter.removeListener('callOptimalOptLastTimes', this.callOptimalOptLastTimes);\r\n emitter.removeListener('callOptimalOptStatus', this.callOptimalOptStatus);\r\n emitter.removeListener('callOptimalOptResult', this.callOptimalOptResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callOptimalOptError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callOptimalOptLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callOptimalOptStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callOptimalOptResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n\r\n /**\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n */\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n\r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n if (br[0].StrategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var strategyName = backtestResult[item]['strategyName'];\r\n //if (strategyName.indexOf('strategy') == -1) continue;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: br[0].StrategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: backtest.DayTradeOnly,\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',\r\n\r\n capital: br[0].Capital,\r\n\r\n //oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n //oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n //oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n //oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_info\", payload: { u: userId, b: this.backtestId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bo':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n\r\n return lastTimes;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, optInfo, permission } = props;\r\n\r\n switch (status) {\r\n case 'get_opt_info_success':\r\n var lastTimes = 0;\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n lastTimes = this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var symbolCode = '';\r\n var latestPrice = 0;\r\n var quoteChange = 0;\r\n var priceRange = '';\r\n var backtestRange = '';\r\n var dayTradeOnly = '0';\r\n var isStartOptimized = false;\r\n if (optInfo != undefined) {\r\n symbolCode = optInfo.symbol;\r\n latestPrice = optInfo.latestPrice;\r\n quoteChange = optInfo.quoteChange;\r\n priceRange = optInfo.priceRange;\r\n backtestRange = optInfo.backtestRange;\r\n dayTradeOnly = optInfo.dayTradeOnly;\r\n\r\n //this.onStartOptimized();\r\n isStartOptimized = true;\r\n }\r\n\r\n this.setState({ symbolCode, latestPrice, quoteChange, priceRange, backtestRange, dayTradeOnly, isStartOptimized, lastTimes, spinLoadding: false });\r\n break;\r\n case 'get_opt_info_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n getCapital(tmpLower, tmpUpper, gridCnt) {\r\n if (window.webType === 'US') {\r\n let gridWidth = 0;\r\n let capital = 0;\r\n\r\n return { gridWidth, capital };\r\n } else {\r\n let baseNumber = 100;\r\n\r\n let priceRange = tmpUpper - tmpLower;\r\n\r\n let tmpGridCnt = parseInt(gridCnt);\r\n let gridWidth = priceRange / tmpGridCnt;\r\n\r\n let tmpPrice = (tmpGridCnt + 1) / 2;\r\n tmpPrice = parseInt(tmpPrice);\r\n\r\n let comm = Math.ceil(tmpPrice * 5 / 0.0003 / 1000) * 1000;\r\n\r\n let capital = (tmpLower + tmpLower + (tmpPrice - 1) * gridWidth) * tmpPrice / 2 * baseNumber;\r\n capital = Math.ceil(capital);\r\n\r\n capital = Math.max(comm, capital);\r\n\r\n return { gridWidth, capital };\r\n }\r\n }\r\n\r\n onStartOptimized = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBatchBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'optimalOpt',\r\n SymbolCode: symbolCode,\r\n SymbolName: '',\r\n BacktestId: this.backtestId,\r\n BacktestType: this.state.type,\r\n Last: latestPrice,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n var { percent } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['optimalGrid'] + ' » ' + languageMessages['ScrollOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <div>{this.state.symbolCode}</div>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['priceRange']}>\r\n {this.state.priceRange}\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item>\r\n {this.state.dayTradeOnly === '0' ? languageMessages['Cross-day trading only'] : languageMessages['Day trading only']}\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']}>\r\n {this.state.backtestRange}\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <Button size='small' loading={false} disabled={!this.state.isStartOptimized} onClick={this.onStartOptimized}>\r\n {languageMessages['startOptimized']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['backtestStatus']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['optimizingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['optimizedCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptResult dispatch={this.props.dispatch} type={this.state.type} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(OptimalOptPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport OptResult from './OptResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyOptimalOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n strategyData: [],\r\n\r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n \r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '3',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setStatisticsResult(backtestResult) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: backtestResult[item]['strategyName'],\r\n\r\n symbol: backtestResult[item]['symbol'],\r\n symbolName: backtestResult[item]['symbolName'],\r\n \r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: '',\r\n gridWidth: '',\r\n\r\n capital: backtestResult[item]['capital'],\r\n dayTradeOnly: backtestResult[item]['dayTradeOnly'],\r\n\r\n //oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n //oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n //oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n //oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpDataSource[item].bbs);\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n //var oMaxRateOfReturn = this.keepDecimals(tmpDataSource[item].omr, '');\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n //oMaxRateOfReturn: oMaxRateOfReturn,\r\n maxRateOfReturn: maxRateOfReturn,\r\n //strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n //strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_opt_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_opt_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_opt_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_opt_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_opt_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'get_remove_opt_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n\r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_symbol\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.batchbacktest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_opt\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpData[0].bbs);\r\n }\r\n \r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n /**\r\n {\r\n title: languageMessages['Original max annualized income'] + '(%)',\r\n dataIndex: 'oMaxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.oMaxRateOfReturn - b.oMaxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['oMaxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, \r\n */\r\n {\r\n title: languageMessages['maxRateOfReturn'] + '(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 150,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 9 ? languageMessages['complete'] : status == 10 ? languageMessages['error'] : languageMessages['optimizing']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myBacktest'] + ' » ' + languageMessages['ScrollOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptResult dispatch={this.props.dispatch} type={this.state.type} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyOptimalOptPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass BacktestGridResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"income\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n dataSource: [],\r\n infoDataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '',\r\n modalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n history.push(\"/re\");\r\n } else {\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n resizeChart() {\r\n var incomeChart = this.charts['income'];\r\n \r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n this.charts = {\r\n \"income\": null\r\n };\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n\r\n let modalBacktestId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '';\r\n let modalStrategyName = '';\r\n\r\n var infoDataSource = [];\r\n var dataSource = [];\r\n\r\n \r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n let profitFactorItem = [];\r\n\r\n var conditions = [];\r\n for (var item in statisticsResult) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n\r\n if (modalBacktestId === '') modalBacktestId = statisticsResult[item].backtestId;\r\n if (modalSymbolCode === '') modalSymbolCode = statisticsResult[item].symbolCode;\r\n if (modalSymbolName === '') modalSymbolName = statisticsResult[item].symbolName;\r\n if (modalStrategyType === '') modalStrategyType = statisticsResult[item].dayTradeOnly;\r\n \r\n\r\n var strategyName = statisticsResult[item].strategyName;\r\n strategyName = strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n\r\n conditions.push({ 'id': statisticsResult[item].backtestId, 'name': strategyName });\r\n\r\n var initialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].initialRateOfReturnOnCapital, '');\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n\r\n infoDataSource.push({\r\n key: item,\r\n strategyName: strategyName,\r\n\r\n priceRange: statisticsResult[item].priceRange,\r\n gridCnt: statisticsResult[item].gridCnt,\r\n gridWidth: statisticsResult[item].gridWidth,\r\n capital: statisticsResult[item].capital,\r\n\r\n initialRateOfReturnOnCapital: initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: annualizedRateOfReturn,\r\n profitFactor: profitFactor\r\n });\r\n }\r\n\r\n if (conditions.length > 0) {\r\n\r\n modalStrategyName = conditions[0].name;\r\n\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n //strategyName = statisticsResult[0].strategyName;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n /**\r\n * è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–å‡ºï¼Œä»·æ ¼=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n 第二行, æ–¹å‘= ä¹°å…¥ï¼Œä»·æ ¼=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n\r\n è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–出,æˆäº¤ä»·=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“进仓时间â€\r\n 第二行, æ–¹å‘= 买入,æˆäº¤ä»·=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“出仓时间â€\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n * \r\n */\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n }\r\n \r\n this.setIncomeData(\"income\", incomes);\r\n\r\n this.setState({ dataSource, infoDataSource, statisticsResult, modalBacktestId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { statisticsResult } = props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n }\r\n\r\n onRealTime = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n tradeType: 0,\r\n });\r\n }\r\n\r\n onSimulation = () => {\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n });\r\n }\r\n\r\n renderModalContent() {\r\n let fromDate = moment().format('YYYY-MM-DD HH:mm:ss');\r\n let endDate = moment().add(1, 'months').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n this.setState({ spinLoadding: true }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { tradeType, modalBacktestId, modalSymbolCode, modalStrategyType } = this.state;\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n StrategyId: 0,\r\n SymbolCode: modalSymbolCode,\r\n Capital: 10000,\r\n DayTradeOnly: modalStrategyType,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n render() {\r\n var { dataSource, infoDataSource } = this.state;\r\n\r\n const infoColumns = [\r\n {\r\n title: languageMessages['priceRanges'],\r\n dataIndex: 'priceRange',\r\n sorter: (a, b) => a.priceRange < b.priceRange ? -1 : a.priceRange > b.priceRange ? 1 : 0,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['gridCnt'],\r\n dataIndex: 'gridCnt',\r\n align: 'right',\r\n sorter: (a, b) => a.gridCnt - b.gridCnt,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['gridWidths'],\r\n dataIndex: 'gridWidth',\r\n align: 'right',\r\n sorter: (a, b) => a.gridWidth - b.gridWidth,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['capitals'],\r\n dataIndex: 'capital',\r\n align: 'right',\r\n sorter: (a, b) => a.capital - b.capital,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['initialRateOfReturnOnCapital']+'(%)',\r\n dataIndex: 'initialRateOfReturnOnCapital',\r\n align: 'right',\r\n sorter: (a, b) => a.initialRateOfReturnOnCapital < b.initialRateOfReturnOnCapital ? -1 : a.initialRateOfReturnOnCapital > b.initialRateOfReturnOnCapital ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['initialRateOfReturnOnCapital'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['annualizedRateOfReturn']+'(%)',\r\n dataIndex: 'annualizedRateOfReturn',\r\n align: 'right',\r\n sorter: (a, b) => a.annualizedRateOfReturn < b.annualizedRateOfReturn ? -1 : a.annualizedRateOfReturn > b.annualizedRateOfReturn ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['annualizedRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['profitFactor'],\r\n dataIndex: 'profitFactor',\r\n align: 'right',\r\n sorter: (a, b) => a.profitFactor - b.profitFactor,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {record.profitFactor >= 100000 ? languageMessages['noLoss'] : record.profitFactor == 0 ? languageMessages['noProfit'] : record.profitFactor}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestDetails']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={infoColumns} dataSource={infoDataSource} pagination={false} />\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { BacktestGridResult as default }\r\n\r\n/**\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestResult);\r\nexport { page as default }\r\n */","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, AutoComplete, Button, Input, Form, DatePicker, Divider, Spin, Icon, Checkbox, Modal, Progress } from 'antd';\r\nimport moment, { max } from 'moment';\r\n\r\nimport BacktestGridResult from './BacktestGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass BacktestGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n lastTimes: 0,\r\n\r\n spinLoadding: true,\r\n\r\n gridWidth: '--',\r\n tmpCapital: '--',\r\n\r\n gridCnt: '',\r\n upper: '',\r\n lower: '',\r\n\r\n startDate: moment().add(-15, 'days').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n priceRangeStatus: '',\r\n priceRangeMessage: '',\r\n gridCntStatus: '',\r\n gridCntMessage: '',\r\n\r\n endOpen: false,\r\n\r\n IsStartBacktest: false,\r\n\r\n dayTradeOnly: false,\r\n\r\n filterError: '',\r\n\r\n backtestStatus: 0,\r\n \r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n\r\n isHubConnection: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callBacktestGridError\", this.callBacktestError);\r\n emitter.addListener('callBacktestGridLastTimes', this.callBacktestLastTimes);\r\n emitter.addListener('callBacktestGridStatus', this.callBacktestStatus);\r\n emitter.addListener('callBacktestGridResult', this.callBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callBacktestGridError', this.callBacktestError);\r\n emitter.removeListener('callBacktestGridLastTimes', this.callBacktestLastTimes);\r\n emitter.removeListener('callBacktestGridStatus', this.callBacktestStatus);\r\n emitter.removeListener('callBacktestGridResult', this.callBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n \r\n var statisticsResult = [];\r\n \r\n if (backtestResult.length > 0) {\r\n\r\n //var maxAnnualizedRateOfReturn = 0;\r\n //var maxDrawdown = 0;\r\n\r\n //var symbolCode = '';\r\n //var startDate = '';\r\n //var endDate = '';\r\n \r\n for (var item in backtestResult) {\r\n var strategyName = backtestResult[item]['strategyName'];\r\n var backtestInfo = strategyName.split('-');\r\n if (backtestInfo.length < 6) continue;\r\n if (backtestInfo[0] !== 'Grid') continue;\r\n //if (backtestInfo[1] !== this.state.symbolCode) continue;\r\n\r\n //symbolCode = backtestInfo[1];\r\n //startDate = backtestResult[item]['fromDate'];\r\n //endDate = backtestResult[item]['toDate'];\r\n \r\n var gridCnt = backtestInfo[2];\r\n var lower = backtestInfo[3];\r\n var upper = backtestInfo[4];\r\n\r\n let tmpGridCnt = parseInt(gridCnt);\r\n var tmpLower = parseFloat(lower);\r\n var tmpUpper = parseFloat(upper);\r\n\r\n var tmpCapital = parseFloat(backtestInfo[5]);\r\n \r\n let gridWidth = (tmpUpper - tmpLower) / tmpGridCnt;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n //var annualizedRateOfReturn = backtestResult[item]['statistics'].annualizedRateOfReturn;\r\n //var maxDrawdownPercent = backtestResult[item]['statistics'].maxDrawdownPercent;\r\n\r\n //maxAnnualizedRateOfReturn = maxAnnualizedRateOfReturn == 0 || parseFloat(annualizedRateOfReturn) > parseFloat(maxAnnualizedRateOfReturn) ? annualizedRateOfReturn : maxAnnualizedRateOfReturn;\r\n //maxDrawdown = maxDrawdown == 0 || maxDrawdownPercent > maxDrawdown ? maxDrawdownPercent : maxDrawdown;\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n strategyName: strategyName,\r\n\r\n symbolCode: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: backtest.DayTradeOnly,\r\n\r\n priceRange: tmpLower.toFixed(2) + \"~\" + tmpUpper.toFixed(2),\r\n gridCnt: gridCnt,\r\n gridWidth: gridWidth.toFixed(2),\r\n\r\n capital: tmpCapital.toFixed(2),\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n //var backtestInterval = \"1\";\r\n \r\n //maxAnnualizedRateOfReturn = this.keepDecimals(maxAnnualizedRateOfReturn, '%');\r\n //maxDrawdown = this.keepDecimals(maxDrawdown, '%');\r\n }\r\n \r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_backtest_grid\", payload: { u: userId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bg':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, permission } = props;\r\n\r\n switch (status) {\r\n case 'get_backtest_grid_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_backtest_grid_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n handleMyBacktest = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/mbg\");\r\n };\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({ symbolCode, IsStartBacktest, filterError: '' });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' });\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value, filterError: '' }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('startDate', startDate);\r\n\r\n this.setState({ startDate, IsStartBacktest, filterError: '' });\r\n }\r\n \r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n \r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('endDate', endDate);\r\n\r\n this.setState({ endDate, IsStartBacktest, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate) || current < moment(endDate).add(-6, 'months'));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true, filterError: '' });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage, filterError: '' });\r\n };\r\n\r\n handleNumberChange = e => {\r\n let intLen = 12;\r\n let decimalLen = 2;\r\n\r\n var number = e.target.value;\r\n let tags = e.currentTarget.getAttribute('data-value');\r\n if (tags === 'lower' || tags === 'upper') {\r\n decimalLen = 3;\r\n }\r\n\r\n if (tags === 'gridCnt') {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n } else {\r\n if (number.indexOf('.') === 0) {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n }\r\n number = number.replace(/[^\\d.]/g, \"\");\r\n number = number.replace(/\\.{2,3}/g, \".\");\r\n number = number.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n\r\n if (number.indexOf('.') < 0) {\r\n if (number.length > intLen) number = number.slice(0, intLen);\r\n\r\n if (number !== '') number = parseInt(number);\r\n } else {\r\n var tmpNumber = number.split('.');\r\n var tmpNum00 = tmpNumber[0];\r\n if (tmpNum00.length > intLen) tmpNum00 = tmpNum00.slice(0, intLen);\r\n\r\n if (tmpNum00 !== '') tmpNum00 = parseInt(tmpNum00);\r\n\r\n var tmpNum01 = tmpNumber[1];\r\n if (tmpNum01.length > decimalLen) tmpNum01 = tmpNum01.slice(0, decimalLen);\r\n number = tmpNum00 + '.' + tmpNum01;\r\n }\r\n }\r\n\r\n this.checkInputParamsStatus(tags, number);\r\n }\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n var number = e.target.value;\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (tags === 'gridCnt') {\r\n number = number.replace(/[^\\d]/g, \"\");\r\n } else if (tags === 'lower' || tags === 'upper') {\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n number = number + '.000';\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (len === 0) {\r\n number = number + '000';\r\n } else if (len === 1) {\r\n number = number + '00';\r\n } else if (len === 2) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n } else {\r\n if (number.length > 0) {\r\n if (number.indexOf('.') < 0) {\r\n number = number + '.00';\r\n } else {\r\n var tmpValue = number.split('.');\r\n var len = tmpValue[1].length;\r\n if (len === 0) {\r\n number = number + '00';\r\n } else if (len === 1) {\r\n number = number + '0';\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.checkInputParamsStatus(tags, number);\r\n }\r\n\r\n getCapital(tmpLower, tmpUpper, gridCnt) {\r\n if (window.webType === 'US') {\r\n let gridWidth = 0;\r\n let capital = 0;\r\n\r\n return { gridWidth, capital };\r\n } else {\r\n let baseNumber = 100;\r\n\r\n let priceRange = tmpUpper - tmpLower;\r\n\r\n let tmpGridCnt = parseInt(gridCnt);\r\n let gridWidth = priceRange / tmpGridCnt;\r\n\r\n let tmpPrice = (tmpGridCnt + 1) / 2;\r\n tmpPrice = parseInt(tmpPrice);\r\n\r\n let comm = Math.ceil(tmpPrice * 5 / 0.0003 / 1000) * 1000;\r\n\r\n let capital = (tmpLower + tmpLower + (tmpPrice - 1) * gridWidth) * tmpPrice / 2 * baseNumber;\r\n capital = Math.ceil(capital);\r\n\r\n capital = Math.max(comm, capital);\r\n\r\n return { gridWidth, capital };\r\n }\r\n }\r\n\r\n checkInputParamsStatus(tags, number) {\r\n let { lower, upper, gridCnt, tmpCapital, gridWidth } = this.state;\r\n\r\n let priceRangeStatus = '';\r\n let priceRangeMessage = '';\r\n let gridCntStatus = '';\r\n let gridCntMessage = '';\r\n\r\n if (tags === 'lower') {\r\n if (upper != '' && number != '') {\r\n let tmpUpper = parseFloat(upper);\r\n let tmpLower = parseFloat(number);\r\n if (tmpLower >= tmpUpper) {\r\n priceRangeStatus = 'error';\r\n priceRangeMessage = languageMessages['lowestPriceCannotBeGreaterThanHighestPrice'];\r\n\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n } else {\r\n if (gridCnt != '') {\r\n let capitals = this.getCapital(tmpLower, tmpUpper, gridCnt);\r\n\r\n gridWidth = capitals.gridWidth;\r\n tmpCapital = capitals.capital;\r\n }\r\n }\r\n } else {\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n }\r\n }\r\n\r\n if (tags === 'upper') {\r\n if (lower != '' && number != '') {\r\n let tmpUpper = parseFloat(number);\r\n let tmpLower = parseFloat(lower);\r\n if (tmpLower >= tmpUpper) {\r\n priceRangeStatus = 'error';\r\n priceRangeMessage = languageMessages['lowestPriceCannotBeGreaterThanHighestPrice'];\r\n\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n } else {\r\n if (gridCnt != '') {\r\n let capitals = this.getCapital(tmpLower, tmpUpper, gridCnt);\r\n\r\n gridWidth = capitals.gridWidth;\r\n tmpCapital = capitals.capital;\r\n }\r\n }\r\n } else {\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n }\r\n }\r\n\r\n if (tags === 'gridCnt') {\r\n if (number != '') {\r\n let tmpGridCnt = parseInt(number);\r\n if (tmpGridCnt < 4 || tmpGridCnt > 20) {\r\n gridCntStatus = 'error';\r\n gridCntMessage = languageMessages['gridCntSize'];\r\n\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n } else {\r\n if (lower != '' && upper != '') {\r\n let tmpUpper = parseFloat(upper);\r\n let tmpLower = parseFloat(lower);\r\n\r\n let capitals = this.getCapital(tmpLower, tmpUpper, tmpGridCnt);\r\n\r\n gridWidth = capitals.gridWidth;\r\n tmpCapital = capitals.capital;\r\n \r\n } else {\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n }\r\n }\r\n } else {\r\n gridWidth = '--';\r\n tmpCapital = '--';\r\n }\r\n }\r\n\r\n if (gridWidth != '--') gridWidth = gridWidth.toFixed(2);\r\n if (tmpCapital != '--') tmpCapital = tmpCapital.toFixed(2);\r\n\r\n var tmpPrice = {};\r\n tmpPrice[tags] = number;\r\n\r\n tmpPrice['IsStartBacktest'] = this.checkIsStartBacktest(tags, number);\r\n\r\n tmpPrice['gridWidth'] = gridWidth;\r\n tmpPrice['tmpCapital'] = tmpCapital;\r\n\r\n tmpPrice['priceRangeStatus'] = priceRangeStatus;\r\n tmpPrice['priceRangeMessage'] = priceRangeMessage;\r\n tmpPrice['gridCntStatus'] = gridCntStatus;\r\n tmpPrice['gridCntMessage'] = gridCntMessage;\r\n tmpPrice['filterError'] = '';\r\n\r\n this.setState(tmpPrice);\r\n }\r\n\r\n handleChangeDayTradeOnly = e => {\r\n var dayTradeOnly = e.target.checked;\r\n\r\n this.setState({ dayTradeOnly });\r\n }\r\n\r\n checkIsStartBacktest(type, value) {\r\n var IsStartBacktest = false;\r\n let { symbolCode, startDate, endDate, lower, upper, gridCnt } = this.state;\r\n\r\n switch (type) {\r\n case 'symbolCode':\r\n symbolCode = value;\r\n break;\r\n case 'lower':\r\n lower = value;\r\n break;\r\n case 'upper':\r\n upper = value;\r\n break;\r\n case 'gridCnt':\r\n gridCnt = value;\r\n break;\r\n case 'startDate':\r\n startDate = value;\r\n break;\r\n case 'endDate':\r\n endDate = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (symbolCode != '' && lower != '' && upper != '' && gridCnt != '') {\r\n var tmpLower = parseFloat(lower);\r\n var tmpUpper = parseFloat(upper);\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n if (tmpUpper > tmpLower && oDate2.getTime() > oDate1.getTime()) {\r\n IsStartBacktest = true;\r\n }\r\n }\r\n\r\n return IsStartBacktest;\r\n }\r\n\r\n onStartBacktest = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, startDate, endDate, lastTimes, latestPrice, lower, upper, gridCnt, dayTradeOnly } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n filterError: '',\r\n spinLoadding: true,\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'backtestGridStrategy',\r\n SymbolCode: symbolCode,\r\n SymbolName: symbolName,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n Lower: lower,\r\n Upper: upper,\r\n GridCnt: gridCnt,\r\n DayTradeOnly: dayTradeOnly ? '1' : '0',\r\n Last: latestPrice,\r\n CommType: 0,\r\n MinComm: 0,\r\n PerShareCommission: 0,\r\n reqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n importBacktestResult = () => {\r\n //console.log('import');\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode, percent } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['backtestGrid']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.handleMyBacktest}>{languageMessages['myBacktest']}</Button>\r\n ]} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest.price']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['gridSetting']}</div>\r\n <div className='common-backtest-cont'>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['priceRange']} validateStatus={this.state.priceRangeStatus} help={this.state.priceRangeMessage}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.lower} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['lowestPriceRange']} data-value='lower' />\r\n <span style={{ margin: '0 10px' }}>--</span>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.upper} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['highestPriceRange']} data-value='upper' />\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['gridCnt']} validateStatus={this.state.gridCntStatus} help={this.state.gridCntMessage}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.gridCnt} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['pleaseEnterGrids']} data-value='gridCnt' />\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['gridWidthForNum'], { '{num}': this.state.gridWidth })}</span>\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['capital']}>\r\n {this.state.tmpCapital}\r\n\r\n {' ' + languageMessages['yuan']}\r\n </Form.Item>\r\n </Form>\r\n <Form labelAlign={'left'} layout=\"inline\" style={{ padding: '8px 0' }} className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item>\r\n <Checkbox checked={this.state.dayTradeOnly} onChange={this.handleChangeDayTradeOnly}>{languageMessages['DayTradeOnly']}</Checkbox>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestCondition']}</div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <Button size='small' loading={false} disabled={!this.state.IsStartBacktest} onClick={this.onStartBacktest}>\r\n {languageMessages['startBacktest']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['backtestStatus']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['backtestingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['backtestCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n \r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BacktestGridResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport BacktestGridResult from './BacktestGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyBacktestGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n \r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '1',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var type = '1';\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n type = tmpDataSource[item].t;\r\n\r\n if (tmpDataSource[item].statistics != null) {\r\n statisticsResult = tmpDataSource[item].statistics;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n var maxdrawdown = this.keepDecimals(tmpDataSource[item].md, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n maxRateOfReturn: maxRateOfReturn,\r\n maxdrawdown: maxdrawdown,\r\n strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n strategyNumber: tmpDataSource[item].sn,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult, type };\r\n //this.setState({ dataSource, rowId, statisticsResult, type });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols, backtestIds } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_single_stock_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult, type } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, type });\r\n break;\r\n case 'get_single_stock_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_single_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult, type } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, type });\r\n break;\r\n case 'get_single_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_backtest_success': var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n\r\n /**\r\n let { dataSource, singleStockBacktestResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = backtestIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n }\r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n */\r\n break;\r\n case 'get_remove_backtest_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n \r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult, type } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult, type });\r\n }else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_symbol_items\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n importBacktestResult = (e, value) => {\r\n e.stopPropagation();\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.backtest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_backtest\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n \r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys, type: tmpData[0].t });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['maxRateOfReturn']+'(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxdrawdown']+'(%)',\r\n dataIndex: 'maxdrawdown',\r\n width: 105,\r\n align: 'center',\r\n sorter: (a, b) => a.maxdrawdown - b.maxdrawdown,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxdrawdown'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['strategyNumber'],\r\n dataIndex: 'strategyNumber',\r\n align: 'center',\r\n width: 90,\r\n sorter: (a, b) => a.strategyNumber - b.strategyNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['backtesting'] : languageMessages['complete']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n \r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myBacktest']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n \r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BacktestGridResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyBacktestGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message, Select, Upload, Icon, Radio, Input } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\n\r\nvar statistics = [\r\n { 'sName': languageMessages['grandTotal/annualizedRateOfReturn'], 'name': [languageMessages['grandTotalRateOfReturn'], languageMessages['annualizedRateOfReturn']], 'xData': [], 'yName': '(%)', \"data\": [], color: ['#5470c6', '#fac858'], markPoint: { data: [] }, minInterval: 0 },\r\n { 'sName': languageMessages['profitFactor'], 'name': [languageMessages['profitFactor']], 'xData': [], 'yName': '', \"data\": [], color: ['#5470c6'], markPoint: { data: [] }, minInterval: 0 },\r\n { 'sName': languageMessages['buyingPowerRequried'], 'name': [languageMessages['buyingPowerRequried']], 'xData': [], 'yName': '', \"data\": [], color: ['#fac858'], markPoint: { data: [] }, minInterval: 0 },\r\n];\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass AIGridResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n\r\n income: '',\r\n equity: '',\r\n trade: '',\r\n\r\n dataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '',\r\n initCapital: 0,\r\n capital: 0,\r\n category: 2,\r\n gridCnt: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n promptModalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n fileList: [],\r\n\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n let promptModalVisible = false;\r\n switch (status) {\r\n case 3:\r\n promptModalVisible = true;\r\n break;\r\n default:\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false, promptModalVisible });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n resizeChart() {\r\n var statistics = this.charts['statistics'];\r\n var incomeChart = this.charts['income'];\r\n \r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n \r\n if (statistics != null) {\r\n for (let i = 0; i < 3; i++) {\r\n statistics[\"statistics-\" + i].resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setStatisticsData(chartName, chartData) {\r\n this.charts[chartName] = {};\r\n\r\n let pdiv = document.getElementById(chartName)\r\n pdiv.innerHTML = \"\"\r\n for (let i = 0; i < chartData.length; i++) {\r\n let div = document.createElement(\"div\");//创建一个divå…ƒç´ \r\n div.style.width = \"33.3%\";\r\n div.style.height = \"360px\";\r\n\r\n var ids = chartName + \"-\" + i;\r\n div.setAttribute(\"id\", ids);\r\n pdiv.appendChild(div)\r\n\r\n //chartData[i].color = colors[i];\r\n\r\n this.charts[chartName][ids] = echarts.init(document.getElementById(ids));\r\n this.charts[chartName][ids].setOption(getChartOption('grid', chartData[i]));\r\n\r\n this.charts[chartName][ids].resize();\r\n }\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"statistics\": null,\r\n \"income\": null\r\n };\r\n\r\n for (var i = 0; i < 3; i++) {\r\n statistics[i].xData = [];\r\n statistics[i].data = [];\r\n }\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n\r\n var income = '';\r\n var trade = '';\r\n\r\n let modalBacktestId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n \r\n var dataSource = [];\r\n\r\n if (statisticsResult.length > 0) {\r\n let maxProfitFactor = 0;\r\n\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[0].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n\r\n statistics[1].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n statistics[2].data.push({ data: [], markPoint: { color: '#fff', data: [] } });\r\n \r\n for (var item in statisticsResult) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n\r\n if (modalBacktestId === '') modalBacktestId = statisticsResult[item].backtestId;\r\n if (modalSymbolCode === '') modalSymbolCode = statisticsResult[item].symbol;\r\n if (modalSymbolName === '') modalSymbolName = statisticsResult[item].symbolName;\r\n if (modalStrategyType === '') modalStrategyType = statisticsResult[item].d;\r\n\r\n var strategyName = statisticsResult[item].strategyName;\r\n strategyName = strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n\r\n conditions.push({ 'id': statisticsResult[item].backtestId, 'name': strategyName });\r\n\r\n var initialRateOfReturnOnCapital = this.keepDecimals(statisticsResult[item].initialRateOfReturnOnCapital, '');\r\n var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n var chartCapital = statisticsResult[item].capital;\r\n\r\n if (capital === 0) capital = chartCapital;\r\n if (gridCnt === 0) gridCnt = statisticsResult[item].gridCnt;\r\n \r\n statistics[0].xData.push(strategyName);\r\n statistics[1].xData.push(strategyName);\r\n statistics[2].xData.push(strategyName);\r\n\r\n statistics[0].data[0][\"data\"].push({ value: initialRateOfReturnOnCapital, label: { position: initialRateOfReturnOnCapital >= 0 ? 'top' : 'bottom' } });\r\n statistics[0].data[1][\"data\"].push({ value: annualizedRateOfReturn, label: { position: annualizedRateOfReturn >= 0 ? 'top' : 'bottom' } });\r\n \r\n if (profitFactor >= 100000) {\r\n var color = window.webType === 'US' ? 'Darkgreen' : '#aa0000';\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: 'top' }, itemStyle: { color: color } });\r\n statistics[1].data[0][\"markPoint\"][\"color\"] = color;\r\n statistics[1].data[0][\"markPoint\"][\"data\"].push({ value: languageMessages['noLoss'], xAxis: parseInt(item), yAxis: profitFactor / 3 });\r\n } else {\r\n statistics[1].data[0][\"data\"].push({ value: profitFactor, label: { position: profitFactor >= 0 ? 'top' : 'bottom' } });\r\n if (statistics[1].data[0][\"markPoint\"][\"data\"].length == 0) {\r\n statistics[1].data[0][\"markPoint\"] = { color: '#fff', data: [] };\r\n }\r\n\r\n var tmpProfitFactor = parseFloat(profitFactor);\r\n var tmpMaxProfitFactor = parseFloat(maxProfitFactor);\r\n if (tmpProfitFactor > tmpMaxProfitFactor) maxProfitFactor = profitFactor;\r\n }\r\n\r\n statistics[2].data[0][\"data\"].push({ value: chartCapital, label: { position: chartCapital >= 0 ? 'top' : 'bottom' } });\r\n }\r\n\r\n if (maxProfitFactor > 0) {\r\n for (var item in statistics[1].data[0][\"data\"]) {\r\n if (statistics[1].data[0][\"data\"][item].value >= 100000) {\r\n statistics[1].data[0][\"data\"][item].value = maxProfitFactor;\r\n }\r\n }\r\n\r\n for (var ii in statistics[1].data[0][\"markPoint\"][\"data\"]) {\r\n statistics[1].data[0][\"markPoint\"][\"data\"][ii].yAxis = maxProfitFactor / 3;\r\n }\r\n }\r\n\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n trade = conditions[0].id;\r\n\r\n modalStrategyName = conditions[0].name;\r\n\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': statisticsResult[item].gridCnt });\r\n //strategyName = statisticsResult[0].strategyName;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n /**\r\n * è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–å‡ºï¼Œä»·æ ¼=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n 第二行, æ–¹å‘= ä¹°å…¥ï¼Œä»·æ ¼=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n\r\n è‹¥ 原方å‘=åšç©ºï¼Œ 则\r\n 第一行, æ–¹å‘= å–出,æˆäº¤ä»·=åŽŸâ€œè¿›ä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“进仓时间â€\r\n 第二行, æ–¹å‘= 买入,æˆäº¤ä»·=åŽŸâ€œå‡ºä»“ä»·æ ¼â€ï¼Œæˆäº¤é‡=abs(原“数é‡â€ï¼‰æˆäº¤é¢=ä»·æ ¼*æˆäº¤é‡ï¼Œæˆäº¤æ—¶é—´=原“出仓时间â€\r\n è‹¥ 原方å‘=åšå¤šï¼Œ 则\r\n å°† 第一行和第二行的方å‘互æ¢\r\n * \r\n */\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStatisticsData(\"statistics\", statistics);\r\n this.setIncomeData(\"income\", incomes);\r\n\r\n let initCapital = capital;\r\n this.setState({ conditions, income, trade, dataSource, statisticsResult, modalBacktestId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType, initCapital, capital, gridCnt });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { status, statisticsResult, basePosition, share } = props;\r\n\r\n switch (status) {\r\n case 'get_base_position_success':\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n basePosition,\r\n share,\r\n spinLoadding: false\r\n }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n\r\n break;\r\n case 'get_base_position_fail':\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n break;\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n let modalBacktestId = '';\r\n let modalStrategyName = '';\r\n let capital = 0;\r\n let gridCnt = 0;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.backtestId; });\r\n if (tmpIncomes.length > 0) {\r\n //var strategyName = strReplace(languageMessages['gridStrategy'], { '{num}': tmpIncomes[0].gridCnt });\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n modalBacktestId = tmpIncomes[0].backtestId;\r\n modalStrategyName = tmpIncomes[0].strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n capital = tmpIncomes[0].capital;\r\n gridCnt = tmpIncomes[0].gridCnt;\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n let initCapital = capital;\r\n this.setState({ income, modalBacktestId, modalStrategyName, initCapital, capital, gridCnt });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.backtestId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n \r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n \r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n }\r\n }\r\n \r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n\r\n renderModalContent() {\r\n if (this.state.tradeType == 0) {\r\n return this.renderModalRealTimeContent();\r\n }else {\r\n return this.renderModalSimulationContent();\r\n }\r\n }\r\n\r\n onRealTime = () => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Incremental Return', 'RealTime', 'Incremental Return']);\r\n\r\n this.setState({\r\n spinLoadding: true,\r\n tradeType: 0,\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: 0 } });\r\n }\r\n });\r\n }\r\n\r\n onSimulation = () => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Incremental Return', 'Simulation', 'Incremental Return']);\r\n\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n });\r\n }\r\n\r\n onMultiOptimization = () => {\r\n history.push({ pathname: '/aib', state: { backtestId: this.state.modalBacktestId } });\r\n //history.push({ pathname: '/aio', state: { backtestId: this.state.modalBacktestId } });\r\n }\r\n\r\n onScrollOptimization = () => {\r\n //history.push({ pathname: '/aib', state: { backtestId: this.state.modalBacktestId } });\r\n history.push({ pathname: '/aio', state: { backtestId: this.state.modalBacktestId } });\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n buildBindBroker = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_auth\", payload: { u: user.username } });\r\n }\r\n }\r\n\r\n handleChangeCapital = e => {\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n handleBlurCapital = e => {\r\n e.preventDefault();\r\n\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n renderModalRealTimeContent() {\r\n return window.webType === 'US' ? this.renderModalRealTimeContentForUs() : this.renderModalRealTimeContentForCn();\r\n }\r\n\r\n renderModalRealTimeContentForCn() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'åŽé‘«è¯åˆ¸' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']}\r\n <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n\r\n </div>\r\n }\r\n\r\n renderModalRealTimeContentForUs() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'TD', 'name': 'TdAmeritrade' }, { 'id': 'IB', 'name': 'IB' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div style={{ display: this.state.broker == 'TD' ? '' : 'none' }}><Button size='small' onClick={this.buildBindBroker}>{languageMessages['login td account']}</Button></div>\r\n <div style={{ display: this.state.broker == 'IB' ? '' : 'none' }}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n renderModalSimulationContent() {\r\n let newDate = moment().add(1, 'd');\r\n let fromDate = newDate.format('YYYY-MM-DD 09:30:00');\r\n let endDate = window.webType === 'US' ? newDate.add(2, 'w').format('YYYY-MM-DD 16:00:00') : newDate.add(2, 'w').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { tradeType, modalBacktestId, modalSymbolCode, modalStrategyType, capital, category, broker } = this.state;\r\n\r\n if (tradeType == 0 && this.state.initCapital > capital) {\r\n message.info(languageMessages['Buying power to allocate tips']);\r\n } else {\r\n this.setState({ spinLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n StrategyId: '0',\r\n SymbolCode: modalSymbolCode,\r\n Category: category,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ExecutionPlatform: broker,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n handlePromptOk = e => {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n handlePromptCancel = e => {\r\n this.setState({ promptModalVisible: false });\r\n }\r\n\r\n render() {\r\n var { conditions, income, trade, dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n return (<Content>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['excavateDetails']}</div>\r\n\r\n <div id=\"statistics\" style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={income == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByIncome} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n <div className='common-trade-btn'>\r\n <Button size='small' onClick={this.onMultiOptimization}>{languageMessages['Multi-dimensionalOptimization']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onRealTime}>{languageMessages['goRealTime']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={this.onSimulation}>{languageMessages['goSimulation']}</Button>\r\n </div>\r\n </div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 60 ? { pageSize: 60 } : false} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n\r\n <Modal\r\n title={languageMessages['prompt']}\r\n visible={this.state.promptModalVisible}\r\n onOk={this.handlePromptOk}\r\n onCancel={this.handlePromptCancel}>\r\n <div dangerouslySetInnerHTML={{ __html: languageMessages['simulated trading limit'] }} />\r\n <p>{languageMessages['simulated trading limit prompt']}</p>\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { AIGridResult as default }\r\n\r\n/**\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestResult);\r\nexport { page as default }\r\n */","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, AutoComplete, Button, Input, Form, Divider, Spin, Icon, Checkbox, Modal, Progress, message } from 'antd';\r\n\r\nimport AIGridResult from './AIGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass AIGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n lastTimes: 0,\r\n\r\n spinLoadding: true,\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n endOpen: false,\r\n\r\n IsStartBacktest: false,\r\n\r\n dayTradeOnly: false,\r\n\r\n filterError: '',\r\n\r\n backtestStatus: 0,\r\n \r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n\r\n isHubConnection: 0\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callBacktestGridsError\", this.callBacktestError);\r\n emitter.addListener('callBacktestGridsLastTimes', this.callBacktestLastTimes);\r\n emitter.addListener('callBacktestGridsStatus', this.callBacktestStatus);\r\n emitter.addListener('callBacktestGridsResult', this.callBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callBacktestGridsError', this.callBacktestError);\r\n emitter.removeListener('callBacktestGridsLastTimes', this.callBacktestLastTimes);\r\n emitter.removeListener('callBacktestGridsStatus', this.callBacktestStatus);\r\n emitter.removeListener('callBacktestGridsResult', this.callBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n \r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n \r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n\r\n /**\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n */\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n \r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n \r\n //var maxAnnualizedRateOfReturn = 0;\r\n //var maxDrawdown = 0;\r\n\r\n //var symbolCode = this.state.symbolCode;\r\n //var startDate = '';\r\n //var endDate = '';\r\n \r\n for (var item in backtestResult) {\r\n var strategyName = backtestResult[item]['strategyName'];\r\n if (strategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var backtestInfo = strategyName.split('-');\r\n //if (backtestInfo.length < 4) continue;\r\n //if (backtestInfo[0] !== 'Q') continue;\r\n //if (backtestInfo[1] !== 'Grid') continue;\r\n //if (backtestInfo[2] !== this.state.symbolCode) continue;\r\n\r\n //symbolCode = backtestInfo[2];\r\n //startDate = backtestResult[item]['fromDate'];\r\n //endDate = backtestResult[item]['toDate'];\r\n\r\n //var gridCnt = backtestInfo[4];\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n //var annualizedRateOfReturn = backtestResult[item]['statistics'].annualizedRateOfReturn;\r\n //var maxDrawdownPercent = backtestResult[item]['statistics'].maxDrawdownPercent;\r\n\r\n //maxAnnualizedRateOfReturn = maxAnnualizedRateOfReturn == 0 || parseFloat(annualizedRateOfReturn) > parseFloat(maxAnnualizedRateOfReturn) ? annualizedRateOfReturn : maxAnnualizedRateOfReturn;\r\n //maxDrawdown = maxDrawdown == 0 || maxDrawdownPercent > maxDrawdown ? maxDrawdownPercent : maxDrawdown;\r\n\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n strategyName: strategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n d: backtest.DayTradeOnly,\r\n\r\n priceRange: '',\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',\r\n\r\n capital: br[0].Capital,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_ai_grid\", payload: { u: userId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'eqg':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, permission, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_ai_grid_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_ai_grid_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }], filterError: '' });\r\n } else {\r\n this.setState({\r\n filterError: '',\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n handleMyBacktest = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/mbg\");\r\n };\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({ symbolCode, IsStartBacktest, filterError: '' });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '' }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest });\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n IsStartBacktest\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value, filterError: '' }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n handleChangeDayTradeOnly = e => {\r\n var dayTradeOnly = e.target.checked;\r\n\r\n this.setState({ dayTradeOnly });\r\n }\r\n\r\n checkIsStartBacktest(type, value) {\r\n var IsStartBacktest = false;\r\n let { symbolCode } = this.state;\r\n\r\n switch (type) {\r\n case 'symbolCode':\r\n symbolCode = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (symbolCode != '') {\r\n IsStartBacktest = true;\r\n }\r\n\r\n return IsStartBacktest;\r\n }\r\n\r\n onStartBacktest = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice, dayTradeOnly } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Incremental Return', 'Backtest', 'Incremental Return']);\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'exploreQTGrid',\r\n SymbolCode: symbolCode,\r\n SymbolName: symbolName,\r\n DayTradeOnly: dayTradeOnly ? '1' : '0',\r\n Last: latestPrice,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n importBacktestResult = () => {\r\n //console.log('import');\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode, percent } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['AIincrease']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.handleMyBacktest}>{languageMessages['myExcavate']}</Button>\r\n ]} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n <Form.Item>\r\n <Checkbox checked={this.state.dayTradeOnly} onChange={this.handleChangeDayTradeOnly}>{languageMessages['DayTradeOnly']}</Checkbox>\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' loading={false} disabled={!this.state.IsStartBacktest} onClick={this.onStartBacktest}>\r\n {languageMessages['discoverBestStrategy']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} lineHeight={14} />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['backtestingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['backtestCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n \r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<AIGridResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(AIGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport AIGridResult from './AIGridResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyAIGridPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n \r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '2',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].statistics != null) {\r\n statisticsResult = tmpDataSource[item].statistics;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n var maxdrawdown = this.keepDecimals(tmpDataSource[item].md, '');\r\n\r\n /**\r\n var dayTradeOnly = '0';\r\n if (tmpDataSource[item].statistics != null && tmpDataSource[item].statistics.length > 0 && tmpDataSource[item].statistics[0].length > 0) {\r\n dayTradeOnly = tmpDataSource[item].statistics[0].dayTradeOnly;\r\n }\r\n */\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n maxRateOfReturn: maxRateOfReturn,\r\n maxdrawdown: maxdrawdown,\r\n strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_single_stock_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_single_stock_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_single_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_single_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_backtest_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length == 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock == '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n\r\n /**\r\n let { dataSource, singleStockBacktestResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = backtestIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.backtest.success']);\r\n }\r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n */\r\n break;\r\n case 'get_remove_backtest_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n \r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n }else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_symbol_items\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_single_stock_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n importBacktestResult = (e, value) => {\r\n e.stopPropagation();\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.backtest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_backtest\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n \r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['maxRateOfReturn']+'(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['maxdrawdown']+'(%)',\r\n dataIndex: 'maxdrawdown',\r\n width: 105,\r\n align: 'center',\r\n sorter: (a, b) => a.maxdrawdown - b.maxdrawdown,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxdrawdown'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['strategyNumber'],\r\n dataIndex: 'strategyNumber',\r\n align: 'center',\r\n width: 90,\r\n sorter: (a, b) => a.strategyNumber - b.strategyNumber,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['digging'] : languageMessages['complete']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n \r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['AIincrease']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n \r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<AIGridResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyAIGridPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Form, Divider, Spin, Modal, Progress, Button, message } from 'antd';\r\n\r\nimport BatchResult from './BatchResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass AIBatchPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.backtestId = \"0\";\r\n if (history.location.state !== undefined) {\r\n this.backtestId = history.location.state.backtestId;\r\n }\r\n\r\n this.user = {};\r\n this.state = {\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n dayTradeOnly: '0',\r\n\r\n lastTimes: 0,\r\n type: 2,\r\n\r\n spinLoadding: true,\r\n\r\n dayTradeOnly: false,\r\n\r\n filterError: '',\r\n\r\n isStartOptimized: false,\r\n\r\n backtestStatus: 0,\r\n\r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callBestFromBatchBacktestError\", this.callBestFromBatchBacktestError);\r\n emitter.addListener('callBestFromBatchBacktestLastTimes', this.callBestFromBatchBacktestLastTimes);\r\n emitter.addListener('callBestFromBatchBacktestStatus', this.callBestFromBatchBacktestStatus);\r\n emitter.addListener('callBestFromBatchBacktestResult', this.callBestFromBatchBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callBestFromBatchBacktestError', this.callBestFromBatchBacktestError);\r\n emitter.removeListener('callBestFromBatchBacktestLastTimes', this.callBestFromBatchBacktestLastTimes);\r\n emitter.removeListener('callBestFromBatchBacktestStatus', this.callBestFromBatchBacktestStatus);\r\n emitter.removeListener('callBestFromBatchBacktestResult', this.callBestFromBatchBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callBestFromBatchBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callBestFromBatchBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callBestFromBatchBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callBestFromBatchBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n\r\n /**\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n */\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n\r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n \r\n for (var item in backtestResult) {\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n if (br[0].StrategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var strategyName = backtestResult[item]['strategyName'];\r\n //if (strategyName.indexOf('strategy') == -1) continue;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: br[0].StrategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: backtest.DayTradeOnly,\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',\r\n\r\n capital: br[0].Capital,\r\n\r\n oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_batch_info\", payload: { u: userId, b: this.backtestId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bo':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n return lastTimes;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, batchInfo, permission, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_batch_info_success':\r\n var lastTimes = 0;\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n lastTimes = this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var isStartOptimized = false;\r\n\r\n var symbolCode = '';\r\n var latestPrice = 0;\r\n var quoteChange = 0;\r\n\r\n var dayTradeOnly = '0';\r\n var isStartOptimized = false;\r\n if (batchInfo != undefined) {\r\n symbolCode = batchInfo.symbol;\r\n latestPrice = batchInfo.latestPrice;\r\n quoteChange = batchInfo.quoteChange;\r\n\r\n dayTradeOnly = batchInfo.dayTradeOnly;\r\n\r\n //this.onStartOptimized();\r\n isStartOptimized = true;\r\n }\r\n\r\n this.setState({ symbolCode, latestPrice, quoteChange, dayTradeOnly, isStartOptimized, lastTimes, spinLoadding: false });\r\n break;\r\n case 'get_batch_info_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n onStartOptimized = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBatchBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', '4D optimization', 'Backtest', 'Incremental Return 4D optimization']);\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'aiBatch',\r\n SymbolCode: symbolCode,\r\n SymbolName: '',\r\n BacktestId: this.backtestId,\r\n BacktestType: this.state.type,\r\n Last: latestPrice,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n var { percent } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['AIincrease'] + ' » ' + languageMessages['Multi-dimensionalOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <div>{this.state.symbolCode}</div>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n <Form.Item>\r\n {this.state.dayTradeOnly === '0' ? languageMessages['Cross-day trading only'] : languageMessages['Day trading only']}\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' loading={false} disabled={!this.state.isStartOptimized} onClick={this.onStartOptimized}>\r\n {languageMessages['startOptimized']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} lineHeight={14} />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['optimizingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['optimizedCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BatchResult dispatch={this.props.dispatch} type={this.state.type} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(AIBatchPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport BatchResult from './BatchResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyAIBatchPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n strategyData: [],\r\n\r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '2',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setStatisticsResult(backtestResult) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: backtestResult[item]['strategyName'],\r\n\r\n symbol: backtestResult[item]['symbol'],\r\n symbolName: backtestResult[item]['symbolName'],\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: backtestResult[item]['gridCnt'],\r\n gridWidth: '',\r\n\r\n capital: backtestResult[item]['capital'],\r\n dayTradeOnly: backtestResult[item]['dayTradeOnly'],\r\n\r\n oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpDataSource[item].bbs);\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var oMaxRateOfReturn = this.keepDecimals(tmpDataSource[item].omr, '');\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n oMaxRateOfReturn: oMaxRateOfReturn,\r\n maxRateOfReturn: maxRateOfReturn,\r\n //strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n //strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_optimize_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_optimize_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_optimize_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_optimize_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_optimize_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length == 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock == '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'get_remove_optimize_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n\r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_symbol\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_optimize_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n importBacktestResult = (e, value) => {\r\n e.stopPropagation();\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.batchbacktest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_optimize\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpData[0].bbs);\r\n }\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['Original max annualized income'] + '(%)',\r\n dataIndex: 'oMaxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.oMaxRateOfReturn - b.oMaxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['oMaxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['max Annualized income after optimization'] + '(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 150,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 3 ? languageMessages['complete'] : status == 5 ? languageMessages['error'] : languageMessages['optimizing']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['Multi-dimensionalOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<BatchResult dispatch={this.props.dispatch} type={this.state.type} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyAIBatchPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Form, Divider, Spin, Modal, Progress, Button } from 'antd';\r\n\r\nimport OptResult from './OptResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass AIOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.backtestId = \"0\";\r\n if (history.location.state !== undefined) {\r\n this.backtestId = history.location.state.backtestId;\r\n }\r\n\r\n this.user = {};\r\n this.state = {\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n dayTradeOnly: '0',\r\n\r\n lastTimes: 0,\r\n type: 2,\r\n\r\n spinLoadding: true,\r\n\r\n dayTradeOnly: false,\r\n\r\n filterError: '',\r\n\r\n isStartOptimized: false,\r\n\r\n backtestStatus: 0,\r\n\r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callAIOptBacktestError\", this.callAIOptBacktestError);\r\n emitter.addListener('callAIOptBacktestLastTimes', this.callAIOptBacktestLastTimes);\r\n emitter.addListener('callAIOptBacktestStatus', this.callAIOptBacktestStatus);\r\n emitter.addListener('callAIOptBacktestResult', this.callAIOptBacktestResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callAIOptBacktestError', this.callAIOptBacktestError);\r\n emitter.removeListener('callAIOptBacktestLastTimes', this.callAIOptBacktestLastTimes);\r\n emitter.removeListener('callAIOptBacktestStatus', this.callAIOptBacktestStatus);\r\n emitter.removeListener('callAIOptBacktestResult', this.callAIOptBacktestResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callAIOptBacktestError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['backtestFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callAIOptBacktestLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callAIOptBacktestStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n\r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callAIOptBacktestResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n\r\n /**\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n */\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n\r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n var br = backtest.GridStrategys.filter(function (e) { return e.BacktestId === backtestResult[item]['backtestId']; });\r\n if (br[0].StrategyName.indexOf('strategy') == -1) continue;\r\n\r\n //var strategyName = backtestResult[item]['strategyName'];\r\n //if (strategyName.indexOf('strategy') == -1) continue;\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: br[0].StrategyName,\r\n\r\n symbol: backtest.SymbolCode,\r\n symbolName: backtest.SymbolName,\r\n dayTradeOnly: backtest.DayTradeOnly,\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: br[0].GridCnt,\r\n gridWidth: '',\r\n\r\n capital: br[0].Capital,\r\n\r\n //oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n //oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n //oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n //oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_info\", payload: { u: userId, b: this.backtestId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'bo':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n return lastTimes;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, optInfo, permission } = props;\r\n\r\n switch (status) {\r\n case 'get_opt_info_success':\r\n var lastTimes = 0;\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n lastTimes = this.setUserPermission(this.user.permission);\r\n }\r\n\r\n var isStartOptimized = false;\r\n\r\n var symbolCode = '';\r\n var latestPrice = 0;\r\n var quoteChange = 0;\r\n\r\n var dayTradeOnly = '0';\r\n var isStartOptimized = false;\r\n if (optInfo != undefined) {\r\n symbolCode = optInfo.symbol;\r\n latestPrice = optInfo.latestPrice;\r\n quoteChange = optInfo.quoteChange;\r\n\r\n dayTradeOnly = optInfo.dayTradeOnly;\r\n\r\n //this.onStartOptimized();\r\n isStartOptimized = true;\r\n }\r\n\r\n this.setState({ symbolCode, latestPrice, quoteChange, dayTradeOnly, isStartOptimized, lastTimes, spinLoadding: false });\r\n break;\r\n case 'get_opt_info_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n onStartOptimized = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayBatchBacktestNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'aiOpt',\r\n SymbolCode: symbolCode,\r\n SymbolName: '',\r\n BacktestId: this.backtestId,\r\n BacktestType: this.state.type,\r\n Last: latestPrice,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n var { percent } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['AIincrease'] + ' » ' + languageMessages['ScrollOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <div>{this.state.symbolCode}</div>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n <Form.Item>\r\n {this.state.dayTradeOnly === '0' ? languageMessages['Cross-day trading only'] : languageMessages['Day trading only']}\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' loading={false} disabled={!this.state.isStartOptimized} onClick={this.onStartOptimized}>\r\n {languageMessages['startOptimized']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} lineHeight={14} />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['optimizingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={percent} /></span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{strReplace(languageMessages['optimizedCompletedConsuming'], { '{num}': this.state.consuming })}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptResult dispatch={this.props.dispatch} type={this.state.type} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(AIOptPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport OptResult from './OptResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyAIOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n strategyData: [],\r\n\r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: '2',\r\n\r\n backtestResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setStatisticsResult(backtestResult) {\r\n var statisticsResult = [];\r\n\r\n for (var item in backtestResult) {\r\n\r\n var trades = backtestResult[item]['trades'];\r\n for (var ii in trades) {\r\n trades[ii]['backtestId'] = backtestResult[item]['backtestId'];\r\n trades[ii]['symbol'] = backtestResult[item]['symbol'];\r\n }\r\n\r\n statisticsResult.push({\r\n backtestId: backtestResult[item]['backtestId'],\r\n batchId: backtestResult[item]['batchId'],\r\n strategyName: backtestResult[item]['strategyName'],\r\n\r\n symbol: backtestResult[item]['symbol'],\r\n symbolName: backtestResult[item]['symbolName'],\r\n\r\n targetDistance: backtestResult[item]['targetDistance'],\r\n stopDistance: backtestResult[item]['stopDistance'],\r\n maxHoldingPeriod: backtestResult[item]['maxHoldingPeriod'],\r\n\r\n priceRange: '',\r\n gridCnt: '',\r\n gridWidth: '',\r\n\r\n capital: backtestResult[item]['capital'],\r\n\r\n //oInitialRateOfReturnOnCapital: backtestResult[item]['oStatistics'].initialRateOfReturnOnCapital,\r\n //oAnnualizedRateOfReturn: backtestResult[item]['oStatistics'].annualizedRateOfReturn,\r\n\r\n initialRateOfReturnOnCapital: backtestResult[item]['statistics'].initialRateOfReturnOnCapital,\r\n annualizedRateOfReturn: backtestResult[item]['statistics'].annualizedRateOfReturn,\r\n\r\n //totalPnl: backtestResult[item]['statistics'].totalPnl,\r\n\r\n //oProfitFactor: backtestResult[item]['oStatistics'].profitFactor,\r\n profitFactor: backtestResult[item]['statistics'].profitFactor,\r\n\r\n //maxDrawdown: backtestResult[item]['statistics'].maxDrawdownPercent,\r\n //totalTrades: backtestResult[item]['statistics'].totalTrades,\r\n\r\n //oEquityCurve: backtestResult[item]['oEquityCurve'],\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n trades: trades\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n \r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpDataSource[item].bbs);\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n //var oMaxRateOfReturn = this.keepDecimals(tmpDataSource[item].omr, '');\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n //oMaxRateOfReturn: oMaxRateOfReturn,\r\n maxRateOfReturn: maxRateOfReturn,\r\n //strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n //strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, backtestResult, symbols } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_opt_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (backtestResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_opt_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_opt_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.backtestResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ backtestResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_opt_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_opt_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length == 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock == '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = backtestResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, backtestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'get_remove_opt_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n\r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { backtestResult, currSelStock, symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (backtestResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = backtestResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_symbol\", payload: { t: type, u: userId, s: symbol, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: this.state.type, u: userId, s: '', b: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_opt_items\", payload: { t: type, u: userId, s: symbolCode, b: backtestDate, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n importBacktestResult = (e, value) => {\r\n e.stopPropagation();\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate, type, maxRateOfReturn } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.batchbacktest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_opt\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds, r: maxRateOfReturn } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].bbs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpData[0].bbs);\r\n }\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n /**\r\n {\r\n title: languageMessages['Original max annualized income'] + '(%)',\r\n dataIndex: 'oMaxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.oMaxRateOfReturn - b.oMaxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['oMaxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, \r\n */\r\n {\r\n title: languageMessages['maxRateOfReturn'] + '(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 150,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n /**\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 9 ? languageMessages['complete'] : status == 10 ? languageMessages['error'] : languageMessages['optimizing']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['ScrollOptimization']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['backtestTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<OptResult dispatch={this.props.dispatch} type={this.state.type} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyAIOptPage);\r\nexport { page as default }","var statisticsOption = {\r\n legend: {\r\n data: [],\r\n bottom: 0,\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n },\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n title: {\r\n left: 'center',\r\n text: '',\r\n top: 10\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: { show: false },\r\n axisLabel: { interval: 0, rotate: 30 },\r\n data: []\r\n //data: [1,2,3,4,5]\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: '',\r\n minInterval: 0\r\n },\r\n series: [{\r\n type: 'bar',\r\n barWidth: '5%',\r\n label: {\r\n show: true,\r\n position: 'top',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n color: '',\r\n markPoint: {\r\n symbol: 'none',\r\n itemStyle: {\r\n color: '#a90000'\r\n },\r\n data: []\r\n },\r\n data: []\r\n //data: [1000, 700, 800, 600, 780]\r\n }]\r\n};\r\n\r\nexport { statisticsOption }","var equityOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n\r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: { color: '#666' },\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n min: 0,\r\n max: 1100000,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: \"\"\r\n }],\r\n\r\n series: [\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n itemStyle: {\r\n normal: {\r\n color: '#CE0000'\r\n }\r\n },\r\n symbol: 'none',\r\n markLine: {\r\n symbol: 'none',\r\n label: {\r\n position: 'end'\r\n },\r\n silent: true,\r\n data: [{\r\n yAxis: 1000000.00,\r\n lineStyle: {\r\n color: '#FF8000'\r\n }\r\n }]\r\n },\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: 'Darkgreen'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: '#90EE90'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n\r\nexport { equityOption }","var incomeOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n \r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLine: {\r\n show: true,\r\n onZero: false,\r\n lineStyle: {\r\n color: '666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: ''\r\n }],\r\n\r\n series: []\r\n};\r\n\r\nexport { incomeOption }","import { statisticsOption } from './statistics'\r\nimport { equityOption } from './equity'\r\nimport { incomeOption } from './income'\r\n\r\nfunction deepCopy(obj, cache = []) {\r\n function find(list, f) {\r\n return list.filter(f)[0]\r\n }\r\n\r\n // just return if obj is immutable value\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n // if obj is hit, it is in circular structure\r\n const hit = find(cache, c => c.original === obj)\r\n if (hit) {\r\n return hit.copy\r\n }\r\n\r\n const copy = Array.isArray(obj) ? [] : {}\r\n // put the copy into cache at first\r\n // because we want to refer it in recursive deepCopy\r\n cache.push({\r\n original: obj,\r\n copy\r\n })\r\n\r\n Object.keys(obj).forEach(key => {\r\n copy[key] = deepCopy(obj[key], cache)\r\n })\r\n\r\n return copy\r\n}\r\n\r\nfunction getChartOption(chartName, chartData) {\r\n let option = null\r\n let min = 0\r\n let max = 999\r\n switch (chartName) {\r\n case \"grid\":\r\n option = statisticsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 0\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n\r\n option.series = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n\r\n var w = data[i].length;\r\n w = w * 5\r\n\r\n option.series.push({\r\n type: 'bar',\r\n //barGap: 5,\r\n name: chartData['name'][i],\r\n barWidth: w + \"%\",\r\n label: {\r\n show: true,\r\n position: 'top',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n \r\n color: chartData['color'][i],\r\n markPoint: {\r\n symbol: chartData['markPoint']['symbol'],\r\n itemStyle: {\r\n color: chartData['markPoint']['color']\r\n },\r\n data: chartData['markPoint']['data']\r\n },\r\n data: data[i]\r\n });\r\n\r\n legend.push(chartData['name'][i]);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"statistics\":\r\n option = statisticsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.legend.data = [];\r\n \r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 30\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n var w = chartData['data'].length;\r\n w = w * 5\r\n option.series[0].barWidth = w + \"%\";\r\n option.series[0].color = chartData['color']\r\n option.series[0].data = chartData['data']\r\n\r\n option.series[0].markPoint.symbol = chartData['markPoint']['symbol']\r\n option.series[0].markPoint.itemStyle.color = chartData['markPoint']['color']\r\n option.series[0].markPoint.data = chartData['markPoint']['data']\r\n break;\r\n case \"income\":\r\n option = incomeOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n option.yAxis[0].name = chartData['yName']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series.push({\r\n smooth: false,\r\n name: data[i].name,\r\n type: 'line',\r\n color: data[i].color,\r\n symbol: 'none',\r\n data: data[i].data\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"equity\":\r\n option = equityOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n\r\n min = 0\r\n max = 999\r\n var originFund = 0;\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series[i].name = data[i].name\r\n option.series[i].data = data[i].data == null ? [] : data[i].data;\r\n \r\n legend.push(data[i].name);\r\n \r\n if (option.series[i].data.length > 0) {\r\n if (min == 0 || Math.min.apply(null, option.series[i].data) < min)\r\n min = Math.min.apply(null, option.series[i].data)\r\n if (max == 0 || Math.max.apply(null, option.series[i].data) > max)\r\n max = Math.max.apply(null, option.series[i].data)\r\n\r\n if (data[i].type === 1) {\r\n originFund = data[i].data[0]\r\n option.series[i].markLine.data[0].yAxis = originFund\r\n }\r\n }\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n min = parseInt(Math.floor(min));\r\n max = parseInt(Math.ceil(max));\r\n \r\n if ((Math.abs(min)).toString().length > 1) {\r\n if (originFund != undefined) originFund = parseInt(originFund.toString());\r\n\r\n var len = Math.abs(originFund);\r\n len = len.toString().length - 2;\r\n\r\n len = Math.pow(10, len)\r\n len = parseInt(len.toString())\r\n\r\n if (min < 0) {\r\n min = 0;\r\n } else {\r\n min = parseInt(min / len) * len;\r\n }\r\n\r\n max = parseInt(max / len + 1) * len;\r\n }\r\n\r\n option.yAxis[0].min = min\r\n option.yAxis[0].max = max\r\n break;\r\n \r\n }\r\n return deepCopy(option)\r\n}\r\n\r\nexport { getChartOption }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Divider, message } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\nimport emitter from '../Evt.js';\r\nimport { equal } from 'assert';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n /**\r\n {\r\n 'name': '沪深300',\r\n 'color': '#CE0000',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['thisStrategy'],\r\n 'color': 'blue',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }*/\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nclass TradeResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.charts = {\r\n \"income\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n\r\n income: '',\r\n trade: '',\r\n\r\n dataSource: [],\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener('initPage', () => {\r\n this.init();\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n \r\n init() {\r\n \r\n }\r\n\r\n resizeChart() {\r\n var incomeChart = this.charts['income'];\r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"income\": null\r\n };\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n\r\n var income = [];\r\n var trade = '';\r\n\r\n var dataSource = [];\r\n\r\n if (statisticsResult.length > 0) {\r\n //let maxProfitFactor = 0;\r\n //let profitFactorItem = [];\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in statisticsResult) {\r\n //conditions.push({ 'id': statisticsResult[item].backtestId, 'name': statisticsResult[item].strategyName });\r\n\r\n //var annualizedRateOfReturn = this.keepDecimals(statisticsResult[item].annualizedRateOfReturn, '');\r\n //var totalPnl = this.keepDecimals(statisticsResult[item].totalPnl, '');\r\n //var profitFactor = this.keepDecimals(statisticsResult[item].profitFactor, '');\r\n //var maxDrawdown = this.keepDecimals(statisticsResult[item].maxDrawdown, '');\r\n\r\n //maxDrawdown = maxDrawdown > 0 ? 0 - maxDrawdown : maxDrawdown;\r\n\r\n\r\n //var pnl = parseFloat(trades[item].pnl);\r\n //var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n \r\n var tradeTime = statisticsResult[item].entryTime;\r\n var strikePrice = statisticsResult[item].entryPrice;\r\n var volume = Math.abs(statisticsResult[item].entryQty);\r\n var turnover = statisticsResult[item].entryTurnover;\r\n var pnl = statisticsResult[item].unRelPnL;\r\n var pnlPercent = statisticsResult[item].entryPnlp;\r\n\r\n strikePrice = strikePrice == '0' ? '' : parseFloat(strikePrice).toFixed(statisticsResult[item].entryDivide);\r\n \r\n var direction = '';\r\n if (statisticsResult[item].dir == 'Long') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n\r\n tradeTime = statisticsResult[item].exitTime;\r\n strikePrice = statisticsResult[item].exitPrice;\r\n volume = Math.abs(statisticsResult[item].exitQty);\r\n turnover = statisticsResult[item].exitTurnover;\r\n pnl = statisticsResult[item].unRelPnL;\r\n pnlPercent = statisticsResult[item].exitPnlp;\r\n\r\n strikePrice = strikePrice == '0' ? '' : parseFloat(strikePrice).toFixed(statisticsResult[item].exitDivide);\r\n }\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n sign: 'U',\r\n symbolName: statisticsResult[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume == '0' ? '' : volume,\r\n turnover: turnover == '0' ? '' : parseFloat(turnover).toFixed(2),\r\n pnl: pnl == '0' ? '' : parseFloat(pnl).toFixed(2),\r\n pnlp: pnlPercent == '0' ? '' : parseFloat(pnlPercent).toFixed(2)\r\n });\r\n\r\n index++;\r\n\r\n if (statisticsResult[item].dir == 'Long') {\r\n direction = 'S';\r\n\r\n tradeTime = statisticsResult[item].exitTime;\r\n strikePrice = statisticsResult[item].exitPrice;\r\n volume = Math.abs(statisticsResult[item].exitQty);\r\n turnover = statisticsResult[item].exitTurnover;\r\n pnl = statisticsResult[item].relPnL;\r\n pnlPercent = statisticsResult[item].exitPnlp;\r\n\r\n strikePrice = strikePrice == '0' ? '' : parseFloat(strikePrice).toFixed(statisticsResult[item].exitDivide);\r\n } else {\r\n direction = 'L';\r\n\r\n tradeTime = statisticsResult[item].entryTime;\r\n strikePrice = statisticsResult[item].entryPrice;\r\n volume = Math.abs(statisticsResult[item].entryQty);\r\n turnover = statisticsResult[item].entryTurnover;\r\n pnl = statisticsResult[item].relPnL;\r\n pnlPercent = statisticsResult[item].entryPnlp;\r\n\r\n strikePrice = strikePrice == '0' ? '' : parseFloat(strikePrice).toFixed(statisticsResult[item].entryDivide);\r\n }\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n sign: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice == '0' ? '' : strikePrice,\r\n direction: direction,\r\n volume: volume == '0' ? '' : volume,\r\n turnover: turnover == '0' ? '' : parseFloat(turnover).toFixed(2),\r\n pnl: pnl == '0' ? '' : parseFloat(pnl).toFixed(2),\r\n pnlp: pnlPercent == '0' ? '' : parseFloat(pnlPercent).toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n\r\n /**\r\n if (conditions.length > 0) {\r\n income = conditions[0].id;//.push(conditions[0].id);\r\n trade = conditions[0].id;\r\n\r\n var rateOfReturn = statisticsResult[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[0].equityCurve.date;\r\n //incomes.data[0].name = window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = statisticsResult[0].strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n\r\n if (statisticsResult[0].trades.length > 0) {\r\n var trades = statisticsResult[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n }\r\n */\r\n }\r\n \r\n this.setIncomeData(\"income\", incomes);\r\n\r\n this.setState({ conditions, income, trade, dataSource, statisticsResult });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n const { statisticsResult } = props;\r\n\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n }\r\n\r\n onSelectConditionByIncome = e => {\r\n var { income } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (income == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n income = tags;\r\n\r\n /**\r\n if (e.target.classList.contains(\"checked\")) {\r\n e.target.classList.remove(\"checked\");\r\n\r\n if (income.length <= 0) return;\r\n income = income.filter(function (item) { return item !== tags });\r\n } else {\r\n let count = income.length;\r\n if (count >= 3) {\r\n message.warning(languageMessages['hawkeyeUpperLimit'], 5);\r\n return;\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n\r\n income.push(tags);\r\n }\r\n */\r\n\r\n const { statisticsResult } = this.props;\r\n\r\n var tmpIncomes = statisticsResult.filter(function (e) { return income == e.backtestId; });\r\n if (tmpIncomes.length > 0) {\r\n\r\n var rateOfReturn = tmpIncomes[0].equityCurve.rateOfReturn;\r\n var bRateOfReturn = tmpIncomes[0].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = tmpIncomes[0].equityCurve.date;\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = tmpIncomes[0].strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n /**\r\n incomes.data.push({\r\n 'name': statisticsResult[0].strategyName,\r\n 'color': colors[0],\r\n 'data': statisticsResult[0].equityCurve.rateOfReturn\r\n });\r\n */\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n }\r\n\r\n this.setState({ income });\r\n } catch (e) { }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var tmpTrades = this.props.statisticsResult.filter(function (e) { return e.backtestId == trade; });\r\n if (tmpTrades.length > 0) {\r\n var trades = tmpTrades[0].trades;\r\n\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: trades[item].symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n /**\r\n var bpUsed = parseFloat(trades[item].bpUsed);\r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: index,\r\n symbolName: trades[item].symbol,\r\n entryDate: trades[item].entryDatetime,\r\n entryPrice: trades[item].entryPrice,\r\n direction: trades[item].direction,\r\n quantity: trades[item].quantity,\r\n exitDate: trades[item].exitDatetime,\r\n exitPrice: trades[item].exitPrice,\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2),\r\n initbp: bpUsed.toFixed(2),\r\n exitInfo: trades[item].closeInfo,\r\n remark: trades[item].memo\r\n });\r\n\r\n index++;\r\n */\r\n }\r\n }\r\n \r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n \r\n\r\n render() {\r\n var { conditions, income, equity, trade, dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['Size'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['Capital used'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['profit and loss'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['sign'] == 'U') {\r\n if (row['pnl'] !== '') {\r\n if (row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{'U' + ' ' + text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{'U' + ' ' + text}</span>;\r\n }\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n } else {\r\n if (row['pnl'] !== '') {\r\n if (row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n /**\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['entryDate'],\r\n dataIndex: 'entryDate',\r\n sorter: (a, b) => a.entryDate - b.entryDate,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['entryPrice'],\r\n dataIndex: 'entryPrice',\r\n align: 'right',\r\n sorter: (a, b) => a.entryPrice - b.entryPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['quantity'],\r\n dataIndex: 'quantity',\r\n align: 'right',\r\n sorter: (a, b) => a.quantity - b.quantity,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitDate'],\r\n dataIndex: 'exitDate',\r\n sorter: (a, b) => a.exitDate - b.exitDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitPrice'],\r\n dataIndex: 'exitPrice',\r\n align: 'right',\r\n sorter: (a, b) => a.exitPrice - b.exitPrice,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnl'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n sorter: (a, b) => a.pnl - b.pnl,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnl'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n sorter: (a, b) => a.pnlp - b.pnlp,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['initbp'],\r\n dataIndex: 'initbp',\r\n align: 'right',\r\n sorter: (a, b) => a.initbp - b.initbp,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['exitInfo'],\r\n dataIndex: 'exitInfo',\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.exitInfo) ? languageMessages[record.exitInfo] : record.exitInfo}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['remark'],\r\n dataIndex: 'remark'\r\n },\r\n ];\r\n */\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n return (<Content>\r\n <div style={{ display: 'none' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestDetails']}</div>\r\n <div style={{ display: \"flex\", flexWrap: \"wrap\", marginTop: \"20px\" }} ></div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={false} />\r\n\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { TradeResult as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, Modal, message } from 'antd';\r\n\r\nimport TradeResult from './TradeResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nconst strCategory = [\r\n languageMessages['generalStrategy'],\r\n languageMessages['backtestGrid'],\r\n languageMessages['AIincrease'],\r\n languageMessages['optimalGrid'],\r\n languageMessages['strategyExcavate'],\r\n languageMessages['AIincrease'] + '-' + languageMessages['optimizationGrid'],\r\n languageMessages['optimalGrid'] + '-' + languageMessages['optimizationGrid'],\r\n languageMessages['AIincrease'] + '-' + languageMessages['rollingBacktest'],\r\n languageMessages['optimalGrid'] + '-' + languageMessages['rollingBacktest'],\r\n languageMessages['rollingStrategy']\r\n];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass RealTimePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n maxRateOfReturn: '0',\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: 0,\r\n\r\n tradeResult: {},\r\n statisticsResult: [],\r\n\r\n strategyTradeResult: [],\r\n\r\n selectedRowKeys: [],\r\n strategyIds: [],\r\n\r\n spinLoadding: true,\r\n \r\n strategyKey: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n\r\n emitter.addListener('callSendStrategyStatusError', this.callSendStrategyStatusError);\r\n emitter.addListener('callSetStrategyStatus', this.callSetStrategyStatus);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendStrategyStatusError', this.callSendStrategyStatusError);\r\n emitter.removeListener('callSetStrategyStatus', this.callSetStrategyStatus);\r\n }\r\n\r\n callSendStrategyStatusError = (status) => {\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n\r\n this.setState({ strategyKey: 0 });\r\n }\r\n\r\n callSetStrategyStatus = (status, strategyStatus) => {\r\n let { dataSource } = this.state;\r\n\r\n //if (status == 0) {\r\n for (var item in dataSource) {\r\n if (dataSource[item].key == strategyStatus.StrategyId) {\r\n dataSource[item].status = strategyStatus.Status;\r\n break;\r\n }\r\n }\r\n //} else {\r\n //message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n //}\r\n\r\n this.setState({ strategyKey: 0, dataSource });\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: type, u: userId, s: symbolCode, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setTradeResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].tradeDetails != null) {\r\n statisticsResult = tmpDataSource[item].tradeDetails;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var grandTotalRateOfReturn = 1;\r\n var annualizedRateOfReturn = 2;\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n\r\n tbLogin: tmpDataSource[item].tb,\r\n\r\n grandTotalRateOfReturn: grandTotalRateOfReturn,\r\n annualizedRateOfReturn: annualizedRateOfReturn,\r\n\r\n category: tmpDataSource[item].cg,\r\n capital: tmpDataSource[item].ct,\r\n tradingStraregy: tmpDataSource[item].sn.replace('strategy', languageMessages['gridStrategy']),\r\n dayTradeOnly: tmpDataSource[item].dt,\r\n startTime: tmpDataSource[item].fd,\r\n endTime: tmpDataSource[item].ed,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, tradeResult, symbols } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_trade_result_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (tradeResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n \r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ strategyData, currSelStock, tradeResult, strategyTradeResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_trade_result_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_get_trade_result_search_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpTradeResult = this.state.tradeResult;\r\n\r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n tmpTradeResult[currSelStock] = strategyTradeResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ tradeResult: tmpTradeResult, strategyTradeResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_trade_result_search_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_trade_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ strategyData, currSelStock, tradeResult, strategyTradeResult, spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n\r\n var sequenceIds = this.state.strategyIds.join(',');\r\n message.success(strReplace(languageMessages['remove.trade.success'], { '{num}': sequenceIds }));\r\n \r\n\r\n /**\r\n let { dataSource, currSelStock, strategyTradeResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = tradeIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = strategyTradeResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n var tmpTradeResult = this.state.tradeResult;\r\n if (currSelStock !== '') {\r\n let tmpStrategyTradeResult = tmpTradeResult[currSelStock].filter(function (v) { return tmpValue.indexOf(v.i.toString()) === -1 });\r\n if (tmpStrategyTradeResult.length === 0) {\r\n delete tmpTradeResult[currSelStock];\r\n\r\n //tradeResult[]\r\n } else {\r\n tmpTradeResult[currSelStock] = tmpStrategyTradeResult;\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.trade.success']);\r\n }\r\n \r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], tradeResult: tmpTradeResult, rowId, statisticsResult, currSelStock });\r\n */\r\n break;\r\n case 'get_remove_trade_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { tradeResult, currSelStock, symbolCode, maxRateOfReturn, type } = this.state;\r\n \r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n /**\r\n if (tradeResult.hasOwnProperty(symbol)) {\r\n var strategyTradeResult = tradeResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ currSelStock: symbol, strategyTradeResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n */\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result_search\", payload: { t: type, u: userId, s: symbol, r: maxRateOfReturn } });\r\n });\r\n //}\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: this.state.type, u: userId, s: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockTrade = () => {\r\n var { symbolCode, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: type, u: userId, s: symbolCode, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, type } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var tradeIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.trade'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_trade\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, ts: tradeIds } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { strategyTradeResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = strategyTradeResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].tradeDetails != null) {\r\n statisticsResult = tmpData[0].tradeDetails;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n let strategyIds = [];\r\n for (var k in selectedRowKeys) {\r\n let data = this.state.dataSource.filter(function (e) { return e.key === selectedRowKeys[k]; });\r\n if (data.length > 0) {\r\n strategyIds.push(data[0].sequence);\r\n }\r\n }\r\n\r\n this.setState({ selectedRowKeys, strategyIds });\r\n };\r\n\r\n handleStrategy = (value) => {\r\n this.setState({ strategyKey: value.key }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinModalLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendStrategyStatus',\r\n userId: user.username,\r\n msg: {\r\n Type: 'setStrategyStatus',\r\n StrategyId: value.key,\r\n Status: value.status,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n renderStockTrade(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n isSetStatus = record => record.key === this.state.strategyKey;\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['strategy id'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 60\r\n },\r\n /**\r\n {\r\n title: languageMessages['grandTotalRateOfReturn'] + '(%)',\r\n dataIndex: 'grandTotalRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.grandTotalRateOfReturn - b.grandTotalRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['grandTotalRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['annualizedRateOfReturn'] + '(%)',\r\n dataIndex: 'annualizedRateOfReturn',\r\n width: 125,\r\n align: 'center',\r\n sorter: (a, b) => a.annualizedRateOfReturn - b.annualizedRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['annualizedRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, */\r\n {\r\n title: languageMessages['tbLogin'],\r\n dataIndex: 'tbLogin',\r\n width: 100,\r\n align: 'center',\r\n sorter: (a, b) => a.tbLogin - b.tbLogin,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['minimumCapital'],\r\n dataIndex: 'capital',\r\n width: 155,\r\n align: 'center',\r\n sorter: (a, b) => a.capital - b.capital,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['category'],\r\n dataIndex: 'category',\r\n width: 200,\r\n render: category => {\r\n return strCategory[category]\r\n }\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n render: dayTradeOnly => {\r\n return dayTradeOnly === 0 ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['startTime'],\r\n dataIndex: 'startTime',\r\n width: 160,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n {\r\n title: languageMessages['endTime'],\r\n dataIndex: 'endTime',\r\n width: 160,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 80,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['stopped'] : status == 1 ? languageMessages['running'] : status == 4 ? languageMessages['waiting'] : languageMessages['over']}\r\n </span>\r\n )\r\n },\r\n {\r\n title: languageMessages['control'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n width: 100,\r\n render: (text, record) => {\r\n const state = this.isSetStatus(record);\r\n return <Button loading={state} size='small' disabled={record.status === 5 || record.status === 10} onClick={() => this.handleStrategy(record)}>{record['status'] == 0 || record['status'] == 5 ? languageMessages['start'] : languageMessages['stop']}</Button>\r\n }\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myRealTime'] + ' » ' + languageMessages['stockStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel' style={{ display: 'none' }}>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockTrade}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockTrade(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['Undeploy']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<TradeResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} type={this.state.type} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.trade;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(RealTimePage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, Modal, message, Row, Col, Upload, Radio } from 'antd';\r\n\r\nimport TradeResult from './TradeResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nconst strCategory = [\r\n languageMessages['generalStrategy'],\r\n languageMessages['backtestGrid'],\r\n languageMessages['AIincrease'],\r\n languageMessages['optimalGrid'],\r\n languageMessages['strategyExcavate'],\r\n languageMessages['AIincrease'] + '-' + languageMessages['optimizationGrid'],\r\n languageMessages['optimalGrid'] + '-' + languageMessages['optimizationGrid'],\r\n languageMessages['AIincrease'] + '-' + languageMessages['rollingBacktest'],\r\n languageMessages['optimalGrid'] + '-' + languageMessages['rollingBacktest'],\r\n languageMessages['rollingStrategy']\r\n];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass SimulationPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n maxRateOfReturn: '0',\r\n\r\n currSelStock: '',\r\n\r\n strategyData: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: 1,\r\n\r\n tradeResult: {},\r\n statisticsResult: [],\r\n\r\n strategyTradeResult: [],\r\n\r\n selectedRowKeys: [],\r\n strategyIds: [],\r\n\r\n spinLoadding: true,\r\n\r\n spinModalLoadding: false,\r\n\r\n modalStrategyId: '',\r\n modalSymbolCode: '',\r\n //modalSymbolName: '',\r\n //modalStrategyName: '',\r\n modalStrategyType: '',\r\n initCapital: 0,\r\n capital: 0,\r\n gridCnt: 0,\r\n category: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n fileList: [],\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n\r\n this.setState({ spinModalLoadding: false, modalVisible: false });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinModalLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n onOk() { },\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, maxRateOfReturn, type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: type, u: userId, s: symbolCode, r: maxRateOfReturn } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setTradeResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].tradeDetails != null) {\r\n statisticsResult = tmpDataSource[item].tradeDetails;\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n var grandTotalRateOfReturn = 1;\r\n var annualizedRateOfReturn = 2;\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n\r\n tbLogin: tmpDataSource[item].tb,\r\n\r\n grandTotalRateOfReturn: grandTotalRateOfReturn,\r\n annualizedRateOfReturn: annualizedRateOfReturn,\r\n\r\n category: tmpDataSource[item].cg,\r\n initCapital: tmpDataSource[item].ct,\r\n capital: tmpDataSource[item].ct,\r\n gridCnt: tmpDataSource[item].gridCnt,\r\n tradingStraregy: tmpDataSource[item].sn.replace('strategy', languageMessages['gridStrategy']),\r\n dayTradeOnly: tmpDataSource[item].dt,\r\n startTime: tmpDataSource[item].fd,\r\n endTime: tmpDataSource[item].ed,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, tradeResult, symbols, basePosition, share, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_trade_result_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (tradeResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ strategyData, currSelStock, tradeResult, strategyTradeResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_trade_result_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_get_trade_result_search_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpTradeResult = this.state.tradeResult;\r\n\r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n tmpTradeResult[currSelStock] = strategyTradeResult;\r\n }\r\n \r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ tradeResult: tmpTradeResult, strategyTradeResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_trade_result_search_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_trade_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var strategyTradeResult = [];\r\n if (currSelStock !== '') {\r\n strategyTradeResult = tradeResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ strategyData, currSelStock, tradeResult, strategyTradeResult, spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n\r\n var sequenceIds = this.state.strategyIds.join(',');\r\n message.success(strReplace(languageMessages['remove.trade.success'], { '{num}': sequenceIds }));\r\n\r\n /**\r\n let { dataSource, strategyTradeResult, rowId, statisticsResult } = this.state;\r\n\r\n var tmpValue = tradeIds.split(',');\r\n\r\n if (tmpValue.length > 0) {\r\n var tmpRowKeys = tmpValue.filter(function (e) { return e === rowId.toString(); });\r\n if (tmpRowKeys.length > 0) {\r\n rowId = -1;\r\n statisticsResult = [];\r\n var tmpData = strategyTradeResult.filter(function (e) { return tmpValue.indexOf(e.i.toString()) === -1 });\r\n if (tmpData.length > 0) {\r\n rowId = tmpData[0].i;\r\n if (tmpData[0].statistics != null) {\r\n statisticsResult = tmpData[0].statistics;\r\n }\r\n }\r\n }\r\n\r\n dataSource = dataSource.filter(function (v) { return tmpValue.indexOf(v.key.toString()) === -1 });\r\n\r\n message.success(languageMessages['remove.trade.success']);\r\n }\r\n this.setState({ spinLoadding: false, dataSource, selectedRowKeys: [], rowId, statisticsResult });\r\n */\r\n break;\r\n case 'get_remove_trade_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_base_position_success':\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n basePosition,\r\n share,\r\n spinLoadding: false\r\n });\r\n\r\n break;\r\n case 'get_base_position_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n /**\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { tradeResult, currSelStock, symbolCode, maxRateOfReturn, type } = this.state;\r\n \r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n /**\r\n if (tradeResult.hasOwnProperty(symbol)) {\r\n var strategyTradeResult = tradeResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setTradeResult(strategyTradeResult);\r\n this.setState({ currSelStock: symbol, strategyTradeResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n */\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result_search\", payload: { t: type, u: userId, s: symbol, r: maxRateOfReturn } });\r\n });\r\n //}\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: this.state.type, u: userId, s: '', r: '0' } });\r\n });\r\n }\r\n\r\n handleSearchStockTrade = () => {\r\n var { symbolCode, maxRateOfReturn, type } = this.state;\r\n\r\n /**\r\n var maxRateOfReturns = selRateOfReturn.filter(function (v) { return maxRateOfReturn == v.id });\r\n if (maxRateOfReturns.length > 0) {\r\n if (maxRateOfReturns[0].id == '0') {\r\n maxRateOfReturn = '';\r\n } else {\r\n maxRateOfReturn = maxRateOfReturns[0].name;\r\n }\r\n } else {\r\n maxRateOfReturn = '';\r\n }\r\n */\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_trade_result\", payload: { t: type, u: userId, s: symbolCode, r: maxRateOfReturn } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, type } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var tradeIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.trade'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_trade\", payload: { t: type, u: _this.user.username, s: currSelStock, sc: symbolCode, ts: tradeIds } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { strategyTradeResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = strategyTradeResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].tradeDetails != null) {\r\n statisticsResult = tmpData[0].tradeDetails;\r\n }\r\n /**\r\n if (selectedRowKeys.indexOf(record.key) >= 0) {\r\n selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);\r\n } else {\r\n selectedRowKeys.push(record.key);\r\n }\r\n */\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n let strategyIds = [];\r\n for (var k in selectedRowKeys) {\r\n let data = this.state.dataSource.filter(function (e) { return e.key === selectedRowKeys[k]; });\r\n if (data.length > 0) {\r\n strategyIds.push(data[0].sequence);\r\n }\r\n }\r\n\r\n this.setState({ selectedRowKeys, strategyIds });\r\n };\r\n\r\n handleStrategy = (value) => {\r\n this.setState({\r\n spinLoadding: true,\r\n modalStrategyId: value.key,\r\n modalSymbolCode: value.symbolCode,\r\n modalStrategyType: value.dayTradeOnly,\r\n initCapital: value.capital,\r\n capital: value.capital,\r\n gridCnt: value.gridCnt,\r\n category: value.category\r\n }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: userId, cg: value.category, s: value.symbolCode, g: value.gridCnt, c: 0 } });\r\n });\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n buildBindBroker = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_auth\", payload: { u: user.username } });\r\n }\r\n }\r\n\r\n renderModalContent() {\r\n return window.webType === 'US' ? this.renderModalContentForUs() : this.renderModalContentForCn();\r\n }\r\n\r\n handleChangeCapital = e => {\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: userId, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n });\r\n }\r\n\r\n handleBlurCapital = e => {\r\n e.preventDefault();\r\n\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: userId, cg: this.state.category, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n });\r\n }\r\n\r\n renderModalContentForCn() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'åŽé‘«è¯åˆ¸' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']}\r\n <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n \r\n </div>\r\n }\r\n\r\n renderModalContentForUs() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'TD', 'name': 'TdAmeritrade' }, { 'id': 'IB', 'name': 'IB' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div style={{ display: this.state.broker == 'TD' ? '' : 'none' }}><Button size='small' onClick={this.buildBindBroker}>{languageMessages['login td account']}</Button></div>\r\n <div style={{ display: this.state.broker == 'IB' ? '' : 'none' }}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (this.state.initCapital > this.state.capital) {\r\n message.info(languageMessages['Buying power to allocate tips']);\r\n } else {\r\n let { modalStrategyId, modalSymbolCode, modalStrategyType, capital, category, broker } = this.state;\r\n\r\n this.setState({ spinModalLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: 0,\r\n BacktestId: '0',\r\n StrategyId: modalStrategyId,\r\n SymbolCode: modalSymbolCode,\r\n Category: category,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ExecutionPlatform: broker,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinModalLoadding: false });\r\n }\r\n\r\n renderStockTrade(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['strategy id'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 60\r\n },\r\n /**\r\n {\r\n title: languageMessages['grandTotalRateOfReturn'] + '(%)',\r\n dataIndex: 'grandTotalRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.grandTotalRateOfReturn - b.grandTotalRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['grandTotalRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['annualizedRateOfReturn'] + '(%)',\r\n dataIndex: 'annualizedRateOfReturn',\r\n width: 125,\r\n align: 'center',\r\n sorter: (a, b) => a.annualizedRateOfReturn - b.annualizedRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['annualizedRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },*/\r\n {\r\n title: languageMessages['tbLogin'],\r\n dataIndex: 'tbLogin',\r\n width: 100,\r\n align: 'center',\r\n sorter: (a, b) => a.tbLogin - b.tbLogin,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['minimumCapital'],\r\n dataIndex: 'capital',\r\n width: 155,\r\n align: 'center',\r\n sorter: (a, b) => a.capital - b.capital,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['category'],\r\n dataIndex: 'category',\r\n width: 200,\r\n render: category => {\r\n return strCategory[category]\r\n }\r\n }, {\r\n title: languageMessages['dayTradeOnly'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 90,\r\n render: dayTradeOnly => {\r\n return dayTradeOnly === 0 ? languageMessages['crossDay'] : languageMessages['intraday']\r\n }\r\n }, {\r\n title: languageMessages['startTime'],\r\n dataIndex: 'startTime',\r\n width: 160,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n {\r\n title: languageMessages['endTime'],\r\n dataIndex: 'endTime',\r\n width: 160,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 80,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 0 ? languageMessages['stopped'] : status == 1 ? languageMessages['running'] : status == 4 ? languageMessages['waiting'] : languageMessages['over']}\r\n </span>\r\n )\r\n }, \r\n {\r\n title: languageMessages['control'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n width: 100,\r\n render: (text, record) => {\r\n return <Button size='small' onClick={() => this.handleStrategy(record)}>{languageMessages['goRealTime']}</Button>\r\n }\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['mySimulated'] + ' » ' + languageMessages['stockStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestFilter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel' style={{ display: 'none' }}>\r\n <label className='common-label-cn'>{languageMessages['annualizedRateOfReturn']}</label>\r\n <Select labelInValue size='small' value={{ key: this.state.maxRateOfReturn }} style={{ width: '120px' }} onChange={this.handleIncomesChange}>\r\n {\r\n selRateOfReturn.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </div>\r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockTrade}>{languageMessages['search']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockTrade(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['Undeploy']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<TradeResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} type={this.state.type} />)}\r\n </Content>\r\n </Spin>\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinModalLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.trade;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(SimulationPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Divider, Spin } from 'antd';\r\n\r\nimport TradeResult from './TradeResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass GeneralStrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: 1,\r\n\r\n strategyName: '',\r\n \r\n statisticsResult: [],\r\n\r\n spinLoadding: true\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_general_strategy_result\", payload: { t: type, u: userId } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, items, tradeDetails } = props;\r\n\r\n switch (status) {\r\n case 'get_general_strategy_result_success':\r\n\r\n var rowId = -1;\r\n var strategyName = '';\r\n var dataSource = [];\r\n if (items.length > 0) {\r\n for (var item in items) {\r\n if (rowId === -1) {\r\n rowId = items[item].strategyId;\r\n strategyName = items[item].strategyName;\r\n }\r\n var sequence = parseInt(item) + 1;\r\n\r\n dataSource.push({\r\n key: items[item].strategyId,\r\n sequence: sequence,\r\n tradingStraregy: items[item].strategyName,\r\n capital: items[item].capital\r\n \r\n });\r\n }\r\n }\r\n\r\n var statisticsResult = tradeDetails;\r\n\r\n this.setState({ spinLoadding: false, dataSource, statisticsResult, rowId, strategyName });\r\n break;\r\n case 'get_general_strategy_result_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_general_strategy_result_search_success':\r\n\r\n var statisticsResult = tradeDetails;\r\n\r\n this.setState({ spinLoadding: false, statisticsResult });\r\n break;\r\n case 'get_general_strategy_result_search_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { dataSource, type } = this.state;\r\n\r\n var tmpData = dataSource.filter(function (e) { return e.key === record.key; });\r\n if (tmpData.length > 0) {\r\n this.setState({ rowId: record.key, strategyName: record.tradingStraregy, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_general_strategy_result_search\", payload: { t: type, u: userId, i: record.key } });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n render() {\r\n var { dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n },\r\n {\r\n title: languageMessages['tradingStraregy'],\r\n dataIndex: 'tradingStraregy',\r\n width: 100\r\n }, {\r\n title: languageMessages['minimumCapital'],\r\n dataIndex: 'capital',\r\n width: 155,\r\n align: 'center',\r\n sorter: (a, b) => a.capital - b.capital,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n ];\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['mySimulated'] + ' » ' + languageMessages['generalStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['strategy.items']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName} pagination={false} />\r\n\r\n <div style={{ padding: '20px 0', fontWeight: 'bold', display: this.state.strategyName === '' ? 'none' : '' }}>{languageMessages['tradingStraregy'] + ': ' + this.state.strategyName}</div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<TradeResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} type={this.state.type} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.trade;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(GeneralStrategyPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Divider, Spin } from 'antd';\r\n\r\nimport TradeResult from './TradeResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass RealTimeGeneralStrategyPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n type: 0,\r\n\r\n strategyName: '',\r\n\r\n statisticsResult: [],\r\n\r\n spinLoadding: true\r\n\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { type } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_general_strategy_result\", payload: { t: type, u: userId } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, items, tradeDetails } = props;\r\n\r\n switch (status) {\r\n case 'get_general_strategy_result_success':\r\n\r\n var rowId = -1;\r\n var strategyName = '';\r\n var dataSource = [];\r\n if (items.length > 0) {\r\n for (var item in items) {\r\n if (rowId === -1) {\r\n rowId = items[item].strategyId;\r\n strategyName = items[item].strategyName;\r\n }\r\n var sequence = parseInt(item) + 1;\r\n\r\n dataSource.push({\r\n key: items[item].strategyId,\r\n sequence: sequence,\r\n tradingStraregy: items[item].strategyName,\r\n capital: items[item].capital\r\n\r\n });\r\n }\r\n }\r\n\r\n var statisticsResult = tradeDetails;\r\n\r\n this.setState({ spinLoadding: false, dataSource, statisticsResult, rowId, strategyName });\r\n break;\r\n case 'get_general_strategy_result_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_general_strategy_result_search_success':\r\n\r\n var statisticsResult = tradeDetails;\r\n\r\n this.setState({ spinLoadding: false, statisticsResult });\r\n break;\r\n case 'get_general_strategy_result_search_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { dataSource, type } = this.state;\r\n\r\n var tmpData = dataSource.filter(function (e) { return e.key === record.key; });\r\n if (tmpData.length > 0) {\r\n this.setState({ rowId: record.key, strategyName: record.tradingStraregy, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_general_strategy_result_search\", payload: { t: type, u: userId, i: record.key } });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n render() {\r\n var { dataSource } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n },\r\n {\r\n title: languageMessages['tradingStraregy'],\r\n dataIndex: 'tradingStraregy',\r\n width: 100\r\n }, {\r\n title: languageMessages['minimumCapital'],\r\n dataIndex: 'capital',\r\n width: 155,\r\n align: 'center',\r\n sorter: (a, b) => a.capital - b.capital,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n ];\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['mySimulated'] + ' » ' + languageMessages['generalStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['strategy.items']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName} pagination={false} />\r\n\r\n <div style={{ padding: '20px 0', fontWeight: 'bold' }}>{languageMessages['tradingStraregy'] + ': ' + this.state.strategyName}</div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<TradeResult dispatch={this.props.dispatch} statisticsResult={this.state.statisticsResult} type={this.state.type} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.trade;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(RealTimeGeneralStrategyPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Modal, Divider, Button, Row, Col, message, Select, Upload, Icon, Radio, Spin, Input } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n 'markAreaData': [],\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass RollingResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"funds\": null\r\n }\r\n \r\n this.state = {\r\n spinViewLoadding: false,\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n conditions: [],\r\n \r\n trade: 0,\r\n\r\n rowId: '',\r\n\r\n conditionDataSource: [],\r\n dataSource: [],\r\n\r\n modalTitle: '',\r\n modalBacktestId: '',\r\n modalBatchId: '',\r\n modalSymbolCode: '',\r\n modalSymbolName: '',\r\n modalStrategyName: '',\r\n modalStrategyType: '0',\r\n initCapital: 0,\r\n capital: 0,\r\n gridCnt: 0,\r\n modalVisible: false,\r\n\r\n basePosition: 0,\r\n share: 0,\r\n\r\n promptModalVisible: false,\r\n\r\n tradeType: 0,\r\n\r\n broker: window.webType === 'US' ? 'TD' : 'Quancept',\r\n accountType: '0',\r\n\r\n fileList: [],\r\n\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n\r\n emitter.addListener(\"callSendTradeError\", this.callSendTradeError);\r\n emitter.addListener(\"callDeployStrategy\", this.callDeployStrategy);\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('callSendTradeError', this.callSendTradeError);\r\n emitter.removeListener('callDeployStrategy', this.callDeployStrategy);\r\n }\r\n\r\n callSendTradeError = (status) => {\r\n let promptModalVisible = false;\r\n switch (status) {\r\n case 3:\r\n promptModalVisible = true;\r\n break;\r\n case 5:\r\n message.error(languageMessages['Authenticate tdameritrade account']);\r\n break;\r\n case 6:\r\n message.error(languageMessages['tdameritrade account authentication is about to expire']);\r\n break;\r\n default:\r\n message.error(languageMessages['deployStrategySubmitFail'] + ', Error:' + status);\r\n break;\r\n }\r\n\r\n this.setState({ spinLoadding: false, modalVisible: false, promptModalVisible });\r\n }\r\n\r\n callDeployStrategy = (status, deployStrategy) => {\r\n this.setState({ spinLoadding: false, modalVisible: false }, () => {\r\n if (status == 0) {\r\n if (deployStrategy.TradeType == 0) {\r\n //emitter.emit('callJump', 'realtime');\r\n //history.push(\"/re\");\r\n\r\n var content = <span>{languageMessages['checkLiveTradeStatus']} <a href=\"javascript:;\" onClick={this.jumpRealtime}>{languageMessages['checkLiveTradeStatusUrl']}</a></span>;\r\n this.timerModal(languageMessages['newRealTradeSucc'], content);\r\n } else {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n } else {\r\n message.error(languageMessages['deployStrategyFail'] + ', Error:' + status);\r\n }\r\n });\r\n }\r\n\r\n timerModal(title, content) {\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n /**\r\n var secondsToGo = 5;\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n */\r\n }\r\n\r\n jumpRealtime = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'realtime');\r\n history.push(\"/re\");\r\n }\r\n\r\n resizeChart() {\r\n var incomeChart = this.charts['funds'];\r\n \r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n }\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setRollingResult(statisticsResult, item) {\r\n var rowId = item;\r\n\r\n var modalBacktestId = statisticsResult[item].prd1OptParent;\r\n var modalBatchId = statisticsResult[item].prd1OptChild;\r\n var modalSymbolCode = statisticsResult[item].symbol;\r\n var modalStrategyName = statisticsResult[item].strategyName.replace('strategy', languageMessages['gridStrategy']);\r\n\r\n var modalStrategyType = statisticsResult[item].dayTradeOnly;\r\n\r\n var conditions = [{ 'id': 0, 'name': languageMessages['In-sample'] }, { 'id': 1, 'name': strReplace(languageMessages['Out-sample'], { '{num}': 1 }) }, { 'id': 2, 'name': strReplace(languageMessages['Out-sample'], { '{num}': 2 }) }];\r\n\r\n var rateOfReturn = statisticsResult[item].equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult[item].equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult[item].equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n\r\n var area1 = [{\r\n itemStyle: {\r\n color: '#f8f7f7'\r\n },\r\n name: languageMessages['In-sample'],\r\n label: {\r\n show: true,\r\n color: '#aaaaaa'\r\n },\r\n xAxis: statisticsResult[item].prd1EcFromDate\r\n }, {\r\n //xAxis: statisticsResult[item].prd1EcToDate\r\n xAxis: statisticsResult[item].prd2EcFromDate\r\n }];\r\n\r\n var area2 = [{\r\n itemStyle: {\r\n color: '#eeeeee'\r\n },\r\n name: strReplace(languageMessages['Out-sample'], { '{num}': 1 }),\r\n label: {\r\n show: true,\r\n color: '#999999'\r\n },\r\n xAxis: statisticsResult[item].prd2EcFromDate\r\n }, {\r\n //xAxis: statisticsResult[item].prd2EcToDate\r\n xAxis: statisticsResult[item].prd3EcFromDate\r\n }];\r\n\r\n var area3 = [{\r\n itemStyle: {\r\n color: '#f8f7f7'\r\n },\r\n name: strReplace(languageMessages['Out-sample'], { '{num}': 2 }),\r\n label: {\r\n show: true,\r\n color: '#aaaaaa'\r\n },\r\n xAxis: statisticsResult[item].prd3EcFromDate\r\n }, {\r\n xAxis: statisticsResult[item].prd3EcToDate\r\n }];\r\n\r\n incomes.markAreaData.push(area1);\r\n incomes.markAreaData.push(area2);\r\n incomes.markAreaData.push(area3);\r\n \r\n var dataSource = [];\r\n if (statisticsResult[item].trades.length > 0) {\r\n var trades = statisticsResult[item].trades[0];\r\n var symbol = statisticsResult[item].symbol;\r\n \r\n var sequence = 1;\r\n var index = 1;\r\n for (var ii in trades) {\r\n\r\n var pnl = parseFloat(trades[ii].pnl);\r\n var pnlPercent = parseFloat(trades[ii].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[ii].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[ii].quantity);\r\n var turnover = 0;\r\n if (trades[ii].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[ii].entryDatetime;\r\n strikePrice = trades[ii].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[ii].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[ii].exitDatetime;\r\n strikePrice = trades[ii].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n\r\n return { rowId, modalBacktestId, modalBatchId, modalSymbolCode, modalStrategyName, modalStrategyType, conditions, incomes, dataSource };\r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"funds\": null\r\n };\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n incomes.markAreaData = [];\r\n\r\n let modalBacktestId = '';\r\n let modalBatchId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '0';\r\n let modalStrategyName = '';\r\n\r\n var rowId = '';\r\n\r\n var trade = 0;\r\n var dataSource = [];\r\n\r\n var index = 1;\r\n var conditionDataSource = [];\r\n if (statisticsResult.length > 0) {\r\n for (var item in statisticsResult) {\r\n conditionDataSource.push({\r\n key: item,\r\n\r\n sequence: index,//statisticsResult[item]['prd1OptChild'],\r\n strategyName: statisticsResult[item]['strategyName'],\r\n backtestId: statisticsResult[item]['prd1OptParent'],\r\n batchId: statisticsResult[item]['prd1OptChild'],\r\n symbol: statisticsResult[item]['symbol'],\r\n initCapital: statisticsResult[item]['capital'],\r\n capital: statisticsResult[item]['capital'],\r\n gridCnt: statisticsResult[item]['gridCnt'],\r\n\r\n dayTradeOnly: statisticsResult[item]['dayTradeOnly'],\r\n\r\n prd1Date: statisticsResult[item]['prd1Date'],\r\n prd2Date: statisticsResult[item]['prd2Date'],\r\n prd3Date: statisticsResult[item]['prd3Date'],\r\n\r\n prd1Return: statisticsResult[item]['prd1Return'],\r\n prd2Return: statisticsResult[item]['prd2Return'],\r\n prd3Return: statisticsResult[item]['prd3Return'],\r\n totalReturn: statisticsResult[item]['totalReturn']\r\n });\r\n\r\n index++;\r\n }\r\n\r\n var items = this.setRollingResult(statisticsResult, 0);\r\n rowId = items.rowId;\r\n modalBacktestId = items.modalBacktestId;\r\n modalBatchId = items.modalBatchId;\r\n modalSymbolCode = items.modalSymbolCode;\r\n modalStrategyName = items.modalStrategyName;\r\n modalStrategyType = items.modalStrategyType;\r\n conditions = items.conditions;\r\n incomes = items.incomes;\r\n dataSource = items.dataSource;\r\n }\r\n \r\n this.setIncomeData(\"funds\", incomes);\r\n\r\n this.setState({ conditions, trade, rowId, conditionDataSource, dataSource, statisticsResult, modalBacktestId, modalBatchId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, statisticsResult, basePosition, share } = props;\r\n \r\n switch (status) {\r\n case 'get_base_position_success':\r\n this.setState({\r\n modalTitle: languageMessages['newRealTimeTrade'],\r\n modalVisible: true,\r\n basePosition,\r\n share,\r\n spinLoadding: false\r\n }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n\r\n break;\r\n case 'get_base_position_fail':\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_empty\" });\r\n });\r\n break;\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n onSelectConditionByTrades = e => {\r\n var { trade, rowId } = this.state;\r\n\r\n try {\r\n var tags = e.currentTarget.getAttribute('data-value');\r\n if (trade == tags) return;\r\n\r\n var nodes = e.target.parentNode.childNodes;\r\n for (var i = 0; i < nodes.length; i++) {\r\n var dd = nodes[i].getAttribute('data-value');\r\n if (tags !== dd) {\r\n if (nodes[i].classList.contains(\"checked\")) {\r\n nodes[i].classList.remove(\"checked\");\r\n }\r\n }\r\n }\r\n\r\n e.target.classList.add(\"checked\");\r\n trade = tags;\r\n\r\n var dataSource = [];\r\n\r\n var trades = this.props.statisticsResult[rowId]['trades'][trade];\r\n if (trades.length > 0) {\r\n var symbol = this.props.statisticsResult[rowId].symbol;\r\n var sequence = 1;\r\n var index = 1;\r\n for (var item in trades) {\r\n \r\n var pnl = parseFloat(trades[item].pnl);\r\n var pnlPercent = parseFloat(trades[item].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[item].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[item].quantity);\r\n var turnover = 0;\r\n if (trades[item].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[item].entryDatetime;\r\n strikePrice = trades[item].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n \r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[item].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[item].exitDatetime;\r\n strikePrice = trades[item].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n index++;\r\n sequence++;\r\n }\r\n }\r\n \r\n this.setState({ trade, dataSource });\r\n } catch (e) { }\r\n }\r\n\r\n renderModalContent() {\r\n if (this.state.tradeType == 0) {\r\n return this.renderModalRealTimeContent();\r\n }else {\r\n return this.renderModalSimulationContent();\r\n }\r\n }\r\n\r\n onRealTime = (record) => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Consistent return', 'RealTime', 'Consistent return']);\r\n\r\n this.setState({\r\n spinLoadding: true,\r\n tradeType: 0,\r\n initCapital: record.capital,\r\n capital: record.capital,\r\n gridCnt: record.gridCnt\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: 2, s: this.state.modalSymbolCode, g: record.gridCnt, c: 0 } });\r\n }\r\n });\r\n }\r\n\r\n onSimulation = (record) => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Consistent return', 'Simulation', 'Consistent return']);\r\n\r\n this.setState({\r\n modalTitle: languageMessages['newSimulationTrade'],\r\n modalVisible: true,\r\n tradeType: 1,\r\n initCapital: record.capital,\r\n capital: record.capital,\r\n gridCnt: record.gridCnt\r\n });\r\n }\r\n\r\n onSelAccountType = (e) => {\r\n this.setState({ accountType: e.target.value });\r\n }\r\n\r\n handleBrokerChange = (value) => {\r\n let broker = value.key;\r\n\r\n this.setState({ broker });\r\n }\r\n\r\n buildBindBroker = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_auth\", payload: { u: user.username } });\r\n }\r\n }\r\n\r\n handleChangeCapital = e => {\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: 2, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n handleBlurCapital = e => {\r\n e.preventDefault();\r\n\r\n var capital = e.target.value;\r\n\r\n this.setState({\r\n capital: capital\r\n }, () => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_base_position\", payload: { u: user.username, cg: 2, s: this.state.modalSymbolCode, g: this.state.gridCnt, c: capital == '' ? 0 : capital } });\r\n }\r\n });\r\n }\r\n\r\n renderModalRealTimeContent() {\r\n return window.webType === 'US' ? this.renderModalRealTimeContentForUs() : this.renderModalRealTimeContentForCn();\r\n }\r\n\r\n renderModalRealTimeContentForCn() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'Quancept', 'name': 'åŽé‘«è¯åˆ¸' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']}\r\n <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n renderModalRealTimeContentForUs() {\r\n const brokerItems = [];\r\n brokerItems.push({ 'id': 'TD', 'name': 'TdAmeritrade' }, { 'id': 'IB', 'name': 'IB' });\r\n\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['chooseBroker']}:</Col>\r\n <Col span={16}>\r\n <Select labelInValue size='small' value={{ key: this.state.broker }} style={{ width: '120px' }} onChange={this.handleBrokerChange} dropdownClassName=\"common-dropdownClassName\">\r\n {\r\n brokerItems.map(item => (\r\n <Option key={item.id}>{item.name}</Option>\r\n ))\r\n }\r\n </Select>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['accountType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>\r\n <div>\r\n <Radio.Group size='small' value={this.state.accountType} onChange={this.onSelAccountType} buttonStyle=\"solid\" style={{ marginBottom: '10px' }}>\r\n <Radio.Button value=\"0\">{languageMessages['cashAccount']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['financingAccount']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div>\r\n {languageMessages['buyingPowerRequried']} <span style={{ marginLeft: 10 }}>{this.state.initCapital}</span>\r\n </div>\r\n <div>\r\n {languageMessages['Buying power to allocate']}\r\n <span style={{ marginLeft: 10 }}>\r\n <Input type=\"text\" size='small' style={{ width: 120 }} value={this.state.capital} onChange={this.handleChangeCapital} onBlur={this.handleBlurCapital} placeholder='' data-value='capital' />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.accountType == '0' ? '' : 'none' }}>\r\n {languageMessages['minimumPositionRequired']} <span style={{ marginLeft: 10 }}>{this.state.basePosition}</span>\r\n </div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['requiredSteps']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}></Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={24}>\r\n <div style={{ display: this.state.broker == 'TD' ? '' : 'none' }}><Button size='small' onClick={this.buildBindBroker}>{languageMessages['login td account']}</Button></div>\r\n <div style={{ display: this.state.broker == 'IB' ? '' : 'none' }}>\r\n <div>{languageMessages['tradeLiveInfo01']}</div>\r\n <div>{languageMessages['tradeLiveInfo02']}</div>\r\n <div>\r\n <Upload name='file' action=\"#\"\r\n beforeUpload={this.beforeUpload}\r\n onChange={this.handleUploadChange}\r\n fileList={this.state.fileList}>\r\n <Button size='small'><Icon type=\"upload\" /> {languageMessages['downloadQuanceptAgent']} </Button>\r\n </Upload>\r\n </div>\r\n <div>{languageMessages['tradeLiveInfo03']}</div>\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n beforeUpload = (file) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleUploadChange = (info) => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let fileList = info.fileList;\r\n\r\n if (info.file.status !== undefined) {\r\n this.setState({ fileList });\r\n }\r\n\r\n if (info.file.status === 'done') {\r\n //\r\n } else if (info.file.status === 'error') {\r\n this.setState({ fileList: [] });\r\n }\r\n }\r\n }\r\n\r\n renderModalSimulationContent() {\r\n let newDate = moment().add(1, 'd');\r\n let fromDate = newDate.format('YYYY-MM-DD 09:30:00');\r\n let endDate = window.webType === 'US' ? newDate.add(2, 'w').format('YYYY-MM-DD 16:00:00') : newDate.add(2, 'w').format('YYYY-MM-DD 15:00:00');\r\n return <div>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['symbolCode']}:</Col>\r\n <Col span={16}>\r\n <div className=\"common-gutter-row\">{this.state.modalSymbolCode + ' ' + this.state.modalSymbolName}</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['tradingStraregy']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyName}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['strategyType']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{this.state.modalStrategyType === '0' ? languageMessages['crossDay'] : languageMessages['intraday']}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['startTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{fromDate}</Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"common-gutter-row\" span={6}>{languageMessages['endTime']}:</Col>\r\n <Col className=\"common-gutter-row\" span={16}>{endDate}</Col>\r\n </Row>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { tradeType, modalBacktestId, modalBatchId, modalSymbolCode, modalStrategyType, capital, broker } = this.state;\r\n\r\n if (tradeType == 0 && this.state.initCapital > capital) {\r\n message.info(languageMessages['Buying power to allocate tips']);\r\n } else {\r\n this.setState({ spinLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendTrade',\r\n userId: user.username,\r\n msg: {\r\n Type: 'deployStrategy',\r\n TradeType: tradeType,\r\n BacktestId: modalBacktestId,\r\n BatchId: modalBatchId,\r\n StrategyId: '0',\r\n SymbolCode: modalSymbolCode,\r\n Category: 9,\r\n Capital: capital,\r\n DayTradeOnly: modalStrategyType,\r\n ExecutionPlatform: broker,\r\n ReqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, spinLoadding: false });\r\n }\r\n\r\n handlePromptOk = e => {\r\n emitter.emit('callJump', 'simulated');\r\n history.push(\"/si\");\r\n }\r\n handlePromptCancel = e => {\r\n this.setState({ promptModalVisible: false });\r\n }\r\n\r\n OnSelectCondition = (record) => {\r\n return {\r\n onClick: () => {\r\n const { conditionDataSource, statisticsResult } = this.state;\r\n\r\n var tmpData = conditionDataSource.filter(function (e) { return e.key === record.key; });\r\n if (tmpData.length > 0) {\r\n var conditions = [];\r\n\r\n this.charts = {\r\n \"funds\": null\r\n };\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n incomes.markAreaData = [];\r\n\r\n let modalBacktestId = '';\r\n let modalBatchId = '';\r\n let modalSymbolCode = '';\r\n let modalSymbolName = '';\r\n let modalStrategyType = '0';\r\n let modalStrategyName = '';\r\n\r\n var rowId = '';\r\n\r\n var trade = 0;\r\n var dataSource = [];\r\n \r\n if (statisticsResult.length > record.key) {\r\n var items = this.setRollingResult(statisticsResult, record.key);\r\n rowId = items.rowId;\r\n modalBacktestId = items.modalBacktestId;\r\n modalBatchId = items.modalBatchId;\r\n modalSymbolCode = items.modalSymbolCode;\r\n modalStrategyName = items.modalStrategyName;\r\n modalStrategyType = items.modalStrategyType;\r\n conditions = items.conditions;\r\n incomes = items.incomes;\r\n dataSource = items.dataSource;\r\n\r\n /**\r\n if (statisticsResult[record.key].equityCurve.date.length > 0 || statisticsResult[record.key].trades[0].length > 0) {\r\n var items = this.setRollingResult(statisticsResult, record.key);\r\n rowId = items.rowId;\r\n modalBacktestId = items.modalBacktestId;\r\n modalBatchId = items.modalBatchId;\r\n modalSymbolCode = items.modalSymbolCode;\r\n modalStrategyName = items.modalStrategyName;\r\n conditions = items.conditions;\r\n incomes = items.incomes;\r\n dataSource = items.dataSource;\r\n\r\n\r\n } else {\r\n console.log(record);\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.setState({ spinViewLoadding: true, rowId: record.key }, () => {\r\n this.props.dispatch({ type: \"action_get_rolling_result\", payload: { u: user.username, b: record.backtestId, bc: record.batchId, s: record.symbol } });\r\n });\r\n }\r\n }\r\n */\r\n }\r\n\r\n this.setIncomeData(\"funds\", incomes);\r\n\r\n this.setState({ conditions, trade, rowId, dataSource, modalBacktestId, modalBatchId, modalStrategyName, modalSymbolCode, modalSymbolName, modalStrategyType });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowConditionClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n render() {\r\n var { conditions, trade, conditionDataSource, dataSource } = this.state;\r\n\r\n const conditionColumns = [\r\n {\r\n title: languageMessages['strategy id'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 80\r\n }, {\r\n title: languageMessages['Return'],\r\n children: [\r\n {\r\n title: languageMessages['In-sample'] + '(%)',\r\n dataIndex: 'prd1Return',\r\n align: 'right',\r\n sorter: (a, b) => a.prd1Return - b.prd1Return,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n },\r\n {\r\n title: strReplace(languageMessages['Out-sample'], { '{num}': 1 }) + '(%)',\r\n dataIndex: 'prd2Return',\r\n align: 'right',\r\n sorter: (a, b) => a.prd2Return - b.prd2Return,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n },\r\n {\r\n title: strReplace(languageMessages['Out-sample'], { '{num}': 2 }) + '(%)',\r\n dataIndex: 'prd3Return',\r\n align: 'right',\r\n sorter: (a, b) => a.prd3Return - b.prd3Return,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n },\r\n ]\r\n }, {\r\n title: languageMessages['annualizedRateOfReturn'] + '(%)',\r\n dataIndex: 'totalReturn',\r\n align: 'right',\r\n sorter: (a, b) => a.totalReturn - b.totalReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n }, {\r\n title: languageMessages['operation'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n align: 'center',\r\n width: 280,\r\n render: (text, record) => {\r\n return <span><Button size='small' style={{ marginLeft: 8 }} onClick={() => this.onRealTime(record)}>{languageMessages['goRealTime']}</Button>\r\n <Button size='small' style={{ marginLeft: 8 }} onClick={() => this.onSimulation(record)}>{languageMessages['goSimulation']}</Button></span>\r\n }\r\n }\r\n ];\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n var className = window.webType === 'US' ? 'common-tag common-tag-us' : 'common-tag';\r\n\r\n return (<Content>\r\n <Spin spinning={this.state.spinViewLoadding}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['incomeList']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={conditionColumns}\r\n dataSource={conditionDataSource}\r\n onRow={this.OnSelectCondition}\r\n rowClassName={this.setRowConditionClassName} pagination={conditionDataSource.length >= 10 ? { pageSize: 10 } : false} />\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n\r\n <div id=\"funds\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <div>\r\n {conditions.map((tag, index) => (\r\n <div key={index} className={trade == tag.id ? className + \" checked\" : className} onClick={this.onSelectConditionByTrades} data-value={tag.id}>{tag.name}</div>\r\n ))}\r\n </div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 40 ? { pageSize: 40 } : false} />\r\n </Spin>\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.spinLoadding}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n\r\n <Modal\r\n title={languageMessages['prompt']}\r\n visible={this.state.promptModalVisible}\r\n onOk={this.handlePromptOk}\r\n onCancel={this.handlePromptCancel}>\r\n <div dangerouslySetInnerHTML={{ __html: languageMessages['simulated trading limit'] }} />\r\n <p>{languageMessages['simulated trading limit prompt']}</p>\r\n </Modal>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { RollingResult as default }\r\n\r\n/**\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(BacktestResult);\r\nexport { page as default }\r\n */","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Select, AutoComplete, Button, Input, Form, Divider, Spin, Icon, Checkbox, Modal, Progress, Popover, message } from 'antd';\r\n\r\nimport RollingResult from './RollingResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Option } = Select;\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass RollingPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.rollingTimer = null;\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n\r\n symbolsItems: [],\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n\r\n lastTimes: 0,\r\n\r\n spinLoadding: true,\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n endOpen: false,\r\n\r\n IsStartBacktest: false,\r\n\r\n dayTradeOnly: window.webType === 'US' ? '1' : '0',\r\n\r\n filterError: '',\r\n\r\n backtestStatus: 0,\r\n \r\n statisticsResult: [],\r\n\r\n consuming: 0,\r\n percent: 0,\r\n\r\n visible: false,\r\n\r\n isHubConnection: 0\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendBacktestError\", this.callSendBacktestError);\r\n emitter.addListener(\"callRollingError\", this.callRollingError);\r\n emitter.addListener('callRollingLastTimes', this.callRollingLastTimes);\r\n emitter.addListener('callRollingStatus', this.callRollingStatus);\r\n emitter.addListener('callRollingResult', this.callRollingResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendBacktestError', this.callSendBacktestError);\r\n emitter.removeListener('callRollingError', this.callRollingError);\r\n emitter.removeListener('callRollingLastTimes', this.callRollingLastTimes);\r\n emitter.removeListener('callRollingStatus', this.callRollingStatus);\r\n emitter.removeListener('callRollingResult', this.callRollingResult);\r\n }\r\n\r\n callSendBacktestError = () => {\r\n this.setState({ spinLoadding: false });\r\n }\r\n\r\n callRollingError = (status) => {\r\n var error = status !== undefined ? strReplace(languageMessages['queryFail'], { '{num}': status }) : '';\r\n this.setState({ spinLoadding: false, filterError: error });\r\n }\r\n\r\n callRollingLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n \r\n this.setState({ lastTimes, backtestStatus: 1, spinLoadding: false });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n if (value > 0) {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n }\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n callRollingStatus = (backtestStatus) => {\r\n backtestStatus = JSON.parse(backtestStatus || '{}');\r\n\r\n var consuming = parseInt(backtestStatus['consuming']);\r\n var percent = parseInt(backtestStatus['percent']);\r\n var backtestStatus = percent > 0 ? 2 : 1;\r\n \r\n this.setState({ backtestStatus, consuming, percent, spinLoadding: false });\r\n }\r\n\r\n callRollingResult = (backtestResult, backtest) => {\r\n backtestResult = JSON.parse(backtestResult || '[]');\r\n \r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n\r\n /**\r\n let { consuming, percent } = this.state;\r\n if (consuming == 0 && percent == 0) {\r\n if (backtestResult.length > 0) {\r\n this.setProgress(backtestResult, backtest);\r\n } else {\r\n var statisticsResult = [];\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n } else {\r\n var statisticsResult = [];\r\n if (backtestResult.length > 0) {\r\n statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n }\r\n\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n }\r\n */\r\n }\r\n\r\n setProgress(backtestResult, backtest) {\r\n var total = Math.ceil(Math.random() * (45 - 30 + 1) + 30);\r\n var step = Math.ceil(Math.random() * (8 - 5 + 1) + 5);\r\n\r\n var stepKey = Math.ceil((total - 5) / step);\r\n var setepValue = Math.ceil(100 / step);\r\n\r\n var tmpStepKey = stepKey;\r\n var tmpSetepValue = setepValue;\r\n\r\n var percentMap = { 1: 5 };\r\n \r\n stepKey += 1;\r\n setepValue += 5;\r\n percentMap[stepKey] = setepValue;\r\n for (var ii = 0; ii < step; ii++) {\r\n var stepKey1 = stepKey + tmpStepKey;\r\n\r\n stepKey += 1;\r\n stepKey = Math.ceil(Math.random() * (stepKey1 - stepKey + 1) + stepKey);\r\n\r\n var setepValue1 = setepValue + tmpSetepValue;\r\n\r\n setepValue += 1;\r\n setepValue = Math.ceil(Math.random() * (setepValue1 - setepValue + 1) + setepValue);\r\n\r\n if (ii + 1 >= step && setepValue < 98) {\r\n setepValue = Math.ceil(Math.random() * (98 - setepValue + 1) + setepValue);\r\n }\r\n percentMap[stepKey] = setepValue;\r\n }\r\n\r\n var consuming = 0;\r\n var percent = 0;\r\n this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest);\r\n }\r\n\r\n setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest) {\r\n if (this.state.backtestStatus === 0) return;\r\n\r\n consuming += 1;\r\n if (consuming >= total) {\r\n var statisticsResult = this.setBacktestResult(backtestResult, backtest);\r\n this.setState({ backtestStatus: 3, statisticsResult, spinLoadding: false, percent: 100 });\r\n } else {\r\n if (percentMap.hasOwnProperty(consuming)) percent = percentMap[consuming];\r\n\r\n var _this = this;\r\n this.setState({ backtestStatus: 2, consuming, percent, spinLoadding: false }, () => {\r\n setTimeout(function () { _this.setProgressStatus(total, consuming, percent, percentMap, backtestResult, backtest); }, 1000);\r\n });\r\n }\r\n }\r\n\r\n setBacktestResult(backtestResult, backtest) {\r\n var statisticsResult = [];\r\n \r\n for (var item in backtestResult) {\r\n statisticsResult.push({\r\n prd1OptParent: backtestResult[item]['prd1OptParent'],\r\n prd1OptChild: backtestResult[item]['prd1OptChild'],\r\n\r\n symbol: backtest.SymbolCode,\r\n strategyName: backtest.GridStrategys[item].StrategyName,\r\n capital: backtest.GridStrategys[item].Capital,\r\n gridCnt: backtest.GridStrategys[item].GridCnt,\r\n\r\n dayTradeOnly: backtest.GridStrategys[item].DayTradeOnly,\r\n\r\n //prd3BacktestId: backtestResult[item]['prd3BacktestId'],\r\n\r\n //holdPeriod: backtestResult[item]['holdPeriod'],\r\n \r\n prd1Return: backtestResult[item]['prd1Return'],\r\n prd2Return: backtestResult[item]['prd2Return'],\r\n prd3Return: backtestResult[item]['prd3Return'],\r\n totalReturn: backtestResult[item]['totalReturn'],\r\n\r\n //targetDistance: backtestResult[item]['targetDistance'],\r\n //stopDistance: backtestResult[item]['stopDistance'],\r\n\r\n prd1EcFromDate: backtestResult[item]['prd1EcFromDate'],\r\n prd1EcToDate: backtestResult[item]['prd1EcToDate'],\r\n prd2EcFromDate: backtestResult[item]['prd2EcFromDate'],\r\n prd2EcToDate: backtestResult[item]['prd2EcToDate'],\r\n prd3EcFromDate: backtestResult[item]['prd3EcFromDate'],\r\n prd3EcToDate: backtestResult[item]['prd3EcToDate'],\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n\r\n trades: [backtestResult[item]['trades'], backtestResult[item]['prd2Trades'], backtestResult[item]['prd3Trades']]\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_rolling_grid\", payload: { u: userId } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'rr':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, permission, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_rolling_grid_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n if (symbolItems === undefined || symbolItems.length == 0) {\r\n symbolItems = [];\r\n }\r\n\r\n this.setState({ symbolsItems: symbolItems, spinLoadding: false });\r\n break;\r\n case 'get_rolling_grid_fail':\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_rolling_symbols_success':\r\n let keywords = this.state.keywords;\r\n\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n let visible = false;\r\n if (keywords !== '') {\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.symbol.toLowerCase() === keywords.toLowerCase(); });\r\n visible = tmpDataCode.length > 0 ? false : true;\r\n }\r\n\r\n this.setState({ symbolItems, visible });\r\n } else {\r\n if (keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + keywords.toUpperCase() + '\"' + languageMessages['No strategy available'], symbolName: '' }], filterError: '', visible: true });\r\n } else {\r\n this.setState({\r\n filterError: '',\r\n symbolItems: [],\r\n visible: false\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n this.setState({ spinLoadding: false });\r\n break;\r\n }\r\n }\r\n\r\n handleMyBacktest = e => {\r\n e.preventDefault();\r\n\r\n history.push(\"/mbg\");\r\n };\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({ keywords: symbolCode, symbolCode, IsStartBacktest, filterError: '' });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['No strategy available']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ keywords: value, symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest, filterError: '', visible: false }, () => {\r\n //this.setBaseInfo();\r\n /**\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_tick\", payload: { UserId: user.username, SymbolList: symbolCode } });\r\n }\r\n */\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n let keywords = this.state.keywords;\r\n\r\n var symbolItems = this.state.symbolsItems;\r\n if (keywords !== null && keywords !== undefined && keywords !== '')\r\n symbolItems = symbolItems.filter(function (e) { return e.symbol.toLowerCase().indexOf(keywords.toLowerCase()) > -1 });\r\n\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n let visible = false;\r\n if (keywords !== '') {\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.symbol.toLowerCase() === keywords.toLowerCase(); });\r\n visible = tmpDataCode.length > 0 ? false : true;\r\n }\r\n\r\n this.setState({ symbolItems, visible });\r\n } else {\r\n if (keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + keywords.toUpperCase() + '\"' + languageMessages['No strategy available'], symbolName: '' }], filterError: '', visible: true });\r\n } else {\r\n this.setState({\r\n filterError: '',\r\n symbolItems: [],\r\n visible: false\r\n });\r\n }\r\n }\r\n\r\n /**\r\n this.setState({ keywords: value, filterError: '' }, () => {\r\n this.props.dispatch({ type: \"action_get_rolling_symbols\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n */\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n var latestPrice = parseFloat(tmpDataCode[0].close).toFixed(2);\r\n var quoteChange = parseFloat(tmpDataCode[0].chg).toFixed(2);\r\n\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', symbolCode);\r\n\r\n this.setState({ keywords: value, symbolCode, symbolName, latestPrice, quoteChange, IsStartBacktest });\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n keywords: '',\r\n visible: false,\r\n IsStartBacktest\r\n });\r\n }\r\n } else {\r\n var IsStartBacktest = this.checkIsStartBacktest('symbolCode', '');\r\n\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: '',\r\n latestPrice: 0,\r\n quoteChange: 0,\r\n filterError: '',\r\n keywords: '',\r\n visible: false,\r\n IsStartBacktest\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n var keywords = value;\r\n\r\n var symbolItems = this.state.symbolsItems.filter(function (e) { return e.symbol.toLowerCase().indexOf(keywords.toLowerCase()) > -1 });\r\n\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n let visible = false;\r\n if (keywords !== '') {\r\n var tmpDataCode = symbolItems.filter(function (e) { return e.symbol.toLowerCase() === keywords.toLowerCase(); });\r\n visible = tmpDataCode.length > 0 ? false : true;\r\n }\r\n\r\n this.setState({ keywords, symbolItems, visible });\r\n } else {\r\n if (keywords !== '') {\r\n this.setState({ keywords, symbolItems: [{ symbol: '\"' + keywords.toUpperCase() + '\"' + languageMessages['No strategy available'], symbolName: '' }], filterError: '', visible: true });\r\n } else {\r\n this.setState({\r\n keywords, \r\n filterError: '',\r\n symbolItems: [],\r\n visible: false\r\n });\r\n }\r\n }\r\n \r\n /**\r\n var _this = this;\r\n this.setState({ keywords: value, filterError: '', visible: false }, () => {\r\n \r\n if (_this.rollingTimer) {\r\n clearTimeout(_this.rollingTimer);\r\n _this.rollingTimer = null;\r\n }\r\n \r\n _this.rollingTimer = setTimeout(function () {\r\n _this.props.dispatch({ type: \"action_get_rolling_symbols\", payload: { UserId: _this.user.username, keywords: value } });\r\n }, 500);\r\n });\r\n */\r\n };\r\n\r\n handleChangeDayTradeOnly = e => {\r\n var dayTradeOnly = e.target.checked;\r\n\r\n this.setState({ dayTradeOnly });\r\n }\r\n\r\n checkIsStartBacktest(type, value) {\r\n var IsStartBacktest = false;\r\n let { symbolCode } = this.state;\r\n\r\n switch (type) {\r\n case 'symbolCode':\r\n symbolCode = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (symbolCode != '') {\r\n IsStartBacktest = true;\r\n }\r\n\r\n return IsStartBacktest;\r\n }\r\n\r\n onStartBacktest = () => {\r\n if (this.user.username === undefined) {\r\n this.setState({\r\n filterError: '',\r\n spinLoadding: false,\r\n }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n let { symbolCode, symbolName, lastTimes, latestPrice, dayTradeOnly } = this.state;\r\n\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['todayQueryNumberRunOut']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Consistent return', 'Backtest', 'Consistent return']);\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n consuming: 0,\r\n percent: 0,\r\n spinLoadding: true,\r\n filterError: ''\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendBacktest', userId: this.user.username,\r\n msg: {\r\n Type: 'rollingBacktest',\r\n SymbolCode: symbolCode,\r\n SymbolName: symbolName,\r\n DayTradeOnly: dayTradeOnly,// ? '1' : '0',\r\n Last: latestPrice,\r\n reqId: guid()\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n importBacktestResult = () => {\r\n //console.log('import');\r\n }\r\n\r\n back = () => {\r\n return (<div>\r\n <span style={{ margin: '0 10px' }}>{strReplace(languageMessages['queryingConsuming'], { '{num}': this.state.consuming })}</span>\r\n <span style={{ display: 'inline-block', width: '300px', margin: '0 10px' }}><Progress strokeColor={{ '0%': '#108ee9', '100%': '#87d068', }} percent={this.state.percent} /></span>\r\n </div>)\r\n }\r\n\r\n render() {\r\n var { symbolItems, symbolCode, percent, visible, keywords } = this.state;\r\n\r\n if (symbolCode.search(languageMessages['No strategy available']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['No strategy available'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['rollingStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['Basic Information']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['symbolCode']} style={{ marginBottom: 0, marginRight: 32 }}>\r\n <Popover\r\n placement=\"topLeft\"\r\n content={(<span style={{ padding: '16px' }}>{strReplace(languageMessages['No strategy available for aymbol'], { '{symbol}': keywords.toUpperCase() })}</span>)}\r\n trigger=\"\"\r\n visible={visible}>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </Popover>\r\n <div style={{ position: 'relative', top: '-5px', height: '20px', lineHeight: '20px', fontSize: '10px' }}>\r\n {languageMessages['latest']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : 'rgba(0, 0, 0, 0.85)', marginRight: '10px' }}>{this.state.latestPrice}</span>\r\n {languageMessages['quote.change']}:<span style={{ color: this.state.quoteChange === 0 ? 'rgba(0, 0, 0, 0.25)' : this.state.quoteChange >= 0 ? window.webType === 'US' ? 'green' : 'red' : window.webType === 'US' ? 'red' : 'green' }}>{this.state.quoteChange}%</span>\r\n </div>\r\n </Form.Item>\r\n <Form.Item>\r\n <Button size='small' loading={false} disabled={!this.state.IsStartBacktest} onClick={this.onStartBacktest}>\r\n {languageMessages['getRollingStrategy']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} lineHeight={14} />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{languageMessages['query prompt']}</span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{this.state.statisticsResult.length > 0 ? languageMessages['queryingCompletedConsuming'] : languageMessages['No strategy found for this security']}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<RollingResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(RollingPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, AutoComplete, Button, Input, List, Divider, Spin, Icon, DatePicker, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport RollingResult from './RollingResult';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Sider, Content } = Layout;\r\nconst Option = Select.Option;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst selRateOfReturn = [\r\n { 'id': '0', 'name': languageMessages['all'] },\r\n { 'id': '1', 'name': '0~10%' },\r\n { 'id': '2', 'name': '11%~20%' },\r\n { 'id': '3', 'name': '21%~30%' },\r\n { 'id': '4', 'name': '31%~40%' },\r\n { 'id': '5', 'name': '41%~50%' },\r\n { 'id': '6', 'name': strReplace(languageMessages['theAbove'], { '{num}': '50%' }) },\r\n { 'id': '7', 'name': '-10%~0' },\r\n { 'id': '8', 'name': '-20%~-11%' },\r\n { 'id': '9', 'name': '-30%~-21%' },\r\n { 'id': '10', 'name': '-40%~-31%' },\r\n { 'id': '11', 'name': '-50%~-41%' },\r\n { 'id': '12', 'name': strReplace(languageMessages['theFollowing'], { '{num}': '-50%' }) }\r\n];\r\n\r\nvar format = 'YYYY-MM-DD HH:mm:ss';\r\nclass MyRollingPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n keywords: '',\r\n symbolItems: [],\r\n\r\n symbolCode: '',\r\n symbolName: '',\r\n\r\n strategyData: [],\r\n\r\n maxRateOfReturn: '0',\r\n backtestDate: '',//moment().format(format),\r\n\r\n currSelStock: '',\r\n \r\n dataSource: [],\r\n\r\n rowId: -1,\r\n\r\n rollingResult: {},\r\n statisticsResult: [],\r\n\r\n singleStockBacktestResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n var { symbolCode, backtestDate, maxRateOfReturn } = this.state;\r\n\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_rolling_items\", payload: { u: userId, s: symbolCode, d: backtestDate } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setStatisticsResult(backtestResult, symbol) {\r\n var statisticsResult = [];\r\n \r\n for (var item in backtestResult) {\r\n statisticsResult.push({\r\n prd1OptParent: backtestResult[item]['prd1OptParent'],\r\n prd1OptChild: backtestResult[item]['prd1OptChild'],\r\n\r\n symbol: symbol,\r\n strategyName: backtestResult[item].strategyName,\r\n capital: backtestResult[item].capital,\r\n gridCnt: backtestResult[item].gridCnt,\r\n\r\n dayTradeOnly: backtestResult[item].dayTradeOnly,\r\n\r\n //prd3BacktestId: backtestResult[item]['prd3BacktestId'],\r\n\r\n //holdPeriod: backtestResult[item]['holdPeriod'],\r\n\r\n prd1Return: backtestResult[item]['prd1Return'],\r\n prd2Return: backtestResult[item]['prd2Return'],\r\n prd3Return: backtestResult[item]['prd3Return'],\r\n totalReturn: backtestResult[item]['totalReturn'],\r\n\r\n //targetDistance: backtestResult[item]['targetDistance'],\r\n //stopDistance: backtestResult[item]['stopDistance'],\r\n\r\n prd1EcFromDate: backtestResult[item]['prd1EcFromDate'],\r\n prd1EcToDate: backtestResult[item]['prd1EcToDate'],\r\n prd2EcFromDate: backtestResult[item]['prd2EcFromDate'],\r\n prd2EcToDate: backtestResult[item]['prd2EcToDate'],\r\n prd3EcFromDate: backtestResult[item]['prd3EcFromDate'],\r\n prd3EcToDate: backtestResult[item]['prd3EcToDate'],\r\n\r\n equityCurve: backtestResult[item]['equityCurve'],\r\n\r\n trades: [backtestResult[item]['trades'], backtestResult[item]['prd2Trades'], backtestResult[item]['prd3Trades']]\r\n });\r\n }\r\n\r\n return statisticsResult;\r\n }\r\n\r\n setBacktestResult(tmpDataSource) {\r\n var rowId = -1;\r\n var statisticsResult = [];\r\n var dataSource = [];\r\n if (tmpDataSource.length > 0) {\r\n for (var item in tmpDataSource) {\r\n if (rowId === -1) {\r\n rowId = tmpDataSource[item].i;\r\n\r\n if (tmpDataSource[item].rs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpDataSource[item].rs, tmpDataSource[item].s);\r\n }\r\n }\r\n\r\n var sequence = parseInt(item) + 1;\r\n\r\n //var oMaxRateOfReturn = this.keepDecimals(tmpDataSource[item].omr, '');\r\n var maxRateOfReturn = this.keepDecimals(tmpDataSource[item].mr, '');\r\n\r\n dataSource.push({\r\n key: tmpDataSource[item].i,\r\n sequence: sequence,\r\n symbolCode: tmpDataSource[item].s,\r\n created: tmpDataSource[item].c,\r\n //oMaxRateOfReturn: oMaxRateOfReturn,\r\n maxRateOfReturn: maxRateOfReturn,\r\n //strategyPeriod: tmpDataSource[item].sp,\r\n backtestInterval: tmpDataSource[item].bi,\r\n //strategyNumber: tmpDataSource[item].sn,\r\n dayTradeOnly: tmpDataSource[item].d,\r\n status: tmpDataSource[item].status\r\n });\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, symbolItems, rollingResult, symbols, uri, state } = props;\r\n\r\n switch (status) {\r\n case 'get_symbol_items_success':\r\n if (symbolItems !== undefined && symbolItems.length > 0) {\r\n this.setState({ symbolItems });\r\n } else {\r\n if (this.state.keywords !== '') {\r\n this.setState({ symbolItems: [{ symbol: '\"' + this.state.keywords + '\"' + languageMessages['no.matches.found'], symbolName: '' }] });\r\n } else {\r\n this.setState({\r\n symbolItems: []\r\n });\r\n }\r\n }\r\n break;\r\n case 'get_rolling_items_success':\r\n var currSelStock = '';\r\n var strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n if (rollingResult.hasOwnProperty(currSelStock)) {\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n } else {\r\n currSelStock = '';\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = rollingResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, rollingResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_rolling_items_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_rolling_symbol_success':\r\n var currSelStock = this.state.currSelStock;\r\n var tmpBacktestResult = this.state.rollingResult;\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = rollingResult[currSelStock];\r\n tmpBacktestResult[currSelStock] = singleStockBacktestResult;\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ rollingResult: tmpBacktestResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult });\r\n break;\r\n case 'get_rolling_symbol_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_remove_rolling_success':\r\n var currSelStock = this.state.currSelStock;\r\n var strategyData = this.state.strategyData;\r\n var tmpSymbols = symbols.filter(function (s) { return currSelStock == s.sc });\r\n if (tmpSymbols.length === 0) {\r\n currSelStock = '';\r\n strategyData = [];\r\n for (var item in symbols) {\r\n if (currSelStock === '') currSelStock = symbols[item].sc;\r\n\r\n strategyData.push({\r\n 'id': symbols[item].i, 'stockCode': symbols[item].sc, 'stockName': symbols[item].sn\r\n });\r\n }\r\n }\r\n\r\n var singleStockBacktestResult = [];\r\n if (currSelStock !== '') {\r\n singleStockBacktestResult = rollingResult[currSelStock];\r\n }\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ strategyData, currSelStock, rollingResult, singleStockBacktestResult, spinLoadding: false, dataSource, rowId, statisticsResult, selectedRowKeys: [] });\r\n\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'get_remove_rolling_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_auth_success':\r\n const w = window.open('about:blank');\r\n w.location.href = uri;\r\n\r\n break;\r\n case 'get_auth_failed':\r\n if (state == 3) message.info(languageMessages['Authentication is normal']);\r\n else message.info(languageMessages['Failed to get auth url']);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onChangeSymbol = (symbolCode) => {\r\n this.setState({ symbolCode });\r\n }\r\n\r\n // é€‰æ‹©æ ‡çš„\r\n onSelectSymbol = value => {\r\n if (value !== '') {\r\n if (value.search(languageMessages['no.matches.found']) === -1) {\r\n //languageMessages['no.matches.found']\r\n\r\n //var symbolItems = JSON.parse(sessionStorage.getItem(\"SymbolItemsCache\") || '[]') || [];\r\n //var tmpDataCode = symbolItems.filter(function (e) { return e.stockCode.toLowerCase() === value.toLowerCase(); });\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n\r\n if (tmpDataCode.length > 0) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n }\r\n }\r\n }\r\n }\r\n\r\n onFocusSymbol = () => {\r\n // defaylt symbol items\r\n }\r\n\r\n onBlurSymbol = value => {\r\n if (value !== '') {\r\n var tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.toLowerCase() === value.toLowerCase(); });\r\n if (tmpDataCode.length === 0) {\r\n tmpDataCode = this.state.symbolItems.filter(function (e) { return e.symbol.substring(2, e.symbol.length) === value; });\r\n }\r\n\r\n if (tmpDataCode.length === 1) {\r\n var symbolCode = tmpDataCode[0].symbol;\r\n var symbolName = tmpDataCode[0].symbolName;\r\n\r\n this.setState({ symbolCode, symbolName });\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n symbolItems: [],\r\n symbolCode: '',\r\n symbolName: ''\r\n });\r\n }\r\n }\r\n\r\n // åŒ¹é…æ ‡çš„\r\n handleSearch = value => {\r\n this.setState({ keywords: value }, () => {\r\n this.props.dispatch({ type: \"action_get_symbol_items\", payload: { UserId: this.user.username, keywords: value } });\r\n });\r\n };\r\n\r\n disabledBacktestDate = current => {\r\n return current && current > moment().endOf('day');\r\n }\r\n\r\n onChangeBacktestDate = backtestDate => {\r\n if (backtestDate == null) {\r\n backtestDate = '';\r\n } else {\r\n backtestDate = moment(backtestDate).format(format);\r\n }\r\n\r\n this.setState({ backtestDate });\r\n }\r\n\r\n handleIncomesChange = value => {\r\n this.setState({ maxRateOfReturn: value.key });\r\n }\r\n\r\n handleSelStock = symbol => {\r\n if (symbol !== '') {\r\n var { rollingResult, currSelStock, symbolCode, backtestDate } = this.state;\r\n\r\n if (symbolCode == symbol) return;\r\n if (currSelStock == symbol) return;\r\n\r\n if (rollingResult.hasOwnProperty(symbol)) {\r\n var singleStockBacktestResult = rollingResult[symbol];\r\n\r\n var { dataSource, rowId, statisticsResult } = this.setBacktestResult(singleStockBacktestResult);\r\n this.setState({ currSelStock: symbol, singleStockBacktestResult, dataSource, rowId, statisticsResult });\r\n } else {\r\n this.setState({ currSelStock: symbol, spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_rolling_symbol\", payload: { u: userId, s: symbol, d: backtestDate } });\r\n });\r\n }\r\n }\r\n }\r\n\r\n clearFilter = () => {\r\n this.setState({ symbolCode: '', symbolName: '', backtestDate: '', maxRateOfReturn: '0', spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_rolling_items\", payload: { u: userId, s: '', d: '' } });\r\n });\r\n }\r\n\r\n handleSearchStockBacktest = () => {\r\n var { symbolCode, backtestDate } = this.state;\r\n\r\n this.setState({ spinLoadding: true }, () => {\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_rolling_items\", payload: { u: userId, s: symbolCode, d: backtestDate } });\r\n });\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys, currSelStock, symbolCode, backtestDate } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var backtestIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.batchbacktest'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_rolling\", payload: { u: _this.user.username, s: currSelStock, sc: symbolCode, b: backtestDate, bs: backtestIds } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { singleStockBacktestResult, selectedRowKeys } = this.state;\r\n\r\n var tmpData = singleStockBacktestResult.filter(function (e) { return e.i === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = [];\r\n if (tmpData[0].rs != null) {\r\n statisticsResult = this.setStatisticsResult(tmpData[0].rs, record.symbolCode);\r\n }\r\n \r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n renderStockBacktest(strategyData) {\r\n if (strategyData.length > 0) {\r\n return <List size={\"small\"}\r\n dataSource={this.state.strategyData}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelStock(item.stockCode)} className={this.state.currSelStock == item.stockCode ? 'checked' : ''}>\r\n <List.Item.Meta\r\n title={(<span style={{ fontWeight: '100' }}>{item.stockName}</span>)}\r\n description={(<b>{item.stockCode}</b>)}\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(100, 100, 100, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { strategyData, symbolItems, symbolCode, dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolCode',\r\n width: 90,\r\n //sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['query time'],\r\n dataIndex: 'created',\r\n width: 135,\r\n //sorter: (a, b) => a.created - b.created,\r\n //sortDirections: ['descend', 'ascend']\r\n },\r\n /**\r\n {\r\n title: languageMessages['Original max annualized income'] + '(%)',\r\n dataIndex: 'oMaxRateOfReturn',\r\n width: 140,\r\n align: 'center',\r\n sorter: (a, b) => a.oMaxRateOfReturn - b.oMaxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['oMaxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n {\r\n title: languageMessages['annualizedRateOfReturn'] + '(%)',\r\n dataIndex: 'maxRateOfReturn',\r\n width: 150,\r\n align: 'center',\r\n sorter: (a, b) => a.maxRateOfReturn - b.maxRateOfReturn,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['maxRateOfReturn'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n },\r\n {\r\n title: languageMessages['strategyPeriod'],\r\n dataIndex: 'strategyPeriod',\r\n width: 90,\r\n sorter: (a, b) => a.strategyPeriod - b.strategyPeriod,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n */\r\n {\r\n title: languageMessages['query interval'],\r\n dataIndex: 'backtestInterval',\r\n width: 155,\r\n }, {\r\n title: languageMessages['Overnight position'],\r\n dataIndex: 'dayTradeOnly',\r\n width: 100,\r\n sorter: (a, b) => a.dayTradeOnly - b.dayTradeOnly,\r\n sortDirections: ['descend', 'ascend'],\r\n render: dayTradeOnly => {\r\n return dayTradeOnly == '0' ? languageMessages['Cross Days'] : languageMessages['within days']\r\n }\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend'],\r\n render: status => (\r\n <span>\r\n {status == 4 ? languageMessages['complete'] : status == 5 || status == 6 ? languageMessages['error'] : languageMessages['Researching']}\r\n </span>\r\n )\r\n }\r\n ];\r\n\r\n if (symbolCode.search(languageMessages['no.matches.found']) !== -1) {\r\n symbolCode = symbolCode.replace(languageMessages['no.matches.found'], '');\r\n symbolCode = symbolCode.substring(1, symbolCode.length - 1);\r\n }\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['myExcavate'] + ' » ' + languageMessages['rollingStrategy']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['filter']}</div>\r\n <div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['symbolCode']}</label>\r\n <AutoComplete value={symbolCode}\r\n className=\"certain-category-search\"\r\n dropdownClassName=\"certain-category-search-dropdown\"\r\n dropdownMatchSelectWidth={false}\r\n dropdownStyle={{ width: 200 }}\r\n size=\"small\"\r\n style={{ width: '200px' }}\r\n dataSource={symbolItems.map(group => (\r\n <Option key={group.symbol} value={group.symbol}>\r\n {group.symbol}\r\n <span className=\"certain-search-item-count\">{group.symbolName}</span>\r\n </Option>\r\n ))}\r\n onChange={this.onChangeSymbol}\r\n onSearch={this.handleSearch}\r\n onSelect={this.onSelectSymbol}\r\n onFocus={this.onFocusSymbol}\r\n onBlur={this.onBlurSymbol}\r\n placeholder={languageMessages['pleaseEnterSymbolCode']}\r\n optionLabelProp=\"value\">\r\n <Input suffix={<Icon type=\"search\" className=\"certain-category-icon\" />} />\r\n </AutoComplete>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['queryTime']}</label>\r\n <DatePicker size=\"small\"\r\n format={format} allowClear={false}\r\n showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}\r\n disabledDate={this.disabledBacktestDate}\r\n placeholder={'0000-00-00 00:00:00'}\r\n value={this.state.backtestDate == '' ? null : moment(this.state.backtestDate)}\r\n //defaultValue={moment(this.state.backtestDate)}\r\n style={{ width: '150px' }}\r\n onChange={this.onChangeBacktestDate}\r\n />\r\n </div>\r\n \r\n <div style={{ float: 'right' }}>\r\n <Button onClick={this.handleSearchStockBacktest}>{languageMessages['check']}</Button>\r\n <Button style={{ marginLeft: '10px' }} onClick={this.clearFilter}>{languageMessages['clearFilter']}</Button>\r\n </div>\r\n </div>\r\n\r\n <Layout className='backtest-content'>\r\n <Sider width={280}>\r\n <div className='common-sider-header'>{languageMessages['symbolName&Code']}</div>\r\n <Divider />\r\n {this.renderStockBacktest(strategyData)}\r\n </Sider>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {this.state.statisticsResult.length == 0 || (<RollingResult dispatch={this.props.dispatch} status={this.props.status} basePosition={this.props.basePosition} share={this.props.share} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.backtest;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyRollingPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { Layout, Spin } from 'antd';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass TdAmeritradePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n status: false,\r\n info: '',\r\n spinLoadding: true,\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n let username = localStorage.getItem(\"local_user\");\r\n const result = new URLSearchParams(window.location.search);\r\n const code = result.get('code');\r\n if (username != null && code != null && code !== undefined) {\r\n this.props.dispatch({ type: \"action_get_code\", payload: { u: username, c: code } });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status } = props;\r\n\r\n switch (status) {\r\n case 'get_code_success':\r\n this.setState({ status: true, spinLoadding: false, info: 'TD Ameritrade account verification succeeded.' });\r\n break;\r\n case 'get_code_failed':\r\n this.setState({ status: false, spinLoadding: false, info: 'TD Ameritrade account verification failed.' });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div style={{ padding: '50px', margin: '50px', textAlign: 'center', color: this.state.status ? 'green' : 'red', fontSize: 20 }}>\r\n {this.state.info}\r\n </div>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.tdAmeritradePage;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(TdAmeritradePage);\r\n\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Radio, Select, Divider, Alert, Icon } from 'antd';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nconst MaxTagTextLength = 5;\r\nconst SelectWidth = 130;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass SymbolGroupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.stockData = [];\r\n this.conceptData = [];\r\n this.srcData = [];\r\n this.indexData = [];\r\n\r\n this.customGroupsData = [];\r\n\r\n this.state = {\r\n isRefresh: false,\r\n stockPoolKey: 'STOCK',\r\n\r\n stockCount: 0,\r\n\r\n stock: '3180',\r\n concept: ['2'],\r\n src: ['5'],\r\n index: ['7'],\r\n\r\n st: '1',\r\n\r\n generalIndex: '8001,8002,8003,8004,8005',\r\n\r\n fund: '4006',\r\n\r\n customGroups: '-',\r\n\r\n maxTagPlaceholder: '...',\r\n\r\n isSymbolGroup: true,\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n var { isRefresh, stock, concept, src, index, st, generalIndex, fund, customGroups } = this.state;\r\n if (!isRefresh) {\r\n var { defaultSymbolGroups } = this.props;\r\n var sectors = defaultSymbolGroups.sectors;\r\n if (sectors !== undefined && sectors !== null) {\r\n //概念\r\n this.conceptData = [];\r\n this.conceptData.push(<Option key='2'>{languageMessages['select.all']}</Option>);\r\n if (sectors[2] !== undefined) {\r\n for (let key in sectors[2].items) {\r\n var subGroupName = sectors[2].items[key].cn;\r\n\r\n this.conceptData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n //è¯ç›‘会\r\n this.srcData = [];\r\n this.srcData.push(<Option key='5'>{languageMessages['select.all']}</Option>);\r\n if (sectors[5] !== undefined) {\r\n for (let key in sectors[5].items) {\r\n var subGroupName = sectors[5].items[key].cn;\r\n\r\n this.srcData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n //指数\r\n this.indexData = [];\r\n this.indexData.push(<Option key='7'>{languageMessages['select.all']}</Option>);\r\n if (sectors[7] !== undefined) {\r\n for (let key in sectors[7].items) {\r\n var subGroupName = sectors[7].items[key].cn;\r\n\r\n this.indexData.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n }\r\n\r\n isRefresh = true;\r\n } else {\r\n this.conceptData = [];\r\n this.conceptData.push(<Option key='2'> -- </Option>);\r\n\r\n this.srcData = [];\r\n this.srcData.push(<Option key='5'> -- </Option>);\r\n\r\n this.indexData = [];\r\n this.indexData.push(<Option key='7'> -- </Option>);\r\n }\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n //设置默认值\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var num = stockGroups.indexOf('-');\r\n if (num > -1) {\r\n var tmpSt = stockGroups.slice(num, stockGroups.length);\r\n if (tmpSt !== '') st = tmpSt;\r\n\r\n stockGroups = stockGroups.slice(0, num);\r\n }\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sh = sg[ks].substr(0, 1);\r\n switch (sh) {\r\n case '2':\r\n concept = sg[ks].split(',');\r\n break;\r\n case '5':\r\n src = sg[ks].split(',');\r\n break;\r\n case '7':\r\n index = sg[ks].split(',');\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n generalIndex = stockGroups;\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (isRefresh) {\r\n this.setState({\r\n isRefresh,\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n concept: concept,\r\n src: src,\r\n index: index,\r\n\r\n st: st,\r\n\r\n generalIndex: generalIndex,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { stock, generalIndex, fund, customGroups } = this.state;\r\n var { defaultSymbolGroups } = props;\r\n\r\n var concept = ['2'], src = ['5'], index = ['7'], st = '1';\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var num = stockGroups.indexOf('-');\r\n if (num > -1) {\r\n var tmpSt = stockGroups.slice(num, stockGroups.length);\r\n if (tmpSt !== '') st = tmpSt;\r\n\r\n stockGroups = stockGroups.slice(0, num);\r\n }\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sh = sg[ks].substr(0, 1);\r\n switch (sh) {\r\n case '2':\r\n concept = sg[ks].split(',');\r\n break;\r\n case '5':\r\n src = sg[ks].split(',');\r\n break;\r\n case '7':\r\n index = sg[ks].split(',');\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n generalIndex = stockGroups;\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.setState({\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n concept: concept,\r\n src: src,\r\n index: index,\r\n\r\n st: st,\r\n\r\n generalIndex: generalIndex,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n this.setStockGroup('stockPoolKey', e.target.value);\r\n };\r\n\r\n handleStockChange = value => {\r\n this.setStockGroup('stock', value.key);\r\n }\r\n\r\n ///\r\n // a 已选ä¸ï¼Œb 当å‰é€‰ä¸ï¼Œ key 全部, items 当å‰åˆ—表\r\n ///\r\n ///setSelectStockGroup(a, b, items, key) {\r\n setSelectStockGroup(a, b, key) {\r\n var data = [];\r\n if (a.length > b.length) {\r\n if (b.length > 0) {\r\n var tmp = a.filter(function (i) { return b.indexOf(i) === -1; });\r\n if (tmp.length > 0) {\r\n if (tmp.indexOf(key) > -1) { // å…¨ä¸é€‰\r\n data = [key];\r\n } else {\r\n data = b;\r\n var index = data.indexOf(key);\r\n if (index > -1) {\r\n data.splice(index, 1);\r\n }\r\n }\r\n }\r\n } else {\r\n data = [key];\r\n /**\r\n if (a.indexOf(key) > -1) {\r\n for (let kk in items) {\r\n data.push(kk);\r\n }\r\n }\r\n */\r\n }\r\n } else {\r\n var tmp = b.filter(function (i) { return a.indexOf(i) === -1; });\r\n if (tmp.length > 0) {\r\n if (tmp.indexOf(key) > -1) { // 全选\r\n data = [key];\r\n /**\r\n for (let kk in items) {\r\n data.push(kk);\r\n }\r\n */\r\n } else {\r\n data = b;\r\n var index = data.indexOf(key);\r\n if (index > -1) {\r\n data.splice(index, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length === 0) data = [key];\r\n return data;\r\n };\r\n\r\n handleConceptChange = value => {\r\n var { concept } = this.state;\r\n concept = this.setSelectStockGroup(concept, value, '2');\r\n\r\n if (concept.indexOf('2') > -1) {\r\n this.setStockGroup('concept', []);\r\n } else {\r\n this.setStockGroup('concept', concept);\r\n }\r\n }\r\n\r\n handleSrcChange = value => {\r\n var { src } = this.state;\r\n src = this.setSelectStockGroup(src, value, '5');\r\n\r\n if (src.indexOf('5') > -1) {\r\n this.setStockGroup('src', []);\r\n } else {\r\n this.setStockGroup('src', src);\r\n }\r\n }\r\n\r\n handleIndexChange = value => {\r\n var { index } = this.state;\r\n index = this.setSelectStockGroup(index, value, '7');\r\n\r\n if (index.indexOf('7') > -1) {\r\n this.setStockGroup('index', []);\r\n } else {\r\n this.setStockGroup('index', index);\r\n }\r\n };\r\n\r\n handleStChange = value => {\r\n this.setStockGroup('st', value.key);\r\n }\r\n\r\n handleFundChange = value => {\r\n this.setStockGroup('fund', value.key);\r\n }\r\n\r\n handleCustomGroupsChange = value => {\r\n this.setStockGroup('customGroups', value.key);\r\n }\r\n\r\n setStockGroup(type, value) {\r\n var { stockPoolKey, stock, concept, src, index, st, generalIndex, fund, customGroups } = this.state;\r\n\r\n switch (type) {\r\n case 'stockPoolKey':\r\n stockPoolKey = value;\r\n break;\r\n case 'stock':\r\n stock = value;\r\n break;\r\n case 'concept':\r\n concept = value;\r\n break;\r\n case 'src':\r\n src = value;\r\n break;\r\n case 'index':\r\n index = value;\r\n break;\r\n case 'st':\r\n st = value;\r\n break;\r\n case 'fund':\r\n fund = value;\r\n break;\r\n case 'customGroups':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var stockGroups = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n stockGroups = stock;\r\n\r\n if (concept.indexOf('2') === -1) {\r\n stockGroups += ';' + concept.join(',');\r\n }\r\n if (src.indexOf('5') === -1) {\r\n stockGroups += ';' + src.join(',');\r\n }\r\n if (index.indexOf('7') === -1) {\r\n stockGroups += ';' + index.join(',');\r\n }\r\n if (st !== '1') {\r\n stockGroups += st;\r\n }\r\n break;\r\n case 'GENERAL_INDEX':\r\n stockGroups = generalIndex;\r\n break;\r\n case 'FUND':\r\n stockGroups = fund;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockGroups = customGroups;\r\n break;\r\n default:\r\n stockGroups = stock;\r\n break;\r\n }\r\n\r\n this.props.stockGroup({ stockPoolKey: stockPoolKey, stockGroups: stockGroups });\r\n }\r\n\r\n renderSymbolGroup() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['index.component']}</label>\r\n <Select labelInValue\r\n size='small'\r\n value={{ key: this.state.stock }}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStockChange}>\r\n <Option key='3180'>{languageMessages['all.stocks']}</Option>\r\n <Option key='3183'>{languageMessages['sh.sz.motherboard']}</Option>\r\n <Option key='3181'>{languageMessages['second.boardmarket']}</Option>\r\n <Option key='3182'>{languageMessages['sme.board']}</Option>\r\n <Option key='3069'>{languageMessages['csi.300']}</Option>\r\n <Option key='7300'>{languageMessages['csi.500']}</Option>\r\n <Option key='7302'>{languageMessages['csi.800']}</Option>\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['concept.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.concept}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleConceptChange}>\r\n {this.conceptData}\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['src.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.src}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleSrcChange}>\r\n {this.srcData}\r\n </Select>\r\n </div>\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['index.plate']}</label>\r\n <Select mode=\"multiple\"\r\n maxTagCount={1}\r\n size='small'\r\n showArrow={true}\r\n maxTagTextLength={MaxTagTextLength}\r\n maxTagPlaceholder={this.state.maxTagPlaceholder}\r\n value={this.state.index}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleIndexChange}>\r\n {this.indexData}\r\n </Select>\r\n </div>\r\n\r\n <div className='common-panel'>\r\n <label className='common-label-cn'>{languageMessages['ST.stock']}</label>\r\n <Select labelInValue\r\n size='small'\r\n value={{ key: this.state.st }}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStChange}>\r\n <Option key='1'>{languageMessages['contain']}</Option>\r\n <Option key='-9001'>{languageMessages['excluded']}</Option>\r\n </Select>\r\n </div>\r\n </div>);\r\n }\r\n\r\n //基金\r\n renderFundPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <label>{languageMessages['sys.fund.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.fund }}\r\n style={{ width: 120, padding: '0 10px' }}\r\n onChange={this.handleFundChange}>\r\n <Option key='4006'>ETF</Option>\r\n <Option key='4030'>{languageMessages['sh.grading.mother']}</Option>\r\n <Option key='4031'>{languageMessages['sh.grading.a']}</Option>\r\n <Option key='4032'>{languageMessages['sh.grading.b']}</Option>\r\n <Option key='4033'>{languageMessages['sz.grading.mother']}</Option>\r\n <Option key='4034'>{languageMessages['sz.grading.a']}</Option>\r\n <Option key='4035'>{languageMessages['sz.grading.b']}</Option>\r\n </Select>\r\n </div>);\r\n }\r\n\r\n //自选\r\n renderCustomGroupsPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <span>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </span>\r\n </div>);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isSymbolGroup } = this.state;\r\n isSymbolGroup = isSymbolGroup ? false : true;\r\n this.setState({ isSymbolGroup });\r\n }\r\n\r\n renderPoolCount(stockPoolKey, stockCount) {\r\n if (stockPoolKey === 'STOCK') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'GENERAL_INDEX') {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"index.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'FUND') {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"fund.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else {\r\n return <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '12px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockCount, isSymbolGroup } = this.state;\r\n return (<div>\r\n {this.renderPoolCount(stockPoolKey, stockCount)}\r\n <div style={{ display: isSymbolGroup ? '' : 'none' }}>\r\n <RadioGroup onChange={this.onSelectStockPool} value={stockPoolKey}>\r\n <Radio value={'STOCK'}>{languageMessages['stock']}</Radio>\r\n <Radio value={'GENERAL_INDEX'}>{languageMessages['general.index']}</Radio>\r\n <Radio value={'FUND'}>{languageMessages['fund']}</Radio>\r\n <Radio value={'CUSTOM_GROUPS'}>{languageMessages['optional.stock.pool']}</Radio>\r\n </RadioGroup>\r\n {\r\n stockPoolKey === 'STOCK' ? this.renderSymbolGroup() :\r\n stockPoolKey === 'FUND' ? this.renderFundPanel() :\r\n stockPoolKey === 'CUSTOM_GROUPS' ? this.renderCustomGroupsPanel() : ''\r\n }\r\n {this.props.error === 'STOCK_GROUP_ERROR' ? (<Alert message={languageMessages['please.select.stock.pool']} type=\"error\" />) : ''}\r\n </div>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { SymbolGroupPage as default }","import React, { Component } from 'react';\r\nimport { Radio, Input, Select, Divider, Alert, Icon, Checkbox } from 'antd';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport history from '../../../helpers/history';\r\n\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nconst SelectWidth = 150;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass USSymbolGroupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.filtersData = [];\r\n this.customGroupsData = [];\r\n\r\n this.isDisabled = history.location.state !== undefined ? history.location.state.fId > 0 ? true : false : false;\r\n\r\n this.state = {\r\n isRefresh: false,\r\n stockPoolKey: 'STOCK',\r\n\r\n stockCount: 0,\r\n\r\n stock: '10000',\r\n industry: {},\r\n\r\n fund: '30000',\r\n\r\n customGroups: '',\r\n\r\n sourceFilterId: 0,\r\n validPeriodBarCount: '10',\r\n validPeriodBarInterval: '5',\r\n\r\n isSymbolGroup: true,\r\n\r\n sectorIndustryBtn: 'sector-industry-btn',\r\n sectorIndustryIcon: 'plus',\r\n sectorIndustryContent: 'none',\r\n sectorClass: {},\r\n industryClass: {},\r\n industryItemClass: {},\r\n industrySelectClass: {},\r\n\r\n customGroupsClass: '',\r\n upstreamFilterClass: '',\r\n validPeriodBarCountClass: ''\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n var { isRefresh, stock, industry, fund, customGroups, sourceFilterId, validPeriodBarCount, validPeriodBarInterval, industrySelectClass } = this.state;\r\n if (!isRefresh) {\r\n var { defaultSymbolGroups } = this.props;\r\n\r\n isRefresh = true;\r\n \r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n if (filtersCache !== null) {\r\n this.filtersData = [];\r\n Object.keys(filtersCache).map((kk, index) => {\r\n if (sourceFilterId === 0) sourceFilterId = kk;\r\n this.filtersData.push(<Option key={kk}>{filtersCache[kk]}</Option>);\r\n });\r\n }\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n if (sh > 0) {\r\n industry[sh] = sg[ks].split(',');\r\n\r\n for (var sub in industry[sh]) {\r\n industrySelectClass[industry[sh][sub]] = 'checked';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups.toString();\r\n if (customGroups !== '') {\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n case 'UPSTREAM_FILTER':\r\n stockCount = 0;\r\n\r\n if (defaultSymbolGroups.sourceFilter !== undefined) {\r\n var sourceFilter = defaultSymbolGroups.sourceFilter;\r\n\r\n sourceFilterId = sourceFilter['sourceFilterId'];\r\n validPeriodBarCount = sourceFilter['ValidPeriodBarCount'];\r\n validPeriodBarInterval = sourceFilter['ValidPeriodBarInterval'];\r\n }\r\n \r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (isRefresh) {\r\n this.setState({\r\n isRefresh,\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups,\r\n\r\n sourceFilterId: sourceFilterId,\r\n validPeriodBarCount: validPeriodBarCount,\r\n validPeriodBarInterval: validPeriodBarInterval,\r\n\r\n industrySelectClass,\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { stockPoolKey, stock, industry, fund, customGroups, sourceFilterId, validPeriodBarCount, validPeriodBarInterval, industrySelectClass } = this.state;\r\n var { defaultSymbolGroups } = props;\r\n\r\n var customGroupsClass = '', upstreamFilterClass = '', validPeriodBarCountClass = '';\r\n\r\n if (this.props.error !== '') {\r\n var errors = this.props.error.split(',');\r\n for (var i = 0; i < errors.length; i++) {\r\n switch (errors[i]) {\r\n case 'STOCK_GROUP_ERROR':\r\n customGroupsClass = 'has-error';\r\n break;\r\n case 'UPSTREAM_FILTER_ERROR':\r\n upstreamFilterClass = 'has-error';\r\n break;\r\n case 'UPSTREAM_FILTER_BAR_COUNT_ERROR':\r\n validPeriodBarCountClass = 'has-error';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n\r\n stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n industry[sh] = sg[ks].split(',');\r\n\r\n for (var sub in industry[sh]) {\r\n industrySelectClass[industry[sh][sub]] = 'checked';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups.toString();\r\n if (customGroups !== '') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n case 'UPSTREAM_FILTER':\r\n stockCount = 0;\r\n\r\n if (defaultSymbolGroups.sourceFilter !== undefined) {\r\n var sourceFilter = defaultSymbolGroups.sourceFilter;\r\n\r\n sourceFilterId = sourceFilter['sourceFilterId'];\r\n validPeriodBarCount = sourceFilter['ValidPeriodBarCount'];\r\n validPeriodBarInterval = sourceFilter['ValidPeriodBarInterval'];\r\n }\r\n \r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.setState({\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups,\r\n\r\n sourceFilterId: sourceFilterId,\r\n validPeriodBarCount: validPeriodBarCount,\r\n validPeriodBarInterval: validPeriodBarInterval,\r\n\r\n industrySelectClass,\r\n\r\n customGroupsClass,\r\n upstreamFilterClass,\r\n validPeriodBarCountClass\r\n\r\n });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n this.setStockGroup('stockPoolKey', e.target.value);\r\n\r\n this.setState({\r\n stockPoolKey: e.target.value,\r\n });\r\n };\r\n\r\n handleStockChange = value => {\r\n this.setStockGroup('stock', value.key);\r\n\r\n this.setState({\r\n stock: value.key,\r\n });\r\n }\r\n\r\n handleCustomGroupsChange = value => {\r\n this.setStockGroup('customGroups', value.key);\r\n\r\n this.setState({\r\n customGroups: value.key,\r\n });\r\n }\r\n\r\n handleFilterChange = value => {\r\n this.setStockGroup('UpstreamFilter', value.key);\r\n\r\n this.setState({\r\n sourceFilterId: value.key,\r\n });\r\n }\r\n\r\n handleIntervalChange = value => {\r\n this.setStockGroup('UpstreamFilter_interval', value.key);\r\n\r\n this.setState({\r\n validPeriodBarInterval: value.key,\r\n });\r\n }\r\n\r\n handleBarCountChange = (e) => {\r\n e.preventDefault();\r\n\r\n var validPeriodBarCount = e.target.value;\r\n \r\n validPeriodBarCount = validPeriodBarCount.replace(/[^\\d]/g, \"\");\r\n\r\n if (validPeriodBarCount.length > 0) {\r\n validPeriodBarCount = validPeriodBarCount.slice(0, 12);\r\n validPeriodBarCount = parseInt(validPeriodBarCount);\r\n\r\n validPeriodBarCount = validPeriodBarCount + \"\";\r\n }\r\n\r\n this.setStockGroup('UpstreamFilter_count', validPeriodBarCount);\r\n \r\n this.setState({ validPeriodBarCount });\r\n }\r\n\r\n handleBarCountBlur = (e) => {\r\n e.preventDefault();\r\n\r\n var validPeriodBarCount = e.target.value;\r\n\r\n validPeriodBarCount = validPeriodBarCount.replace(/[^\\d]/g, \"\");\r\n\r\n if (validPeriodBarCount.length > 0) {\r\n validPeriodBarCount = validPeriodBarCount.slice(0, 12);\r\n validPeriodBarCount = parseInt(validPeriodBarCount);\r\n\r\n validPeriodBarCount = validPeriodBarCount + \"\";\r\n }\r\n\r\n this.setStockGroup('UpstreamFilter_count', validPeriodBarCount);\r\n\r\n this.setState({ validPeriodBarCount });\r\n }\r\n\r\n setStockGroup(type, value) {\r\n var { stockPoolKey, stock, industry, fund, customGroups, sourceFilterId, validPeriodBarCount, validPeriodBarInterval } = this.state;\r\n\r\n switch (type) {\r\n case 'stockPoolKey':\r\n stockPoolKey = value;\r\n break;\r\n case 'stock':\r\n stock = value;\r\n break;\r\n case 'industry':\r\n industry = value;\r\n break;\r\n case 'customGroups':\r\n customGroups = value;\r\n break;\r\n case 'UpstreamFilter':\r\n sourceFilterId = value;\r\n break;\r\n case 'UpstreamFilter_interval':\r\n validPeriodBarInterval = value;\r\n break;\r\n case 'UpstreamFilter_count':\r\n validPeriodBarCount = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n var stockGroups = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n stockGroups = stock;\r\n \r\n for (var kk in industry) {\r\n if (industry[kk].indexOf(kk) === -1) {\r\n stockGroups += ';' + industry[kk].join(',');\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n stockGroups = fund;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockGroups = customGroups;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.props.stockGroup({ stockPoolKey: stockPoolKey, stockGroups: stockGroups, sourceFilterId, validPeriodBarCount, validPeriodBarInterval });\r\n }\r\n\r\n handleSectorMouseOver = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn hover';\r\n let sectorIndustryIcon = 'minus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'block' });\r\n }\r\n\r\n handleSectorMouseOut = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn';\r\n let sectorIndustryIcon = 'plus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'none' });\r\n }\r\n\r\n HandleMouseOver = (key) => {\r\n var industry = document.getElementById('industry-' + key);\r\n if (industry) {\r\n\r\n var h1 = key * 32;\r\n\r\n var h2 = industry.offsetHeight;\r\n if (h1 > h2) {\r\n industry.style.top = h1 + 'px';\r\n }\r\n\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = 'hover';\r\n industryClass[key] = 'block';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n }\r\n\r\n HandleMouseOut = (key) => {\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = '';\r\n industryClass[key] = 'none';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n\r\n HandleIndustryMouseOver = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = 'hover';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryMouseOut = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = '';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryClick = (sectorId, industryId) => {\r\n let { industry, industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industrySelectClass[industryId] = 'checked';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n industryItems.push(industryId);\r\n industry[sectorId] = industryItems\r\n } else {\r\n industry[sectorId] = [industryId]\r\n }\r\n \r\n } else {\r\n industrySelectClass[industryId] = '';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n if (industryItems.length > 0) {\r\n let index = industryItems.indexOf(industryId);\r\n if (index > -1) {\r\n industryItems.splice(index, 1);\r\n if (industryItems.length > 0) {\r\n industry[sectorId] = industryItems;\r\n } else {\r\n delete industry[sectorId];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setStockGroup('industry', industry);\r\n\r\n this.setState({ industry, industryItemClass })\r\n }\r\n\r\n renderSectorIndustry() {\r\n var { defaultSymbolGroups } = this.props;\r\n var sectors = defaultSymbolGroups.sectors;\r\n\r\n if (sectors !== undefined && sectors !== null) {\r\n return <ul className=\"sector-industry-content\" style={{ display: this.state.sectorIndustryContent }}>\r\n {\r\n Object.keys(sectors).map((kk, index) => {\r\n let items = sectors[kk];\r\n let industryClass = this.state.industryClass[index] === undefined ? 'none' : this.state.industryClass[index];\r\n let isCheck = this.state.industry[kk] === undefined ? false : true;\r\n return <li key={kk} onMouseOver={() => this.HandleMouseOver(index)} onMouseOut={() => this.HandleMouseOut(index)}>\r\n <div className={this.state.sectorClass[index]}><Checkbox checked={isCheck} disabled={isCheck ? false : this.isDisabled} /><span className='title'>{locale.toLowerCase() === 'en-us' ? items.en : items.cn}</span></div>\r\n <div className='industry-content' style={{ display: industryClass }} id={'industry-' + index}><dl>\r\n {Object.keys(items.items).map(k => {\r\n let industrySelectClass = this.state.industrySelectClass[k] === undefined ? '' : this.state.industrySelectClass[k];\r\n let industryItemClass = this.state.industryItemClass[k] === undefined ? '' : this.state.industryItemClass[k];\r\n return <dd key={k} className={industrySelectClass + ' ' + industryItemClass}\r\n onClick={() => this.isDisabled ? '' : this.HandleIndustryClick(kk, k)}\r\n onMouseOver={() => this.isDisabled ? '' : this.HandleIndustryMouseOver(k)}\r\n onMouseOut={() => this.isDisabled ? '' : this.HandleIndustryMouseOut(k)}>{locale.toLowerCase() === 'en-us' ? items.items[k].en : items.items[k].cn}</dd>\r\n })}\r\n </dl></div>\r\n </li>\r\n })\r\n }\r\n </ul>;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n renderSymbolGroup() {\r\n return (<div className='common-industry'>\r\n <label className='common-label'>{languageMessages['index.component']}</label>\r\n <Select labelInValue size='small' disabled={this.isDisabled}\r\n defaultValue={{ key: this.state.stock }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStockChange}>\r\n <Option key='10000'>{languageMessages['all.stocks']}</Option>\r\n <Option key='10301'>{languageMessages['d-jones.index']}</Option>\r\n <Option key='10202'>{languageMessages['nasdaq.100']}</Option>\r\n <Option key='10401'>{languageMessages['sp.500']}</Option>\r\n <Option key='10501'>{languageMessages['russell.2000']}</Option>\r\n </Select>\r\n <div className='sector-industry-container' onMouseOver={this.handleSectorMouseOver} onMouseOut={this.handleSectorMouseOut}>\r\n <span className={this.state.sectorIndustryBtn}>\r\n <Icon type={this.state.sectorIndustryIcon} /><label>{languageMessages['Sector']}</label>\r\n </span>\r\n {this.renderSectorIndustry()}\r\n </div>\r\n </div>)\r\n }\r\n\r\n //自选\r\n renderCustomGroupsPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <div>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small' disabled={this.isDisabled}\r\n defaultValue={{ key: this.state.customGroups }}\r\n dropdownMatchSelectWidth={false}\r\n className={this.state.customGroupsClass}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </div>\r\n </div>);\r\n }\r\n\r\n //上下游\r\n renderUpstreamFilterPanel() {\r\n let { sourceFilterId, upstreamFilterClass, validPeriodBarCountClass, validPeriodBarCount, validPeriodBarInterval } = this.state;\r\n var tmpSourceFilterId = sourceFilterId.toString();\r\n\r\n return (<div style={{ padding: '10px 0' }}>\r\n {'Filter'}\r\n <span style={{ padding: '0 10px' }}>\r\n <Select labelInValue size='small' disabled={this.isDisabled}\r\n defaultValue={{ key: tmpSourceFilterId }}\r\n dropdownMatchSelectWidth={false}\r\n className={upstreamFilterClass}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleFilterChange}>\r\n {this.filtersData}\r\n </Select>\r\n </span>\r\n {'valid period'}\r\n <span style={{ padding: '0 10px' }}>\r\n <span style={{ marginRight: '10px' }} className={validPeriodBarCountClass}>\r\n <Input style={{ width: 80 }} size='small' disabled={this.isDisabled} value={validPeriodBarCount} onChange={this.handleBarCountChange} onBlur={this.handleBarCountBlur} />\r\n </span>\r\n <Select labelInValue size='small' disabled={this.isDisabled}\r\n defaultValue={{ key: validPeriodBarInterval }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleIntervalChange}>\r\n <Option value=\"1\">{languageMessages['1MinLine']}</Option>\r\n <Option value=\"2\">{languageMessages['2MinLine']}</Option>\r\n <Option value=\"3\">{languageMessages['3MinLine']}</Option>\r\n <Option value=\"5\">{languageMessages['5MinLine']}</Option>\r\n <Option value=\"10\">{languageMessages['10MinLine']}</Option>\r\n <Option value=\"15\">{languageMessages['15MinLine']}</Option>\r\n <Option value=\"20\">{languageMessages['20MinLine']}</Option>\r\n <Option value=\"30\">{languageMessages['30MinLine']}</Option>\r\n <Option value=\"60\">{languageMessages['60MinLine']}</Option>\r\n <Option value=\"D\">{languageMessages['dailyLine']}</Option>\r\n </Select>\r\n </span>\r\n {'Bars'}\r\n </div>);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isSymbolGroup } = this.state;\r\n isSymbolGroup = isSymbolGroup ? false : true;\r\n this.setState({ isSymbolGroup });\r\n }\r\n\r\n renderPoolCount(stockPoolKey, stockCount) {\r\n if (stockPoolKey === 'STOCK') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'FUND') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"fund.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockCount, isSymbolGroup } = this.state;\r\n return (<div>\r\n {this.renderPoolCount(stockPoolKey, stockCount)}\r\n <div style={{ display: isSymbolGroup ? '' : 'none' }}>\r\n <RadioGroup onChange={this.onSelectStockPool} value={stockPoolKey}>\r\n <Radio disabled={this.isDisabled} value={'STOCK'}>{languageMessages['stock']}</Radio>\r\n <Radio disabled={this.isDisabled} value={'FUND'}>{languageMessages['fund']}</Radio>\r\n <Radio disabled={this.isDisabled} value={'CUSTOM_GROUPS'}>{languageMessages['optional.stock.pool']}</Radio>\r\n <Radio disabled={this.isDisabled} value={'UPSTREAM_FILTER'}>{languageMessages['upstream filter']}</Radio>\r\n </RadioGroup>\r\n {\r\n stockPoolKey === 'STOCK' ? this.renderSymbolGroup() :\r\n stockPoolKey === 'CUSTOM_GROUPS' ? this.renderCustomGroupsPanel() : \r\n stockPoolKey === 'UPSTREAM_FILTER' ? this.renderUpstreamFilterPanel() : ''\r\n }\r\n </div>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { USSymbolGroupPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, Row, Col } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport LuisPage from '../../pannels/stock/LuisPage';\r\nimport SymbolGroupPage from './components/SymbolGroupPage';\r\nimport USSymbolGroupPage from './components/USSymbolGroupPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass FilterPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n let tmpStockGroups = window.webType === 'US' ? '10000' : '3180';\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'STOCK',\r\n\r\n lastTimes: 0,\r\n\r\n caretPosition: 0,\r\n\r\n stockGroups: tmpStockGroups,\r\n\r\n filterId: 0,\r\n filterName: '',\r\n filterString: '',\r\n\r\n alertInterval: '400',\r\n\r\n sourceFilterId: 0,\r\n validPeriodBarCount: '',\r\n validPeriodBarInterval: '',\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n stockCount: 0,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n alertIntervalClass: '',\r\n alertIntervalError: '',\r\n\r\n isLuisAnalysis: false,\r\n\r\n isSendFilter: false,\r\n\r\n filterRequestLoadding: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener(\"callFilterRequestResult\", this.callFilterRequestResult);\r\n\r\n this.rta.setCaretPosition(this.state.filterString.length);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, filterRequestLoadding: false });\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n filtersCache[filterResult.FilterId] = filterResult.FilterName;\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyFilter}>{languageMessages['my filter']}</a>\"</span>;\r\n this.timerModal(languageMessages['new.filter.success'], content);\r\n } else {\r\n message.error(filterResult.Description);\r\n }\r\n \r\n this.setState({\r\n filterRequestLoadding: false,\r\n modalVisible: false,\r\n filterId: filterResult.FilterId,\r\n filterName: filterResult.FilterName,\r\n });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n \r\n this.props.dispatch({ type: \"action_get_filter_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, useFormulaData } = props;\r\n\r\n switch (status) {\r\n case 'luis_success':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_filter_sectors_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'analysis_success':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'analysis_fail':\r\n var error = languageMessages['Intelligent.analysis.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['unable.get.intelligent.analysis.results'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.analytics.service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.analytics.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 6:\r\n error = languageMessages['request.analysis.timeout'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'clear_filter_string':\r\n this.setState({ filterString: '' });\r\n break;\r\n case 'use_formula':\r\n this.setState({\r\n isLuisAnalysis: useFormulaData.isLuisAnalysis,\r\n filterString: useFormulaData.filterString\r\n }, () => {\r\n if (!useFormulaData.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey,\r\n sourceFilterId: data.sourceFilterId,\r\n validPeriodBarCount: data.validPeriodBarCount,\r\n validPeriodBarInterval: data.validPeriodBarInterval\r\n }, () => {\r\n this.checkFilterParams();\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n }, () => {\r\n if (!data.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n }\r\n\r\n jumpMyFilter = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'myFilter');\r\n history.push({ pathname: '/mf', state: { fId: this.state.filterId } });\r\n }\r\n\r\n toMyFilter = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'myFilter');\r\n history.push(\"/mf\");\r\n }\r\n\r\n onChangeInterval = (e) => {\r\n e.preventDefault();\r\n\r\n var alertInterval = e.target.value;\r\n\r\n this.checkInterval(alertInterval);\r\n }\r\n\r\n onBlurInterval = (e) => {\r\n e.preventDefault();\r\n\r\n var alertInterval = e.target.value;\r\n\r\n this.checkInterval(alertInterval);\r\n }\r\n\r\n checkInterval(alertInterval) {\r\n alertInterval = alertInterval.replace(/[^\\d]/g, \"\");\r\n\r\n if (alertInterval.length > 0) {\r\n alertInterval = alertInterval.slice(0, 12);\r\n alertInterval = parseInt(alertInterval);\r\n\r\n alertInterval = alertInterval + \"\";\r\n }\r\n\r\n this.setState({ alertInterval }, () => {\r\n this.checkFilterParams();\r\n });\r\n }\r\n\r\n checkFilterParams() {\r\n let { stockPoolKey, stockGroups, filterString, alertInterval, sourceFilterId, validPeriodBarCount } = this.state;\r\n\r\n var error = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n break;\r\n case 'FUND':\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n if (stockGroups === '') {\r\n error = 'STOCK_GROUP_ERROR';\r\n }\r\n break;\r\n case 'UPSTREAM_FILTER':\r\n if (sourceFilterId === 0) {\r\n error = 'UPSTREAM_FILTER_ERROR';\r\n }\r\n if (validPeriodBarCount === '') {\r\n error = error === '' ? 'UPSTREAM_FILTER_BAR_COUNT_ERROR' : error + ',' + 'UPSTREAM_FILTER_BAR_COUNT_ERROR';\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var textareaClass = 'common-textarea';\r\n if (filterString === '') {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n }\r\n\r\n var alertIntervalError = '';\r\n var alertIntervalClass = '';\r\n if (alertInterval === '') {\r\n alertIntervalClass = 'has-error';\r\n } else {\r\n let intAlertInterval = parseInt(alertInterval);\r\n if (intAlertInterval < 300) {\r\n alertIntervalClass = 'has-error';\r\n alertIntervalError = languageMessages['alertIntervalError'];\r\n }\r\n }\r\n\r\n if (error === '' && textareaClass === 'common-textarea' && alertIntervalClass === '') {\r\n this.setState({ isSendFilter: true, error, textareaClass, alertIntervalClass });\r\n return true;\r\n } else {\r\n this.setState({ isSendFilter: false, error, textareaClass, alertIntervalClass, alertIntervalError });\r\n return false;\r\n }\r\n }\r\n\r\n onSaveFilter = () => {\r\n\r\n var state = this.checkFilterParams();\r\n if (!state) return;\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'save filter', 'filter', 'New filter']);\r\n\r\n this.setState({\r\n modalTitle: languageMessages['new filter'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: ''\r\n });\r\n }\r\n\r\n handleSaveFilter = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { stockGroups, stockPoolKey, filterName, filterString, alertInterval, sourceFilterId, validPeriodBarCount, validPeriodBarInterval } = this.state;\r\n\r\n if (filterName === '') {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['Filter name cannot be empty'],\r\n });\r\n return;\r\n }\r\n\r\n if (this.props.filters !== undefined && this.props.filters !== null) {\r\n var tmpData = Object.values(this.props.filters).filter(function (f) { return f == filterName });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['filter.name.already.exists'],\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n this.setState({ filterRequestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'filter',\r\n Action: 'new',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: filterName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n AlertInterval: alertInterval,\r\n SourceFilterId: sourceFilterId,\r\n ValidPeriodBarCount: validPeriodBarCount,\r\n ValidPeriodBarInterval: validPeriodBarInterval,\r\n State: 1\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n handleCancelFilter = () => {\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n filterName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n this.setState({\r\n filterString: e.target.value,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n }, () => {\r\n this.checkFilterParams();\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onChangeFilterName = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var filterName = e.target.value;\r\n if (filterName !== '') {\r\n filterName = filterName.slice(0, 100);\r\n\r\n //var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n var pattern = /^[A-Za-z0-9_]+$/gi;\r\n if (!pattern.test(filterName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['filter.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n filterName: filterName\r\n });\r\n }\r\n\r\n clearFilterString = () => {\r\n if (this.props.status === 'clear_filter_string') {\r\n this.setState({ filterString: '' });\r\n } else {\r\n this.props.dispatch({ type: \"action_clear_filterString\" });\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, filterString, stockGroups } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title.newFilter']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['description.filter']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title.newFilter']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description.filter']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title.newFilter']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description.filter']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['title.newFilter']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.toMyFilter}>{languageMessages['my filter']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n onOk={this.handleSaveFilter}\r\n confirmLoading={this.state.filterRequestLoadding}\r\n onCancel={this.handleCancelFilter}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['filter.name.placeholder']} id={this.state.validateStatus} value={this.state.filterName} onChange={this.onChangeFilterName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n <ul style={{ margin: '10px 0' }}>\r\n <li style={{ padding: '5px 0' }}><h2>{languageMessages['description.filter']}</h2></li>\r\n </ul>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <LuisPage {...this.props} filterString={filterString} isFilterScan={false} LuisAnalysis={this.handleLuisAnalysis.bind(this)} />\r\n\r\n <div id=\"textareaAnchor\" className='common-title'>\r\n <Divider type=\"vertical\" /><span>{languageMessages['formula.editing']}</span>\r\n <Button size='small' onClick={this.clearFilterString} style={{ marginLeft: '20px' }}>{languageMessages['clear']}</Button>\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n placeholder={languageMessages['use.formula.generated.or.vernacular.stock.selection']}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle} />\r\n\r\n <div style={{ padding: '10px 0' }}>\r\n {'Alert interval'}\r\n <span style={{ padding: '0 10px' }} className={this.state.alertIntervalClass}>\r\n <Input style={{ width: 80 }} size='small' value={this.state.alertInterval} onChange={this.onChangeInterval} onBlur={this.onBlurInterval} />\r\n </span>\r\n {'Sec'}\r\n <span style={{ marginLeft: '10px', color: 'red' }}>{this.state.alertIntervalError}</span>\r\n </div>\r\n\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.onSaveFilter} disabled={!this.state.isSendFilter}>\r\n {languageMessages['save filter']}\r\n </Button>\r\n </div>\r\n </Layout>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.filter;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(FilterPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { CSVLink } from \"react-csv\";\r\nimport { Layout, Modal, Button, Menu, PageHeader, Table, Radio, Input, Icon, Dropdown, Form, Divider, Popover, Spin, message } from 'antd';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content, Sider } = Layout;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst commonColumns = [\r\n/**\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n },*/ {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'stockCode',\r\n sorter: (a, b) => a.stockCode < b.stockCode ? -1 : a.stockCode > b.stockCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'stockName',\r\n sorter: (a, b) => a.stockName < b.stockName ? -1 : a.stockName > b.stockName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['datetime'],\r\n dataIndex: 'datetime',\r\n sorter: (a, b) => a.datetime < b.datetime ? -1 : a.datetime > b.datetime ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n];\r\n\r\nconst commonCompactColumns = [\r\n/**\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n },*/ {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'stockCode',\r\n sorter: (a, b) => a.stockCode < b.stockCode ? -1 : a.stockCode > b.stockCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'stockName',\r\n sorter: (a, b) => a.stockName < b.stockName ? -1 : a.stockName > b.stockName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['datetime'],\r\n dataIndex: 'datetime',\r\n sorter: (a, b) => a.datetime < b.datetime ? -1 : a.datetime > b.datetime ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['count'],\r\n dataIndex: 'count',\r\n sorter: (a, b) => a.count < b.count ? -1 : a.count > b.count ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n]\r\n\r\nconst commonCsvDataTitle = [languageMessages['symbol.code'], languageMessages['symbol.name'], languageMessages['datetime']];\r\n\r\nclass MyFilterPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.myDate = new Date();\r\n\r\n let fId = '';\r\n if (history.location.state !== undefined) {\r\n let tmpFId = history.location.state.fId;\r\n fId = tmpFId.toString();\r\n }\r\n\r\n this.user = {};\r\n this.state = {\r\n selectedRowKeys: [],\r\n\r\n columns: [],\r\n dataSource: [],\r\n\r\n compactColumns: [],\r\n compactDataSource: [],\r\n\r\n compactSymbolCount: [],\r\n\r\n filterItems: {},\r\n\r\n currentSelectKey: fId,\r\n filterName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n stockCount: 0,\r\n\r\n stockName: '',\r\n action: '',\r\n\r\n filterAlerts: [],\r\n\r\n filterAlertCounts: {},\r\n\r\n saveStock: false,\r\n\r\n csvData: [],\r\n fileName: '',\r\n\r\n spinLoadding: true,\r\n stockGroupLoadding: false,\r\n\r\n displayMode: '0',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener(\"callFilterRequestResult\", this.callFilterRequestResult);\r\n emitter.addListener('callfilterAlertResult', this.callfilterAlertResult);\r\n\r\n emitter.addListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n emitter.removeListener('callfilterAlertResult', this.callfilterAlertResult);\r\n\r\n emitter.removeListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, stockGroupLoadding: false });\r\n }\r\n\r\n callCustomSymbolGroups = (symbolGroup) => {\r\n if (symbolGroup.Status === 0) {\r\n var customStockGroupsCache = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroupsCache.length > 0) {\r\n const index = customStockGroupsCache.findIndex(item => item.groupId === symbolGroup.gi);\r\n if (index > -1) {\r\n customStockGroupsCache[index].groupName = symbolGroup.gn;\r\n customStockGroupsCache[index].symbolList = symbolGroup.sg;\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n } else {\r\n message.error(symbolGroup.Description);\r\n }\r\n\r\n this.setState({ stockGroupLoadding: false });\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n let { filterItems, filterId, filterName } = this.state;\r\n\r\n if (filterResult.Status === 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n if (filtersCache.hasOwnProperty(filterResult.FilterId)) {\r\n delete (filtersCache[filterResult.FilterId]);\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n }\r\n\r\n if (filterItems.hasOwnProperty(filterResult.FilterId)) {\r\n delete (filterItems[filterResult.FilterId]);\r\n }\r\n\r\n var customStrategyCache = JSON.parse(sessionStorage.getItem(\"CustomStrategyCache\") || '[]') || [];\r\n customStrategyCache = customStrategyCache.filter(function (v) { return filterResult.FilterId !== v.filterId });\r\n sessionStorage.setItem(\"CustomStrategyCache\", JSON.stringify(customStrategyCache));\r\n\r\n if (filterId === filterResult.FilterId) {\r\n var filterIds = Object.keys(filterItems);\r\n if (filterIds.length > 0) {\r\n filterId = filterIds[0];\r\n filterName = filterItems[filterId];\r\n }\r\n }\r\n\r\n message.success(languageMessages['delete.filter.success']);\r\n } else {\r\n message.error(filterResult.Description);\r\n }\r\n\r\n this.setState({\r\n spinLoadding: false,\r\n filterItems,\r\n filterId,\r\n filterName,\r\n });\r\n }\r\n\r\n callfilterAlertResult = (filterAlert) => {\r\n let { currentSelectKey, filterAlerts, columns, dataSource, compactColumns, compactDataSource, compactSymbolCount, csvData } = this.state;\r\n\r\n var filterAlertCounts = JSON.parse(sessionStorage.getItem(\"FilterAlertCountsCache\") || '{}') || {};\r\n\r\n let fId = filterAlert.fi.toString();\r\n if (currentSelectKey === fId) {\r\n var sequence = dataSource.length;\r\n var row = {\r\n key: sequence,\r\n sequence: sequence + 1,\r\n stockCode: filterAlert.sc,\r\n stockName: filterAlert.sn,\r\n datetime: filterAlert.dt\r\n };\r\n\r\n var row1 = {\r\n key: sequence,\r\n sequence: sequence + 1,\r\n stockCode: filterAlert.sc,\r\n stockName: filterAlert.sn,\r\n datetime: filterAlert.dt,\r\n count: 0,\r\n };\r\n\r\n var tmpColumns = columns.filter(v1 => { return commonColumns.every(v2 => v2.dataIndex !== v1.dataIndex) });\r\n\r\n var csvDataTitle = csvData.shift();\r\n /**\r\n var tmpCsvDataTitle = csvDataTitle.filter(function (item) { return item => !commonCsvDataTitle.includes(item) });\r\n */\r\n var csvDataItems = [];\r\n csvDataItems.push(filterAlert.sc);\r\n csvDataItems.push(filterAlert.sn);\r\n csvDataItems.push(filterAlert.dt);\r\n\r\n var alerts = filterAlert.a;\r\n if (alerts !== undefined) {\r\n Object.keys(alerts).map((key, index) => {\r\n const n = tmpColumns.findIndex(item => item.dataIndex === key);\r\n if (n === -1) {\r\n tmpColumns.push({ title: key, dataIndex: key });\r\n }\r\n\r\n row[key] = parseFloat(alerts[key]).toFixed(4);\r\n row1[key] = parseFloat(alerts[key]).toFixed(4);\r\n\r\n const nnn = csvDataTitle.findIndex(item => item == key);\r\n if (nnn === -1) {\r\n csvDataTitle.push(key);\r\n }\r\n\r\n csvDataItems.push(parseFloat(alerts[key]).toFixed(4));\r\n });\r\n }\r\n\r\n dataSource.unshift(row);\r\n\r\n if (compactSymbolCount.hasOwnProperty(filterAlert.sc)) {\r\n compactSymbolCount[filterAlert.sc] += 1;\r\n\r\n const ins = compactDataSource.findIndex(item => item.stockCode === filterAlert.sc);\r\n if (ins > -1) compactDataSource.splice(ins, 1);\r\n } else {\r\n compactSymbolCount[filterAlert.sc] = 1;\r\n }\r\n\r\n row1.count = compactSymbolCount[filterAlert.sc];\r\n compactDataSource.unshift(row1);\r\n\r\n //tmpCsvDataTitle.sort();\r\n //csvDataTitle = commonCsvDataTitle.concat(tmpCsvDataTitle.filter(function (item) { return !(commonCsvDataTitle.indexOf(item)) > -1 }));\r\n csvData.unshift(csvDataTitle);\r\n \r\n csvData.push(csvDataItems);\r\n \r\n tmpColumns.sort((a, b) => a.dataIndex.localeCompare(b.dataIndex));\r\n columns = commonColumns.concat(tmpColumns.filter(function (item) { return !(commonColumns.indexOf(item)) > -1 }));\r\n \r\n compactColumns = commonCompactColumns.concat(tmpColumns.filter(function (item) { return !(commonCompactColumns.indexOf(item)) > -1 }));\r\n\r\n filterAlerts.push(filterAlert);\r\n \r\n if (filterAlertCounts.hasOwnProperty(filterAlert.fi)) {\r\n filterAlertCounts[filterAlert.fi] = 0;\r\n }\r\n sessionStorage.setItem(\"FilterAlertCountsCache\", JSON.stringify(filterAlertCounts));\r\n\r\n this.setState({ filterAlerts, columns, dataSource, compactColumns, compactDataSource, compactSymbolCount, filterAlertCounts, csvData });\r\n } else {\r\n this.setState({ filterAlertCounts });\r\n }\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n if (filtersCache !== null && Object.keys(filtersCache).length > 0) {\r\n this.setFilters(filtersCache);\r\n } else {\r\n this.props.dispatch({ type: \"action_get_filter_items\", payload: { u: this.user.username } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_filter_items\", payload: { u: this.user.username } });\r\n }\r\n\r\n setFilters(filterItems) {\r\n var { filterName, currentSelectKey } = this.state\r\n\r\n var filterAlertCounts = {};\r\n\r\n var fileName = '';\r\n var csvData = [];\r\n var csvDataTitle = [];\r\n\r\n var columns = [];\r\n var dataSource = [];\r\n\r\n var compactSymbolCount = {};\r\n\r\n var compactColumns = [];\r\n var compactDataSource = [];\r\n \r\n if (filterItems !== undefined && filterItems !== null) {\r\n var filterIds = Object.keys(filterItems);\r\n if (filterIds.length > 0) {\r\n if (currentSelectKey === '') {\r\n currentSelectKey = filterIds[0].toString();\r\n }\r\n filterName = filterItems[currentSelectKey].toString();\r\n\r\n fileName = filterName + '_result_' + this.myDate.getYear() + '' + this.myDate.getMonth() + '' + this.myDate.getDate() + '' + this.myDate.getHours() + '' + this.myDate.getMinutes() + '' + this.myDate.getSeconds() + \".csv\";\r\n\r\n filterAlertCounts = JSON.parse(sessionStorage.getItem(\"FilterAlertCountsCache\") || '{}') || {};\r\n if (filterAlertCounts.hasOwnProperty(currentSelectKey)) {\r\n filterAlertCounts[currentSelectKey] = 0;\r\n }\r\n sessionStorage.setItem(\"FilterAlertCountsCache\", JSON.stringify(filterAlertCounts));\r\n\r\n let filterAlertsCache = JSON.parse(sessionStorage.getItem(\"FilterAlertsCache\") || '{}') || {};\r\n if (filterAlertsCache.hasOwnProperty(currentSelectKey)) {\r\n var filterAlerts = filterAlertsCache[currentSelectKey];\r\n var sequence = filterAlerts.length;\r\n for (var i in filterAlerts) {\r\n var row = {\r\n key: sequence - 1,\r\n sequence: sequence,\r\n stockCode: filterAlerts[i].sc,\r\n stockName: filterAlerts[i].sn,\r\n datetime: filterAlerts[i].dt\r\n }\r\n\r\n var row1 = {\r\n key: sequence - 1,\r\n sequence: sequence,\r\n stockCode: filterAlerts[i].sc,\r\n stockName: filterAlerts[i].sn,\r\n datetime: filterAlerts[i].dt,\r\n count: 0\r\n }\r\n\r\n var csvDataItems = [];\r\n csvDataItems.push(filterAlerts[i].sc);\r\n csvDataItems.push(filterAlerts[i].sn);\r\n csvDataItems.push(filterAlerts[i].dt);\r\n\r\n var alerts = filterAlerts[i].a;\r\n if (alerts !== undefined) {\r\n Object.keys(alerts).map((key, index) => {\r\n const n = columns.findIndex(item => item.dataIndex === key);\r\n if (n === -1) {\r\n columns.push({ title: key, dataIndex: key });\r\n }\r\n\r\n const nn = compactColumns.findIndex(item => item.dataIndex === key);\r\n if (nn === -1) {\r\n compactColumns.push({ title: key, dataIndex: key });\r\n }\r\n\r\n row[key] = parseFloat(alerts[key]).toFixed(4);\r\n row1[key] = parseFloat(alerts[key]).toFixed(4);\r\n\r\n const nnn = csvDataTitle.findIndex(item => item == key);\r\n if (nnn === -1) {\r\n csvDataTitle.push(key);\r\n }\r\n\r\n csvDataItems.push(parseFloat(alerts[key]).toFixed(4));\r\n });\r\n }\r\n\r\n dataSource.push(row);\r\n\r\n if (compactSymbolCount.hasOwnProperty(filterAlerts[i].sc)) {\r\n compactSymbolCount[filterAlerts[i].sc] += 1;\r\n\r\n compactDataSource.forEach(item => {\r\n if (item.stockCode === filterAlerts[i].sc) item.count = compactSymbolCount[filterAlerts[i].sc];\r\n });\r\n\r\n } else {\r\n compactSymbolCount[filterAlerts[i].sc] = 1;\r\n\r\n row1.count = compactSymbolCount[filterAlerts[i].sc];\r\n\r\n compactDataSource.push(row1);\r\n }\r\n\r\n csvData.push(csvDataItems);\r\n\r\n sequence--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n csvDataTitle.unshift(languageMessages['datetime']);\r\n csvDataTitle.unshift(languageMessages['symbol.name']);\r\n csvDataTitle.unshift(languageMessages['symbol.code']);\r\n\r\n csvData.unshift(csvDataTitle);\r\n\r\n columns.sort((a, b) => a.dataIndex.localeCompare(b.dataIndex));\r\n columns = commonColumns.concat(columns.filter(function (item) { return !(commonColumns.indexOf(item)) > -1 }));\r\n\r\n compactColumns.sort((a, b) => a.dataIndex.localeCompare(b.dataIndex));\r\n compactColumns = commonCompactColumns.concat(compactColumns.filter(function (item) { return !(commonColumns.indexOf(item)) > -1 }));\r\n\r\n this.setState({\r\n filterItems: filterItems,\r\n currentSelectKey: currentSelectKey,\r\n filterName: filterName,\r\n\r\n filterAlertCounts,\r\n\r\n columns,\r\n dataSource,\r\n\r\n compactColumns,\r\n compactDataSource,\r\n\r\n compactSymbolCount,\r\n\r\n fileName,\r\n csvData,\r\n \r\n selectedRowKeys: [],\r\n spinLoadding: false,\r\n });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, filters } = props;\r\n \r\n switch (status) {\r\n case 'get_filter_items_success':\r\n this.setFilters(filters);\r\n break;\r\n case 'get_filter_items_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n onNewFilter = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'newFilter');\r\n history.push(\"/f\");\r\n };\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'customSymbolGroups');\r\n history.push(\"/customStock\");\r\n }\r\n\r\n handleMenuClick = e => {\r\n var { filterItems } = this.state;\r\n\r\n var tmpSelectKey = e.key;\r\n\r\n var compactSymbolCount = {};\r\n\r\n var filterAlertCounts = JSON.parse(sessionStorage.getItem(\"FilterAlertCountsCache\") || '{}') || {};\r\n\r\n var filterName = '';\r\n if (filterItems.hasOwnProperty(tmpSelectKey)) {\r\n filterName = filterItems[tmpSelectKey];\r\n }\r\n\r\n var fileName = filterName + '_result_' + this.myDate.getYear() + '' + this.myDate.getMonth() + '' + this.myDate.getDate() + '' + this.myDate.getHours() + '' + this.myDate.getMinutes() + '' + this.myDate.getSeconds() + \".csv\";\r\n var csvData = [];\r\n var csvDataTitle = [];\r\n\r\n var columns = [];\r\n var dataSource = [];\r\n\r\n var compactColumns = [];\r\n var compactDataSource = [];\r\n\r\n let filterAlertsCache = JSON.parse(sessionStorage.getItem(\"FilterAlertsCache\") || '{}') || {};\r\n if (filterAlertsCache.hasOwnProperty(tmpSelectKey)) {\r\n var filterAlerts = filterAlertsCache[tmpSelectKey];\r\n \r\n if (filterAlertCounts.hasOwnProperty(tmpSelectKey)) {\r\n filterAlertCounts[tmpSelectKey] = 0;\r\n }\r\n sessionStorage.setItem(\"FilterAlertCountsCache\", JSON.stringify(filterAlertCounts));\r\n\r\n var sequence = filterAlerts.length;\r\n for (var i in filterAlerts) {\r\n var row = {\r\n key: sequence - 1,\r\n sequence: sequence,\r\n stockCode: filterAlerts[i].sc,\r\n stockName: filterAlerts[i].sn,\r\n datetime: filterAlerts[i].dt\r\n }\r\n\r\n var row1 = {\r\n key: sequence - 1,\r\n sequence: sequence,\r\n stockCode: filterAlerts[i].sc,\r\n stockName: filterAlerts[i].sn,\r\n datetime: filterAlerts[i].dt,\r\n count: 0\r\n }\r\n\r\n var csvDataItems = [];\r\n csvDataItems.push(filterAlerts[i].sc);\r\n csvDataItems.push(filterAlerts[i].sn);\r\n csvDataItems.push(filterAlerts[i].dt);\r\n\r\n var alerts = filterAlerts[i].a;\r\n if (alerts !== undefined) {\r\n Object.keys(alerts).map((key, index) => {\r\n const n = columns.findIndex(item => item.dataIndex === key);\r\n if (n === -1) {\r\n columns.push({ title: key, dataIndex: key });\r\n }\r\n\r\n const nn = compactColumns.findIndex(item => item.dataIndex === key);\r\n if (nn === -1) {\r\n compactColumns.push({ title: key, dataIndex: key });\r\n }\r\n\r\n row[key] = parseFloat(alerts[key]).toFixed(4);\r\n row1[key] = parseFloat(alerts[key]).toFixed(4);\r\n\r\n const nnn = csvDataTitle.findIndex(item => item == key);\r\n if (nnn === -1) {\r\n csvDataTitle.push(key);\r\n }\r\n\r\n csvDataItems.push(parseFloat(alerts[key]).toFixed(4));\r\n });\r\n }\r\n\r\n dataSource.push(row);\r\n\r\n if (compactSymbolCount.hasOwnProperty(filterAlerts[i].sc)) {\r\n compactSymbolCount[filterAlerts[i].sc] += 1;\r\n\r\n compactDataSource.forEach(item => {\r\n if (item.stockCode === filterAlerts[i].sc) item.count = compactSymbolCount[filterAlerts[i].sc];\r\n });\r\n\r\n } else {\r\n compactSymbolCount[filterAlerts[i].sc] = 1;\r\n\r\n row1.count = compactSymbolCount[filterAlerts[i].sc];\r\n\r\n compactDataSource.push(row1);\r\n }\r\n \r\n csvData.push(csvDataItems);\r\n\r\n sequence--;\r\n }\r\n }\r\n\r\n csvDataTitle.unshift(languageMessages['datetime']);\r\n csvDataTitle.unshift(languageMessages['symbol.name']);\r\n csvDataTitle.unshift(languageMessages['symbol.code']);\r\n\r\n csvData.unshift(csvDataTitle);\r\n\r\n columns.sort((a, b) => a.dataIndex.localeCompare(b.dataIndex));\r\n columns = commonColumns.concat(columns.filter(function (item) { return !(commonColumns.indexOf(item)) > -1 }));\r\n\r\n compactColumns.sort((a, b) => a.dataIndex.localeCompare(b.dataIndex));\r\n compactColumns = commonCompactColumns.concat(compactColumns.filter(function (item) { return !(commonColumns.indexOf(item)) > -1 }));\r\n \r\n this.setState({\r\n currentSelectKey: tmpSelectKey,\r\n filterName: filterName,\r\n\r\n filterAlertCounts,\r\n\r\n columns: columns,\r\n dataSource: dataSource,\r\n\r\n compactColumns,\r\n compactDataSource,\r\n\r\n compactSymbolCount,\r\n\r\n fileName,\r\n csvData\r\n });\r\n };\r\n\r\n changeDisplayMode = e => {\r\n this.setState({ displayMode: e.target.value });\r\n }\r\n\r\n handlePopoverMenuClick = e => {\r\n if (e.key !== '') {\r\n var filterIds = e.key.split('_');\r\n if (filterIds.length > 1) {\r\n switch (filterIds[0]) {\r\n case 'update':\r\n this.updateFilter(filterIds[1]);\r\n break;\r\n case 'remove':\r\n this.removeFilter(filterIds[1]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateFilter(fId) {\r\n history.push({ pathname: '/uf', state: { fId: fId } });\r\n }\r\n\r\n removeFilter(fId) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var filterName = this.state.filterItems[fId];\r\n var _this = this;\r\n Confirm({\r\n title: <div>{languageMessages['make.sure.delete.filter']}“{filterName}â€?</div>,\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: _this.user.username,\r\n msg: {\r\n Category: 'filter',\r\n Action: 'delete',\r\n ConceptId: 0,\r\n UserId: _this.user.username,\r\n FilterId: fId,\r\n FilterName: filterName,\r\n\r\n //GroupType: stockPoolKey,\r\n //FilterString: filterString,\r\n //SymbolGroupId: stockGroups,\r\n //AlertInterval: alertInterval,\r\n //SourceFilterId: sourceFilterId,\r\n //ValidPeriodBarCount: validPeriodBarCount,\r\n //ValidPeriodBarInterval: validPeriodBarInterval,\r\n\r\n State: 1\r\n }\r\n }\r\n });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys, saveStock: selectedRowKeys.length > 0 ? true : false });\r\n };\r\n\r\n onJoinCustomStock = e => {\r\n let { filterAlerts, selectedRowKeys } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var groupId = e.key;\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpCustomGroups = customStockGroups.filter(function (e) { return e.groupId == groupId });\r\n if (tmpCustomGroups.length > 0) {\r\n var symbolList = tmpCustomGroups[0].symbolList;\r\n for (var kk in selectedRowKeys) {\r\n var filterAlert = filterAlerts[selectedRowKeys[kk]];\r\n if (filterAlert !== undefined) {\r\n if (symbolList.indexOf(filterAlert.sc) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += filterAlert.sc;\r\n }\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.setState({ stockCount, stockGroupLoadding: false }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: 'update',\r\n GroupId: groupId,\r\n UserId: this.user.username,\r\n GroupName: tmpCustomGroups[0].groupName,\r\n OldGroupName: tmpCustomGroups[0].groupName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n } else {\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n var filterAlert = filterAlerts[selectedRowKeys[kk]];\r\n if (filterAlert !== undefined) {\r\n if (symbolList.indexOf(filterAlert.sc) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += filterAlert.sc;\r\n }\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.setState({\r\n modalVisible: true,\r\n stockName: '',\r\n stockCount,\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleSaveGroupName = () => {\r\n let { filterAlerts, stockName, selectedRowKeys } = this.state;\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpData = customStockGroups.filter(function (e) { return e.groupName == stockName; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['stock.pool.name.already.exists'],\r\n });\r\n } else {\r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n\r\n var filterAlert = filterAlerts[selectedRowKeys[kk]];\r\n if (filterAlert !== undefined) {\r\n if (symbolList.indexOf(filterAlert.sc) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += filterAlert.sc;\r\n }\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.setState({ stockCount, stockGroupLoadding: false }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: 'new',\r\n GroupId: 0,\r\n UserId: this.user.username,\r\n GroupName: stockName,\r\n OldGroupName: stockName,\r\n SymbolList: symbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleCancelGroupName = e => {\r\n this.setState({\r\n modalVisible: false,\r\n stockName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n onChangeGroupName = e => {\r\n e.preventDefault();\r\n\r\n let stockName = e.target.value;\r\n if (stockName !== '') {\r\n stockName = stockName.slice(0, 20);\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n //var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n var pattern = /^[A-Za-z0-9_]+$/gi;\r\n if (!pattern.test(stockName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['stock.pool.name.format'];\r\n }\r\n\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n stockName: stockName\r\n });\r\n }\r\n }\r\n\r\n renderFilterItems(currentSelectKey) {\r\n let { filterItems, filterAlertCounts } = this.state;\r\n\r\n var filterItemsData = [];\r\n if (filterItems !== undefined && filterItems !== null) {\r\n Object.keys(filterItems).map((filterId, index) => {\r\n var update = 'update_' + filterId;\r\n var remove = 'remove_' + filterId;\r\n var content = (<Menu style={{ textAlign: 'center' }} selectedKeys={[]} inlineIndent={16} mode=\"inline\" onClick={this.handlePopoverMenuClick}>\r\n <Menu.Item key={update}>\r\n <span>{languageMessages['update']}</span>\r\n </Menu.Item>\r\n <Menu.Item key={remove}>\r\n <span>{languageMessages['remove']}</span>\r\n </Menu.Item>\r\n </Menu>);\r\n\r\n filterItemsData.push(<Menu.Item key={filterId}>\r\n <span className='common-txt-left' title={filterItems[filterId]}><Icon type=\"file\" />{filterItems[filterId]}</span>\r\n <span style={{ marginLeft: '5px' }}>{filterAlertCounts[filterId] === undefined || filterAlertCounts[filterId] === 0 ? '' : '(' + filterAlertCounts[filterId] + ')'}</span>\r\n <span style={{ float: 'right' }}>\r\n <Popover placement=\"bottomLeft\" title='' content={content} trigger=\"click\">\r\n <Button style={{ padding: '0 0 0 8px', backgroundColor: 'transparent', border: 'none' }} size=\"small\" shape=\"round\" icon=\"ellipsis\" />\r\n </Popover>\r\n </span></Menu.Item>);\r\n\r\n });\r\n }\r\n\r\n\r\n if (filterItemsData.length > 0) {\r\n return <Menu inlineIndent={50} selectedKeys={[currentSelectKey || '0']} mode=\"inline\" onClick={this.handleMenuClick}>\r\n {filterItemsData}\r\n </Menu>;\r\n } else {\r\n return <div style={{ textAlign: 'center', padding: '20px 0', color: 'rgba(255, 255, 255, 0.75' }}>{languageMessages['not']}</div>\r\n }\r\n }\r\n\r\n render() {\r\n var { displayMode, columns, dataSource, compactColumns, compactDataSource, selectedRowKeys, currentSelectKey } = this.state;\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var customStockGroupData = [];\r\n if (customStockGroups.length > 0) {\r\n for (let key in customStockGroups) {\r\n customStockGroupData.push(<Menu.Item key={customStockGroups[key].groupId}>{customStockGroups[key].groupName}</Menu.Item>);\r\n }\r\n } else {\r\n customStockGroupData.push(<Menu.Item key='0'><Icon type=\"plus-circle\" />{languageMessages['new.stock.pool']}</Menu.Item>);\r\n }\r\n\r\n let menu = (\r\n <Menu onClick={this.onJoinCustomStock}>\r\n {customStockGroupData}\r\n </Menu>\r\n );\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n \r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n var columnsLength = displayMode === '0' ? compactColumns.length * 150 : columns.length * 150;\r\n var tableScroll = { x: columnsLength };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Modal title={languageMessages['new.stock.pool']}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleSaveGroupName}\r\n confirmLoading={this.state.stockGroupLoadding}\r\n onCancel={this.handleCancelGroupName}>\r\n <Form {...formItemLayout}>\r\n <Form.Item\r\n label={languageMessages['stock.pool.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['stock.pool.name.placeholder']} id={this.state.validateStatus} value={this.state.stockName} onChange={this.onChangeGroupName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['my filter']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onNewFilter}>{languageMessages['new filter']}</Button>\r\n ]} />\r\n </div>\r\n <Layout className='main-content'>\r\n <Sider width={300}>\r\n <PageHeader className='common-sider-header' title={languageMessages['my filter']} />\r\n <Divider />\r\n <div className=\"common-sider-content\">\r\n {this.renderFilterItems(currentSelectKey)}\r\n </div>\r\n </Sider>\r\n <Layout className='common-content'>\r\n <div>\r\n <div className='common-left-toolbar'>\r\n <Radio.Group value={displayMode} onChange={this.changeDisplayMode} buttonStyle=\"solid\">\r\n <Radio.Button value=\"0\">{languageMessages['compact']}</Radio.Button>\r\n <Radio.Button value=\"1\">{languageMessages['detailed']}</Radio.Button>\r\n </Radio.Group>\r\n </div>\r\n <div className='common-toolbar'>\r\n <Dropdown key=\"1\" overlay={menu} disabled={!this.state.saveStock}><Button size='small'>{languageMessages['add.choice']}<Icon type=\"down\" /></Button></Dropdown>\r\n <CSVLink key=\"2\" data={this.state.csvData} filename={this.state.fileName} className=\"ant-btn ant-btn-sm\" style={{ marginLeft: '10px' }} target=\"_blank\">\r\n <Icon type=\"download\" /><span>{languageMessages['downloads.alerts']}</span>\r\n </CSVLink>\r\n </div>\r\n </div>\r\n <Table rowSelection={rowSelection}\r\n bordered size='small' scroll={tableScroll}\r\n columns={displayMode === '0' ? compactColumns : columns}\r\n dataSource={displayMode === '0' ? compactDataSource : dataSource}\r\n pagination={{ pageSize: 30 }} />\r\n </Layout>\r\n </Layout>\r\n </Spin>\r\n </Content>)\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.filter;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyFilterPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, Row, Col } from 'antd';\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\";\r\n\r\nimport LuisPage from '../../pannels/stock/LuisPage';\r\nimport SymbolGroupPage from './components/SymbolGroupPage';\r\nimport USSymbolGroupPage from './components/USSymbolGroupPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst Item = ({ entity: { name, txt, char } }) => <Row><Col span={7}>{name}</Col><Col span={17}>{txt}</Col></Row>;\r\n\r\nvar timer = null;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\nclass UpdateFilterPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n let tmpStockGroups = window.webType === 'US' ? '10000' : '3180';\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'STOCK',\r\n\r\n lastTimes: 0,\r\n\r\n caretPosition: 0,\r\n\r\n stockGroups: tmpStockGroups,\r\n\r\n filterId: 0,\r\n filterName: '',\r\n filterString: '',\r\n\r\n alertInterval: '400',\r\n state: 0,\r\n\r\n sourceFilterId: 0,\r\n validPeriodBarCount: '',\r\n validPeriodBarInterval: '',\r\n\r\n modalVisible: false,\r\n modalTitle: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n stockCount: 0,\r\n\r\n spinLoadding: true,\r\n\r\n error: '',\r\n filterError: '',\r\n\r\n textareaClass: 'common-textarea',\r\n alertIntervalClass: '',\r\n\r\n isLuisAnalysis: false,\r\n\r\n isSendFilter: false,\r\n\r\n filterRequestLoadding: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener(\"callFilterRequestResult\", this.callFilterRequestResult);\r\n\r\n this.rta.setCaretPosition(this.state.filterString.length);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, filterRequestLoadding: false });\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n filtersCache[filterResult.FilterId] = filterResult.FilterName;\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n\r\n var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyFilter}>{languageMessages['my filter']}</a>\"</span>;\r\n this.timerModal(languageMessages['update.filter.success'], content);\r\n } else {\r\n message.error(filterResult.Description);\r\n }\r\n\r\n this.setState({\r\n filterRequestLoadding: false,\r\n modalVisible: false,\r\n filterId: filterResult.FilterId,\r\n filterName: filterResult.FilterName,\r\n });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n if (history.location.state !== undefined) {\r\n let fId = history.location.state.fId;\r\n\r\n this.props.dispatch({ type: \"action_get_filter_sectors\", payload: { UserId: this.user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups, fId: fId } });\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, useFormulaData, filter, sourceFilter, filterGroup } = props;\r\n\r\n switch (status) {\r\n case 'luis_success':\r\n var stockPoolKey = 'STOCK';\r\n var filterId = 0;\r\n var filterName = '';\r\n var filterString = '';\r\n var alertInterval = '';\r\n var stockGroups = '';\r\n var state = 0;\r\n\r\n var sourceFilterId = 0;\r\n var validPeriodBarCount = '';\r\n var validPeriodBarInterval = '';\r\n\r\n if (filter !== undefined && filter !== null) {\r\n filterId = filter['filterId'];\r\n filterName = filter['filterName'];\r\n filterString = filter['filterString'];\r\n alertInterval = filter['alertInterval'];\r\n stockGroups = filter['symbolGroupId'];\r\n state = filter['state'];\r\n \r\n if (stockGroups > 0) {\r\n stockPoolKey = 'CUSTOM_GROUPS';\r\n }\r\n }\r\n \r\n if (filterGroup !== undefined && filterGroup !== null && filterGroup !== '') {\r\n if (window.webType == 'US') {\r\n if (filterGroup == '30000') {\r\n stockPoolKey = 'FUND';\r\n }\r\n } else {\r\n if (filterGroup == '4006' || filterGroup == '4030' || filterGroup == '4031' || filterGroup == '4032' || filterGroup == '4033' || filterGroup == '4034' || filterGroup == '4035') {\r\n stockPoolKey = 'FUND';\r\n }\r\n }\r\n\r\n stockGroups = filterGroup;\r\n }\r\n \r\n if (sourceFilter !== undefined && sourceFilter !== null) {\r\n stockPoolKey = 'UPSTREAM_FILTER';\r\n\r\n sourceFilterId = sourceFilter['sourceFilterId'];\r\n validPeriodBarCount = sourceFilter['ValidPeriodBarCount'];\r\n validPeriodBarInterval = sourceFilter['ValidPeriodBarInterval'];\r\n }\r\n\r\n this.setState({ spinLoadding: false, stockPoolKey, filterId, filterName, filterString, alertInterval, stockGroups, state, sourceFilterId, validPeriodBarCount, validPeriodBarInterval });\r\n break;\r\n case 'get_filter_sectors_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'analysis_success':\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'analysis_fail':\r\n var error = languageMessages['Intelligent.analysis.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['unable.get.intelligent.analysis.results'];\r\n break;\r\n case 3:\r\n error = languageMessages['connection.analytics.service.failed'];\r\n break;\r\n case 4:\r\n error = languageMessages['request.analytics.failed'];\r\n break;\r\n case 5:\r\n error = languageMessages['user.exception'];\r\n break;\r\n case 6:\r\n error = languageMessages['request.analysis.timeout'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n\r\n this.setState({ isLuisAnalysis: false });\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n filterError: '',\r\n });\r\n break;\r\n case 'clear_filter_string':\r\n this.setState({ filterString: '' });\r\n break;\r\n case 'use_formula':\r\n this.setState({\r\n isLuisAnalysis: useFormulaData.isLuisAnalysis,\r\n filterString: useFormulaData.filterString\r\n }, () => {\r\n if (!useFormulaData.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey,\r\n sourceFilterId: data.sourceFilterId,\r\n validPeriodBarCount: data.validPeriodBarCount,\r\n validPeriodBarInterval: data.validPeriodBarInterval\r\n }, () => {\r\n this.checkFilterParams();\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleLuisAnalysis(data) {\r\n this.setState({\r\n isLuisAnalysis: data.isLuisAnalysis\r\n }, () => {\r\n if (!data.isLuisAnalysis) this.rta.setCaretPosition(this.state.filterString.length);\r\n });\r\n }\r\n\r\n jumpMyFilter = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'myFilter');\r\n history.push({ pathname: '/mf', state: { fId: this.state.filterId } });\r\n }\r\n\r\n toMyFilter = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'myFilter');\r\n history.push(\"/mf\");\r\n }\r\n\r\n onChangeInterval = (e) => {\r\n e.preventDefault();\r\n\r\n var alertInterval = e.target.value;\r\n\r\n this.checkInterval(alertInterval);\r\n }\r\n\r\n onBlurInterval = (e) => {\r\n e.preventDefault();\r\n\r\n var alertInterval = e.target.value;\r\n\r\n this.checkInterval(alertInterval);\r\n }\r\n\r\n checkInterval(alertInterval) {\r\n alertInterval = alertInterval.replace(/[^\\d]/g, \"\");\r\n\r\n if (alertInterval.length > 0) {\r\n alertInterval = alertInterval.slice(0, 12);\r\n alertInterval = parseInt(alertInterval);\r\n\r\n alertInterval = alertInterval + \"\";\r\n }\r\n\r\n this.setState({ alertInterval }, () => {\r\n this.checkFilterParams();\r\n });\r\n }\r\n\r\n checkFilterParams() {\r\n let { stockPoolKey, stockGroups, filterString, alertInterval, sourceFilterId, validPeriodBarCount } = this.state;\r\n\r\n var error = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n break;\r\n case 'FUND':\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n if (stockGroups === '') {\r\n error = 'STOCK_GROUP_ERROR';\r\n }\r\n break;\r\n case 'UPSTREAM_FILTER':\r\n if (sourceFilterId === 0) {\r\n error = 'UPSTREAM_FILTER_ERROR';\r\n }\r\n if (validPeriodBarCount === '') {\r\n error = error === '' ? 'UPSTREAM_FILTER_BAR_COUNT_ERROR' : error + ',' + 'UPSTREAM_FILTER_BAR_COUNT_ERROR';\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var textareaClass = 'common-textarea';\r\n if (filterString === '') {\r\n textareaClass = 'common-textarea common-textarea-error';\r\n }\r\n\r\n var alertIntervalClass = '';\r\n if (alertInterval === '') {\r\n alertIntervalClass = 'has-error';\r\n }\r\n\r\n if (error === '' && textareaClass === 'common-textarea' && alertIntervalClass === '') {\r\n this.setState({ isSendFilter: true, error, textareaClass, alertIntervalClass });\r\n return true;\r\n } else {\r\n this.setState({ isSendFilter: false, error, textareaClass, alertIntervalClass });\r\n return false;\r\n }\r\n }\r\n\r\n onSaveFilter = () => {\r\n\r\n var state = this.checkFilterParams();\r\n if (!state) return;\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'update filter', 'filter', 'Update filter']);\r\n\r\n this.setState({\r\n modalTitle: languageMessages['edit filter'],\r\n modalVisible: true,\r\n validateStatus: '',\r\n validateMessage: ''\r\n });\r\n }\r\n\r\n handleSaveFilter = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { stockGroups, stockPoolKey, filterId, filterName, filterString, alertInterval, sourceFilterId, validPeriodBarCount, validPeriodBarInterval } = this.state;\r\n\r\n if (filterName === '') {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['Filter name cannot be empty'],\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n this.setState({ filterRequestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'filter',\r\n Action: 'update',\r\n ConceptId: 0,\r\n UserId: this.user.username,\r\n FilterId: filterId,\r\n FilterName: filterName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n AlertInterval: alertInterval,\r\n SourceFilterId: sourceFilterId,\r\n ValidPeriodBarCount: validPeriodBarCount,\r\n ValidPeriodBarInterval: validPeriodBarInterval,\r\n State: 1\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n handleCancelFilter = () => {\r\n this.setState({\r\n modalTitle: '',\r\n modalVisible: false,\r\n filterName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n onCaretPositionChangeHandle = position => {\r\n this.setState({\r\n caretPosition: position\r\n });\r\n }\r\n\r\n onChangeFilterString = e => {\r\n this.setState({\r\n filterString: e.target.value,\r\n filterError: '',\r\n textareaClass: 'common-textarea',\r\n }, () => {\r\n this.checkFilterParams();\r\n });\r\n }\r\n\r\n buildFilterString() {\r\n var promise = new Promise(resolve => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n var { filterString, caretPosition } = this.state;\r\n\r\n var textareaValue = filterString.slice(0, caretPosition);\r\n var startPosition = textareaValue.search(/[A-Za-z]*$/);\r\n var autoMatchData = textareaValue.slice(startPosition, caretPosition);\r\n\r\n var dataSource = [];\r\n if (autoMatchData !== '') {\r\n //var filterFunctionsCache = FilterFunction || [];\r\n var filterFunctionsCache = JSON.parse(sessionStorage.getItem(\"FilterFunctionsCache\") || '[]') || [];\r\n if (filterFunctionsCache.length > 0) {\r\n var filterFunctions = filterFunctionsCache.filter(function (e) { return e.cn.toLowerCase().indexOf(autoMatchData.toLowerCase()) !== -1; });\r\n if (filterFunctions.length > 0) {\r\n for (var k in filterFunctions) {\r\n if (filterFunctions[k].m2 === '') continue;\r\n var mouseDiscr = locale.toLowerCase() === 'en-us' ? filterFunctions[k].men : filterFunctions[k].mcn;\r\n dataSource.push({\r\n key: filterFunctions[k].n,\r\n name: filterFunctions[k].cn,\r\n txt: mouseDiscr + languageMessages['example'] + filterFunctions[k].m2,\r\n char: filterFunctions[k].m2,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(dataSource);\r\n }, 200);\r\n });\r\n return promise;\r\n }\r\n\r\n onChangeFilterName = e => {\r\n e.preventDefault();\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var filterName = e.target.value;\r\n if (filterName !== '') {\r\n filterName = filterName.slice(0, 100);\r\n\r\n //var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n var pattern = /^[A-Za-z0-9_]+$/gi;\r\n if (!pattern.test(filterName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['filter.name.format'];\r\n }\r\n }\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n filterName: filterName\r\n });\r\n }\r\n\r\n clearFilterString = () => {\r\n if (this.props.status === 'clear_filter_string') {\r\n this.setState({ filterString: '' });\r\n } else {\r\n this.props.dispatch({ type: \"action_clear_filterString\" });\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, filterString, stockGroups } = this.state;\r\n var { sectors, stockCount, sourceFilter } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n sourceFilter: sourceFilter,\r\n }\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n return (<Content className='main-container'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['vernacular title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['vernacular title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['vernacular description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['edit filter']}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.toMyFilter}>{languageMessages['my filter']}</Button>\r\n ]} />\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n onOk={this.handleSaveFilter}\r\n confirmLoading={this.state.filterRequestLoadding}\r\n onCancel={this.handleCancelFilter}>\r\n <Form {...formItemLayout}>\r\n <Form.Item label={languageMessages['strategy.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['filter.name.placeholder']} id={this.state.validateStatus} value={this.state.filterName} disabled onChange={this.onChangeFilterName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n <Layout className='cont-content luis-main-content'>\r\n {window.webType === 'CN' ? <SymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} /> : <USSymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />}\r\n <LuisPage {...this.props} filterString={filterString} isFilterScan={false} LuisAnalysis={this.handleLuisAnalysis.bind(this)} />\r\n\r\n <div id=\"textareaAnchor\" className='common-title'>\r\n <Divider type=\"vertical\" /><span>{languageMessages['formula.editing']}</span>\r\n <Button size='small' onClick={this.clearFilterString} style={{ marginLeft: '20px' }}>{languageMessages['clear']}</Button>\r\n </div>\r\n <ReactTextareaAutocomplete rows={10} className={this.state.textareaClass}\r\n value={filterString}\r\n onChange={this.onChangeFilterString}\r\n loadingComponent={() => <span></span>}\r\n placeholder={languageMessages['use.formula.generated.or.vernacular.stock.selection']}\r\n minChar={0}\r\n trigger={{\r\n 'w': {\r\n dataProvider: token => {\r\n return this.buildFilterString();\r\n },\r\n component: Item,\r\n output: item => ({ text: item.char, caretPosition: \"next\" })\r\n }\r\n }}\r\n ref={(rta) => { this.rta = rta; }}\r\n onCaretPositionChange={this.onCaretPositionChangeHandle} />\r\n\r\n <div style={{ padding: '10px 0' }}>\r\n {'Alert interval'}\r\n <span style={{ padding: '0 10px' }} className={this.state.alertIntervalClass}>\r\n <Input style={{ width: 80 }} size='small' value={this.state.alertInterval} disabled onChange={this.onChangeInterval} onBlur={this.onBlurInterval} />\r\n </span>\r\n {'Sec'}\r\n </div>\r\n\r\n <div style={{ padding: '0' }}>\r\n <Button size='small' onClick={this.onSaveFilter} disabled={!this.state.isSendFilter}>\r\n {languageMessages['save filter']}\r\n </Button>\r\n </div>\r\n </Layout>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.filter;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(UpdateFilterPage);\r\nexport { page as default }","var statisticsOption = {\r\n legend: {\r\n data: [],\r\n bottom: 0,\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n position: function (pt) {\r\n return [pt[0], '10%'];\r\n },\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n title: {\r\n left: 'center',\r\n text: '',\r\n top: 10\r\n },\r\n xAxis: {\r\n type: 'category',\r\n axisTick: { show: false },\r\n axisLabel: { interval: 0, rotate: 30 },\r\n data: []\r\n //data: [1,2,3,4,5]\r\n },\r\n yAxis: {\r\n type: 'value',\r\n name: '',\r\n minInterval: 0\r\n },\r\n series: [{\r\n type: 'bar',\r\n barWidth: '5%',\r\n label: {\r\n show: true,\r\n position: 'top',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n color: '',\r\n markPoint: {\r\n symbol: 'pin',\r\n symbolSize: 1,\r\n itemStyle: { color: '#fff' },\r\n label: { rotate: 90, color: '#fff' },\r\n data: []\r\n },\r\n data: []\r\n //data: [1000, 700, 800, 600, 780]\r\n }]\r\n};\r\n\r\nexport { statisticsOption }","var equityOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n\r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: { color: '#666' },\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n min: 0,\r\n max: 1100000,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: \"\"\r\n }],\r\n\r\n series: [\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n itemStyle: {\r\n normal: {\r\n color: '#CE0000'\r\n }\r\n },\r\n symbol: 'none',\r\n markLine: {\r\n symbol: 'none',\r\n label: {\r\n position: 'end'\r\n },\r\n silent: true,\r\n data: [{\r\n yAxis: 1000000.00,\r\n lineStyle: {\r\n color: '#FF8000'\r\n }\r\n }]\r\n },\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: 'Darkgreen'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n },\r\n {\r\n smooth: false,\r\n name: '',\r\n type: 'line',\r\n areaStyle: {},\r\n itemStyle: {\r\n normal: {\r\n color: '#90EE90'\r\n }\r\n },\r\n symbol: 'none',\r\n data: []\r\n }\r\n ]\r\n};\r\n\r\nexport { equityOption }","var incomeOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 30,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n \r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLine: {\r\n show: true,\r\n onZero: false,\r\n lineStyle: {\r\n color: '666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n name: ''\r\n }],\r\n\r\n series: []\r\n};\r\n\r\nexport { incomeOption }","var fundsOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n axisPointer: {\r\n type: 'cross'\r\n },\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n legend: {\r\n top: 22,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n \r\n xAxis: [{\r\n type: 'category',\r\n boundaryGap: false,\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLine: {\r\n show: true,\r\n onZero: false,\r\n lineStyle: {\r\n color: '666'\r\n }\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n data: [],\r\n name: ''\r\n }],\r\n\r\n yAxis: [{\r\n type: 'value',\r\n nameTextStyle: {\r\n color: '#666'\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: \"#666\"\r\n }\r\n },\r\n splitArea: {\r\n show: true,\r\n interval: '1'\r\n },\r\n /**\r\n axisPointer: {\r\n snap: true\r\n },\r\n */\r\n name: ''\r\n }],\r\n\r\n series: []\r\n};\r\n\r\nexport { fundsOption }","var wtOption = {\r\n title: {\r\n left: 'center',\r\n text: '',\r\n },\r\n animation: true,\r\n dataZoom: {\r\n show: false,\r\n realtime: false,\r\n start: 0,\r\n end: 100\r\n },\r\n legend: {\r\n top: 22,\r\n data: [],\r\n width: 'auto',\r\n itemGap: 30,\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n backgroundColor: \"rgba(255,255,255,0.8)\",\r\n borderWidth: \"1\",\r\n axisPointer: {\r\n type: 'cross'\r\n },\r\n borderColor: \"#aaa\",\r\n textStyle: {\r\n color: \"#666\"\r\n },\r\n },\r\n toolbox: {\r\n show: false,\r\n feature: {\r\n mark: { show: false },\r\n dataView: { show: true, readOnly: false },\r\n magicType: ['line', 'bar'],\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n calculable: true,\r\n\r\n xAxis: {\r\n type: 'category',\r\n axisTick: { show: false },\r\n axisLabel: { interval: 0, rotate: 30 },\r\n data: [],\r\n },\r\n\r\n yAxis: {},\r\n\r\n series: []\r\n};\r\n\r\nexport { wtOption }","import { statisticsOption } from './statistics'\r\nimport { equityOption } from './equity'\r\nimport { incomeOption } from './income'\r\nimport { fundsOption } from './funds'\r\nimport { wtOption } from './wt'\r\n\r\nfunction deepCopy(obj, cache = []) {\r\n function find(list, f) {\r\n return list.filter(f)[0]\r\n }\r\n\r\n // just return if obj is immutable value\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n // if obj is hit, it is in circular structure\r\n const hit = find(cache, c => c.original === obj)\r\n if (hit) {\r\n return hit.copy\r\n }\r\n\r\n const copy = Array.isArray(obj) ? [] : {}\r\n // put the copy into cache at first\r\n // because we want to refer it in recursive deepCopy\r\n cache.push({\r\n original: obj,\r\n copy\r\n })\r\n\r\n Object.keys(obj).forEach(key => {\r\n copy[key] = deepCopy(obj[key], cache)\r\n })\r\n\r\n return copy\r\n}\r\n\r\nfunction getChartOption(chartName, chartData) {\r\n let option = null\r\n let min = 0\r\n let max = 999\r\n switch (chartName) {\r\n case \"wt\":\r\n option = wtOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n //option.xAxis.name = chartData['xName']\r\n option.xAxis.data = chartData['xData']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n var w = data[i].data.length;\r\n w = w * 5 /// count\r\n if (count > 1) w = w * 0.75\r\n\r\n option.series.push({\r\n type: 'bar',\r\n barGap: 0.2,\r\n name: data[i].name,\r\n barWidth: w + \"%\",\r\n //color: data[i].color,\r\n data: data[i].data\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"grid\":\r\n option = statisticsOption\r\n \r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 0\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n\r\n option.series = [];\r\n var count = data.length\r\n if (count > 0) {\r\n for (var i = 0; i < count; i++) {\r\n var w = data[i]['data'].length;\r\n w = w * 5 /// count\r\n if (count > 1) w = w * 0.75\r\n\r\n option.series.push({\r\n type: 'bar',\r\n barGap: 0.2,\r\n name: chartData['name'][i],\r\n barWidth: w + \"%\",\r\n label: {\r\n show: true,\r\n position: 'top',\r\n //align: 'left',\r\n //verticalAlign: 'middle',\r\n //rotate: 90,\r\n //formatter: '{c}',\r\n textStyle: {\r\n color: '#666'\r\n }\r\n },\r\n color: chartData['color'][i],\r\n markPoint: {\r\n symbol: 'pin',\r\n symbolSize: 1,\r\n itemStyle: { color: data[i]['markPoint']['color'] },\r\n label: { rotate: 90, color: '#fff' },\r\n data: data[i]['markPoint']['data']\r\n },\r\n data: data[i]['data']\r\n });\r\n\r\n legend.push(chartData['name'][i]);\r\n }\r\n }\r\n\r\n option.legend.data = legend;\r\n break;\r\n case \"statistics\":\r\n option = statisticsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.legend.data = [];\r\n \r\n option.xAxis.data = chartData['xData']\r\n option.xAxis.axisLabel.rotate = 30\r\n option.yAxis.name = chartData['yName']\r\n option.yAxis.minInterval = chartData['minInterval']\r\n\r\n option.series[0].type = 'bar';\r\n option.series[0].name = '';\r\n\r\n var w = chartData['data'].length;\r\n w = w * 5\r\n option.series[0].barWidth = w + \"%\";\r\n \r\n option.series[0].color = chartData['color']\r\n option.series[0].data = chartData['data']\r\n \r\n option.series[0].markPoint.itemStyle.color = chartData['markPoint']['color']\r\n option.series[0].markPoint.data = chartData['markPoint']['data']\r\n break;\r\n case \"income\":\r\n option = incomeOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n option.yAxis[0].name = chartData['yName']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series.push({\r\n smooth: false,\r\n name: data[i].name,\r\n type: 'line',\r\n color: data[i].color,\r\n symbol: 'none',\r\n data: data[i].data\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"funds\":\r\n option = fundsOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n option.yAxis[0].name = chartData['yName']\r\n\r\n var data = chartData['data'];\r\n\r\n option.series = [];\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series.push({\r\n smooth: false,\r\n name: data[i].name,\r\n type: 'line',\r\n color: data[i].color,\r\n symbol: 'none',\r\n data: data[i].data,\r\n markArea: {\r\n data: chartData['markAreaData']\r\n }\r\n });\r\n\r\n legend.push(data[i].name);\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n break;\r\n case \"equity\":\r\n option = equityOption\r\n\r\n option.title.text = chartData['sName']\r\n\r\n option.xAxis[0].name = chartData['xName']\r\n option.xAxis[0].data = chartData['xData']\r\n\r\n min = 0\r\n max = 999\r\n var originFund = 0;\r\n\r\n var data = chartData['data'];\r\n\r\n var legend = [];\r\n var count = data.length\r\n for (var i = 0; i < count; i++) {\r\n option.series[i].name = data[i].name\r\n option.series[i].data = data[i].data == null ? [] : data[i].data;\r\n \r\n legend.push(data[i].name);\r\n \r\n if (option.series[i].data.length > 0) {\r\n if (min == 0 || Math.min.apply(null, option.series[i].data) < min)\r\n min = Math.min.apply(null, option.series[i].data)\r\n if (max == 0 || Math.max.apply(null, option.series[i].data) > max)\r\n max = Math.max.apply(null, option.series[i].data)\r\n\r\n if (data[i].type === 1) {\r\n originFund = data[i].data[0]\r\n option.series[i].markLine.data[0].yAxis = originFund\r\n }\r\n }\r\n }\r\n\r\n option.legend.data = legend;\r\n\r\n min = parseInt(Math.floor(min));\r\n max = parseInt(Math.ceil(max));\r\n \r\n if ((Math.abs(min)).toString().length > 1) {\r\n if (originFund != undefined) originFund = parseInt(originFund.toString());\r\n\r\n var len = Math.abs(originFund);\r\n len = len.toString().length - 2;\r\n\r\n len = Math.pow(10, len)\r\n len = parseInt(len.toString())\r\n\r\n if (min < 0) {\r\n min = 0;\r\n } else {\r\n min = parseInt(min / len) * len;\r\n }\r\n\r\n max = parseInt(max / len + 1) * len;\r\n }\r\n\r\n option.yAxis[0].min = min\r\n option.yAxis[0].max = max\r\n break;\r\n \r\n }\r\n return deepCopy(option)\r\n}\r\n\r\nexport { getChartOption }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Divider, Button, message, Select, Spin } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar incomes = {\r\n 'sName': languageMessages['incomeCurve'],\r\n 'xName': languageMessages['date'],\r\n 'xData': [],\r\n 'yName': languageMessages['totalRet'] + '(%)',\r\n 'data': [\r\n {\r\n 'name': languageMessages['strategyGains'],\r\n 'color': '#ee6666',\r\n 'data': []//[0.00, - 0.18, -0.55, 0.19, -0.96, 0.29, 0.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStockIncome'],\r\n 'color': '#5470c6',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n },\r\n {\r\n 'name': languageMessages['individualStocks+strategyStackingIncome'],\r\n 'color': '#990000',\r\n 'data': []//[0.73, 1.06, 1.76, 3.19, 1.98, 3.67, 3.26]\r\n }\r\n ],\r\n};\r\n\r\nvar wts = {\r\n 'sName': 'wT',\r\n 'xData': [],\r\n 'data': []\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass PortfolioResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"income\": null,\r\n \"wt\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: false,\r\n\r\n statisticsResult: [],\r\n\r\n portfolioDataSource: [],\r\n dataSource: []\r\n\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n \r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n\r\n this.charts = {\r\n \"income\": null,\r\n \"wt\": null\r\n };\r\n\r\n incomes.xData = [];\r\n incomes.data[0].data = [];\r\n incomes.data[1].data = [];\r\n incomes.data[2].data = [];\r\n \r\n wts.xData = [];\r\n wts.data = [];\r\n \r\n var dataSource = [];\r\n \r\n var portfolioDataSource = [];\r\n\r\n if (statisticsResult.portfolioOptResult != null && statisticsResult.portfolioOptResult.length > 0) {\r\n var portfolioOptResult = statisticsResult.portfolioOptResult;\r\n \r\n var index = 1;\r\n for (var ii in portfolioOptResult) {\r\n portfolioDataSource.push({\r\n key: index,//trades[item].backtestId,\r\n section: portfolioOptResult[ii].S,\r\n maximizing: portfolioOptResult[ii].R,\r\n minimize: portfolioOptResult[ii].V,\r\n benchmarking: portfolioOptResult[ii].B,\r\n });\r\n \r\n\r\n var wtData = [];\r\n \r\n var wT = portfolioOptResult[ii].wT;\r\n for (let key in wT) {\r\n wtData.push(wT[key]);\r\n\r\n if(index == 1) wts.xData.push(key);\r\n }\r\n \r\n wts.data.push({ 'data': wtData, 'name': portfolioOptResult[ii].S });\r\n\r\n index++;\r\n }\r\n }\r\n\r\n var items = this.setPortfolioResult(statisticsResult);\r\n\r\n incomes = items.incomes;\r\n dataSource = items.dataSource;\r\n\r\n this.setIncomeData(\"income\", incomes);\r\n this.setWtData(\"wt\", wts);\r\n\r\n this.setState({ portfolioDataSource, dataSource, statisticsResult });\r\n }\r\n\r\n componentWillUnmount() {\r\n }\r\n\r\n resizeChart() {\r\n var incomeChart = this.charts['income'];\r\n var wtChart = this.charts['wt'];\r\n \r\n window.onresize = function () {\r\n if (incomeChart != null) incomeChart.resize();\r\n if (wtChart != null) wtChart.resize();\r\n }\r\n }\r\n\r\n setWtData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n setIncomeData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setPortfolioResult(statisticsResult) {\r\n\r\n if (statisticsResult.equityCurve != null) {\r\n var rateOfReturn = statisticsResult.equityCurve.rateOfReturn;\r\n var bRateOfReturn = statisticsResult.equityCurve.bRateOfReturn;\r\n\r\n incomes.xData = statisticsResult.equityCurve.date;\r\n //incomes.data[0].name = 'ç–略收益';//window.webType === 'US' ? languageMessages['SP500'] : languageMessages['CSI300'];\r\n incomes.data[0].data = rateOfReturn;\r\n //incomes.data[1].name = '个股收益';//strategyName;\r\n incomes.data[1].data = bRateOfReturn;\r\n\r\n var superimposedIncome = [];\r\n for (var ii in rateOfReturn) {\r\n var tmp = parseFloat(rateOfReturn[ii]) + parseFloat(bRateOfReturn[ii]);\r\n superimposedIncome.push(this.keepDecimals(tmp.toString(), ''));\r\n }\r\n\r\n incomes.data[2].data = superimposedIncome;\r\n }\r\n \r\n var dataSource = [];\r\n if (statisticsResult.trades != null && statisticsResult.trades.length > 0) {\r\n var trades = statisticsResult.trades;\r\n \r\n \r\n var sequence = 1;\r\n var index = 1;\r\n for (var ii in trades) {\r\n var symbol = '';\r\n var pnl = parseFloat(trades[ii].pnl);\r\n var pnlPercent = parseFloat(trades[ii].pnlPercent);\r\n\r\n var direction = '';\r\n var tradeTime = trades[ii].entryDatetime;\r\n var strikePrice = '';\r\n var volume = Math.abs(trades[ii].quantity);\r\n var turnover = 0;\r\n if (trades[ii].direction == 'L') {\r\n direction = 'L';\r\n } else {\r\n direction = 'S';\r\n }\r\n\r\n tradeTime = trades[ii].entryDatetime;\r\n strikePrice = trades[ii].entryPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: sequence,\r\n symbolName: symbol,\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: '',\r\n pnlp: ''\r\n });\r\n\r\n index++;\r\n\r\n if (trades[ii].direction == 'L') {\r\n direction = 'S';\r\n } else {\r\n direction = 'L';\r\n }\r\n\r\n tradeTime = trades[ii].exitDatetime;\r\n strikePrice = trades[ii].exitPrice;\r\n var tmpStrikePrice = parseFloat(strikePrice);\r\n turnover = volume * tmpStrikePrice;\r\n\r\n dataSource.push({\r\n key: index,//trades[item].backtestId,\r\n sequence: '',\r\n symbolName: '',\r\n tradeTime: tradeTime,\r\n strikePrice: strikePrice,\r\n direction: direction,\r\n volume: volume,\r\n turnover: turnover.toFixed(2),\r\n pnl: pnl.toFixed(2),\r\n pnlp: pnlPercent.toFixed(2)\r\n });\r\n\r\n sequence++;\r\n index++;\r\n }\r\n }\r\n\r\n return { incomes, dataSource };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, statisticsResult } = props;\r\n \r\n switch (status) {\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n render() {\r\n var { portfolioDataSource, dataSource } = this.state;\r\n\r\n const portfolioColumns = [\r\n {\r\n title: 'Section',\r\n dataIndex: 'section',\r\n align: 'center',\r\n //width: 200\r\n }, {\r\n title: languageMessages['Maximizing returns'],\r\n dataIndex: 'maximizing',\r\n align: 'right',\r\n sorter: (a, b) => a.maximizing - b.maximizing,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['Minimize variance'],\r\n dataIndex: 'minimize',\r\n align: 'right',\r\n sorter: (a, b) => a.minimize - b.minimize,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n }, {\r\n title: languageMessages['Benchmarking income'],\r\n dataIndex: 'benchmarking',\r\n //fixed: 'right',\r\n align: 'right',\r\n sorter: (a, b) => a.benchmarking - b.benchmarking,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n ];\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n return (<Content>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['Portfolio opt info']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={portfolioColumns}\r\n dataSource={portfolioDataSource} pagination={false} />\r\n\r\n <div id=\"wt\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 40 ? { pageSize: 40 } : false} />\r\n </Spin>\r\n \r\n </Content>);\r\n }\r\n}\r\n\r\nexport { PortfolioResult as default }\r\n","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, DatePicker, Radio, Checkbox, Select } from 'antd';\r\nimport moment, { max } from 'moment';\r\n\r\nimport PortfolioResult from './PortfolioResult';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst SelectWidth = 80;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass PortfolioPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.customGroupsData = [];\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'CUSTOM_GROUPS',\r\n\r\n customGroups: '-',\r\n\r\n barinterval: 'D',\r\n tradePeriod: false,\r\n tradePeriodValue: '',\r\n tradePeriodUnit: 'M',\r\n\r\n lastTimes: 0,\r\n\r\n startDate: moment().add(-90, 'days').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n endOpen: false,\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n backtestStatus: 0,\r\n statisticsResult: {},\r\n\r\n isStartPortfolio: false,\r\n\r\n portfolioState: false,\r\n\r\n spinLoadding: true,\r\n\r\n filterError: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n\r\n emitter.addListener('callPortfolioOptStatus', this.callPortfolioOptStatus);\r\n emitter.addListener(\"callPortfolioOptError\", this.callPortfolioOptError);\r\n emitter.addListener('callPortfolioOptLastTimes', this.callPortfolioOptLastTimes);\r\n emitter.addListener('callPortfolioOptResult', this.callPortfolioOptResult);\r\n \r\n }\r\n\r\n callPortfolioOptError = (status) => {\r\n //message.error('portfolio opt , Error:' + status);\r\n this.setState({ backtestStatus: 0, portfolioState: false, filterError: strReplace(languageMessages['portfolioError'], { '{errorCode}': status }) });\r\n }\r\n\r\n callPortfolioOptStatus = (status) => {\r\n /**\r\n * if (status == 1) {\r\n message.success('portfolio success');\r\n } else {\r\n message.error('portfolio fail');\r\n }\r\n */ \r\n\r\n this.setState({ backtestStatus: 1 });\r\n }\r\n\r\n callPortfolioOptLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 2 });\r\n }\r\n\r\n callPortfolioOptResult = (result) => {\r\n var statisticsResult = result;\r\n\r\n this.setState({ statisticsResult, portfolioState: false, backtestStatus: 3 });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n\r\n emitter.removeListener('callPortfolioOptStatus', this.callPortfolioOptStatus);\r\n emitter.removeListener('callPortfolioOptError', this.callPortfolioOptError);\r\n emitter.removeListener('callPortfolioOptLastTimes', this.callPortfolioOptLastTimes);\r\n emitter.removeListener('callPortfolioOptResult', this.callPortfolioOptResult);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n let { customGroups } = this.state;\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('customGroup', customGroups);\r\n\r\n this.setState({ customGroups, isStartPortfolio });\r\n }\r\n\r\n this.props.dispatch({ type: \"action_get_portfolio_info\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'p':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, permission, portfolioId } = props;\r\n\r\n switch (status) {\r\n case 'info_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'info_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'start_portfolio_success':\r\n console.log(portfolioId);\r\n break;\r\n case 'start_portfolio_fail':\r\n message.error('start portfolio fail');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n onMyPortfolio = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'mpo');\r\n history.push(\"/mpo\");\r\n }\r\n\r\n checkIsStartPortfolio(type, value) {\r\n let { customGroups, startDate, endDate } = this.state;\r\n\r\n var isStartPortfolio = false;\r\n switch (type) {\r\n case 'startDate':\r\n startDate = value;\r\n break;\r\n case 'endDate':\r\n endDate = value;\r\n break;\r\n case 'customGroup':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (customGroups != '-' && customGroups != '') {\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n if (oDate2.getTime() > oDate1.getTime()) {\r\n isStartPortfolio = true;\r\n }\r\n }\r\n\r\n return isStartPortfolio;\r\n }\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('startDate', startDate);\r\n\r\n this.setState({ startDate, isStartPortfolio });\r\n }\r\n\r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('endDate', endDate);\r\n\r\n this.setState({ endDate, isStartPortfolio, tradeDateStatus, tradeDateMessage });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate) || current < moment(endDate).add(-6, 'months'));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage });\r\n };\r\n\r\n handleCustomGroupsChange = value => {\r\n var isStartPortfolio = this.checkIsStartPortfolio('customGroup', value.key);\r\n\r\n this.setState({\r\n customGroups: value.key,\r\n isStartPortfolio\r\n });\r\n }\r\n\r\n onSelectBarInterval = e => {\r\n var barinterval = e.target.value;\r\n this.setState({ barinterval });\r\n }\r\n\r\n handleChangeTradePeriod = e => {\r\n var tradePeriod = e.target.checked;\r\n\r\n this.setState({ tradePeriod });\r\n }\r\n\r\n handleNumberChange = e => {\r\n var number = e.target.value;\r\n this.setState({ tradePeriodValue: number });\r\n }\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n var number = e.target.value;\r\n\r\n this.setState({ tradePeriodValue: number });\r\n }\r\n\r\n handleTradePeriodUnitChange = value => {\r\n\r\n this.setState({\r\n tradePeriodUnit: value.key,\r\n });\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n onStartPortfolio = () => {\r\n let { lastTimes, startDate, endDate, stockPoolKey, customGroups, barinterval, tradePeriod, tradePeriodValue, tradePeriodUnit } = this.state;\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Portfolio', 'Portfolio', 'Portfolio Stock']);\r\n\r\n if (this.user.username === undefined) {\r\n //saved to cache\r\n\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n \r\n var tmpTradePeriod = '';\r\n if (tradePeriod) {\r\n tmpTradePeriod = tradePeriodValue + ',' + tradePeriodUnit;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n portfolioState: true,\r\n filterError: '',\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'startPortfolio', userId: this.user.username,\r\n msg: {\r\n /**\r\n * FormDate: startDate,\r\n ToDate: endDate,\r\n SymbolGroupType: stockPoolKey,\r\n CustomSymbolGroupId: customGroups,\r\n Barinterval: barinterval,\r\n TradePeriod: tmpTradePeriod\r\n */\r\n Type: 'porrtfolioBacktest',\r\n f: startDate,\r\n t: endDate,\r\n sgt: stockPoolKey,\r\n csg: customGroups,\r\n bi: barinterval,\r\n tp: tmpTradePeriod\r\n }\r\n }\r\n });\r\n });\r\n\r\n /**\r\n this.props.dispatch({\r\n type: \"action_start_portfolio\", payload: {\r\n u: this.user.username,\r\n f: startDate,\r\n t: endDate,\r\n sgt: stockPoolKey,\r\n csg: customGroups,\r\n bi: barinterval,\r\n tp: tmpTradePeriod\r\n }\r\n });\r\n */\r\n }\r\n };\r\n\r\n render() {\r\n var { barinterval } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{'Portfolio'}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyPortfolio}>{languageMessages['my.portfolio']}</Button>\r\n ]} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestCondition']}</div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div style={{ marginBottom: '20px' }}>\r\n <RadioGroup onChange={this.onSelectBarInterval} value={barinterval}>\r\n <Radio value={'D'}>{languageMessages['Daily']}</Radio>\r\n <Radio value={'60'}>{languageMessages['60Min']}</Radio>\r\n </RadioGroup>\r\n </div>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Checkbox checked={this.state.tradePeriod} onChange={this.handleChangeTradePeriod}>{languageMessages['Whether to adjust the warehouse']}</Checkbox>\r\n </div>\r\n <div style={{ marginBottom: '20px', display: this.state.tradePeriod ? '' : 'none' }}>\r\n <Input type=\"text\" size='small' style={{ width: 80 }} value={this.state.tradePeriodValue} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['pleaseEnterGrids']} />\r\n <span style={{ marginLeft: '10px' }}>\r\n <Select labelInValue\r\n size='small'\r\n defaultValue={{ key: this.state.tradePeriodUnit }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleTradePeriodUnitChange}>\r\n <Option key='M'>{languageMessages['Month']}</Option>\r\n <Option key='W'>{languageMessages['Week']}</Option>\r\n <Option key='D'>{languageMessages['Daily']}</Option>\r\n <Option key='H'>{languageMessages['Hour']}</Option>\r\n </Select>\r\n </span>\r\n </div>\r\n <Button size='small' loading={this.state.portfolioState} disabled={!this.state.isStartPortfolio} onClick={this.onStartPortfolio}>\r\n {languageMessages['startPortfolio']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{languageMessages['query prompt']}</span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{Object.keys(this.state.statisticsResult).length > 0 ? languageMessages['queryingCompletedConsuming'] : languageMessages['No Portfolio optimization results']}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {Object.keys(this.state.statisticsResult).length == 0 || (<PortfolioResult dispatch={this.props.dispatch} status={this.props.status} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.portfolio;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(PortfolioPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, Button, Spin, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport PortfolioResult from './PortfolioResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nclass MyPortfolioPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n portfolioItems: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n \r\n statisticsResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_portfolio_items\", payload: { u: userId } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(portfolioItems) {\r\n var statisticsResult = {};\r\n var rowId = -1;\r\n var dataSource = [];\r\n if (portfolioItems.length > 0) {\r\n var sequence = 1;\r\n for (var item in portfolioItems) {\r\n if (rowId === -1) {\r\n rowId = portfolioItems[item].portfolioId;\r\n statisticsResult = portfolioItems[item].backtestResult;\r\n\r\n statisticsResult.portfolioId = portfolioItems[item].portfolioId;\r\n statisticsResult.portfolioOptResult = portfolioItems[item].result;\r\n }\r\n \r\n dataSource.push({\r\n key: portfolioItems[item].portfolioId,\r\n sequence: sequence,\r\n created: portfolioItems[item].createDate,\r\n fromDate: portfolioItems[item].fromDate,\r\n toDate: portfolioItems[item].toDate,\r\n barInterval: portfolioItems[item].barInterval,\r\n tradePeriod: portfolioItems[item].tradePeriod,\r\n status: portfolioItems[item].status\r\n });\r\n\r\n sequence++;\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, portfolioItems } = props;\r\n\r\n switch (status) {\r\n case 'get_portfolio_items_success':\r\n if (portfolioItems !== undefined && portfolioItems.length > 0) {\r\n let { dataSource, rowId, statisticsResult } = this.setBacktestResult(portfolioItems);\r\n \r\n this.setState({ portfolioItems, dataSource, rowId, statisticsResult, spinLoadding: false });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n break;\r\n case 'get_portfolio_items_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'remove_portfolio_success':\r\n let { selectedRowKeys } = this.state;\r\n if (selectedRowKeys.length > 0) {\r\n\r\n var tmpportfolioItems = this.state.portfolioItems.filter(function (e) { return selectedRowKeys.indexOf(e.portfolioId) === -1; });\r\n\r\n let { dataSource, rowId, statisticsResult } = this.setBacktestResult(tmpportfolioItems);\r\n\r\n this.setState({ portfolioItems: tmpportfolioItems, dataSource, rowId, statisticsResult, spinLoadding: false });\r\n }\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'remove_portfolio_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var portfolioIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.portfolio'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_portfolio\", payload: { u: _this.user.username, ps: portfolioIds } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { portfolioItems, selectedRowKeys } = this.state;\r\n\r\n var tmpData = portfolioItems.filter(function (e) { return e.portfolioId === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = {};\r\n if (tmpData[0].backtestResult != null) {\r\n statisticsResult = tmpData[0].backtestResult;\r\n\r\n statisticsResult.portfolioId = tmpData[0].PortfolioId;\r\n statisticsResult.portfolioOptResult = tmpData[0].Result;\r\n }\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n /**\r\n handleViewPortfolioResult = (record) => {\r\n console.log(record);\r\n }\r\n */\r\n\r\n render() {\r\n var { dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n sorter: (a, b) => a.created - b.created,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['fromDate'],\r\n dataIndex: 'fromDate',\r\n width: 90,\r\n sorter: (a, b) => a.fromDate - b.fromDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['toDate'],\r\n dataIndex: 'toDate',\r\n width: 90,\r\n sorter: (a, b) => a.toDate - b.toDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'barInterval',\r\n width: 90,\r\n sorter: (a, b) => a.barInterval - b.barInterval,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['tradePeriod'],\r\n dataIndex: 'tradePeriod',\r\n width: 90,\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend']\r\n },\r\n\r\n /**\r\n {\r\n title: languageMessages['control'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n width: 100,\r\n render: (text, record) => {\r\n return <Button size='small' onClick={() => this.handleViewPortfolioResult(record)}>{languageMessages['view']}</Button>\r\n }\r\n }\r\n */\r\n ];\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['my.portfolio']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <Layout className='backtest-content'>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {Object.keys(this.state.statisticsResult).length == 0 || (<PortfolioResult dispatch={this.props.dispatch} status={this.props.status} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.portfolio;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyPortfolioPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\n// 引入 ECharts 主模å—\r\nimport echarts from 'echarts/lib/echarts';\r\nimport 'echarts-gl';\r\n\r\n// 引入柱状图\r\nimport \"echarts/lib/chart/bar\";\r\n\r\n// 引入æç¤ºæ¡†å’Œæ ‡é¢˜ç»„ä»¶\r\nimport \"echarts/lib/component/tooltip\";\r\nimport 'echarts/lib/component/title';\r\nimport 'echarts/lib/chart/line';\r\nimport 'echarts/lib/chart/scatter';//effectScatter\r\nimport 'echarts/lib/component/dataZoom';\r\nimport 'echarts/lib/component/axisPointer';\r\nimport 'echarts/lib/component/markArea';\r\nimport 'echarts/lib/component/legendScroll';\r\n\r\nimport { Layout, Table, Divider, Button, message, Select, Spin, Modal, Form, DatePicker } from 'antd';\r\nimport { getChartOption } from './chartOptions/index';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport moment from 'moment';\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nvar wts = {\r\n 'sName': 'wT',\r\n 'xData': [],\r\n 'data': []\r\n};\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nvar colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\r\n\r\nfunction guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nclass PortfolioOptResult extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.charts = {\r\n \"wt\": null\r\n }\r\n \r\n this.state = {\r\n spinLoadding: true,\r\n\r\n statisticsResult: [],\r\n\r\n portfolioId: 0,\r\n portfolioDataSource: [],\r\n backtsetDataSource: [],\r\n dataSource: [],\r\n\r\n startDate: moment().add(-90, 'days').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n endOpen: false,\r\n\r\n modalTitle: '',\r\n modalVisible: false,\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n isStartBacktest: false,\r\n\r\n isShowBacktestInfo: false,\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n const { statisticsResult } = this.props;\r\n \r\n this.setBacktestResult(statisticsResult);\r\n \r\n }\r\n\r\n setBacktestResult(statisticsResult) {\r\n\r\n this.charts = {\r\n \"wt\": null\r\n };\r\n \r\n wts.xData = [];\r\n wts.data = [];\r\n\r\n var portfolioId = 0\r\n var portfolioDataSource = [];\r\n\r\n if (statisticsResult.portfolioOptResult != null && statisticsResult.portfolioOptResult.length > 0) {\r\n portfolioId = statisticsResult.portfolioId;\r\n var portfolioOptResult = statisticsResult.portfolioOptResult;\r\n \r\n var index = 1;\r\n for (var ii in portfolioOptResult) {\r\n portfolioDataSource.push({\r\n key: index,//trades[item].backtestId,\r\n section: portfolioOptResult[ii].S,\r\n maximizing: portfolioOptResult[ii].R,\r\n minimize: portfolioOptResult[ii].V,\r\n benchmarking: portfolioOptResult[ii].B,\r\n });\r\n \r\n\r\n var wtData = [];\r\n \r\n var wT = portfolioOptResult[ii].wT;\r\n for (let key in wT) {\r\n wtData.push(wT[key]);\r\n\r\n if(index == 1) wts.xData.push(key);\r\n }\r\n \r\n wts.data.push({ 'data': wtData, 'name': portfolioOptResult[ii].S });\r\n\r\n index++;\r\n }\r\n }\r\n this.setWtData(\"wt\", wts);\r\n\r\n this.setState({ portfolioId, portfolioDataSource, statisticsResult });\r\n }\r\n\r\n componentWillUnmount() {\r\n }\r\n\r\n resizeChart() {\r\n var wtChart = this.charts['wt'];\r\n \r\n window.onresize = function () {\r\n if (wtChart != null) wtChart.resize();\r\n }\r\n }\r\n\r\n setWtData(chartName, chartData) {\r\n this.charts[chartName] = echarts.init(document.getElementById(chartName));\r\n this.charts[chartName].setOption(getChartOption(chartName, chartData));\r\n\r\n this.charts[chartName].resize();\r\n\r\n this.resizeChart();\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n //value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value = Number(value).toFixed(2);\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, statisticsResult } = props;\r\n \r\n switch (status) {\r\n default:\r\n if (this.state.statisticsResult == statisticsResult) return;\r\n\r\n this.setBacktestResult(statisticsResult);\r\n break;\r\n }\r\n }\r\n\r\n onStartBacktest = () => {\r\n window._hmt && window._hmt.push(['_trackEvent', 'Portfolio backtest', 'Portfolio backtest', 'Portfolio backtest']);\r\n\r\n this.setState({\r\n modalTitle: languageMessages['stockBacktest'],\r\n modalVisible: true,\r\n \r\n });\r\n }\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n this.setState({ startDate });\r\n }\r\n\r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n this.setState({ endDate, tradeDateStatus, tradeDateMessage });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate) || current < moment(endDate).add(-6, 'months'));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage });\r\n };\r\n\r\n renderModalContent() {\r\n return <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n }\r\n\r\n handleOk = e => {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { portfolioId, startDate, endDate } = this.state;\r\n\r\n this.setState({ modalVisible: false, isStartBacktest: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'StartPortfolioOptBacktest', userId: this.user.username,\r\n msg: {\r\n p: portfolioId,\r\n f: startDate,\r\n t: endDate\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n handleCancel = e => {\r\n this.setState({ modalVisible: false, isStartBacktest: false });\r\n }\r\n\r\n render() {\r\n var { portfolioDataSource, backtestDataSource, dataSource } = this.state;\r\n\r\n const portfolioColumns = [\r\n {\r\n title: 'Section',\r\n dataIndex: 'section',\r\n align: 'center',\r\n //width: 200\r\n }, {\r\n title: languageMessages['Maximizing returns'],\r\n dataIndex: 'maximizing',\r\n align: 'right',\r\n sorter: (a, b) => a.maximizing - b.maximizing,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['Minimize variance'],\r\n dataIndex: 'minimize',\r\n align: 'right',\r\n sorter: (a, b) => a.minimize - b.minimize,\r\n sortDirections: ['descend', 'ascend'],\r\n //width: 50\r\n }, {\r\n title: languageMessages['Benchmarking income'],\r\n dataIndex: 'benchmarking',\r\n //fixed: 'right',\r\n align: 'right',\r\n sorter: (a, b) => a.benchmarking - b.benchmarking,\r\n sortDirections: ['descend', 'ascend'],\r\n }\r\n ];\r\n\r\n const backtsetColumns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n sorter: (a, b) => a.created - b.created,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['fromDate'],\r\n dataIndex: 'fromDate',\r\n width: 90,\r\n sorter: (a, b) => a.fromDate - b.fromDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['toDate'],\r\n dataIndex: 'toDate',\r\n width: 90,\r\n sorter: (a, b) => a.toDate - b.toDate,\r\n sortDirections: ['descend', 'ascend'],\r\n },\r\n\r\n /**\r\n {\r\n title: languageMessages['control'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n width: 100,\r\n render: (text, record) => {\r\n return <Button size='small' onClick={() => this.handleViewPortfolioResult(record)}>{languageMessages['view']}</Button>\r\n }\r\n }\r\n */\r\n ];\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'right',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbolCode'],\r\n dataIndex: 'symbolName',\r\n //sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n //render: (text, record) => <a onClick={() => this.selectRow(record)}>{text}</a>,\r\n }, {\r\n title: languageMessages['direction'],\r\n dataIndex: 'direction',\r\n //sorter: (a, b) => a.direction < b.direction ? -1 : a.direction > b.direction ? 1 : 0,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, record) => (\r\n <span>\r\n {languageMessages.hasOwnProperty(record.direction) ? languageMessages[record.direction] : record.direction}\r\n </span>\r\n )\r\n }, {\r\n title: languageMessages['tradeTimes'],\r\n dataIndex: 'tradeTime',\r\n //sorter: (a, b) => a.tradeTimes - b.tradeTimes,\r\n //sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['strikePrice'],\r\n dataIndex: 'strikePrice',\r\n align: 'right',\r\n //sorter: (a, b) => a.strikePrice - b.strikePrice,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['tradeSize'],\r\n dataIndex: 'volume',\r\n align: 'right',\r\n //sorter: (a, b) => a.volume - b.volume,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['dollars'],\r\n dataIndex: 'turnover',\r\n align: 'right',\r\n //sorter: (a, b) => a.turnover - b.turnover,\r\n //sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['pnls'],\r\n dataIndex: 'pnl',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnl - b.pnl,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnl'] !== '' && row['pnl'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }, {\r\n title: languageMessages['gain'] + '(%)',\r\n dataIndex: 'pnlp',\r\n align: 'right',\r\n //sorter: (a, b) => a.pnlp - b.pnlp,\r\n //sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['pnlp'] !== '' && row['pnlp'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}</span>;\r\n }\r\n }\r\n }\r\n ];\r\n\r\n return (<Content>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['Portfolio opt info']}</div>\r\n\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={portfolioColumns}\r\n dataSource={portfolioDataSource} pagination={false} />\r\n\r\n <div id=\"wt\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestItems']}</div>\r\n <Table bordered size='small' locale={{ emptyText: ' ' }}\r\n columns={backtsetColumns}\r\n dataSource={backtestDataSource} pagination={false} />\r\n\r\n <Button size='small' onClick={this.onStartBacktest}>{languageMessages['startBacktest']}</Button>\r\n\r\n <div style={{ display: this.state.isShowBacktestInfo ? '' : 'none' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['fundsCurve']}</div>\r\n <div id=\"income\" style={{ height: \"500px\", marginTop: \"20px\" }} > </div>\r\n\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['tradeDetails']}</div>\r\n <Table bordered size='small' locale={{ emptyText: ' ' }} columns={columns} dataSource={dataSource} pagination={dataSource.length >= 40 ? { pageSize: 40 } : false} />\r\n </div>\r\n </Spin>\r\n\r\n <Modal\r\n title={this.state.modalTitle}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.isStartBacktest}\r\n onCancel={this.handleCancel}>\r\n {this.renderModalContent()}\r\n </Modal>\r\n \r\n </Content>);\r\n }\r\n}\r\n\r\nexport { PortfolioOptResult as default }\r\n","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Form, Modal, Divider, Spin, message, DatePicker, Radio, Checkbox, Select } from 'antd';\r\nimport moment, { max } from 'moment';\r\n\r\nimport PortfolioOptResult from './PortfolioOptResult';\r\n\r\nimport TooltipPage from '../../pannels/account/TooltipPage';\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst SelectWidth = 80;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass PortfolioOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.customGroupsData = [];\r\n\r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'CUSTOM_GROUPS',\r\n\r\n customGroups: '-',\r\n\r\n barinterval: 'D',\r\n tradePeriod: false,\r\n tradePeriodValue: '',\r\n tradePeriodUnit: 'M',\r\n\r\n lastTimes: 0,\r\n\r\n startDate: moment().add(-90, 'days').format('YYYY-MM-DD'),\r\n endDate: moment().add(-1, 'days').format('YYYY-MM-DD'),\r\n\r\n endOpen: false,\r\n\r\n tradeDateStatus: '',\r\n tradeDateMessage: '',\r\n\r\n backtestStatus: 0,\r\n statisticsResult: {},\r\n\r\n isStartPortfolio: false,\r\n\r\n portfolioState: false,\r\n\r\n spinLoadding: true,\r\n\r\n filterError: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n\r\n emitter.addListener('callPortfolioOptStatus', this.callPortfolioOptStatus);\r\n emitter.addListener(\"callPortfolioOptError\", this.callPortfolioOptError);\r\n emitter.addListener('callPortfolioOptLastTimes', this.callPortfolioOptLastTimes);\r\n emitter.addListener('callPortfolioOptResult', this.callPortfolioOptResult);\r\n \r\n }\r\n\r\n callPortfolioOptError = (status) => {\r\n //message.error('portfolio opt , Error:' + status);\r\n this.setState({ backtestStatus: 0, portfolioState: false, filterError: strReplace(languageMessages['portfolioError'], { '{errorCode}': status }) });\r\n }\r\n\r\n callPortfolioOptStatus = (status) => {\r\n /**\r\n * if (status == 1) {\r\n message.success('portfolio success');\r\n } else {\r\n message.error('portfolio fail');\r\n }\r\n */ \r\n\r\n this.setState({ backtestStatus: 1 });\r\n }\r\n\r\n callPortfolioOptLastTimes = (lastTimes, permission) => {\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n }\r\n\r\n this.setState({ lastTimes, backtestStatus: 2 });\r\n }\r\n\r\n callPortfolioOptResult = (result) => {\r\n var statisticsResult = result;\r\n\r\n this.setState({ statisticsResult, portfolioState: false, backtestStatus: 3 });\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n\r\n emitter.removeListener('callPortfolioOptStatus', this.callPortfolioOptStatus);\r\n emitter.removeListener('callPortfolioOptError', this.callPortfolioOptError);\r\n emitter.removeListener('callPortfolioOptLastTimes', this.callPortfolioOptLastTimes);\r\n emitter.removeListener('callPortfolioOptResult', this.callPortfolioOptResult);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_luis_sectors\", payload: { UserId: user.username, stockPoolKey: this.state.stockPoolKey, stockGroups: this.state.stockGroups } });\r\n }\r\n */\r\n\r\n let { customGroups } = this.state;\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('customGroup', customGroups);\r\n\r\n this.setState({ customGroups, isStartPortfolio });\r\n }\r\n\r\n this.props.dispatch({ type: \"action_get_portfolio_info\", payload: { UserId: this.user.username } });\r\n }\r\n\r\n setUserPermission(permissions) {\r\n var lastTimes = 0;\r\n for (var key in permissions) {\r\n var permission = permissions[key];\r\n switch (permission.type) {\r\n case 'p':\r\n lastTimes += permission.totalCount - permission.usageCount;\r\n break;\r\n default:\r\n lastTimes += 0;\r\n break;\r\n }\r\n }\r\n this.setState({ lastTimes });\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, permission, portfolioId } = props;\r\n\r\n switch (status) {\r\n case 'info_success':\r\n if (this.user.permission !== undefined) {\r\n this.user.permission = permission;\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.user));\r\n this.setUserPermission(this.user.permission);\r\n }\r\n\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'info_fail':\r\n if (this.user.permission !== undefined) {\r\n this.setUserPermission(this.user.permission);\r\n }\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'start_portfolio_success':\r\n console.log(portfolioId);\r\n break;\r\n case 'start_portfolio_fail':\r\n message.error('start portfolio fail');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n onMyPortfolio = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'mpo');\r\n history.push(\"/mpo\");\r\n }\r\n\r\n checkIsStartPortfolio(type, value) {\r\n let { customGroups, startDate, endDate } = this.state;\r\n\r\n var isStartPortfolio = false;\r\n switch (type) {\r\n case 'startDate':\r\n startDate = value;\r\n break;\r\n case 'endDate':\r\n endDate = value;\r\n break;\r\n case 'customGroup':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (customGroups != '-' && customGroups != '') {\r\n\r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n if (oDate2.getTime() > oDate1.getTime()) {\r\n isStartPortfolio = true;\r\n }\r\n }\r\n\r\n return isStartPortfolio;\r\n }\r\n\r\n //开始日期\r\n onChangeStartDate = startDate => {\r\n startDate = moment(startDate).format(\"YYYY-MM-DD\");\r\n\r\n //判æ–å°äºŽç»“æŸæ—¶é—´\r\n /** \r\n var oDate1 = new Date(startDate);\r\n var oDate2 = new Date(endDate);\r\n if (oDate1.getTime() < oDate2.getTime()) {\r\n \r\n }\r\n */\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('startDate', startDate);\r\n\r\n this.setState({ startDate, isStartPortfolio });\r\n }\r\n\r\n //ç»“æŸæ—¥æœŸ\r\n onChangeEndDate = endDate => {\r\n endDate = moment(endDate).format(\"YYYY-MM-DD\");\r\n\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n\r\n var isStartPortfolio = this.checkIsStartPortfolio('endDate', endDate);\r\n\r\n this.setState({ endDate, isStartPortfolio, tradeDateStatus, tradeDateMessage });\r\n }\r\n\r\n todayDisabledDate = current => {\r\n const { endDate } = this.state;\r\n if (!endDate) {\r\n return false;\r\n }\r\n return current && (current > moment(endDate) || current < moment(endDate).add(-6, 'months'));\r\n }\r\n\r\n endDisabledDate = current => {\r\n const { startDate } = this.state;\r\n if (!startDate) {\r\n return false;\r\n }\r\n return current && (current < moment(startDate) || current > moment().add(-1, 'days'));\r\n }\r\n\r\n handleStartOpenChange = open => {\r\n if (!open) {\r\n this.setState({ endOpen: true });\r\n }\r\n };\r\n\r\n handleEndOpenChange = endOpen => {\r\n var tradeDateStatus = '';\r\n var tradeDateMessage = '';\r\n\r\n if (!endOpen) {\r\n //åˆ¤æ–æ—¥æœŸæ˜¯å¦å°äºŽå¼€å§‹æ—¥æœŸ\r\n var oDate1 = new Date(this.state.startDate);\r\n var oDate2 = new Date(this.state.endDate);\r\n\r\n var intDate1 = oDate1.getTime();\r\n var intDate2 = oDate2.getTime();\r\n if (intDate1 > intDate2) {\r\n tradeDateStatus = 'error';\r\n tradeDateMessage = languageMessages['startDateGreaterThanEndDate'];\r\n }\r\n }\r\n\r\n this.setState({ endOpen, tradeDateStatus, tradeDateMessage });\r\n };\r\n\r\n handleCustomGroupsChange = value => {\r\n var isStartPortfolio = this.checkIsStartPortfolio('customGroup', value.key);\r\n\r\n this.setState({\r\n customGroups: value.key,\r\n isStartPortfolio\r\n });\r\n }\r\n\r\n onSelectBarInterval = e => {\r\n var barinterval = e.target.value;\r\n this.setState({ barinterval });\r\n }\r\n\r\n handleChangeTradePeriod = e => {\r\n var tradePeriod = e.target.checked;\r\n\r\n this.setState({ tradePeriod });\r\n }\r\n\r\n handleNumberChange = e => {\r\n var number = e.target.value;\r\n this.setState({ tradePeriodValue: number });\r\n }\r\n\r\n onBlurNumberChange = e => {\r\n e.preventDefault();\r\n\r\n var number = e.target.value;\r\n\r\n this.setState({ tradePeriodValue: number });\r\n }\r\n\r\n handleTradePeriodUnitChange = value => {\r\n\r\n this.setState({\r\n tradePeriodUnit: value.key,\r\n });\r\n }\r\n\r\n onValueAddedServices = e => {\r\n e.preventDefault();\r\n Modal.destroyAll();\r\n\r\n history.push({ pathname: '/member', state: { memberMenuSelectKey: \"2\" } });\r\n }\r\n\r\n onStartPortfolio = () => {\r\n let { lastTimes, startDate, endDate, stockPoolKey, customGroups, barinterval, tradePeriod, tradePeriodValue, tradePeriodUnit } = this.state;\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Portfolio', 'Portfolio', 'Portfolio Stock']);\r\n\r\n if (this.user.username === undefined) {\r\n //saved to cache\r\n\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n if (lastTimes <= 0) {\r\n var content = <span>{languageMessages['today.stock.picks.end']},{languageMessages['please go']}<a onClick={this.onValueAddedServices}>{languageMessages['value-added.services']}</a></span>;\r\n Modal.info({\r\n title: languageMessages['prompt'],\r\n content: content\r\n });\r\n return;\r\n }\r\n \r\n var tmpTradePeriod = '';\r\n if (tradePeriod) {\r\n tmpTradePeriod = tradePeriodValue + ',' + tradePeriodUnit;\r\n }\r\n\r\n this.setState({\r\n backtestStatus: 0,\r\n statisticsResult: [],\r\n portfolioState: true,\r\n filterError: '',\r\n }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'startPortfolioOpt', userId: this.user.username,\r\n msg: {\r\n /**\r\n * FormDate: startDate,\r\n ToDate: endDate,\r\n SymbolGroupType: stockPoolKey,\r\n CustomSymbolGroupId: customGroups,\r\n Barinterval: barinterval,\r\n TradePeriod: tmpTradePeriod\r\n */\r\n Type: 'porrtfolioOptBacktest',\r\n f: startDate,\r\n t: endDate,\r\n sgt: stockPoolKey,\r\n csg: customGroups,\r\n bi: barinterval,\r\n tp: tmpTradePeriod\r\n }\r\n }\r\n });\r\n });\r\n\r\n /**\r\n this.props.dispatch({\r\n type: \"action_start_portfolio\", payload: {\r\n u: this.user.username,\r\n f: startDate,\r\n t: endDate,\r\n sgt: stockPoolKey,\r\n csg: customGroups,\r\n bi: barinterval,\r\n tp: tmpTradePeriod\r\n }\r\n });\r\n */\r\n }\r\n };\r\n\r\n render() {\r\n var { barinterval } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{'Portfolio'}</h1>)}\r\n extra={[\r\n <Button key=\"1\" size='small' onClick={this.onMyPortfolio}>{languageMessages['my.portfolio']}</Button>\r\n ]} />\r\n </div>\r\n <div style={{ padding: '0px 50px', marginBottom: '20px' }}>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['basic.info']}</div>\r\n <div className='common-backtest-cont'>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </div>\r\n <div className='common-title'><Divider type=\"vertical\" />{languageMessages['backtestCondition']}</div>\r\n <div className='common-backtest-cont'>\r\n <div style={{ marginBottom: '20px' }}>\r\n <Form labelAlign={'left'} layout=\"inline\" className={window.webType === 'US' ? 'common-form-hawkeye hawkeye-us' : 'common-form-hawkeye'}>\r\n <Form.Item colon={false} label={languageMessages['backtestInterval']} validateStatus={this.state.tradeDateStatus} help={this.state.tradeDateMessage}>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterStartDate']}\r\n value={moment(this.state.startDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.todayDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeStartDate}\r\n onOpenChange={this.handleStartOpenChange}\r\n />\r\n </span>\r\n <span style={{ display: 'inline-block', width: '24px', textAlign: 'center' }}>{languageMessages['intl.to']}</span>\r\n <span style={{ display: 'inline-block' }}>\r\n <DatePicker size=\"small\"\r\n allowClear={false}\r\n placeholder={languageMessages['pleaseEnterEndDate']}\r\n value={moment(this.state.endDate, \"YYYY-MM-DD\")}\r\n disabledDate={this.endDisabledDate}\r\n format={\"YYYY-MM-DD\"} style={{ width: '120px' }}\r\n onChange={this.onChangeEndDate}\r\n disabled={this.state.startDate === ''}\r\n open={this.state.endOpen}\r\n onOpenChange={this.handleEndOpenChange}\r\n />\r\n </span>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div style={{ marginBottom: '20px' }}>\r\n <RadioGroup onChange={this.onSelectBarInterval} value={barinterval}>\r\n <Radio value={'D'}>{languageMessages['Daily']}</Radio>\r\n <Radio value={'60'}>{languageMessages['60Min']}</Radio>\r\n </RadioGroup>\r\n </div>\r\n <div style={{ marginBottom: '20px', display: \"none\" }}>\r\n <Checkbox checked={this.state.tradePeriod} onChange={this.handleChangeTradePeriod}>{languageMessages['Whether to adjust the warehouse']}</Checkbox>\r\n </div>\r\n <div style={{ marginBottom: '20px', display: this.state.tradePeriod ? '' : 'none' }}>\r\n <Input type=\"text\" size='small' style={{ width: 80 }} value={this.state.tradePeriodValue} onChange={this.handleNumberChange} onBlur={this.onBlurNumberChange} placeholder={languageMessages['pleaseEnterGrids']} />\r\n <span style={{ marginLeft: '10px' }}>\r\n <Select labelInValue\r\n size='small'\r\n defaultValue={{ key: this.state.tradePeriodUnit }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleTradePeriodUnitChange}>\r\n <Option key='M'>{languageMessages['Month']}</Option>\r\n <Option key='W'>{languageMessages['Week']}</Option>\r\n <Option key='D'>{languageMessages['Daily']}</Option>\r\n <Option key='H'>{languageMessages['Hour']}</Option>\r\n </Select>\r\n </span>\r\n </div>\r\n <Button size='small' loading={this.state.portfolioState} disabled={!this.state.isStartPortfolio} onClick={this.onStartPortfolio}>\r\n {languageMessages['startPortfolio']}\r\n </Button>\r\n <TooltipPage lastTimes={this.state.lastTimes} filterError={this.state.filterError} />\r\n </div>\r\n </div>\r\n <div style={{ backgroundColor: '#efefef', height: '48px', lineHeight: '48px', padding: '0 50px', display: this.state.backtestStatus > 0 ? 'block' : 'none' }}>\r\n <div style={{ float: 'left' }}>\r\n <b>{languageMessages['status']}</b>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 1 ? 'inline-block' : 'none' }}>{languageMessages['queue']}</span>\r\n <span style={{ display: this.state.backtestStatus == 2 ? 'inline-block' : 'none' }}>\r\n <span style={{ margin: '0 10px' }}>{languageMessages['query prompt']}</span>\r\n </span>\r\n <span style={{ margin: '0 10px', display: this.state.backtestStatus == 3 ? 'inline-block' : 'none' }}>{Object.keys(this.state.statisticsResult).length > 0 ? languageMessages['queryingCompletedConsuming'] : languageMessages['No Portfolio optimization results']}</span>\r\n </div>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {Object.keys(this.state.statisticsResult).length == 0 || (<PortfolioOptResult dispatch={this.props.dispatch} status={this.props.status} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.portfolio;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(PortfolioOptPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\nimport { Layout, PageHeader, Table, Select, Button, Spin, Modal, message } from 'antd';\r\nimport moment from 'moment';\r\n\r\nimport PortfolioOptResult from './PortfolioOptResult';\r\n\r\nimport emitter from '../Evt.js';\r\nimport { buffers } from 'redux-saga';\r\n\r\nvar moment_timezone = require('moment-timezone');\r\n\r\nconst { Content } = Layout;\r\nconst Confirm = Modal.confirm;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nclass MyPortfolioOptPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n window.webType === 'US' ? moment_timezone.tz.setDefault(\"America/New_York\") : moment_timezone.tz.setDefault(\"Asia/Shanghai\");\r\n\r\n this.user = {};\r\n this.state = {\r\n portfolioItems: [],\r\n\r\n dataSource: [],\r\n\r\n rowId: -1,\r\n \r\n statisticsResult: [],\r\n\r\n selectedRowKeys: [],\r\n\r\n spinLoadding: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n var userId = this.user.username === undefined ? '' : this.user.username;\r\n this.props.dispatch({ type: \"action_get_portfolio_opt_items\", payload: { u: userId } });\r\n }\r\n\r\n keepDecimals(value, sign) {\r\n value = value == null ? '' : value;\r\n if (value !== '') {\r\n value = value.replace(/([0-9]+.[0-9]{2})[0-9]*/, \"$1\");\r\n value += sign;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setBacktestResult(portfolioItems) {\r\n var statisticsResult = {};\r\n var rowId = -1;\r\n var dataSource = [];\r\n if (portfolioItems.length > 0) {\r\n var sequence = 1;\r\n for (var item in portfolioItems) {\r\n if (rowId === -1) {\r\n rowId = portfolioItems[item].portfolioId;\r\n statisticsResult = portfolioItems[item].backtestResult;\r\n\r\n statisticsResult.portfolioId = portfolioItems[item].portfolioId;\r\n statisticsResult.portfolioOptResult = portfolioItems[item].result;\r\n }\r\n \r\n dataSource.push({\r\n key: portfolioItems[item].portfolioId,\r\n sequence: sequence,\r\n created: portfolioItems[item].createDate,\r\n fromDate: portfolioItems[item].fromDate,\r\n toDate: portfolioItems[item].toDate,\r\n barInterval: portfolioItems[item].barInterval,\r\n tradePeriod: portfolioItems[item].tradePeriod,\r\n status: portfolioItems[item].status\r\n });\r\n\r\n sequence++;\r\n }\r\n }\r\n\r\n return { dataSource, rowId, statisticsResult };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, portfolioItems } = props;\r\n\r\n switch (status) {\r\n case 'portfolio_opt_items_success':\r\n console.log(portfolioItems);\r\n\r\n if (portfolioItems !== undefined && portfolioItems.length > 0) {\r\n let { dataSource, rowId, statisticsResult } = this.setBacktestResult(portfolioItems);\r\n \r\n this.setState({ portfolioItems, dataSource, rowId, statisticsResult, spinLoadding: false });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n break;\r\n case 'portfolio_opt_items_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'get_portfolio_opt_items_success':\r\n console.log(portfolioItems);\r\n\r\n /**\r\n * if (portfolioItems !== undefined && portfolioItems.length > 0) {\r\n let { dataSource, rowId, statisticsResult } = this.setBacktestResult(portfolioItems);\r\n\r\n this.setState({ portfolioItems, dataSource, rowId, statisticsResult, spinLoadding: false });\r\n } else {\r\n this.setState({ spinLoadding: false });\r\n }\r\n */ \r\n break;\r\n case 'get_portfolio_opt_items_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'remove_portfolio_success':\r\n let { selectedRowKeys } = this.state;\r\n if (selectedRowKeys.length > 0) {\r\n\r\n var tmpportfolioItems = this.state.portfolioItems.filter(function (e) { return selectedRowKeys.indexOf(e.portfolioId) === -1; });\r\n\r\n let { dataSource, rowId, statisticsResult } = this.setBacktestResult(tmpportfolioItems);\r\n\r\n this.setState({ portfolioItems: tmpportfolioItems, dataSource, rowId, statisticsResult, spinLoadding: false });\r\n }\r\n message.success(languageMessages['remove.batchbacktest.success']);\r\n break;\r\n case 'remove_portfolio_fail':\r\n this.setState({ spinLoadding: false });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onRemove = () => {\r\n var { selectedRowKeys } = this.state;\r\n\r\n if (selectedRowKeys.length > 0) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var portfolioIds = selectedRowKeys.join(',');\r\n\r\n var _this = this;\r\n Confirm({\r\n title: languageMessages['want.delete.portfolio'],\r\n content: '',\r\n okText: languageMessages['yes'],\r\n okType: 'danger',\r\n cancelText: languageMessages['no'],\r\n onOk() {\r\n _this.setState({ spinLoadding: true }, () => {\r\n _this.props.dispatch({ type: \"action_remove_portfolio\", payload: { u: _this.user.username, ps: portfolioIds } });\r\n });\r\n },\r\n onCancel() { },\r\n });\r\n }\r\n }\r\n };\r\n\r\n OnSelectShowChart = (record) => {\r\n return {\r\n onClick: () => {\r\n const { portfolioItems, selectedRowKeys } = this.state;\r\n\r\n var tmpData = portfolioItems.filter(function (e) { return e.portfolioId === record.key; });\r\n if (tmpData.length > 0) {\r\n var statisticsResult = {};\r\n if (tmpData[0].backtestResult != null) {\r\n statisticsResult = tmpData[0].backtestResult;\r\n\r\n statisticsResult.portfolioId = tmpData[0].PortfolioId;\r\n statisticsResult.portfolioOptResult = tmpData[0].Result;\r\n }\r\n\r\n this.setState({ rowId: record.key, statisticsResult, selectedRowKeys });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRowClassName = (record) => {\r\n return record.key.toString() === this.state.rowId.toString() ? 'common-table-row' : '';\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys });\r\n };\r\n\r\n /**\r\n handleViewPortfolioResult = (record) => {\r\n console.log(record);\r\n }\r\n */\r\n\r\n render() {\r\n var { dataSource, selectedRowKeys } = this.state;\r\n\r\n const columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n align: 'center',\r\n width: 50\r\n }, {\r\n title: languageMessages['created'],\r\n dataIndex: 'created',\r\n width: 135,\r\n sorter: (a, b) => a.created - b.created,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['fromDate'],\r\n dataIndex: 'fromDate',\r\n width: 90,\r\n sorter: (a, b) => a.fromDate - b.fromDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['toDate'],\r\n dataIndex: 'toDate',\r\n width: 90,\r\n sorter: (a, b) => a.toDate - b.toDate,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['backtestInterval'],\r\n dataIndex: 'barInterval',\r\n width: 90,\r\n sorter: (a, b) => a.barInterval - b.barInterval,\r\n sortDirections: ['descend', 'ascend']\r\n }, {\r\n title: languageMessages['tradePeriod'],\r\n dataIndex: 'tradePeriod',\r\n width: 90,\r\n }, {\r\n title: languageMessages['status'],\r\n dataIndex: 'status',\r\n width: 60,\r\n sorter: (a, b) => a.status - b.status,\r\n sortDirections: ['descend', 'ascend']\r\n },\r\n\r\n /**\r\n {\r\n title: languageMessages['control'],\r\n dataIndex: 'operation',\r\n //fixed: 'right',\r\n width: 100,\r\n render: (text, record) => {\r\n return <Button size='small' onClick={() => this.handleViewPortfolioResult(record)}>{languageMessages['view']}</Button>\r\n }\r\n }\r\n */\r\n ];\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: selectedRowKeys,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{languageMessages['my.portfolio']}</h1>)} />\r\n </div>\r\n <div style={{ padding: '0px 50px' }}>\r\n <Layout className='backtest-content'>\r\n <div className='common-content'>\r\n <div className='common-tools'>\r\n <Button onClick={this.onRemove} disabled={selectedRowKeys.length > 0 ? false : true}>{languageMessages['remove']}</Button>\r\n </div>\r\n <Table size='middle' locale={{ emptyText: ' ' }}\r\n columns={columns}\r\n dataSource={dataSource}\r\n rowSelection={rowSelection}\r\n onRow={this.OnSelectShowChart}\r\n rowClassName={this.setRowClassName}\r\n pagination={false} scroll={{ y: 331 }} />\r\n </div>\r\n </Layout>\r\n </div>\r\n <Content style={{ padding: '0px 50px', marginBottom: '50px' }}>\r\n {Object.keys(this.state.statisticsResult).length == 0 || (<PortfolioOptResult dispatch={this.props.dispatch} status={this.props.status} statisticsResult={this.state.statisticsResult} />)}\r\n </Content>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.portfolio;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(MyPortfolioOptPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Row, Col, Radio, Select, Divider, Alert, Icon, Checkbox } from 'antd';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nconst Option = Select.Option;\r\nconst RadioGroup = Radio.Group;\r\n\r\nconst MaxTagTextLength = 5;\r\nconst SelectWidth = 150;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nconst locale = window.appLocale.locale;\r\nclass OpenAISymbolGroupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.html = null;\r\n\r\n this.industryTitle = [];\r\n this.industryData = [];\r\n \r\n this.customGroupsData = [];\r\n\r\n this.state = {\r\n isRefresh: false,\r\n isLogin: false,\r\n stockPoolKey: 'STOCK',\r\n\r\n stockCount: 0,\r\n\r\n stock: '10401',\r\n stockName: languageMessages['sp.500'],\r\n industry: {},\r\n industryName: [],\r\n\r\n fund: '30000',\r\n funName: 'ETF',\r\n\r\n customGroups: '-',\r\n customGroupName: '',\r\n\r\n maxTagPlaceholder: '...',\r\n\r\n isSymbolGroup: true,\r\n\r\n sectorIndustryBtn: 'sector-industry-btn',\r\n sectorIndustryIcon: 'plus',\r\n sectorIndustryContent: 'none',\r\n sectorClass: {},\r\n industryClass: {},\r\n industryItemClass: {},\r\n industrySelectClass: {},\r\n\r\n selectSectorId: 0,\r\n \r\n popsTop: 0,\r\n popsLeft: 0,\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n var { isRefresh, isLogin, stock, industry, fund, customGroups } = this.state;\r\n\r\n if (isRefresh) {\r\n if (!isLogin) {\r\n var user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n if (user.username !== undefined) {\r\n isRefresh = false;\r\n isLogin = true;\r\n }\r\n }\r\n }\r\n\r\n if (!isRefresh) {\r\n var { defaultSymbolGroups } = this.props;\r\n\r\n /**\r\n for (var kk in sectors) {\r\n if (kk >= 100) continue;\r\n\r\n var data = [];\r\n data.push(<Option key={kk}>{languageMessages['select.all']}</Option>);\r\n for (var key in sectors[kk].items) {\r\n var subGroupName = locale.toLowerCase() === 'en-us' ? sectors[kk].items[key].en : sectors[kk].items[key].cn;\r\n\r\n data.push(<Option key={key}>{subGroupName}</Option>);\r\n }\r\n\r\n this.industryTitle[kk] = locale.toLowerCase() === 'en-us' ? sectors[kk].en : sectors[kk].cn;\r\n this.industryData[kk] = data;\r\n }\r\n */\r\n\r\n isRefresh = true;\r\n\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customGroupsItems !== null) {\r\n //自定义自选股\r\n this.customGroupsData = [];\r\n if (customGroupsItems.length > 0) {\r\n for (let key in customGroupsItems) {\r\n if (customGroups === '-') {\r\n customGroups = customGroupsItems[key].groupId.toString();\r\n }\r\n this.customGroupsData.push(<Option key={customGroupsItems[key].groupId}>{customGroupsItems[key].groupName}</Option>);\r\n }\r\n }\r\n }\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n var stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n if(sh > 0) industry[sh] = sg[ks].split(',');\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (isRefresh) {\r\n this.setState({\r\n isRefresh,\r\n isLogin,\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { stockPoolKey, stock, industry, fund, customGroups } = this.state;\r\n var { defaultSymbolGroups } = props;\r\n\r\n var stockCount = defaultSymbolGroups.stockCount;\r\n\r\n stockPoolKey = defaultSymbolGroups.stockPoolKey;\r\n\r\n var stockGroups = defaultSymbolGroups.stockGroups;\r\n if (stockGroups != null) {\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n var sg = stockGroups.split(';');\r\n if (sg.length > 0) {\r\n for (var ks in sg) {\r\n if (ks == 0) stock = sg[ks];\r\n else {\r\n var sug = sg[ks].split(',');\r\n if (sug.length > 0) {\r\n var sh = 0;\r\n if (sug[0] < 100) {\r\n sh = sug[0];\r\n } else {\r\n if (sug[0] >= 1000) {\r\n sh = sug[0].substr(0, 2);\r\n } else {\r\n sh = sug[0].substr(0, 1);\r\n }\r\n }\r\n industry[sh] = sg[ks].split(',');\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'FUND':\r\n fund = stockGroups;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockCount = 0;\r\n customGroups = stockGroups;\r\n if (customGroups !== '-') {\r\n var customGroupsItems = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpSymbol = customGroupsItems.filter(function (e) { return e.groupId == customGroups; });\r\n if (tmpSymbol.length > 0) {\r\n var ss = tmpSymbol[0].symbolList.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n if (ss !== '') {\r\n var tmpCount = ss.split(',');\r\n stockCount = tmpCount.length;\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.setState({\r\n stockPoolKey: stockPoolKey,\r\n\r\n stockCount: stockCount,\r\n\r\n stock: stock,\r\n industry: industry,\r\n\r\n fund: fund,\r\n\r\n customGroups: customGroups\r\n });\r\n }\r\n\r\n onSelectStockPool = e => {\r\n\r\n this.setState({\r\n stockPoolKey: e.target.value,\r\n }, () => {\r\n this.setStockGroup('stockPoolKey', e.target.value);\r\n });\r\n };\r\n\r\n handleStockChange = value => {\r\n\r\n this.setState({\r\n stock: value.key,\r\n stockName: value.label,\r\n }, () => {\r\n this.setStockGroup('stock', value.key);\r\n });\r\n }\r\n\r\n handleCustomGroupsChange = value => {\r\n\r\n this.setState({\r\n customGroups: value.key,\r\n customGroupName: value.label,\r\n }, () => {\r\n this.setStockGroup('customGroups', value.key);\r\n });\r\n }\r\n\r\n setStockGroup(type, value) {\r\n var { stockPoolKey, stock, stockName, industry, industryName, fund, funName, customGroups, customGroupName } = this.state;\r\n\r\n switch (type) {\r\n case 'stockPoolKey':\r\n stockPoolKey = value;\r\n break;\r\n case 'stock':\r\n stock = value;\r\n break;\r\n case 'industry':\r\n industry = value;\r\n break;\r\n case 'customGroups':\r\n customGroups = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n var stockGroupName = '';\r\n var stockGroups = '';\r\n switch (stockPoolKey) {\r\n case 'STOCK':\r\n stockGroups = stock;\r\n \r\n for (var kk in industry) {\r\n if (industry[kk].indexOf(kk) === -1) {\r\n stockGroups += ';' + industry[kk].join(',');\r\n }\r\n }\r\n \r\n if (industryName.length > 0)\r\n if (industryName.length > 1)\r\n stockGroupName = stockName + ' » ' + industryName[0] + ' ...';\r\n else\r\n stockGroupName = stockName + ' » ' + industryName[0];\r\n else\r\n stockGroupName = stockName\r\n break;\r\n case 'FUND':\r\n stockGroups = fund;\r\n stockGroupName = funName;\r\n break;\r\n case 'CUSTOM_GROUPS':\r\n stockGroups = customGroups;\r\n\r\n stockGroupName = customGroupName;\r\n break;\r\n default:\r\n stockGroups = stock;\r\n break;\r\n }\r\n \r\n this.props.stockGroup({ stockPoolKey: stockPoolKey, stockGroups: stockGroups, stockGroupName: stockGroupName });\r\n }\r\n\r\n handleSectorMouseOver = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn hover';\r\n let sectorIndustryIcon = 'minus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'block' });\r\n }\r\n\r\n handleSectorMouseOut = (e) => {\r\n let sectorIndustryBtn = 'sector-industry-btn';\r\n let sectorIndustryIcon = 'plus';\r\n this.setState({ sectorIndustryBtn, sectorIndustryIcon, sectorIndustryContent: 'none' });\r\n }\r\n\r\n HandleMouseOver = (key) => {\r\n var industry = document.getElementById('industry-' + key);\r\n if (industry) {\r\n\r\n var h1 = key * 32;\r\n\r\n var h2 = industry.offsetHeight;\r\n if (h1 > h2) {\r\n industry.style.top = h1 + 'px';\r\n }\r\n\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = 'hover';\r\n industryClass[key] = 'block';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n }\r\n\r\n HandleMouseOut = (key) => {\r\n let { sectorClass, industryClass } = this.state;\r\n sectorClass[key] = '';\r\n industryClass[key] = 'none';\r\n this.setState({ sectorClass, industryClass });\r\n }\r\n\r\n HandleIndustryMouseOver = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = 'hover';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryMouseOut = (industryId) => {\r\n let { industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industryItemClass[industryId] = '';\r\n }\r\n\r\n this.setState({ industryItemClass })\r\n }\r\n\r\n HandleIndustryClick = (sectorId, industryId, industryItemName) => {\r\n let { industry, industryName, industryItemClass, industrySelectClass } = this.state;\r\n\r\n if (industrySelectClass[industryId] === undefined || industrySelectClass[industryId] === '') {\r\n industrySelectClass[industryId] = 'checked';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n industryItems.push(industryId);\r\n industry[sectorId] = industryItems\r\n } else {\r\n industry[sectorId] = [industryId]\r\n }\r\n industryName.push(industryItemName);\r\n } else {\r\n industrySelectClass[industryId] = '';\r\n\r\n if (industry[sectorId] !== undefined) {\r\n let industryItems = industry[sectorId];\r\n if (industryItems.length > 0) {\r\n let index = industryItems.indexOf(industryId);\r\n if (index > -1) {\r\n industryItems.splice(index, 1);\r\n if (industryItems.length > 0) {\r\n industry[sectorId] = industryItems;\r\n } else {\r\n delete industry[sectorId];\r\n }\r\n }\r\n }\r\n }\r\n\r\n industryName = industryName.filter(item => item !== industryItemName);\r\n }\r\n\r\n this.setState({ industry, industryName, industryItemClass }, () => {\r\n this.setStockGroup('industry', industry);\r\n })\r\n }\r\n\r\n renderSectorIndustry() {\r\n var { defaultSymbolGroups } = this.props;\r\n var sectors = defaultSymbolGroups.sectors;\r\n\r\n if (sectors !== undefined && sectors !== null) {\r\n return <ul className=\"sector-industry-content\" style={{ display: this.state.sectorIndustryContent }}>\r\n {\r\n Object.keys(sectors).map((kk, index) => {\r\n let items = sectors[kk];\r\n let industryClass = this.state.industryClass[index] === undefined ? 'none' : this.state.industryClass[index];\r\n let isCheck = this.state.industry[kk] === undefined ? false : true;\r\n return <li key={kk} onMouseOver={() => this.HandleMouseOver(index)} onMouseOut={() => this.HandleMouseOut(index)}>\r\n <div className={this.state.sectorClass[index]}><Checkbox checked={isCheck} /><span className='title'>{locale.toLowerCase() === 'en-us' ? items.en : items.cn}</span></div>\r\n <div className='industry-content' style={{ display: industryClass }} id={'industry-' + index}><dl>\r\n {Object.keys(items.items).map(k => {\r\n let industrySelectClass = this.state.industrySelectClass[k] === undefined ? '' : this.state.industrySelectClass[k];\r\n let industryItemClass = this.state.industryItemClass[k] === undefined ? '' : this.state.industryItemClass[k];\r\n let industryItemName = locale.toLowerCase() === 'en-us' ? items.items[k].en : items.items[k].cn;\r\n return <dd key={k} className={industrySelectClass + ' ' + industryItemClass}\r\n onClick={() => this.HandleIndustryClick(kk, k, industryItemName)}\r\n onMouseOver={() => this.HandleIndustryMouseOver(k)}\r\n onMouseOut={() => this.HandleIndustryMouseOut(k)}>{industryItemName}</dd>\r\n })}\r\n </dl></div>\r\n </li>\r\n })\r\n }\r\n </ul>;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n renderSymbolGroup() {\r\n return (<div className='common-industry'>\r\n <label className='common-label'>{languageMessages['index.component']}</label>\r\n <Select labelInValue\r\n size='small'\r\n defaultValue={{ key: this.state.stock }}\r\n dropdownMatchSelectWidth={false}\r\n style={{ minWidth: SelectWidth }}\r\n onChange={this.handleStockChange}>\r\n <Option key='10000'>{languageMessages['all.stocks']}</Option>\r\n <Option key='10301'>{languageMessages['d-jones.index']}</Option>\r\n <Option key='10202'>{languageMessages['nasdaq.100']}</Option>\r\n <Option key='10401'>{languageMessages['sp.500']}</Option>\r\n <Option key='10501'>{languageMessages['russell.2000']}</Option>\r\n </Select>\r\n <div className='sector-industry-container' onMouseOver={this.handleSectorMouseOver} onMouseOut={this.handleSectorMouseOut}>\r\n <span className={this.state.sectorIndustryBtn}>\r\n <Icon type={this.state.sectorIndustryIcon} /><label>{languageMessages['Sector']}</label>\r\n </span>\r\n {this.renderSectorIndustry()}\r\n </div>\r\n </div>)\r\n }\r\n\r\n //自选\r\n renderCustomGroupsPanel() {\r\n return (<div style={{ padding: '10px 0' }}>\r\n <div>\r\n <label>{languageMessages['optional.stock.pool']}</label>\r\n <Select labelInValue size='small'\r\n defaultValue={{ key: this.state.customGroups }}\r\n style={{ width: 180, padding: '0 10px' }}\r\n onChange={this.handleCustomGroupsChange}>\r\n {this.customGroupsData}\r\n </Select>\r\n </div>\r\n </div>);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isSymbolGroup } = this.state;\r\n isSymbolGroup = isSymbolGroup ? false : true;\r\n this.setState({ isSymbolGroup });\r\n }\r\n\r\n renderPoolCount(stockPoolKey, stockCount) {\r\n if (stockPoolKey === 'STOCK') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else if (stockPoolKey === 'FUND') {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"fund.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n } else {\r\n return <div className='common-title'>\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n <Divider type=\"vertical\" />\r\n {languageMessages['stock.pool']}\r\n <Icon type={this.state.isSymbolGroup ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n <span style={{ fontSize: '14px', padding: '0 10px' }}>\r\n (<span style={{ color: 'red' }}><FormattedMessage id=\"stock.pool.count\" values={{ num: stockCount || 0 }} /></span>)\r\n </span>\r\n </div>\r\n }\r\n }\r\n\r\n render() {\r\n var { stockPoolKey, stockCount, isSymbolGroup } = this.state;\r\n return (<div>\r\n {this.renderPoolCount(stockPoolKey, stockCount)}\r\n <div style={{ display: isSymbolGroup ? '' : 'none' }}>\r\n <RadioGroup onChange={this.onSelectStockPool} value={stockPoolKey}>\r\n <Radio value={'STOCK'}>{languageMessages['stock']}</Radio>\r\n <Radio value={'FUND'}>{languageMessages['fund']}</Radio>\r\n <Radio value={'CUSTOM_GROUPS'}>{languageMessages['optional.stock.pool']}</Radio>\r\n </RadioGroup>\r\n {\r\n stockPoolKey === 'STOCK' ? this.renderSymbolGroup() :\r\n stockPoolKey === 'CUSTOM_GROUPS' ? this.renderCustomGroupsPanel() : ''\r\n }\r\n {this.props.error === 'STOCK_GROUP_ERROR' ? (<Alert message={languageMessages['please.select.stock.pool']} type=\"error\" />) : ''}\r\n </div>\r\n </div>)\r\n }\r\n}\r\n\r\nexport { OpenAISymbolGroupPage as default }","import React, { Component } from 'react';\r\nimport { CSVLink } from \"react-csv\";\r\nimport { Table, PageHeader, Button, Input, Form, Menu, Dropdown, Icon, Modal } from 'antd';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass OpenAIResultPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.csvData = [];\r\n\r\n this.myDate = new Date();\r\n this.fileName = 'scan_stock_result_'+this.myDate.getYear() +''+ this.myDate.getMonth() +''+ this.myDate.getDate() +''+ this.myDate.getHours() +''+ this.myDate.getMinutes() +''+ this.myDate.getSeconds() + \".csv\";\r\n\r\n this.state = {\r\n selectedRowKeys: [],\r\n\r\n saveStock: false,\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n\r\n modalVisible: false,\r\n\r\n stockName: '',\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n if (props.isStockGroupDone) {\r\n this.setState({ modalVisible: false });\r\n }\r\n }\r\n\r\n onSelectChange = selectedRowKeys => {\r\n this.setState({ selectedRowKeys, saveStock: selectedRowKeys.length > 0 ? true : false });\r\n };\r\n\r\n onJoinCustomStock = e => {\r\n let { scanAlert } = this.props;\r\n let { selectedRowKeys } = this.state;\r\n \r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var groupId = e.key;\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpCustomGroups = customStockGroups.filter(function (e) { return e.groupId == groupId });\r\n if (tmpCustomGroups.length > 0) {\r\n var symbolList = tmpCustomGroups[0].symbolList;\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.props.customStockEvent({ GroupId: groupId, GroupName: tmpCustomGroups[0].groupName, SymbolList: symbolList, StockCount: stockCount });\r\n }\r\n } else {\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.setState({\r\n modalVisible: true,\r\n stockName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleSaveGroupName = () => {\r\n let { scanAlert } = this.props;\r\n let { stockName, selectedRowKeys } = this.state\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var tmpData = customStockGroups.filter(function (e) { return e.groupName == stockName; });\r\n if (tmpData.length > 0) {\r\n this.setState({\r\n validateStatus: 'error',\r\n validateMessage: languageMessages['stock.pool.name.already.exists'],\r\n });\r\n } else {\r\n if (selectedRowKeys.length > 0) {\r\n var stockCount = selectedRowKeys.length;\r\n var symbolList = '';\r\n for (var kk in selectedRowKeys) {\r\n var stockItem = scanAlert.stockItems[selectedRowKeys[kk]];\r\n if (symbolList.indexOf(stockItem.symbolCode) === -1) {\r\n if (symbolList !== '') symbolList += ',';\r\n symbolList += stockItem.symbolCode;\r\n }\r\n }\r\n\r\n if (symbolList !== '') {\r\n this.props.customStockEvent({ GroupId: 0, GroupName: stockName, SymbolList: symbolList, StockCount: stockCount });\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleCancelGroupName = e => {\r\n this.setState({\r\n modalVisible: false,\r\n stockName: '',\r\n\r\n validateStatus: '',\r\n validateMessage: '',\r\n });\r\n };\r\n\r\n onChangeGroupName = e => {\r\n e.preventDefault();\r\n\r\n let stockName = e.target.value;\r\n if (stockName !== '') {\r\n stockName = stockName.slice(0, 20);\r\n\r\n var validateStatus = '';\r\n var validateMessage = '';\r\n var pattern = /^[A-Za-z0-9_\\u4e00-\\u9fa5]+$/gi;\r\n if (!pattern.test(stockName)) {\r\n validateStatus = 'error';\r\n validateMessage = languageMessages['stock.pool.name.format'];\r\n }\r\n\r\n this.setState({\r\n validateStatus: validateStatus,\r\n validateMessage: validateMessage,\r\n stockName: stockName\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n let { scanAlert, stockPoolKey } = this.props;\r\n\r\n const rowSelection = {\r\n title: languageMessages['select.all'],\r\n selectedRowKeys: this.state.selectedRowKeys,\r\n //onClick: this.onSelectChange,\r\n onChange: this.onSelectChange\r\n }\r\n\r\n let columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'symbolCode',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: '$LATEST_PRICE',\r\n sorter: (a, b) => a.$LATEST_PRICE - b.$LATEST_PRICE,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n return <span>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: '$RANGE_PERCENT',\r\n sorter: (a, b) => a.$RANGE_PERCENT - b.$RANGE_PERCENT,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['$RANGE_PERCENT'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n }\r\n ]\r\n\r\n this.csvData = [];\r\n this.csvData.push([languageMessages['symbol.code'], languageMessages['symbol.code'], languageMessages['latest.price'], languageMessages['quote.change']]);\r\n\r\n var dataSource = [];\r\n if (scanAlert != null && scanAlert !== undefined) {\r\n var subject = scanAlert.title !== '' ? scanAlert.title.split(\",\") : [];\r\n if (subject.length > 0) {\r\n\r\n //获å–å˜é‡å› å\r\n /**\r\n subject.forEach((v, i) => {\r\n if (v === '$LATEST_PRICE' || v === '$RANGE_PERCENT') {\r\n var nn = v;\r\n \r\n if (v === '$LATEST_PRICE') nn = '最新价';\r\n if (v === '$RANGE_PERCENT') nn = '涨跌幅';\r\n \r\n columns.push({\r\n title: nn,\r\n dataIndex: v,\r\n sorter: (a, b) => a[v] - b[v],\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['$RANGE_PERCENT'] >= 0) {\r\n return <span style={{ color: \"red\" }}>{text}</span>;\r\n } else {\r\n return <span style={{ color: \"green\" }}>{text}</span>;\r\n }\r\n },\r\n });\r\n }\r\n })\r\n */\r\n }\r\n\r\n //èŽ·å–æ¯æ”¯è‚¡ç¥¨çš„å˜é‡å€¼\r\n scanAlert.stockItems.forEach((item, index) => {\r\n var row = {\r\n key: index,\r\n sequence: index + 1\r\n }\r\n\r\n //å°†æ¯ä¸ªå˜é‡å€¼æ·»åŠ åˆ°row对象\r\n for (var kk in item) {\r\n if (kk === 'symbolCode' || kk === 'symbolName') {\r\n row[kk] = item[kk];\r\n }\r\n\r\n if (kk === '$LATEST_PRICE' || kk === '$RANGE_PERCENT') {\r\n if (kk === '$RANGE_PERCENT' && item[kk] === '-1000000000') {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n } else {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n }\r\n }\r\n }\r\n dataSource.push(row);\r\n this.csvData.push([row.symbolCode, row.symbolName, row.$LATEST_PRICE, row.$RANGE_PERCENT]);\r\n })\r\n }\r\n\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n var customStockGroupData = [];\r\n if (customStockGroups.length > 0) {\r\n for (let key in customStockGroups) {\r\n customStockGroupData.push(<Menu.Item key={customStockGroups[key].groupId}>{customStockGroups[key].groupName}</Menu.Item>);\r\n }\r\n } else {\r\n customStockGroupData.push(<Menu.Item key='0'><Icon type=\"plus-circle\" />{languageMessages['new.stock.pool']}</Menu.Item>);\r\n }\r\n\r\n let menu = (\r\n <Menu onClick={this.onJoinCustomStock}>\r\n {customStockGroupData}\r\n </Menu>\r\n );\r\n\r\n var formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 4 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 20 }, }, };\r\n\r\n var txt = stockPoolKey === 'GENERAL_INDEX' ? languageMessages['index'] : stockPoolKey === 'FUND' ? languageMessages['fund'] : languageMessages['stock'];\r\n txt = txt.toLowerCase();\r\n return (<div className='common-stock-result'>\r\n <PageHeader\r\n title={(<p style={{ fontWeight: 'normal', fontSize: '14px', color: '#a2a2a2' }}>\r\n <span>Scan result in group {this.props.stockGroupName}, </span>\r\n <FormattedMessage id=\"eligible.stocks\" values={{ num: dataSource.length || 0, name: txt }} />\r\n </p>)}\r\n extra={[\r\n <Dropdown key=\"1\" overlay={menu} disabled={!this.state.saveStock}><Button size='small'>{languageMessages['add.choice']}<Icon type=\"down\" /></Button></Dropdown>,\r\n <CSVLink key=\"2\" data={this.csvData} filename={this.fileName} className=\"ant-btn ant-btn-sm\" target=\"_blank\">\r\n <Icon type=\"download\" /><span>{languageMessages['save.stock']}</span>\r\n </CSVLink>\r\n ]} />\r\n <Modal title={languageMessages['new.stock.pool']}\r\n visible={this.state.modalVisible}\r\n maskClosable={false}\r\n onOk={this.handleSaveGroupName}\r\n confirmLoading={this.props.stockGroupLoadding}\r\n onCancel={this.handleCancelGroupName}>\r\n <Form {...formItemLayout}>\r\n <Form.Item\r\n label={languageMessages['stock.pool.name.form']}\r\n hasFeedback\r\n validateStatus={this.state.validateStatus}\r\n help={this.state.validateMessage}>\r\n <Input placeholder={languageMessages['stock.pool.name.placeholder']} id={this.state.validateStatus} value={this.state.stockName} onChange={this.onChangeGroupName} />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n <Table rowSelection={rowSelection}\r\n bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n pagination={{ pageSize: 20 }} />\r\n </div>)\r\n }\r\n}\r\n\r\nexport { OpenAIResultPage as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport history from '../../helpers/history';\r\n\r\nimport { Layout, PageHeader, Button, Input, Modal, Divider, Spin, message, Icon, List, Form, AutoComplete, Alert } from 'antd';\r\n\r\nimport OpenAISymbolGroupPage from '../../pannels/stock/OpenAISymbolGroupPage';\r\nimport StockOrderPage from '../../pannels/stock/StockOrderPage';\r\nimport OpenAIResultPage from '../../pannels/stock/OpenAIResultPage';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nimport '../../highlight-within-textarea.css';\r\nimport $ from 'jquery';\r\nwindow.jQuery = $;\r\nrequire('highlight-within-textarea');\r\n\r\nconst { Sider, Content } = Layout;\r\n\r\nconst TextArea = Input.TextArea;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nconst locale = window.appLocale.locale;\r\n\r\nconst ScanEmailForm = Form.create({ name: 'form_in_modal' })(\r\n class extends React.Component {\r\n state = {\r\n emailDataSource: [],\r\n };\r\n\r\n handleEmailChange = value => {\r\n this.setState({\r\n emailDataSource: !value || value.indexOf('@') >= 0 ? [] :\r\n [`${value}@gmail.com`,\r\n `${value}@outlook.com`,\r\n `${value}@@hotmail.com`,\r\n `${value}@yahoo.com`,\r\n `${value}@ymail.com`,\r\n `${value}@rocketmail.com`,\r\n `${value}@zoho.com`,\r\n `${value}@icloud.com`,\r\n `${value}@me.com`,\r\n `${value}@mac.com`,\r\n `${value}@fastmail.com`,\r\n `${value}@aol.com`,\r\n `${value}@love.com`,\r\n `${value}@ygm.com`,\r\n `${value}@games.com`,\r\n `${value}@wow.com`\r\n ],\r\n });\r\n };\r\n\r\n render() {\r\n const { naturalLanguage, formula, visible, onCancel, onCreate, isConfirmLoading, form } = this.props;\r\n const { getFieldDecorator } = form;\r\n\r\n const formItemLayout = {\r\n labelCol: {\r\n xs: { span: 8 },\r\n sm: { span: 4 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 16 },\r\n sm: { span: 20 },\r\n },\r\n };\r\n\r\n let context = 'Idea:';\r\n context += '\\n';\r\n context += naturalLanguage;\r\n context += '\\n';\r\n context += '\\n';\r\n context += 'formula:';\r\n context += '\\n';\r\n context += formula;\r\n\r\n return (\r\n <Modal\r\n title=\"Contact Us\"\r\n width={680}\r\n visible={visible}\r\n maskClosable={false}\r\n confirmLoading={isConfirmLoading}\r\n okText={'Send'}\r\n onOk={onCreate}\r\n onCancel={onCancel} >\r\n <Form {...formItemLayout}>\r\n <Form.Item label=\"Subject\">\r\n {getFieldDecorator('Subject', {\r\n initialValue: 'idea to formula translation',\r\n rules: [\r\n { required: true, min: 6, max: 100, message: 'Please input the email subject, with a length of 6-100' }\r\n ],\r\n })(<Input placeholder=\"idea to formula translation\" />)}\r\n </Form.Item>\r\n <Form.Item label=\"Email\">\r\n {getFieldDecorator('Email', {\r\n rules: [\r\n { type: 'email', message: 'The input is not valid Email', },\r\n { required: true, message: 'Please input the email address' }\r\n ],\r\n })(<AutoComplete\r\n dataSource={this.state.emailDataSource}\r\n onChange={this.handleEmailChange}\r\n getPopupContainer={trigger => trigger.parentNode}\r\n placeholder=\"Email address\"\r\n />)}\r\n </Form.Item>\r\n <Form.Item label=\"Content\">\r\n {getFieldDecorator('Content', {\r\n initialValue: context,\r\n rules: [{ required: true, message: 'Please input the email content' }],\r\n })(<TextArea rows={6} />)}\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n );\r\n }\r\n },\r\n);\r\n\r\nconst SaveFilterForm = Form.create({ name: 'save_form_in_modal' })(\r\n class extends React.Component {\r\n\r\n render() {\r\n const { visible, onCancel, onCreate, isConfirmLoading, form } = this.props;\r\n const { getFieldDecorator } = form;\r\n\r\n const formItemLayout = {\r\n labelCol: {\r\n xs: { span: 8 },\r\n sm: { span: 4 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 16 },\r\n sm: { span: 20 },\r\n },\r\n };\r\n\r\n return (\r\n <Modal\r\n //title=\"Save Script\"\r\n closable={false}\r\n visible={visible}\r\n maskClosable={false}\r\n confirmLoading={isConfirmLoading}\r\n okText={'Save'}\r\n onOk={onCreate}\r\n onCancel={onCancel} >\r\n <Form {...formItemLayout}>\r\n <Form.Item label=\"Name\">\r\n {getFieldDecorator('Name', {\r\n rules: [{ required: true, message: 'Please input the name' }],\r\n })(<TextArea rows={4} />)}\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n );\r\n }\r\n },\r\n);\r\n\r\nclass ScanPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n let tmpStockGroups = window.webType === 'US' ? '10401' : '3180';\r\n\r\n let tmpOrderType = '$VOLUME_NUM';\r\n let tmpOrderDirection = '0';\r\n\r\n /**\r\n var cacheFilterString = JSON.parse(sessionStorage.getItem(\"cacheScanCondition\") || '{}') || {};\r\n if (Object.keys(cacheFilterString).length > 0) {\r\n tmpFilterString = cacheFilterString['filterString'];\r\n tmpStockPoolKey = cacheFilterString['stockPoolKey'];\r\n tmpStockGroups = cacheFilterString['stockGroups'];\r\n\r\n tmpOrderType = cacheFilterString['orderType'];\r\n tmpOrderDirection = cacheFilterString['orderDirection'];\r\n\r\n sessionStorage.removeItem(\"cacheScanCondition\");\r\n }\r\n */\r\n\r\n let tmpWebOpenWith = window.performance.navigation.type;\r\n\r\n //var referrerUrl = document.referrer;\r\n var referrerUrl = \"https://chat.openai.com\";\r\n\r\n // è¦æ£€æŸ¥æ˜¯å¦åŒ…å«çš„åå—符串\r\n const searchString = \"https://chat.openai.com\";\r\n \r\n var tmpFormulaName = '';\r\n var tmpFilterString = '';\r\n var tmpUseFormula = '';\r\n\r\n var baseFormulaName = '';\r\n var baseFormulaString = '';\r\n\r\n // 使用 includes 方法检查\r\n if (referrerUrl.includes(searchString)) {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n baseFormulaName = searchParams.get(\"L\");\r\n var paramsFormulaName = baseFormulaName;\r\n if (paramsFormulaName) {\r\n paramsFormulaName = paramsFormulaName.replace(/\\s/g, '+');\r\n //paramsFormulaName = btoa(paramsFormulaName);\r\n //console.log(paramsFormulaName);\r\n try {\r\n var tmpParamsFormulaName = '';\r\n paramsFormulaName = atob(paramsFormulaName);\r\n //console.log(JSON.stringify(paramsFormulaName));\r\n var items = paramsFormulaName.split('\\n');\r\n for (var item in items) {\r\n if (items[item] != '') {\r\n if (tmpParamsFormulaName != '') tmpParamsFormulaName += '\\n';\r\n tmpParamsFormulaName += items[item];\r\n }\r\n }\r\n paramsFormulaName = tmpParamsFormulaName;\r\n } catch (error) {\r\n console.error(\"Error in decoding: \", error.message);\r\n }\r\n }\r\n\r\n baseFormulaString = searchParams.get(\"C\");\r\n var paramsFormulaString = baseFormulaString;\r\n if (paramsFormulaString) {\r\n paramsFormulaString = decodeURIComponent(paramsFormulaString);\r\n paramsFormulaString = paramsFormulaString.replace(/[\\s\\u200B]+$/g, '');\r\n\r\n paramsFormulaString = paramsFormulaString.trim();\r\n baseFormulaString = paramsFormulaString;\r\n\r\n paramsFormulaString = paramsFormulaString.replace(/\\s/g, '+');\r\n\r\n try {\r\n paramsFormulaString = atob(paramsFormulaString);\r\n tmpUseFormula = this.formatHtml(paramsFormulaString);\r\n } catch (error) {\r\n console.error(\"Error in decoding: \", error.message);\r\n\r\n //paramsFormulaString = encodeURIComponent(paramsFormulaString).replace(/%([0-9A-F]{2})/g, function (match, p1) {\r\n // return String.fromCharCode('0x' + p1);\r\n //});\r\n //paramsFormulaString = atob(paramsFormulaString);\r\n //tmpUseFormula = this.formatHtml(paramsFormulaString);\r\n }\r\n }\r\n\r\n tmpFormulaName = paramsFormulaName == null ? '' : paramsFormulaName;\r\n tmpFilterString = paramsFormulaString == null ? '' : paramsFormulaString;\r\n }\r\n \r\n this.user = {};\r\n this.state = {\r\n stockPoolKey: 'STOCK',\r\n\r\n stockGroups: tmpStockGroups,\r\n stockGroupName: languageMessages['sp.500'],\r\n \r\n formulaName: tmpFormulaName,\r\n filterString: tmpFilterString,\r\n useFormula: tmpUseFormula,\r\n\r\n orderType: tmpOrderType,\r\n orderDirection: tmpOrderDirection,\r\n isUseOrder: false,\r\n \r\n stockCount: 0,\r\n\r\n scanAlert: null,\r\n\r\n scanRequestLoadding: false,\r\n isShowStockResultPage: false,\r\n\r\n spinLoadding: true,\r\n\r\n isLuis: true,\r\n\r\n error: '',\r\n\r\n stockGroupLoadding: false,\r\n isStockGroupDone: false,\r\n\r\n ideaItems: [],\r\n\r\n messageVisible: false,\r\n isConfirmLoading: false,\r\n\r\n name: '',\r\n saveRequestLoadding: false,\r\n \r\n alertMessage: '',\r\n\r\n nameVisible: false,\r\n\r\n currSelFilterId: 0,\r\n\r\n webOpenWith: tmpWebOpenWith,\r\n baseFormulaName: baseFormulaName,\r\n baseFormulaString: baseFormulaString,\r\n };\r\n }\r\n\r\n formatHtml(formatString) {\r\n if (formatString === null || formatString === undefined || formatString === '') return '';\r\n\r\n var formatStrings = [];\r\n var items = formatString.split('\\n');\r\n for (var item in items) {\r\n if (items[item] != '') {\r\n const trimmedLine = items[item].trim();\r\n if (trimmedLine.startsWith('//')) continue;\r\n\r\n if (formatStrings.length > 0) formatStrings.push(<br key={item} />);\r\n formatStrings.push(trimmedLine);\r\n }\r\n }\r\n\r\n return formatStrings;\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.addListener(\"callScanResult\", this.callScanResult);\r\n\r\n emitter.addListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.addListener('callScanIntervalResult', this.callScanIntervalResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.removeListener('callScanResult', this.callScanResult);\r\n\r\n emitter.removeListener('callCustomSymbolGroups', this.callCustomSymbolGroups);\r\n\r\n emitter.removeListener('callScanIntervalResult', this.callScanIntervalResult);\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n message.error(filterResult.Description);\r\n //this.setState({ alertMessage: '' });\r\n } else {\r\n message.error(filterResult.Description);\r\n\r\n this.setState({ spinLoadding: false, scanRequestLoadding: false, stockGroupLoadding: false, isStockGroupDone: false, alertMessage: <Alert message={filterResult.Description} type=\"error\" showIcon /> });\r\n }\r\n }\r\n\r\n callScanIntervalResult = (date) => {\r\n message.warning('Next scan after ' + date);\r\n this.setState({ spinLoadding: false, scanRequestLoadding: false, stockGroupLoadding: false, isStockGroupDone: false, alertMessage: <Alert message={'Next scan after ' + date} type=\"warning\" showIcon /> });\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, scanRequestLoadding: false, stockGroupLoadding: false, isStockGroupDone: false });\r\n }\r\n\r\n callCustomSymbolGroups = (symbolGroup) => {\r\n let { isStockGroupDone } = this.state;\r\n\r\n if (symbolGroup.Status === 0) {\r\n var customStockGroupsCache = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroupsCache.length > 0) {\r\n const index = customStockGroupsCache.findIndex(item => item.groupId === symbolGroup.gi);\r\n if (index > -1) {\r\n customStockGroupsCache[index].groupName = symbolGroup.gn;\r\n customStockGroupsCache[index].symbolList = symbolGroup.sg;\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n } else {\r\n customStockGroupsCache.push({ groupId: symbolGroup.gi, userId: symbolGroup.ui, groupName: symbolGroup.gn, symbolList: symbolGroup.sg });\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroupsCache));\r\n\r\n isStockGroupDone = true;\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n } else {\r\n isStockGroupDone = false;\r\n message.error(symbolGroup.Description);\r\n }\r\n\r\n this.setState({ stockGroupLoadding: false, isStockGroupDone });\r\n }\r\n\r\n callScanResult = (scanAlert) => {\r\n if (scanAlert.hasOwnProperty('count') > 0 && scanAlert['count'] > 0) {\r\n this.setState({\r\n scanRequestLoadding: false,\r\n scanAlert: scanAlert,\r\n isShowStockResultPage: true,\r\n alertMessage: ''\r\n });\r\n } else {\r\n this.setState({\r\n scanRequestLoadding: false,\r\n alertMessage: <Alert message={languageMessages['no.choice.to.stock']} type=\"info\" showIcon />\r\n });\r\n \r\n message.info(languageMessages['no.choice.to.stock']);\r\n }\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n this.props.dispatch({\r\n type: \"action_get_scan_sectors\",\r\n payload: {\r\n u: this.user.username,\r\n sp: this.state.stockPoolKey,\r\n sg: this.state.stockGroups,\r\n wow: this.state.webOpenWith,\r\n bfn: this.state.baseFormulaName,\r\n bfs: this.state.baseFormulaString,\r\n fn: this.state.formulaName,\r\n fs: this.state.filterString,\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, naturalLangFormulas, customGroup, id } = props;\r\n \r\n switch (status) {\r\n case 'scan_sectors_success':\r\n var ideaItems = [];\r\n if (naturalLangFormulas.length > 0) {\r\n for (var item in naturalLangFormulas) {\r\n ideaItems.push({ 'id': naturalLangFormulas[item].id, 'name': naturalLangFormulas[item].name, 'naturalLanguage': naturalLangFormulas[item].naturalLanguage, 'formulas': naturalLangFormulas[item].formulas });\r\n }\r\n }\r\n\r\n this.setState({ ideaItems, spinLoadding: false, webOpenWith: 1 });\r\n break;\r\n case 'scan_sectors_fail':\r\n var error = languageMessages['get.data.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n this.setState({ spinLoadding: false });\r\n break;\r\n case 'update_customStock_success':\r\n var customStockGroups = JSON.parse(sessionStorage.getItem(\"CustomStockGroupsCache\") || '[]') || [];\r\n if (customStockGroups.length > 0) {\r\n const index = customStockGroups.findIndex(item => item.groupId === customGroup.groupId);\r\n if (index > -1) {\r\n customStockGroups[index].groupName = customGroup.groupName;\r\n customStockGroups[index].symbolList = customGroup.symbolList;\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n } else {\r\n customStockGroups.push(customGroup);\r\n }\r\n sessionStorage.setItem(\"CustomStockGroupsCache\", JSON.stringify(customStockGroups));\r\n\r\n var content = <span>{strReplace(languageMessages['already.add.success'], { '{num}': this.state.stockCount })},<a href=\"javascript:;\" onClick={this.jumpMyCustomStock}>{languageMessages['view.my.self-selected.stock']}</a></span>;\r\n this.timerModal(languageMessages['self-selected.stock.added.success'], content);\r\n break;\r\n case 'update_customStock_fail':\r\n var error = languageMessages['joining.stock.pool.failed'];\r\n switch (state) {\r\n case 0:\r\n break;\r\n case 2:\r\n error = languageMessages['user.exception'];\r\n break;\r\n default:\r\n break;\r\n }\r\n message.error(error);\r\n break;\r\n case 'get_stock_count_success':\r\n this.setState({\r\n //stockGroups: data.stockGroups,\r\n //stockPoolKey: data.stockPoolKey,\r\n error: '',\r\n });\r\n break;\r\n case 'get_stock_count_fail':\r\n this.setState({\r\n error: '',\r\n });\r\n break;\r\n case 'gpts_message_success':\r\n let { ideaItems, name, formulaName, filterString } = this.state;\r\n\r\n ideaItems.unshift({ 'id': id, 'name': name, 'naturalLanguage': formulaName, 'formulas': filterString });\r\n \r\n this.formRef.props.form.resetFields();\r\n\r\n this.setState({ ideaItems, currSelFilterId: id, nameVisible: false, saveRequestLoadding: false });\r\n\r\n message.success('Save success');\r\n break;\r\n case 'gpts_message_fail':\r\n this.setState({ saveRequestLoadding: false });\r\n break;\r\n case 'send_email_success':\r\n this.scanform.props.form.resetFields();\r\n\r\n this.setState({\r\n messageVisible: false,\r\n isConfirmLoading: false\r\n });\r\n\r\n message.success('Send success');\r\n break;\r\n case 'send_email_fail':\r\n this.setState({\r\n isConfirmLoading: false,\r\n });\r\n message.error('Send fail');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n timerModal(title, content) {\r\n let secondsToGo = 5;\r\n const modal = Modal.success({\r\n title: title,\r\n content: content,\r\n });\r\n\r\n setTimeout(() => {\r\n modal.destroy();\r\n }, secondsToGo * 1000);\r\n }\r\n\r\n toggleLuisStockPicker = () => {\r\n var { isLuis } = this.state;\r\n isLuis = isLuis ? false : true;\r\n this.setState({ isLuis });\r\n }\r\n\r\n handleStockGroup(data) {\r\n this.setState({\r\n stockGroups: data.stockGroups,\r\n stockPoolKey: data.stockPoolKey,\r\n stockGroupName: data.stockGroupName\r\n }, () => {\r\n /**\r\n if (user.username === undefined) {\r\n this.setState({ spinLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n }\r\n */\r\n this.props.dispatch({ type: \"action_get_stock_count\", payload: { UserId: this.user.username, stockPoolKey: data.stockPoolKey, stockGroups: data.stockGroups } });\r\n });\r\n }\r\n\r\n handleCustomStock(data) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.setState({\r\n stockGroupLoadding: true,\r\n isStockGroupDone: false,\r\n stockCount: data.StockCount\r\n }, () => {\r\n\r\n var action = 'new';\r\n // æ›´æ–°è‚¡ç¥¨æ± \r\n if (data.GroupId > 0) {\r\n action = 'update';\r\n //this.props.dispatch({ type: \"action_update_formula_custom_stock\", payload: { GroupId: data.GroupId, UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n } else {\r\n //this.props.dispatch({ type: \"action_add_formula_custom_stock\", payload: { UserId: this.user.username, GroupName: data.GroupName, SymbolList: data.SymbolList } });\r\n }\r\n\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendCustomSymbolGroups', userId: this.user.username,\r\n msg: {\r\n Action: action,\r\n GroupId: data.GroupId,\r\n UserId: this.user.username,\r\n GroupName: data.GroupName,\r\n OldGroupName: data.GroupName,\r\n SymbolList: data.SymbolList\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n jumpMyCustomStock = e => {\r\n e.preventDefault();\r\n\r\n Modal.destroyAll();\r\n\r\n emitter.emit('callJump', 'customStock');\r\n history.push(\"/customStock\");\r\n }\r\n\r\n handleStockOrder(data) {\r\n this.setState({\r\n orderType: data.orderType,\r\n orderDirection: data.orderDirection,\r\n isUseOrder: data.isUseOrder,\r\n });\r\n }\r\n\r\n startScanFilter = () => {\r\n if (this.user.username === undefined) {\r\n //saved to cache\r\n /**\r\n let tmpScanCondition = {\r\n filterString: this.state.filterString,\r\n stockPoolKey: this.state.stockPoolKey,\r\n stockGroups: this.state.stockGroups,\r\n orderType: this.state.orderType,\r\n orderDirection: this.state.orderDirection\r\n };\r\n\r\n //sessionStorage.setItem(\"cacheScanCondition\", JSON.stringify(tmpScanCondition));\r\n */\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var { stockGroups,\r\n stockPoolKey,\r\n formulaName,\r\n filterString,\r\n orderType,\r\n orderDirection,\r\n isUseOrder } = this.state;\r\n\r\n if (stockGroups === '') {\r\n this.setState({\r\n error: 'STOCK_GROUP_ERROR',\r\n });\r\n return;\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n message.error(languageMessages['strategy.content.length.too.long']);\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'Formula scan', 'scan', 'Vernacular Formula scan']);\r\n\r\n this.setState({ isShowStockResultPage: false, scanRequestLoadding: true, alertMessage: '' }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendScanFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'scan',\r\n Action: 'scan',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n openFilter = () => {\r\n this.setState({ nameVisible: true, saveRequestLoadding: false });\r\n };\r\n\r\n handleNameCancel = () => {\r\n this.setState({ nameVisible: false, saveRequestLoadding: false });\r\n }\r\n\r\n saveFilter = () => {\r\n const { form } = this.formRef.props;\r\n form.validateFields((err, values) => {\r\n if (err) {\r\n return;\r\n }\r\n\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var { formulaName, filterString } = this.state;\r\n\r\n this.setState({ name: values[\"Name\"], saveRequestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_set_gpts_chat_message\",\r\n payload: {\r\n u: this.user.username,\r\n n: values[\"Name\"],\r\n l: formulaName,\r\n f: filterString\r\n }\r\n });\r\n });\r\n }\r\n });\r\n };\r\n\r\n showModal = () => {\r\n this.setState({ messageVisible: true });\r\n };\r\n\r\n handleModalCancel = () => {\r\n this.setState({ messageVisible: false });\r\n };\r\n\r\n saveFormRef = formRef => {\r\n this.formRef = formRef;\r\n };\r\n\r\n scanFormRef = formRef => {\r\n this.scanform = formRef;\r\n };\r\n \r\n sendEmail = () => {\r\n const { form } = this.scanform.props;\r\n form.validateFields((err, values) => {\r\n if (err) {\r\n return;\r\n }\r\n\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n this.setState({ isConfirmLoading: true }, () => {\r\n\r\n var emailBody = values[\"Content\"];\r\n emailBody = emailBody.replace(/\\n/g, \"<br />\");\r\n\r\n this.props.dispatch({\r\n type: \"action_send_email\",\r\n payload: {\r\n u: this.user.username,\r\n s: values[\"Subject\"],\r\n e: values[\"Email\"],\r\n c: emailBody\r\n }\r\n });\r\n\r\n });\r\n }\r\n });\r\n };\r\n\r\n handleSelFiter = (id) => {\r\n let { ideaItems } = this.state;\r\n\r\n var ideas = ideaItems.filter(function (e) { return e.id == id });\r\n if (ideas.length > 0) {\r\n var idea = ideas[0];\r\n this.setState({\r\n currSelFilterId: id,\r\n formulaName: idea.naturalLanguage,\r\n filterString: idea.formulas,\r\n useFormula: this.formatHtml(idea.formulas),\r\n });\r\n }\r\n \r\n };\r\n\r\n render() {\r\n var { stockPoolKey, stockGroupName, filterString, useFormula, formulaName, stockGroups, ideaItems, scanAlert, messageVisible, isConfirmLoading, nameVisible, saveRequestLoadding, alertMessage } = this.state;\r\n var { sectors, stockCount } = this.props;\r\n\r\n var defaultSymbolGroups = {\r\n stockPoolKey: stockPoolKey,\r\n stockGroups: stockGroups,\r\n sectors: sectors,\r\n stockCount: stockCount,\r\n }\r\n\r\n let textareaPlaceholder = languageMessages['vernacular.left.prompt'];\r\n\r\n let statement = languageMessages['input.stock.picking.statement'];\r\n if (window.webType === 'US') {\r\n let aryStatement = [];\r\n let tmpStatement = statement.replace('Highlighted', ',');\r\n let tmpStatements = tmpStatement.split(',');\r\n for (let i = 0; i <= tmpStatements.length; i++) {\r\n if (i === 1) {\r\n aryStatement.push(<span key={'statement' + i} className='common-bg'>Highlighted</span>)\r\n }\r\n aryStatement.push(tmpStatements[i]);\r\n }\r\n\r\n statement = aryStatement;\r\n\r\n var val = 'type your complete idea, e.g. \"#val\".';\r\n textareaPlaceholder = 'Type key word, e.g. \"Bollinger band\", then select from ideas in left panel, or';\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += val.replace('#val', 'Price makes 50 day high');\r\n textareaPlaceholder += String.fromCharCode(10);\r\n textareaPlaceholder += 'Scan the market.Have fun learning.';\r\n }\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['vernacular title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['vernacular title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['vernacular title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['vernacular description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className='common-page-header'>\r\n <PageHeader title={(<h1>{'AI ScreenBot'}</h1>)} subTitle={'(Free beta, limited time only)'} />\r\n </div>\r\n <Layout className='scan-content luis-main-content'>\r\n <OpenAISymbolGroupPage defaultSymbolGroups={defaultSymbolGroups} stockGroup={this.handleStockGroup.bind(this)} error={this.state.error} />\r\n\r\n <div className='common-title'>\r\n <Divider type=\"vertical\" />\r\n <span style={{ cursor: 'pointer' }} onClick={this.toggleLuisStockPicker}>\r\n {languageMessages['vernacular.stock.picking']}\r\n <Icon type={this.state.isLuis ? 'up' : 'down'} style={{ padding: '0 5px' }} />\r\n </span>\r\n </div>\r\n <div style={{ display: this.state.isLuis ? '' : 'none' }}>\r\n <Layout className={window.webType === 'US' ? 'luis luis-us' : 'luis'}>\r\n <Sider width={360}>\r\n <List size={\"small\"}\r\n dataSource={ideaItems}\r\n pagination={ideaItems.length < 10 ? false : {\r\n size: \"small\",\r\n pageSize: 10,\r\n }}\r\n renderItem={item => (\r\n <List.Item key={item.id} onClick={() => this.handleSelFiter(item.id)} className={this.state.currSelFilterId === item.id ? 'checked' : ''}>\r\n <span title={item.name} className=\"list-item-span\">{item.name}</span>\r\n </List.Item>\r\n )}\r\n />\r\n\r\n </Sider>\r\n <Layout className='luis-content'>\r\n <h2 style={{ padding: '10px 5px', marginBottom: 5, fontWeight: 'normal' }}>{'Idea'}</h2>\r\n <TextArea className=\"luis-highlight-textarea\" placeholder={textareaPlaceholder} rows={4} value={formulaName} />\r\n\r\n <h2 style={{ padding: '10px 5px', marginBottom: 5, fontWeight: 'normal' }}>{languageMessages['correspond.formula']}</h2>\r\n <div className='common-edit' style={{ height: '120px' }}>{useFormula}</div>\r\n <StockOrderPage filterString={filterString} isUseOrder={this.state.isUseOrder} stockOrder={this.handleStockOrder.bind(this)} />\r\n <div style={{ padding: '10px 0' }}>\r\n <div style={{ float: \"left\" }}>\r\n <Button size='small' onClick={this.startScanFilter} loading={this.state.scanRequestLoadding} disabled={this.props.scanRequestLoadding || filterString === ''}>\r\n {'Scan'}\r\n </Button>\r\n <span style={{ width: 10, display: 'inline-block' }}></span>\r\n <Button size='small' onClick={this.openFilter} disabled={filterString === ''}>{'Save'}</Button>\r\n <SaveFilterForm\r\n wrappedComponentRef={this.saveFormRef}\r\n visible={nameVisible}\r\n onCancel={this.handleNameCancel}\r\n onCreate={this.saveFilter}\r\n isConfirmLoading={saveRequestLoadding}\r\n />\r\n <span style={{ marginLeft: '10px', display: 'inline-block' }}>{alertMessage}</span>\r\n </div>\r\n <div style={{ float: \"right\" }}>\r\n <Button type=\"primary\" onClick={() => this.showModal()}>Support</Button>\r\n <ScanEmailForm\r\n wrappedComponentRef={this.scanFormRef}\r\n naturalLanguage={formulaName}\r\n formula={filterString}\r\n visible={messageVisible}\r\n onCancel={this.handleModalCancel}\r\n onCreate={this.sendEmail}\r\n isConfirmLoading={isConfirmLoading}\r\n />\r\n </div>\r\n </div>\r\n </Layout>\r\n </Layout>\r\n </div>\r\n </Layout>\r\n \r\n {this.state.isShowStockResultPage && (<div>\r\n <div className='common-separate-block'></div>\r\n <Content className='scan-content'>\r\n <OpenAIResultPage isStockGroupDone={this.state.isStockGroupDone}\r\n stockGroupLoadding={this.state.stockGroupLoadding}\r\n stockPoolKey={stockPoolKey}\r\n stockGroupName={stockGroupName}\r\n scanAlert={scanAlert}\r\n customStockEvent={this.handleCustomStock.bind(this)} />\r\n </Content></div>)}\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.vernacular;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(ScanPage);\r\nexport { page as default }","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { connect } from 'react-redux';\r\nimport { Layout, List, Input, Button, Spin, Avatar, Table, Descriptions } from 'antd';\r\n\r\nimport './demo.css';\r\n\r\nimport emitter from '../Evt.js';\r\n\r\nconst { Content } = Layout;\r\nconst { TextArea } = Input;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nfunction strReplace(source, jsonObjcet) {\r\n for (var v in jsonObjcet) {\r\n source = source.replace(v, jsonObjcet[v]);\r\n }\r\n return source;\r\n}\r\n\r\nclass DemoPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.user = {};\r\n this.state = {\r\n buildType: 0,\r\n messages: [],\r\n newMessage: '',\r\n botMessage: '',\r\n\r\n strategies: [],\r\n strategyTBloginMaps: [],\r\n tradeAccounts: [],\r\n\r\n selectedRowKeys: 0,\r\n\r\n stockPoolKey: 'STOCK',\r\n stockGroups: '10000',\r\n\r\n /** scan */\r\n formulaName: '',\r\n filterString: '',\r\n\r\n orderType: '$VOLUME_NUM',\r\n orderDirection: '0',\r\n isUseOrder: false,\r\n \r\n\r\n /** filter */\r\n filterName: '',\r\n alertInterval: '400',\r\n\r\n sourceFilterId: 0,\r\n validPeriodBarCount: '',\r\n validPeriodBarInterval: '',\r\n\r\n /** strategy */\r\n strategyName: \"\",\r\n buyingPower: \"1000000\",\r\n stopAddingThreshold: \"-1000000\",\r\n liquidationThreshold: \"-1000000\",\r\n commissionType: \"PerValue\",\r\n commissionCost: \"0.0003\",\r\n noReEntry: \"TRUE\",\r\n openPositionLimit: \"9999\",\r\n executeStrategy: \"FALSE\",\r\n tBAccount: \"\",\r\n remark: \"\",\r\n\r\n entryCondition: [],\r\n exitCondition: [],\r\n\r\n requestLoadding: false,\r\n\r\n spinLoadding: false\r\n };\r\n\r\n this.messagesEndRef = React.createRef(); // 创建 ref\r\n }\r\n\r\n componentDidMount() {\r\n emitter.addListener('initPage', this.init);\r\n emitter.addListener(\"callSendError\", this.callSendError);\r\n emitter.addListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.addListener(\"callScanResult\", this.callScanResult);\r\n\r\n emitter.addListener('callScanIntervalResult', this.callScanIntervalResult);\r\n }\r\n\r\n componentWillMount() {\r\n this.loadMessage();\r\n this.init();\r\n }\r\n\r\n componentWillUnmount() {\r\n emitter.removeListener('initPage', this.init);\r\n emitter.removeListener('callSendError', this.callSendError);\r\n emitter.removeListener('callFilterRequestResult', this.callFilterRequestResult);\r\n\r\n emitter.removeListener('callScanResult', this.callScanResult);\r\n\r\n emitter.removeListener('callScanIntervalResult', this.callScanIntervalResult);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.scrollToBottom(); // æ¯æ¬¡æ›´æ–°ç»„ä»¶åŽæ»šåŠ¨åˆ°åº•éƒ¨\r\n }\r\n\r\n scrollToBottom = () => {\r\n if (this.messagesEndRef.current) {\r\n this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }\r\n\r\n callFilterRequestResult = (filterResult, filter) => {\r\n if (filterResult.Status === 0) {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n filtersCache[filterResult.FilterId] = filterResult.FilterName;\r\n sessionStorage.setItem(\"FiltersCache\", JSON.stringify(filtersCache));\r\n\r\n //var content = <span>{languageMessages['to view, please go']}\"<a href=\"javascript:;\" onClick={this.jumpMyFilter}>{languageMessages['my filter']}</a>\"</span>;\r\n //this.timerModal(languageMessages['new.filter.success'], content);\r\n } else {\r\n //message.error(filterResult.Description);\r\n }\r\n\r\n this.setState({\r\n buildType: 0,\r\n requestLoadding: false\r\n });\r\n }\r\n\r\n callScanIntervalResult = (date) => {\r\n let { messages } = this.state;\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({\r\n botMessage: '1',\r\n spinLoadding: false,\r\n requestLoadding: false,\r\n messages\r\n }, () => {\r\n var txts = ['Next scan after ' + date];\r\n this.setBotMessage(txts);\r\n });\r\n }\r\n\r\n callSendError = (status) => {\r\n this.setState({ spinLoadding: false, requestLoadding: false, buildType: 0 });\r\n }\r\n\r\n callScanResult = (scanAlert) => {\r\n var dataSource = [];\r\n if (scanAlert.hasOwnProperty('count') > 0 && scanAlert['count'] > 0) {\r\n //èŽ·å–æ¯æ”¯è‚¡ç¥¨çš„å˜é‡å€¼\r\n scanAlert.stockItems.forEach((item, index) => {\r\n var row = {\r\n key: index,\r\n sequence: index + 1\r\n }\r\n\r\n //å°†æ¯ä¸ªå˜é‡å€¼æ·»åŠ åˆ°row对象\r\n for (var kk in item) {\r\n if (kk === 'symbolCode' || kk === 'symbolName') {\r\n row[kk] = item[kk];\r\n }\r\n\r\n if (kk === '$LATEST_PRICE' || kk === '$RANGE_PERCENT') {\r\n if (kk === '$RANGE_PERCENT' && item[kk] === '-1000000000') {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n } else {\r\n row[kk] = parseFloat(item[kk]).toFixed(2);\r\n }\r\n }\r\n }\r\n dataSource.push(row);\r\n })\r\n }\r\n\r\n let columns = [\r\n {\r\n title: languageMessages['sequence'],\r\n dataIndex: 'sequence',\r\n width: 50\r\n }, {\r\n title: languageMessages['symbol.code'],\r\n dataIndex: 'symbolCode',\r\n sorter: (a, b) => a.symbolCode < b.symbolCode ? -1 : a.symbolCode > b.symbolCode ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['symbol.name'],\r\n dataIndex: 'symbolName',\r\n sorter: (a, b) => a.symbolName < b.symbolName ? -1 : a.symbolName > b.symbolName ? 1 : 0,\r\n sortDirections: ['descend', 'ascend'],\r\n }, {\r\n title: languageMessages['latest.price'],\r\n dataIndex: '$LATEST_PRICE',\r\n sorter: (a, b) => a.$LATEST_PRICE - b.$LATEST_PRICE,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n return <span>{text}</span>;\r\n },\r\n }, {\r\n title: languageMessages['quote.change'],\r\n dataIndex: '$RANGE_PERCENT',\r\n sorter: (a, b) => a.$RANGE_PERCENT - b.$RANGE_PERCENT,\r\n align: 'right',\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text, row, index) => {\r\n if (row['$RANGE_PERCENT'] >= 0) {\r\n return <span style={{ color: window.webType === 'US' ? 'green' : 'red' }}>{text}%</span>;\r\n } else {\r\n return <span style={{ color: window.webType === 'US' ? 'red' : 'green' }}>{text}%</span>;\r\n }\r\n },\r\n }\r\n ]\r\n\r\n //const rowSelection = {\r\n // title: languageMessages['select.all'],\r\n // selectedRowKeys: this.state.selectedRowKeys,\r\n // //onClick: this.onSelectChange,\r\n // onChange: this.onSelectChange\r\n //}\r\n\r\n var html = (<Table //rowSelection={rowSelection}\r\n key={Math.random()}\r\n bordered size='small'\r\n columns={columns}\r\n dataSource={dataSource}\r\n pagination={false} />)\r\n\r\n let { messages } = this.state;\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({\r\n requestLoadding: false,\r\n messages,\r\n botMessage: '',\r\n buildType: 0\r\n }, () => {\r\n var txts = [\"Here's the scan result:\", <br key={Math.random()} />, html];\r\n this.setBotMessage(txts);\r\n });\r\n }\r\n\r\n loadMessage = () => {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n\r\n var paramsFormulaName = searchParams.get(\"L\");\r\n if (paramsFormulaName) {\r\n paramsFormulaName = paramsFormulaName.replace(/\\s/g, '+');\r\n //paramsFormulaName = btoa(paramsFormulaName);\r\n //console.log(paramsFormulaName);\r\n try {\r\n var tmpParamsFormulaName = '';\r\n paramsFormulaName = atob(paramsFormulaName);\r\n //console.log(JSON.stringify(paramsFormulaName));\r\n var items = paramsFormulaName.split('\\n');\r\n for (var item in items) {\r\n if (items[item] != '') {\r\n if (tmpParamsFormulaName != '') tmpParamsFormulaName += '\\n';\r\n tmpParamsFormulaName += items[item];\r\n }\r\n }\r\n paramsFormulaName = this.formatHtml(tmpParamsFormulaName);\r\n } catch (error) {\r\n console.error(\"Error in decoding: \", error.message);\r\n }\r\n }\r\n\r\n //var tmpUseFormula = '';\r\n\r\n var paramsFormulaString = searchParams.get(\"C\");\r\n if (paramsFormulaString) {\r\n paramsFormulaString = decodeURIComponent(paramsFormulaString);\r\n paramsFormulaString = paramsFormulaString.replace(/[\\s\\u200B]+$/g, '');\r\n\r\n paramsFormulaString = paramsFormulaString.trim();\r\n\r\n paramsFormulaString = paramsFormulaString.replace(/\\s/g, '+');\r\n\r\n try {\r\n paramsFormulaString = atob(paramsFormulaString);\r\n //tmpUseFormula = this.formatHtml(paramsFormulaString);\r\n } catch (error) {\r\n console.error(\"Error in decoding: \", error.message);\r\n\r\n //paramsFormulaString = encodeURIComponent(paramsFormulaString).replace(/%([0-9A-F]{2})/g, function (match, p1) {\r\n // return String.fromCharCode('0x' + p1);\r\n //});\r\n //paramsFormulaString = atob(paramsFormulaString);\r\n //tmpUseFormula = this.formatHtml(paramsFormulaString);\r\n }\r\n }\r\n\r\n var formulaName = paramsFormulaName == null ? '' : paramsFormulaName;\r\n var filterString = paramsFormulaString == null ? '' : paramsFormulaString;\r\n\r\n this.initMessage = \"Hello! I'm your trading assistant bot, here to help you find the perfect stocks, option strategies, or create complex trading strategies for backtesting or live trading. Just let me know what you need, and I'll find the best solutions tailored to your specific trading criteria and market outlook. How can I assist you today?\";\r\n this.initMsg = [\"Hello, what do you want to do\", <br key={Math.random()} />, <a key={Math.random()} onClick={() => this.selectChatMessage(\"Building filters\")}>1. Building filters</a>, <br key={Math.random()} />, <a key={Math.random()} onClick={() => this.selectChatMessage(\"Building strategy\")}>2. Building strategy</a>];\r\n\r\n var buildType = 0;\r\n if (filterString !== '') {\r\n buildType = 1;\r\n const newMessages = [{ text: formulaName, sender: 'user' }];\r\n this.setState({ messages: newMessages, newMessage: '' }, () => {\r\n this.setBotMessage(['Do you want to start scanning?']);\r\n });\r\n } else {\r\n var txts = [this.initMessage];\r\n this.setBotMessage(txts);\r\n }\r\n\r\n this.setState({ buildType, formulaName, filterString });\r\n }\r\n\r\n init = () => {\r\n this.user = JSON.parse(sessionStorage.getItem(\"auth\") || '{}') || {};\r\n\r\n //if (this.user.username === undefined) {\r\n // this.props.dispatch({ type: \"action_non_user\" });\r\n //}\r\n\r\n //this.props.dispatch({ type: \"action_get_strategy_backtest_result\", payload: { u: this.user.username, bi: 1179025 } });\r\n }\r\n\r\n setBotMessage = (botResponse) => {\r\n let i = 0; // Index for botResponse elements\r\n let j = 0; // Index for characters in the current string element\r\n let currentText = []; // Temporary array to hold the current bot message being constructed\r\n\r\n // Initial setup to ensure there is a placeholder for the bot's current response\r\n this.setState(prevState => ({\r\n messages: [...prevState.messages, { text: [], sender: 'bot' }]\r\n }));\r\n\r\n const interval = setInterval(() => {\r\n const charsToAdd = Math.floor(Math.random() * 10) + 1;\r\n\r\n if (typeof botResponse[i] === 'string') {\r\n if (j < botResponse[i].length) {\r\n const nextChunk = botResponse[i].substring(j, j + charsToAdd); // Get the next chunk of characters\r\n currentText.push(nextChunk); // Append the chunk to current text\r\n j += charsToAdd; // Move the index forward by the number of characters added\r\n } else {\r\n i++; // Move to the next element in botResponse\r\n j = 0; // Reset index for new string or element\r\n }\r\n } else if (React.isValidElement(botResponse[i])) {\r\n currentText.push(botResponse[i]); // Directly add the React element\r\n i++; // Move to the next element\r\n }\r\n\r\n // Update the state to reflect the current built message\r\n this.setState(prevState => {\r\n const updatedMessages = prevState.messages.slice(0, -1); // Copy all but the last message\r\n return {\r\n messages: [...updatedMessages, { text: currentText, sender: 'bot' }]\r\n };\r\n });\r\n\r\n if (i >= botResponse.length) {\r\n clearInterval(interval); // Clear interval when the response is fully built\r\n }\r\n }, 100);\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n var { status, state, strategies, strategyTBloginMaps, tradeAccounts, statistics } = props;\r\n\r\n let { messages } = this.state;\r\n switch (status) {\r\n case 'get_strategy_items_success':\r\n\r\n var txts = [\"Your current strategy is as follows:\", <br key={Math.random()} />];\r\n \r\n var html = (<List key={Math.random()}\r\n size=\"small\"\r\n bordered\r\n dataSource={strategies}\r\n renderItem={item => <List.Item key={item.strategyId}>{item.strategyName}</List.Item>}\r\n />);\r\n\r\n txts.push(html);\r\n\r\n txts.push(<br key={Math.random()} />);\r\n\r\n txts.push(\"Your trading account:\");\r\n \r\n var dataSource = [];\r\n for (var item in tradeAccounts) {\r\n let containsValue = strategyTBloginMaps.some(obj => obj.tbUser === tradeAccounts[item].tbUser);\r\n\r\n dataSource.push({\r\n key: item,\r\n tradeAccount: tradeAccounts[item].tbUser,\r\n type: tradeAccounts[item] == 0 ? \"Live\": \"Paper\",\r\n status: containsValue ? \"in use\" : \"not used\"\r\n });\r\n }\r\n\r\n let columns = [\r\n {\r\n title: \"Trade Account\",\r\n dataIndex: 'tradeAccount'\r\n }, {\r\n title: \"Type\",\r\n dataIndex: 'type'\r\n }, {\r\n title: \"Status\",\r\n dataIndex: 'status'\r\n }\r\n ]\r\n\r\n html = (<Table bordered size='small' key={Math.random()}\r\n columns={columns}\r\n dataSource={dataSource}\r\n pagination={false} />)\r\n\r\n txts.push(html);\r\n\r\n txts.push(<br key={Math.random()} />);\r\n\r\n txts.push(\"Continuing to create a new strategy, Please provide the strategy name\");\r\n \r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({\r\n strategies, strategyTBloginMaps, tradeAccounts,\r\n requestLoadding: false,\r\n messages,\r\n botMessage: 'Strategy Name'\r\n }, () => {\r\n this.setBotMessage(txts);\r\n });\r\n\r\n break;\r\n case 'get_strategy_items_failed':\r\n\r\n break;\r\n case 'get_strategy_backtest_result_success':\r\n let statisticsResult = JSON.parse(statistics);\r\n\r\n var html = (<Descriptions title=\"\" bordered size={\"small\"} column={1} key={Math.random()}></Descriptions>);\r\n if (statisticsResult.length > 0) {\r\n let tmpStatistics = statisticsResult[0];\r\n html = (<Descriptions title=\"\" bordered size={\"small\"} column={1} key={Math.random()}>\r\n <Descriptions.Item label=\"Total P&L\">{tmpStatistics[\"totalPnl\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Gross Profit\">{tmpStatistics[\"grossProfit\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Gross Loss\">{this.strToNumber(tmpStatistics[\"grossLoss\"],0)}</Descriptions.Item>\r\n <Descriptions.Item label=\"Profit Factor\">{this.strToNumber(tmpStatistics[\"profitFactor\"])}</Descriptions.Item>\r\n\r\n <Descriptions.Item label=\"Total Trades\">{tmpStatistics[\"totalTrades\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Winner Percent\">{this.strToNumber(tmpStatistics[\"winnerPercent\"])+\"%\"}</Descriptions.Item>\r\n <Descriptions.Item label=\"Winner Count\">{tmpStatistics[\"winnerCount\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Loser Count\">{tmpStatistics[\"loserCount\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Avg Profit Per\">{this.strToNumber(tmpStatistics[\"avgProfitPer\"])}</Descriptions.Item>\r\n\r\n <Descriptions.Item label=\"Avg Profit\">{this.strToNumber(tmpStatistics[\"avgProfit\"])}</Descriptions.Item>\r\n <Descriptions.Item label=\"Avg Loss\">{this.strToNumber(tmpStatistics[\"avgLoss\"],0)}</Descriptions.Item>\r\n <Descriptions.Item label=\"Avg per Profit Loss Ratio\">{this.strToNumber(tmpStatistics[\"avgPerProfitLossRatio\"])}</Descriptions.Item>\r\n <Descriptions.Item label=\"Initial Capital\">{tmpStatistics[\"initialBuyingPower\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\" Rate of return on capital\">{this.strToNumber(tmpStatistics[\"initialRateOfReturnOnCapital\"])+\"%\"}</Descriptions.Item>\r\n <Descriptions.Item label=\" Annualized rate of return\">{this.strToNumber(tmpStatistics[\"annualizedRateOfReturn\"])+\"%\"}</Descriptions.Item>\r\n <Descriptions.Item label=\"Total transactions\">{tmpStatistics[\"totalTransactions\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Max Drawdown\">{tmpStatistics[\"maxDrawdown\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Max Drawdown Percent\">{this.strToNumber(tmpStatistics[\"maxDrawdownPercent\"])+\"%\"}</Descriptions.Item>\r\n\r\n <Descriptions.Item label=\"Max Drawdown Time\">{tmpStatistics[\"maxDrawdownTime\"]}</Descriptions.Item>\r\n <Descriptions.Item label=\"Total P&L and Max Drawdown Ratio\">{this.strToNumber(tmpStatistics[\"netProfitRatioOfTheMaximumRetracement\"])}</Descriptions.Item>\r\n <Descriptions.Item label=\"Pessimistic Rate Of Return\">{this.strToNumber(tmpStatistics[\"pessimisticRateOfReturn\"])+\"%\"}</Descriptions.Item>\r\n <Descriptions.Item label=\"Sharpe Ratio Daily\">{this.strToNumber(tmpStatistics[\"sharpeRatioDaily\"])}</Descriptions.Item>\r\n <Descriptions.Item label=\"Sortino Ratio Daily\">{this.strToNumber(tmpStatistics[\"sortinoRatioDaily\"])}</Descriptions.Item>\r\n\r\n </Descriptions>);\r\n }\r\n \r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({\r\n messages,\r\n //buildType: 0,\r\n botMessage: \"5\",\r\n requestLoadding: false\r\n }, () => {\r\n let txts = [\"Got it. Backtesting now...\", <br key={Math.random()} />, \"Here's the backtest result:\", <br key={Math.random()} />, html];\r\n this.setBotMessage(txts);\r\n });\r\n break;\r\n case 'get_strategy_backtest_result_failed':\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n strToNumber(str, sign = -1) {\r\n var num = Number(str);\r\n \r\n var roundedNum = Math.round(num * 100) / 100;\r\n if (sign == 0) roundedNum = sign - roundedNum;\r\n\r\n return roundedNum.toFixed(2).padEnd(4, '0');\r\n }\r\n\r\n formatHtml(txt) {\r\n if (txt === null || txt === undefined || txt === '') return '';\r\n\r\n var txts = [];\r\n var items = txt.split('\\n');\r\n for (var item in items) {\r\n if (items[item] != '') {\r\n const trimmedLine = items[item].trim();\r\n if (trimmedLine.startsWith('//')) continue;\r\n\r\n if (txts.length > 0) txts.push(<br key={item} />);\r\n txts.push(trimmedLine);\r\n }\r\n }\r\n\r\n return txts;\r\n }\r\n\r\n selectChatMessage(newMessage) {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { messages, buildType, filterName, filterString } = this.state;\r\n\r\n if (newMessage == 'Building filters') {\r\n buildType = 2;\r\n filterName = '';\r\n filterString = '';\r\n }\r\n\r\n if (newMessage == 'Building strategy') buildType = 3;\r\n\r\n const newMessages = [...messages, { text: newMessage, sender: 'user' }];\r\n this.setState({ messages: newMessages, newMessage: '', botMessage: newMessage, buildType, filterName, filterString, requestLoadding: true }, () => {\r\n this.handleBotResponse(newMessage);\r\n });\r\n }\r\n }\r\n\r\n SendScanFilter = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n var { stockGroups,\r\n stockPoolKey,\r\n filterString,\r\n orderType,\r\n orderDirection,\r\n isUseOrder } = this.state;\r\n\r\n filterString = `SMA10DAY_VOLUME>5000000;\r\n SMA20DAY_CLOSE > 20;\r\n $qty: 20000 / last;\r\n $target: last * 0.05;\r\n $stop: $target;\r\n $bbL: BbLower('D', 20, 2.0, -1);\r\n $bbU1: BbUpper('D', 20, 2.0, -1);\r\n $bbU2: BbUpper('D', 20, 2.0, -2);\r\n $bbU3: BbUpper('D', 20, 2.0, -3);\r\n last > $bbU1;\r\n LAST > $bbU2;\r\n $bbU1 > $bbU2;`;\r\n\r\n if (filterString !== '') {\r\n\r\n //if (filterString.length > 8000) {\r\n // message.error(languageMessages['strategy.content.length.too.long']);\r\n // return;\r\n //}\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'scan', 'scan', 'chat']);\r\n\r\n this.setState({ requestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendScanFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'scan',\r\n Action: 'scan',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: '',\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n OrderType: isUseOrder ? '' : orderType,\r\n OrderDirection: isUseOrder ? '' : orderDirection\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleMessageChange = e => {\r\n this.setState({ newMessage: e.target.value });\r\n };\r\n\r\n \r\n\r\n handleSendMessage = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { messages, newMessage, botMessage, buildType, filterName, filterString } = this.state;\r\n let txtMessage = newMessage;\r\n let tmpMessage = txtMessage.toLowerCase();\r\n\r\n if (tmpMessage.includes(\"build me the following strategy\")) {\r\n buildType = 4;\r\n botMessage = \"0\";\r\n } else if (tmpMessage.includes(\"do a stock scan using following criteria\")) {\r\n buildType = 5;\r\n botMessage = \"0\";\r\n } else if (tmpMessage.includes(\"yes\")) {\r\n if (buildType != 4 && buildType != 5) {\r\n botMessage = \"Yes\";\r\n }\r\n }\r\n\r\n //const compareFirstChars = (str1, str2, numChars) => str1.substring(0, numChars) === str2.substring(0, numChars);\r\n //if (compareFirstChars(tmpMessage,'yes',2)) {\r\n // if (buildType == 4) {\r\n // //botMessage = \"Yes\";\r\n // } else {\r\n // botMessage = \"Yes\";\r\n // }\r\n //}\r\n\r\n //if (tmpMessage == 'building filters') {\r\n // buildType = 2;\r\n // filterName = '';\r\n // filterString = '';\r\n // botMessage = \"building filters\";\r\n //}\r\n\r\n //if (tmpMessage == 'building strategy') {\r\n // buildType = 3;\r\n // botMessage = \"Building strategy\";\r\n //}\r\n\r\n newMessage = this.formatHtml(newMessage);\r\n messages = [...messages, { text: newMessage, sender: 'user' }];\r\n\r\n this.setState({ messages, newMessage: '', botMessage, buildType, filterName, filterString, requestLoadding: true }, () => {\r\n this.handleBotResponse(txtMessage);\r\n });\r\n }\r\n };\r\n\r\n handleBotResponse = (txt) => {\r\n let { messages, botMessage, buildType } = this.state;\r\n \r\n if (buildType == 0) {\r\n var txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n buildType = 0;\r\n botMessage = \"0\";\r\n this.setState({ messages, buildType, botMessage, requestLoadding: false }, () => {\r\n //var txts = [\"Hi! I'm a bot that provides answers to your trading questions, whether you want to find stocks to trade based on your own criteria, find the best option strategy, or build a complex strategy. How can I help you?\"];\r\n var txts = [this.initMessage];\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n });\r\n } else {\r\n var txts = [];\r\n switch (buildType) {\r\n case 1:\r\n if (botMessage == \"Yes\") {\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n if (this.user.username === undefined) {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, requestLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.SendScanFilter();\r\n }\r\n });\r\n } else {\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, buildType: 0, requestLoadding: false }, () => {\r\n this.setBotMessage(this.initMsg);\r\n });\r\n }, 2000);\r\n });\r\n }\r\n break;\r\n case 2:\r\n if (botMessage == \"Yes\") {\r\n txts = [<Spin key={1} />];\r\n const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages: newMessages }, () => {\r\n this.handleBuildFilter();\r\n });\r\n }\r\n\r\n if (botMessage == \"Building filters\") {\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n\r\n var data = []\r\n if (filtersCache !== null && Object.keys(filtersCache).length > 0) {\r\n for (var ii in filtersCache) {\r\n data.push({ id: ii, filterName: filtersCache[ii] });\r\n }\r\n }\r\n\r\n var html = (<List key={Math.random()}\r\n size=\"small\"\r\n bordered\r\n dataSource={data}\r\n renderItem={item => <List.Item key={item.id}>{item.filterName}</List.Item>}\r\n />);\r\n\r\n txts = [\"Your current filter is as follows:\", <br key={1} />, html, \"Continue to create new filters, please provide your ideas.\"];\r\n\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: 'Filter Formula', requestLoadding: false }, () => {\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n });\r\n }\r\n\r\n if (botMessage == 'Filter Formula') {\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n let { filterName, filterString } = this.state;\r\n\r\n filterString = \"LoopAnd({BarClose('30',#)>=BarClose('30',#-1)},-5,-1,1);\";\r\n\r\n var isExist = '';\r\n if (filterName == '') {\r\n isExist = 'Filter Name';\r\n txts = ['Filter Formula', <br key={1} />, <code key={Math.random()}>{filterString}</code>, <br key={2} />, 'Next, the filter needs a name'];\r\n } else {\r\n txts = ['Filter Formula', <br key={1} />, <code key={Math.random()}>{filterString}</code>, <br key={2} />, 'Next, do you want to create a filter'];\r\n }\r\n\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: isExist, filterString, requestLoadding: false }, () => {\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n });\r\n }\r\n\r\n if (botMessage == 'Filter Name') {\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n let { filterName } = this.state;\r\n\r\n filterName = txt;\r\n\r\n var isExist = '';\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n if (Object.values(filtersCache).includes(filterName)) {\r\n filterName = '';\r\n isExist = 'Filter Name';\r\n txts = ['Filter name already exists', <br key={1} />, filterName, <br key={2} />, 'Please provide a new filter name'];\r\n } else {\r\n txts = ['Filter Name', <br key={1} />, filterName, <br key={2} />, 'Do you want to create a filter'];\r\n }\r\n\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: isExist, filterName, requestLoadding: false }, () => {\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n\r\n //const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n //this.setState({ messages: newMessages, botMessage: isExist, filterName, requestLoadding: false });\r\n });\r\n }\r\n \r\n break;\r\n case 3:\r\n if (botMessage == \"Yes\") {\r\n txts = [<Spin key={1} />];\r\n const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages: newMessages }, () => {\r\n this.handleBuildStrategy();\r\n });\r\n }\r\n\r\n if (botMessage == \"Building strategy\") {\r\n txts = [<Spin key={1} />];\r\n const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages: newMessages }, () => {\r\n if (this.user.username === undefined) {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, requestLoadding: false }, () => {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n });\r\n } else {\r\n this.props.dispatch({ type: \"action_get_strategy_items\", payload: this.user.username });\r\n }\r\n });\r\n }\r\n\r\n if (botMessage == 'Strategy Name') {\r\n let { strategyName, strategies } = this.state;\r\n\r\n strategyName = txt;\r\n\r\n var isExist = '';\r\n var tmpData = strategies.filter(function (e) { return e.strategyName == strategyName });\r\n if (tmpData.length > 0) {\r\n strategyName = '';\r\n isExist = 'Strategy Name';\r\n txts = ['Strategy name already exists', <br key={1} />, strategyName, <br key={2} />, 'Please provide a new strategy name'];\r\n } else {\r\n isExist = 'Buying Power';\r\n txts = ['Strategy Name', <br key={1} />, strategyName, <br key={2} />, 'Please provide purchasing power for the strategy'];\r\n }\r\n\r\n const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages: newMessages, botMessage: isExist, strategyName });\r\n }\r\n\r\n if (botMessage == 'Buying Power') {\r\n let { buyingPower, stopAddingThreshold, liquidationThreshold } = this.state;\r\n\r\n buyingPower = '1000000';\r\n stopAddingThreshold = '-1000000';\r\n liquidationThreshold = '-1000000';\r\n\r\n txts = ['Continue to provide warehouse entry conditions', <br key={1} />];\r\n\r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n\r\n var data = []\r\n if (filtersCache !== null && Object.keys(filtersCache).length > 0) {\r\n for (var ii in filtersCache) {\r\n data.push({ id: ii, filterName: filtersCache[ii] });\r\n }\r\n }\r\n\r\n var html = (<List key={Math.random()}\r\n size=\"small\"\r\n bordered\r\n dataSource={data}\r\n renderItem={item => <List.Item key={item.id}>{item.filterName}</List.Item>}\r\n />);\r\n\r\n txts.push(html);\r\n\r\n txts.push(<br key={1} />);\r\n\r\n txts.push('Please select the filter you want to use from the list');\r\n\r\n const newMessages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages: newMessages, botMessage: 'Select Filter', buyingPower, stopAddingThreshold, liquidationThreshold });\r\n }\r\n\r\n if (botMessage == 'Entry Condition') {\r\n const { entryCondition } = this.state;\r\n\r\n /** EntryCondition */\r\n let entryConditionMode = {\r\n FilterName: \"\",\r\n FilterType: \"Stock\",\r\n Direction: \"L\",\r\n Quantity: \"10\",\r\n OrderType: \"Market\",\r\n OrderLimit: \"\",\r\n TIFUnit: \"MINUTE\",\r\n TIF: \"\",\r\n TargetDistance: \"\",\r\n StopDistance: \"\",\r\n TrailingStop: \"\",\r\n MaxHoldingPeriodUnit: \"DAY\",\r\n MaxHoldingPeriod: \"\",\r\n ClosingOrderType: \"\",\r\n ClosingOrderLimit: \"\",\r\n ForceCloseEOD: \"FALSE\",\r\n ForceCloseTime: \"14:55:00\",\r\n ScaleInSeq: \"\",\r\n ScaleInDistance: \"\",\r\n CancelOrder: \"\"\r\n }\r\n\r\n entryCondition.push(entryConditionMode);\r\n }\r\n \r\n /** ExitCondition */\r\n //let exitConditionMode = {\r\n // FilterName: \"\",\r\n // QuantityUnit: \"PERCENT\",\r\n // Quantity: \"10\",\r\n // OrderType: \"Market\",\r\n // OrderLimit: \"\",\r\n // CancelOrder: \"\"\r\n //}\r\n\r\n //exitCondition.push(exitConditionMode);\r\n\r\n break;\r\n case 4:\r\n let timeoutCount = 10000;\r\n if (botMessage !== \"4\") timeoutCount = Math.floor(Math.random() * (5000 - 2000 + 1)) + 2000;\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n setTimeout(() => {\r\n let { strategyName } = this.state;\r\n messages = messages.slice(0, -1);\r\n\r\n if (txt.toLowerCase().includes(\"build me the following strategy\")) {\r\n\r\n //if (botMessage == \"0\") {\r\n txts = [\"Got it. You want the following rules for your strategy:\",\r\n <br key={1} />, <br key={2} />,\r\n \"Average daily volume over the past 10 days is greater than 5, 000, 000 shares\",\r\n <br key={3} />,\r\n \"Average daily close over the past 20 days above 50\",\r\n <br key={4} />,\r\n \"Current price is greater than today's bollinger upper band\",\r\n <br key={5} />,\r\n \"Current price is greater than yesterday's bollinger upper band\",\r\n <br key={6} />,\r\n \"Today's bollinger upper band is greater than yesterday's bollinger upper band\",\r\n <br key={7} />,\r\n \"Capital allocated per stock is $20, 000.\",\r\n <br key={8} />,\r\n \"Profit target is 5 %.\",\r\n <br key={9} />,\r\n \"Position will be held for maximum of 5 days.\",\r\n <br key={10} />, <br key={11} />,\r\n \"Is my understanding correct?\"\r\n ];\r\n botMessage = \"1\";\r\n //} else if (botMessage == \"1\") {\r\n } else if (botMessage == \"1\" && txt.toLowerCase().includes(\"yes\")) {\r\n txts = [\"Sounds good. What would you like to name this strategy?\"];\r\n botMessage = \"2\";\r\n //} else if (botMessage == \"2\") {\r\n } else if (botMessage == \"2\" && txt.toLowerCase().includes(\"upmomentum5day\")) {\r\n strategyName = txt;\r\n txts = [\"I will go ahead and build the strategy for you.Please wait.\",\r\n <br key={1} />,\r\n \"Strategy '\" + strategyName + \"' is built in your account.Please check.\",\r\n <br key={2} />,\r\n \"What else can I help you with?\"\r\n ];\r\n botMessage = \"3\";\r\n //} else if (botMessage == \"4\") {\r\n } else if (txt.toLowerCase().includes(\"deploy into simulation\")) {\r\n txts = [\"No problem. I have deployed your strategy '\" + strategyName + \"' into real-time simulation, under account 'yc_demo@quancept.com'.\",\r\n <br key={1} />,\r\n \"You can monitor the real - time simulated trades under 'Strategy -> Simulation'.\"\r\n ];\r\n //buildType = 0;\r\n //botMessage = \"\";\r\n //} else if (botMessage == \"3\") {\r\n } else if (txt.toLowerCase().includes(\"backtest the strategy from\")) {\r\n txts = [\"Got it. Backtesting now...\"];\r\n botMessage = \"4\";\r\n } else {\r\n txts = [this.initMessage];\r\n buildType = 0;\r\n botMessage = '';\r\n }\r\n\r\n this.setState({ messages, buildType, botMessage, strategyName, requestLoadding: false }, () => {\r\n this.setBotMessage(txts);\r\n\r\n if (botMessage == \"4\") {\r\n setTimeout(() => {\r\n this.props.dispatch({ type: \"action_get_strategy_backtest_result\", payload: { u: this.user.username, bi: 1181985 } });\r\n }, 2000);\r\n }\r\n });\r\n }, timeoutCount);\r\n });\r\n\r\n break;\r\n case 5:\r\n txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n setTimeout(() => {\r\n if (txt.toLowerCase().includes(\"do a stock scan using following criteria\")) {\r\n //if (botMessage == \"0\") {\r\n txts = [\"Got it. You want the following rules for your scan:\",\r\n <br key={1} />, <br key={2} />,\r\n \"Average daily volume over the past 10 days is greater than 5,000,000 shares\",\r\n <br key={3} />,\r\n \"Average daily close over the past 20 days above 50\",\r\n <br key={4} />,\r\n \"Current price is greater than today's bollinger upper band\",\r\n <br key={5} />,\r\n \"Current price is greater than yesterday's bollinger upper band\",\r\n <br key={6} />,\r\n \"Today's bollinger upper band is greater than yesterday's bollinger upper band\",\r\n <br key={10} />, <br key={11} />,\r\n \"Is my understanding correct?\"\r\n ];\r\n botMessage = \"1\";\r\n\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage, requestLoadding: false }, () => {\r\n this.setBotMessage(txts);\r\n });\r\n //} else if (botMessage == \"1\") {\r\n } else if (botMessage == \"1\" && txt.toLowerCase().includes(\"yes\")) {\r\n botMessage = \"2\";\r\n\r\n this.setState({ messages, botMessage, requestLoadding: false }, () => {\r\n this.SendScanFilter();\r\n });\r\n } else {\r\n messages = messages.slice(0, -1);\r\n\r\n buildType = 0;\r\n botMessage = '';\r\n this.setState({ messages, buildType, botMessage, requestLoadding: false }, () => {\r\n this.setBotMessage([this.initMessage]);\r\n });\r\n }\r\n }, 2000);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n handleBuildFilter = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { messages, stockGroups, stockPoolKey, filterName, filterString, alertInterval, sourceFilterId, validPeriodBarCount, validPeriodBarInterval } = this.state;\r\n\r\n if (filterName === '') {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: 'Filter Name', requestLoadding: false }, () => {\r\n this.setBotMessage(['Please provide a new filter name']);\r\n });\r\n }, 2000);\r\n return;\r\n }\r\n \r\n var filtersCache = JSON.parse(sessionStorage.getItem(\"FiltersCache\") || '{}') || {};\r\n if (Object.values(filtersCache).includes(filterName)) {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: 'Filter Name', requestLoadding: false }, () => {\r\n var txts = ['Filter name already exists', <br key={1} />, filterName, <br key={2} />, 'Please provide a new filter name'];\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n }\r\n\r\n if (filterString.length > 8000) {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, botMessage: 'Filter Formula', requestLoadding: false }, () => {\r\n var txts = [languageMessages['strategy.content.length.too.long']];\r\n this.setBotMessage(txts);\r\n });\r\n }, 2000);\r\n return;\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'filter', 'filter', 'chat']);\r\n\r\n this.setState({ requestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendFilter', userId: this.user.username,\r\n msg: {\r\n Category: 'filter',\r\n Action: 'new',\r\n UserId: this.user.username,\r\n FilterId: 0,\r\n FilterName: filterName,\r\n GroupType: stockPoolKey,\r\n FilterString: filterString,\r\n SymbolGroupId: stockGroups,\r\n AlertInterval: alertInterval,\r\n SourceFilterId: sourceFilterId,\r\n ValidPeriodBarCount: validPeriodBarCount,\r\n ValidPeriodBarInterval: validPeriodBarInterval,\r\n State: 1\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n handleBuildStrategy = () => {\r\n if (this.user.username === undefined) {\r\n this.props.dispatch({ type: \"action_non_user\" });\r\n } else {\r\n let { messages, strategyName,\r\n buyingPower,\r\n stopAddingThreshold,\r\n liquidationThreshold,\r\n commissionType,\r\n commissionCost,\r\n noReEntry,\r\n openPositionLimit,\r\n executeStrategy,\r\n tBAccount,\r\n remark,\r\n\r\n entryCondition,\r\n exitCondition,\r\n strategies\r\n } = this.state;\r\n\r\n if (strategyName === '') {\r\n var txts = [<Spin key={1} />];\r\n messages = [...messages, { text: txts, sender: 'bot' },];\r\n this.setState({ messages }, () => {\r\n setTimeout(() => {\r\n messages = messages.slice(0, -1);\r\n\r\n this.setState({ messages, requestLoadding: false }, () => {\r\n this.setBotMessage(this.initMsg);\r\n });\r\n }, 2000);\r\n });\r\n return;\r\n }\r\n\r\n if (entryCondition.length == 0) {\r\n this.setState({\r\n \r\n });\r\n return;\r\n }\r\n\r\n for (var item in entryCondition) {\r\n if (entryCondition[item].FilterName == '') {\r\n\r\n break;\r\n }\r\n }\r\n\r\n var strategyNames = [];\r\n for (var item in strategies) {\r\n strategyNames.push(strategies[item.strategyName]);\r\n }\r\n\r\n window._hmt && window._hmt.push(['_trackEvent', 'strategy', 'strategy', 'chat']);\r\n\r\n this.setState({ requestLoadding: true }, () => {\r\n this.props.dispatch({\r\n type: \"action_send_hub_message\", payload: {\r\n service: 'SendStrategy', userId: this.user.username,\r\n msg: {\r\n UserId: this.user.username,\r\n StrategyName: strategyName,\r\n BuyingPower: buyingPower,\r\n StopAddingThreshold: stopAddingThreshold,\r\n LiquidationThreshold: liquidationThreshold,\r\n CommissionType: commissionType,\r\n CommissionCost: commissionCost,\r\n NoReEntry: noReEntry,\r\n OpenPositionLimit: openPositionLimit,\r\n ExecuteStrategy: executeStrategy,\r\n TBAccount: tBAccount,\r\n Remark: remark,\r\n\r\n EntryCondition: entryCondition,\r\n ExitCondition: exitCondition,\r\n Strategies: strategyNames,\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { messages, newMessage, requestLoadding } = this.state;\r\n\r\n return (<Content className='main-container total-content'>\r\n <Helmet>\r\n <title>{languageMessages['vernacular title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['vernacular keywords']} />\r\n <meta name=\"description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['vernacular title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['vernacular description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['vernacular title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['vernacular description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <Spin spinning={this.state.spinLoadding}>\r\n <div className=\"chat-container\">\r\n <div className=\"chat-messages\">\r\n <List dataSource={messages}\r\n renderItem={item => (\r\n <List.Item\r\n className={`message ${item.sender === 'bot' ? 'bot' : 'user'}`}\r\n >\r\n {item.sender === 'bot' ? (\r\n <List.Item.Meta\r\n avatar={<Avatar src=\"/static/images/icon-robot.png\" />}\r\n title=\"bot\"\r\n description={item.text}\r\n content={item.text}\r\n />\r\n ) : (\r\n <List.Item.Meta\r\n avatar={<Avatar src=\"/static/images/icon-user.png\" />}\r\n title=\"You\"\r\n description={item.text}\r\n content={item.text}\r\n />\r\n )}\r\n </List.Item>\r\n )}\r\n />\r\n <div ref={this.messagesEndRef} />\r\n </div>\r\n <div className=\"chat-input\">\r\n <TextArea placeholder=\"Type your message here...\" value={newMessage} onChange={this.handleMessageChange} autoSize />\r\n <Button type=\"primary\" loading={requestLoadding} disabled={requestLoadding} onClick={this.handleSendMessage}>Send</Button>\r\n </div>\r\n </div>\r\n </Spin>\r\n </Content>);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return state.demo;\r\n}\r\n\r\nconst page = connect(mapStateToProps)(DemoPage);\r\nexport { page as default }","import React, { useState, useEffect } from 'react';\r\n\r\nconst CountdownTimer = ({ totalTimeLeft, onTimeUpdate }) => {\r\n const [count, setCount] = useState(totalTimeLeft);\r\n\r\n useEffect(() => {\r\n // 如果倒计时结æŸï¼Œå°±ä¸å†è®¾ç½®å®šæ—¶å™¨\r\n if (count === 0) {\r\n onTimeUpdate(count);\r\n return;\r\n }\r\n\r\n // 设置定时器\r\n const intervalId = setInterval(() => {\r\n setCount(count => count - 1);\r\n }, 1000);\r\n\r\n // 清ç†å®šæ—¶å™¨\r\n return () => clearInterval(intervalId);\r\n }, [count, onTimeUpdate]);\r\n\r\n return (\r\n <div style={{ margin: \"10px 0\", lineHeight: '30px' }}>Jump to homepage in {count} seconds</div>\r\n );\r\n};\r\n\r\nexport default CountdownTimer;","import React, { Component } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport history from '../../helpers/history';\r\nimport { Layout, Button } from 'antd';\r\n\r\nimport CountdownTimer from './CountdownTimer';\r\n\r\nconst { Content } = Layout;\r\n\r\nvar languageMessages = window.appLocale.messages;\r\n\r\nclass PageNotFoundPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n count: 3,\r\n }\r\n }\r\n\r\n onTimeUpdate = (count) => {\r\n if (count <= 0) {\r\n this.GoHome();\r\n }\r\n }\r\n\r\n GoHome = () => {\r\n history.push(\"/\");\r\n }\r\n\r\n render() {\r\n return (<Content className='main-container total-content'><Helmet>\r\n <title>{languageMessages['title']}</title>\r\n <meta name=\"keywords\" content={languageMessages['keywords']} />\r\n <meta name=\"description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"og:title\" content={languageMessages['title']} />\r\n <meta property=\"og:url\" content=\"https://us.quancept.com/\" />\r\n <meta property=\"og:type\" content=\"website\" />\r\n <meta name=\"og:description\" content={languageMessages['description']} />\r\n\r\n <meta property=\"twitter:url\" content=\"https://us.quancept.com/\" />\r\n <meta name=\"twitter:title\" content={languageMessages['title']} />\r\n <meta name=\"twitter:description\" content={languageMessages['description']} />\r\n <meta name=\"twitter:site\" content=\"https://us.quancept.com/\" />\r\n </Helmet>\r\n <div style={{ padding: '0px 50px', textAlign: 'center' }}>\r\n <h1 style={{ lineHeight: '200px', fontSize: 20 }}>404 - Not Found</h1>\r\n\r\n <CountdownTimer totalTimeLeft={this.state.count} onTimeUpdate={this.onTimeUpdate} />\r\n <div><Button size='small' onClick={this.GoHome}>Back home</Button></div>\r\n </div>\r\n </Content>);\r\n }\r\n}\r\n\r\nexport { PageNotFoundPage as default }","import \"babel-polyfill\";\r\nimport React, { Suspense } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\n\r\nimport { Layout, ConfigProvider, Spin, Icon } from 'antd';\r\nimport { IntlProvider, addLocaleData } from 'react-intl';\r\n\r\n//import './locale/zh-Hans-CN';\r\nimport './locale/en-US';\r\n\r\nimport { Router, Route, Switch } from 'react-router-dom';\r\n\r\nimport store from './helpers/store';\r\nimport history from './helpers/history';\r\n\r\nimport { RestrictedPage, HeaderPage, FooterPage } from './pages';\r\n\r\n//import HomePage from './pages/home/HomePage';\r\nimport LoginPage from './pages/auth/Login';\r\nimport RegisterPage from './pages/auth/Register';\r\nimport ForgetPage from './pages/auth/Forget';\r\n\r\nimport HelpPage from './pages/help/HelpPage';\r\nimport DownloadPage from './pages/download/DownloadPage';\r\nimport VideoPage from './pages/video/VideoPage';\r\n\r\nimport AboutPage from './pages/about/AboutPage';\r\n\r\nimport BlankPage from './pages/blank/BlankPage';\r\nimport TestPage from './pages/test/TestPage';\r\n\r\nimport ServicePage from './pages/stripe/ServicePage';\r\nimport ChargePage from './pages/stripe/ChargePage';\r\nimport SubscriptionPage from './pages/stripe/SubscriptionPage';\r\n\r\nimport BillingPage from './pages/stripe/BillingPage';\r\nimport UpdatePage from './pages/stripe/UpdatePage';\r\n\r\nimport HawkeyePage from './pages/hawkeye/HawkeyePage';\r\nimport HawkeyeListPage from './pages/hawkeye/HawkeyeListPage';\r\n\r\nimport ConceptPage from './pages/concept/ConceptPage';\r\nimport EditStrategyPage from './pages/concept/EditStrategyPage';\r\nimport VernacularPage from './pages/vernacular/VernacularPage';\r\nimport MyStrategyPage from './pages/vernacular/MyStrategyPage';\r\nimport UpdateStrategyPage from './pages/strategy/UpdateStrategyPage';\r\n\r\nimport StrategyPage from './pages/strategy/StrategyPage';\r\nimport CustomStockPage from './pages/customStock/CustomStockPage';\r\n\r\nimport OptionPage from './pages/option/OptionPage';\r\n\r\nimport FactorPage from './pages/factor/FactorPage';\r\nimport FactorIndex from './pages/factor/FactorIndex';\r\nimport FactorAnalyzer from './pages/factor/FactorAnalyzer';\r\n\r\nimport Correlation from './pages/correlation/index';\r\n\r\nimport BacktestPage from './pages/backtest/BacktestPage';\r\nimport MyBacktestPage from './pages/backtest/MyBacktestPage';\r\n\r\nimport OptimalGridPage from './pages/backtest/OptimalGridPage';\r\nimport MyOptimalGridPage from './pages/backtest/MyOptimalGridPage';\r\n\r\nimport OptimalBatchPage from './pages/backtest/OptimalBatchPage';\r\nimport MyOptimalBatchPage from './pages/backtest/MyOptimalBatchPage';\r\n\r\nimport OptimalOptPage from './pages/backtest/OptimalOptPage';\r\nimport MyOptimalOptPage from './pages/backtest/MyOptimalOptPage';\r\n\r\nimport BacktestGridPage from './pages/backtest/BacktestGridPage';\r\nimport MyBacktestGridPage from './pages/backtest/MyBacktestGridPage';\r\nimport AIGridPage from './pages/backtest/AIGridPage';\r\nimport MyAIGridPage from './pages/backtest/MyAIGridPage';\r\n\r\nimport AIBatchPage from './pages/backtest/AIBatchPage';\r\nimport MyAIBatchPage from './pages/backtest/MyAIBatchPage';\r\n\r\nimport AIOptPage from './pages/backtest/AIOptPage';\r\nimport MyAIOptPage from './pages/backtest/MyAIOptPage';\r\n\r\n\r\nimport RealTimePage from './pages/trade/RealTimePage';\r\nimport SimulationPage from './pages/trade/SimulationPage';\r\n\r\nimport GeneralStrategyPage from './pages/trade/GeneralStrategyPage';\r\nimport RealTimeGeneralStrategyPage from './pages/trade/RealTimeGeneralStrategyPage';\r\n\r\nimport RollingPage from './pages/backtest/RollingPage';\r\nimport MyRollingPage from './pages/backtest/MyRollingPage';\r\n\r\nimport TdAmeritradePage from './pages/tdAmeritrade/TdAmeritradePage';\r\n\r\nimport FilterPage from './pages/filter/FilterPage';\r\nimport MyFilterPage from './pages/filter/MyFilterPage';\r\nimport UpdateFilterPage from './pages/filter/UpdateFilterPage';\r\n\r\nimport PortfolioPage from './pages/portfolio/PortfolioPage';\r\nimport MyPortfolioPage from './pages/portfolio/MyPortfolioPage';\r\n\r\nimport PortfolioOptPage from './pages/portfolio/PortfolioOptPage';\r\nimport MyPortfolioOptPage from './pages/portfolio/MyPortfolioOptPage';\r\n\r\nimport ScanPage from './pages/vernacular/ScanPage';\r\n\r\nimport DemoPage from './pages/demo/DemoPage';\r\n\r\nimport PageNotFound from './pages/layout/PageNotFoundPage';\r\n\r\nimport \"antd/dist/antd.css\";\r\n//import './index.css';\r\nimport './index-us.css';\r\n\r\n//window.webType = 'CN';\r\nwindow.webType = 'US';\r\n\r\nconst appLocale = window.appLocale;\r\naddLocaleData(appLocale.data);\r\n\r\n//const ConceptPage = React.lazy(() => import('./pages/concept/ConceptPage'));\r\n//const EditStrategyPage = React.lazy(() => import('./pages/concept/EditStrategyPage'));\r\n//const VernacularPage = React.lazy(() => import('./pages/vernacular/VernacularPage'));\r\n//const MyStrategyPage = React.lazy(() => import('./pages/vernacular/MyStrategyPage'));\r\n//const StrategyPage = React.lazy(() => import('./pages/strategy/StrategyPage'));\r\n//const CustomStockPage = React.lazy(() => import('./pages/customStock/CustomStockPage'));\r\nconst MemberPage = React.lazy(() => import('./pages/member/MemberPage'));\r\nconst CouponPage = React.lazy(() => import('./pages/member/CouponPage'));\r\n\r\n//const OptionPage = React.lazy(() => import('./pages/option/OptionPage'));\r\n\r\n//const FactorPage = React.lazy(() => import('./pages/factor/FactorPage'));\r\n//const FactorIndex = React.lazy(() => import('./pages/factor/FactorIndex'));\r\n//const FactorAnalyzer = React.lazy(() => import('./pages/factor/FactorAnalyzer'));\r\n\r\n//const HawkeyePage = React.lazy(() => import('./pages/hawkeye/HawkeyePage'));\r\n//const HawkeyeListPage = React.lazy(() => import('./pages/hawkeye/HawkeyeListPage'));\r\n\r\nSpin.setDefaultIndicator(<Icon type=\"loading\" className='common-loading-icon' spin />);\r\nconst Loading = () => <div className='common-root-loading-container'><div className='common-root-loading'><Spin></Spin></div></div>\r\nconst rootElement = document.getElementById('root');\r\nReactDOM.render(\r\n <ConfigProvider locale={appLocale.antd}>\r\n <IntlProvider locale={appLocale.locale} messages={appLocale.messages}>\r\n <Provider store={store}>\r\n <Router history={history}>\r\n <Layout>\r\n <HeaderPage />\r\n <Switch>\r\n \r\n <Route exact path=\"/scan\" component={() => <Suspense fallback={<Loading />}><ScanPage /></Suspense>} />\r\n\r\n <Route exact path=\"/chat\" component={() => <Suspense fallback={<Loading />}><DemoPage /></Suspense>} />\r\n\r\n <Route exact path=\"/\" component={() => <Suspense fallback={<Loading />}><DemoPage /></Suspense>} />\r\n \r\n <Route path=\"/login\" component={() => <LoginPage />} />\r\n <Route path=\"/register\" component={() => <RegisterPage />} />\r\n <Route path=\"/forget\" component={() => <ForgetPage />} />\r\n\r\n <Route path=\"/help\" component={() => <HelpPage />} />\r\n <Route path=\"/download\" component={() => <DownloadPage />} />\r\n <Route path=\"/video\" component={() => <VideoPage />} />\r\n\r\n <Route path=\"/f\" component={() => <FilterPage />} />\r\n <Route path=\"/mf\" component={() => <MyFilterPage />} />\r\n <Route path=\"/uf\" component={() => <UpdateFilterPage />} />\r\n\r\n <Route path=\"/concept\" component={() => <ConceptPage />} />\r\n <Route path=\"/editStrategy\" component={() => <EditStrategyPage />} />\r\n\r\n <Route path=\"/vernacular\" component={() => <VernacularPage />} />\r\n <Route path=\"/myStrategy\" component={() => <MyStrategyPage />} />\r\n\r\n <Route path=\"/strategy\" component={() => <StrategyPage />} />\r\n <Route path=\"/customStock\" component={() => <CustomStockPage />} />\r\n <Route path=\"/usp\" component={() => <UpdateStrategyPage />} />\r\n\r\n <Route path=\"/bt\" component={() => <BacktestPage />} />\r\n <Route path=\"/mbt\" component={() => <MyBacktestPage />} />\r\n\r\n <Route path=\"/ogbt\" component={() => <OptimalGridPage />} />\r\n <Route path=\"/mogbt\" component={() => <MyOptimalGridPage />} />\r\n\r\n <Route path=\"/ob\" component={() => <OptimalBatchPage />} />\r\n <Route path=\"/mob\" component={() => <MyOptimalBatchPage />} />\r\n\r\n <Route path=\"/oo\" component={() => <OptimalOptPage />} />\r\n <Route path=\"/moo\" component={() => <MyOptimalOptPage />} />\r\n\r\n <Route path=\"/bg\" component={() => <BacktestGridPage />} />\r\n <Route path=\"/mbg\" component={() => <MyBacktestGridPage />} />\r\n <Route path=\"/aig\" component={() => <AIGridPage />} />\r\n <Route path=\"/maig\" component={() => <MyAIGridPage />} />\r\n\r\n <Route path=\"/aib\" component={() => <AIBatchPage />} />\r\n <Route path=\"/maib\" component={() => <MyAIBatchPage />} />\r\n\r\n <Route path=\"/aio\" component={() => <AIOptPage />} />\r\n <Route path=\"/maio\" component={() => <MyAIOptPage />} />\r\n\r\n <Route path=\"/re\" component={() => <RealTimePage />} />\r\n <Route path=\"/si\" component={() => <SimulationPage />} />\r\n\r\n <Route path=\"/gs\" component={() => <GeneralStrategyPage />} />\r\n <Route path=\"/rtgs\" component={() => <RealTimeGeneralStrategyPage />} />\r\n\r\n <Route path=\"/rr\" component={() => <RollingPage />} />\r\n <Route path=\"/mrr\" component={() => <MyRollingPage />} />\r\n\r\n <Route path=\"/option\" component={() => <OptionPage />} />\r\n <Route path=\"/factor\" component={() => <FactorPage />} />\r\n <Route path=\"/factorIndex\" component={() => <FactorIndex />} />\r\n <Route path=\"/factorAnalyzer\" component={() => <FactorAnalyzer />} />\r\n\r\n <Route path=\"/hawkeye\" component={() => <HawkeyePage />} />\r\n <Route path=\"/hawkeyeList\" component={() => <HawkeyeListPage />} />\r\n\r\n <Route path=\"/member\" component={() => <RestrictedPage><Suspense fallback={<Loading />}><MemberPage /></Suspense></RestrictedPage>} />\r\n <Route path=\"/coupon\" component={() => <RestrictedPage><Suspense fallback={<Loading />}><CouponPage /></Suspense></RestrictedPage>} />\r\n\r\n <Route path=\"/about\" component={() => <AboutPage />} />\r\n\r\n <Route path=\"/blank\" component={() => <BlankPage />} />\r\n\r\n <Route path=\"/test\" component={() => <TestPage />} />\r\n <Route path=\"/td\" component={() => <TdAmeritradePage />} />\r\n \r\n <Route path=\"/service\" component={() => <ServicePage />} />\r\n <Route path=\"/charge\" component={() => <ChargePage />} />\r\n <Route path=\"/sc\" component={() => <SubscriptionPage />} />\r\n <Route path=\"/b\" component={() => <BillingPage />} />\r\n <Route path=\"/su\" component={() => <UpdatePage />} />\r\n\r\n <Route path=\"/co\" component={() => <Correlation />} />\r\n\r\n <Route path=\"/po\" component={() => <PortfolioPage />} />\r\n <Route path=\"/mpo\" component={() => <MyPortfolioPage />} />\r\n\r\n <Route path=\"/poo\" component={() => <PortfolioOptPage />} />\r\n <Route path=\"/mpoo\" component={() => <MyPortfolioOptPage />} />\r\n\r\n <Route component={PageNotFound} />\r\n </Switch>\r\n <FooterPage />\r\n </Layout>\r\n </Router>\r\n </Provider>\r\n </IntlProvider>\r\n </ConfigProvider>,\r\n rootElement);\r\n \r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\n \r\n//serviceWorker();\r\n","var phones = {\r\n 'ar-DZ': /^(\\+?213|0)(5|6|7)\\d{8}$/,\r\n 'ar-SY': /^(!?(\\+?963)|0)?9\\d{8}$/,\r\n 'ar-SA': /^(!?(\\+?966)|0)?5\\d{8}$/,\r\n 'en-US': /^(\\+?1)?[2-9]\\d{2}[2-9](?!11)\\d{6}$/,\r\n 'cs-CZ': /^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\r\n 'de-DE': /^(\\+?49[ \\.\\-])?([\\(]{1}[0-9]{1,6}[\\)])?([0-9 \\.\\-\\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,\r\n 'da-DK': /^(\\+?45)?(\\d{8})$/,\r\n 'el-GR': /^(\\+?30)?(69\\d{8})$/,\r\n 'en-AU': /^(\\+?61|0)4\\d{8}$/,\r\n 'en-GB': /^(\\+?44|0)7\\d{9}$/,\r\n 'en-HK': /^(\\+?852\\-?)?[569]\\d{3}\\-?\\d{4}$/,\r\n 'en-IN': /^(\\+?91|0)?[789]\\d{9}$/,\r\n 'en-NZ': /^(\\+?64|0)2\\d{7,9}$/,\r\n 'en-ZA': /^(\\+?27|0)\\d{9}$/,\r\n 'en-ZM': /^(\\+?26)?09[567]\\d{7}$/,\r\n 'es-ES': /^(\\+?34)?(6\\d{1}|7[1234])\\d{7}$/,\r\n 'fi-FI': /^(\\+?358|0)\\s?(4(0|1|2|4|5)?|50)\\s?(\\d\\s?){4,8}\\d$/,\r\n 'fr-FR': /^(\\+?33|0)[67]\\d{8}$/,\r\n 'he-IL': /^(\\+972|0)([23489]|5[0248]|77)[1-9]\\d{6}/,\r\n 'hu-HU': /^(\\+?36)(20|30|70)\\d{7}$/,\r\n 'it-IT': /^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$/,\r\n 'ja-JP': /^(\\+?81|0)\\d{1,4}[ \\-]?\\d{1,4}[ \\-]?\\d{4}$/,\r\n 'ms-MY': /^(\\+?6?01){1}(([145]{1}(\\-|\\s)?\\d{7,8})|([236789]{1}(\\s|\\-)?\\d{7}))$/,\r\n 'nb-NO': /^(\\+?47)?[49]\\d{7}$/,\r\n 'nl-BE': /^(\\+?32|0)4?\\d{8}$/,\r\n 'nn-NO': /^(\\+?47)?[49]\\d{7}$/,\r\n 'pl-PL': /^(\\+?48)? ?[5-8]\\d ?\\d{3} ?\\d{2} ?\\d{2}$/,\r\n 'pt-BR': /^(\\+?55|0)\\-?[1-9]{2}\\-?[2-9]{1}\\d{3,4}\\-?\\d{4}$/,\r\n 'pt-PT': /^(\\+?351)?9[1236]\\d{7}$/,\r\n 'ru-RU': /^(\\+?7|8)?9\\d{9}$/,\r\n 'sr-RS': /^(\\+3816|06)[- \\d]{5,9}$/,\r\n 'tr-TR': /^(\\+?90|0)?5\\d{9}$/,\r\n 'vi-VN': /^(\\+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,\r\n 'zh-CN': /^(\\+?0?86\\-?)?1[345789]\\d{9}$/,\r\n 'zh-TW': /^(\\+?886\\-?|0)?9\\d{8}$/\r\n};\r\n\r\nconst CodeRegExp11 = [\r\n { \"Code\": \"86\", \"RegExp\": \"^(\\\\+?0?86\\\\-?)?1[345789]\\\\d{9}$\", \"ab\": \"CN\", \"name\": \"ä¸å›½\" },\r\n { \"Code\": \"1\", \"RegExp\": \"^(\\\\+?1)?[2-9]\\\\d{2}[2-9](?!11)\\\\d{6}$\", \"ab\": \"US\", \"name\": \"美国\" },\r\n { \"Code\": \"886\", \"RegExp\": \"^(\\\\+?886\\\\-?|0)?9\\\\d{8}$\", \"ab\": \"TW\", \"name\": \"å°æ¹¾\" },\r\n { \"Code\": \"852\", \"RegExp\": \"^(\\\\+?852\\\\-?)?[569]\\\\d{3}\\\\-?\\\\d{4}$\", \"ab\": \"HK\", \"name\": \"香港\" },\r\n { \"Code\": \"60\", \"RegExp\": \"^(\\\\+?6?01){1}(([145]{1}(\\\\-|\\\\s)?\\\\d{7,8})|([236789]{1}(\\\\s|\\\\-)?\\\\d{7}))$\", \"ab\": \"MS\", \"name\": \"马æ¥è¥¿äºš\" },\r\n { \"Code\": \"63\", \"RegExp\": \"^(\\\\+?0?63\\\\-?)?\\\\d{10}$\", \"ab\": \"PH\", \"name\": \"è²å¾‹å®¾\" },\r\n { \"Code\": \"66\", \"RegExp\": \"^(\\\\+?0?66\\\\-?)?\\\\d{10}$\", \"ab\": \"TH\", \"name\": \"泰国\" },\r\n { \"Code\": \"65\", \"RegExp\": \"^(\\\\+?0?65\\\\-?)?\\\\d{10}$\", \"ab\": \"SG\", \"name\": \"æ–°åŠ å¡\" },\r\n { \"Code\": \"213\", \"RegExp\": \"^(\\\\+?213|0)(5|6|7)\\\\d{8}$\", \"ab\": \"DZ\", \"name\": \"阿尔åŠåˆ©äºš\" },\r\n { \"Code\": \"963\", \"RegExp\": \"^(!?(\\\\+?963)|0)?9\\\\d{8}$\", \"ab\": \"SY\", \"name\": \"å™åˆ©äºš\" },\r\n { \"Code\": \"966\", \"RegExp\": \"^(!?(\\\\+?966)|0)?5\\\\d{8}$\", \"ab\": \"SA\", \"name\": \"沙特阿拉伯\" },\r\n { \"Code\": \"420\", \"RegExp\": \"^(\\\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$\", \"ab\": \"CZ\", \"name\": \"æ·å…‹\" },\r\n { \"Code\": \"49\", \"RegExp\": \"^(\\\\+?49[ \\\\.\\\\-])?([\\\\(]{1}[0-9]{1,6}[\\\\)])?([0-9 \\\\.\\\\-\\\\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$\", \"ab\": \"DE\", \"name\": \"德国\" },\r\n { \"Code\": \"45\", \"RegExp\": \"^(\\\\+?45)?(\\\\d{8})$\", \"ab\": \"DK\", \"name\": \"丹麦\" },\r\n { \"Code\": \"30\", \"RegExp\": \"^(\\\\+?30)?(69\\\\d{8})$\", \"ab\": \"GR\", \"name\": \"希腊\" },\r\n { \"Code\": \"61\", \"RegExp\": \"^(\\\\+?61|0)4\\\\d{8}$\", \"ab\": \"AU\", \"name\": \"澳大利亚\" },\r\n { \"Code\": \"44\", \"RegExp\": \"^(\\\\+?44|0)7\\\\d{9}$\", \"ab\": \"GB\", \"name\": \"英国\" },\r\n { \"Code\": \"1\", \"RegExp\": \"^(\\\\+?1)?[2-9]\\\\d{2}[2-9](?!11)\\\\d{6}$\", \"ab\": \"CA\", \"name\": \"åŠ æ‹¿å¤§\" },\r\n { \"Code\": \"91\", \"RegExp\": \"^(\\\\+?91|0)?[789]\\\\d{9}$\", \"ab\": \"IN\", \"name\": \"å°åº¦\" },\r\n { \"Code\": \"64\", \"RegExp\": \"^(\\\\+?64|0)2\\\\d{7,9}$\", \"ab\": \"NZ\", \"name\": \"新西兰\" },\r\n { \"Code\": \"27\", \"RegExp\": \"^(\\\\+?27|0)\\\\d{9}$\", \"ab\": \"ZA\", \"name\": \"å—éž\" },\r\n { \"Code\": \"260\", \"RegExp\": \"^(\\\\+?26)?09[567]\\\\d{7}$\", \"ab\": \"ZM\", \"name\": \"赞比亚\" },\r\n { \"Code\": \"34\", \"RegExp\": \"^(\\\\+?34)?(6\\\\d{1}|7[1234])\\\\d{7}$\", \"ab\": \"ES\", \"name\": \"西ç牙\" },\r\n { \"Code\": \"358\", \"RegExp\": \"^(\\\\+?358|0)\\\\s?(4(0|1|2|4|5)?|50)\\\\s?(\\\\d\\\\s?){4,8}\\\\d$\", \"ab\": \"FI\", \"name\": \"芬兰\" },\r\n { \"Code\": \"33\", \"RegExp\": \"^(\\\\+?33|0)[67]\\\\d{8}$\", \"ab\": \"FR\", \"name\": \"法国\" },\r\n { \"Code\": \"972\", \"RegExp\": \"^(\\\\+972|0)([23489]|5[0248]|77)[1-9]\\\\d{6}\", \"ab\": \"IL\", \"name\": \"以色列\" },\r\n { \"Code\": \"36\", \"RegExp\": \"^(\\\\+?36)(20|30|70)\\\\d{7}$\", \"ab\": \"HU\", \"name\": \"匈牙利\" },\r\n { \"Code\": \"39\", \"RegExp\": \"^(\\\\+?39)?\\\\s?3\\\\d{2} ?\\\\d{6,7}$\", \"ab\": \"IT\", \"name\": \"æ„大利\" },\r\n { \"Code\": \"81\", \"RegExp\": \"^(\\\\+?81|0)\\\\d{1,4}[ \\\\-]?\\\\d{1,4}[ \\\\-]?\\\\d{4}$\", \"ab\": \"JP\", \"name\": \"日本\" },\r\n { \"Code\": \"47\", \"RegExp\": \"^(\\\\+?47)?[49]\\\\d{7}$\", \"ab\": \"NO\", \"name\": \"挪å¨\" },\r\n { \"Code\": \"32\", \"RegExp\": \"^(\\\\+?32|0)4?\\\\d{8}$\", \"ab\": \"BE\", \"name\": \"比利时\" },\r\n { \"Code\": \"48\", \"RegExp\": \"^(\\\\+?48)? ?[5-8]\\\\d ?\\\\d{3} ?\\\\d{2} ?\\\\d{2}$\", \"ab\": \"PL\", \"name\": \"波兰\" },\r\n { \"Code\": \"55\", \"RegExp\": \"^(\\\\+?55|0)\\\\-?[1-9]{2}\\\\-?[2-9]{1}\\\\d{3,4}\\\\-?\\\\d{4}$\", \"ab\": \"BR\", \"name\": \"巴西\" },\r\n { \"Code\": \"351\", \"RegExp\": \"^(\\\\+?351)?9[1236]\\\\d{7}$\", \"ab\": \"PT\", \"name\": \"è‘¡è„牙\" },\r\n { \"Code\": \"7\", \"RegExp\": \"^(\\\\+?7|8)?9\\\\d{9}$\", \"ab\": \"RU\", \"name\": \"ä¿„ç½—æ–¯\" },\r\n { \"Code\": \"381\", \"RegExp\": \"^(\\\\+3816|06)[- \\\\d]{5,9}$\", \"ab\": \"RS\", \"name\": \"塞尔维亚\" },\r\n { \"Code\": \"90\", \"RegExp\": \"^(\\\\+?90|0)?5\\\\d{9}$\", \"ab\": \"TR\", \"name\": \"土耳其\" },\r\n { \"Code\": \"84\", \"RegExp\": \"^(\\\\+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$\", \"ab\": \"VN\", \"name\": \"è¶Šå—\" }\r\n];\r\n\r\nconst CodeRegExp = [\r\n {\r\n pattern: '^(1){0,1}\\\\d{10,12}$',\r\n code: '1',\r\n text: '美国',\r\n des: 'US'\r\n },\r\n {\r\n pattern: '^(86){0,1}1[3,4,5,7,8,9]\\\\d{9}$',\r\n code: '86',\r\n text: 'ä¸å›½å¤§é™†',\r\n des: 'CN'\r\n },\r\n {\r\n pattern: '^(886){0,1}0{0,1}[6,7,9](?:\\\\d{7}|\\\\d{8}|\\\\d{10})$',\r\n code: '886',\r\n text: 'ä¸å›½å°æ¹¾',\r\n des: 'TW'\r\n },\r\n {\r\n pattern: '^(852){0,1}0{0,1}[1,5,6,9](?:\\\\d{7}|\\\\d{8}|\\\\d{12})$',\r\n code: '852',\r\n text: 'ä¸å›½é¦™æ¸¯',\r\n des: 'HK'\r\n },\r\n {\r\n pattern: '^(853){0,1}6\\\\d{7}$',\r\n code: '853',\r\n text: 'ä¸å›½æ¾³é—¨',\r\n des: 'MO'\r\n },\r\n {\r\n pattern: '^(60){0,1}1\\\\d{8,9}$',\r\n code: '60',\r\n text: '马æ¥è¥¿äºš',\r\n des: 'MY'\r\n },\r\n {\r\n pattern: '^(65){0,1}[13689]\\\\d{6,7}$',\r\n code: '65',\r\n text: 'æ–°åŠ å¡',\r\n des: 'SG'\r\n },\r\n {\r\n pattern: '^(81){0,1}0{0,1}[7,8,9](?:\\\\d{8}|\\\\d{9})$',\r\n code: '81',\r\n text: '日本',\r\n des: 'JP'\r\n },\r\n {\r\n pattern: '^(82){0,1}0{0,1}[7,1](?:\\\\d{8}|\\\\d{9})$',\r\n code: '82',\r\n text: '韩国',\r\n des: 'KR'\r\n },\r\n {\r\n pattern: '^(1){0,1}\\\\d{10}$',\r\n code: '1',\r\n text: 'åŠ æ‹¿å¤§',\r\n des: 'CA'\r\n },\r\n {\r\n pattern: '^(61){0,1}4\\\\d{8,9}$',\r\n code: '61',\r\n text: '澳大利亚',\r\n des: 'AU'\r\n },\r\n {\r\n pattern: '^(64){0,1}[278]\\\\d{7,9}$',\r\n code: '64',\r\n text: '新西兰',\r\n des: 'NZ'\r\n },\r\n {\r\n pattern: '^(355){0,1}\\\\d{6,15}$',\r\n code: '355',\r\n text: '阿尔希尼亚',\r\n des: 'AL'\r\n },\r\n {\r\n pattern: '^(54){0,1}\\\\d{6,12}$',\r\n code: '54',\r\n text: 'é˜¿æ ¹å»·',\r\n des: 'AR'\r\n },\r\n {\r\n pattern: '^(971){0,1}\\\\d{6,12}$',\r\n code: '971',\r\n text: '阿è”é…‹',\r\n des: 'AE'\r\n },\r\n {\r\n pattern: '^(968){0,1}\\\\d{6,15}$',\r\n code: '968',\r\n text: '阿曼',\r\n des: 'OM'\r\n },\r\n {\r\n pattern: '^(994){0,1}\\\\d{6,15}$',\r\n code: '994',\r\n text: '阿塞拜疆',\r\n des: 'AZ'\r\n },\r\n {\r\n pattern: '^(353){0,1}\\\\d{6,12}$',\r\n code: '353',\r\n text: '爱尔兰',\r\n des: 'IE'\r\n },\r\n {\r\n pattern: '^(20){0,1}\\\\d{6,12}$',\r\n code: '20',\r\n text: '埃åŠ',\r\n des: 'EG'\r\n },\r\n {\r\n pattern: '^(372){0,1}\\\\d{6,12}$',\r\n code: '372',\r\n text: '爱沙尼亚',\r\n des: 'EE'\r\n },\r\n {\r\n pattern: '^(244){0,1}\\\\d{6,15}$',\r\n code: '244',\r\n text: '安哥拉',\r\n des: 'AO'\r\n },\r\n {\r\n pattern: '^(43){0,1}\\\\d{6,12}$',\r\n code: '43',\r\n text: '奥地利',\r\n des: 'AT'\r\n },\r\n {\r\n pattern: '^(675){0,1}\\\\d{6,15}$',\r\n code: '672',\r\n text: 'å·´å¸ƒäºšæ–°å‡ å†…äºš',\r\n des: 'PG'\r\n },\r\n {\r\n pattern: '^(1242){0,1}\\\\d{6,12}$',\r\n code: '1242',\r\n text: '巴哈马',\r\n des: 'BS'\r\n },\r\n {\r\n pattern: '^(970){0,1}\\\\d{6,15}$',\r\n code: '970',\r\n text: 'å·´å‹’æ–¯å¦',\r\n des: 'PS'\r\n },\r\n {\r\n pattern: '^(973){0,1}\\\\d{6,15}$',\r\n code: '973',\r\n text: 'å·´æž—',\r\n des: 'BH'\r\n },\r\n {\r\n pattern: '^(507){0,1}\\\\d{6,12}$',\r\n code: '507',\r\n text: '巴拿马',\r\n des: 'PA'\r\n },\r\n {\r\n pattern: '^(55){0,1}\\\\d{6,12}$',\r\n code: '55',\r\n text: '巴西',\r\n des: 'BR'\r\n },\r\n {\r\n pattern: '^(375){0,1}\\\\d{6,12}$',\r\n code: '375',\r\n text: '白俄罗斯',\r\n des: 'BY'\r\n },\r\n {\r\n pattern: '^(359){0,1}\\\\d{6,12}$',\r\n code: '359',\r\n text: 'ä¿åŠ åˆ©äºš',\r\n des: 'BG'\r\n },\r\n {\r\n pattern: '^(229){0,1}\\\\d{6,15}$',\r\n code: '229',\r\n text: 'è´å®',\r\n des: 'BJ'\r\n },\r\n {\r\n pattern: '^(32){0,1}\\\\d{6,12}$',\r\n code: '32',\r\n text: '比利时',\r\n des: 'BE'\r\n },\r\n {\r\n pattern: '^(51){0,1}\\\\d{6,12}$',\r\n code: '51',\r\n text: '秘é²',\r\n des: 'PE'\r\n },\r\n {\r\n pattern: '^(48){0,1}\\\\d{6,12}$',\r\n code: '48',\r\n text: '波兰',\r\n des: 'PL'\r\n },\r\n {\r\n pattern: '^(591){0,1}\\\\d{6,15}$',\r\n code: '591',\r\n text: '玻利维亚',\r\n des: 'BO'\r\n },\r\n {\r\n pattern: '^(501){0,1}\\\\d{6,12}$',\r\n code: '501',\r\n text: '伯利兹',\r\n des: 'BZ'\r\n },\r\n {\r\n pattern: '^(226){0,1}\\\\d{6,15}$',\r\n code: '226',\r\n text: '布基纳法索',\r\n des: 'BF'\r\n },\r\n {\r\n pattern: '^(240){0,1}\\\\d{6,15}$',\r\n code: '240',\r\n text: '赤é“å‡ å†…äºš',\r\n des: 'GQ'\r\n },\r\n {\r\n pattern: '^(45){0,1}\\\\d{6,12}$',\r\n code: '45',\r\n text: '丹麦',\r\n des: 'DK'\r\n },\r\n {\r\n pattern: '^(49){0,1}1(\\\\d{5,6}|\\\\d{9,12})$',\r\n code: '49',\r\n text: '德国',\r\n des: 'DE'\r\n },\r\n {\r\n pattern: '^(228){0,1}\\\\d{6,15}$',\r\n code: '228',\r\n text: '多哥',\r\n des: 'TG'\r\n },\r\n {\r\n pattern: '^(7){0,1}[13489]\\\\d{9,11}$',\r\n code: '7',\r\n text: 'ä¿„ç½—æ–¯',\r\n des: 'RU'\r\n },\r\n {\r\n pattern: '^(33){0,1}(\\\\d{6}|\\\\d{8,9})$',\r\n code: '33',\r\n text: '法国',\r\n des: 'FR'\r\n },\r\n {\r\n pattern: '^(63){0,1}[24579](\\\\d{7,9}|\\\\d{12})$',\r\n code: '63',\r\n text: 'è²å¾‹å®¾',\r\n des: 'PH'\r\n },\r\n {\r\n pattern: '^(358){0,1}\\\\d{6,12}$',\r\n code: '358',\r\n text: '芬兰',\r\n des: 'FI'\r\n },\r\n {\r\n pattern: '^(238){0,1}\\\\d{6,15}$',\r\n code: '238',\r\n text: '佛得角',\r\n des: 'CV'\r\n },\r\n {\r\n pattern: '^(220){0,1}\\\\d{6,15}$',\r\n code: '220',\r\n text: '冈比亚',\r\n des: 'GM'\r\n },\r\n {\r\n pattern: '^(1473){0,1}\\\\d{6,15}$',\r\n code: '1473',\r\n text: 'æ ¼å…°çº³è¾¾',\r\n des: 'GD'\r\n },\r\n {\r\n pattern: '^(995){0,1}\\\\d{6,15}$',\r\n code: '995',\r\n text: 'æ ¼é²å‰äºš',\r\n des: 'GE'\r\n },\r\n {\r\n pattern: '^(57){0,1}\\\\d{6,12}$',\r\n code: '57',\r\n text: '哥伦比亚',\r\n des: 'CO'\r\n },\r\n {\r\n pattern: '^(506){0,1}\\\\d{6,15}$',\r\n code: '506',\r\n text: 'å“¥æ–¯è¾¾é»ŽåŠ ',\r\n des: 'CR'\r\n },\r\n {\r\n pattern: '^(592){0,1}\\\\d{6,15}$',\r\n code: '592',\r\n text: 'åœäºšé‚£',\r\n des: 'GY'\r\n },\r\n {\r\n pattern: '^(31){0,1}6\\\\d{8}$',\r\n code: '31',\r\n text: 'è·å…°',\r\n des: 'NL'\r\n },\r\n {\r\n pattern: '^(504){0,1}\\\\d{6,15}$',\r\n code: '504',\r\n text: '洪都拉斯',\r\n des: 'HN'\r\n },\r\n {\r\n pattern: '^(253){0,1}\\\\d{6,15}$',\r\n code: '253',\r\n text: 'å‰å¸ƒæ',\r\n des: 'DJ'\r\n },\r\n {\r\n pattern: '^(996){0,1}\\\\d{6,12}$',\r\n code: '996',\r\n text: 'å‰å°”剿–¯æ–¯å¦',\r\n des: 'KG'\r\n },\r\n {\r\n pattern: '^(224){0,1}\\\\d{6,15}$',\r\n code: '224',\r\n text: 'å‡ å†…äºš',\r\n des: 'GN'\r\n },\r\n {\r\n pattern: '^(245){0,1}\\\\d{6,15}$',\r\n code: '245',\r\n text: 'å‡ å†…äºšæ¯”ç»',\r\n des: 'GW'\r\n },\r\n {\r\n pattern: '^(241){0,1}\\\\d{6,15}$',\r\n code: '241',\r\n text: 'åŠ è“¬',\r\n des: 'GA'\r\n },\r\n {\r\n pattern: '^(855){0,1}\\\\d{6,12}$',\r\n code: '855',\r\n text: '柬埔寨',\r\n des: 'KH'\r\n },\r\n {\r\n pattern: '^(263){0,1}\\\\d{6,15}$',\r\n code: '263',\r\n text: '津巴布韦',\r\n des: 'ZW'\r\n },\r\n {\r\n pattern: '^(237){0,1}\\\\d{6,15}$',\r\n code: '237',\r\n text: '喀麦隆',\r\n des: 'CM'\r\n },\r\n {\r\n pattern: '^(974){0,1}\\\\d{6,12}$',\r\n code: '974',\r\n text: 'å¡å¡”å°”',\r\n des: 'QA'\r\n },\r\n {\r\n pattern: '^(1345){0,1}\\\\d{6,15}$',\r\n code: '1345',\r\n text: '开曼群岛',\r\n des: 'KY'\r\n },\r\n {\r\n pattern: '^(385){0,1}\\\\d{6,15}$',\r\n code: '385',\r\n text: '克罗地亚',\r\n des: 'HR'\r\n },\r\n {\r\n pattern: '^(269){0,1}\\\\d{6,15}$',\r\n code: '269',\r\n text: 'ç§‘æ‘©ç½—',\r\n des: 'KM'\r\n },\r\n {\r\n pattern: '^(965){0,1}\\\\d{6,15}$',\r\n code: '965',\r\n text: 'ç§‘å¨ç‰¹',\r\n des: 'KW'\r\n },\r\n {\r\n pattern: '^(254){0,1}\\\\d{6,15}$',\r\n code: '254',\r\n text: '肯尼亚',\r\n des: 'KE'\r\n },\r\n {\r\n pattern: '^(371){0,1}\\\\d{6,15}$',\r\n code: '371',\r\n text: '拉脱维亚',\r\n des: 'LV'\r\n },\r\n {\r\n pattern: '^(266){0,1}\\\\d{6,15}$',\r\n code: '266',\r\n text: '莱索托',\r\n des: 'LS'\r\n },\r\n {\r\n pattern: '^(370){0,1}\\\\d{6,12}$',\r\n code: '370',\r\n text: 'ç«‹é™¶å®›',\r\n des: 'LT'\r\n },\r\n {\r\n pattern: '^(352){0,1}\\\\d{6,12}$',\r\n code: '352',\r\n text: '墿£®å ¡',\r\n des: 'LU'\r\n },\r\n {\r\n pattern: '^(250){0,1}\\\\d{6,15}$',\r\n code: '250',\r\n text: '墿—ºè¾¾',\r\n des: 'RW'\r\n },\r\n {\r\n pattern: '^(40){0,1}\\\\d{6,12}$',\r\n code: '40',\r\n text: '罗马尼亚',\r\n des: 'RO'\r\n },\r\n {\r\n pattern: '^(261){0,1}\\\\d{6,15}$',\r\n code: '261',\r\n text: 'é©¬è¾¾åŠ æ–¯åŠ ',\r\n des: 'MG'\r\n },\r\n {\r\n pattern: '^(960){0,1}\\\\d{6,12}$',\r\n code: '960',\r\n text: '马尔代夫',\r\n des: 'MV'\r\n },\r\n {\r\n pattern: '^(265){0,1}\\\\d{6,15}$',\r\n code: '265',\r\n text: '马拉维',\r\n des: 'MW'\r\n },\r\n {\r\n pattern: '^(223){0,1}\\\\d{6,15}$',\r\n code: '223',\r\n text: '马里',\r\n des: 'ML'\r\n },\r\n {\r\n pattern: '^(230){0,1}\\\\d{6,15}$',\r\n code: '230',\r\n text: '毛里求斯',\r\n des: 'MU'\r\n },\r\n {\r\n pattern: '^(222){0,1}\\\\d{6,15}$',\r\n code: '222',\r\n text: '毛里塔尼亚',\r\n des: 'MR'\r\n },\r\n {\r\n pattern: '^(976){0,1}\\\\d{6,12}$',\r\n code: '976',\r\n text: 'è’™å¤',\r\n des: 'MN'\r\n },\r\n {\r\n pattern: '^(373){0,1}\\\\d{6,15}$',\r\n code: '373',\r\n text: '摩尔多瓦',\r\n des: 'MD'\r\n },\r\n {\r\n pattern: '^(212){0,1}\\\\d{6,12}$',\r\n code: '212',\r\n text: '摩洛哥',\r\n des: 'MA'\r\n },\r\n {\r\n pattern: '^(258){0,1}\\\\d{6,15}$',\r\n code: '258',\r\n text: '莫桑比克',\r\n des: 'MZ'\r\n },\r\n {\r\n pattern: '^(52){0,1}\\\\d{6,12}$',\r\n code: '52',\r\n text: '墨西哥',\r\n des: 'MX'\r\n },\r\n {\r\n pattern: '^(264){0,1}\\\\d{6,15}$',\r\n code: '264',\r\n text: '纳米比亚',\r\n des: 'NA'\r\n },\r\n {\r\n pattern: '^(27){0,1}\\\\d{6,12}$',\r\n code: '27',\r\n text: 'å—éž',\r\n des: 'ZA'\r\n },\r\n {\r\n pattern: '^(505){0,1}\\\\d{6,15}$',\r\n code: '505',\r\n text: 'å°¼åŠ æ‹‰ç“œ',\r\n des: 'NI'\r\n },\r\n {\r\n pattern: '^(227){0,1}\\\\d{6,15}$',\r\n code: '227',\r\n text: '尼日尔',\r\n des: 'NE'\r\n },\r\n {\r\n pattern: '^(234){0,1}\\\\d{6,12}$',\r\n code: '234',\r\n text: '尼日利亚',\r\n des: 'NG'\r\n },\r\n {\r\n pattern: '^(47){0,1}\\\\d{6,12}$',\r\n code: '47',\r\n text: '挪å¨',\r\n des: 'NO'\r\n },\r\n {\r\n pattern: '^(351){0,1}\\\\d{6,12}$',\r\n code: '351',\r\n text: 'è‘¡è„牙',\r\n des: 'PT'\r\n },\r\n {\r\n pattern: '^(46){0,1}[124-7](\\\\d{8}|\\\\d{10}|\\\\d{12})$',\r\n code: '46',\r\n text: '瑞典',\r\n des: 'SE'\r\n },\r\n {\r\n pattern: '^(41){0,1}\\\\d{6,12}$',\r\n code: '41',\r\n text: '瑞士',\r\n des: 'CH'\r\n },\r\n {\r\n pattern: '^(503){0,1}\\\\d{6,15}$',\r\n code: '503',\r\n text: 'è¨å°”瓦多',\r\n des: 'SV'\r\n },\r\n {\r\n pattern: '^(381){0,1}\\\\d{6,12}$',\r\n code: '381',\r\n text: '塞尔维亚',\r\n des: 'RS'\r\n },\r\n {\r\n pattern: '^(232){0,1}\\\\d{6,15}$',\r\n code: '232',\r\n text: '塞拉利昂',\r\n des: 'SL'\r\n },\r\n {\r\n pattern: '^(221){0,1}\\\\d{6,15}$',\r\n code: '221',\r\n text: 'å¡žå†…åŠ å°”',\r\n des: 'SN'\r\n },\r\n {\r\n pattern: '^(357){0,1}\\\\d{6,15}$',\r\n code: '357',\r\n text: '塞浦路斯',\r\n des: 'CY'\r\n },\r\n {\r\n pattern: '^(248){0,1}\\\\d{6,15}$',\r\n code: '248',\r\n text: '塞舌尔',\r\n des: 'SC'\r\n },\r\n {\r\n pattern: '^(966){0,1}\\\\d{6,12}$',\r\n code: '996',\r\n text: '沙特阿拉伯',\r\n des: 'SA'\r\n },\r\n {\r\n pattern: '^(94){0,1}\\\\d{6,12}$',\r\n code: '94',\r\n text: '斯里兰å¡',\r\n des: 'LK'\r\n },\r\n {\r\n pattern: '^(421){0,1}\\\\d{6,15}$',\r\n code: '421',\r\n text: '斯洛ä¼å…‹',\r\n des: 'SK'\r\n },\r\n {\r\n pattern: '^(386){0,1}\\\\d{6,15}$',\r\n code: '386',\r\n text: '斯洛文尼亚',\r\n des: 'SI'\r\n },\r\n {\r\n pattern: '^(268){0,1}\\\\d{6,15}$',\r\n code: '268',\r\n text: 'æ–¯å¨å£«å…°',\r\n des: 'SZ'\r\n },\r\n {\r\n pattern: '^(992){0,1}\\\\d{6,15}$',\r\n code: '992',\r\n text: 'å¡”å‰å…‹æ–¯å¦',\r\n des: 'TJ'\r\n },\r\n {\r\n pattern: '^(66){0,1}[13456789]\\\\d{7,8}$',\r\n code: '66',\r\n text: '泰国',\r\n des: 'TH'\r\n },\r\n {\r\n pattern: '^(255){0,1}\\\\d{6,15}$',\r\n code: '255',\r\n text: '妿¡‘尼亚',\r\n des: 'TZ'\r\n },\r\n {\r\n pattern: '^(1868){0,1}\\\\d{6,15}$',\r\n code: '1868',\r\n text: '特立尼达和多巴哥',\r\n des: 'TT'\r\n },\r\n {\r\n pattern: '^(90){0,1}\\\\d{6,12}$',\r\n code: '90',\r\n text: '土耳其',\r\n des: 'TR'\r\n },\r\n {\r\n pattern: '^(993){0,1}\\\\d{6,15}$',\r\n code: '993',\r\n text: '土库曼斯å¦',\r\n des: 'TM'\r\n },\r\n {\r\n pattern: '^(216){0,1}\\\\d{6,12}$',\r\n code: '216',\r\n text: 'çªå°¼æ–¯',\r\n des: 'TN'\r\n },\r\n {\r\n pattern: '^(502){0,1}\\\\d{6,15}$',\r\n code: '502',\r\n text: 'å±åœ°é©¬æ‹‰',\r\n des: 'GT'\r\n },\r\n {\r\n pattern: '^(58){0,1}\\\\d{6,12}$',\r\n code: '58',\r\n text: '委内瑞拉',\r\n des: 'VE'\r\n },\r\n {\r\n pattern: '^(673){0,1}\\\\d{6,15}$',\r\n code: '673',\r\n text: '文莱',\r\n des: 'BN'\r\n },\r\n {\r\n pattern: '^(256){0,1}\\\\d{6,15}$',\r\n code: '256',\r\n text: '乌干达',\r\n des: 'UG'\r\n },\r\n {\r\n pattern: '^(380){0,1}[3-79]\\\\d{8,9}$',\r\n code: '380',\r\n text: '乌克兰',\r\n des: 'UA'\r\n },\r\n {\r\n pattern: '^(598){0,1}\\\\d{6,15}$',\r\n code: '598',\r\n text: '乌拉åœ',\r\n des: 'UY'\r\n },\r\n {\r\n pattern: '^(998){0,1}\\\\d{6,15}$',\r\n code: '998',\r\n text: '乌兹别克斯å¦',\r\n des: 'UZ'\r\n },\r\n {\r\n pattern: '^(34){0,1}\\\\d{6,12}$',\r\n code: '34',\r\n text: '西ç牙',\r\n des: 'ES'\r\n },\r\n {\r\n pattern: '^(30){0,1}\\\\d{6,12}$',\r\n code: '30',\r\n text: '希腊',\r\n des: 'GR'\r\n },\r\n {\r\n pattern: '^(36){0,1}\\\\d{6,12}$',\r\n code: '36',\r\n text: '匈牙利',\r\n des: 'HU'\r\n },\r\n {\r\n pattern: '^(1876){0,1}\\\\d{6,15}$',\r\n code: '1876',\r\n text: 'ç‰™ä¹°åŠ ',\r\n des: 'JM'\r\n },\r\n {\r\n pattern: '^(967){0,1}\\\\d{6,15}$',\r\n code: '967',\r\n text: '也门',\r\n des: 'YE'\r\n },\r\n {\r\n pattern: '^(39){0,1}[37]\\\\d{8,11}$',\r\n code: '39',\r\n text: 'æ„大利',\r\n des: 'IT'\r\n },\r\n {\r\n pattern: '^(972){0,1}\\\\d{6,12}$',\r\n code: '972',\r\n text: '以色列',\r\n des: 'IL'\r\n },\r\n {\r\n pattern: '^(91){0,1}\\\\d{6,12}$',\r\n code: '91',\r\n text: 'å°åº¦',\r\n des: 'IN'\r\n },\r\n {\r\n pattern: '^(62){0,1}[2-9]\\\\d{7,11}$',\r\n code: '62',\r\n text: 'å°åº¦å°¼è¥¿äºš',\r\n des: 'ID'\r\n },\r\n {\r\n pattern: '^(44){0,1}[347-9](\\\\d{8,9}|\\\\d{11,12})$',\r\n code: '44',\r\n text: '英国',\r\n des: 'GB'\r\n },\r\n {\r\n pattern: '^(1284){0,1}\\\\d{6,12}$',\r\n code: '1284',\r\n text: '英属维尔京群岛',\r\n des: 'VG'\r\n },\r\n {\r\n pattern: '^(962){0,1}\\\\d{6,12}$',\r\n code: '962',\r\n text: '约旦',\r\n des: 'JO'\r\n },\r\n {\r\n pattern: '^(84){0,1}[1-9]\\\\d{6,9}$',\r\n code: '84',\r\n text: 'è¶Šå—',\r\n des: 'VN'\r\n },\r\n {\r\n pattern: '^(260){0,1}\\\\d{6,15}$',\r\n code: '260',\r\n text: '赞比亚',\r\n des: 'ZM'\r\n },\r\n {\r\n pattern: '^(235){0,1}\\\\d{6,15}$',\r\n code: '235',\r\n text: 'ä¹å¾—',\r\n des: 'TD'\r\n },\r\n {\r\n pattern: '^(56){0,1}\\\\d{6,12}$',\r\n code: '56',\r\n text: '智利',\r\n des: 'CL'\r\n }\r\n];\r\n\r\nexport default CodeRegExp;","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();"],"sourceRoot":""}